Sniffing Proprietary 2.4GHz Signals

4068 ワード

(U) Sniffing Proprietary 2.4GHz Signals
HackRFまたはRTL-SDRコンバータを使用すると、それは素晴らしいですが、私は最終的にすべてのものを小さな空間にパッケージする必要があります.
別のページを参照してください:Travis Goodspeed、著者は似たようなキーボード(Microsoft Comfort Desktop 5000)を嗅いだだけでなく、GoodFETというデバイスとpythonというスクリプトgoodfetをどのように使うかを実証しました.nrfは、nRF 24 L 01+チップに2.4 GHzのデータを嗅ぐ.
Travisは,この装置を嗅ぐには複数の難点があり,チャネル(周波数)を指定するだけでなく,MACアドレスを指定する必要があることを発見した.nRFチップは、指定されたMACアドレスに送信されるパケットのみを提供する.また、nRFチップはMACアドレスデータを送信しません.なぜなら、あなたが指定したからです(RX_ADDR_P[0-5]6 ).
TravisはMAC長を指定した場合、マニュアルではSETUP_AWは、"0"に設定した場合は不正とみなされ、
'00' - Illegal  '01' - 3 bytes '10' - 4 bytes  '11' – 5 bytes
しかし、実際にMACアドレスを2バイトに設定し、MACをpreambleの位置に設定すると(0x00AA or 0x0055, in binary 0000000010101010 or 0000000001010101)、デバイスをだましてデータ部分でまず完全なMACアドレスを提供してくれます.このトーチカの文章を参考に具体的な詳細を勉強してください.
(U) Increasing Speed and Portability
GoodFET、コンピュータにnRF 24 L 01+を加えて嗅覚テストを行うことができますが、最終的には安い組み込み機器でこの機能を実現することを望んでいます.我々はTransvisの研究成果を用いて,マイクロコントローラ+埋め込みCプログラムを用いてすべての機能を実現できる.
また、いくつかの改善を行いました.Goodfet.nrfは、監視したいデバイスをスキャンする方法を教えてくれます.
  • 周波数2400 MHzから
  • データレートを1 Mbps、MACを0 x 00 AAに設定し、10秒
  • を傍受する.
  • データレートを2 Mbps、MACを0 x 00 AAに設定し、10秒
  • をリスニングする.
  • データレートを1 Mbps、MACを0 x 055に設定し、10秒
  • をリスニングする.
  • データレート2 MbpsおよびMAC 0 x 005を設定し、10秒
  • をリスニングする.
  • は、2528 MHzまで徐々に周波数値を増加する、2400 MHzからサイクル(128周波数値)
  • に戻る.
  • 潜在的なキーボードデバイスを見つけるには、しきい値を満たすために少なくとも4つのパケットが合法的なパケットであることを確認し、誤報を防ぐ必要があります.

  • これは、完全な周波数範囲をスキャンするのに約85分かかることを意味します(and at least several keystrokes must be pressed while we're sniffing within the correct 10 second period.)Travisの研究、KeyKerikiのプロジェクト、そして私のキーボードをテストして、私たちはいくつかの改善をすることができます.
  • FCCを調べると、キーボードは2403-2480 MHzの範囲で、128周波数から78周波数(40%節約)
  • に直接減少した.
  • すべてのキーボードは2 Mbpsを使用し、また半分の時間を減らします.
  • 多くのキーボードをチェックした後、私はすべてのマイクロソフトのキーボードのMACアドレスが0 xCDで始まることを発見しました.そのため、私たちのpreambleは永遠に0xAA (10101010)で、after inspecting more keyboards、I found that all Microsoft keyboards begin with 0 xCD as the MACです.which tells us that our preamble will always be 0xAA (10101010) 0 xAAの後ろには常に1(0xCD 11001101)が付いているので、ビットビットの交代を維持し、検索速度を2倍に速めます.
  • MACアドレスの1番目(0 xCD)を知っているので、どのようなパケットが必要かも知っています.確認したパケットをチェックするだけで、私たちが探しているキーボードデバイスであることがわかります.
  • 各周波数スキャン時間を500ミリ秒に低減し、スキャンの1ラウンド全体の時間を40秒に低減した.

  • (U) Decrypting Keystrokes
    Thorsten SchröderとMax Moserはトーチカの東KeyKerikiを設計し、マイクロソフトのキーボードを傍受することができ、完全に復号化の過程に逆行し、デバイスを作ってこれらを完全に実現することができます.しかしながら、彼らのデバイスは、2 Mbps通信のキーボードデバイスで生成されたデータをキャプチャおよび解析するために、2つの無線および1つのハイエンドマイクロプロセッサを必要とする.Travisのプロジェクトは牛が追い詰めているが、コンピュータのホストが必要であり、私たちが秘密裏に任務を遂行するには、この設備はまだ大きすぎるので、設計を改善しました.今は安価な無線とマイクロプロセッサが必要で、消費電力が低く、体積が小さく、コンピュータや他の無線設備は必要ありません.
    ThorstenとMaxはこのキーストロークがECBモードの単純なMACアドレスと異なるか暗号化しか使用していないことを発見し、Travisの方法を使用してnRF 24 L 01+を利用してMACアドレスを嗅ぎ取り、この暗号化方法はトランプカードを一度切っただけに相当する.
    さらに調べたところ、マイクロソフトのキーボードのMACアドレスはすべて0 xCDで始まることが分かった.実際のキー(下の図のオレンジ色の部分)はMACアドレスの最初のバイトにぴったり合っている.つまり、完全なMACアドレスを知らなくても、キーメッセージを解読することができる.この位置合わせは変わらないからだ.MACアドレスの先頭のバイト0 xCDも変わらない.
    パケット暗号化部の長さは11バイトで、MACアドレスは5バイトを占めているため、CRCチェックは各バイトで行い、異或(暗号化前)、MACアドレスが2回異或されたため、完全なMACアドレスを知る必要がなく、検査値を計算することができます.これはMACが2回異或されたため、何もしていないことに相当します.11バイト目はMACアドレスの最初のバイトで、0 xCDであることがわかります.この特性に基づいて、キーの変更やCRCチェックなど、他の攻撃を行うことができます.MACアドレスを知る必要はありません.これは私の後のプロジェクトで説明します.
    KeyKerikiプロジェクトのページでは、復号化プロセスを示します.
  • Device type 0x0A = keyboard, 0x08 = mouse
  • Packet type 0x78 = keystroke, 0x38 = idle (key is held down)
  • Model type 0x06 = keyboard? This is the same HID code for a keyboard
  • HID code 0x05 = letter 'b' (described in section 7 here)

  • KeySweeperの復号部分コード:
    // decrypt those keyboard packets! 
    void decrypt(uint8_t* pkt)
    {
        // our encryption key is the 5-byte MAC address and
        // starts 4 bytes in (4-byte header is unencrypted)
         for (int i = 4; i < 15; i++)
            pkt[i] ^= mac >> (((i - 4) % 5) * 8) & 0xFF;
    }
    原文:
    KeySweeper