BLOG
拾闻対談 040|車載時計を1時間制に戻すため、車機全体を脱獄
開場小対談
拾聞:11月2日、エストニアの倫理ハッカーであるRasmus Mooratsがブログで記事を投稿しました。タイトルは非常に直感的です:「車の時計を修正するために、自分の車のナビゲーションシステムを脱獄させた」。車は2014年製のRenault Latitudeで、ナビゲーションシステムはTomTom Carminat LIVEであり、2011年代のLinux 2.6カーネルをベースにしたカスタマイズされたシステムが動作していました。この記事はHacker Newsに掲載され、500以上のスコアと200以上のコメントがありました。興味深いのは、技術的なアプローチが極端で、目標が非常に小さいことです:1時間遅れしている車の時計を修正すること。永亮、これはどんな話ですか?
永亮:原因はとても日常的なものです。エストニアでは夏時間が施行されており、10月末にUTC+3からUTC+2に切り替えると、車の時計が1時間遅れました。彼は設定メニューをすべて調べましたが、時刻を変更するオプションが見つかりませんでした。前の車の所有者は売却時に注意していました:時計を修正するにはナビゲーション用のSDカードが必要です。彼は当時信じず、おそらく前の車の所有者はメニューにアクセスできないのでカードを渡さなかったのだと思いました。しかし後に逆検証したところ、前の車の所有者の言う通りでした:設定メニューの定義自体がそのカードに存在しており、カードがなければナビゲーションシステムはどのように設定プログラムにアクセスするかさえ知りませんでした。
Q1:SDカード一枚で、どうして時計がロックされたのでしょうか?
拾聞:それならカードを作るしかありませんよね。コピーすればいいのでは?
永亮:ダメです。これが最初の障壁です。システムにはDRMがあります:SDカードのCID(カードに焼き込まれた一意のID)を検証し、ファイルの署名もこのCIDに結びついています。ファイルを空白のカードにコピーすると直接拒否されます。MooratsはこのDRMが地図の海賊版防止のためだと推測しています。彼は第三者から本物のカードを買う方法を調べましたが、エストニアまでの運賃は約60ユーロでした。彼が自分の言葉を要約すると:私は地図を欲しない、スマートフォンでナビゲーションを行うだけです。ただ、その厄介な時刻を修正したいだけです。そこで彼は、ネット上で最初は笑わせてから沈黙させる決断をしました:カードを買わず、自分でナビゲーションシステムのroot権限を得ることにした。
拾聞:投資と収益を考えると、これは全く割に合わないのでは?
永亮:計算すると確かに割に合わないです。一度の送金で60ユーロがかかりますし、脱獄には数週間の無償労働が必要です。しかし彼にとってはコストの問題ではなく、原則の問題です:車は私がお金を払って購入した財産ですが、その最も基本的な機能の一つが専有カードによって制限されています。これこそが修理権の争いの核心です:あなたは製品を購入したと思っているかもしれませんが、実際には製品の使用許可だけを購入しており、その鍵は供給業者に握られています。
Q2:この解読の流れはどのように連鎖しているのでしょうか?
拾聞:彼の技術的なアプローチを分解して説明しましょう。最初のステップは何ですか?
永亮:最初のステップは、先人たちの成果を活用することです。彼は先人が残した逆方向の倉庫を見つけました(フランス語で書かれており、倉庫の著者がLLMの助けを強く利用していると述べています)。そこからファームウェアのダウンロードURLを得ました。ファームウェア内のttsystemというファイルはext3ファイルシステムであり、デバイスのルートファイルシステムに相当します。そして彼は私が最もプロフェッショナルだと思うステップを行いました:QEMUを使ってシミュレーターを構築し、同じバージョンの2.6カーネルをインストールし、パッチを適用し、簡易なCANシミュレーターを追加しました。システムは3秒ごとに再起動しようとしますが、彼はパッチを使って再起動シグナルを無視し、強制的にそれを保持しました。シミュレーターがあれば、実車に触れずに攻撃のアプローチを何度もテストできます。
拾聞:シミュレーター内で何が見えましたか?
永亮:この2011年のデバイスのセキュリティ設定を見て、驚きました。rootfsは読み取り専用で、SDカードはvfatでnoexecであり、さらにunionfsが重ねられています。ほとんどのパーティションが読み取り専用または実行禁止になっています。2011年のデバイスがこれほど厳重なセキュリティ設定をしているのは意外でした。彼はまた、車載機のカスタムUIスクリプト言語の解析器ttnを逆コンパイルし、起動するたびにmaster.scriptというスクリプトファイルが読み込まれることを発見しました。攻撃の可能性はこのスクリプト言語の中にあります。
拾闻:そのスクリプト言語は彼にどんな武器を与えましたか?
永亮:2つの未完成品です。1つ目はSHEXコマンドで、execveを使って任意のバイナリを実行できますが、スペースで区切られたtokenのみを受け入れます。どのプログラムを実行するかを制御できますが、パラメータは渡せません。SDカードはnoexecですが、/bin/shを使ってカード上のスクリプトを読み込む方法で回避できますが、パラメータは渡せず、実行は不可能です。2つ目はLOGコマンドで、指定されたパスに一行の印刷可能なASCII文字を書き込むことができます。LOGFILEは../パスをサポートしており、ttnはrootから実行されるため、理論上はシステムのどこにでも文字を書き込むことができます。しかし、rootfsは読み取り専用で、他のパーティションはnoexecなので、書き込んでも実行できません。彼はUnicornを使って画像デコーダに対してフラッタテストを行い、多くの越境読み出しを確認しましたが、利用可能な書き込みはありませんでした。手元にある2つのパズルは、どちらも鍵穴には入りません。
拾闻:では最終的にどうやって組み合わせたのですか?
永亮:これは全体で最も美しい部分です。彼はカーネル脆弱性利用の古典的なテクニックcore_patternを思い出しました:/proc/sys/kernel/core_patternにパイプとコマンドを書き込むことで、プログラムがクラッシュしたときにカーネルがrootとしてこのコマンドを起動してcoredumpを処理します。この機能は2.6.24に導入されましたが、車載機のカーネルはちょうど2.6.28です。そこで彼はLOGファイルをcore_patternに指定し、/bin/shを使ってカード上のペイロードスクリプトを実行するパイプコマンドを書き込みました。そしてSHEXを使って/bin/dbus-monitorを実行しました:このプログラムがシステムバスに接続できないときはSIGABRTで自動的に終了し、coredumpを生成しますが、全体の再起動にはつながりません。カーネルがcoredumpがあると判断すると、素直にrootとしてSDカード上のスクリプトを実行します。最終的なmaster.scriptは3行だけです。実行権を得た後、彼が最初にしたことはddでeMMC全体をバックアップすることでした。その後、時間情報が/mnt/flash/settings.datに存在することを発見しました。車載機にはタイムゾーン概念がなく、GPSからの時間やローカルオフセットは分単位で保存されていました。彼の設定は180でしたが、120に変更し、作業を終えました。
Q3:コメント欄では何が議論されているのですか?
拾闻:HNには200件以上のコメントがありますが、主に何が言われているのでしょうか?
永亮:高評の方向性は驚くほど一致している:時計の問題の荒唐無稽さは業界の病である。ベテランユーザーの一人は、VCRの時計設定が難しいのは90年代の古い話だが、当時は少なくとも設定できたと言っている。専用のSDカードがなければ、時計を修正することは全く不可能で、ユーザーフレンドリーな設計の極致と言える。また、アリゾナ州のプロプログラマーの例も挙げられている。彼の新しいホンダCRVの時計が半年に1時間ずれてしまい、今でもどうやって設定するかわからないという。2014年製のホンダ車のナビゲーションシステムをroot化しようとした人もいて、理由は毎回Bluetooth接続時に自動で再生命令が出るのが耐えられなかったからだ。カナダのユーザーはさらに心配している。来年春からいくつかの州では時計の調整が行われなくなり、多くの車のDST設定が更新されず、同じ問題に直面する可能性がある。
拾聞:彼が遠回りをしたと言っているのか?
永亮:そうだ。作者は当初、前のユーザーのカードを直接購入すべきだったと言っている。時々、一般ユーザーが正しいことがある。商業的な解決策としては、後部にナビゲーションシステムを取り付け、ハンドル操作に対応する機能があることを確認すればよいという。また、スコーディアの車のオーナーもいる。彼の車のメニューにはDSTスイッチがあり、レノアの人間工学やファームウェアの悪い設計について長年不満を漏らしている。いくつかの声が同じ事実を指摘している:一部のメーカーは時区切りをスイッチとして扱い、他のメーカーはそれをDRMに閉じ込めている。違いは技術的な難易度ではなく、ユーザーをどのように扱うかにある。
Q4:企業ソフトウェアにおいて、このSDカードはどのような形をしているのか?
拾聞:17年間技術チームを率いてきたあなた、このような状況に見覚えはありますか?
永亮:とても見覚えがある。これは私の経験であり、統計ではない:ほとんどの大企業の購入歴には同じパターンがある。あるシステムがこの機能を追加するためのモジュールを必要としていると言い、別のモジュールがそのライセンスサーバーに依存していると言い、エクスポートフォーマットはプライベートで、データを移行したい場合は、そのインターフェースのみを受け入れるシステムがある。レノアはカードを使用しているが、企業ソフトウェアでは契約書が使われており、構造は全く同じである:供給業者が決定するのは、あなたに売るものではなく、あなたが離れられない部分である。DRMは名目上は海賊版防止のためのものだが、実際には時計設定などの基本的な機能を人質にしている。盗版防止の手段が所有者が自分の財産を使用することを妨げ始めたら、それは限度を超えている。
拾聞:作者は2011年のセキュリティが意外に強かったと言っているが、2026年にはどうなっているのか?
永亮:決意ある個人がオープンソースツールチェーンを使って分解した。QEMU、Unicorn、逆コンパイルツールはすべて無料で、安全を犠牲にして保証を得る戦略には期限がある。その期限の長さは逆コンパイルのコスト曲線によって決まる。そして、この曲線はAIによって低下している。記事には証拠が示されている:作者が依存していた前のリポジトリは、LLMの支援を受けて重度に使用されていたと述べている。逆コンパイルは過去には小さなサークルの専門技術であったが、現在では参入コストが明らかに低下している。メーカーにとって、これはプライベートフォーマットでユーザーの堀を浅くしてしまうことを意味している:解読できないユーザーはカードを購入するが、解読できたユーザーは1円も使わない。锁定戦略の価格権が供給業者から漏れている。
Q5:議論を抜きにして、エンジニアは何をコピーできるのか?
拾聞:この記事は技術者にとって何を学ぶべきか?
永亮:三つのこと。第一に、自己のフィードバックループを構築すること。彼は最初、シミュレーターを作るのに時間を費やすことを嫌がっていたが、後にシミュレーターが非常に有用であると認めました。実機のフィードバックがない場合は、自分でフィードバックを作り、試行錯誤のコストをすぐに大幅に削減できます。私がチームを率いていた時も同じ規則でした。検証できない環境があれば、まずテスト用の装置を構築することです。第二に、制限を解決条件として考えること。実行できない場合は、カーネルに実行させるか、パラメータを渡せない場合は、自分でも崩れるようなプログラムを見つける。達人との違いは権限の多さではなく、規則内で何ができるかです。第三に、実行する前にバックアップを取ること。彼が実行権を得た最初のことは、eMMC全体をddでバックアップすることでした。この習慣は、すべてのエンジニアが真似すべきものです。
拾闻:コメント欄に多くの共感を呼んだ声がありました:発見を書き留めて、未来の自分に残すこと。
永亮:そうです。ある人が著者に注意を促しました:「書き留めておいて良かった。なぜなら、半年後の夏時間の切り替えでは、またやり直さなければならないからです。」下には何人かが「これは本当だ」と言っています。個人のプロジェクトでも、発見を書き留めて未来の自分に残すべきです。脱獄のもう一つの側面は反逆ではなく、日常生活の一部です。最後に私の全体的な判断について話しましょう:この話は、デバイスの主権の現価を示しているため、メンテナンス権の議論で何度も引用されるでしょう。1時間変更すると、倫理的なハッカーはシミュレーターや逆転スクリプト解析器を構築し、カーネル機能を利用して周囲を回る必要があります。一般の人々にとっては、60ユーロを払ってカードを購入するしかありません。自己救済が専門家にのみ開かれている場合、それは選択肢ではありません。メーカーが本当に恐れるべきことは、脱獄する人がいることではなく、ますます多くの人が脱獄できるようになることです。
署名:永亮