以前のブログで取り上げたゼロクリック脆弱性以外にも、Pwn2Own Automotive 2024の最中にAlpineの車載/車両内インフォテインメント(IVI)システムHalo9 iLX-F509には新たな脆弱性が発見されていました。NCCグループのエクスプロイト開発グループのリサーチャーであるアレックス・プラスケット氏とマコーレイ・ハドソン氏は、2つの脆弱性を利用したセキュリティチャレンジを実演しました。 CVE-2024-23961(コマンドインジェクション)とCVE-2024-23960(暗号署名の不適切な検証)の2つの脆弱性を利用した攻略を実演しました。 これらを組み合わせることで、2つの脆弱性の連鎖を作り出し、Alpineデバイス上で古典的なシューティングゲーム「Doom」を実行することに成功しました。
リサーチャーは、RomHack 2024 カンファレンスでのプレゼンテーションで、彼らの発見と攻略技法を共有しました。本ブログでは、彼らのプレゼンテーションから得られた主な成果を強調し、問題に対処するための対策の概要を説明します。
写真1. NCCグループは、Alpine Halo9 iLX-F509 IVIシステムに対して2つのバグチェーンを実行し、その後、そのデバイスで「Doom」をプレイしました。
画像はゼロデイイニシアティブ(ZDI)提供
Pwn2Own Automotiveの共同主催者であり、脆弱性の発見と開示におけるパートナーであるゼロディイニシアティブ(ZDI)は、両方の脆弱性をAlpineに報告しました。ISO/SAE 21434に準拠した脅威評価および修正分析(TARA)を実施した後、ベンダーは脆弱性を「リスクの共有」と分類しました。この指定は、残存リスクを受け入れ、パッチを発行せずに現在のソフトウェアの使用を継続するという決定を反映したものです。
ハードウェア解析およびファームウェアダンプ
リサーチャーは、Alpine Halo9 iLX-F509 ハードウェアを分解し、そのコンポーネントを調査することから調査を開始しました。まず、ロジックアナライザを使用して、不揮発性メモリデバイスであるeMMCチップの存在を確認しました。次にSDスニッファを使用して、eMMCの内容のダンプを抽出することに成功しました。驚くべきことに、その内容は平文で保存されていました。暗号化されていないため、リバースエンジニアリングが随分と楽になり、ファームウェアのより深い調査が可能でした。
コマンドインジェクションの脆弱性
コマンドインジェクション脆弱性(CVE-2024-23961)は、複雑なトリガープロセスを必要とします。これは、OTA(Over-the-Air)ファームウェアアップデート中に導入され、OTAファームウェアのみが暗号化されます。
アップデート中、システムは2つのファイルを取得します。zipファイル(RLDEFAULT_A.23.D0.05.00.01.00)と関連ファイルcollective_sign_info.dat(RLDEFAULT_A.23.D0.05.00.01.00_2)です。両方のファイルは部分的に暗号化されています。 collective_sign_info.dat ファイルは、次の4つの主要なセクションで構成されています。
- ヘッダー
- sig – RSA SHA-256署名
- dat – AES128で部分的に暗号化
- sig – RSA SHA-256署名
host_info.dat では、暗号化された部分は初期化ベクトル(IV)0000000000000000のAES128を使用しています。注目すべきは、このIVが同じファイル内に平文で保存されていることです。updatemgr 内の2つのハードコードされたAESキーにより、 host_info.dat, revealing the passwordの復号が可能となり、パスワード0123456789が明らかになります。このパスワードはその後、ZIPファイルRLDEFAULT_A.23.D0.05.00.01.00.の内容を抽出するために使用されます。(注目すべき問題として、updatemgrにハードコードされたAESキーは、ファイルの暗号化を解読するために簡単に抽出できるという点が挙げられます。もう一つの問題は、脆弱なZIPパスワードである0123456789はブルートフォース攻撃に対して非常に脆弱であるという点です。)
ファームウェアのアップデート処理中、updatemgr内の関数UPDM_wemCmdUpdFSpeDecompが7zaユーティリティを呼び出してzipファイルの暗号化を解除します。しかし、7zaに渡されるパラメータの検証が不十分です。この不備によりコマンドインジェクションが可能となり、攻撃者はパラメータを操作することで任意のコマンドを実行することができます。
暗号署名の脆弱性に対する不適切な検証
CVE-2024-23960は、署名検証プロセスに存在する重大な欠陥を指摘しています。システムはアップデートを実行する前にRSA SHA-256署名ファイルを検証するように設計されていますが、おそらくデバッグ目的で残されたバックドアの仕組みにより、この検証を完全に回避することが可能になります。
UPDM_wbIsForceUpdFileExist関数が特定のForceUpdFileファイルを検出すると、パッケージ情報の署名チェックをバイパスします。このバイパスファイルへのパスはプログラム内にハードコードされ暗号化されているため、ForceUpdate.binの暗号化が解除されます。攻撃者は、ForceUpdate.binを USB ドライブのルートディレクトリに置くだけで、暗号署名チェックをバイパスすることができます。
結論
コマンドインジェクションは、組み込みLinuxデバイスではよくある問題であり、不正なコマンドの実行を防ぐための厳格なパラメータ検証の必要性を浮き彫りにしています。このケースでは、リサーチャーは独創的に、そのデバイス上で『Doom』を実行することでエクスプロイトを実演し、攻撃者がルートアクセス権を獲得した場合に実行可能な幅広い可能性、即ち、はるかに深刻な脅威をアピールしたと言えるでしょう。
リスクを軽減するために、自動車メーカー(OEM)はセキュリティテストに包括的なアプローチを採用すべきです。これには、静的、インタラクティブ、動的アプリケーションセキュリティテスト(SAST、IAST、DAST)と、定期的な侵入テストが含まれ、脆弱性を事前に発見し、対処することを目的としています。
さらに、ファームウェアのフラッシュイメージが簡単にダンプできる場合、知的財産の盗難リスクが高まるだけでなく、デバイスが潜在的な脆弱性にさらされることにもなります。そのため、OEMは重要なデータを保護するために、ハードウェア・セキュリティ・モジュール(HSM)またはセキュアエレメント(SE)の統合を検討すべきです。
最後に、開発者は、コードの製品版をリリースする前に、開発中に使用されたデバッグ用のバックドアやツールをすべて取り除くための徹底的なレビューを実施しなければなりません。このステップは、デバイスがすでに現場に配備された後に悪用される可能性を防ぐために極めて重要です。
責任ある情報開示の時間軸に関する背景
Pwn2OwnイベントでZDIが、或るチームがデバイスやソフトウェアを「ハックに成功」または「pwned」と発表してから、そのハックに使用されたテクニックが公表されるまで、しばしば遅延があることに疑問を持たれた方も多いでしょう。この遅延は、ゼロデイ脆弱性をより責任を持って管理するために設計された調整型脆弱性開示(CVD)プロセスの一部です。
1990年代には、脆弱性を積極的に探し出すハッカーはごくわずかであり、多くのベンダーは脆弱性への対処に備えていませんでした。ホワイトハッカーもベンダーも、「ハッカーは利益と引き換えに脆弱性を報告しているのではないか?」や「脆弱性は修正されるのか、それとも報告は時間の無駄になるのか?」といった懸念を抱えていました。そして、次のような譲歩案が採用されることになりました。まずハッカーが脆弱性をベンダーに報告し、その後、ベンダーがパッチをリリースし、ハッカーの発見を公に認めるというものです。
ZDIの情報開示ポリシーに基づき、提出された脆弱性は、パッチが利用可能になった時点で、またはベンダーが対応しない場合は一定期間経過後に開示されます。このアプローチにより、問題が解決されるか、または修正方法が知られていない脅威が公に認知されることで、脆弱性が悪用されるリスクが回避または抑止されます。これが、脆弱性が最初に提出されてから詳細が公表されるまでの時間差を説明するものです。