
2026/11/03 1:29
カーのナビゲーションシステムをジャイルブレイクして時刻を変更するためだけにやった話
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
研究員が、2014 年式のルノー ラテティユド(Renault Latitude)において、TomTom Carminat LIVE ヘッドユニット(コードネーム:beaumont)を成功fullyに悪用し、そのインフォテインメントシステムへの完全な制御を獲得しました。この事案は、レガシー自動車機器における重大なセキュリティ欠陥の暴露をもたらしました。当該装置は、Samsung S5P6440 SoC を中心として構築された TomTom 独自のコア Linux ベース OS(2.6.28.10)を動作させ、大半のパーティションは noexec としてマウントされており、SD カードは unionfs セットアップを利用しています。DRM チェックでは正当な SD カードおよび正しい CID の有無が要求されましたが、攻撃者は master.script 内のスクリプトコマンドを通じて core_pattern ハンドラを操作し、安全制限を迂回することが可能でした。
具体的には、研究員は /bin/dbus-monitor を使用して SIGABRT クラッシュをトリガーし、生成される coredump をカスタムの LOG コマンドへパイプすることで、root 権限を持つ任意のシェルコマンドを実行しました。これにより、/mnt/flash/settings.dat に格納されているタイムゾーンオフセットのような重要なシステム設定(例:夏時間変更後、UTC+3 から UTC+2 への修正)を直接的に変更することができ、欠落しているメニューオプションを上書きし、過時化した SD カードにより引き起こされる「No maps detected!」エラーも修正できました。このエクスプロイトは、unionfs マウント制限に対して入力検証が行われない「ttn」バイナリパーサーの欠陥を活用しています。これにより、公式な許可なくダッシュボードディスプレイを制御するドライバーが可能となり、スクリプト操作を通じてカスタムソフトウェアコンポーネントへのアクセスが可能な箇所には大きなリスクが存在することが示されました。製造業者は、車両データや設定への不正アクセスを防ぐために、緊急にパッチの発行または影響を受けたハードウェアの置換を実施すべきです。なお、リバースエンジニアリングの結果および更新ファイルは、TomTom GitHub リポジトリ(https://github.com/andronedev/carminat-tomtom-live-re)で入手可能です。
本文
TomTom ラテュードの時刻設定トラブルと、SD カード制限を突破した exploits による解決
背景:地味だが愛着のある車両
- 車両: 2014 年式の日産・ルノー「ラテュード」。高級車とはほど遠い地味な車。
- 現状: 経年劣化はあるが、A から B への移動や基本機能は正常に動作しており、不満がない状態だった。
- 購入時の出来事:
- 前所有者から「ナビゲーション用 SD カード」の譲渡を提案された。
- 前所有者曰く:「時計時刻を変更するにはこのカードが必須」。
- ただし、私はこれを疑った理由:
- オンライン動画では時刻設定オプションがすぐに確認できる画面が表示されていること。
- SD カード内の地図データが古すぎて機能せず、「地図が見つかりません!」というメッセージが常に表示されていたこと。
- 結局前所有者はカードを処分した。
問題:夏時間変更後の混乱
- 状況: エストニアで冬時間(UTC+2)への切り替えを実施。
- 発生: ダッシュボードの時刻と実時間が1 時間ずれる。
- 探索:
- 「時刻設定」メニューが存在しないことに気づく(オンライン動画との不整合)。
- 設定ボタンは Bluetooth や電話帳設定しか機能せず、もう一方は無反応で「地図が検出されませんでした」と表示されるだけ。
- 試行錯誤: メニューやボタンの組み合わせを試したが約 1 時間経っても解決せず、ファームウェア解析に着手。
発見:SD カードなしでは設定メニューに入れない
リバースエンジニアリングの結果、以下の事実が判明した。
- 前所有者の正しさ: SD カード挿入なしには、正しい設定メニューへのアクセスは不可能。
- DRM 保護:
- 指向するメニュー定義自体が SD カードから読み込まれている。
- システムは CID(カード固有 ID)に基づいた署名検証を行っており、正規のカード以外やコピー品での設定画面取得を拒絶する。
解決への道筋:root アクセスとシステム解析
私は有料の正規カード購入を断念し、自らの手で root 権限獲得および時刻修正を試みることにした。
システム構成の把握
- ハードウェア: TomTom Carminat LIVE (型番 beaumont) / Samsung S5P6440 SoC。
- OS: Linux 2.6.28.10 ベースのカスタム OS。
- 更新ファイル構造 (
):ttsystem- ext3 ファイルシステムを含む内部ルートファイルシステムを格納。
- 高エントピーデータと零ブロック(ゼロバイト)で構成され、おそらく署名検証が行われている箇所がある。
自動化スクリプトの分析 (master.script
)
master.script- 起動時に自動読み込まれるカスタム言語スクリプト。
- 利用可能な機能:
: 指定ファイルへの文字列書き込み(0x20-0x7E の ASCII に限定)。LOG
: 実行プログラムを指定するが、パラメータは渡せない(トークン制限あり)。SHEX- 画像表示機能。
攻撃ベクトルの検討と失敗例
以下の方法で直接コード実行を試みましたが、全て失敗しました。
| 試行内容 | 結果 | 理由 |
|---|---|---|
| 更新イメージの改変 | ❌ | 更新ロジックが不明瞭な拒否判定があったため。 |
| QEMU シミュレーター構築 | ⚠️ | システム起動時頻繁に再起動(3 秒ごと)するため不安定。検証用には有用だが本番非対応。 |
| ファイルシステムの既読制 (noexec) | ❌ | や 等が でマウントされており、スクリプト実行不可。 |
のパラメータ制限 | ❌ | 単一のトークンしか受け付けないため、パスや引数を指定できない。 |
| LOG ファイル書き込みのみ | ⚠️ | root権限で書き込めるが、只読マウント領域への書換えは不可能、且つ実行不能。 |
| 画像バッファオーバーフロー (Unicorn) | ❌ | 読み取り系(OOB read)の脆弱性は発見したが、書き込み系 (write) は見付からず、コード実行へ至らなかった。 |
突破:コアパターン(core_pattern)を利用したコード実行
既存の機能と Linux のシステムコールを組み合わせて突破口を特定しました。
1. 戦略:内核によるスクリプト実行
- 発想: ユーザー空間から直接実行ではなく、内核が別のプロセスを起動する仕組みを利用する。
- 手法:
を書き換えることで、コアダンプ(core dump)の出力先を指定できる機能を悪用する。/proc/sys/kernel/core_pattern
2. 具体的な手順
- 書き込み経路の確保:
のmaster.script
にLOGFILE
を設定。../../proc/sys/kernel/core_pattern- ここに特殊な文字列
をログとして記録する。|/bin/sh /media/sdcard/payload.sh
- トリガーの選定:
- 内核は
で指定されたプロセスを起動し、パイプを通じてダンプデータを出力する。core_pattern - 問題点: システムがクラッシュすると再起動されスクリプトが中断するリスク。
- 解決:
がシステムバス接続失敗時(本機では非動作のため)に/bin/dbus-monitor
を発火し、確実なクラッシュと core dump を引き起こす特性を利用。SIGABRT
- 内核は
- 実行コマンドの構成:
は rootfs に存在するため(noexec マウントでも回避可能)、内核起動時に正しく実行される。/bin/sh /media/sdcard/payload.sh
3. 実装された master.script
master.script#define LOGFILE ../../proc/sys/kernel/core_pattern LOG |/bin/sh /media/sdcard/payload.sh SHEX /bin/dbus-monitor
- 検証: SD カード挿入と"Yes"選択後、システムが正常に再起動することを確認。コード実行権限の獲得に成功。
最終解決:時差修正の実施
root アクセス取得後、以下の作業を完了しました。
- システムイメージのバックアップ:
コマンドで内部 eMMC を完全保存。dd - 設定ファイルの確認: 時刻・時差情報は
に格納されていることを発見(カスタムバイナリ形式)。/mnt/flash/settings.dat - 値の変更:
- GPS 時間を基準とし、ローカルオフセットを「分」で管理。
- 旧値:180 (UTC+3 / サマータイム)
- 新値:120 (UTC+2 / ウィンタータイム)
- 結果: 愛車の時刻設定が正常に修正されました!
結論: 厳重に制限された環境においても、複数の脆弱性や仕様を組み合わせて、内核の挙動(core_pattern)を利用することで、意図しないコード実行を実現し、目的を達成することができました。