エクスプロイト&脆弱性
Apache Log4jの脆弱性がコネクテッドカーや関連機器にもたらす影響を検証
本ブログ記事では、車載デバイスや車両プロパティの中でもコネクテッドカーに影響するものとして、特に電気自動車用充電器、車載インフォテインメント(IVI)システム、自動車用デジタルキーの3つに焦点を当てます。
米国時間2021年12月9日にJava向けのログ出力ライブラリ「Apache Log4j」に潜在するリモートコード実行(RCE)の脆弱性情報が公開されました。以来、数多くの記事で取り上げられたことは、「Log4Shell」と名付けられたこの脆弱性の影響力の大きさを物語っています。Log4jは、コード変更なく簡単にログを提供することから、多くのプログラムに用いられています。これは、攻撃対象領域が広範囲に及ぶことを意味すると同時に、Amazon社、Apple社、Cloudflare社、Google社、Tencent社、Twitter社など、Log4jを用いる多くの有名企業が脆弱性を有する標的組織として狙われる可能性があることを示唆しています。また、Log4jを用いる組み込み機器にまで影響が及ぶため、攻撃対象領域がさらに拡大しています。本ブログ記事では、車載デバイスや車両プロパティの中でもコネクテッドカーに影響するものとして、特に電気自動車用充電器、車載インフォテインメント(IVI)システム、自動車用デジタルキーの3つに焦点を当てます。
■ 電気自動車用充電器に潜むリスク
ヨーロッパでは、すでにV2G(Vehicle to Grid)システムが実用化されており、当該システムを用いることで、車載バッテリに蓄えられた電力をグリッド(電力網)全体に再分配し、生産レベルに対する需要のバランスを取ることが可能となります。
V2Gシステムは、少なくとも以下の2つの部品で構成されています。
- プラグイン電気自動車(PEV):充電コントローラ / 電子制御ユニット(ECU)を搭載した電気自動車
- 電気自動車供給設備(EVSE):充電ステーション
これら2つの部品とは別にV2G対応の充電ステーションは、バックエンドのOCPP(Open Charge Point Protocol)に接続されています。
この分野に関するレポートはほとんどありませんが、本記事で触れておくべき興味深いトピックがいくつかあります。一つ目は「V2GInjector」です。これは、V2Gネットワークに侵入して電気自動車や充電ステーションを攻撃するために設計されたツールです。さらに注意すべき点は、V2GInjectorが、電力線通信(PLC)の技術である「HomePlug Green PHY」に内在する脆弱性の悪用手口に用いられていることです。これにより攻撃者はネットワークキーを収集した後、各ネットワークに侵入し、充電器 / 電気自動車間の通信路で中間者(MitM)攻撃を実行して不正なデータを注入する可能性があります。この攻撃活動は、偽情報の表示や認証情報の詐取だけでなく、複雑なオペレーティングシステム(OS)上で動作している充電器への攻撃につながる可能性もあります。V2GInjectorに関する投稿では、充電器上でシェルを取得するために、一部のSSH(Secure Shell)やWebサイトへのアクセス権が悪用されていることが言及されており、手口としては、Webサーバに潜在するパストラバーサルの脆弱性や、弱いパスワードにより認証突破されたSSHのrootユーザアカウントを悪用した不正アクセスなどが挙げられます。しかし、Log4jに潜在するRCEの脆弱性「Log4Shell」(CVE-2021-44228)および2つの脆弱性(CVE-2021-45046、CVE-2021-45105)が一般公開されたことで、不正アクセスを目論む攻撃者は、JavaにおけるV2Gスタックを用いて充電器と電気自動車へのより効率の良いアクセス手段を取得できる恐れがあります。
本項ではRISE-V2Gを用いてトレンドマイクロの仮説を検証します。RISE-V2Gは、非営利団体「Eclipse Foundation社」が運営していたオープンソースのEclipseプロジェクトのことで、「Reference Implementation Supporting the Evolution of V2G」を意味します。RISE V2Gは、オープンソースの標準に準拠したリファレンス実装およびドキュメントとして機能しましたが、すでにサポートが打ち切られています。その後、V2G Clarityにプロジェクトが引き継がれ、営利の研修と共にプロトコルの理解を支援しました。
一方、サポートが打ち切られたRISE-V2Gについてトレンドマイクロでは、RISE-V2Gを概念実証(PoC)の検証環境で用いるだけでなく、最終製品での使用を意図しているプロジェクトグループの存在を確認しました。さらに「充電ステーションの頭脳」とも評された公開プロジェクト「Joint Operating system for Seamless EV charging(Josev)」においても、GitHubページを見る限りではRISE-V2Gの実装技術が採用されているように見えます。JosevがRISE-V2Gをそのまま使用しているのかどうかは不明ですが、作成者はすでにRISE-V2Gにかなり注力しているとみられています。
これらのことからトレンドマイクロは、検証対象としてRISE-V2Gのフレームワークを用いることで、Javaを用いる充電ステーションが悪用される分かりやすい事例として一般公開しました。しかし、検証前にRISE-V2GフレームワークにLog4jが用いられているかどうかを確認する必要があったため、当該プロジェクトを複製した後、以下のシンプルなgrepコマンドを用いて多くのデバッグ文字列を発見しました。
トレンドマイクロはRISE-V2Gがどのように機能し、使用されているかを調査するために、プラグイン電気自動車 / 充電ステーション間のV2Gネットワークにおけるデータ交換を検証するための小さな環境を構築しました。そのために、プロジェクト全体をコンパイルして、以下の2つのアプリを起動する必要がありました。
- 充電ステーション(EVSE)用アプリ「RISE-V2G-SECC/target/rise-v2g-secc-1.2.6.jar」
- プラグイン電気自動車(PEV)用アプリ「RISE-V2G-EVCC/target/rise-v2g-evcc-1.2.6.jar」
これにより、供給機器通信コントローラ / 充電ステーション側のログ取得が可能になりました。
V2Gネットワークにおけるデータ交換のやり取りを要約した最初の状態の概略図を図2に示します。
さらなる調査の結果、以下に示すエンコードされたV2Gメッセージを用いて実際にLog4jの脆弱性を悪用できる可能性があることを確認しました。
しかし、このままではまだ攻撃に利用することができなかったため、これらのメッセージがどのようにデコードされてログに出力されるのかをさらに検証する必要がありました。
上記の下線が引かれたパスが、侵入経路として最適であるように見えました。このコードは、電気自動車通信コントローラ(電気自動車) / 充電ステーション間で一般に使用されている点に注意が必要です。このため、RISE-V2Gフレームワークの実装を使用している電気自動車のモジュール上で同じことが引き起こされる可能性があります。しかしトレンドマイクロの知る限りでは、電子制御ユニット(ECU)のアーキテクチャの多くは、TriCoreマイクロコントローラアーキテクチャのように複雑な設計がされているため、自動車に搭載される電子制御ユニットの多くはC++で実装されています。したがってトレンドマイクロは、この脆弱性が少なくとも充電器内で発見されると推測しています。
さらに電気自動車 / 充電器間で交換されるデータが、XMLデータの効率的な交換形式「EXI(Efficient XML Interchange)」を用いてエンコードされていたことも特筆すべき点です。トレンドマイクロは、検証環境で交換されるXMLデータをエンコードするために、EXIペイロードのデコード / エンコードが可能な「V2Gdecoder」というツールを作成しました。以下のコードは、XMLデータをEXIバイナリにエンコードする例です。
しかし、検証環境でこの脆弱性を突くために、XMLデータで使用されている型を把握し、文字列を注入できる要素や属性を見つけ出す必要がありました。XMLスキーム定義(XSDs)を調査した結果、ProtocolNamespaceやその他の注目すべきフィールドを発見できました。
最後に、この脆弱性が悪用される可能があるかどうかを確認するために、Log4Shellが一般公開されてから最近も注目されているCanarytokensサービスを使って以下のペイロードを作成しました。
Canarytokensにより生成されたトークンを用いることで、万が一脆弱性が突かれた場合にも通知が送信されるため便利です。
次に、図3に示すようにV2Ginjectorフレームワークを用いて構築した電気自動車通信コントローラ(電気自動車)を模した検証環境から、最初の状態を攻撃しました。
供給機器通信コントローラ(SECC)の処理が終わった後、このフレームワークにV2Gdecoderを用いてXMLペイロードをエンコードし、V2GTP(Vehicle-to-Grid Transfer Protocol)レイヤを使って電気自動車通信コントローラ(EVCC)に送信しました。その後、電気自動車通信コントローラ(検証環境)が悪意のあるペイロードを送信したことで、供給機器通信コントローラのアプリがフリーズし、最終的にはCanarytokensから直接通知が届きました(図4)。
繰り返しとなりますが、V2GInjectorのWebページに記載されているHomePlug Green Phyの鍵が収集されるセキュリティ上の弱点が悪用されると、V2Gネットワークに侵入される可能性が高いことに注意が必要です。
トレンドマイクロは、以下の脆弱性検証用コード「VeryEvil」を記述し、さらに調査を進めました。
その後、marshalsecツールを呼び出して頒布すると同時に、TCP 80番ポート上でWebサーバを稼働させ、デフォルトでクラスを並列に転送するようにしました。
最後に、V2Gネットワークにおけるデータ交換中に注入するjndi URL(前出のコード参照)を再調整して検証を終えました。
■ 車載インフォテインメント(IVI)システムが実際に悪用される可能性
自動車業界でこの脆弱性の影響を受ける可能性のある関連機器は、充電ステーションだけではありません。車載インフォテインメント(IVI)システムもまた実際の脅威にさらされる可能性があります。
IVIシステムには複雑なOSが用いられているため、ユーザ・インターフェースだけでなく、Webブラウザも表示できます。さらにユーザは、TwitterやFacebookなどのアプリをIVIシステム上にインストールすることもできます。2G/3G/4G/5G対応モバイルモジュールを介してインターネットに接続されたIVIシステムにJavaのログ出力ライブラリ「Apache Log4j」が採用されている場合、攻撃対象となる可能性があります。実際にセキュリティ企業「Synacktiv社」が実施した以前の調査では、一部のIVIモジュールにAndroid 4.0.4(旧バージョン)が採用されていたことが判明しています。
Log4jの脆弱性を悪用する手口は、米Tesla社の電気自動車に不具合を生じさせた実証実験でも証明されています。この実証実験に関する資料には、実際にどの自動車部品の脆弱性が引き起こされたかなどの詳細がほとんど記されていませんでした。とはいえ、この脆弱性が悪用された場合、ユーザのプライバシーや電気自動車の一般セキュリティに影響を及ぼす可能性があることを示唆しています。攻撃者はバックエンドを侵害することで、脆弱なコネクテッドカーにユーザの意図しない操作をプッシュしたり、Firmware Over-The-Air(FOTA)によって悪意のある更新情報を頒布したりできる可能性があります。
■ デジタルキーに潜在する脆弱性「Log4Shell」を検証
スマートフォンは、キーフォブに代わって、車の一部を制御できるいわゆる「デジタルキー」として利用可能です。これを可能にするアプリもまたLog4jに内在する脆弱性の影響を受ける可能性があります。各種アプリの調査・解析用ツール「Frida」で記述したJavascriptを、デバイス特性変更ツール「log4JFrida」で用いて仮説を検証した結果、電気自動車が持ついくつかの特性を変更して脆弱性を悪用できることが判明しました。
■ 脆弱性に対する緩和策
本記事で取り上げた「電気自動車用充電器」、「IVIシステム」、「自動車用デジタルキー」以外にも、Log4jの脆弱性を検証・監視すべき関連機器はまだまだたくさんあります。今回検証で用いたサーバからのレスポンス以外にも多くの通信路が存在するため、攻撃者がアプリにより付与されたアクセス権を悪用して、車のドアロックを解除したり、暖房の制御、あるいは車載システムの機能を不正に実行するために悪意のあるコマンドを送信したりする可能性があります。
法人組織やセキュリティ専門家は現在もLog4jの脆弱性が影響を及ぼす全範囲の対策に取り組んでいます。今後数週間のうちに、特定のサービスや、デバイス、アプリに内在するこれらの脆弱性がもたらす影響についてさらなる調査レポートが公表される可能性があります。一方、サイバー犯罪者はこの機会を最大限に利用すべく、修正プログラム(パッチ)が適用されていないLog4jの脆弱性を露呈させた脆弱なサーバなどを対象に不意打ちを行っています。
この脆弱性を修正する主な方法は、Log4jを最新バージョンに更新することです。バージョン2.17.0では、Log4jの設定に値を追加する方法を提供するMessage Lookup機能が完全に削除されています。しかしながらRISE-V2Gなどの多くは、最新版のLog4jを用いた場合にアプリが破損してしまう可能性があります。
もう1つの修正方法は、米セキュリティ企業「LunaSec社」の緩和ガイドにあるように、Log4jの設定時に「formatMsgNoLookups = true」を有効にするか、Log4jの実行時に以下のフラグを呼び出すことで対処できます。
また、ログが不要な場合は、ログの記録を完全に無効にすることもできます。例えばRISE-V2Gでは、EXI(高効率XML交換)およびXML(拡張可能なマーク付け言語)の表示を無効にすることで、ログの記録を無効にするオプションが設定ファイルに用意されています。
トレンドマイクロは、検出・予防に役立つ弊社製品の一覧と、トレンドマイクロ製品への影響の有無に関する情報を掲載したサポートページを作成しました。
さらにトレンドマイクロは、Log4jに内在する脆弱性の影響を受ける可能性のあるサーバアプリやエンドポイントを特定するための脆弱性診断ツールも作成しました。このツールは、攻撃対象領域やリスクを軽減するために対策すべき次のステップを詳細に示します。
参考記事:
- 「Examining Log4j Vulnerabilities in Connected Cars and Charging Stations」
By Sébastien Dudek
翻訳:益見 和宏(Core Technology Marketing, Trend Micro™ Research)