
Fuzzer 조사 - Fuzzing과 Fuzzer에 대한 이해이하임2025. 4. 27. 23:16
Table of Contents
팀 내부 프로젝트에 앞서 fuzzer에 대한 내용을 다시 간단하게 조사해서 정리하려는 목적으로 글을 작성한다.
1. Fuzzing
Fuzzing이란?
Fuzzing(퍼징)은 소프트웨어의 보안 취약점이나 안정성 문제를 찾아내기 위한 자동화된 테스팅 기법이다.
이 기법은 프로그램에 무작위로 생성된 데이터를 입력해서 프로그램이 어떻게 반응하는지 관찰하는 방식으로 작동한다. 이러한 과정을 통해서 소프트웨어가 예외적인 입력에 대해서 어떻게 반응하는지를 테스트하고 그로 인해 발생할 수 있는 크래시, 메모리 누수, 논리 오류 등을 탐지할 수 있다.
Fuzzing 의 종류
Fuzzing은 웹 애플리케이션, 브라우저, 운영체제 커널, 장치 드라이버 등 다양한 환경에서 활용되는데 특히 보안 취약점을 사전에 식별하고 대응하기 위한 방법으로 잘 사용되며 소프트웨어의 견고성과 안정성을 높이는 데 도움을 준다.
Fuzzing은 접근 방식에 따라 세 가지 유형으로 나뉜다
- White-Box Fuzzing: 소스 코드에 접근 가능한 상태에서 수행하는 방식으로 프로그램의 내부 구조와 로직을 기반으로 테스트를 구성한다.
- Gray-Box Fuzzing: 소스 코드는 없지만 내부 동작에 대한 일부 정보(문서, 인터페이스 등)를 참고해서 테스트하는 방식이다.
- Black-Box Fuzzing: 소스 코드나 내부 동작 정보 없이 바이너리만으로 테스트를 수행한다. (이 방식에서는 "Dumb Fuzzer"를 주로 사용한다.)
2. Fuzzer의 종류와 구조
Fuzzer란?
Fuzzer(퍼저)는 위에서 설명한 Fuzzing 기법을 자동으로 실행해서 테스트 중 이상행위가 발생했을 경우에 그 정보를 기록하고 저장하는 도구이다.
Fuzzer의 주요 역할은 다양한 입력 데이터를 자동으로 생성하고 프로그램에 주입해서 그 결과를 모니터링하며 오류나 취약점을 찾아내는 것이다.
Fuzzer의 구성 요소
Fuzzer는 크게 다음과 같이 세가지 구성요소로 이루어져있다.
- Test Case Generator
- 타겟 프로그램에 주입할 테스트 데이터를 생성 (데이터 생성 방식에 따라 다음 두 가지 유형으로 나뉜다)
- Smart Fuzzer: 입력 데이터의 구조를 이해하고 그에 맞게 데이터를 변경하여 생성하는 방식으로 분석 대상의 입력 형식에 맞춘 퍼징이 가능함
- Dumb Fuzzer: 입력 구조에 대한 지식 없이 랜덤하게 데이터를 변형하여 생성하는 방식
- 타겟 프로그램에 주입할 테스트 데이터를 생성 (데이터 생성 방식에 따라 다음 두 가지 유형으로 나뉜다)
- Logger
- 테스트 중 발생한 크래시, 코드 커버리지, 에러 메시지 등의 정보를 기록함
- 발견된 테스트 케이스와 문제 상황을 분석할 수 있도록 저장함
- Worker
- 생성된 테스트 데이터를 실제 프로그램에 주입하고 실행함
- 실행 중 크래시나 예외 처리 실패 등의 이상을 탐지하고 이를 Logger에 전달함
3. 정리
Fuzzing의 활용 및 추가 정보
- Fuzzing은 단순한 크래시 탐지 외에도 메모리 누수, 경계 검사 실패, 논리적 결함 등 다양한 소프트웨어 결함을 찾아낼 수 있고 최근에는 머신러닝이나 Coverage-Guided 방식 (AFL, libFuzzer) 등을 활용한 Intelligent Fuzzing도 활발히 연구되고 있다고 한다.
- 보안적인 측면에서 fuzzing은 취약점 제로데이(0-day) 탐지에도 유용하며 기업에서는 CI/CD 파이프라인에 fuzzing을 통합해서 자동화된 보안 테스트를 수행하기도 한다고 한다.
'이하임' 카테고리의 다른 글
| CPIO 아카이브 파일 (0) | 2025.02.19 |
|---|---|
| ASLR에 대해서 (0) | 2025.02.12 |
| python의 버전 관리를 위한 pyenv 설치 및 사용법 (0) | 2025.01.09 |
| .ubi에서 파일 시스템 추출 (0) | 2024.11.12 |

@stellarflare :: stellarflare 님의 블로그
stellarflare 님의 블로그 입니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!