2 ポイント 投稿者 GN⁺ 2023-12-16 | 1件のコメント | WhatsAppで共有

Bluetooth LE LED照明コントローラーのリバースエンジニアリング、あるいは私がどうやってクリスマスの照明を壊してしまったか

  • Bluetooth LEで通信し、アプリがあるデバイスは、家庭内自動化システムに統合する価値がある。
  • 低予算のLEDライトストリップをリバースエンジニアリングして自動化することに、かなりの時間を費やしてきた。
  • 最近では、最安の2.38ポンドのBluetooth LE制御5M非アドレス指定ストリップを、数時間でHome Assistantに接続することに成功した。

ステップ1. 配線越しのバイト

  • 独自ソフトウェアからデバイスを制御するには、アプリからデバイスに送られるBluetoothバイト列を調べるのが第一歩である。
  • Androidではこの作業が簡単にできる。開発者モードを有効にし、照明アプリをインストールしたうえで、開発者設定の Bluetooth HCI snoop を有効にしてログを記録する。
  • Wiresharkでログを開けば、正確なバイト列を確認し、値のパターンを見つけて、各操作に対応するバイト列を特定できる。

ステップ2. リプレイ攻撃

  • 単に照明のオン・オフが目的なら、観測した繰り返しのバイト列だけで電源制御には十分かもしれない。
  • gatttool を使えば、BLEデバイスに接続してバイト列を送るテストができる。

ステップ3. Androidアプリの逆コンパイル

  • アプリのAPKをダウンロードし、jadxで開いて内部の秘密を確認する。
  • ソース内でAESへの参照を見つけ、暗号化されたプロトコルの可能性が示唆された。
  • 暗号化されたデータは毎回変化するわけではなく、低消費電力MCU上で高速な復号が必要であり、各デバイス固有ではない固定キーが使われている可能性がある。

ステップ4. すべての機能

  • アプリの各機能を試しながら、送信されたバイト列を記録した。
  • 各操作を記録し、繰り返し、パターンを見つけ、キャプチャしたバイト列とメモを対応付けるのに役立つ。

ステップ5. 自動化された電子廃棄物生成機

  • 色の変更を探っている最中に、アプリが赤・緑・青に対して 0x1F を超える値を送っていないことに気づいた。
  • 8ビット値を試してみると、より明るい色も問題なく動作することがわかった。
  • 追加のエフェクトがあるのではないかと考え、単純なループで試してみた。
  • 10番目のエフェクトまではうまく動いたが、11番目で秘密のモードを発見し、12番目で闇が訪れた。
  • 再起動も試したが照明は二度と点灯せず、Bluetoothのアドバタイズも行わなくなったため、これ以上接続できなくなった。
  • バッファオーバーフローでファームウェアが破損したのだろうと推測している。
  • とはいえ、LED自体は標準的なアドレス指定可能LEDなので、別のマイクロコントローラーにつないで使うことはできる。

どうすれば私の照明を壊せるのか

  • 問題が起きたにもかかわらず、プロトコルの大部分を文書化し、Home Assistantのカスタムコンポーネントを含むGithubプロジェクトを作成した。
  • 動作はするが、リスクを承知のうえで進める必要がある。

GN⁺の見解

  • この記事で最も重要なのは、自宅で使うスマート照明を自動化システムに統合しようとするDIY精神と、リバースエンジニアリングへの情熱である。
  • リバースエンジニアリングの過程は、技術的知識だけでなく問題解決能力や創造性も必要とし、初級ソフトウェアエンジニアにとっても非常に興味深いテーマである。
  • 失敗の経験を共有することは、他の人が同じ失敗を繰り返さないように助けとなり、このような公開の知識共有はオープンソースコミュニティの中核的価値の一つである。

1件のコメント

 
GN⁺ 2023-12-16
Hacker Newsの意見
  • 復号したパケットの分析

    • パケットの復号を試みた結果、固定ヘッダーがあり、5バイト目がオンとオフを示す 1 と 0 に切り替わり、残りは 0 で埋められていることを確認した。これはコマンド長、コマンド("TURN")、引数(0 または 1)を表し、16バイトにパディングされているものと推定される。
  • 電源供給の問題

    • WS281x LEDストリップは非常に明るく光り、多くの電流を消費する。100本のストリップすべてを最大輝度で駆動するには、12V・3Aの電源アダプターではぎりぎり足りる程度である。ファームウェアが最大輝度 255 のうち 31 しか使っていないように見えることから、ヒューズが飛んだ可能性が示唆される。
  • 暗号化された照明のリバースエンジニアリングの試み

    • Aputure 60d と SmallRig RM75 のバッテリーLEDライトをリバースエンジニアリングしようとしたが、暗号化されていることがわかった。どちらのライトも同じネゴシエーション手順を使うが、異なるライブラリを使用している。Diffie-Hellman 鍵交換プロセスを模倣しようとしたものの、追加のステップでランダムに見える数字(別の鍵?)の目的が把握できず、断念した。この記事を読んで、ハードコードされた鍵を試してみようと思った。
  • BLE照明についての意見

    • BLEを使う照明セットについては十分に読んできたので、著者がこれに言及してくれたことに感謝している。これは Analog 技術接続の動画を思い出させる。
  • BLE接続のクリスマス照明を自動化しようとした試み

    • BLE接続のクリスマス照明を自動化しようとしたが、電子ゴミを生み出すことになった。今ではあなたも作れる。
  • メッセージ暗号化への疑問

    • メッセージがなぜ暗号化されているのか、これが標準なのかという疑問を呈している。
  • 暗号化についてのコメント

    • 「電波で平文は送れない、安全ではない」と「心配するな、AES暗号化を追加しておいた」というコメント。
  • 照明ハッキングについてのユーモラスなコメント

    • 「どうやって自分の照明をハックできるか教えてくれ」という言葉に、「はは、大好きだ」という反応。
  • Govee照明のリバースエンジニアリングに関する初心者の質問

    • Govee照明のようなWiFi照明をリバースエンジニアリングできない理由は何か、MITM(中間者攻撃)の方が難しいのか、という初心者からの質問。