
고급 퍼징 라이브러리 - Rust로 퍼저를 조립하세요! 코어와 머신 간에 확장됩니다. Windows, Android, MacOS, Linux, no_std 등을 지원합니다.
LibAFL, 퍼저 라이브러리고급 퍼징 라이브러리 - 자신의 퍼저를 조합하고 Rust를 사용하여 기능을 확장하세요.
LibAFL은 Rust로 작성된 재사용 가능한 퍼저 조각들의 모음으로, 기성 퍼저의 많은 장점을 제공하면서도 완전히 사용자 정의할 수 있습니다.
현재 주요 기능은 다음과 같습니다:
빠름: 컴파일 시간에 최대한 많은 작업을 수행하여 런타임 오버헤드를 최소화합니다. 사용자는 휴대폰에서 frida 모드(모든 코어 사용)로 초당 120,000회 실행에 도달합니다.확장 가능: 줄여서 LLMP라고 하는 저수준 메시지 전달을 통해 LibAFL이 코어 간에 거의 선형적으로 확장되고 TCP를 통해 여러 머신으로 확장될 수 있습니다.적응 가능: LibAFL의 각 부분을 교체할 수 있습니다. 예를 들어 BytesInput은 잠재적인 입력 형태 중 하나일 뿐입니다. 구조화된 퍼징을 위해 AST 기반 입력 등을 자유롭게 추가할 수 있습니다.다중 플랫폼: LibAFL은 Windows, macOS, iOS, Linux, Android 등에서 실행됩니다. LibAFL은 no_std 모드로 빌드하여 임베디드 장치나 하이퍼바이저와 같은 난해한 대상에 주입할 수 있습니다.자체 대상 가져오기: Frida-Mode와 같은 바이너리 전용 모드와 소스 기반 계측을 위한 여러 컴파일 패스를 지원합니다. 물론 사용자 정의 계측 백엔드를 쉽게 추가할 수 있습니다.LibAFL은 빠르고, 다중 플랫폼이며, no_std 호환이 가능하고 코어와 머신 간에 확장됩니다. 사용자 정의 퍼저를 위한 구성 요소를 제공하는 메인 크레이트 libafl, 대상 계측에 사용할 수 있는 공통 코드를 포함하는 라이브러리 libafl_targets, 그리고 컴파일러 래핑 기능을 제공하는 라이브러리 libafl_cc를 제공합니다. 널리 사용되는 계측 프레임워크와의 통합을 지원합니다. 현재 지원되는 백엔드는 다음과 같습니다:
SanitizerCoverage, in libafl_targetsFrida, in libafl_fridaQEMU 사용자 모드 및 시스템 모드(에뮬레이션을 위한 후크 포함), in libafl_qemuTinyInst, elbiazo의 libafl_tinyinst예를 들어 Linux 배포판 패키지를 사용하지 않도록 강력히 권장합니다. 이는 구버전일 가능성이 높기 때문입니다. 대신 Rust를 직접 설치하세요. 설치 지침은 여기에서 확인할 수 있습니다.
최소 지원 Rust 버전이 정의되어 있습니다. 현재 필요한 버전은 LibAFL의 Cargo.toml에서 확인할 수 있습니다:
설치된 Rust 버전이 Cargo.toml에 나열된 버전보다 오래된 경우, 최신 안정 툴체인으로 업데이트하세요:
rustup update stable
fuzzers/ 디렉토리의 퍼저를 빌드합니다. 설치 지침은 Just Programmer's Manual에서 확인할 수 있습니다.LibAFL 저장소를 다음 명령어로 클론하세요git clone https://github.com/AFLplusplus/LibAFL
cargo build --release
cargo doc
LibAFL 책(작성 중!)을 보세요 (mdbook 필요)cd docs && mdbook serve
모든 예제 퍼저를 ./fuzzers에 모아두었습니다. 해당 문서(및 소스)를 꼭 읽어보세요. 이것이 자연스러운 시작 방법입니다!
just run
퍼저 디렉토리에 Justfile 파일이 있는 한 다음 명령어로 각 예제 퍼저를 실행할 수 있습니다. 가장 잘 테스트된 퍼저는 ./fuzzers/inprocess/libfuzzer_libpng로, libpng harness를 위해 LibAFL을 사용하는 멀티코어 libfuzzer 방식 퍼저입니다.
LibAFL 책(작성 중) 온라인 또는 저장소에서libaf_qemu에 관한 블로그 게시물, Hacking TMNF - Fuzzing the game server.LibAFL은 다음 사람들이 작성하고 유지 관리합니다:
기여 지침은 **CONTRIBUTING.md**를 확인해주세요.
퍼저가 예상대로 작동하지 않나요? DEBUGGING.md를 읽어 문제를 디버깅하는 방법을 이해하세요.
학술 연구에 LibAFL을 사용하신다면, 다음 논문을 인용해 주세요:
@inproceedings{libafl,
author = {Andrea Fioraldi and Dominik Maier and Dongjia Zhang and Davide Balzarotti},
title = {{LibAFL: A Framework to Build Modular and Reusable Fuzzers}},
booktitle = {Proceedings of the 29th ACM conference on Computer and communications security (CCS)},
series = {CCS '22},
year = {2022},
month = {November},
location = {Los Angeles, U.S.A.},
publisher = {ACM},
}