Fuzzing

#1 퍼징 (Fuzzing)

zz! 2025. 4. 22. 18:07
728x90

들어가기전..

블랙박스 vs 화이트박스

취약점을 찾는 방법으로는 blackbox testing 과 whitebox testing으로 구분이 된다. 

블랙박스 테스트는 타겟 프로그램에 대한 정보나 소스 코드 없이 점검하는 것이다.

화이트박스 테스트는 프로그램의 소스 코드를 볼 수 있는 상황에서 수행을 하는 것이다.

오픈 소스 코드를 제외하면 타겟 프로그램에 대한 소스 코드를 가지고 있는 상황이 거의 없다.

 

퍼징 

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

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

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

 

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

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

ko.wikipedia.org

예전에 대학교에서 퍼징에 대해 공부를 했을 때 이러한 질문을 받아본 적이 있다. "brute force 아니야?" 

fuzzing은 잘못된 형식을 데이터를 보내 서비스의 결합을 유도한다.

--> brute force는 password에 대한 공격과 같이 허용된 값을 찾기 위해 다수의 데이터를 보내는 방식이다.

https://www.hahwul.com/cullinan/brute-force/

 

Fuzzing 목적

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

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

 

퍼징을 하는 이유

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

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

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

 

일반적인 문제

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

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

 

퍼징 준비

입력을 받는 타겟 선정

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

찾고자 하는 버그의 유형

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

퍼저 선정

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

 

Fuzzer?

소프트웨어 프로그램에 랜덤한 값을 입력하는 프로그램

 

덤프 퍼징 (Dumb Fuzzing)

아무 생각 없이 퍼징을 한다. 파일의 포맷을 분석하지 않은 상태로 무작의로 값을 변형하는 방식

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

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

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

 

스마트 퍼저 (Smart Fuzzing)

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

(파일 포맷을 분석한 뒤 포맷에 맞추어 변형하는 방식이다.)

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

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

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

퍼징 속도는 느릴 수 있다.

 

덤프 퍼징, 스마트 퍼징 외에 다양한 종류의 퍼징이 존재한다.

 

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

728x90