最適な車両サイバーセキュリティのため、ファジングを用いて侵入テストを補完する方法
侵入テスト(ペンテスト)は、顧客の目的に応じてサイバーセキュリティの脆弱性やその他のセキュリティの欠陥を顕在化させ、セキュリティ要件が適切に実装されているかを検証するための一般的な手法です。
従来のペンテストが手作業によるプロセスである一方、ファジングは自動化されたプロセスです。ファジングテストでは、ターゲットを混乱させることを目的に、スクリプトを用いてさまざまな加工データを大量にインプットします。
ファザーはターゲットとなるさまざまなコンポーネント(コード、バイナリライブラリ、インターフェイス)を分析し、カスタマイズされたインプットを作成し、最適なテストカバレッジを得ることができます。優れたファジングツールを利用すると、ペンテスターには再現できない大量のインプットでシステムを過負荷の状態にし、リサーチャーが1度のリサーチでは発見できない脆弱性を発見することができます。しかし、ファジングには限界があります。ファジングテストではシステム(ECUなど)を過負荷状態にし、その反応を見ますが、ペンテストはインプットによる過負荷ではなく、既知の脆弱性またはゼロデイ脆弱性を利用して攻撃対象領域への侵入を試みます。
自動車業界の開発パイプラインは、通常、要件の収集から実装、発売まで、下記の図1のようになっています。ご覧のように、図中のテストステージには、手作業によるペンテストに加え、下記の2つのファジングテストが含まれています。
- コードファジング
- インターフェイスファジング
図1 – 自動車業界の開発パイプライン
この記事では、自動車メーカーが規制を遵守し、最適な車両サイバーセキュリティ基準を達成するために、ファジングを導入してペンテストを補完する理由について説明します。
コードファジング
コードファジングは、多くのさまざまなインプットにより特定の機能を実行するテクニックです。ファザーはサニタイザーを使用して、バッファオーバーフロー、メモリリーク、およびその他の潜在的な問題を検出します。コードファザーは、ソフトウェアのコードブロックすべてに(パフォーマンス測定のための)インストルメンテーションを配置して、ファジングにより得られたカバレッジを確認したり、さまざまなソフトウェアフローがカバーされるようインプットを変化させたりします。
オープンソースファザーには、一般的なAFL、libfuzzer、SymCC、Qsymなどがあります。自分のプロジェクトとソースコードファザーを統合する手法は、開発者がモジュールを開発または変更する際にファジングラッパーを維持しなければならないという点で、ユニットテストの実施と非常に似ています。プロジェクトの初期からファジングを実施することで、その後のメンテナンスを容易かつ円滑に行えるようになります。
インターフェイスファジング
その名が示すように、インターフェイスファジングでは、システムの特定のインターフェイスをテストします。ツールはプロトコルアウェアで(さまざまなプロトコルの、さまざまなレベルにおいて)、関連するカスタマイズされたインプットを用いてそれぞれのコンポーネントインターフェイスをテストすることが可能です。インターフェイスファジングが、ECUのコンパイル可能な環境と統合されると、ファジングによって得られたカバレッジを追跡することができます。
ステートフルプロトコルのインターフェイスファジング
ステートフルプロトコルはTCP、HTTPといったセッション情報を保持するプロトコルであり、IPはステートレスプロトコルです。それぞれのリクエストメッセージは個別に理解されます。ステートフルプロトコルはファザーの効率性に影響をおよぼします。ハンドシェイクで始まる標準的なプロトコル(TCPなど)を思い描いてみてください。最初のハンドシェイクを成功させることができないファザーは、多くのコードフローの可能性を見逃してしまうことになります。
インターフェイスファザーはブラックボックス手法であり、高い効率性やカバレッジを得るには、開発者やリサーチャーによる設定や指示が必要です。
プラクシディティ エックスのインターフェイスファジングは、さまざまなネットワークスキーム(ARXML, DBC)を分析し、そのスキームに基づいたさまざまな攻撃をシミュレートすることが可能です。また、当社のツールは以下のインターフェイスやプロトコルに対応しています
- イーサネット標準プロトコル、SOME/IP, DoIP, HSFZ, AVB
- CAN ISO-TP, CAN-FD, UDS (LINおよびFlexRay上でも対応)
コードファジングおよびインターフェイスファジングは、次のテスト段階であるペンテストとは異なり、CI環境に統合することができます。
侵入テスト(ペンテスト)
自動化テストやファジングは、バグや脆弱性の検出を効率良く行うことのできる革新的な手法ですが、こうした自動化テストは、システムが悪用されないことを確認するための手作業によるペンテストに置き換えられるものではありません。自動的にECU攻撃対象領域をマッピングし、すべてのサーフェースコードのフローをリバースエンジニアリングし、プリミティブを見つけてそれらを統合し、サイバー攻撃のリサーチオペレーション全体を管理できる方法は未だにありません。
システムの持つセキュリティ手法(セキュアブートやソフトウェアハードニングなど)の完全性を検証するには、経験豊富なリサーチャーによる作業が必要です。このため、開発サイクルの最後の方で、ECUに対してサイバーセキュリティリサーチャーの手作業によるペンテストを実施する必要があるのです。当社では、UNR 155 (WP.29)を遵守し車両サイバーセキュリティを最適化するために、ファジングとペンテストの両方を実施することを推奨しています。
Ohad Peled
PlaxidityX、エンベデッドセキュリティリサーチ・チームリーダー
ブログ編集者より:ファジングまたはペンテストに関するリクエスト、お問合せは、ページ上の「お問合せ」リンクよりご連絡お願いします。