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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Fault-Injection-Finder — 자동으로 오류 주입 공격을 찾고 실행합니다. | Kitploit
도구/GitHubGitHub/geeoon/fault-injection-finder
Embedded Systems SecurityExploitationFuzzingHardware HackingPenetration TestingHardware SecurityHardware & IoT SecurityBinary Analysis
GitHubgeeoon/fault-injection-finder

Fault-Injection-Finder

자동으로 오류 주입 공격을 찾고 실행합니다.

저장소 보기
14448일 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

결함 주입 탐지기

root@kitploit:~
▄▖    ▜ ▗   ▄▖   ▘    ▗ ▘      ▄▖▘   ▌     
▙▖▀▌▌▌▐ ▜▘  ▐ ▛▌ ▌█▌▛▘▜▘▌▛▌▛▌  ▙▖▌▛▌▛▌█▌▛▘ 
▌ █▌▙▌▐▖▐▖  ▟▖▌▌ ▌▙▖▙▖▐▖▌▙▌▌▌  ▌ ▌▌▌▙▌▙▖▌  
                ▙▌                         

정충근(Geeoon Chung)과 네이트 스나이더(Nate Snyder)

이 저장소는 결함 주입 공격 프로젝트의 소프트웨어 부분입니다. 하드웨어 부분은 이 저장소를 확인하세요.

전체 프로젝트

이 프로젝트의 목표는 프로그램 실행 중 건너뛰거나 NOP 처리될 때 보안 문제를 일으키는 명령어를 찾는 것입니다.

  1. 전처리
    1. 바이너리 로드
    2. NOP 처리 시 보안 문제를 일으킬 가능성이 더 높은 명령어 식별
  2. 유니콘 에뮬레이션
    1. n번째 명령어를 NOP 처리하며 프로그램 실행
    2. 프로그램 출력을 확인하여 보안 오류 발생 여부 검사
      1. 잘못된 페치가 발생하면 프로그램 입력의 모든 비트를 반전
      2. 프로그램 재실행
      3. 다른 주소에서 잘못된 페치가 발생하면 기록. 이는 프로그램 입력이 프로그램 카운터(PC)에 영향을 줄 수 있음을 의미합니다.
  3. Angr SMT 해결
    1. 유니콘 에뮬레이션이 PC 제어를 나타내면, 프로그램을 심볼릭 입력으로 실행하고 유니콘 단계에서 건너뛴 명령어를 생략
    2. 결국 심볼릭 변수가 PC 레지스터에 들어가는지 확인
    3. 사용자 지정 PC 값을 찾기 위해 입력을 해결
    4. 해결 가능하면 지정된 PC를 초래한 입력 기록
  4. 흥미로운 명령어 내보내기
  5. targets/tooling.py 스크립트와 FPGA를 사용하여 대상에서 명령어 테스트

소프트웨어 흐름도

이 프로젝트에 대한 프레젠테이션

세부 사항

다음 중 하나 이상을 수행하여 보안 문제를 검색합니다:

  1. 프로그램의 IO 출력 확인
  2. 프로그램의 종료 코드 확인
  3. 코드의 "도달할 수 없는" 부분에 수동으로 오류 트리거 추가
  4. 프로그램 카운터(PC)가 수정 가능한지 확인하기 위해 오염 검사 수행
  5. angr(SMT 솔버)를 사용하여 사용자가 지정한 PC 값을 초래하는 입력 해결

글리칭(Glitching)

오류를 주입하기 위해 크로우바 글리칭을 선택했습니다. 이는 SI 2302 N-채널 MOSFET이 있는 FPGA를 사용하여 구현했습니다. FPGA 툴링 링크. 자세한 내용은 targets에서 확인할 수 있습니다.

트리거

트리거로 FPGA에 GPIO 입력을 사용하기로 했습니다. 테스트 코드에서는 LED를 토글하지만, 트리거를 위한 전력 분석을 수행할 수도 있습니다.

사용법

의존성

의존성은 requirements.txt에 나열되어 있습니다. pip install -r requirements.txt로 설치하세요.

root@kitploit:~
usage: main.py [-h] [-s INDEX] [-i MAX_ITERATIONS] [-o EXPECTED_OUTPUT] [-e EXPECTED_EXIT] [-d DESIRED_PC] [-v] [-n] [-t TYPES] [-b BINARY_ADDR]
               [-u OUTPUT_DIR] [-f BEGIN_ADDR] [-g END_ADDR]
               binary_path input_path

Automatically finds hardware security vulnerabilities in binaries. Only support ARM.

positional arguments:
  binary_path           The binary to examine
  input_path            The path to the input to the program

options:
  -h, --help            show this help message and exit
  -s, --simulate INDEX  Runs a Unicorn simulation with the fault at an nth instruction issue. Ignores all other flags besides --max_iterations and
                        --verbose.
  -i, --max-iterations MAX_ITERATIONS
                        The maximum number of instructions to run in the binary before ending early
  -o, --expected-output EXPECTED_OUTPUT
                        The expected output of the program on a successful security incident
  -e, --expected-exit EXPECTED_EXIT
                        The expected exit of the program on a successful security incident
  -d, --desired-pc DESIRED_PC
                        The program counter we desire to achieve if possible. In hex or decimal. Keep in mind that this is the absolute address,
                        not relative to the binary.
  -v, --verbose         Verbosity: warning, info, debug
  -n, --no-thumb        Whether or not to run in thumb mode
  -t, --types TYPES     Which types of instructions to focus on. 0) Brute force: every issue. 1) Recommended defaults. 2) Only conditional
                        branches. 3) Only compare/tests. 4) Only returns. 5) Only branches, calls, returns, and compares
  -b, --binary-addr BINARY_ADDR
                        The address to flash the binary to. Defaults to 0x1000000. Can be in hex or decimal.
  -u, --output-dir OUTPUT_DIR
                        The directory to store faults that were found.
  -f, --begin-addr BEGIN_ADDR
                        The starting address of the instructions that should be considered for skipping. (inclusive.) If set, -g must also be set.
  -g, --end-addr END_ADDR
                        The ending address of the instructions that should be considered for skipping. (inclusive.) If set, -f must also be set.

사용 예시

출력 확인

python3 main.py ./binaries/sha256.bin ./inputs/sha256.bin -o ./expecteds/sha256.bin -v

출력을 확인하여 공격 목표를 달성했는지 검사합니다.

프로그램 카운터 제어

python3 main.py ./binaries/aes_ecb.bin ./inputs/aes_ecb.bin -d 0x100045c -v -u outputs/aes_ecb

aes_ecb 바이너리를 테스트하여 사용자 지정 "도달할 수 없는" 함수로 점프하고 입력을 디렉토리에 저장합니다.

시뮬레이션에서 글리치 테스트

python3 main.py ./binaries/aes_ecb.bin ./outputs/aes_ecb/solved_pc_188.bin -s 188

특정 글리치 사이클 및 입력에 대해 유니콘 시뮬레이션을 실행합니다. 이 경우 프로그램 카운터 제어의 출력입니다.

제한 사항

  1. 현재 이 프로그램은 ARM 명령어 세트만 지원합니다. Thumb 및 non-Thumb 모드를 모두 지원합니다.
  2. 일부 바이너리는 입력에 대해 매우 복잡한 연산(예: 해싱)을 수행하여 SMT 솔버가 느려집니다.

참고 사항

바이너리 실행

binaries/sources에 포함된 코드는 테스트용일 뿐입니다. 실제 하드웨어를 대상으로 하지 않으며, 도구 테스트를 위한 것입니다.

장치를 대상으로 하는 특정 바이너리를 실행하려면, 단순한 IO 외의 주변 장치 호출이 없도록 바이너리의 관련 부분을 추출해야 합니다. 예를 들어, 바이너리가 UART를 사용하는 경우, UART 호출을 binaries/stubs에 있는 _read 및 _write 스텁 호출로 대체하여 바이너리를 패치할 수 있습니다. 또한 GPIO는 원하는 경우 _trigger 호출로 대체할 수 있습니다. 도구를 통해 코드를 실행하려면, 패치된 바이너리를 포함하는 main 심볼을 만든 다음 binaries/startup.s 코드와 링크합니다. 이렇게 하면 도구가 시작되어 바이너리를 실행할 수 있습니다.

구체적인 예는 TIMSPM0L2228에서 이 과정을 보여주는 targets 디렉토리를 확인하세요.

소스에서 컴파일

대상에서 실행 중인 바이너리를 반영하는 바이너리를 만들려면 동일한 버전의 컴파일러와 동일한 컴파일 플래그/단계를 사용해야 합니다. 자신만의 프로그램을 만들어 테스트하는 경우에는 괜찮습니다. 그러나 공격 대상의 소스 코드만 있는 경우, 실행 중인 정확한 바이너리로 컴파일할 가능성이 낮습니다. 따라서 가능하면 대상에서 실행 중인 정확한 바이너리를 사용하는 것이 좋습니다.

도구 다운로드