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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
sfuzz — riscv에서 x86으로의 바이너리 변환과 현대적인 퍼징 기법을 활용한 고성능 퍼징 | Kitploit
도구/GitHubGitHub/seal9055/sfuzz
Dynamic Analysis (Sandboxing)Vulnerability AnalysisFuzzingBinary Analysis
GitHubseal9055/sfuzz

sfuzz

riscv에서 x86으로의 바이너리 변환과 현대적인 퍼징 기법을 활용한 고성능 퍼징

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

SFUZZ

시작 날짜: 2021년 12월

이 도구는 커스텀 Just-In-Time 컴파일러를 사용하여 네이티브에 가까운 성능을 달성하는 커버리지 기반(coverage-guided), 에뮬레이션 기반 그레이박스 퍼저입니다. 실행 중에 RISC-V ELF 바이너리를 중간 표현(IR)으로 리프팅한 다음 JIT 컴파일하여 x86으로 변환하는 방식으로 동작합니다. JIT 컴파일 중에는 커버리지 추적, asan, cmpcov, 스냅샷 기반 퍼징과 같은 퍼징 개선 기능을 활성화하도록 코드가 계측됩니다.


기능

  • 멀티스레드: 임의의 개수의 스레드를 지원하며 거의 선형적으로 확장됩니다
  • 고성능을 위한 커스텀 JIT 컴파일러. 더 중요하게는 qemu와 같은 다른 솔루션으로는 달성하기 어려운 커스터마이징 가능성을 제공합니다
  • 높은 커스터마이징과 바이트 수준 권한 검사, 더티 비트 기반 에뮬레이터 리셋과 같은 매우 유용한 기능을 가능하게 하는 커스텀 메모리 관리 장치(MMU). 또한 힙 루틴의 안전한 사용을 허용하는 훅도 구현되어 있습니다
  • 인메모리 퍼징을 쉽게 할 수 있는 가상화된 파일 관리
  • 스냅샷 기반 퍼징: 실행 중 대상의 메모리/레지스터 상태를 스냅샷으로 저장하여 이후 모든 퍼즈 케이스가 이 기준선을 기반으로 하도록 합니다
  • 엣지 레벨 커버리지 추적 및 이 피드백을 기반으로 한 커버리지 가이드 퍼징
  • 다양한 뮤테이터, 크래시 중복 제거, 간단한 시드 스케줄링 알고리즘

설명

이 프로젝트의 목표는 퍼징에 에뮬레이션 환경을 사용할 때의 이점을 강조하는 것입니다. 이전에도 에뮬레이션 기반 퍼저는 많이 존재했지만, 대부분 기본 에뮬레이션 엔진으로 qemu를 거의 전적으로 사용합니다. qemu 엔진은 상당히 성숙한 JIT 컴파일러를 갖추고 있고 매우 좋은 코드를 생성하지만, 퍼징을 위해 설계된 것은 아닙니다. 퍼징 중에는 동일한 프로세스를 초당 수천 번 실행해야 합니다. 이는 각 프로세스 실행에 동일한 메모리 공간을 재사용하고 더티 비트 메커니즘을 통해 제한된 양의 메모리만 리셋하는 것처럼 qemu가 적극적으로 활용하지 않는 특수한 최적화의 여지를 만들어 줍니다.

여러모로 이 프로젝트는 컴파일러 내부 구조를 배우기 위해 작업하고 싶었던 개념 증명(proof-of-concept)에 가깝고, 다양한 커버리지 메트릭, 시드 스케줄러, 스냅샷 기반 퍼징과 같은 여러 퍼징 기법을 실험할 수 있는 에뮬레이션 기반 플레이그라운드 역할을 합니다. 그러나 더 많은 JIT 최적화와, 가장 중요하게는 mips나 arm과 같은 더 대중적인 아키텍처를 지원하도록 확장된다면, 재컴파일을 통해서는 간단히 계측할 수 없는 클로즈드 소스 코드를 효율적으로 퍼징하는 데 확실히 사용될 수 있습니다.

지금까지 수행한 테스트를 기준으로, sfuzz는 다른 많은 인기 퍼저보다 오버헤드가 훨씬 적어 특히 작은 퍼즈 케이스에서 매우 빠른 성능을 보여줍니다.

이 퍼저에 적용된 기능/설계 선택에 대한 자세한 내용은 함께 제공되는 블로그 게시물(https://seal9055.com/blog/fuzzing/sfuzz)과 아래 나열된 문서 파일에서 확인할 수 있습니다:

  • 메모리 관리 - memory_management.md
  • 코드 생성 - code_gen.md
  • 퍼저 구현/기능 - fuzzing.md
  • 몇 가지 간단한 테스트 - benchmarking.md

사용법

이 퍼저는 전체가 rust로 작성되었으므로, 저장소를 클론한 후 cargo build --release를 실행하기만 하면 컴파일됩니다.

이 퍼저는 현재 RISC-V만 지원하므로, 대상은 아래 툴체인(또는 유사한 툴체인)을 사용하여 RISC-V로 컴파일되어야 합니다. 또는 이미 RISC-V 바이너리가 있다면 그것으로도 완벽하게 동작합니다.

이 설정이 완료되면 입력/출력 디렉토리를 만들고 입력 디렉토리에 초기 시드 파일 몇 개를 추가한 다음 퍼저를 시작하면 됩니다.

./sfuzz -i in -o out -- ./test_cases/simple_test @@

스레드 수 지정, 스냅샷 퍼징 활성화, 뮤테이터에 사전(dictionary) 추가 등의 추가 플래그는 명령줄 옵션으로 전달할 수 있습니다. 추가 옵션은 sfuzz를 -h 플래그로 실행하면 확인할 수 있습니다.

다양한 복잡도의 대상으로 퍼저를 테스트하려면 tools/program_generator에 있는 progrem_generator를 사용하여 다양한 복잡도의 프로그램을 자동으로 생성할 수 있습니다. 그런 다음 대상을 컴파일하려면 RISC-V 툴체인이 필요합니다.

퍼저용 바이너리를 컴파일하기 위한 RISC-V 툴체인

이 프로젝트에서 로드/사용할 수 있는 riscv 바이너리를 컴파일하기 위한 툴체인을 설정합니다.

root@kitploit:~
Riscv compiler/tooling:
    sudo apt-get install autoconf automake autotools-dev curl python3 libmpc-dev libmpfr-dev \
    libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev \
    libexpat-dev
    git clone https://github.com/riscv/riscv-gnu-toolchain && cd riscv-gnu-toolchain
    ./configure --prefix=/opt/riscv --with-arch=rv64i
    sudo make

Debugger:
    gdb-multiarch

TODO

이 목록은 향후 구현할 계획인 기능들의 집합입니다.

  • 동작하는 메모리 관리 장치(MMU)
  • JIT 컴파일러
  • 인메모리 퍼징을 위한 가상화된 파일
  • 바이트 수준 권한 검사 + 훅/안전한 할당자
  • 엣지 레벨 커버리지 추적
  • 대상 함수 주변의 작은 루프에서 퍼징할 수 있는 퍼시스턴트 모드
  • 크래시 중복 제거 / 고유 크래시
  • 더 많은 옵션을 포함하도록 뮤테이터 업데이트
  • 시드 스케줄링
  • 매직 값과 체크섬을 우회하기 위한 CmpCov
  • 퍼저 주변 도구 추가
  • 적절한 벤치마킹
  • JIT가 newlib 대신 glibc를 사용할 수 있도록 RISC-V M & A 확장 구현
  • 컴파일 속도 향상을 위해 어셈블러 교체
  • 더 많은 아키텍처 지원 (예: mips, arm)
  • JIT 최적화 및 레지스터 할당 재시도

참고 자료

  • fuzzing.md에 나열된 모든 논문
  • 에뮬레이션 기반 퍼징 - Brandon Falk GamozoLabs
  • 인텔 소프트웨어 개발자 매뉴얼(Intel Software Developer Manuals)
  • RISC-V 사용자 ISA 사양
  • Rv8: 고성능 RISC-V-to-x86 바이너리 트랜슬레이터 - Michael Clark & Bruce Hoult
  • 컴파일러 공학(Engineering a Compiler) - Keith D. Cooper & Londa Torczon
  • Cranelift [https://cfallin.org/blog/] - Chris Fallin
  • 저오버헤드 동적 바이너리 트랜슬레이터 생성(Generating Low-Overhead Dynamic Binary Translators) - Mathias Payer & Thomas R. Gross
  • 정적 단일 할당(SSA) 형태와 제어 종속 그래프의 효율적 계산(Efficiently Computing Static Single Assignment Form and the Control Dependence Graph) - Cytron 외
  • SSA 형태 프로그램의 라이브니스 집합 계산(Computing Liveness Sets for SSA-Form Programs) - Brandner 외
  • SSA 형태에서의 선형 스캔 레지스터 할당(Linear Scan Register Allocation on SSA Form) - Christian Wimmer & Michael Franz
  • http://web.cs.ucla.edu/~palsberg/course/cs132/linearscan.pdf
  • AddressSanitizer: 고속 주소 위생 검사기(A Fast Address Sanity Checker) https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf
도구 다운로드