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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
sandsifter — x86 프로세서 퍼저 | Kitploit
도구/GitHubGitHub/xoreaxeaxeax/sandsifter
Vulnerability AnalysisReverse EngineeringFuzzingHardware SecurityBinary Analysis
GitHubxoreaxeaxeax/sandsifter

sandsifter

x86 프로세서 퍼저

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

s a n d s i f t e r

: x86 프로세서 퍼저

개요

sandsifter는 x86 프로세서에서 숨겨진 명령어와 하드웨어 버그를 감사합니다. 머신 코드를 체계적으로 생성하여 프로세서의 명령어 집합을 검색하고 실행 중 이상 징후를 모니터링합니다. Sandsifter는 모든 주요 벤더의 비밀 프로세서 명령어, 디스어셈블러, 어셈블러, 에뮬레이터의 광범위한 소프트웨어 버그, 엔터프라이즈 하이퍼바이저의 결함, 그리고 x86 칩의 양성 및 보안에 치명적인 하드웨어 버그를 발견했습니다.

다양한 x86 프로세서가 존재하는 가운데, 이 도구의 목표는 사용자가 자신의 시스템에서 숨겨진 명령어와 버그를 확인할 수 있도록 하는 것입니다.

프로세서에 대한 기본 감사를 실행하려면:

root@kitploit:~
sudo ./sifter.py --unk --dis --len --sync --tick -- -P1 -t

demo_sandsifter

컴퓨터가 체계적으로 스캔되어 이상 명령어를 찾습니다. 상단 절반에서는 sandsifter가 현재 프로세서에서 테스트 중인 명령어를 볼 수 있습니다. 하단 절반에서는 sandsifter가 발견한 이상 징후를 보고합니다.

검색은 프로세서의 속도와 복잡성에 따라 몇 시간에서 며칠까지 걸릴 수 있습니다. 완료되면 결과를 요약합니다:

root@kitploit:~
./summarize.py data/log

demo_summarizer

일반적으로 프로세서에서 수백만 개의 문서화되지 않은 명령어가 발견되지만, 이들은 대개 소수의 다른 그룹으로 분류됩니다. 이상 징후를 비닝한 후, 요약 도구는 각 명령어를 문제 범주에 할당하려고 시도합니다:

  • 소프트웨어 버그 (예: 하이퍼바이저 또는 디스어셈블러의 버그),
  • 하드웨어 버그 (CPU의 버그), 또는
  • 문서화되지 않은 명령어 (프로세서에 존재하지만 제조사가 인정하지 않는 명령어)

'Q'를 눌러 종료하고 시스템 스캔의 텍스트 기반 요약을 얻습니다:

스캔 결과는 도구가 자동으로 분류하기 어려울 수 있으며 수동 분석이 필요할 수 있습니다. 결과 분석에 도움이 필요하면 부담 없이 ./data/log 파일을 [email protected]으로 보내주십시오. 이 로그에는 프로세서 제조사, 모델 및 개정판(/proc/cpuinfo) 외에는 개인 정보가 포함되지 않습니다.

결과

sandsifter로 스캔한 결과, 수십 개의 opcode 범주에 걸친 문서화되지 않은 프로세서 기능, 엔터프라이즈 하이퍼바이저의 결함, 거의 모든 주요 디스어셈블리 및 에뮬레이션 도구의 버그, 그리고 프로세서 자체에 보안 취약점을 여는 치명적인 하드웨어 버그가 발견되었습니다.

결과에 대한 자세한 내용은 프로젝트 백서에서 확인할 수 있습니다.

(TODO: 여기에 상세 결과 목록)

빌드

Sandsifter를 사용하려면 먼저 Capstone 디스어셈블러를 설치해야 합니다: http://www.capstone-engine.org/. Capstone은 일반적으로 다음 명령으로 설치할 수 있습니다:

root@kitploit:~
sudo apt-get install libcapstone3 libcapstone-dev
sudo pip install capstone

Sandsifter는 다음 명령으로 빌드할 수 있습니다:

root@kitploit:~
make

그런 다음 다음 명령으로 실행합니다:

root@kitploit:~
sudo ./sifter.py --unk --dis --len --sync --tick -- -P1 -t

플래그

플래그는 --flag를 사용하여 sifter에 전달하고, -- -f를 사용하여 injector에 전달합니다.

예시:

root@kitploit:~
sudo ./sifter.py --unk --dis --len --sync --tick -- -P1 -t

Sifter 플래그:

root@kitploit:~
--len
	모든 명령어에서 길이 차이 검색 (디스어셈블러가 예상한 것과 다르게 실행되거나, 디스어셈블러가 예상한 명령어가 존재하지 않는 경우)

--dis
	유효한 명령어에서 길이 차이 검색 (디스어셈블러가 예상한 것과 다르게 실행된 명령어)

--unk
	알려지지 않은 명령어 검색 (디스어셈블러가 모르지만 성공적으로 실행되는 명령어)

--ill
	--unk의 반대, 잘못된 디스어셈블리 검색 (성공적으로 실행되지 않지만 디스어셈블러가 인식하는 명령어)

--tick
	주기적으로 현재 명령어를 디스크에 기록

--save
	종료 시 검색 진행 상황 저장

--resume
	마지막 저장 상태에서 검색 재개

--sync
	검색 결과를 발견 즉시 디스크에 기록

--low-mem
	결과를 메모리에 저장하지 않음

Injector 플래그:

root@kitploit:~
-b
	모드: 무차별 대입

-r
	모드: 무작위 퍼징

-t
	모드: 터널 퍼징

-d
	모드: 외부 지시 퍼징

-R
	원시 출력 모드

-T
	텍스트 출력 모드

-x
	주기적 진행 상황을 stderr에 기록

-0
	널 역참조 허용 (sudo 필요)

-D
	중복 접두사 허용

-N
	NX 비트 미지원

-s 시드
	무작위 검색의 시드 값

-B brute_depth
	무차별 검색의 최대 검색 깊이

-P max_prefix
	검색할 최대 접두사 수

-i 명령어
	검색을 시작할 명령어 (포함)

-e 명령어
	검색을 종료할 명령어 (제외)

-c 코어
	검색을 수행할 코어

-X 블랙리스트
	지정된 명령어를 블랙리스트에 추가

-j 작업
	동시에 실행할 작업 수

-l range_bytes
	각 하위 범위의 기본 명령어 바이트 수

키

m: 모드 - sifter의 검색 모드 변경 (무차별 대입, 무작위, 또는 터널)

q: 종료 - sifter 종료

p: 일시 중지 - 검색 일시 중지 또는 재개

알고리즘

스캔은 네 가지 검색 알고리즘을 지원하며, 명령줄에서 설정하거나 단축키로 전환할 수 있습니다.

  • 무작위 검색은 테스트할 무작위 명령어를 생성합니다. 일반적으로 빠르게 결과를 생성하지만 복잡한 숨겨진 명령어와 버그를 찾지 못합니다.
  • 무차별 대입 검색은 사용자가 지정한 길이까지 명령어를 증가적으로 시도합니다. 거의 모든 상황에서 무작위 검색보다 성능이 낮습니다.
  • 구동 또는 변이 구동 검색은 유전 알고리즘을 통해 새롭고 점점 더 복잡한 명령어를 생성하도록 설계되었습니다. 유망하지만 이 접근 방식은 완전히 실현되지 않았으며 향후 연구를 위한 스텁으로 남겨졌습니다.
  • 터널링은 프레젠테이션과 백서에 설명된 접근 방식이며, 거의 모든 경우에 철저함과 속도 사이에서 최상의 균형을 제공합니다.

팁

  • sudo

    최상의 결과를 위해 도구는 루트 사용자로 실행해야 합니다. 이는 프로세스가 주소 0의 페이지를 메모리에 매핑할 수 있도록 하기 위해 필요하며, 이는 루트 권한이 필요합니다. 이 페이지는 많은 명령어가 메모리 액세스에서 세그먼트 폴트가 발생하는 것을 방지하여 더 정확한 오류 분석을 가능하게 합니다.

  • 접두사

    명령어 검색 깊이의 주요 제한은 탐색할 접두사 바이트 수이며, 접두사 바이트가 추가될 때마다 검색 공간이 약 10배씩 증가합니다. -P 플래그로 접두사 바이트를 제한하십시오.

  • 색상

    sifter의 인터페이스는 256색 터미널용으로 설계되었습니다. 터미널에 따라 세부 사항이 매우 다르지만, 대략 다음 명령으로 설정할 수 있습니다:

    root@kitploit:~
    export TERM='xterm-256color'
    
  • GUI

    인터페이스는 터미널이 최소한 특정 크기 이상이라고 가정합니다. 인터페이스가 제대로 렌더링되지 않으면 터미널 크기를 늘려 보십시오. 이는 종종 터미널 글꼴 크기를 줄여서 해결할 수 있습니다.

    어떤 경우에는 그래픽 프론트엔드 없이 도구를 실행하는 것이 바람직하거나 필요할 수 있습니다. 이는 injector를 직접 실행하여 수행할 수 있습니다:

    root@kitploit:~
    sudo ./injector -P1 -t -0
    

    직접 injector 호출의 결과를 필터링하려면 grep을 사용할 수 있습니다. 예를 들어,

    root@kitploit:~
    sudo ./injector -P1 -r -0 | grep '\.r' | grep -v sigill
    

    는 프로세서와 디스어셈블러가 명령어 길이에 대해 일치하지 않지만(grep '.r') 명령어가 성공적으로 실행된 경우(grep -v sigill)를 검색합니다.

  • 목표 지향 퍼징

    많은 경우 퍼저를 특정 대상으로 지시하는 것이 유용합니다. 예를 들어, 에뮬레이터가 반복된 'lock' 접두사(0xf0) 주변에 결함이 있다고 의심되면 -i 및 -e 플래그를 사용하여 퍼저를 명령어 공간의 이 영역으로 지시할 수 있습니다:

    root@kitploit:~
    sudo ./sifter.py --unk --dis --len --sync --tick -- -t -i f0f0 -e f0f1 -D -P15
    
  • 레거시 시스템

    매우 오래된 시스템(i586 클래스 프로세서, 낮은 메모리 시스템)을 스캔하려면 sifter에 --low-mem 플래그를, injector에 -N 플래그를 전달하십시오:

    root@kitploit:~
    sudo ./sifter.py --unk --dis --len --sync --tick --low-mem -- -P1 -t -N
    

    스캔이 너무 빨리 완료되는 경우(예: 스캔이 몇 초 만에 완료됨), 일반적으로 스캔 중인 프로세서에 이 플래그가 필요하기 때문입니다.

  • 32비트 vs. 64비트

    기본적으로 sandsifter는 호스트 운영 체제의 비트 수를 대상으로 빌드됩니다. 그러나 일부 명령어는 32비트 프로세스와 64비트 프로세스에서 다르게 동작합니다. 이러한 시나리오를 탐색하려면 64비트 시스템에서 32비트 sandsifter를 실행하는 것이 유용할 때가 있습니다.

    64비트 시스템에서 32비트 sandsifter를 빌드하려면 Capstone을 32비트로 설치해야 합니다. 이에 대한 지침은 확인할 수 있습니다.

참고 자료

  • 기술 및 결과에 대한 논의는 Black Hat 프레젠테이션에서 확인할 수 있습니다.
  • 기술적 세부 사항은 백서에 설명되어 있습니다.
  • Black Hat 프레젠테이션 슬라이드는 여기에 있습니다.

저자

sandsifter는 Christopher Domas (@xoreaxeaxeax)의 연구 노력입니다.

도구 다운로드
http://www.capstone-engine.org/에서

그런 다음 sandsifter를 32비트 아키텍처용으로 빌드해야 합니다:

root@kitploit:~
make CFLAGS=-m32

이렇게 하면 64비트 시스템에서 32비트 명령어 공간을 탐색할 수 있습니다.