Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Binvariants — 레지스터 수준 불변성 기반 퍼징 프레임워크로, 클로즈드 소스 바이너리를 대상으로 가능성 있는 불변성 위반을 활용하여 바이너리 실행 파일에서 충돌 및 버그를 발견합니다. | Kitploit
도구/GitHubGitHub/futureslab/binvariants
Vulnerability AnalysisExploitationFuzzingBinary Analysis
GitHubfutureslab/binvariants

Binvariants

레지스터 수준 불변성 기반 퍼징 프레임워크로, 클로즈드 소스 바이너리를 대상으로 가능성 있는 불변성 위반을 활용하여 바이너리 실행 파일에서 충돌 및 버그를 발견합니다.

저장소 보기
51293개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Binvariants: 바이너리를 위한 레지스터 수준 불변식 기반 퍼징

Binvariants 로고

이 저장소는 Binvariants의 소스 코드를 제공합니다. Binvariants는 바이너리 퍼징을 위해 레지스터 수준의 개연성 높은 불변식 위반(likely invariant violation)을 활용하는 프로토타입 퍼징 프레임워크입니다.

이 연구는 2026 ACM International Conference on the Foundations of Software Engineering (FSE'26)에서 발표된 논문 Binvariants: Enhancing Fuzzing of Closed-source Binary Executables via Register-level Likely Invariants | 슬라이드에 소개되어 있습니다.

  • Binvariants 설치하기
  • Binvariants 사용하기
  • 추가 참고 사항
  • 버그 트로피 케이스


Binvariants 워크플로
Binvariants 워크플로

이 저장소 인용하기: @article{yang:binvariants, title = {Binvariants: Enhancing Fuzzing of Closed-source Binary Executables via Register-level Likely Invariants}, author = {Zao Yang and Stefan Nagy}, year = {2026}, issue_date = {July 2026}, publisher = {Association for Computing Machinery}, address = {New York, NY, USA}, volume = {3}, number = {FSE}, journal = {Proc. ACM Softw. Eng.}}
개발자: Zao Yang ([email protected]) 및 Stefan Nagy ([email protected])
라이선스: MIT 라이선스
면책 조항: 이 소프트웨어는 어떠한 보증도 없이 있는 그대로 제공됩니다.

Binvariants 설치하기

Binvariants는 AFL++와 QEMU-AFL을 기반으로 구축되었습니다. Binvariants를 설정하기 전에 이들 프로젝트에서 요구하는 종속성을 설치하십시오:

sudo apt-get update
sudo apt-get install -y build-essential python3-dev automake cmake git flex bison libglib2.0-dev libpixman-1-dev python3-setuptools cargo libgtk-3-dev
# try to install llvm-18 and install the distro default if that fails
sudo apt-get install -y lld-18 llvm-18 llvm-18-dev clang-18 || sudo apt-get install -y lld llvm llvm-dev clang
sudo apt-get install -y gcc-$(gcc --version|head -n1|sed 's/\..*//'|sed 's/.* //')-plugin-dev libstdc++-$(gcc --version|head -n1|sed 's/\..*//'|sed 's/.* //')-dev
sudo apt-get install -y meson ninja-build # for QEMU mode

Binvariants는 두 가지 구성 요소를 포함합니다:

  • 1-Invariant_Learner/
  • 2-Fuzzer/

각 구성 요소를 빌드하려면 해당 디렉터리로 이동한 후 다음 명령을 실행하세요:

./1_patch.sh
./2_build.sh

Binvariants 사용하기

Example/에는 Binvariants를 사용하여 nconvert 바이너리를 퍼징하기 위한 예제 스크립트와 테스트 케이스가 포함되어 있습니다. 스크립트를 수정하여 다른 바이너리를 퍼징할 수 있습니다.

설정

Binvariants를 사용하기 전에 ASLR을 비활성화하십시오. 불변성 학습과 퍼징 사이에 일관된 기본 블록 주소가 필요하기 때문입니다:

sudo sysctl -w kernel.randomize_va_space=0

레지스터 수준의 유력 불변식(RLI) 학습

불변식을 학습하려면 다음을 실행하세요:

./Example/1-learn_invs.sh [Binvariants_Root]

추론된 RLI는 1-learn_invs.sh에서 BINV_TRACES_DIR로 지정된 디렉터리에 [PROGRAM]_trace_qemu_invs라는 이름으로 저장됩니다.

RLI를 이용한 퍼징

Binvariants로 퍼징을 시작하려면 다음을 실행하세요:

./Example/2-fuzz.sh [Binvariants_Root] [Fuzz_Time] [Trial_Number]

예를 들어, Binvariants의 루트 디렉터리에서 48시간 퍼징 캠페인의 첫 번째 시도를 실행하려면:

./Example/2-fuzz.sh $PWD 48h 1

추가 참고 사항

아래는 Binvariants에 대한 잠재적 개선 사항입니다.

불변 조건의 적응적 학습

현재 Binvariants는 퍼징 전에 불변 조건을 학습한 후 퍼징을 별도로 실행합니다. 가능한 개선 사항은 퍼징 중에 불변 조건을 학습하고 위반이 발생할 때 이를 갱신하여 피드백이 시간이 지남에 따라 발전할 수 있도록 하는 것입니다.

가능한 설계 고려 사항:

  1. 나중에 크래시되거나 타임아웃되는 테스트 케이스의 실행 중에 불변 조건이 갱신되는 경우, 해당 갱신을 되돌려야 할 수 있습니다. 실용적인 해결책은 불변 조건의 사본에 갱신을 적용하고 테스트 케이스가 정상적으로 완료된 경우(즉, FSRV_RUN_OK)에만 커밋하는 것입니다.
  2. 퍼징이 실행되고 불변 조건이 갱신됨에 따라 위반은 자연스럽게 덜 빈번해질 것입니다. 이는 AFL++가 초기 단계의 테스트 케이스(더 많은 위반을 유발하지만 덜 발전된 프로그램 상태를 나타냄)를 반복적으로 선택할 위험이 있습니다. 이후의 더 대표성 있는 테스트 케이스가 선택되도록 하려면 AFL++ 측에서 weight/perf_score/top_rated 조정이 필요할 수 있습니다.

기본 블록 간 불변 조건

Binvariants는 현재 단일 블록 불변 조건에 초점을 맞추고 있습니다. 잠재적 개선 사항은 블록 간 불변 조건을 지원하는 것입니다. 이를 위해서는 블록 경계를 넘어 레지스터 값을 추적하기 위한 새로운 데이터 구조와, 제어가 블록 간에 전환될 때 위반을 검사하기 위한 추가 계측이 필요합니다.

버그 트로피 케이스

프로그램보고된 버그
nconverthttps://newsgroup.xnview.com/viewtopic.php?t=49598
xls2csvhttps://github.com/vbwagner/catdoc/issues/6, https://github.com/vbwagner/catdoc/issues/7, https://github.com/vbwagner/catdoc/issues/8, https://github.com/vbwagner/catdoc/issues/9, https://github.com/vbwagner/catdoc/issues/10, https://github.com/vbwagner/catdoc/issues/11, https://github.com/vbwagner/catdoc/issues/12, https://github.com/vbwagner/catdoc/issues/13
gpmfhttps://github.com/gopro/gpmf-parser/issues/201, https://github.com/gopro/gpmf-parser/issues/202, https://github.com/gopro/gpmf-parser/issues/203
hdf5https://github.com/HDFGroup/hdf5/issues/5831, https://github.com/HDFGroup/hdf5/issues/5832, https://github.com/HDFGroup/hdf5/issues/5834
stormhttps://github.com/ladislav-zezula/StormLib/issues/397, https://github.com/ladislav-zezula/StormLib/issues/398
mp4splithttps://github.com/axiomatic-systems/Bento4/issues/1038, https://github.com/axiomatic-systems/Bento4/issues/1039
cpdfhttps://github.com/johnwhitington/camlpdf/issues/75
sfconverthttps://github.com/mpruett/audiofile/issues/73

Binvariants를 사용하여 다른 버그를 발견하셨다면 알려주시기 바랍니다!

감사의 글

이 자료는 미국 국립과학재단(NSF)의 Award No. 2419798과 미국 국방고등연구계획국(DARPA)의 Award No. FA8750-24-2-0002, Subaward No. GR105409-SUB00001384의 지원을 받은 연구를 바탕으로 작성되었습니다.

도구 다운로드