2013. 1. 29. 11:15

 [ 출처 : http://mystic24.egloos.com/901967 ]

 

 

Fuzz란 소프트웨어에 랜덤 데이터를 입력함으로써 소프트웨어의 조직적인 실패를 유발함으로써 소프트웨어의 보안적 취약점을 찾아내는 것을 의미하며 Fuzzing은 오늘날 가장 효과적인 소프트웨어의 보안 테스트로 접근되고 있다.

최근 관련 서적을 읽으면서 아직 초반 부분정도로 밖에 읽지는 않았지만 지금까지 읽는 내용을 정리해보려고 한다.


취약점을 발견하는 방법
* White Box Testing
  - 소스코드 리뷰를 통해 프로그램의 취약점을 발견하는 방법
  - 관련 코드 감시 툴
   - RATS, ITS4, SPlint, FlawFinder, jLint, CodeSpy

* Black Box Testing
  - 단계적인 테스팅을 통한 프로그램의 관찰
  - 자동화된 테스팅, Fuzzing

* Gray Box Testing
 - White Box Test 와 Black Box Test 의 중간 단계
 - 이진 데이터의 감시
  - LogiScan, BugScam, Inspector, SecurityReview, BinAudit

Fuzzer에 의해 전형적으로 들어나 있는 취약점
 * Access Control 의 결점
 * 잘못된 로직 디자인
 * 백도어
 * 메모리의 부패 (엉뚱한 메모리 값)

Fuzzing의 방법
 * 테스트 케이스의 선행
 * 랜덤 데이터의 주입
 * 프로토콜의 변형 테스트
 * 변형 또는 거칠게 주입시키는 테스트
 * 자동화된 프로토콜을 생성

Fuzzer의 종류
 * 로컬 Fuzzer
  - 프로그램 실행 변수(Command-Line) 및 환경 변수, 파일포멧을 통한 Fuzzer
 * 원격 조작
 * 네트워크 프로토콜
 * 웹 어플리케이션
 * 웹 브라우져
 * In-Memory
 * 프레임워크

효과적인 Fuzzing을 위한 필요조건
 * 문서화
 * 재사용성
 * 프로세스의 상태와 깊이
 * 트래킹, 코드보호
 * 에러 검출
  - 에러를 모니터링 하여 전달
 * 리소스 제한


자동화와 데이터의 생산
 * 관련 툴 및 라이브러리
  - Ethereal. Wireshark
  - LIBDASM, LIBDISASM
  - Libnet, LibnetNT
  - LinPCSP
  - Metro Packet Library
  - PTrace
  - Python Extensions
 
 * 데이터의 생성과 Fuzz 발견법
  - 정수값
   - 예를 들어, 다음과 같은 코드가 있다고 하자

int size = red_ccr_size(packet);
buffer = (char*) malloc(size + 1);


    이러한 코드의 접근은 메모리 오버플로우가 발생 할 수 있다. (즉 size 값이 0xFFFFFFFF 의 극한의 데이터라면 size + 1 = 0, 메모리 오버플로우가 발생하게 된다. 반대의 경우도 언더플로우가 발생할 수 있다).
   만약 데이터를 할당시에 size에 곱하기가 이루어 질 경우 이 좀더 낮은 숫자값으로도 발생

buffer = (char*) malloc((size * 2) + 1);

  - 스트링의 반복
  - 필드의 경계부호
   - ex) !@#$%^&*()-_=+{}|\;:'",<.>/?~`
  - 포멧화된 문자열
  - 문자 전환
  - Directory 검색
  - 명령어 주입

환경 변수와 인수 Fuzzing (Local Fuzzing)
 * Command-Line 인수
 * 환경변수

 명령어의 인수나 환경변수를 통해 옵션을 포함시켜 해당 값에 대한 어플리케이션의 반응을 살펴본다.
 
웹 어플리이션 및 서버 Fuzzing
 네트워크 프로토콜을 통하여 패킷을 전송하여 웹메일, 게시판, 위키, 웹블로그 등등을 Fuzzing한다. 주로 HTTP 통신을 하며, 디렉토리 탐색, 패킷 데이터의 오버플로우, SQL의 주입(로그인 데이터), XSS 스크립팅을 통해 HTTP 상태코드 및 웹서버의 에러 메시지, 통신 연결 을 검출하여 취약점을 발견한다.

 * 관련 웹 어플리케이션
  - SPIKE Proxy, WebScarab, SPI Fuzzer, Codenomicon, beSTROM


현재까지 읽은 부분은 10단원 까지로, 갑자기 읽어야 하는 책이 생긴 이유로 이후는 나중에 시간이 될때 계속 읽어 볼 예정이다.

 

Posted by k1rha