なぜRustプログラミング言語が自動車セキュリティの切り札ではないのか

2024年5月17日
CyberThreat Research Lab
なぜRustプログラミング言語が自動車セキュリティの切り札ではないのか

By Omar Yang (Senior Threat Researcher, Automotive)

Microsoft社は2019年、同社の製品で公開された脆弱性の約70%がメモリ関連の問題に起因していることを明らかにしました。2024年になり、ゼロデイ・イニシアチブ(ZDI)は、メモリ関連の共通脆弱性タイプ(CWE)がソフトウェアセキュリティの最大の懸念事項であり続けていると報告しました。Rustは、メモリの安全性に重点を置いて設計されたプログラミング言語であり、これらメモリ関連のエラーを防ぐことができると言われています。Microsoft社やLinuxなどでは、すでにそのライブラリの一部がRustに書き換えられています。このようなRust採用が進んでいる状況を考慮し、自動車のサイバーセキュリティへ与え得る影響について説明します。

Rustがもたらす利点

メモリ関連の脆弱性の大幅な減少

ハードウェアとソフトウェアの双方とシームレスにインターフェースするプログラミング言語として、Rustは、車両コンポーネントのプログラミングにおけるC言語の有望な代替手段となります。Unixシステム用に開発され、メモリへの直接アクセスを広範に許可していたC言語とは異なり、Rustはメモリの安全性を優先しています。

Googleのセキュリティブログによると、メモリセーフティの脆弱性は2019年から2022年にかけて223件から85件に大幅に減少しました。Rustが自動車のファームウェアやソフトウェアに採用されれば、同様の脆弱性減少が自動車業界でも期待できます。メモリセーフティの問題が減少すれば、長期的にはメンテナンスの労力を減らし、効率を高めることができます。

メモリ関連の脆弱性は、何十年にもわたって自動車業界の重大な懸念事項でした。例えば、MISRA-C/C++規格の開発は、組込みシステムのセキュリティ問題に対処することを目的としています。1998年に初めて提案され、その後改訂されたMISRA-C/C++は、新たなセキュリティ課題に対応するために進化し続けています。

Rustの導入における課題

習得の難しさと「unsafe」機能

Rustのメモリ安全性は、一度に1つのエンティティしかメモリにアクセスできないという所有権などの原則に支えられています。これは他のプログラミング言語とは大きく異なるため、開発者はRustの独自の概念やルールを理解するのに時間がかかり、ソフトウェアプロジェクトの開発期間が長引く傾向にあります。さらに、Rustには "unsafe()" 機能が含まれており、Rustの厳格なメモリ安全ルールに従うことが現実的でない場合に使用することを目的としています。しかし、この機能でコンパイラのチェックを回避すると、脆弱なコードが残ってしまう可能性があります。

言語とツールチェーンの脆弱性

Rustを使用しても、言語自体やそのツールチェーンにも脆弱性が含まれている可能性があるため、本質的にセキュリティが保証されるわけではありません。例えば、2024年4月には、Windows環境でcmd.exeを介して任意のコードを実行できるという重大な脆弱性CVE-2024-24576が公開されました。さらに、コンパイラが生成する機械コードは、言語仕様に完全に沿っていない可能性や、バグを含んでいる可能性があり、その過程でソースコードの意図が損なわれる可能性があります。

エコシステムとサードパーティ製ライブラリ

多くの新興言語と同様に、Rustは確立された言語のコンポーネントに依存しているため、他の場所に既に存在する機能の開発優先度が低くなる可能性があります。他の言語の対応物を再利用することは魅力的ですが、Rustのセキュリティ機能を損なう可能性があります。例えば、他の言語の関数を呼び出すと、Rustのメモリ安全性の保証が無効になる可能性があります。これは、Node Package Manager(NPM)のような エコシステムにおける不正なパッケージが関与した事例で確認されています。サードパーティ製ライブラリを使用して電子制御ユニット(ECU)のファームウェアを開発すると、納期を短縮できる可能性がありますが、潜在的な脆弱性も導入されます

非メモリCWEとその他の攻撃経路

脆弱性が大幅に減少した現在でも、Rustはメモリ関連の問題にしか対応していません。2023年のCWEトップ10の半分は、既にメモリ安全性に関連しないものでした。Rustは、コマンドインジェクションにつながる可能性のある不十分な入力検証や、パストラバーサルによる不正アクセスなどの設計上の欠陥を緩和することはできません。さらに、Rustは、システムのアルゴリズム的な弱点ではなく、物理的な実装から漏洩した情報を悪用するサイドチャネル攻撃や、意図的にシステムにエラーを注入するインジェクション攻撃などのハードウェア中心の攻撃を防ぐことはできません。例えば、2023年8月、ベルリン工科大学の研究者らは、Teslaのハードウェアに対して意図的に電圧の異常を引き起こす実証実験を行い、セキュアブートプロトコルを回避することに成功しました。

図1:ゼロデイ・イニシアチブ(ZDI)のデータによると、2023年のCWEトップ10の半分はメモリ安全性に関連していなかった

図1:ゼロデイ・イニシアチブ(ZDI)のデータによると、2023年のCWEトップ10の半分はメモリ安全性に関連していなかった

結論

Rustは、プログラミングにおいて明確な利点を提供し、C/C++の強力な代替手段となります。しかし、自動車のファームウェアやソフトウェアをRustやその他のプログラミング言語に移行しても、コネクテッドカーやそのコンポーネントのセキュリティが確実に保証されるわけではありません。Rustは切り札ではなく、自動車業界のサイバーセキュリティの問題を解決する万能薬でもありません。

自動車へのセキュリティ対策では、車両の内部および外部通信を積極的に監視することが不可欠となります。ハードウェアチップからオペレーティングシステム、システムドライバからユーザーアプリケーションまで、すべての技術層で脆弱性を迅速に検出し、対処することが、コネクテッドカーのセキュリティを確保するために重要です。また、ソフトウェア開発では、独自のソフトウェアとオープンソースソフトウェアの両方が使用されます。ソフトウェア定義の車両(SDV)におけるオープンソースソフトウェアの採用が増加していることを考えると、独自のソフトウェアの脆弱性と並行してオープンソースソフトウェアの脆弱性を監視することも、包括的なセキュリティ対策のアプローチを確保する上でも重要であるといえます。

自動車のサイバーセキュリティの詳細については、当社のリソースセンターをご覧いただき、その他のブログ記事もお読みください。​​​​​​​​​​​​​​​​

リソースからもっと知る

自動車サイバーセキュリティの理解を深める

ブログを読む

自動車業界のお客さまのサイバーセキュリティを加速させるために

デモの依頼