본문 바로가기
System Hacking

퍼징 (Fuzzing)

by zz! 2025. 4. 22.
728x90

퍼징 

소프트웨어 테스트 기법으로서, 컴퓨터 프로그램에 유효한, 예상치 않은 또는 무작위 데이터를 입력하는 것이다.

이후 프로그램은 충돌이나 빌트인 코드 검증의 실패, 잠재적인 메모리 누수 발견 등 같은 예외에 대한 감시가 이루어진다.

https://ko.wikipedia.org/wiki/%ED%8D%BC%EC%A7%95

 

퍼징 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 퍼즈 테스팅(Fuzz testing) 또는 퍼징(fuzzing)은 (종종 자동화 또는 반자동화된) 소프트웨어 테스트 기법으로서, 컴퓨터 프로그램에 유효한, 예상치 않은 또는 무

ko.wikipedia.org

 

Fuzzing 목적

자동화 또는 반자동 기술을 사용하여 데이터를 삽입하고 시스템 충돌 또는 내장 코드 오류 등과 같은 다양한 예외에 대한 시스템을 테스트하는 것이다.

브라우저, 시스템 커널, 대부분의 API 및 기타 응용 프로그램 등 입력이 존재하는 거의 모든 소프트웨어가 퍼징의 대상이 될 수 있다.

 

퍼징을 하는 이유

직접 수동 테스트 하는 것보다 시간과 노력이 더 적게 든다. (당연한 말이다.)

무조건적으로 퍼징이 좋은 것은 아니고, 퍼징과 수동 테스트의 조합이 최적이다.

잘때는 퍼징 돌려버리던가. 

 

일반적인 문제

응용 프로그램 또는 퍼저가 찾아야하는 버그의 유형에 따라 세팅하는 데 많은 시간이 걸림

익스 가능한 크래시를 발생하기도 하지만 언익스나 오탐 이런 것도 발생하기 때문에 유효한지 검사 하기 위해 검토 프로세스가 필요하다.

 

퍼징 준비

입력을 받는 타겟 선정

--> 응용 프로그램이 복잡할수록 퍼저로 버그를 찾을 가능성이 높다.

찾고자 하는 버그의 유형

--> 익스 가능한 취약점을 나타내는 크래쉬가 언제 발생했는지 알아야 한다.

퍼저 선정

--> 타겟을 선정하고 어떤 유형의 버그를 찾을지에 대해서 고민했다면, 퍼저를 선정한다.

 

 

덤프 퍼저 (Dumb Fuzzer)

아무 생각 없이 퍼징을 한다.

- 구조나 포맷 이해 없이 데이터를 무작위로 변경한다.

- 일반적으로 빠르게 많은 테스트 케이스를 생성할 수 있다.

- 퍼포먼스는 좋지만, 효과는 낮을 수도 있다.

 

스마트 퍼저 (Smart Fuzzer)

파일 포맷, 프로톸콜 구조, 도는 코드 커버리지 정보를 바탕으로 퍼징을 한다.

의미 있는 변형을 해서, 프로그램이 실제로 많은 경로를 실행하게 만든다.

효율적으로 크래시 발생이 가능합니다.

구조화된 입력을 잘 다룬다.

퍼징 속도는 느릴 수 있다.

 

로그 생성 : Crash를 유발하는 조합은 반드시 기록을 해두어야한다.

728x90