株式会社セキュアイノベーション

    Menu

    セキュリティコラム

    • IoT機器
    • 初心者向け

    公開:2025.02.13 10:00 | 更新: 2025.02.14 01:23

    初めての自動車サイバーセキュリティ―自動車サイバーセキュリティコンテスト入門(環境構築編)―

    セキュアイノベーション:セキュリティブログ「初めての自動車サイバーセキュリティ:自動車サイバーセキュリティコンテスト入門(環境構築編)」セキュアイノベーション:セキュリティブログ「初めての自動車サイバーセキュリティ:自動車サイバーセキュリティコンテスト入門(環境構築編)」

    はじめに

    現代の自動車は、カーナビやスマートフォン連携、無線通信といった先進技術を搭載し、利便性が飛躍的に向上しています。しかしその一方で、車両がサイバー攻撃の標的になるリスクも増大しています。リモート操作による車両制御や、スマートキーの信号を盗む攻撃が実際に発生し、その影響は無視できない規模にまで広がっています。

    こうしたリスクに対処するためには、自動車サイバーセキュリティに関する知識と技術が必要不可欠です。本記事では、自動車ネットワークの基本的な仕組みや、代表的な攻撃事例を簡潔に解説します。また、「自動車サイバーセキュリティコンテスト」に参加するために必要な学習環境の構築手順についても詳しく説明します。

    なお、実際にコンテストへ参加したレポートや、コンテストで出題された問題の具体的な解説については、次回の記事で詳しくお伝えします。本記事を通じて、サイバーセキュリティに初めて触れる方でも基礎的な知識を身につけられるようサポートします。

    INDEX

    自動車のネットワークの仕組み

    現代の自動車は、エンジンやブレーキ、カーナビといったさまざまな機能が、車載ネットワークを通じて連携して動作しています。このネットワークでは、車両に搭載された電子制御ユニット(ECU)間が通信プロトコルを用いてやり取りを行います。代表的な通信プロトコルとして「CAN(Controller Area Network)」や「LIN(Local Interconnect Network)」が挙げられます。

    例えば、アクセルを踏むと、その信号がECUを通じてエンジンに伝わり、車両が動き出します。このような車内ネットワークは、車両の機能を統合的に制御するために不可欠な仕組みです。

    さらに近年では、スマートフォンやカーナビとの接続、無線通信を利用した鍵(イモビライザー)、インターネット経由でソフトウェアを更新するOTA(Over-The-Air)機能など、外部との連携も進んでいます。

    このような機能拡張により利便性が向上している一方で、ネットワークの脆弱性が新たなサイバー攻撃の入口となるリスクも指摘されています。

    自動車へのサイバー攻撃の実例

    自動車のネットワーク化が進む中で、車両がサイバー攻撃の対象となるリスクが現実のものとなっています。その代表的な例が、2015年に報告された「ジープのリモートハッキング事件」です。

    この事件では、攻撃者がインターネット経由で車両の制御を奪取し、エンジンの停止やブレーキの無効化といった操作を遠隔から実行しました。攻撃の対象となった車両は30万台以上にのぼり、大規模なリコール対応が必要となる深刻な問題へと発展しました。

    この事件をきっかけに、自動車メーカーはセキュリティ対策の必要性を再認識し、ネットワークの安全性を確保するためにOTA(Over-The-Air)アップデート機能の導入を進めるなどの対応を強化しています。

    ※本記事内容に関する出典・参考:日経クロステック「Jeepハックの衝撃:清水 直茂」

    自動車サイバーセキュリティコンテストとは?

    近年、自動車のサイバーセキュリティに対する関心が高まる中で、技術者や学生がそのスキルを磨き、競い合う場として「自動車サイバーセキュリティコンテスト」が注目されています。2024年には、日本国内でも経済産業省主催の「Automotive CTF Japan」が開催され、弊社社員も参加しました。

    これらのコンテストでは、車載ネットワークの解析やセキュリティ上の課題を解決する実践的なスキルを学べます。また、初心者向けの課題も用意されているため、学生からセキュリティの実務者まで、幅広い層が参加しやすい点が特徴です。

    特に、コンテストを通じて実践的な技術を習得し、自身のスキルを大きく向上させることが期待できます。

    ※本記事内容に関する出典・参考:経済産業省「第1回「Automotive CTF Japan」の参加者を募集します。」

    CANとは?

    CAN(Controller Area Network)は、自動車内の複数の電子制御ユニット(ECU)間でデータをやり取りするための通信プロトコルです。現在も多くの自動車メーカーで標準的に採用されており、自動車ネットワークの基盤となっています。セキュリティコンテストでもCANについての問題は多く出題されています。

    CAN通信のメッセージには、様々なフィールドが含まれています。例えば、エラー検出のためのCRC(Cyclic Redundancy Check)や、通信を制御するためのフィールドなどがありますが、ここでは特に重要な以下の2つに絞って説明します。

    ID(識別子)

    メッセージの重要度や送信元を示す情報で、11ビットの長さを持ちます。このIDによって通信の優先順位が管理され、同時に送信された場合、IDが小さいメッセージが優先されます。

    データ

    実際の制御内容を表す情報で、1メッセージあたり最大8バイトのデータを送信することができます。

    次に、CANの解析を行う環境構築について説明していきます。

    学習環境の構築

    ここでは、Ubuntu上でCAN通信に関する様々な機能を持ったcan-utilsをインストールし、仮想CANインタフェースvcanを利用してCANメッセージの送受信を行う環境を構築する手順を説明します。

    また、can-utilsの動作確認後、自動車とCAN通信のシミュレータであるICS-simに対して、can-utilsのツールを使用してCAN通信を解析する方法についても説明します。

    ※本記事では、VirtualBox 7.1.6とUbuntu 24.04を使用しています。

    1. can-utilsのインストール

    Ubuntu上でcan-utilsを使用するには、以下のコマンドで必要なパッケージをインストールします。can-utilsには、CAN通信の解析やデータ送受信を行うための便利なツール(例:candumpやcansend)が含まれています。

    $ sudo apt update

    $ sudo apt install -y can-utils

    2. 仮想CANインタフェースの設定

    次に、仮想CANインタフェースを設定します。

    まず、vcanモジュールをロードするために以下のコマンドを実行してください。

    $ sudo modprobe vcan

    次に、以下のコマンドを実行して、vcan0という名前の仮想インタフェースを作成し有効化します。

    $ sudo ip link add dev vcan0 type vcan

    $ sudo ip link set up vcan0

    3. 動作確認:CANデータの送受信

    以下の手順で、candumpとcansendを使用してデータの送受信を確認します。

    3.1 受信テスト:candump

    新しいターミナルを開き、以下のコマンドを実行してvcan0インタフェースの受信データを監視します。

    $ candump vcan0

    3.2 送信テスト:cansend

    別のターミナルを開き、以下のコマンドを実行してデータを送信します。

    $ cansend vcan0 123#11223344AABBCCDD

    このコマンドは、動作確認のためのコマンドで、IDが123、データが11223344AABBCCDDのCANメッセージを送信します。

    4. 結果の確認

    下記の画像の様に左のcandumpを実行したターミナルに、右のcansendで送信したメッセージが表示されれば、動作確認は成功です。

    クリックで画像拡大できます

    シミュレータを使った解析

    ここでは、車両は用いずにシミュレータを使って車載ネットワークに流れるCANメッセージを解析する方法を解説します。

    ※本記事では、ICSimというシミュレータを利用します。
    ICSimは、CAN通信を学ぶための仮想環境を提供し、実際の車両を使わないでCANメッセージの送受信や解析を試すことができます。

    リンク:https://github.com/zombieCraig/ICSim

    1. 必要なソフトウェアのインストール

    まず、以下のコマンドを実行して、ICSimを動作させるために必要なソフトウェアをインストールします。

    $ sudo apt-get install -y libsdl2-dev libsdl2-image-dev git meson

    2. ICSimのダウンロードとビルド

    次に、以下の手順でICSimをダウンロードし、ビルドします。

    $ git clone https://github.com/zombieCraig/ICSim.git

    $ cd ICSim

    $ meson setup builddir && cd builddir

    $ meson compile

    これでICSimのセットアップが完了しました。

    3. シミュレータの起動

    ICSimを利用するには、複数のターミナルを使用します。それぞれのターミナルで以下のコマンドを実行してください。ここからはターミナルを3つ使用します。

    3.1 操作インタフェースの起動(ターミナル1)

    ICSimの操作インタフェースを起動します。

    $ ./controls vcan0

    3.2 状態表示の起動(ターミナル2)

    車両の状態を表示するインタフェースを起動します。

    $ ./icsim vcan0

    3.3 CANバスのモニタリング(ターミナル3)

    candumpを実行して、仮想CANバスの通信内容をモニタリングします。

    $ candump vcan0

    candumpを実行したターミナル上(下記画像の右側)に表示されているデータがシミュレータ上の自動車に流れているCANメッセージです。

    クリックで画像拡大できます

    3.4 シミュレータの操作

    CANBus Control Panelウィンドウを操作することで、仮想車両の各種操作をシミュレートできます。
    以下のような操作が可能であり、操作の結果はIC Simulatorウィンドウで視覚的に確認できます。

    操作方法
    ウィンカーの操作
    ▶キーボードの左右の矢印キーを押すことで、左または右ウィンカーを点滅させることができます。
    加速
    ▶キーボードの上矢印キーを押すと、車両が加速します。
    各ドアの解錠
    ▶右シフトキーを押しながら、A、B、X、Yキーを押すことで、各ドアを個別に解錠できます。
    各ドアの施錠
    ▶左シフトキーを押しながら、A、B、X、Yキーを押すことで、各ドアを個別に施錠できます。
    状態の確認

    IC Simulatorウィンドウでは、上記の操作に対応する車両の状態変化がリアルタイムで表示されます。
    例えば、ウィンカーが点滅する様子や、ドアが施錠・解錠される動作を視覚的に確認することが可能です。

    クリックで画像拡大できます

    4. メッセージ解析

    ここまでは、CANBus Control Panelから車両を操作してきましたが、その際に流れるCANバス上のメッセージにアクセスできれば、コントロールパネルを使用せずに第三者が特定の操作を実行できる可能性があります。

    そこで、candumpを使用してコントロールパネル操作時に送信されるCANメッセージを記録・解析し、特定の操作に対応するメッセージを特定していきます。

    4.1 CANメッセージの記録

    まず、通常時のCANメッセージをログとして保存します。以下のコマンドを実行して、normal_logというファイルに通常時のメッセージを記録します。

    $ candump vcan0 -f normal_log

    次に、ドア解錠操作を行った際のメッセージを記録します。以下のコマンドを実行し、CANBus Control Panelからドア解錠操作を行った後にキャプチャを終了してください。

    $ candump vcan0 -f door_unlock_log

    4.2 メッセージIDの差分抽出

    ドア解錠時に送信される特定のCANメッセージを特定するため、通常時のログとドア解錠時のログからメッセージIDの差分を抽出します。

    以下のコマンドを順に実行します。

    $ cat normal_log | awk '{print $3}' | cut -d'#' -f1 | sort | uniq > normal_ids.txt

    $ cat door_unlock_log | awk '{print $3}' | cut -d'#' -f1 | sort | uniq > unlock_ids.txt

    $ diff normal_ids.txt unlock_ids.txt

    16a17

    > 19B

    この結果から、ID: 19Bがドア解錠時にのみ出現していることが分かります。

    4.3 解錠メッセージの確認

    さらに、解錠メッセージの具体的な内容を確認します。以下のコマンドを実行して、ID: 19Bに関連するメッセージを抽出します。

    $ cat door_unlock_log | awk '{print $3}' | grep 19B# | uniq

    19B#00000E000000

    このメッセージがドア解錠時に送信されるCANメッセージであることが確認できます。

    4.4 メッセージの再送

    解析したメッセージをcansendを使って再送信し、ドア解錠ができるか確認します。

    以下のコマンドを実行してください。

    $ cansend vcan0 19B#00000E000000

    シミュレータ上でドアが解錠されることを確認できれば、特定のメッセージがドア解錠を制御していることが分かります。

    4.5 シミュレータと実際の車両の違い

    このシミュレータはシンプルな仕組みであり、コントロールパネル以外からの第三者による解錠ができてしまいます。しかし、実際の車両では以下のような対策が施されており、セキュリティが強化されています。

    物理的アクセスの困難性
    ▶車両内のCANバスに直接アクセスすることは、物理的に困難です。
    ネットワークの分離
    ▶ゲートウェイによって外部ネットワークと内部ネットワークが分離されており、外部から内部のCANバスに直接アクセスすることが制限されています。
    メッセージ認証技術(SecOC)
    ▶メッセージに認証コードを付与することで、改ざんや不正な再送信を防ぐ技術が採用されています。

    まとめ

    本記事では、自動車サイバーセキュリティについて、シミュレータを用いることで、実車両を使わずにCANバス通信の仕組みやメッセージの解析を体験し、特定の操作に対応するメッセージを特定できることを確認しました。

    自動車のサイバーセキュリティを学ぶ際には、攻撃と防御の両方の観点から技術を理解することが重要です。そのための実践的なトレーニングとして、CTF(Capture The Flag)といったセキュリティコンテストは非常に有効な手段です。

    今回は、CANメッセージの基本的な解析に焦点を当てましたが、次回以降ではより具体的な課題や問題に基づいた解析と対応について解説していきます。

    関連ページ一覧

    車載(自動車)セキュリティサービス

    IoT機器セキュリティサービス

    最新のコラム記事

    LOADING...

    セキュアイノベーション サービス一覧

    ネットワーク・サーバー

    Webサイトを守る

    ヘルプデスク・サポート