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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
USB Spy — USB 대용량 저장장치 트래픽을 블록 및 파일 수준에서 가로채고 분석하며, USB 장치를 에뮬레이션하고, 보안 연구, 포렌식 및 TOCTOU 취약점 테스트를 위한 맞춤형 Python 스텁을 지원합니다. | Kitploit
도구/GitLabGitLab/christophe.duvernois/usb-spy
Vulnerability AnalysisExploitationReverse EngineeringForensicsDigital ForensicsPenetration TestingHardware SecurityRed TeamingFirmware Analysis
GitLabchristophe.duvernois/usb-spy

USB Spy

USB 대용량 저장장치 트래픽을 블록 및 파일 수준에서 가로채고 분석하며, USB 장치를 에뮬레이션하고, 보안 연구, 포렌식 및 TOCTOU 취약점 테스트를 위한 맞춤형 Python 스텁을 지원합니다.

321개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기

USB SPY

Logo

License: GPL v3 pipeline

usb-spy는 WiFi 또는 Ethernet 지원 마이크로컨트롤러를 기반으로 구축된 USB Mass Storage 트래픽 분석기입니다.

이 보드는 대상 시스템에 가짜 USB Mass Storage 장치로 디스크 이미지(FAT 또는 모든 파일시스템)를 노출하는 반면, 실제 저장 데이터는 WiFi 또는 Ethernet을 통해 원격 서버에서 제공됩니다. 이 구조를 통해 usb-spy는 대상이 수행하는 모든 블록 액세스를 가로채고 분석할 수 있습니다.

usb-spy는 원시 블록 수준 추적 외에도 파일시스템을 이해하고 액세스된 각 블록을 해당 파일 및 디렉터리에 매핑하여 원시 섹터 번호 대신 읽거나 쓰고 있는 파일을 즉시 확인할 수 있게 해줍니다.

또한 usb-spy는 JSON 구성 파일을 통해 공급업체 ID, 제품 ID, 일련번호, 제조업체 및 제품 이름과 같은 장치 속성을 사용자 정의하여 모든 USB 장치를 에뮬레이션할 수 있습니다. 이를 통해 테스트 및 분석 목적으로 특정 USB 장치를 가장할 수 있습니다.

이 도구는 사용자가 작성한 Python 스텁을 통해 쉽게 확장 가능하며, USB 읽기/쓰기 이벤트 및 블록 수준 작업 처리를 위한 사용자 정의 로직을 구현할 수 있습니다.

설계

파일시스템 인식

지원되는 파일시스템이 감지되면 usb-spy는:

  • 파일시스템 메타데이터를 파싱합니다.
  • 블록 주소를 파일 경로로 확인합니다.
  • 각 액세스에 대해 사람이 읽을 수 있는 파일명과 디렉터리를 표시합니다.

현재 지원되는 파일시스템:

  • FAT32
  • EXT4

향후 추가 파일시스템에 대한 지원이 추가될 예정입니다.

파일시스템이 지원되지 않는 경우에도 usb-spy를 사용할 수 있습니다:

  • 모든 USB 읽기/쓰기 작업이 캡처됩니다.
  • 액세스 정보는 원시 블록 수준에서 표시됩니다.
  • 파일명 및 디렉터리 정보는 제공되지 않습니다.

이를 통해 usb-spy는 알 수 없거나, 사용자 정의 또는 독점 파일시스템에서도 유용합니다.

일반적인 사용 사례

  • USB Mass Storage 리버스 엔지니어링
  • 펌웨어 및 OS 동작 분석
  • 부팅 또는 런타임 중 파일 액세스 패턴 이해
  • 보안 연구 및 디지털 포렌식
  • TOCTOU(Time-of-Check Time-of-Use) 취약점 탐지 및 악용

지원되는 보드용 USB-SPY 펌웨어 빌드

지원 보드

각 지원 보드에 대한 펌웨어 빌드 지침은 여기에 설명되어 있습니다:

  • RP2040 마이크로컨트롤러 기반 Raspberry Pi Pico 보드
    • Raspberry Pico W
    • W5500-EVB-Pico
    • W6100-EVB-Pico
  • Adafruit Feather M0 (일부 기능 미지원)

USB-SPY 서버 도구 빌드

소스 코드는 src 디렉터리에 있습니다. FAT 이미지를 로드하고, TCP 포트를 통해 노출하며, 이미지에 대한 모든 액세스를 기록합니다. 파일 및 디렉터리 정보를 출력하기 위해 이 도구는 TheSleuthKit 라이브러리를 사용합니다.

빌드하려면 루트 디렉터리에서 다음 명령을 실행하세요.

모든 서브모듈 가져오기

root@kitploit:~
git submodule update --init --recursive

그런 다음 waf configure 명령을 실행합니다.

root@kitploit:~
./waf configure

필요한 모든 종속성을 확인하고 빌드한 후, 실제 프로젝트 빌드를 위해 다음을 실행합니다.

root@kitploit:~
./waf build

바이너리는 wbuild 디렉터리에 생성됩니다.

FAT32 이미지 생성

mtools 유틸리티 패키지를 사용하면 쉽게 할 수 있습니다.

2MB 파일 생성

root@kitploit:~
dd if=/dev/zero of=disk.img bs=1M count=2

FAT 파일시스템 적용 (-F는 FAT32, 기본값은 자동)

root@kitploit:~
mformat -i disk.img ::

파일 추가

root@kitploit:~
mcopy -i disk.img example.txt ::

파일 목록 보기

root@kitploit:~
mdir -i disk.img ::

파일 추출

root@kitploit:~
mcopy -i disk.img ::/example.txt extracted.txt

usb-spy 실행

새로 생성한 이미지로 spy 실행

root@kitploit:~
./usb-spy -v disk.img

보드를 대상 USB 포트에 연결하세요.

특정 USB 장치 에뮬레이션

특정 USB 장치를 에뮬레이션하려면 JSON 구성 파일을 통해 매개변수를 재정의할 수 있습니다:

다음 JSON 파일은 Kingston DataTraveler USB 장치를 에뮬레이션합니다:

root@kitploit:~
{
	"vendor_id": 2385,
	"product_id": 5734,
	"bcd_device": 272,
	"product_rev": "3.0",
	"manufacturer": "Kingston",
	"product_name": "DataTraveler",
	"serial": "509C4BBFACCDE742880C026B",
	"language": 1033
}

이 구성 파일로 spy 실행

root@kitploit:~
./usb-spy -c config/kingston.json disk.img

이 장치의 dmesg 출력:

root@kitploit:~
usb 1-8: New USB device found, idVendor=0951, idProduct=1666, bcdDevice= 1.10
usb 1-8: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-8: Product: DataTraveler
usb 1-8: Manufacturer: Kingston
usb 1-8: SerialNumber: 509C4BBFACCDE742880C026B
usb-storage 1-8:1.0: USB Mass Storage device detected
scsi host6: usb-storage 1-8:1.0
scsi 6:0:0:0: Direct-Access     Kingston DataTraveler     3.0  PQ: 0 ANSI: 2

사용자 정의 동작 구현

모든 읽기/쓰기 이벤트에 대해 자신만의 로직을 구현하고 싶다면 Python으로 쉽게 할 수 있습니다.

다음 더미 이미지와 같이 Python에서 USBImage 클래스를 구현하세요:

root@kitploit:~
class USBImage:
    def __init__(self, *args, **kwargs):
        """
        USBImage를 초기화합니다.
        :param args: 다음을 포함해야 합니다:
            - filename: 관리할 파일의 이름.
        :param kwargs: c++ 명령줄에서 전달되는 임의의 인수. 다음을 포함합니다:
            readOnly: 인터페이스가 읽기 전용인지 여부.
            verbose: 상세 로깅 활성화 여부.
            block: 블록 모드 활성화 여부.
        """
        pass

    def getBlockNumber(self):
        """블록 번호 가져오기"""
        return 100

    def getBlockSize(self):
        """블록 크기 가져오기"""
        return 512

    def read(self, lba, buffer, size):
        """블록 읽기"""
        print(f"read block={lba} size={size}")
        for i in range(size):
            buffer[i] = (lba + i) % 256  # 데이터 읽기 시뮬레이션
        return size

    def write(self, lba, buffer, size):
        """블록 쓰기"""
        print(f"write block={lba} size={size}")
        print(buffer)
        return size

    def flush(self):
        """블록 플러시"""
        print("flush data")

그리고 Python 모듈로 spy를 실행하세요.

root@kitploit:~
./usb-spy --py python/dummy.py disk.img

명령줄에서 Python 클래스에 임의의 인수를 전달할 수도 있습니다. 인수는 kwargs에서 사용할 수 있습니다.

root@kitploit:~
./usb-spy --py python/dummy.py --py-args arg1=2 --py-args arg2=Hello disk.img

또한 usb-spy 바이너리에서 기본적으로 구현된 기능의 완전한 구현(약 100줄 코드)을 제공하는 rawimage 예제에서 시작할 수도 있습니다.

면책 조항

이 프로젝트는 "있는 그대로" 제공됩니다. 정확성, 보안 또는 특정 목적에의 적합성에 대한 보장이 없습니다.

도구 및 펌웨어는 사용자의 책임 하에 사용하십시오. 저자 및 기여자는 이 소프트웨어 또는 하드웨어 사용으로 인해 발생할 수 있는 손해, 데이터 손실 또는 법적 결과에 대해 책임을 지지 않습니다.

기여

기여를 환영합니다! 다음 단계를 따라주세요:

  1. 저장소를 포크하세요.
  2. 기능 또는 버그 수정을 위한 새 브랜치를 만드세요.
  3. 자세한 설명과 함께 풀 리퀘스트를 제출하세요.

라이선스

License: GPL v3

이 프로젝트는 GNU General Public License v3.0에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.

도구 다운로드