target-intel レスポンスの各結果は、観測された単一のホスト・ポート・サービスの組を表します。結果は data 配下の JSON 配列として返されます。レスポンスの完全な例については、レコードの例 を参照してください。
| フィールド | 型 | 常に存在 | 説明 |
|---|---|---|---|
ip | string | はい | 観測されたホストの IPv4 アドレス |
hostname | string | はい | スキャン時の DNS ルックアップから取得されたホスト名(空の場合あり) |
port | integer | はい | サービスが観測されたポート |
timestamp | string | はい | 観測が行われた時刻の ISO 8601 タイムスタンプ |
date_added | string | はい | レコードがインデックスに追加された時刻の ISO 8601 タイムスタンプ。date クエリパラメータがフィルタリングに使用するフィールドです |
protocol | string | はい | ポート上で観測されたアプリケーションプロトコル(例:http、ssh、modbus) |
transport | string | はい | トランスポートプロトコル:tcp または udp |
cpe | array | はい | フィンガープリンティングによって導出された CPE 文字列。非推奨のエイリアスは除外されます |
cve | array|null | 条件付き | このホストのフィンガープリントに関連付けられた CVE ID。CVE の一致がない場合は null |
cve_confirmed | array | 条件付き | 上記の CVE ごとの確度。各要素は {cve_id, confirmed}。confirmed パラメータがフィルタリングに使用するフィールドです |
vendor | array | はい | フィンガープリンティングによって導出されたベンダー名 |
product | array | はい | フィンガープリンティングによって導出された製品名 |
version | array | はい | フィンガープリンティングによって導出されたバージョン文字列。CPE のワイルドカード/不明なバージョンは除外されます |
fingerprints | array | はい | フィンガープリントごとの詳細オブジェクト(下記を参照) |
contains_cve | boolean | はい | フィンガープリントされたサービスに CVE が関連付けられている場合は true |
summary | object | はい | 上記の CVE/フィンガープリントデータを事前に集計したもの(下記を参照) |
asn | string | 条件付き | 自律システム番号(例:AS64500)。利用できない場合は省略 |
as_name | string | 条件付き | 自律システム名。利用できない場合は省略 |
as_domain | string | 条件付き | 自律システムのドメイン。返されますが、検索対象ではありません |
country | string | 条件付き | 国名。利用できない場合は省略 |
country_code | string | 条件付き | ISO 3166-1 alpha-2 国コード。利用できない場合は省略 |
classifications | array | 条件付き | このホストに付与された分類タグ(type:value 形式の文字列)。該当するものがない場合は省略。エンリッチメントデータ を参照してください |
metadata | object | 条件付き | プロトコル固有のサービスメタデータ。構造は protocol によって異なります。エンリッチメントデータ を参照してください |
cpe、vendor、product、version 配列は、レコード上のすべてのフィンガープリントをフラットに集約したものです。複数のフィンガープリントを持つホストでは、これらを配列の位置で対応付けて読むことはできません。product のインデックス 0 が version のインデックス 0 と対応するとは限りません。対応関係が重要な場合は、必ず fingerprints を使用してください。
fingerprints 配列各要素は、ホスト・ポートに対する単一のフィンガープリント一致を表します。
| フィールド | 型 | 説明 |
|---|---|---|
cpe | string | このフィンガープリントの CPE 文字列 |
vendor | string | ベンダー名 |
product | string | 製品名 |
version | string | 製品バージョン |
deprecated | boolean | このエントリがフィンガープリントのプライマリ CPE ではなく、NVD で非推奨となった CPE エイリアスである場合は true。非推奨の CPE エイリアス を参照してください |
cves | array | このフィンガープリントの CPE に帰属する CVE。各要素は {cve_id, confirmed}。このフィンガープリントに CVE の一致がない場合は省略 |
summary オブジェクトレコード上の CVE/フィンガープリントデータを事前に集計したものです。配列の長さを自分で数える必要はありません。
| フィールド | 型 | 説明 |
|---|---|---|
cve_count | integer | すべてのフィンガープリントにわたって一致した、重複を除く CVE の総数 |
confirmed_count | integer | それらの CVE のうち、高確度(ルール作成済みまたはバージョン完全一致)の一致である CVE の数 |
fingerprint_count | integer | fingerprints 配列内のフィンガープリントの数 |
contains_cve | boolean | ホストに CVE が 1 件以上関連付けられている場合は true。トップレベルの contains_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 つの具体例:
| CPE | CVE | confirmed | 理由 |
|---|---|---|---|
cpe:2.3:a:openresty:openresty:1.21.4.1:*:*:*:*:*:*:* | CVE-2023-44487 | true | バージョン完全一致のインデックス照合であり、openresty はディストリビューションでパッケージ化されていないため、バックポートは起こりえない |
cpe:2.3:a:php:php:5.6.40:*:*:*:*:*:*:* | CVE-2007-3205 | false | php はディストリビューションでパッケージ化されて いる が、5.6.40 はこの CVE についてディストリビューションが脆弱と確認したバージョン文字列ではない |
confirmed: false は「誤り」ではなく、「このバージョン文字列に対しては未確認」と読んでください。この CVE はそのアップストリームバージョンに実際に影響します。証明されていないのは、この特定のホストのパッケージに修正が含まれているかどうかです。
このフラグでフィルタリングするには、confirmed クエリパラメータを使用します。confirmed=true は高確度の一致を 1 件以上持つホストを返し、confirmed=false は一致がすべて未確認のホストを返します。
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 をまったく抽出せずに CVE をアサートするものがあります。これは、バージョン付きの製品を特定することなく、特定の脆弱なデバイスやファームウェアであることを証明するシグネチャです。このような CVE もレコードの cve および cve_confirmed 配列に現れますが、ネストされる名前付きの fingerprints エントリはありません。
CVE-2021-36260 はその代表的な例です。このルールは脆弱なカメラのファームウェアに直接一致するため、影響を受けるホストは対応する製品 CPE を持たないまま CVE を保持します。cve に含まれる CVE がどの fingerprints[].cves にも見つからない場合は、これが理由です。