0%

소프트웨어 테스트

  • 소프트웨어의 결함을 최대한 찾아내 줄이고, 소프트웨어의 품질을 높인다.

테스트의 필요성과 특징

소트프웨어 테스트의 정의

  • IEEE : 테스트는 시스템이 명시된 요구를 잘 만족하는지, 즉 예상된 결과와 실제 결과가 어떤 차이를 보이는지 수동이나 자동으로 검사하고 이를 평가하는 작업을 의미한다.
  • 조하 만나 : 테스트는 시스템의 명세까지 완벽하게 옳다고 확신할 수 없고, 테스트 시스템 그 자체가 맞다고 증명할 수 없기 때문에 프로그램을 완전히 테스트할 수 없다.
  • 달, 다익스트라, 호어 : 테스트는 결함이 있음을 보여줄 뿐, 결함이 없음을 증명할 수는 없다.

결국 소프트웨어 테스트는 **’소프트웨어 내에 존재하지만 드러나지 않고 숨어 있는 오류를 발견할 목적으로 개발 과정에서 생성되는 문서나 프로그램에 있는 오류를 여러 기술을 이용해 검출하는 작업’**이다.

  • 작은 의미 : 원시 코드 속에 남아 있는 오류를 발견하는 것
  • 큰 의미 : 개발된 소프트웨어가 고객의 요구를 만족하는지 확인해주는 것
    Read more »

  • ARM (Advanced RISC machine)
  • CISC(complex instruction set computer)
    Micro programming 방식 : 기계어 하나를 실행하기 위해 많은 양의 작은 micro instruction들이 숨어서 실행
  • RISC(Reduced Instruction set computer)
    Hard wired 방식 : 기계어 한줄을 실행하기 위하여, 그에 해당하는 노리회로를 구성하여 구현하는 방식.
Read more »

  • 정렬 비교

Bubble Sort

1
2
3
4
5
6
7
8
9
10
11
12
13
void bubble_sort(vector<int> &vec){

for (int i=0; i<vec.size()-1;i++){
for(int j=1; j<vec.size()-i; j++){

if(vec[j-1] > vec[j]){
int tmp = vec[j-1];
vec[j-1] = vec[j];
vec[j] = tmp;
}
}
}
}

bubble-sort-001

  • 시간 복잡도 : n(n-1)/2 => O(N^2)
  • 공간 복잡도 : O(N)
  • Stable sort.
    Read more »

  1. 커버리지 측정 계산은 어떻게 하는 것일까?
  2. coverage guided 퍼징 시 커버리지 측정이 어디까지 되는것인가?, 어느 부분이 필요한가?
  3. Windows 프로그램을 예시로, A회사의 프로그램을 퍼징하면서 WINAPI의 취약점을 찾을 수 도 있는 것일까?
  • 조사를 통해 의문에 대한 나만의 답을 찾았지만, 잘 못 이해한것일 수 도 있으니 참고만 하자.
    Read more »

https://www.fuzzingbook.org/html/MutationFuzzer.html

  • 대부분의 randomly generated inputs은 구문적으로 invalid하기에 프로그램에 의해 빠르게 거부된다.
  • 따라서 유요한 입력을 얻을 수 있는 기회를 늘려야 한다.
  • 그러한 방법 중 하나가 mutation fuzzing이다.
  • 즉, 입력을 유효하게 유지하면서도 새로운 동작을 수행할 수 있도록 기존 입력에 작은 mutate를 하는 것이다.
  • AFL 퍼저는 위와 같은 개념의 fuzzing을 진행한다.
    Read more »

https://www.fuzzingbook.org/html/Coverage.html

  • Coverage란, 소프트웨어 테스팅을 하는데 사용되는 지표 중 하나로, Code가 얼마나 실행되었느냐를 측정한다.
  • Coverage를 측정하기 위해 instrumentation을 한다.
  • instrumentation은 작성된 코드가 실행되는 지를 확인하는 코드를 작성된 코드 사이사이에 삽입하는 것을 뜻한다.
  1. Function coverage : 함수가 최소한 한 번 실행되었는 가를 측정한다. function call을 했는지만을 확인하기 때문에 해당 function안의 모든 코드가 실행되었는 지는 확인할 수 없다.
  1. Statement coverage : 각 statement가 실행 되었는지를 측정한다.
    • 장점 : object code에 바로 적용 될 수 있다.
    • 단점 : 특정 조건분기문에서 에러를 찾아내지 못할 가능성이 있다.
      1
      2
      3
      4
      int *p = NULL;
      if(condition)
      p = &a;
      *p = 123;
  • condition이 false라면 null pointer error가 발생한다. 이때 coverage가 달성되었다고 하겠지만, 모든 경우를 test했다고 보장 할 수 없다.
Read more »

https://www.fuzzingbook.org/html/Fuzzer.html

The essence of fuzzing : Create random inputs, and see if they break things.


Synopsis

Fuzzing 아키텍처에 대한 소개

  • Fuzzer as a base class for fuzzers.
  • Runner as a base class for programs under test.(PUT)

Fuzzers

image

  • Fuzzer는 fuzzer들에 대한 기본 클래스로 RandomFuzzer와 같이 확장해서 쓸 쑤 있다.

  • fuzz() 함수는 input을 생성하여 반환한다.

  • run() 함수는 fuzz()에서 생성된 input을 put에 넣어 fuzzing을 실행한다.

  • runs() 함수는 반복적으로 run()을 실행한다.

    Read more »

자율주행차 서비스

1

  • 자율주행차 서비스로는 셔틀 및 온-디멘드, 카쉐어링, 주차, 배송, 군집 주행, 어시스턴트, C-ITS 등이 있다.
  • 차량은 V2X 통신을 위하여 셀룰러 통신, WAVE통신 등을 한다.
  • 셔틀 및 온-디멘스, 배송 서비스 등은 차량의 각종 정보를 백엔드 인프라로 전송한다.
  • 군집 주행 및 어시스턴트 서비스는 차량 간 정보를 공유하며 원격 제어 등 편의 기능을 제공한다.
  • C-ITS 서비스는 주행 중에 필요한 교통 상황과 도로정보를 실시간으로 제공한다.
  • 자율주행차 서비스 보안 부분으로는 차량 보안, 백엔드 인프라 보안, 통신 채널 보안 등이 있다.
Read more »

  • CVE-2019-2525와 CVE-2019-2548을 이용한 VM exploit.

CVE-2019-2525

  • OOB Read in crUnpackExtendGetAttribLocation

Root Cause

1
2
3
4
5
6
7
8
9
void crUnpackExtendGetUniformLocation(void)
{
int packet_length = READ_DATA(0, int);
GLuint program = READ_DATA(8, GLuint);
const char *name = DATA_POINTER(12, const char);
SET_RETURN_PTR(packet_length-16);
SET_WRITEBACK_PTR(packet_length-8);
cr_unpackDispatch.GetUniformLocation(program, name);
}
1
2
3
4
5
6
7
8
9
#define SET_RETURN_PTR( offset ) do { \
CRDBGPTR_CHECKZ(return_ptr); \
crMemcpy( return_ptr, cr_unpackData + (offset), sizeof( *return_ptr ) ); \
} while (0);

#define SET_WRITEBACK_PTR( offset ) do { \
CRDBGPTR_CHECKZ(writeback_ptr); \
crMemcpy( writeback_ptr, cr_unpackData + (offset), sizeof( *writeback_ptr ) ); \
} while (0);
  • SET_XX(OFFSET)에서 crMemcpy(XX, cr_unpackData + OFFSET, 8) 연산 후, 값을 guest로 보낸다.
  • 이 때 OFFSET(packet_length)을 체크하지 않아 16바이트 Memory Leak이 가능하다.
Read more »

  • CVE-2019-2525과 CVE-2019-2548을 이용한 VM exploit.

Background

3D Acceleration

  • VirtaulBox는 3D Acceleration를 제공한다.
  • 보통 VM에서 3D기능을 사용하면 속도가 느려지는데
  • 3D Acceleration는 호스트(실제 컴퓨터의)의 3D 하드웨어를 사용하게 한다.
  • (가상머신 -> 실제 하드웨어 접근)
    Read more »