Technical Information

車載ネットワークのセキュリティトレーニングプラットフォーム

security10_hero.jpg

車載システムへのセキュリティ対策がますます重要になる中、自動車は移動体IoTデバイスとして非常に複雑なシステムとなっており、その理解や開発のためにはOS、ネットワーク、クラウドなど広範囲の要素技術を身に付けることが求められます。本稿では、近年の自動車アーキテクチャの変化と人材教育について触れ、自動車で広く使われているCANプロトコル※1の初学者向けトレーニングプラットフォーム開発と、それを使った解析・なりすましなどの実習について紹介します。

※この記事は、『Veriserve Mobility Initiative 2024』の講演内容を基にした内容です。

※1 CAN(Controller Area Network)プロトコルとは、自動車や産業機器などで使われるデータ通信ネットワークプロトコルの一種です。


井上 博之 氏

京都産業大学 情報理工学部 教授
井上 博之 氏 

コネクティッドカーに対するサイバー攻撃の事例

コネクティッドカーに対するサイバー攻撃への懸念は2010年頃から指摘されています。有名な事例として、2015年のBlack Hat USA(世界最大級のサイバーセキュリティイベント)において、インターネットを介したなりすまし攻撃によって自動車が遠隔操作される事例が報告されるに至り※2、自動車業界は大きな衝撃を受けることになりました。この時のレポートによれば、当該車両にはインターネット接続サービスや車載LAN上のECU※3などに5つのセキュリティホールがあり、これらにより大きな脆弱性となっていたとされています。結果的にこの脆弱性を狙われ、外部からECUのファームウェアの書き換えを許してしまいました。ただし、これは組込みシステムとネットワークが理解できていれば十分に防ぐことが可能な攻撃であり、対策についてもさほど難しいものではありません。

また、2021年にはCANインベーダーを使った自動車盗難で国内初の逮捕者が出ました。CANインベーダーは、駐車している状態の車両に対して、ECU間の通信をつかさどるCAN信号に介入(CANメッセージを注入)し不正に開錠・エンジンスタートさせるもの。こちらもCANの脆弱性を突いた攻撃手法ですが、原理が分かってしまえば対処が難しい技術ではありません。

※2 米国のコンピュータセキュリティの専門家、Charlie Miller氏とChris Valasek氏が、市販の乗用車をリモートからハッキングする方法を発見しました。

※3 ECU(Electronic Control Unit=電子制御ユニット)とは、エンジン、ブレーキ、カーナビゲーションなど自動車のさまざまな機能を制御するためのコンピュータ装置のことです。

オフェンシブ・セキュリティ

こうしたコネクティッドカーへのサイバー攻撃に対処する上で有効になるのが、オフェンシブ・セキュリティ(攻撃的セキュリティ)と呼ばれるアプローチです。これは攻撃者の視点に立ち、実際にハッキングを行うなどの実践的な攻撃を繰り返しながらブラックボックス解析※4を行い、その知識を生かして防御手法を構築していこうという考え方です。
私は10年程前から、大学においてこのオフェンシブ・セキュリティの研究(車載LANの情報セキュリティを検証するための分析プラットフォームの設計・開発)に取り組んできました。例えば、ADAS(先進運転支援システム)機能を搭載した車に対して、外部からブレーキを動作させる、パーキングブレーキを自動解除する、全車速追従オートクルーズ状態で勝手な発進をさせる…等々、車載ネットワークに外部から侵入してどのような影響を及ぼすことができるかについて検証し、デモを行ってきました。教育の場においてもこうした攻撃手法を理解することが、防御の仕組みをより良く理解するための力になると考えています。そして後述する「CANプロトコルのパケット解析トレーニング」も、このオフェンシブ・セキュリティの一環となるものです。
なお、昨今ではオフェンシブ・セキュリティに関する学会発表やセミナーも増えてきており、私が実行委員会として関わった「SECCON2023電脳会議」※5においても「Offensive Securityワークショップ」はおかげさまで大変な人気講座となりました。

※4 自動車におけるブラックボックス解析とは、ECUのソフトウェアの内容や車載LANに流れるパケットの意味(仕様)を知らない状態から、送受信されているパケットの解析や自動車の挙動の調査を行うことで、自動車の内部メカニズム、各ECUの役割、車載LANのパケットの意味などを解析していく手法を指します。

※5 セキュリティコンテストSECCONのCTF決勝、講演会、ワークショップなどが開催される1年に一度のイベントで、毎年12月から2月頃に行われています。

自動車アーキテクチャの変化

次に、ここ数年の自動車におけるアーキテクチャの変化について、簡単に見ていきたいと思います。

■7、8年くらい前の車両のECUの構成例

図表1は、7、8年くらい前の車両のECU構成例を図示したものです。1つのCANバスに駆動系、ボディ系、ADAS系のように主要なECUが全て接続されており、ゲートウェイはありません。全ての車両データはOBD-II※6から取得することができ、またOBD-IIを経由して外部から攻撃パケットを注入すれば、ブレーキやエンジン制御などほとんどのECU操作が可能になる、つまり、なりすまし攻撃に対する脆弱性があることが指摘されていました。

車両のECU構成例(およそ7、8年前)

図表1:1つのCANバスに主要なECUが接続されているため、外部攻撃を受けるとほとんどのECUの操作が可能となってしまう

※6 OBD-II(オービーディーツー、On-Board Diagnostics II)とは車の自己故障診断システムのことで、この場合は外部と接続するための診断端子のことを指しています。

■現在の車:ドメイン・アーキテクチャ

一方、現在の車両のECU構成ですが、CANバスが機能別に分割され、さらにOBD-IIとの間にセントラルゲートウェイが設けられ、これがファイアウォールの役割も果たしています。図表2の例では、CAN1がADAS系、CAN2が駆動系、CAN5がボディ系になっており、外部と通信を行うデバイスはCAN3に集約されています。このように機能別にネットワークを構築して車両全体を制御する仕組みを「ドメイン・アーキテクチャ」と呼びます。また、この例におけるCAN1とCAN2は「走る・曲がる・止まる」という安全に関する重要な機能をつかさどる部分となるため、最近の車では、なりすましを防ぐためのMAC認証(Message Authentication Code)や車載Ethernet(イーサネット)が導入されているものもあります。

車両のECU構成例(現在)

図表2:CANバスが機能別に分割され、セントラルゲートウェイがファイアウォールの役割も果たしている

■今後の車:Ethernet+ゾーン・アーキテクチャ

また、現在開発が進んでいるのが「ゾーン・アーキテクチャ」と呼ばれるものです。ドメイン・アーキテクチャでは各機能が個別のECUで制御されていましたが、ゾーン・アーキテクチャでは車両を場所ごとに分割し、各ゾーン間を高速の車載Ethernet※7というLANとEthernetスイッチ(SW)でつないで相互通信を可能にしています(図表3)。全体の制御はシステム中央に置かれた高性能のコンピュータ(計算ユニット)にできるだけ集約します。ゾーン・アーキテクチャは、高速データ転送とシステムの拡張性に優れ、安全性やメンテナンス性の向上に寄与できるなどの利点が挙げられます。今後2~3年後には、こうしたEthernet+ゾーン・アーキテクチャを実装した車両が登場してくると思われます。

Ethernet+ゾーン・アーキテクチャ

図表3:場所ごとにECUを編成し、ゾーン間を高速ネットワークでつないでいる

※7 Ethernet(イーサネット)とは有線LANの標準規格の一つで、車載用のEthernet規格として100BASE-T1や10BASE-T1Sなどがあります。

■今後の車: SDV+OTA

昨年くらいから話題になっているキーワードにSDV(Software-Defined Vehicle)があります。「ソフトウェアによって定義される自動車」と訳されますが、SDVでは外部からの通信によって車両を制御するソフトウェアを更新し、自動車の機能や性能をアップデートすることができます。また、コネクティッドカーにおいては無線通信によってファームウェアをアップデートするOTA(Over the Air)という仕組みが導入されています。先ほど紹介したゾーン・アーキテクチャでは各ゾーンのECU(またはセンサ、アクチュエータなど)がEthernetスイッチによって接続されているため、ネットワークを自由に構成できる点も含め、ソフトウェアで容易に変更できる利点があります。つまりSDVによって車両の動作状態に応じた最適なネットワークを構成することができる、あるいは必要なネットワーク、必要なソフトウェアだけを動かしたりすることができる、こういった技術が現在検討されているところです。

CANネットワークを使ったパケット解析トレーニング演習の紹介

こうしたアーキテクチャの進化を受け、私たちは何をどのように学ぶべきでしょうか。もちろん、ソフトウェアへの理解は重要ですが、ここでは私が実際に大学の研究室やセキュリティ・キャンプ全国大会※8などで実施してきた、CANネットワークを使ったパケット解析トレーニング演習についてご紹介したいと思います。

※8 セキュリティ・キャンプとは、情報処理推進機構(IPA)が開催する、セキュリティ人材の発掘・育成することを目的としたプログラムです。全国大会は、応募者選考に通過した学生・生徒に対し、高度な情報セキュリティに関する教育を夏の1週間に合宿形式で実施するイベントです。

■トレーニングプラットフォームの全体像

演習を行うに当たっては、受講者が実車の内部に直接手を入れるわけにはいかないため、簡単な小型コンピュータ(Raspberry Pi)を使ってCANネットワークを構成し、受講者一人一人がVNC(Virtual Network Computing=リモートデスクトップ)経由で操作できるようにしておきます。そして一方にはハンドルやメーターパネルを持ったターゲット車両を模したものがつながっています(図表4)。また講師はCANアナライザ※9で任意のCANメッセージを送受信できるようにしています。

トレーニングプラットフォームの全体構成

図表4:トレーニングプラットフォームはRaspberry Piを使ってCANネットワークを構成している

※9 CANアナライザとは、CANプロトコルを使用した通信データを解析・送受信するツールです。

■CANプロトコルの特徴

なお、CANプロトコルの特徴については、以下のようにまとめることができると思います。

  1. 通信速度が500kbps程度と低速である
  2. 共有バスのブロードキャスト通信を行う
  3. メッセージは送信元アドレスに相当するものを持たない(なりすまし攻撃の危険性)
  4. 1メッセージのペイロード※10は最大8byteまで(メッセージの暗号化が難しい)

これらのことから、CANはプロトコル上、盗聴、なりすまし攻撃、DoS攻撃に弱いと言えます。また、解析する側からすると暗号化もされておらず、全てを見ることができます。そこで、演習では正常通信中のCANメッセージをキャプチャし、それを部分的にCANバス上に再送信(いわゆるリプレイアタック)することで、メッセージと車両の動作の関係性を解析していきます。

※10 ペイロードとは通信プロトコルにおいて、実際に伝達されるデータやメッセージの主要部分を指す用語です。

■演習1  CANメッセージの解析

ここからは、実際の演習内容です。
最初は、CANメッセージの観測とキャプチャをしていきます。具体的には、J1979規格※11の表示器(メーター)が送信する診断メッセージとECUエミュレータ間で送受信されるパケットを観測・キャプチャし、そこに流れているデータの解析を行います(図表5)。ここではそれほど難しいデータは流れていませんが、これを各人の演習マシンでキャプチャし、受講者自身で解読します。この時、Sniffer & Dumpウィンドウ※12と送信用ウィンドウを2つ開いておき、CANメッセージの送受信を同時に行うと何が行われているのかが分かるようになります。

CANメッセージの観測とキャプチャ

図表5:演習ネットワーク上で、ECUエミュレータとJ1979表示器の間で通信を行い、そのトラフィックを観測する

※11 SAE J1979規格は、車両の故障診断に関するデータ通信プロトコルで、どの車でも共通の手順で車両からデータを取り出すことが可能です。

※12 SnifferウィンドウではCANネットワーク上を流れる全てのメッセージをリアルタイムでキャプチャ(スニッフィング)し、表示します。DumpウィンドウではキャプチャしたCANメッセージの詳細情報をリスト形式やログとして表示・保存します。

次に、診断メッセージを自分で作成し、車速情報をECUに問い合わせ、車載コンピュータからの応答を確認します。さらに中に入っているパケットのフォーマットを解析していきます(図表6)。

診断メッセージの送信と応答の受信

図表6:診断メッセージを自分で送信することで、車速情報をECUに問い合わせる

次に、簡単なプログラムを作ってパケット内のデータを解析していきます。プログラミングに使用するのはPython3とそのライブラリ「Pyvit」で、CAN用ライブラリを使うことで非常に短いプログラムでデータ送受信ができる利点があります。講師が事前に作成して配布した、簡単なCANメッセージ解析を行うPythonプログラムに追加する形で、自分なりのメッセージ解釈とそのデータ表示を実現していきます。

解析プログラムができると、さまざまなCANデータの観測ができるようになりますが、次段階として実車のCANデータ解析にも応用していきます。実車からキャプチャしてきたCANメッセージ(実データ)を流し、その中に含まれているものの意味(速度、回転数、ウインカー・ハザード点灯、ハンドル操作等)を一つずつ解析していきます。また、さらに講師が持っているCANアナライザからなりすましデータを送って、実車のハンドルコントローラやメーター制御の再現なども行っています(図表7)。

実車のCANデータを観測する

図表7:実車トラフィックをそのまま流す。また、講師のCANアナライザで作成したなりすましデータを送信する

■演習2 ICSimを使ったCANトラフィック解析

演習2は、CANの解析スキルを身に付けるためのICSim(メーターパネルシミュレータ)というアプリケーションを使ったCANトラフィック解析です。ランダムに流れているCANメッセージをキャプチャして再生することで、メーターパネル(図表8、右)を自由にコントロールすることが目標です。一方、なりすましをするには、どのCAN IDに何のデータが入っていて、それがどういう値なのかを突き止める必要があります。そこで、CANメッセージのIDとメッセージのフォーマットを特定していきます。さらに、ペイロードの場所と値を特定する作業を行います。これがうまくできれば、なりすましメッセージを送り、さらに計器をコントロールできるか確認できるようになります。この演習では、vcan0(Virtual CAN0)という各演習マシンのローカルに存在するCANバスを利用するため、各人は個別に演習を行うようになっています。なお、ICSimのアプリケーションを手持ちのLinuxマシンにインストールすれば、自宅などでも演習を行うことは可能です。

ICSimを使ったCANトラフィック解析

図表8: ICSimは送信部と受信する計器部の2つからなっており、その間を流れるCANメッセージを解析していく

■演習3 Arduinoを使ったPoC装置の作成

演習3では、Arduinoマイコンを使ってなりすまし装置(PoC装置)を作成していきます。ここでは、演習1で解析した実車のCANメッセージを流して、実車のメーター(車両速度やエンジン回転数等)が動くかどうかで確認していきます(図表9)。この時、データを送信するにはC言語の関数が使える必要があるため、まずはプログラミングや関数の使い方を学んでいきます。そして、独自に作成した送信プログラムになりすましメッセージを入れて送ることで、メーターの動作を確認していきます。

また、CANバスを飽和させるような大量のメッセージ(DoSメッセージ)も、C言語プログラミングでは比較的簡単に作成できます。これにより、例えば1秒間に4000パケット程度のメッセージを送信した際に、システムがどのような動作を見せるか、といったことも確認することができます。

Arduinoを使ったなりすまし装置

図表9:実車のメーターに対してArduinoマイコンを使って、なりすましデータを送信するところを観察する

■演習4 3Dゲーム連携システムのメッセージ解析

3Dドライブシミュレーションゲームとして「Euro Truck Simulator2(ETS2)」というものがあります。このゲームとリアル世界との連携システムを研究室で作成したので、それを使ったメッセージ解析を行っていきます。「ETS2」のAPIを通じてゲーム内の車両データ(クルマの状態、速度、ギアの値等)を取り出し、CANメッセージに変換して送信することで、リアル世界の(フィジカルな)メーターやハンドルの動きに反映させる装置を作成しており、そこから出力されるCANメッセージをゲームの状態と併せて解析するような試みを行っています(図表10)。
ちなみに、このCANメッセージの中には、演習1で解析できなかったようなものが数種類(ハンドル舵角、ギア・ブレーキ・ライトの状態など)含まれており、それらがどのようなフォーマットになっているのかを解析することができます。

実際の車載センサのデータ解析

図表10:3Dゲーム中の車両データをCANメッセージに変換して送信することで、実車のメーターに反映させている

■演習5 実際の車載センサのデータ解析

最後の演習では、実車から外してきたヨーレートセンサ(車体の回転角速度や加速度を検出するセンサ)を使用したデータ解析を行います(図表11)。このセンサは、単体で電源をつなぐとCANデータを出力します。これを手で動かしながら、CANバスに流れるIDがどのようになっているか、どのような値になっているかを解析していきます。

実際の車載センサのデータ解析

図表11:角速度・加速度センサのため、手で動かすだけで送信されるデータが変化する

ここまでが、CANネットワークにおけるパケット解析についての初学者向けカリキュラムになっています。

コネクティッドカーまたはIoTデバイスと呼ばれるものの組込みシステムには、独自の(特殊な)ハードウェア/アーキテクチャが使われていたり、さらにはクラウドや携帯端末とも連携したりしています。そのセキュリティを検証するには、ハードウェアはもちろん、OS、ソフトウェア、通信プロトコル、サーバに至るまで、広範な知識が求められます。そして、トータルな知識に加えて、いずれかの専門分野に対する知識を持っていることが望ましいと考えています。これらを一通り理解していくには、本稿で紹介したような物理的な物(機器)を使った演習が効果的になると考えます。

おわりに

コネクティッドカーのセキュリティに携わるには幅広い知識が必要であり、そのための人材育成についても重要性が高まっています。こうした中、企業人や若手・学生向けの情報セキュリティ教育は国内でも多数実施されており、その意味では非常にいい時代になってきています。

代表的なものとしては、 IPA・経済産業省が進める産業サイバーセキュリティセンター(ICS CoE)の中核人材育成プログラム、ナショナルサイバートレーニングセンター(NICT ・総務省)によるCYDER演習、自動車技術会による自動車工学基礎講座、自動車サイバーセキュリティ講座(以上は主に企業人が対象)などがあります。
また、若手や学生向けにはIPAのセキュリティ・キャンプやNICTのSecHack365などの人材育成プログラムや、SECCON(セキュリティコンテスト)やプログラミングコンテストなどのイベントも注目されています。
コネクティッドカーの情報セキュリティについて学びたいという方であれば、ぜひこういったイベントや技術セミナーなどにも参加されることをお勧めします。

この記事をシェアする

Facebook  Twiter