USB HID 공격 방지: 아두이노 레오나르도 키보드 익스플로잇 시연
부품 및 소모품
| 부품 | 수량 |
| Arduino Leonardo (HID 지원 필수) | 1 |
| 마이크로 SD 카드 리더기 | 1 |
| SD 카드 (수 GB) | 1 |
| 푸시버튼 3핀 (VCC, GND, 신호, 내장 저항) | 1 |
| 점퍼 와이어 (암-수, 암-암) | 1 |
| USB-A to 마이크로 USB 케이블 | 1 |
프로젝트 목적
Arduino Leonardo의 HID(Human Interface Device) 기능을 이용해 키보드/마우스를 가장한 악성 USB 장치의 작동 원리를 시연하고, 이에 대한 방어 대책을 이해하기 위한 교육용 프로젝트입니다. 악용을 위한 가이드가 아니며, 보안 인식을 높이는 것이 목적입니다.
학습 내용
- Arduino Leonardo로 키보드 에뮬레이션하기
- SD 카드에서 데이터 읽기
- 파일 스캔 및 이메일 전송 파이썬 스크립트 작성
- USB 해킹 장치로부터 시스템 보호하기
장치 제작
작동 원리
Leonardo는 HID 장치로 인식되어 키보드/마우스 입력을 주입할 수 있습니다. 버튼을 누르면 SD 카드의 스크립트 파일(hack.txt)을 읽어 키 입력 시퀀스를 실행합니다. 데모에서는 우분투 리눅스에서 터미널을 열고(Ctrl+Alt+T), 파이썬 스크립트를 생성해 ~/Documents 폴더의 .txt 파일을 수집해 지정된 G메일로 전송한 뒤, 스크립트 삭제 및 터미널 종료까지 자동 수행합니다.
조립 지침
- 마이크로 USB 케이블을 Leonardo에 연결
- 푸시버튼: GND, VCC, 신호핀(D8) 연결
- SD 카드 리더: ICSP 헤더에 연결 (Leonardo는 ICSP 핀이 디지털 핀과 분리됨). SS 핀 → 디지털 핀 10
- 아두이노 코드 업로드 (보드: Leonardo, 보드레이트: 9600)
- SD 카드 FAT16/32 포맷 후
hack.txt 복사
hack.txt 내 이메일 설정(smtp_user, smtp_pass, to_address) 수정
- SD 카드를 리더기에 장착
hack.txt 명령 구조
- 일반 텍스트: 그대로 키 입력 전송
Sleep::밀리초 - 지연 시간
Command::키코드1,키코드2,... - 동시 키 누름 (예: Command::KEY_LEFT_CTRL,KEY_LEFT_ALT,t)
지원 특수 키: KEY_LEFT_CTRL, KEY_LEFT_SHIFT, KEY_LEFT_ALT, 방향키, KEY_RETURN, KEY_ESC, KEY_F1~KEY_F12 등
공격 시나리오 상세 (우분투 대상)
- 버튼 누름 → SD 카드 읽기 시작
Ctrl+Alt+T로 터미널 열기
vi hack.py로 파일 생성 후 파이썬 스크립트 작성
- 스크립트 실행:
nohup python hack.py & (백그라운드)
- 증거 삭제:
rm -rf hack.py
Alt+F4로 터미널 닫기
전체 과정이 수 초 내 완료되며 흔적이 거의 남지 않습니다.
한계점 및 개선 방향
- 피드백 없임: 명령 실행 완료 시점을 알 수 없어 임의 지연 필요
- 권한 문제: USB 포트 접근 제한, 설치 권한 등
- 타이핑 속도 제한
- 특정 OS(데모: 우분투)에만 동작
- 개선: 와이파이 모듈 추가로 원격 스크립트 다운로드, Arduino Micro로 소형화, 기성 익스플로잇 활용 등
대응 방안 (Countermeasures)
- USB 포트 비활성화 - 윈도우 그룹 정책 또는 레지스트리 편집
- USB 장치 화이트리스트 - 허용된 장치만 인식하도록 설정
- 자리 비울 때 화면 잠금 (Win+L, Ctrl+Alt+Del)
- 관리자 권한 최소화 - 루트/관리자 계정으로 상시 로그인 금지
- 자동 업데이트 활성화 - OS 및 보안 패치 최신 유지
소스 코드
아두이노 스케치(keyboard_exploit.ino)와 SD 카드용 hack.txt, 생성되는 hack.py 파일이 포함됩니다. GitHub 저장소: github.com/danionescu0/arduino (projects/keyboard_exploit 폴더)
회로도
프리츠핑 회로도 파일(sketch_D4S1ftXkTU.fzz) 제공. ICSP 헤더 연결 방식 필수 확인.