UDS列挙の解説:ECUを安全にマッピングする方法
UDS列挙が車載ECUで何を見つけるのか、セッションとサービスがなぜ重要なのか、非破壊スキャンが何も壊さずに診断面をどうマッピングするのかを解説します。
Tom Zaubermann · 公開日 · 7 分で読めます
電子制御ユニットを守るには、まずそれが何を公開しているかを知る必要があります。UDS(Unified Diagnostic Services、ISO 14229)はほとんどのECUが診断のために話す言語であり、列挙とはUDSが提供するすべてをマッピングする作業です。どの診断セッションが存在するか、各セッションでどのサービスが応答するか、どのデータ識別子が読み取れるかを明らかにします。
なぜ列挙が最初なのか
ECUは一枚の平らなインターフェースではありません。デフォルトセッションでは沈黙しているサービスが、拡張セッションやプログラミングセッションでは応答することがあります。無害に見えるデータ識別子が、シリアル番号やキャリブレーション値、あるいは秘密情報を返すこともあります。セッションごとに表面全体を歩き切るまでは、攻撃面を推測しているにすぎません。
優れたスキャンがカバーする範囲
徹底した列挙は4つの層を順に調べます。
- エンドポイント。 ECUが応答するISO-TPアドレスのペアを、11ビットと29ビットの両方の範囲で特定します。
- セッション。 デフォルト、拡張、そして慎重にプログラミングセッション。一部のゲートウェイは抜け出せなくなるため、遷移は堅牢でなければなりません。
- サービス。 すべてのサービスIDを各セッションで探索し、分類します。サポート済み、セキュリティ上の理由で拒否、このセッションでは非サポート、または条件不一致のいずれかです。
- データ識別子。 読み取り可能なDID。識別範囲のみ、または識別子空間全体を対象にします。
非破壊であり続けること
列挙は読み取るべきであり、書き込むべきではありません。そこに何があるかを発見し、リスクのあるサービス(ECUリセット、ルーチン制御、メモリアクセス)を実行せずにフラグ付けします。それがECUを理解することとECUをかき乱すことの違いであり、列挙があらゆるファジングや書き込みテストの前に行う安全な第一歩である理由です。
AutoSTの列挙エンジンが行うのはまさにこれです。自動的に、数分で完了し、見つかったリスクのあるサービスにスコアを付けるので、次にどこを見るべきかが分かります。
FAQ
よくある質問
UDS列挙は安全ですか?
正しく行えば安全です。列挙は発見と読み取りを行うものであり、書き込みやファジングは行いません。プログラミングセッションは、一部のECUがそこから抜け出せなくなるため、慎重に扱います。
診断セッションとは何ですか?
UDSセッション(サービス0x10)は、それぞれ異なるサービスのセットを解放します。デフォルトセッションは限定的で、拡張セッションとプログラミングセッションはより多くを公開します。だからこそテストする価値があるのです。