このガイドでは、一般的なセキュリティ監視および分析シナリオですぐに使用できる NRQL クエリを提供します。これらの書き込みを書き込みビルダーにコピーするか、カスタムダッシュボードに追加して、インサイトの脆弱性データをより深く取得します。
基礎となるデータ構造の詳細については、 「セキュリティ データ構造リファレンス」を参照してください。
重要
これらのクエリは、実際のVulnerabilityイベントスキーマに対して記述されています。以下のスキーマの制限事項に注意してください:
Vulnerabilityイベントにはstateまたはライフサイクルフィールドがありません — クエリはOPEN/CLOSEDステータスでフィルタリングできません。resolvedAtフィールドはありません — 解決済みのタイムスタンプを必要とするMTTRおよび修復速度のクエリは、このイベントから再現できません。cvss.scoreおよびepss.percentileは文字列として保存されます。数値として比較または集計する前に、numeric()を使用してそれらをキャストしてください。ORDER BY numeric(...)はサポートされていません。SELECTでキャストにエイリアスを付け、LIMITを使用して上位の結果を取得します。HAVINGファセット集計ではサポートされていません。代わりにLIMITを使用して上位N件の結果を返します。
経営報告
深刻度別の未解決の脆弱性の総数
脆弱性の露出についての概要を取得します。
FROM VulnerabilitySELECT count(*) AS 'Total Vulnerabilities'FACET severitySINCE 7 days ago重大かつ深刻な傾向
重大な脆弱性が時間の経過とともにどのように変化するかを追跡します。
FROM VulnerabilitySELECT count(*) AS 'Critical & High Vulnerabilities'WHERE severity IN ('CRITICAL', 'HIGH')TIMESERIES AUTOSINCE 7 days agoエンティティ別の脆弱性
最も脆弱性のあるアプリケーションまたはホストを特定します。
FROM VulnerabilitySELECT count(*) AS 'Vulnerability Count'FACET entityLookupValueLIMIT 20SINCE 7 days agoポートフォリオ全体の脆弱性分布
脆弱性の拡散を理解する:
FROM VulnerabilitySELECT percentage(count(*), WHERE severity = 'CRITICAL') AS 'Critical %', percentage(count(*), WHERE severity = 'HIGH') AS 'High %', percentage(count(*), WHERE severity = 'MEDIUM') AS 'Medium %', percentage(count(*), WHERE severity = 'LOW') AS 'Low %'SINCE 7 days ago優先順位付けとリスク評価
優先度の高い脆弱性
悪用される可能性が高い脆弱性を見つける:
FROM VulnerabilitySELECT cve, package, package.version, numeric(cvss.score) AS 'cvssScore', numeric(epss.percentile) AS 'epssPercentile'WHERE numeric(epss.percentile) > 0.9SINCE 30 days agoLIMIT 20悪用可能性の高い脆弱性
既知のエクスプロイトがある脆弱性を特定します:
FROM VulnerabilitySELECT count(*) AS 'Findings', max(numeric(cvss.score)) AS 'Max CVSS'WHERE exploitKnown = 'true'FACET cve, entityLookupValue, packageSINCE 30 days agoヒント
VulnerabilityイベントにはactiveRansomwareフィールドがありません。このクエリは、高リスクの検出結果の最も近い利用可能な指標としてexploitKnownを使用します。このクエリが結果を返さない場合、確認済みの既知のエクスプロイトを持つ検出結果はまだ取り込まれていません — クエリはスキーマとして有効であり、そのような検出結果が現れるとデータを返します。
新たに検出された重大な脆弱性
新しい重要な発見を監視する:
FROM VulnerabilitySELECT cve, package, package.version, entityLookupValue, firstDetectedWHERE severity = 'CRITICAL'SINCE 30 days ago早急な対応が必要な脆弱性
複数のリスク要因を組み合わせる:
FROM VulnerabilitySELECT count(*) AS 'Findings', max(numeric(cvss.score)) AS 'Max CVSS', max(numeric(epss.percentile)) AS 'Max EPSS'WHERE (severity = 'CRITICAL' AND numeric(epss.percentile) > 0.85) OR exploitKnown = 'true' OR numeric(epss.percentile) > 0.95FACET cve, entityLookupValue, packageSINCE 30 days ago露出と修復の追跡
注意
VulnerabilityイベントにはresolvedAtフィールドやstate(OPEN/CLOSED)ライフサイクルフィールドは含まれていません。平均修復時間(MTTR)、修復速度、および重大な脆弱性のレスポンスタイムに関するクエリは、現在取り込まれているこのイベントから計算することはできません。修復メトリクスを追跡するには、課題やチケット追跡データなどの別のデータソースを使用してください。
最も長く放置されている脆弱性
長期間検出されている脆弱性を検索します:
FROM VulnerabilitySELECT min(firstDetected) AS 'First Detected', count(*) AS 'Occurrences'FACET cve, entityLookupValue, packageLIMIT 20SINCE 90 days ago年齢区分別の脆弱性
検出期間別に脆弱性をグループ化します:
FROM VulnerabilitySELECT count(*) AS 'Vulnerabilities'TIMESERIES 1 weekSINCE 180 days agoパッケージとライブラリの分析
最も脆弱なライブラリ
最も多くの脆弱性をもたらすライブラリを特定します。
FROM VulnerabilitySELECT count(*) AS 'Vulnerability Count'FACET packageLIMIT 10SINCE 7 days agoアップグレードが必要なライブラリ
利用可能な修正を含むパッケージを検索します。
FROM VulnerabilitySELECT count(*) AS 'Vulnerable Entities'WHERE remediation.exists = 'true'FACET package, package.versionLIMIT 20SINCE 7 days agoソース別の脆弱性検出
どの統合に脆弱性があるかを理解します。
FROM VulnerabilitySELECT count(*) AS 'Detections'FACET sourceSINCE 30 days agoJava依存関係分析
Java 固有の脆弱性に焦点を当てる:
FROM VulnerabilitySELECT count(*) AS 'Vulnerabilities'WHERE package LIKE '%.jar' OR package LIKE '%maven%' OR package.language = 'java'FACET package, severitySINCE 30 days agoLIMIT 20エンティティ固有のクエリ
アプリケーションの脆弱性の概要
特定のアプリケーションの脆弱性の数を取得します。
FROM VulnerabilitySELECT count(*) AS 'Total', filter(count(*), WHERE severity = 'CRITICAL') AS 'Critical', filter(count(*), WHERE severity = 'HIGH') AS 'High', filter(count(*), WHERE severity = 'MEDIUM') AS 'Medium', filter(count(*), WHERE severity = 'LOW') AS 'Low'WHERE entityLookupValue = 'YOUR_ENTITY_NAME'SINCE 7 days agoエンティティタイプ別の脆弱性の内訳
さまざまなエンティティタイプにわたる脆弱性を分析します:
FROM VulnerabilitySELECT count(*) AS 'Vulnerabilities'FACET entityLookupValue, severity, entityTypeLIMIT 20SINCE 7 days ago最近スキャンされていないエンティティ
脆弱性データを報告していない可能性のあるエンティティを特定します。
FROM VulnerabilitySELECT max(timestamp) AS 'Last Scan'FACET entityLookupValueSINCE 30 days agoLIMIT 20コンプライアンスと報告
30日以上経過した脆弱性(SLA追跡)
修復SLAを超える脆弱性を監視:
FROM VulnerabilitySELECT count(*) AS 'Overdue Vulnerabilities'FACET entityLookupValue, severitySINCE 180 days agoUNTIL 30 days agoLIMIT 20月刊脆弱性メトリクス
月次レポートを生成します:
FROM VulnerabilitySELECT count(*) AS 'Total Detected', uniqueCount(entityGuid) AS 'Affected Entities', filter(count(*), WHERE severity IN ('CRITICAL', 'HIGH')) AS 'High Risk'FACET monthOf(firstDetected)SINCE 180 days agoTIMESERIES 1 month高度な分析
脆弱性爆発半径
多くのエンティティに影響を与える脆弱性を特定します。
FROM VulnerabilitySELECT count(entityGuid) AS 'Affected Entities', max(numeric(cvss.score)) AS 'CVSS'FACET cveLIMIT 20SINCE 30 days agoセキュリティ衛生スコア
カスタム セキュリティ スコアを計算します。
FROM VulnerabilitySELECT 100 - ( filter(count(*), WHERE severity = 'CRITICAL') * 10 + filter(count(*), WHERE severity = 'HIGH') * 5 + filter(count(*), WHERE severity = 'MEDIUM') * 2 + filter(count(*), WHERE severity = 'LOW') * 0.5) AS 'Security Score'FACET entityLookupValueSINCE 7 days agoLIMIT 20脆弱性の種類別の傾向
アプリケーションとインフラストラクチャの脆弱性を比較します。
FROM VulnerabilitySELECT count(*) AS 'Vulnerabilities'FACET entityTypeTIMESERIES AUTOSINCE 30 days agoエンティティベースのセキュリティ検出結果
Entityイベントタイプを使用して、現在の状態の脆弱性データをクエリします。このアプローチは、時系列の傾向分析よりもエンティティ中心の質問に適しています:
FROM EntitySELECT count(*)WHERE type = 'SECURITY_FINDING' AND cve.id IS NOT NULLFACET cve.id, severitySINCE 7 days agoヒント
AND cve.id IS NOT NULLを追加すると、CVEがマッピングされていない設定ミスやポリシータイプの検出結果が除外されます。そうしないと、これらがファセット結果の大部分を占めることになります。このクエリは、VulnerabilityイベントタイプではなくEntityイベントタイプ(NerdGraphエンティティ検索)を使用します — イベントストリームではなく現在のエンティティの状態を反映するため、TIMESERIESの傾向分析には適していません。
これらのクエリを使用する
クエリビルダーで
- one.newrelic.com > All capabilities> Query your dataにアクセスしてください
- このページからクエリをコピーして貼り付けます
- Run [実行]をクリックして結果を確認します
- 必要に応じて時間範囲とフィルターを調整します
カスタムダッシュボード
- 新しいダッシュボードを作成するか、既存のダッシュボードを編集します
- ウィジェットを追加し、Query builder [クエリビルダー]を選択します
- クエリを貼り付けて視覚化を構成する
- ウィジェットをダッシュボードに保存する
アラートで
- Alerts > Create a conditionに進みます
- 条件タイプとしてNRQL query [NRQLを]選択します
- カウントまたは閾値を返す都度を使用します
- 一括閾値と通知チャネルを設定する
アラートの詳細については、 「脆弱性アラートの設定」を参照してください。
クエリをカスタマイズするためのヒント
プレースホルダーを置き換える
'YOUR_ENTITY_NAME'-entityLookupValue属性の実際のエンティティ名に置き換えます- 時間範囲(例:
SINCE 30 days ago) - ニーズに合わせて調整します
他のデータと組み合わせる
NRQLはクロスイベントのJOINをサポートしていません。脆弱性データをAPMまたはインフラストラクチャのメトリクスと関連付けるには、別々のクエリを使用し、ダッシュボードで結果を組み合わせます。例を以下に示します。
-- Vulnerability dataFROM VulnerabilitySELECT count(*) AS 'Vulnerabilities'FACET entityLookupValueSINCE 1 day ago-- APM transaction data (run as a separate query)FROM TransactionSELECT average(duration) AS 'Avg Response Time'FACET appNameSINCE 1 day ago結果をエクスポート
すべてのクエリ結果は次のようになります。
- CSVとしてダウンロード
- ダッシュボードに追加
- API経由でエクスポート
- チームと共有