Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
fuzzable — 소스 코드 및 바이너리에서 퍼징 가능한 함수 대상을 식별하고, 하네스 템플릿을 생성하며, AFL++ 및 libFuzzer와 통합하여 자동화된 취약점 발견을 수행하는 정적 분석 프레임워크입니다. | Kitploit
도구/GitHubGitHub/ex0dus-0x/fuzzable
Static AnalysisVulnerability AnalysisReverse EngineeringFuzzingBinary Analysis
GitHubex0dus-0x/fuzzable

fuzzable

소스 코드 및 바이너리에서 퍼징 가능한 함수 대상을 식별하고, 하네스 템플릿을 생성하며, AFL++ 및 libFuzzer와 통합하여 자동화된 취약점 발견을 수행하는 정적 분석 프레임워크입니다.

저장소 보기
5495962년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Fuzzable

Build Status PyPI version Blackhat

정적 분석을 통한 Fuzzable 타겟 발견 자동화 프레임워크

example

소개

보안 평가를 수행하는 취약점 연구자들은 종종 AFL++ 및 libFuzzer와 같은 강력한 도구를 통해 커버리지 기반 퍼징의 기능을 활용합니다. 이는 버그 헌팅 프로세스를 자동화하고 타겟에서 악용 가능한 조건을 신속하게 드러내기 때문에 중요합니다. 그러나 크고 복잡한 코드베이스나 클로즈드 소스 바이너리를 접할 때 연구자들은 퍼징 기반 탐색이 유용할 수 있는 함수를 식별하기 위해 수동 감사 및 리버스 엔지니어링에 시간을 할애해야 합니다.

__Fuzzable__은 C/C++ 소스 코드와 바이너리 모두와 통합되어 취약점 연구자가 퍼징에 적합한 함수 타겟을 식별할 수 있도록 지원하는 프레임워크입니다. 이는 여러 정적 분석 기반 휴리스틱을 적용하여 소프트웨어의 위험한 동작과 이를 실행하는 함수를 정확히 찾아냄으로써 수행됩니다. 연구자는 이 프레임워크를 사용하여 기본 하네스 템플릿을 생성한 다음 취약점을 찾거나 Google의 oss-fuzz 프로젝트와 같은 지속적 퍼징 파이프라인의 일부로 통합할 수 있습니다.

독립형 도구로 실행하는 것 외에도 Fuzzable은 Binary Ninja 디스어셈블러의 플러그인으로 통합되어 있으며, 다른 디스어셈블리 백엔드에 대한 지원도 개발 중입니다.

도구에 대한 자세한 내용을 다루는 원본 블로그 게시물은 여기에서 확인할 수 있습니다. 이 게시물은 정적 분석 휴리스틱의 기술적 사양과 이 도구가 어떻게 탄생했는지를 강조합니다. 이 도구는 Black Hat Arsenal USA 2022에도 소개되었습니다.

특징

  • 바이너리 (Angr 및 Binary Ninja 사용) 및 소스 코드 아티팩트 (tree-sitter 사용) 분석 지원.
  • 독립형 CLI 도구 또는 __Binary Ninja 플러그인__으로 정적 분석 실행.
  • 퍼징 캠페인을 빠르게 시작할 수 있는 하네스 생성.

설치

일부 바이너리 타겟은 샌드타이징(예: 시그니처 매칭 또는 인라인 함수 식별)이 필요할 수 있습니다. 따라서 __fuzzable__은 이러한 문제를 효과적으로 해결할 수 있는 Binary Ninja를 디스어셈블리 백엔드로 주로 사용합니다. 따라서 독립형 도구와 플러그인으로 모두 활용할 수 있습니다.

모든 사람이 Binary Ninja에 접근할 수 있는 것은 아니며 보안 평가 및 클라우드에서의 확장에 활용하려는 수요가 있을 수 있으므로 angr 대체 백엔드도 지원됩니다. 향후 다른 디스어셈블러도 통합할 계획입니다(우선순위: Ghidra).

명령줄 (독립 실행)

Binary Ninja Commercial이 있는 경우 독립 실행형 헤드리스 사용을 위해 API를 설치하십시오:

root@kitploit:~
$ python3 /Applications/Binary\ Ninja.app/Contents/Resources/scripts/install_api.py

pip로 설치:

root@kitploit:~
$ pip install fuzzable

수동/개발 빌드

의존성 관리 및 빌드를 위해 poetry를 사용합니다. 수동 빌드를 하려면 서드파티 모듈과 함께 리포지토리를 클론합니다:

root@kitploit:~
$ git clone --recursive https://github.com/ex0dus-0x/fuzzable

수동 설치:

root@kitploit:~
$ cd fuzzable/

# poetry 없이
$ pip install .

# poetry로
$ poetry install

# 개발 가상 환경을 위해 poetry 사용
$ poetry shell

이제 도구로 바이너리 및/또는 소스 코드를 분석할 수 있습니다!

root@kitploit:~
# 단일 공유 오브젝트 라이브러리 바이너리 분석
$ fuzzable analyze examples/binaries/libbasic.so

# 단일 C 소스 파일 분석
$ fuzzable analyze examples/source/libbasic.c

# 여러 C/C++ 파일과 헤더가 포함된 워크스페이스 분석
$ fuzzable analyze examples/source/source_bundle/

Binary Ninja 플러그인

__fuzzable__은 Binary Ninja > Manage Plugins로 이동하여 검색하면 Binary Ninja 플러그인 마켓플레이스를 통해 쉽게 설치할 수 있습니다. 다음은 fuzzable 플러그인이 실행되어 퍼징 및 추가 취약점 평가를 위한 타겟을 정확하게 식별하는 예입니다:

binja_example

사용법

__fuzzable__에는 분석을 더 잘 조정할 수 있는 다양한 옵션이 있습니다. 향후 계획 및 기능 요청에 따라 더 많은 옵션이 지원될 예정입니다.

정적 분석 휴리스틱

퍼징 가능성을 결정하기 위해 __fuzzable__은 여러 휴리스틱을 사용하여 동적 분석에 가장 적합한 타겟을 결정합니다. 이러한 휴리스틱은 scikit-criteria 라이브러리를 사용하여 모두 다르게 가중치가 부여되며, 이 라이브러리는 _다중 기준 의사 결정 분석_을 사용하여 최상의 후보를 결정합니다. 이러한 메트릭과 가중치는 다음과 같습니다:

언급한 대로, 이러한 메트릭이 어떻게 사용되는지에 대한 자세한 내용은 기술 블로그 게시물을 확인하세요.

많은 메트릭은 Vincenzo Iozzo의 0-지식 퍼징에 대한 원작에서 크게 영감을 받았습니다.

분석하려는 모든 타겟은 다양하므로 __fuzzable__이 프로그램 타겟의 모든 에지 케이스 동작을 설명할 수는 없습니다. 따라서 분석 중에 이러한 가중치를 적절히 _튜닝_하여 사용 사례에 더 적합한 결과가 나오는지 확인하는 것이 중요할 수 있습니다. CLI에서 이러한 가중치를 조정하려면 --score-weights 인수를 지정하십시오:

root@kitploit:~
$ fuzzable analyze <TARGET> --score-weights=0.2,0.2,0.2,0.2,0.2

분석 필터링

기본적으로 __fuzzable__은 다음 기준에 따라 함수 타겟을 필터링합니다:

  • 최상위 진입 호출 - 타겟의 다른 호출에 의해 호출되지 않는 함수. 잠재적으로 매우 높은 커버리지를 가진 이상적인 진입점입니다.
  • 정적 호출 - (소스 전용) static이고 헤더를 통해 노출되지 않는 함수.
  • 임포트 - (바이너리 전용) 타겟 구현에서 사용되는 다른 라이브러리 의존성.

__fuzzable__에 의해 필터링된 호출을 보려면 --list_ignored 플래그를 설정하십시오:

root@kitploit:~
$ fuzzable analyze --list-ignored <TARGET>

Binary Ninja에서는 설정 > Fuzzable > 무시된 호출 나열에서 이 설정을 켤 수 있습니다.

__fuzzable__이 분석해야 할 중요한 호출을 잘못 필터링하는 경우, --include-* 인수를 사용하여 실행 중에 포함시키는 것이 좋습니다:

root@kitploit:~
# 필터링된 모든 비-최상위 호출 포함
$ fuzzable analyze --include-nontop <TARGET>

# 필터링된 특정 심볼 포함
$ fuzzable analyze --include-sym <SYM> <TARGET>

Binary Ninja에서는 설정 > Fuzzable > 비-최상위 호출 포함 및 제외할 심볼을 통해 지원됩니다.

하네스 생성

이제 퍼징할 이상적인 후보를 찾았으므로 __fuzzable__은 (거의) 계측 및 컴파일할 준비가 된 퍼징 하네스를 생성하여 파일 기반 퍼저(예: AFL++, Honggfuzz) 또는 인-메모리 퍼저(libFuzzer)와 함께 사용할 수 있도록 도와줍니다. CLI에서는 다음과 같이 수행합니다:

root@kitploit:~
# 후보에서 하네스 생성
$ fuzzable create-harness target --symbol-name=some_unsafe_call

# 하네스에 필요 최소한의 수정 수행
$ vim target_some_unsafe_call_harness.cpp

# AFL-QEMU용 컴파일 예제 (생성된 하네스 주석에 명시됨)
$ clang target_some_unsafe_call_harness.cpp -no-pie -o target_some_unsafe_call_harness -ldl

# 기본 시드 생성 (입력에 더 잘 형성되어야 함)
$ mkdir in/
$ echo "seed" >> in/seed

# 블랙박스 퍼징 시작
$ afl-fuzz -Q -m none -i in/ -o out/ -- ./target_some_unsafe_call_harness

이 타겟이 소스 코드베이스인 경우 일반 소스 템플릿이 사용됩니다.

타겟이 바이너리인 경우 일반 블랙박스 템플릿이 사용되며, ideally AFL-QEMU와 같은 퍼징 에뮬레이션 모드와 함께 사용할 수 있습니다. 심볼이 직접 내보내지지 않은 경우 LIEF를 사용하여 dlopen할 수 있도록 바이너리 사본이 공유 오브젝트로 생성됩니다.

현재 이 기능은 매우 기본적입니다. 적절한 매개변수로 채워진 독립형 C++ 하네스를 생성할 뿐이며, 런타임 동작(예: 구조체 인스턴스화 및 해제)에 필요한 코드를 자동 생성하지는 않습니다. 그러나 __fuzzable__을 위해 생성된 템플릿은 여전히 빠르게 시작할 수 있도록 도와줍니다. 향후 구현하고 싶은 야심찬 기능은 다음과 같습니다:

  • 전체 하네스 합성 - 수동 변경 없이 바로 작동하는 하네스.
  • DeepState 프레임워크를 사용한 잠재적 단위 테스트로부터의 합성 (소스 전용).
  • 관리형 연속 퍼징 팜에 즉시 배포.

보고서 내보내기

__fuzzable__은 다양한 형식의 보고서 생성을 지원합니다. 현재 지원되는 형식은 JSON, CSV 및 Markdown입니다. 이는 자동화의 일부로 이를 활용하여 직렬화 가능한 형식으로 출력을 수집하려는 경우 유용할 수 있습니다.

CLI에서는 적절한 확장자를 가진 파일명과 함께 --export 인수를 전달하기만 하면 됩니다:

root@kitploit:~
$ fuzzable analyze --export=report.json <TARGET>

Binary Ninja에서는 플러그인 > Fuzzable > 퍼징 가능 보고서 내보내기 > ...로 이동하여 내보낼 형식과 경로를 선택합니다.

기여

이 도구는 지속적으로 개발될 예정이며, 외부 관리자의 도움을 환영합니다!

  • 기능 요청 또는 발견한 버그에 대해 이슈를 생성해 주세요.
  • 이 도구에 기여하고 싶은 수정 및 개선 사항에 대해 풀 리퀘스트를 제출해 주세요.

라이선스

Fuzzable은 MIT 라이선스에 따라 라이선스가 부여됩니다.

도구 다운로드
휴리스틱설명가중치
퍼즈 친화적 이름파일/버퍼 입력을 수집하는 동작을 암시하는 심볼 이름0.3
위험한 싱크위험한 호출(예: memcpy)로 흐르는 인자0.3
자연 루프지배 프론티어로 감지된 루프 수0.05
순환 복잡도에지 + 노드 기반 함수 타겟의 복잡도0.05
커버리지 깊이타겟이 통과하는 피호출자 수0.3