車載イーサネットカメラに対するハッキング

車載イーサネットカメラに対するハッキング

グーグルで「自動運転車 車載カメラ」という言葉を検索すると、自動運転車の未来について、またカメラや他のセンサーがおよぼす大きな影響について論じている約350万件もの記事を目にするでしょう。自動運転車は、内蔵されたレーダーおよびLiDARシステムを使用する高度運転支援システム (ADAS)によって、他の車両、歩行者、信号、潜在的な危険などを含む周囲の世界を「見て感知する」ことで、自動走行が可能となります。

このテクノロジーによって、非常に素晴らしいことが実現するわけですが、技術的な欠陥やセキュリティ侵害があった場合、どういったことが起こるのでしょう?誤作動を起こしたUberの自動運転車により歩行者が死亡する事故が2018年に起きましたが、これは憂慮すべき問題です。ウェブにすべてが接続された世界で、悪意のあるハッカーがADASシステムにアクセスし、自動車が見て感知しているものを操作したら、どういった事態が起きるのでしょう?当社ではこの問いに答えるため、車載用グレードのイーサネットカメラでPoC(概念実証)を行い、カメラをハッキングするにはどれだけの労力が必要なのか、そしてハッキングによってどの程度のダメージが引き起こされるかを調査することにしました。

設定

リサーチでは、スタンドアロンの車載グレードイーサネットカメラ(法的な理由で、ブランド名を開示することはできません)を使用しました。このカメラは現在量産されているもので、リアビューカメラとしてOEMに採用されています。このカメラは私たちがコンバーターを使用してコンピューターへ接続したBroadR-Reachイーサネットインターフェイスを備えています。カメラはADAS ECU (クライアント)に相当するバーチャルマシン(VM)にライブビデオフィードをストリーミングする一方、同じネットワーク上にある2つめのVMは侵害されたECUをシミュレートしました。ホストマシンはこれらのVMとカメラを同じネットワークにつなぐスイッチとして使用されました。この設定は下の図1と2に示されています。


図1:ネットワーク設定:ハッカーは侵害されたECUを用いてサイドから悪意のあるデータを注入する。


図2:物理的設定:電力ケーブルとBroadR-Reachケーブルに分岐するケーブルにカメラは接続している。電力ケーブルは外部電源に、BroadR-Reachケーブルはコンピューターにつなぐためコンバーターに接続されている。

車載カメラの仕組みを理解する

最初のステップでは、コンピュータシステムを攻撃しようとする場合と同様、車載イーサネットカメラの仕組みを理解することから始めました。まずカメラがネットワークとどのように通信するかを確認しようとしたところ、2つのオープンUDPポートがあるのを発見しました。

ポートの1つはDHCPの実装に使用されており、電源に接続すると、カメラはUDPブロードキャストパケットを送信しIPアドレスを受信しました。DHCP「サーバー」がADAS ECUに実装されており、応答データの中でIPアドレスを送信することによってそのリクエストに応答しました。2つ目のポートはコマンドとコントロール(C&C)に使用され、ADAS ECUは、例えばビデオストリーミングの開始コマンドや停止コマンドを送信することでカメラと通信していました。

カメラのコマンドを理解し再現できるようになった後、ビデオストリーミングの中で送信されている実際のデータの調査に移行しました。ほとんどのイーサネットカメラではTSN(Time-Sensitive Networking)はビデオの転送にAVB プロトコルを用いています。このプロトコルは、ヘッダーおよびデータペイロードの2つの部分から構成されています。ヘッダーの長さは、ペイロードによって異なります。ペイロードは事前定義されたさまざまなオーディオまたはビデオ形式にすることができます。このカメラでは24バイトのヘッダー、 JFIF (JPEG File Interchange Format:JPEGファイル交換形式)のペイロードが使用されていました。


図3:Wiresharkパケットキャプチャ

上の図3はカメラのライブストリーミングからのWiresharkパケットキャプチャを示しています。パケットの最初の14バイトは通常のイーサネットフレームで、それにパケットデータが続きます(青で強調表示)。データは24バイトのヘッダーを備え、実際のペイロードはスタートマーカ(SOI)から始まり、白で強調表示されています。「JFIF」インディケータはオレンジ色で表示されています(この文字列はJFIF基準に従ったヌル終端なので00バイトを含みます)。

つまり、カメラは十分な速さで継続的に静止画像を送信することで、ライブビデオストリーミングに見えるものを作り出しているのです。画像データは MTU (maximum transmission unit:最大転送ユニット)より大きいため、すべての画像はパケットに分割され、クライアントが再構成します。

ADAS ECUに対する攻撃

今までのところで、カメラがどのようにネットワークと接続し通信するのかを説明しました。さて、いよいよお楽しみの始まりです!このカメラはJFIF形式を用いているので、デフォルトでビデオストリーミングの画像送信を簡単に阻害する方法があります。JFIF規格は2バイトをSOIに2バイトをエンドマーカ(EOI)に含めることで機能します。これらは常にそれぞれ0xFFD8と0xFFD9でなければなりません。私たちは、Pythonのscapyライブラリを使って、ストリームを受信しているクライアントに1 万分の 1 秒ごとにEOIバイトを挿入する単純な関数を作成しました。その結果は図4に表示されています。

図4:1 万分の 1 秒ごとにEOIを挿入した結果

ビデオは、EOI関数によりカメラのライブストリーミングが完全に使い物にならない状態になったことを示しています。これはパケットが送信される前にカメラからクライアントに僅かなバイト数のデータしか転送されず、残りの画像データがドロップするためです。

次に、もう少し複雑なことを試みることにし、ビデオストリーミングを事前に録画したビデオに変更しました。まず、Wiresharkを使用してカメラからクライアントに送信されたパケットのビデオストリーミングを録画しました。もちろん、単純に、カメラのライブストリーミング中に録画した動画をクライアントに挿入すれば、データがお互いに干渉し合うため、機能しません(これも、先程のEOI攻撃と同様、カメラを使えなくする方法として使用できます)。

代わりに、カメラのC&Cポートから、「ビデオストリーミングの開始」と「ビデオストリーミングの停止」コマンドを再現する方法を見つけました。再度scapyを使用し、カメラにストリーミングを停止するよう指示するコマンドを送り、一方で録画ビデオストリームを干渉なしに挿入することに成功しました。

図5:カメラに「ストリーミングの停止」を指示した後、ビデオストリーミングを挿入した結果

図5のビデオ開始の4秒後に攻撃を開始し、「ライブ」フィードを録画ビデオに置き換えました。攻撃が終わった後、ライブフィードを開始するために「ビデオストリーミングの開始」コマンドをカメラに送信しましたが、簡単に動画の差し替え、偽動画のループ再生、動画のリアルタイム配信復旧を阻止できました。

結論

このリサーチでは、2つのセキュリティの欠陥が実証されました。

  1. ビデオストリームがクライアントによって適切に認証されておらず、カメラのMACアドレスと合致するソースMACアドレスを持つすべてのパケットを受け入れていました。最低でも、クライアントはAVBヘッダーで用いられているタイムスタンプの確認を行うべきですが、この機能は適切に実装されておらず、その結果悪意のあるトラフィックを簡単に挿入することができるようになっていました。この問題はパケットの認証、またはストリームの暗号化で修正できるのではないかと思われます。しかし、これはどちらの手法もパフォーマンスに著しい影響を及ぼす恐れがあり、ビデオデータを適切に表示するには、画像処理スピードを向上する必要があることから、難しいと思われます。
  2. カメラのC&Cプロトコルにはいかなる形式のセキュリティも装備されておらず、送信者が誰であるかに関わらず指定ポートで受け取ったコマンドをすべて受け入れていました(クライアントからのパケットであるよう見せかける偽装さえ必要ありませんでした)。時間的な制約を強く受けるAVBパケットとは対照的に、C&Cプロトコルではストリーミングを保護するために必要なオーバーヘッドを費やす余裕があります。カメラはパケットのソースMACアドレスとIPアドレスを検証すべきで、実際の通信が始まる前にハンドシェイクプロトコルを可能にするTCP接続を実装すべきです。UDPではなくTCPを使用すると、暗号化による保護機能をさらに高めることができ、その結果攻撃者はハンドシェイクを再現することが難しくなります。

このリサーチはある一台のイーサネットカメラを対象に実施しましたが、当たり前のこととして、他のカメラは異なる装備、動作、セキュリティメカニズムを備えています。このリサーチの動機として、危険なハッキングがADASコンポーネントに対して行われる可能性を証明する意図があります。今回は特にカメラシステムに焦点を当てましたが、こうしたコンセプトはRADARやLiDARといった他のシステムにも応用可能です。現在は、ドライバーが自ら周囲を認識し、車載カメラはドライバーをサポートする役割であるため、車載カメラに対する攻撃があっても必ずしも人命が脅かされることにつながっていないかもしれません。しかし、今後は自動車がカメラや他のセンサーに大きく依存して周囲の状況を認識する方向に進んでいくのであり、こうしたサイバー攻撃は悲惨な結果をもたらす可能性があると言えます。

アルガスサイバーセキュリティ、リサーチャー、Daniel Rezvani
日付:2018年11月12日