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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
TriforceOpenBSDFuzzer — TriforceAFL(즉, AFL 및 QEMU)을 사용한 OpenBSD amd64 시스템 콜 퍼징 | Kitploit
도구/GitHubGitHub/nccgroup/triforceopenbsdfuzzer
Dynamic Analysis (Sandboxing)Vulnerability AnalysisFuzzing
GitHubnccgroup/triforceopenbsdfuzzer

TriforceOpenBSDFuzzer

TriforceAFL(즉, AFL 및 QEMU)을 사용한 OpenBSD amd64 시스템 콜 퍼징

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

TriforceOpenBSDSyscallFuzzer

  • 20160825
  • https://github.com/nccgroup/TriforceOpenBSDFuzzer
  • Jesse Hertz [email protected]
  • Tim Newsham [email protected]

이것은 TriforceAFL(즉, AFL 및 QEMU)을 사용하여 OpenBSD amd64의 시스템 콜 퍼징을 수행하는 데 사용되는 파일 모음입니다. 이를 사용하려면 TriforceAFL(https://github.com/nccgroup/TriforceAFL), FlashRD 2.0 배포판(http://www.nmedia.net/flashrd/), 드라이버와 디스크 이미지를 빌드할 OpenBSD 시스템, 그리고 퍼저를 실행할 Linux 호스트가 필요합니다(다른 퍼저 호스트에서도 작동할 수 있지만, 우리는 Linux 호스트, 특히 Debian/Ubuntu에서만 TriforceAFL을 실행해 보았습니다).

OpenBSD 시스템에서는 모든 작업을 root로 수행할 것입니다. 이 시스템은 환경을 부트스트랩하는 데만 사용되기 때문입니다. 이미 OpenBSD 시스템이 있다면 root로 수행하는 작업을 줄여도 됩니다. OpenBSD 사용 경험이 풍부한 사용자라면 이 내용의 상당 부분이 지나치게 장황하게 느껴질 수 있습니다. 어쨌든 계속 진행합니다!

OpenBSD 시스템에서:

root@kitploit:~
export PKG_PATH=http://mirrors.sonic.net/pub/OpenBSD/$(uname -r)/packages/$(uname -m)/
pkg_add git
pkg_add python # pick python 2.7

다음으로 OpenBSD 소스와 커널 소스를 내려받은 후 압축을 풀어야 합니다:

root@kitploit:~
cd ~
ftp http://mirrors.sonic.net/pub/OpenBSD/5.9/src.tar.gz 
ftp http://mirrors.sonic.net/pub/OpenBSD/5.9/sys.tar.gz
cd /usr/src; tar -xzpf $HOME/src.tar.gz; tar -xzpf $HOME/sys.tar.gz;

이미 설치 CD가 있다면 다음 파일들을 내려받을 필요가 없습니다($CDMOUNT/5.9/amd64/*.tgz에 있으니까요). $DISTDIR만 적절히 설정하면 됩니다. 그렇지 않다면...

root@kitploit:~
cd ~
ftp http://mirrors.sonic.net/pub/OpenBSD/5.9/amd64/base59.tgz
ftp http://mirrors.sonic.net/pub/OpenBSD/5.9/amd64/man59.tgz
ftp http://mirrors.sonic.net/pub/OpenBSD/5.9/amd64/comp59.tgz
ftp http://mirrors.sonic.net/pub/OpenBSD/5.9/amd64/game59.tgz
export DISTDIR=~

이제 필요한 의존성이 설치되었으므로 빌드를 시작할 수 있습니다.

TriforceOpenBSDFuzzer 디렉터리로 들어가십시오. OpenBSD 파일(targ)과 퍼저 호스트 파일(fuzzHost)이 들어 있는 별도의 디렉터리가 있습니다.

드라이버 및 입력 파일 빌드

OpenBSD 호스트에서 targ 디렉터리로 들어가 make를 실행하십시오. 또한 이 디렉터리에서 입력 파일을 빌드해야 합니다.

root@kitploit:~
    mkdir inputs
    ./gen.py                   # build simple tests
    ./genTempl.py templ.txt    # build most syscall tests
    ./gen2.py                  # build complex syscall tests
    tar -czf ../inputs.tgz inputs

디스크 이미지 빌드

다음으로 FlashRD 배포판(http://www.nmedia.net/flashrd/)을 사용하여 드라이버가 포함된 디스크 이미지를 빌드해야 합니다. OpenBSD 호스트(위 섹션에서와 같이 /usr/src에 소스가 있고 /usr/src/sys에 커널 소스가 있는 상태)에서 이제 몇 가지 작업을 수행할 것입니다:

  • flashrd-2.0 추출
  • flashrd 패치
  • obsd 디렉터리를 만들고 이것저것 채워 넣기!
root@kitploit:~
    cd ~ #make sure this is on your /home parition, you will need significant disk space for this
    ftp http://www.nmedia.net/flashrd/flashrd-2.0.tar.gz
    tar xzf flashrd-2.0.tar.gz
    cd flashrd-2.0
    patch -p1 < $FUZZER/image-diff.txt #set $FUZZER to where you cloned TriforceOpenBSDFuzzer
    mkdir obsd
    cd obsd

    tar xzpf $DISTDIR/base59.tgz
    tar xzpf $DISTDIR/man59.tgz
    tar xzpf $DISTDIR/comp59.tgz
    tar xzpf $DISTDIR/game59.tgz
    tar xzpf /var/sysmerge/etc.tgz
    cp $FUZZER/image-etc-rc etc/rc
    cp $FUZZER/targ/inputs/ex1 root/ex1
    cd ..

이제 다음 명령을 실행하여 이미지를 만들 수 있습니다:

root@kitploit:~
    cp $FUZZER/targ/driver obsd/bin/driver
    ./flashrd obsd
    mv flashimg* $FUZZER/flashimg.bin
    mv bsd.gdb $FUZZER/bsd.gdb

flashimg.bin과 bsd.gdb의 사본을 저장해 두십시오. 퍼저 호스트에서 필요합니다.

디버깅을 위해 대화형 셸을 실행할 수 있는 두 번째 이미지를 만들고 싶을 수도 있습니다. obsd/etc/rc를 편집하여 /bin/driver -v를 /bin/sh -i로 바꾼 다음 두 번째 이미지를 만드십시오. 그런 다음 나중을 위해 flashimg-sh.bin과 bsd-sh.gdb의 사본을 저장합니다.

root@kitploit:~
    ./flashrd obsd
    mv flashimg* $FUZZER/flashimg-sh.bin
    mv bsd.gdb $FUZZER/bsd-sh.gdb

이제 OpenBSD 시스템에서 나와 퍼저 호스트로 돌아갈 수 있습니다(퍼저 호스트에서 사용할 수 있도록 $FUZZER를 복사해 두십시오).

퍼징

퍼저는 Linux 호스트에서 실행합니다(TriforceAFL이 빌드되고 실행되는 모든 호스트에서 작동해야 하지만, 특히 Linux가 아닌 호스트에서는 결과가 다를 수 있습니다). 퍼저 호스트에서 TriforceAFL을 ../TriforceAFL에 설치하십시오. flashimg*.bin과 bsd*.gdb를 fuzzhost 디렉터리로 복사하고, 입력 파일을 fuzzHost 디렉터리에 압축 해제하십시오:

root@kitploit:~
    cd TriforceOpenBSDFuzzer # this should now have the files we made on the BSD host in it
    cp flashimg* fuzzHost/
    cp bsd* fuzzHost/
    cd fuzzhost
    tar xzf ../inputs.tgz

이제 퍼징을 시작할 준비가 되었습니다! fuzzHost 디렉터리로 들어가 ./runFuzz -M M0으로 퍼저를 시작하십시오.

runFuzz 스크립트는 항상 마스터/슬레이브 모드로 실행되므로 마스터 또는 슬레이브 이름을 요구합니다. 자세한 사용 정보는 runFuzz 스크립트를 참조하십시오.

재현

테스트 케이스(예: 크래시)를 재현하려면 퍼저 호스트에서 다음을 실행하십시오:

root@kitploit:~
  ./runTest inputs/ex1
  ./runTest outputs/crashes/id*

또한 에뮬레이션 환경 밖에서 드라이버를 실행할 수 있습니다. -t 옵션으로 드라이버를 실행하고, -vv로 상세 로깅을 활성화하며, -x로 시스템 콜을 실제로 수행하지 않을 수 있습니다. 예를 들어 OpenBSD 호스트에서 다음을 실행하십시오:

root@kitploit:~
  ./driver -tvvx < inputs/ex1
  ktrace ./driver -t < inputs/ex1

커널을 부팅하고 테스트를 대화형으로 실행할 수 있으면 때때로 유용합니다. ./runSh를 실행하여 대화형 셸로 부팅할 수 있습니다.

테스트를 위해 flashimg-sh.bin 파일에 추가 파일(예: 테스트 케이스)을 넣고 싶을 것입니다. 이렇게 하려면 OpenBSD 호스트에서 추가 파일을 flashrd-2.0/obsd/root로 복사하고 플래시 이미지를 다시 빌드하십시오. 파일을 퍼저 호스트로 다시 전송한 후 runSh를 다시 실행하십시오. 추가 파일은 /root 디렉터리에서 찾을 수 있습니다. 또한 이미지를 생성한 후 OpenBSD 호스트에서 root로 플래시 이미지에 파일을 추가할 수도 있습니다:

root@kitploit:~
    vnconfig vnd0 ./flashimg.bin
    mount /dev/vnd0a /mnt
    cp file /mnt
    umount /mnt
    vnconfig -u vnd0

여기에 추가된 파일은 이미지가 부팅될 때 /flash에 나타납니다.

디버깅

앞서 flashrd 배포판에 적용한 패치는 커널 빌드 시 디버깅을 활성화하고 최적화를 비활성화합니다. 이렇게 하면 디버깅이 훨씬 쉬워집니다.

fuzzHost에서 커널을 디버깅하려면 OpenBSD 호스트에서 /usr/src/sys의 사본을 만들고 bsd-sh.gdb를 sys/x/x/x/x에 복사하십시오. 한 창에서 ./runSh를 실행하고 시스템이 부팅된 후 다음을 실행하십시오:

root@kitploit:~
    cd sys
    mkdir -p x/x/x/x
    cd x/x/x/x
    cp $FUZZER/bsd-sh.gdb .
    gdb -ex "target remote :1234" ./bsd-sh.gdb
도구 다운로드