Target Intelligence

レスポンススキーマ

target-intel レコードで返されるすべてのフィールド。fingerprints 配列や、confirmed および deprecated フラグの読み方を含みます。

target-intel レスポンスの各結果は、観測された単一のホスト・ポート・サービスの組を表します。結果は data 配下の JSON 配列として返されます。レスポンスの完全な例については、レコードの例 を参照してください。

トップレベルフィールド

フィールド型常に存在説明
ipstringはい観測されたホストの IPv4 アドレス
hostnamestringはいスキャン時の DNS ルックアップから取得されたホスト名(空の場合あり)
portintegerはいサービスが観測されたポート
timestampstringはい観測が行われた時刻の ISO 8601 タイムスタンプ
date_addedstringはいレコードがインデックスに追加された時刻の ISO 8601 タイムスタンプ。date クエリパラメータがフィルタリングに使用するフィールドです
protocolstringはいポート上で観測されたアプリケーションプロトコル(例:http、ssh、modbus)
transportstringはいトランスポートプロトコル:tcp または udp
cpearrayはいフィンガープリンティングによって導出された CPE 文字列。非推奨のエイリアスは除外されます
cvearray|null条件付きこのホストのフィンガープリントに関連付けられた CVE ID。CVE の一致がない場合は null
cve_confirmedarray条件付き上記の CVE ごとの確度。各要素は {cve_id, confirmed}。confirmed パラメータがフィルタリングに使用するフィールドです
vendorarrayはいフィンガープリンティングによって導出されたベンダー名
productarrayはいフィンガープリンティングによって導出された製品名
versionarrayはいフィンガープリンティングによって導出されたバージョン文字列。CPE のワイルドカード/不明なバージョンは除外されます
fingerprintsarrayはいフィンガープリントごとの詳細オブジェクト(下記を参照)
contains_cvebooleanはいフィンガープリントされたサービスに CVE が関連付けられている場合は true
summaryobjectはい上記の CVE/フィンガープリントデータを事前に集計したもの(下記を参照)
asnstring条件付き自律システム番号(例:AS64500)。利用できない場合は省略
as_namestring条件付き自律システム名。利用できない場合は省略
as_domainstring条件付き自律システムのドメイン。返されますが、検索対象ではありません
countrystring条件付き国名。利用できない場合は省略
country_codestring条件付きISO 3166-1 alpha-2 国コード。利用できない場合は省略
classificationsarray条件付きこのホストに付与された分類タグ(type:value 形式の文字列)。該当するものがない場合は省略。エンリッチメントデータ を参照してください
metadataobject条件付きプロトコル固有のサービスメタデータ。構造は protocol によって異なります。エンリッチメントデータ を参照してください

cpe、vendor、product、version 配列は、レコード上のすべてのフィンガープリントをフラットに集約したものです。複数のフィンガープリントを持つホストでは、これらを配列の位置で対応付けて読むことはできません。product のインデックス 0 が version のインデックス 0 と対応するとは限りません。対応関係が重要な場合は、必ず fingerprints を使用してください。

fingerprints 配列

各要素は、ホスト・ポートに対する単一のフィンガープリント一致を表します。

フィールド型説明
cpestringこのフィンガープリントの CPE 文字列
vendorstringベンダー名
productstring製品名
versionstring製品バージョン
deprecatedbooleanこのエントリがフィンガープリントのプライマリ CPE ではなく、NVD で非推奨となった CPE エイリアスである場合は true。非推奨の CPE エイリアス を参照してください
cvesarrayこのフィンガープリントの CPE に帰属する CVE。各要素は {cve_id, confirmed}。このフィンガープリントに CVE の一致がない場合は省略

summary オブジェクト

レコード上の CVE/フィンガープリントデータを事前に集計したものです。配列の長さを自分で数える必要はありません。

フィールド型説明
cve_countintegerすべてのフィンガープリントにわたって一致した、重複を除く CVE の総数
confirmed_countintegerそれらの CVE のうち、高確度(ルール作成済みまたはバージョン完全一致)の一致である CVE の数
fingerprint_countintegerfingerprints 配列内のフィンガープリントの数
contains_cvebooleanホストに CVE が 1 件以上関連付けられている場合は true。トップレベルの contains_cve フィールドと同じ値です

CVE がホストに関連付けられる仕組み

ホストの CVE は 2 つの独立したソースから得られ、それぞれ個別に算出された後、CPE ごとに統合されます。

ルールによる一致。 一致した証拠そのものが特定の脆弱性の証明となる場合、スキャンルールは CVE を直接付与できます。これらは 常に confirmed: true です。ルール作成者が一致結果から CVE をアサートしているため、バージョンインデックスの照合は行われません。

CPE インデックスによる一致。 フィンガープリントされた CPE(ベンダー/製品/バージョン)は、VulnCheck の CVE-to-CPE インデックスで照合されます。このインデックスは、NVD で列挙された (cpe, cve) の完全一致ペアと、観測されたフィンガープリントのバージョンに対して事前に解決されたバージョン範囲のエントリから構築されています。バージョンがワイルドカードまたは不明(-、*、または空)の CPE は、誤った CVE ヒットを生むため、ここでは一致しません。

両方のソースが同じ (cpe, cve_id) ペアに対して異なる判定を出した場合は、confirmed が優先されます。ルールによって直接アサートされた CVE は、インデックス経路でバックポートの可能性があるとフラグ付けされた場合でも confirmed: true のままです。

confirmed フラグ

confirmed は、特定の種類の誤検知である ディストリビューションのバックポート に対処するためのものです。Linux ディストリビューションは、アップストリームのバージョン文字列を上げずに CVE の修正をパッケージにバックポートすることがあります。そのため、生のバージョン文字列が脆弱に見えても、そのホストに対するバージョンベースの CVE 一致が誤っている場合があります。

CVE の一致候補ごとに、次のように判定されます。

  • ベンダー/製品がどのディストリビューションのパッケージインデックスでも追跡されていない場合(構造的にバックポートが起こりえない場合)、または 観測されたバージョン文字列そのものがディストリビューションによって脆弱であると確認されたバージョンである場合は、confirmed: true。
  • それ以外の場合は confirmed: false。このベンダー/製品がディストリビューションでパッケージ化されている証拠はあるものの、このバージョン文字列がディストリビューションによって脆弱であると確認されていない状態です。バックポートによる誤検知の可能性があります。

2 つの具体例:

CPECVEconfirmed理由
cpe:2.3:a:openresty:openresty:1.21.4.1:*:*:*:*:*:*:*CVE-2023-44487trueバージョン完全一致のインデックス照合であり、openresty はディストリビューションでパッケージ化されていないため、バックポートは起こりえない
cpe:2.3:a:php:php:5.6.40:*:*:*:*:*:*:*CVE-2007-3205falsephp はディストリビューションでパッケージ化されて いる が、5.6.40 はこの CVE についてディストリビューションが脆弱と確認したバージョン文字列ではない

confirmed: false は「誤り」ではなく、「このバージョン文字列に対しては未確認」と読んでください。この CVE はそのアップストリームバージョンに実際に影響します。証明されていないのは、この特定のホストのパッケージに修正が含まれているかどうかです。

このフラグでフィルタリングするには、confirmed クエリパラメータを使用します。confirmed=true は高確度の一致を 1 件以上持つホストを返し、confirmed=false は一致がすべて未確認のホストを返します。

非推奨の CPE エイリアス

NVD では、同じ製品が複数の CPE 名でインデックスされ、古い名前が非推奨になることがあります。スキャンルールはそれらの古い名前をエイリアスとして宣言でき、CVE の照合でもそれらをカバーできます。古い NVD エントリは非推奨の名前でしか存在しない場合があるためです。

各エイリアスは fingerprints 内に deprecated: true を持つ 独立したエントリ として現れ、そのエイリアスに対して一致した CVE のみを保持します。エイリアスの CVE がプライマリ CPE の cves リストに統合されることはなく、非推奨の CPE はトップレベルの cpe 配列から除外されます。

たとえば、IIS 10.0 を実行しているホストには、プライマリのフィンガープリント microsoft:internet_information_services:10.0 に加えて、microsoft:internet_information_server:10.0 と microsoft:iis:10.0 の非推奨エイリアスのエントリがあります。CVE インデックスにエントリが存在するのは非推奨の internet_information_server という名前のみであるため、このホストでは CVE-1999-0229 などの CVE を保持しているのはプライマリではなくエイリアスのエントリです。

これはトリアージの際に最初に確認すべき点です。 予期しない CVE、特に年が製品バージョンよりも大幅に古い CVE がホストに表示される場合は、それが deprecated: true のフィンガープリントエントリに付与されていないかを確認してください。その CVE は、プライマリ CPE が一致したためではなく、非推奨エイリアスによる照合範囲の拡大によって検出されたものです。

CPE を伴わないルール一致

スキャンルールの中には、CPE をまったく抽出せずに CVE をアサートするものがあります。これは、バージョン付きの製品を特定することなく、特定の脆弱なデバイスやファームウェアであることを証明するシグネチャです。このような CVE もレコードの cve および cve_confirmed 配列に現れますが、ネストされる名前付きの fingerprints エントリはありません。

CVE-2021-36260 はその代表的な例です。このルールは脆弱なカメラのファームウェアに直接一致するため、影響を受けるホストは対応する製品 CPE を持たないまま CVE を保持します。cve に含まれる CVE がどの fingerprints[].cves にも見つからない場合は、これが理由です。