Egret GTスクーターをRustで再ファーム化
मूल शीर्षक: Reverse engineering my e-scooter and rewriting the firmware in Rust
यह क्यों महत्वपूर्ण है
消費者向けIoT機器のファームウェアと非公開データ収集の実態が、個人レベルのリバースエンジニアリングで明らかにされた点が注目に値する。
エンジニアのBen Simms氏が、自身のEgret GT電動スクーターのハードウェアとファームウェアをリバースエンジニアリングし、Rustで独自ファームウェアを書き直した。USB-CポートからCAN Busを発見し、メーカーが非公開の走行データ送信も確認した。
Ben Simms氏は、Egret GTという高性能電動スクーターを購入後、その内部構造の解析を開始した。きっかけの一つは、起動時に「下」ボタンを押すだけでPIN認証をバイパスできるセキュリティ上の問題だった。
最初はBluetoothアプリを解析。その結果、アプリ上には表示されない各走行モードの滞在時間、デバイス温度、モーター電流、バッテリー電圧、充電履歴などが送信されていることが判明した。また、総走行時間、走行距離、充電履歴がメーカーサーバーに送信・保存されているにもかかわらず、アプリ内にその旨の明示的な説明がないことも確認した。さらに、スクーターはVIN(車両識別番号)をBluetoothアプリ経由で初めて受信する仕組みで、任意のVINを書き込むことで別モデルに偽装できることも判明した。ただし、45km/hモデルのVINに書き換えても速度制限は解除されなかった。
次に、メーカーが「スマートフォン充電専用」と説明するUSB-Cポートに着目した。USB-Cブレークアウトボードを使ってオシロスコープで各ピンを計測したところ、2本のピンがCAN Busとして使われていることを発見した。これはUSB仕様への非準拠と言える実装だ。
CAN Busのスニッフィングには、ESP32-C6、SN65HVD230、MCP2515を組み合わせた自作デバイスを使用。SN65HVD230は受信には適していたが送信時にバスエラーが発生したため、MCP2515を追加して両方を併用する構成とした。その後、受信したCAN Busのメッセージをすべてログに記録し、ディスプレイユニット向けのカスタムファームウェアをRustで開発した。