Pythonと ChatGPT を活用した自動車セキュリティの調査

2024年5月6日
CyberThreat Research Lab
Pythonと ChatGPT を活用した自動車セキュリティの調査

By Jay Turla (Principal Security Researcher, VicOne)

今日のコネクテッドカーは、常に変化するサイバー脅威の環境に晒されています。このような状況下で、自動車セキュリティのリサーチャーには、脆弱性を迅速かつ効果的に分析するための強力なツールが必要不可欠です。この点において、PythonとChatGPTは特に注目に値するツールといえます。本稿で述べるとおり、PythonとChatGPTを組み合わせて使用することで、タスクの自動化、攻撃の概念実証(POC)の作成、自動車システムの脆弱性の探索において強力な機能が提供されます。

Pythonを通じたCANバスの実験

汎用プログラミング言語のPythonは、C++やArduino Programming in Cと共に、カーハッカーや自動車セキュリティリサーチャーの間で人気があることで知られており、タスクの自動化やスクリプト化を簡素化する豊富なモジュールとライブラリがあるため、既知の攻撃のPOCを作成するのに特に便利だといえます。

筆者のような自動車セキュリティのリサーチャーにとって、車両のCAN(Controller Area Network)バスを扱う上で、いつかのライブラリが特筆されます。これらには、can-isotppython-canpyvitなどが挙げられます。後者の2つは、CANバスとのやり取りを簡素化するため、初心者にとっても特に良い選択肢となっています。

実際の車両を使ってCANバスの実験を行うことができない場合でも、LinuxのバーチャルマシンとBashコマンドを使用することで、シミュレーション用の仮想CANバス(vcan0)デバイスを簡単に作成できます。

sudo modprobe can
sudo modprobe vcan
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0

In the succeeding subsections, I share practical examples of how Python can be used to learn about and experiment with the CAN bus.

python-canによるCANバスへのスパム攻撃

python-canライブラリは、さまざまなCANバスデバイスへの共通の抽象化を提供し、CANバスへのメッセージの送受信のための組み込み関数を提供します。この例では、python-canを使用して、同じアービトレーションIDを持つ大量のメッセージをCANバスに送信する方法を示します。

以下は、仮想CANバス(vcan0)に接続し、単一のフレームを送信する基本的なpython-canライブラリです。

Figure 1. A basic python-can library that sets up a vcan0 device

図1:vcan0デバイスをセットアップする基本的なpython-canライブラリ

Figure 2. An actual CAN dump of the virtual CAN bus interface

図2:仮想CANバスインターフェースの実際のCANダンプ

次は、単一のアービトレーションID(1337)を使用して、CANバスに100個のデータフレームをスパムするファジングスクリプトの例です。

Figure 3. A sample fuzzing script that spams the CAN bus with data frames with one arbitration ID

図3:1つのアービトレーションIDを持つデータフレームでCANバスにスパムを送るサンプルファジングスク

この例の100個のデータフレームでは、重要なシステムを中断するには十分ではないかもしれませんが、CANバススパミングはより洗練された攻撃の足がかりになる可能性があります。一見無害なデータでバスを氾濫させることで、攻撃者は特定の電子制御ユニット(ECU)を危険にさらしたり、車両を完全に制御したりするように設計されたコマンドを隠すことができます。逆に言えば、このような活動を検出することで阻止できる堅牢な自動車サイバーセキュリティの重要性を示しているともいえます。

pyvitを使用したDoS攻撃とECUのハードリセット

CANバスとのやり取りに役立つもう1つの優れたライブラリがpyvitです。pyvitは、初心者でも使い始めやすいように、優れたサンプルコード、コードスニペット、ドキュメントを提供しています。pyvitのGitHubリポジトリは現在アーカイブされていますが、一部の自動車セキュリティ研究者は今でもこのライブラリが有用だと考えています。リポジトリを直接クローンするか、Pythonのパッケージマネージャーであるpipを使ってインストールすることで、pyvitを利用することができます。

例として、以下のスクリプトは、CANバスに対するサービス拒否(DoS)攻撃、特にFirehose攻撃を示しています。Firehose攻撃とは、CANバスをデータで氾濫させ、バスを圧倒して他のサービスや機能を拒否することを目的としているため、このような名称で呼ばれています。

Figure 4. A Firehose attack using pyvit

図4:pyvitを使用したFirehose攻撃

次のスクリプトは、ECUにハードリセットコマンドを送信する方法を示しています。もし攻撃者が車両の診断ポート(OBD-IIポート)やインフォテインメントシステム(IVIシステム)などの脆弱なアクセスポイントを悪用して、このようなリセットコマンドを送信できてしまうと、セキュリティ上の重大な脆弱性になる可能性があります。

ECUハードリセットが成功したかどうかを確認するには、CANバス上にアービトレーションID 0x77aのメッセージ応答が表示される必要があります。そのメッセージ応答には「02 51 01」というデータが含まれているはずです。

Figure 5. An ECU hard reset script

図5:ECUハードリセットスクリプト

ECUハードリセットは、セキュリティと安全性に深刻な影響を与える可能性があります。攻撃者に悪用された場合、このECUハードリセットにより、車両の動作が改ざんされたり、セキュリティ機能が無効されたりして、運転手や乗客を大きな危険にさらす可能性があります。

CaringCaribouを使用したUDS IDの発見

自動車セキュリティのリサーチャーは、車両の脆弱性を発見し、ソフトウェアアップデートなどで問題に対処するために、オープンソースのPythonツールも活用しています。特に「CaringCaribou」は筆者も重宝しています。このツールは、車載コンピュータ(ECU)の診断に使われる特別なコード「UDS ID」を素早く効率的に特定できます。CaringCaribouでUDS IDを分析することで、リサーチャーは車両のセキュリティ上の弱点を浮き彫りにできます。

Figure 6. A sample dialog using CaringCaribou, a Python-based car security exploration tool

図6:Pythonベースの車両セキュリティ探索ツールであるCaringCaribouを使用したサンプルダイアログ

UDS IDは、車両の潜在的な脆弱性を見つけるのに役立ちますが、問題は、攻撃者も同じ脆弱性の識別子を悪用できるという点です。もし攻撃者がUDS IDを入手してしまえば、車の設定を勝手に変更したり、車載コンピュータを強制的に再起動させたり、あるいはセキュリティをかいくぐってシステムに不正アクセスしたりするかもしれません。そうなれば、車の安全性とセキュリティが脅かされ、運転手や同乗者が危険にさらされることになります。

ChatGPTの活用

プログラマーは、最近人気のAIチャットボット「ChatGPT」を使って、プログラムを書いたりデバッグしたりする作業を効率化など、ChatGPTの支援を受けながらコードを開発できるます。一方、セキュリティリサーチャーも、ChatGPTを情報収集などに活用できます。特に、システムの弱点を見つけ出す「ペネトレーションテスト」という作業の中で、ChatGPTによる情報収集は重宝されます。

Figure 7. A sample use case where ChatGPT is tasked to create a buffer overflow script

図7:バッファーオーバーフロースクリプトの作成をChatGPTに任せたサンプルユースケース

Figure 8. Information gathering for penetration testing via ChatGPT

図8:ChatGPTを介したペネトレーションテスト用の情報収集

ChatGPTは、自動車セキュリティのバグを悪用するための自動化スクリプトやPOCの例を作成するためのガイドとしても使用できます。例えば、python-canモジュールを使用して「Janus Attack」として知られる低レベルのCANバス攻撃のPOCを作成するように指示することも可能です。

Figure 9. A python-can POC of the Janus Attack created using ChatGPT

図9.:ChatGPTを使用して作成されたJanus Attackのpython-can POC

可能性はそれだけではありません。筆者は、自作したCANバスハッキングのためのフレームワーク「CAN Tools of Trade」のモジュールもChatGPTに書かせてみました。このフレームワークには、すでによく知られているCANバスの脆弱性が盛り込まれており、車両へのペネトレーションテストや自動車セキュリティについて学ぶためのPythonの使い方の両方を学べるようになっています。

Figure 10. CAN Tools of Trade has some examples or modules that automotive security researchers and cybersecurity professionals can practice with.

図10:CAN Tools of Tradeには、自動車セキュリティリサーチャーやサイバーセキュリティの専門家が実践できるいくつかの例またはモジュールが含まれている

この場合、ChatGPTにハッキングフレームワークでモジュールを書くように教えるためには、まずコードモジュールの1つを貼り付けて、ChatGPTにそれを分析させます。そして、CANバス攻撃スクリプトを生成するように指示するだけです。

以下は、CAN Tools of TradeフレームワークのためにChatGPTが生成したCANバスDoS攻撃のPOCとなります。

Figure 11. Teaching ChatGPT to write a POC of a DoS attack in CAN Tools of Trade

図11:ChatGPTに「CAN Tools of Trade」でDoS攻撃のPOCを書くように教える

結論

確かにPythonは、攻撃者が車両の脆弱性を突いてサイバー攻撃を仕掛けるために悪用される可能性があります。しかし同時に、倫理的なハッキングと責任を持った脆弱性の報告を通じて、自動車セキュリティのリサーチャーが攻撃者よりも一歩先を行けるようにもなります。Pythonという万能なツールとChatGPTを組み合わせれば、さまざまな作業を自動化したり、攻撃の実証コードを書いたり、自動車システムの脆弱性を探したりする能力がさらに高まります。ChatGPTは、コードのデバッグを助けたり、別の視点から問題を考えたりするのにも役立つでしょう。

自動車サイバーセキュリティを向上させるための調査やテストには、他にも役立つフレームワークやツールがあります。これらのツールにChatGPTの機能をうまく組み込めば、特に今日の急激に変化し、進化し続ける自動車の脅威の状況下では、新しいモジュールを作ったり、まだ見つかっていない攻撃方法を探したりする際に、AIによる支援が非常に有効であることがわかります。

なお、自動車業界におけるChatGPTの可能性について2部構成のブログシリーズ(英語)を公開しています。第1部ではChatGPTが自動運転のための次のAIマイルストーンになる可能性について説明し、第2部では自動車のセキュリティと安全性への影響を取り上げています。

リソースからもっと知る

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

ブログを読む

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

デモの依頼