퍼즈 테스팅(Fuzz Testing)
태그 :
- 개념
- - 비정상적인 데이터를 어플리케이션에 전달하여 에러를 유도하는 테스트 - 소프트웨어에 무작위의 데이터를 반복적으로 입력하여 조직적인 실패를 유발함으로써 보안상의 취약점을 찾아내는 테스트 - Blackbox, Penertation(침투), Robustness
I. 보안 사고에 대한 선제적 대응 방안, Fuzz Testing의 개요
가. 퍼즈 테스팅 (Fuzz Testing)의 정의
- 비정상적인 데이터를 어플리케이션에 전달하여 에러를 유도하는 테스트
- 소프트웨어에 무작위의 데이터를 반복적으로 입력하여 조직적인 실패를 유발함으로써 보안상의 취약점을 찾아내는 테스트
- Blackbox, Penertation(침투), Robustness
나. 퍼즈 테스팅의 필요성
다. 퍼즈 테스팅의 특징
- 입력값 무작위성 : 램던 메시지 또는 유효한 키보드 및 마우스 이벤트
- 간단한 신뢰기준 : Crash, Hang 시 실패로 간주, 그 외는 통과
- 고수준 자동화 : 높은 수준 자동화 가능, 밴더간 비교 가능
II. Fuzz 테스팅의 개념도 및 종류
가. Fuzz 테스팅의 개념도
나. Fuzz 테스팅의 종류
기법 |
설명 |
Blackbox Fuzz Testing |
- 입력 값은 무작위적이며 단순하다. - 어플리케이션의 실행이 멈추거나(crash) 실행이 일시적으로 보류(hang)되면 테스트에서 실패한 것으로 간주되고, 그렇지않다면 테스트 통과 - 단순하지만, 취약점 발견확률이 낮음 |
Whitebox Fuzz Testing |
- 소스코드가 필요하며 분석이 복잡하다. - Blackbox Fuzz과는 다른 종류의 취약점을 찾을 수 있음. - 사이즈가 큰 프로그램들에는 다음과 같은 이유로 적용이 매우 어렵다 1) Pointer Manipulation 2) Arithmetic Operations 3) OS and Library calls |
다. Fuzz 테스팅의 장단점
구분 |
설명 |
단점 |
- 정확한 분석보다는 무작위성에 의존 - 단순한 결함들은 쉽게 찾아내지만 아주 심각한 보 안 취약점을 찾아내는 데는 그렇게 뛰어난 성능을 발휘하지는 못 |
장점 |
- 다양한 Fuzz 테크닉들과 툴들 등장으로 취약점 발견 성능 증대 |
III. Fuzz 테스팅의 범위 및 발견할 수 있는 결함 종류
가. Fuzz 테스팅의 커버리지
커버리지 |
구분 |
테스팅 대상 |
Direct Physical Attack |
Network |
OBD 포트 공격, 스마트 키 복제 |
IP 기반 네트워크 공격 |
||
File System |
OS등 범용적 사용하는 File System에 대한 테스팅 |
|
File/Media |
File/Media에 대한 일반적인 공격 대상 테스팅 |
|
Indirect Physical Attack |
File/Media |
미디어플에이어 펌웨어업데이트 공격, CD&Wi-Fi 통한 펌웨어업데이트 exploit 공격 테스팅 |
오디오파일 통한 Parsing된 exploit CAN 패킷공격 |
||
Application |
버그, 보안 취약점 등 설계 결함 이용 공격 |
|
WMA Parser 취약점 공격 |
||
Local/ Remote Wireless Attack |
Application |
블루투스 Protocol Stack 코드 취약점 공격 |
Network |
통신 기능 악성코드 삽입공격(개인정보 유출) |
|
Telematics 모듈 및 스마트폰 통신채널 공격 |
||
제조사 Command 프로그램의 exploit 공격 |
나. Fuzz 테스팅으로 발견 가능한 결함 종류
Input |
Anomaly |
취약점 탐지 |
Field Level |
- Overflows - Integer Anomalies |
① System Crash ② DDoS공격 조건들 ③ 보안 취약점 ④ 성능저하 ⑤ 느린반응 |
Structural |
- Underflows - Unexpected elements |
|
Sequence Level |
- Out of sequence omitted - Spamming |
|
II. Fuzz 테스팅의 툴 및 보안취약점 탐지방법
가. 퍼즈 테스팅 (Fuzz Testing)의 툴
구분 |
종류 |
설명 |
Web Application Fuzz 툴 |
MielieTool |
- Perl 기반의 웹 어플리케이션 fuzzer - form 및 링크 형태로 된 CGI를 Fuzz 지원 - 2개 이상의 사이트를 동시에 테스트 가능 - HTTrack, Lynx, grep, find, 및 rm이 필요 |
Wapiti |
– Python으로 구현된 웹 어플리케이션 fuzzer - 웹 취약점 스캐너 일종 |
|
WebFuzzer |
- 원격 취약점 점검 웹 어플리케이션 fuzzer - sql injection, cross site scripting, 원격 코드 실행, file disclosure, directory traversal, php including, shell escaping 13 및 안전하지 않은 perl open() 호출 등 |
|
Browser Fuzz 툴 |
MangleMe |
- 비정상적인 HTML 태그를 생성 및 이용 - 브라우저 자동 실행, IE IFRAME 버그를 발견용 |
AxMan |
- H.D.Moore 개발, 웹 기반의 ActiveX Fuzz 엔진 - IE를 통해 노출된 COM 오브젝트 취약점 발견 |
|
COMRaider |
- David Zimmer개발 - COM Object 인터페이스를 Fuzz하기 위한 툴 - 경로, 파일명, guid로 COM 오브젝트 스캔 |
|
Service 및 Protocol Fuzz 툴 |
FTPFuzz |
- FTPD 서버 구현상의 문제점 테스트, GUI 기반 - FTP명령과 Fuzz할 파라미터들, 사용할 테스트 문자열의 패턴을 지정 가능 |
PROTOS |
- black box 테스트 방법들을 이용하여 프로토콜 구현 상의 문제 점검 |
|
SMTPFuzzer |
- SMTP 프로토콜 구현을 하고 있는 서버의 취약점을 찾기 위한 Fuzz 툴 |
|
TCP/IP Fuzz 툴 |
Fuzzball2 |
- nologin18의 warlord가 개발 - Linux용 TCP/IP Fuzz 툴 - 특정 호스트에 bogus 패킷 전송 |
ISIC |
- IP스택과 그것의 구성 스택(TCP, UDP, ICMP 등)의 안정성 테스트 유틸리티 집합 - IP스택에 존재하는 버그를 찾기 위함 - 목표 프로토콜에 허위의 무작위 패킷을 생성 - 타깃 머신의 방화벽 규칙을 공격 |
나. 퍼즈 테스팅을 통한 보안취약점 탐지방법
구분 |
설명 |
Valid Case Fuzz Testing |
|
- Valid 케이스 테스트 대상 프로토콜 명세어 따라 생성된 정상 입력 데이터를 통하여 DUT(Device Under Test)와 정상 연결 유무를 확인하는 테스팅 |
|
Invalid Case Skip Testing |
|
- 자체적으로 비정상 입력을 처리하지 못한 경우와 해당 테스트 케이스를 수행하지 못한 경우 Fuzzer 가 이를 Skip 처리하는 테스팅 |
|
Invalid Case Fail Testing |
|
- 비정상 입력에 의해 DUT가 응답이 없는 경우, Valid 케이스를 보내 DUT가 살아 있는지 확인(응답 : Fail / 무응답 : Crash) - 테스트 완료 후 Fail 된 테스트 케이스 재 테스트 수행 - 다시 Fail 이거나 Crash 인 케이스는 봉나 취약점 배포 확률이 높다고 판단 |
다. 자동차 보안 대응을 위한 Fuzz Testing 방법
구분 |
설명 |
Bluetooth 및 Wi-Fi Testing |
|
- Fuzzer와 Transceiver를 이용하여 DUT에 테스트 케이스 전송 - Bluetooth Test : 프로파일 대상 - Wi-Fi Test : WAP AP 서버와 클라이언트 대상 |
|
Digital Media Testing |
|
- 원본 디지털 미디어 파일을 Fuzzer를 통해 비정상적인 파일로 변환하여 SD카드나 USB 등을 통해 인포테인먼트 시스템 테스트 |
- Connected Car로 발전하면서 자동차의 급격한 전장화로 보안 위협 증가
- 자동차 보안 사고는 인명과 직결되는 만큼 철저한 사전 대비가 필수적
- 개발 프로세스에 포함된 Fuzz Testing을 통한 보안취약점 사전 점검, 최종 출시 전체시스템 보안점검 필요