이 가이드는 일반적인 보안 모니터링 및 분석 시나리오에 바로 사용할 수 있는 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 ago의존성/종속성 분석
자바 관련 취약점에 집중하세요:
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를 통해 내보내기
- 팀원들과 공유했습니다.