BadUSBを赤外線リモコンで遠隔操作する「IR-BadUSB」:Black Hatでハードウェアハック!(2)(2/3 ページ)
筆者の今岡通博氏がハッカーの祭典「Black Hat」に投稿した、ハードウェアの改変を中心にしたハッキングの事例を紹介する本連載。第2回は、赤外線リモコンを使ってBadUSBを遠隔操作する「IR-BadUSB」だ。
ソースコード:setup()
#include <IRremote.h> #include "Keyboard.h" int recvPin = 7; IRrecv irrecv(recvPin); void setup ( ) { irrecv.enableIRIn(); pinMode(8,OUTPUT); pinMode(9,OUTPUT); digitalWrite(9,HIGH); Keyboard.begin(); }
リスト1は、IR-BadUSBのセットアップを行うためのソースコードになります。ArduinoのIRremoteとKeyboardのライブラリを使用します。IRremoteは赤外線信号を符号化するライブラリ、KeyboardはこのマイコンをPCのキーボードとして動作させるためのライブラリです。セットアップ機能は起動時に1回だけ実行されます。GPIOは、IRレシーバーの信号端子とIRレシーバーのVCC端子に正電圧、GND端子に0V電圧を供給するように設定します。この設定により、ブレッドボード上に余計な配線をすることなくIRレシーバーをブレッドボードに挿して使うことができます。
ソースコード:loop()
void loop ( ) { decode_results results; if (irrecv.decode(&results)) { if (results.value==0xFF48B7) Keyboard.println("Hello IRBadUSB! #0"); if (results.value==0xFF906F) Keyboard.println("Hello IRBadUSB! #1"); irrecv.resume(); } }
Setup関数が実行された後、loop()関数が一定時間ごとに何度もエンドレスに呼び出されます(リスト2)。IRレシーバーが0xFF48B7を受信するとキーシーケンス"Hello IRBadUSB! #0"を、#0xFF906Fを受信した場合は、"Hello IRBadUSB! #1"というキーシーケンスをPCのキーボードとして送出します。これらの#0と#1は、IRリモコンの0と1のキーが押されたことを示しています。
Digispark Attiny 85
図5のように、Arduino Pro Microよりさらに小さなマイコンボード「Digispark Attiny 85」を使えば、USBドングルの中に組み込むことも可能です。まさに、USBメモリ形状のIR-BadUSBを実現できるわけです。この他にも、開発ボードの「Leonardo USB ATMEGA32U4 mini」もDigispark Attiny 85と同様に小型でPCのUSBポートに直接差し込めるので、ドングルに組み込むことが可能です。
Wi-Fiスマートデバイス
図6はWi-FiとIR通信の橋渡しをするデバイスの内部構造です。プロセッサには「ESP32」を使用しています。このデバイスをアクセスポイントモードにしてターゲットのオフィスに置くと、モバイル端末などを使ってオフィス外からIR-BadUSBを遠隔操作される危険性があります。
赤外線LEDライト
赤外線の届く範囲を広げるために、暗視カメラ用の赤外線LEDライトを使う方法もあります。図7の赤外線LEDライトは以下のような仕様になっています。
- 48個の赤外線LEDを搭載
- 暗視カメラと組み合わせて使用
- 赤外線LEDの波長:940nm
- 電源アダプター:DC12V
赤外線LEDライトの多くは、夜間だけ動作するように光センサーが内蔵されています。今回のIR-BadUSBへの適用では、光センサーの機能は不要なので、遮光のために何か被せたり、黒いマジックや塗料で塗りつぶしたりする必要があります。もし電子工作が得意であればこの光センサーを基板から除去してもいいでしょう。
Copyright © ITmedia, Inc. All Rights Reserved.