Ce guide fournit des requêtes NRQL prêtes à l'emploi pour les scénarios courants monitoring et d'analyse de la sécurité. Copiez ces requêtes dans le générateur de requêtes ou ajoutez-les aux dashboards personnalisés pour obtenir des informations plus détaillées sur vos données de vulnérabilités.
Pour plus d'informations sur la structure de données sous-jacente, consultez la référence de la structure de données de sécurité.
Important
Ces requêtes sont écrites par rapport au schéma d'événement Vulnerability réel. Notez les limitations de schéma suivantes :
- L'événement
Vulnerabilityn'a pas de champstateou de cycle de vie — les requêtes ne peuvent pas filtrer par statut OPEN/CLOSED. - Il n'y a pas de champ
resolvedAt— les requêtes de MTTR et de vitesse de remédiation qui nécessitent un horodatage résolu ne peuvent pas être reproduites à partir de cet événement. cvss.scoreetepss.percentilesont stockés sous forme de chaînes de caractères. Utiliseznumeric()pour les convertir avant de les comparer ou de les agréger numériquement.ORDER BY numeric(...)n'est pas pris en charge. Créez un alias pour la conversion dansSELECTet utilisezLIMITpour récupérer les meilleurs résultats.HAVINGsur les agrégats à facettes n'est pas pris en charge. Utilisez plutôtLIMITpour renvoyer les N premiers résultats.
Rapports exécutifs
Nombre total de vulnérabilités ouvertes par niveau de gravité
Obtenez une vue d'ensemble de votre exposition aux vulnérabilités :
FROM VulnerabilitySELECT count(*) AS 'Total Vulnerabilities'FACET severitySINCE 7 days agoTendances critiques et de haute gravité
Suivre l'évolution des vulnérabilités critiques au fil du temps :
FROM VulnerabilitySELECT count(*) AS 'Critical & High Vulnerabilities'WHERE severity IN ('CRITICAL', 'HIGH')TIMESERIES AUTOSINCE 7 days agovulnérabilités par entité
Identifiez les applications ou les hôtes présentant le plus de vulnérabilités :
FROM VulnerabilitySELECT count(*) AS 'Vulnerability Count'FACET entityLookupValueLIMIT 20SINCE 7 days agoRépartition des vulnérabilités au sein du portefeuille
Comprendre la propagation des vulnérabilités :
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 agoPriorisation et évaluation des risques
Vulnérabilités hautement prioritaires
Identifier les vulnérabilités présentant une forte probabilité d'exploitation :
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 20Vulnérabilités à forte exploitabilité
Identifier les vulnérabilités avec un exploit connu :
FROM VulnerabilitySELECT count(*) AS 'Findings', max(numeric(cvss.score)) AS 'Max CVSS'WHERE exploitKnown = 'true'FACET cve, entityLookupValue, packageSINCE 30 days agoConseil
L'événement Vulnerability n'a pas de champ activeRansomware. Cette requête utilise exploitKnown comme l'indicateur disponible le plus proche pour les résultats à haut risque. Si cette requête ne renvoie aucun résultat, aucun résultat avec un exploit connu confirmé n'a encore été ingéré — la requête est valide au niveau du schéma et renverra des données une fois que de tels résultats apparaîtront.
Nouvelles vulnérabilités critiques détectées
observateur des nouvelles découvertes critiques :
FROM VulnerabilitySELECT cve, package, package.version, entityLookupValue, firstDetectedWHERE severity = 'CRITICAL'SINCE 30 days agovulnérabilités nécessitant une attention immédiate
Combiner plusieurs facteurs de risque :
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 agoSuivi de l'exposition et des mesures correctives
Prudence
L'événement Vulnerability n'inclut pas de champ resolvedAt ni de champ de cycle de vie state (OPEN/CLOSED). Les requêtes pour le délai moyen de remédiation (MTTR), la vitesse de remédiation et le temps de réponse aux vulnérabilités critiques ne peuvent pas être calculées à partir de cet événement tel qu'il est actuellement ingéré. Pour suivre les métriques de remédiation, utilisez une source de données distincte telle que des données de suivi des problèmes ou des tickets.
Les vulnérabilités ouvertes les plus anciennes
Trouvez les vulnérabilités qui ont été détectées pendant des périodes prolongées :
FROM VulnerabilitySELECT min(firstDetected) AS 'First Detected', count(*) AS 'Occurrences'FACET cve, entityLookupValue, packageLIMIT 20SINCE 90 days agovulnérabilités par tranche d'âge
Regroupez les vulnérabilités par période de détection :
FROM VulnerabilitySELECT count(*) AS 'Vulnerabilities'TIMESERIES 1 weekSINCE 180 days agoanalyse de packages et de bibliothèques
Bibliothèque la plus vulnérable
Identifier la bibliothèque présentant le plus de vulnérabilités :
FROM VulnerabilitySELECT count(*) AS 'Vulnerability Count'FACET packageLIMIT 10SINCE 7 days agobibliothèque nécessitant des mises à niveau
Trouver le package contenant les correctifs disponibles :
FROM VulnerabilitySELECT count(*) AS 'Vulnerable Entities'WHERE remediation.exists = 'true'FACET package, package.versionLIMIT 20SINCE 7 days agoDétection des vulnérabilités par source
Comprendre quelles intégrations trouvent des vulnérabilités :
FROM VulnerabilitySELECT count(*) AS 'Detections'FACET sourceSINCE 30 days agoanalyse des dépendances Java
Concentrez-vous sur les vulnérabilités spécifiques à Java :
FROM VulnerabilitySELECT count(*) AS 'Vulnerabilities'WHERE package LIKE '%.jar' OR package LIKE '%maven%' OR package.language = 'java'FACET package, severitySINCE 30 days agoLIMIT 20requête spécifique à l'entité
Résumé des vulnérabilités de l'application
Obtenir le nombre de vulnérabilités pour une application spécifique :
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 agoRépartition des vulnérabilités par type d'entité
Analysez les vulnérabilités sur différents types d'entités :
FROM VulnerabilitySELECT count(*) AS 'Vulnerabilities'FACET entityLookupValue, severity, entityTypeLIMIT 20SINCE 7 days agoentité sans scans récents
Identifiez les entités qui pourraient ne pas déclarer de données de vulnérabilité :
FROM VulnerabilitySELECT max(timestamp) AS 'Last Scan'FACET entityLookupValueSINCE 30 days agoLIMIT 20Conformité et rapports
vulnérabilités datant de plus de 30 jours (suivi SLA)
vulnérabilités du moniteur dépassant votre SLA de remédiation :
FROM VulnerabilitySELECT count(*) AS 'Overdue Vulnerabilities'FACET entityLookupValue, severitySINCE 180 days agoUNTIL 30 days agoLIMIT 20Vulnérabilités métriques mensuelles
Générer des rapports mensuels :
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 monthAnalyse avancée
vulnérabilités rayon d'explosion
Identifier les vulnérabilités affectant de nombreuses entités :
FROM VulnerabilitySELECT count(entityGuid) AS 'Affected Entities', max(numeric(cvss.score)) AS 'CVSS'FACET cveLIMIT 20SINCE 30 days agoscore d'hygiène de sécurité
Calculer un score de sécurité personnalisé :
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 20tendances des vulnérabilités par type
Comparer les vulnérabilités des applications et de l'infrastructure :
FROM VulnerabilitySELECT count(*) AS 'Vulnerabilities'FACET entityTypeTIMESERIES AUTOSINCE 30 days agoRésultats de sécurité basés sur l'entité
Interrogez les données de vulnérabilités de l'état actuel à l'aide du type d'événement Entity. Cette approche est mieux adaptée aux questions centrées sur l'entité qu'aux tendances de séries chronologiques :
FROM EntitySELECT count(*)WHERE type = 'SECURITY_FINDING' AND cve.id IS NOT NULLFACET cve.id, severitySINCE 7 days agoConseil
L'ajout de AND cve.id IS NOT NULL filtre les résultats de type mauvaise configuration et politique qui n'ont pas de CVE mappée, qui domineraient autrement les résultats de la facette. Cette requête utilise le type d'événement Entity (recherche d'entité NerdGraph) plutôt que le type d'événement Vulnerability — elle reflète l'état actuel de l'entité plutôt qu'un flux d'événements, elle n'est donc pas adaptée aux tendances TIMESERIES.
En utilisant ces requêtes
Dans le générateur de requêtes
- Rendez-vous sur one.newrelic.com > All capabilities > Query your data
- Copiez et collez n'importe quelle requête depuis cette page.
- Cliquez sur Run pour afficher les résultats
- Ajustez les plages horaires et les filtres selon les besoins.
Dans les dashboards personnalisés
- Créez un nouveau dashboard ou modifiez-en un existant.
- Ajoutez un widget et sélectionnez Query builder
- Collez la requête et configurez la visualisation.
- Enregistrez le widget sur votre dashboard
Dans les alertes
- Accédez à Alerts > Create a condition
- Sélectionnez NRQL query comme type de condition
- Utiliser une requête qui renvoie des comptes ou un seuil
- Configurer le seuil d'alerte et le canal de notification
Pour plus d'informations sur les alertes, consultez la section Configurer les alertes de vulnérabilités.
Conseils pour personnaliser les requêtes
Remplacer l'espace réservé
'YOUR_ENTITY_NAME'- Remplacez par le nom réel de votre entité à partir de l'attributentityLookupValue- Plages horaires (ex. :
SINCE 30 days ago) - À adapter selon vos besoins
Combiner avec d'autres données
NRQL ne prend pas en charge les JOIN inter-événements. Pour corréler les données de vulnérabilités avec les métriques APM ou d’infrastructure, utilisez des requêtes distinctes et combinez les résultats dans un dashboard. Par exemple :
-- 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 agoExporter les résultats
Tous les résultats de la requête peuvent être :
- Téléchargé au format CSV
- Ajouté aux dashboards
- Exporté via API
- Partagé avec votre équipe