
リプレイ/送信PoCを用いたワイヤレスマウス/キーボード攻撃
これは、マウスジャックツール https://github.com/RFStorm/mousejack を拡張するコードです。
元のツールに、リプレイ/送信ツールが追加されています。
Logitech Wireless Combo MK220(K220ワイヤレスキーボードとM150ワイヤレスマウスで構成) に基づくPOCパケットがlogsフォルダに含まれています。
詳細はこちら https://www.ckn.io/blog/2016/07/09/hijacking-wireless-mice-and-keyboards/
#使い方
疑似プロミスキャスモードのデバイス検出ツールで、チャンネルリストをスイープし、デコードされたEnhanced Shockburstパケットを表示します。
usage: ./nrf24-scanner.py [-h] [-c N [N ...]] [-v] [-l] [-p PREFIX] [-d DWELL]
optional arguments:
-h, --help show this help message and exit
-c N [N ...], --channels N [N ...] RF channels
-v, --verbose Enable verbose output
-l, --lna Enable the LNA (for CrazyRadio PA dongles)
-p PREFIX, --prefix PREFIX Promiscuous mode address prefix
-d DWELL, --dwell DWELL Dwell time per channel, in milliseconds
チャンネル1~5でデバイスをスキャン
./nrf24-scanner.py -c {1..5}
アドレスが0xA9から始まるデバイスを全チャンネルでスキャン
./nrf24-scanner.py -p A9
デバイス追従型スニファで、特定のnRF24デバイスがホッピングする際に追跡し、デコードされたEnhanced Shockburstパケットを表示します。
このバージョンはパケットをログファイルに記録するようにも変更されています。
usage: ./nrf24-sniffer.py [-h] [-c N [N ...]] [-v] [-l] -a ADDRESS -o OUTPUT [-t TIMEOUT] [-k ACK_TIMEOUT] [-r RETRIES]
optional arguments:
-h, --help show this help message and exit
-c N [N ...], --channels N [N ...] RF channels
-v, --verbose Enable verbose output
-l, --lna Enable the LNA (for CrazyRadio PA dongles)
-a ADDRESS, --address ADDRESS Address to sniff, following as it changes channels
-o OUTPUT, --output OUTPUT Output file to log the packets
-t TIMEOUT, --timeout TIMEOUT Channel timeout, in milliseconds
-k ACK_TIMEOUT, --ack_timeout ACK_TIMEOUT ACK timeout in microseconds, accepts [250,4000], step 250
-r RETRIES, --retries RETRIES Auto retry limit, accepts [0,15]
アドレス8C:D3:0F:3E:B4から全チャンネルでパケットをスニフし、output.logに保存
./nrf24-sniffer.py -a 8C:D3:0F:3E:B4 -o logs/output.log
キャプチャしたパケットのリプレイ、または生成したパケットの送信を行います。特定のnRF24デバイスがホッピングする際に追跡し、ログファイルからパケットを送信します。
usage: ./nrf24-replay.py [-h] [-c N [N ...]] [-v] [-l] -a ADDRESS -i INPUT_FILE [-t TIMEOUT] [-k ACK_TIMEOUT] [-r RETRIES]
optional arguments:
-h, --help show this help message and exit
-c N [N ...], --channels N [N ...] RF channels
-v, --verbose Enable verbose output
-l, --lna Enable the LNA (for CrazyRadio PA dongles)
-a ADDRESS, --address ADDRESS Address to sniff, following as it changes channels
-o INPUT_FILE, --input INPUT_FILE Input file that has the packets to sned
-t TIMEOUT, --timeout TIMEOUT Channel timeout, in milliseconds
-k ACK_TIMEOUT, --ack_timeout ACK_TIMEOUT ACK timeout in microseconds, accepts [250,4000], step 250
-r RETRIES, --retries RETRIES Auto retry limit, accepts [0,15]
keystroke.logファイルからパケットをホッピングチャンネル上のアドレス8C:D3:0F:3E:B4に送信
./nrf24-replay.py -a 8C:D3:0F:3E:B4 -i logs/keystroke.log
スター型ネットワークマッパーで、指定されたアドレスの最終バイトを変更し、各チャンネルで256の可能なアドレスそれぞれにpingを送信することで、スター型ネットワーク内のアクティブなアドレスを発見しようとします。
usage: ./nrf24-network-mapper.py [-h] [-c N [N ...]] [-v] [-l] -a ADDRESS [-p PASSES] [-k ACK_TIMEOUT] [-r RETRIES]
optional arguments:
-h, --help show this help message and exit
-c N [N ...], --channels N [N ...] RF channels
-v, --verbose Enable verbose output
-l, --lna Enable the LNA (for CrazyRadio PA dongles)
-a ADDRESS, --address ADDRESS Known address
-p PASSES, --passes PASSES Number of passes (default 2)
-k ACK_TIMEOUT, --ack_timeout ACK_TIMEOUT ACK timeout in microseconds, accepts [250,4000], step 250
-r RETRIES, --retries RETRIES Auto retry limit, accepts [0,15]
アドレス61:49:66:82:03が属するスター型ネットワークをマッピング
./nrf24-network-mapper.py -a 61:49:66:82:03
nRF24LU1+チップには、連続トーンを送信するテスト機構が搭載されています。この周波数は、SDRにアクセスできる場合に確認可能です。デバイス間の周波数オフセットは予期しない動作を引き起こす可能性があります。例えば、テストしたSparkFunブレイクアウトボードの1つは約300kHzの周波数オフセットがあり、隣接する2つのチャンネルでパケットを受信する原因となりました。
このスクリプトは、トランシーバーに渡された最初のチャンネルでトーンを送信させます。
usage: ./nrf24-continuous-tone-test.py [-h] [-c N [N ...]] [-v] [-l]
optional arguments:
-h, --help show this help message and exit
-c N [N ...], --channels N [N ...] RF channels
-v, --verbose Enable verbose output
-l, --lna Enable the LNA (for CrazyRadio PA dongles)
2405MHzで連続トーンを送信
./nrf24-continuous-tone-test.py -c 5
これは、辞書を使用してキーボード入力を同等のパケットにマッピングします。stdin入力を読み取り、マッピングされたパケットをlogs/keystrokes.logに記録します。
Ctrl+Cが押されるまで入力を受け付けます。
usage: ./keymapper.py
logsフォルダには、さまざまなキーボード操作に対応する事前保存されたパケットが含まれています。
Shell.logは、攻撃者のマシンに接続するPowerShellワンライナーを実行してWindowsマシンを悪用するためのものです。
keys.logファイルは、さまざまなキー押下やコンビネーションが同等のパケットにマッピングされたリファレンスとして機能します。
Windowsマシンを悪用するデモはこちらでご覧いただけます https://www.youtube.com/watch?v=YLzUeK1IvJs&feature=youtu.be