
シンプルなWindowsおよびLinux向けキーストローク注入ツールで、保存されたWiFiデータ(SSIDとパスワード)を外部に流出させます。
# WiFiパスワードスティーラー
[](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)


映画で、一見普通のUSBドライブをコンピュータに差し込むだけでデータを盗むハッカーを見たことがありますか? 今日、あなたはまさにそれを行うデバイスを構築することになります。
⚠️ 免責事項:
このプロジェクトのすべてのコンテンツは、セキュリティ研究のみを目的としています。
2022年の夏、私は標的のコンピュータからデータを抽出できるデバイスを構築することに着手しました。しかし、実際にどのようにしてマルウェアを展開し、情報を流出させるのでしょうか? 以下のセクションでは、カスタムキーストローク注入ツールを作成する際の重要な手順、基本概念、技術的なニュアンスについて説明します。このプロジェクトは特にWiFi認証情報を対象としていますが、ペイロードは簡単に変更して、より高度な目的や悪意のある目的にも使用できます。唯一の制限は、あなたの創造性と技術的な専門知識です。
時間の経過とともに、このプロジェクトは多種多様なスクリプトやツールを含むように成長しました。元々はRubber Ducky(特にRaspberry Pi Pico(RPi Pico)を使用した費用対効果の高いバージョン)の機能を示すために作成されました。現在、プロジェクトの2つの主要コンポーネントは次のとおりです。
ロック解除された被害者のコンピュータへの物理的なアクセス。
ネットワーク媒体を介した流出のために、SMTPを使用して盗んだデータを送信するには、コンピュータがインターネットにアクセスできる必要があります。
Linuxエクスプロイトのために、被害者のコンピュータのパスワードを知っていること。
pico-duckyを作成した後は、修正したペイロード(Windowsエクスプロイト用のSMTP詳細、LinuxパスワードとUSBドライブ名が調整されたもの)をRPi Picoにコピーするだけです。
[!NOTE]
このツールをRubber Duckyを使用して構築することも可能ですが、RPi Picoは約4ドル、Rubber Duckyは80ドルかかることに注意してください。
ただし、pico-duckyは優れた低予算のソリューションですが、Rubber Duckyはステルス性や最新のDuckyScriptバージョンの使用といった利点を提供します。
RPi Picoでペイロードを記述するためにDucky Scriptを使用するには、まずRPi Picoをpico-duckyに変換する必要があります。pico-duckyを作成するには、次の簡単な手順に従ってください。
キーストローク注入ツールは、ホストマシンに接続されると、ユーザーが入力したキーストロークを模倣するコードを実行することで、悪意のあるコマンドを実行します。USBドライブのように見えますが、事前にプログラムされたペイロードを入力するキーボードとして機能します。Rubber Duckyのようなツールは、毎分1,000語以上を入力できます。一度作成すれば、物理的なアクセス権を持つ誰でもこのペイロードを簡単に展開できます。
ペイロードはSTRINGコマンドを使用して、注入キーストロークを処理します。1つ以上の英数字/句読文字を受け入れ、行の残りをそのままターゲットマシンに入力します。ENTER/SPACEはキーボードのキーを押す動作をシミュレートします。
ペイロードの実行を一時的に一時停止するためにDELAYコマンドを使用します。これは、コマンドラインなどの要素が読み込まれるのを待つ必要がある場合に便利です。新しいUSBデバイスがターゲットコンピュータに接続された直後の最初の段階で遅延を使用すると便利です。最初に、コンピュータは入力コマンドを受け入れ始める前に一連のアクションを完了する必要があります。HIDの場合、セットアップ時間は非常に短くなります。ほとんどの場合、ドライバは組み込まれているため、ほんの一瞬です。ただし、低速のPCではpico-duckyを認識するのに時間がかかる場合があります。一般的なアドバイスは、ターゲットに合わせて遅延時間を調整することです。
データ流出とは、コンピュータ/デバイスからデータが不正に転送されることです。データが収集されると、攻撃者は暗号化や圧縮を使用してネットワーク経由でデータを送信しながら、検出を回避するためにデータをパッケージ化できます。最も一般的な2つの流出方法は次のとおりです。
このアプローチはWindowsエクスプロイトに使用されました。ペイロード全体はこちらで確認できます。
このアプローチはLinuxエクスプロイトに使用されました。ペイロード全体はこちらで確認できます。
Windowsペイロード(payload1.dd)を使用するために、ピン間にジャンパーワイヤを接続する必要はありません。
パスワードが.txtファイルにエクスポートされると、ペイロードはYahoo SMTPを使用して指定されたメールアドレスにデータを送信します。より詳細な手順については、次のリンクを参照してください。また、ペイロードテンプレートをSMTP情報で更新する必要があります。つまり、RECEIVER_EMAIL、SENDER_EMAIL、およびメールのPASSWORDを更新する必要があります。さらに、メールの本文と件名も更新できます。
[!NOTE]
メールでデータを送信した後、
.txtファイルは削除されます。他のメールプロバイダーのSMTPを使用することもできますが、ペイロードに記述するSMTPサーバーとポート番号に注意する必要があります。
一部のネットワークでは、ファイアウォールで未知のSMTPの使用がブロックされている可能性があることに注意してください。
Linuxペイロード(payload2.dd)を使用するには、RPi Picoのcode.pyのコードに準拠するために、GNDとGPIO5の間にジャンパーワイヤを接続する必要があります。RPi Picoに複数のペイロードを設定する方法の詳細については、このリンクを参照してください。
図1: Linuxでのエクスプロイト
パスワードがコンピュータからエクスポートされると、データは指定されたUSBフラッシュドライブに保存されます。このペイロードを正しく機能させるには、USBドライブの正しい名前で更新する必要があります。つまり、2か所でUSBSTICKをUSBドライブの名前に置き換える必要があります。
さらに、ペイロード内のLinux PASSWORDを3か所で更新する必要もあります。上記のとおり、このエクスプロイトを成功させるには、被害者のLinuxマシンのパスワードを知っている必要があります。これにより、この攻撃の可能性は低くなります。
wifi_passwords_print.shスクリプトを実行するには、スクリプトをUSBスティックの正しい名前で更新し、次のコマンドをターミナルに入力します。
echo PASSWORD | sudo -S sh wifi_passwords_print.sh USBSTICK
ここで、PASSWORDはアカウントのパスワード、USBSTICKはUSBデバイスの名前です。
NetworkManagerは接続プロファイルの概念に基づいており、データの読み書きにプラグインを使用します。.ini形式のキーファイル形式を使用し、ネットワーク設定プロファイルを保存します。keyfileは、NetworkManagerが持つすべての接続タイプと機能をサポートするプラグインです。ファイルは/etc/NetworkManager/system-connections/にあります。keyfile形式に基づいて、ペイロードはgrepコマンドを正規表現と共に使用して、目的のデータを抽出します。ファイルフィルタリングには、修正された前方参照アサーション((?<=keyword))が使用されました。前方参照アサーションは文字列内の特定の位置(つまり、keywordの直後の位置)で一致し、そのテキスト自体を一致の一部にしないのに対し、正規表現(?<=keyword).*はkeyword以降の任意のテキストに一致します。これにより、ペイロードはSSIDおよびpsk(事前共有鍵)キーワードの後の値を一致させることができます。
NetworkManagerの詳細については、以下の役立つリンクを参照してください。
以下は、被害者のマシンから.txtファイルに流出・フォーマットされたデータの例です。
Rubber DuckyがRPi Picoに対して持つ利点の1つは、接続時にUSBマスストレージデバイスとして表示されないことです。コンピュータに接続されると、マシンからはUSBキーボードとしてしか認識されません。これはRPi Picoのデフォルトの動作ではありません。接続時にRPi PicoがUSBマスストレージデバイスとして表示されないようにするには、ピン18(GND)とピン20(GPIO15)の間にジャンパーワイヤを接続する必要があります。詳細については、このリンクを参照してください。
💡 ヒント:
- ピンを接続する前に、ペイロードをRPi Picoにアップロードしてください。
- ピンをはんだ付けしないでください。後でペイロードを変更/更新したい可能性があるためです。
機能するペイロードファイルを作成するには、writer.pyスクリプトを使用するか、テンプレートファイルを手動で変更できます。スクリプトを正常に実行するには、スクリプトファイル名に加えて、OSの名前(windowsまたはlinux)とペイロードファイルの名前(例:payload1.dd)を渡す必要があります。以下に、Windowsペイロードを作成する際のwriterスクリプトの実行例を示します。
python3 writer.py windows payload1.dd
いくつかの小さな変更を加えるだけで、以前使用したスクリプトをBash Bunnyでも実行できるように適合させることができます。Bash Bunnyは、信頼できるUSBデバイスをエミュレートすることで動作します[1]。このプロジェクトでは、次のコマンドを使用してフラッシュストレージデバイスをエミュレートするように設定します[1, 2]。
ATTACKMODE HID STORAGE
DuckyScriptのATTACKMODEコマンドを使用して、Bash Bunnyがエミュレートするデバイスのタイプを定義できます[1]。各アタックモードは、一意のUSBベンダーID(VID)とプロダクトID(PID)を使用してシステムに登録されます[1]。また、複数のアタックモードを連結して組み合わせることも可能です。
図2: Bash Bunny Mark IをPCに接続
Bash BunnyはオリジナルのDuckyScriptコマンドをサポートしているため、Rubber Duckyセクションのスクリプトを再利用できました。これらのコマンドをインラインで使用するには、先頭にQUACKコマンドを付ける必要があります[1]。例えば、WINDOWS rと書く代わりに、Q WINDOWS rと書きます。
ペイロードをBash Bunnyにロードするには、デバイスをアーミングモード(スイッチ位置3:USBプラグに最も近い位置)に設定する必要があります[1]。接続したら、payload.txtとexfil.txtをpayloads\switch1にコピーします。ペイロードはpayload.txtという名前でなければなりません[1,2]。ペイロードで参照されるその他のサポートファイルは自由に名前を付けることができます。
参考までに、Bash Bunnyのマスストレージディレクトリ構造は以下のとおりです[2]。
BashBunny/
├── loot/
│ └── (ペイロードから流出したデータが保存されます)
└── payloads/
├── library/
│ └── (再利用可能なスクリプトまたはモジュール)
├── switch1/
│ ├── payload.txt
│ └── (オプションのファイル、例:exfil.txt、スクリプトなど)
└── switch2/
├── payload.txt
└── (オプションのファイル)
図3: Bash Bunny マスストレージディレクトリ構造
スクリプトの実行が完了すると、結果はloot\wifi_pass.txtに保存されます。ターゲットコンピュータに保存されたWiFiパスワードがない場合、ファイルは空になります。
[!NOTE]
Bash Bunny攻撃はPowerShellスクリプト(
exfil.txt)に依存しているため、Windowsシステムでのみ使用できます。Linuxで同様のアプローチを使用するには、ペイロードを変更し、PowerShellスクリプトを上記のLinuxセクションで参照されているBashスクリプトに置き換える必要があります。
このpico-duckyは現在、Windows OSでのみ動作します。
この攻撃を展開するには、ロック解除されたデバイスへの物理的なアクセスが必要です。
Linuxエクスプロイトが成功する可能性ははるかに低くなります。なぜなら、成功するには、ロック解除されたデバイスへの物理的なアクセスに加えて、Linuxマシンの管理者パスワードを知っている必要があるからです。
マシンのファイアウォールやネットワークのファイアウォールにより、盗んだデータをネットワーク媒体経由で送信できない可能性があります。
攻撃を展開するために使用するコンピュータの速度が異なるため、ペイロードの遅延が不適切になる可能性があります。
pico-duckyデバイスはあまりステルス性が高くなく、実際にはその逆で、特にピンにはんだ付けすると非常にかさばります。
また、pico-duckyデバイスは同じスクリプトを実行するRubber Duckyに比べて著しく遅いです。
Caps Lockがオンの場合、ペイロードコードの一部が実行されず、エクスプロイトは失敗します。
コンピュータの環境が英語以外に設定されている場合、このエクスプロイトは成功しません。
現在、pico-duckyはDuckyScript 3.0をサポートしていません。使用できるのはDuckyScript 1.0のみです。3.0バージョンが必要な場合は、Rubber Duckyを使用する必要があります。このエクスプロイトではバージョン3.0は不要です!