電動スクーターのファームウェアをRustで書き直した話

原題: Reverse engineering my e-scooter and rewriting the firmware in Rust

なぜ重要か

コンシューマー向けe-mobilityデバイスのファームウェアセキュリティとデータ収集の不透明さを具体的に示した事例として、業界全体への問題提起になりうる。

エンジニアのBen Simms氏が、自身の所有するEgret GT電動スクーターのハードウェア・ファームウェアをリバースエンジニアリングし、ディスプレイユニット用のカスタムファームウェアをRustで開発した。USB-CポートからCAN busを発見し、通信解析・ファームウェア解析を経て独自実装に至った全過程をブログで公開した(2026年8月9日付)。

Simms氏がリバースエンジニアリングに踏み切ったきっかけは、スクーターの「下」ボタンを押しながら電源を入れるとファームウェアアップデートモードに入り、そのメニューを抜けると通常走行モードへPINなしで移行できてしまうというセキュリティ上の懸念だった。

まずBluetoothアプリの解析から着手。Bluetoothハンドラのコードを読み解いたところ、ディスプレイ・コントローラ・ボタンパネルそれぞれへのBluetooth経由ファームウェア更新機能の存在、アプリ非表示の各種テレメトリ(走行モード別使用時間・デバイス温度・モーター電流・バッテリー電圧・充電履歴)のBluetooth送信、そしてスクーターID紐付けで総走行時間・オドメーター・充電履歴がメーカーサーバーへ送信されているという事実が判明した。この最後の点はアプリ上に明記されていないとSimms氏は指摘している。

次に、メーカーが「スマートフォン充電専用」と説明するディスプレイのUSB-Cポートに着目。USB-Cブレイクアウトボードを購入してオシロスコープで各ピンを計測したところ、2本のピンがCAN busとして使用されていることを発見した。氏はこれを「コンプライアンス的に問題がある」と評している。

CAN busの解析には、ESP32-C6とSN65HVD230、MCP2515を組み合わせた自作スニファを製作。SN65HVD230は受信用のasync APIが使いやすく、MCP2515は送信用として別途追加した。この機材でCAN通信をキャプチャし、各コンポーネント間のメッセージプロトコルを解析。その成果をもとに、ディスプレイユニット向けカスタムファームウェアをRustで実装した。

ブログでは回路図・キャプチャデータ・コード断片を含む詳細な解析プロセスが公開されており、コンシューマーIoT機器のセキュリティ実態を浮き彫りにする事例として注目を集めている。

出典

bensimms.moe — 元記事を読む →