이 가이드는 일반적인 보안 모니터링 및 분석 시나리오에 바로 사용할 수 있는 NRQL 쿼리를 제공합니다. 이러한 쿼리를 쿼리 빌더에 복사하거나 사용자 정의 대시보드에 추가하여 귀하의 인사이트 데이터에 대해 더 깊이 알아보세요.
기본 데이터 구조에 대한 자세한 내용은 보안 데이터 구조 참조를 참조하십시오.
임원 보고
심각도별 전체 공개 취약점 수
취약점 노출 현황을 전체적으로 파악하세요:
FROM VulnerabilitySELECT count(*) as 'Total Vulnerabilities'WHERE state = 'OPEN'FACET severitySINCE 1 day ago심각도 및 중증도 추세
시간이 지남에 따라 주요 취약점이 어떻게 변화하는지 추적하십시오.
FROM VulnerabilitySELECT count(*) as 'Critical & High Vulnerabilities'WHERE severity IN ('CRITICAL', 'HIGH')AND state = 'OPEN'TIMESERIES AUTOSINCE 30 days ago엔티티별 취약점
어떤 애플리케이션이나 호스트에 가장 많은 취약점이 있는지 파악하십시오.
FROM VulnerabilitySELECT count(*) as 'Vulnerability Count'WHERE state = 'OPEN'FACET entity.nameLIMIT 20SINCE 1 day 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 %'WHERE state = 'OPEN'SINCE 1 day ago우선순위 설정 및 위험 평가
우선순위가 높은 취약점
악용 가능성이 높은 취약점을 찾으세요:
FROM VulnerabilitySELECT cveId, affectedPackage, affectedVersion, cvssScore, epssPercentileWHERE epssPercentile > 90AND state = 'OPEN'ORDER BY epssPercentile DESCLIMIT 50SINCE 7 days ago활성 랜섬웨어 취약점
랜섬웨어 공격에 사용되는 취약점을 식별하십시오:
FROM VulnerabilitySELECT cveId, affectedPackage, cvssScore, entity.nameWHERE activeRansomware = trueAND state = 'OPEN'FACET cveId, entity.nameSINCE 30 days ago새롭게 발견된 심각한 취약점
새로운 중요 발견 사항을 모니터링하십시오.
FROM VulnerabilitySELECT cveId, affectedPackage, affectedVersion, entity.name, detectedAtWHERE severity = 'CRITICAL'AND state = 'OPEN'AND detectedAt > ago(24 hours)ORDER BY detectedAt DESC즉각적인 조치가 필요한 취약점
여러 위험 요소를 결합하세요:
FROM VulnerabilitySELECT cveId, entity.name, affectedPackage, cvssScore, epssPercentileWHERE ( (severity = 'CRITICAL' AND epssPercentile > 85) OR (activeRansomware = true) OR (epssPercentile > 95))AND state = 'OPEN'FACET cveId, entity.nameSINCE 7 days ago노출 및 개선 조치 추적
평균 노출 시간
평균 복구 시간(MTTR)을 계산합니다.
FROM VulnerabilitySELECT average((resolvedAt - detectedAt) / 86400) as 'Avg Days to Resolve'WHERE state = 'CLOSED'FACET severitySINCE 90 days ago가장 오랫동안 해결되지 않은 취약점
장기간 열려 있는 취약점을 찾아보세요:
FROM VulnerabilitySELECT cveId, entity.name, affectedPackage, detectedAt, (max(timestamp) - detectedAt) / 86400 as 'Days Open'WHERE state = 'OPEN'FACET cveId, entity.nameORDER BY 'Days Open' DESCLIMIT 20SINCE 90 days ago교정 속도
취약점 해결 속도를 추적하세요:
FROM NrAiIncidentTimelineSELECT count(*) as 'Vulnerabilities Resolved'WHERE event = 'STATUS_CHANGED'AND newState = 'CLOSED'FACET weekOf(timestamp)SINCE 90 days agoTIMESERIES 1 week연령대별 버킷
취약점을 발생 기간에 따라 그룹화하세요:
FROM VulnerabilitySELECT count(*) as 'Count'WHERE state = 'OPEN'FACET cases( WHERE (now() - detectedAt) / 86400 <= 7 as '0-7 days', WHERE (now() - detectedAt) / 86400 <= 30 as '8-30 days', WHERE (now() - detectedAt) / 86400 <= 90 as '31-90 days', WHERE (now() - detectedAt) / 86400 > 90 as '> 90 days')SINCE 180 days ago패키지 및 라이브러리 분석
가장 취약한 라이브러리
가장 많은 취약점을 유발하는 라이브러리를 식별하십시오.
FROM VulnerabilitySELECT count(*) as 'Vulnerability Count'WHERE state = 'OPEN'FACET affectedPackageORDER BY count(*) DESCLIMIT 10SINCE 30 days ago업그레이드가 필요한 라이브러리
수정 사항이 포함된 패키지를 찾으세요:
FROM VulnerabilitySELECT affectedPackage, affectedVersion, fixedVersion, count(*) as 'Vulnerable Entities'WHERE state = 'OPEN'AND fixedVersion IS NOT NULLFACET affectedPackage, affectedVersion, fixedVersionORDER BY count(*) DESCLIMIT 20SINCE 7 days ago소스별 취약점 탐지
어떤 통합 기능이 취약점을 발견하는지 파악하십시오.
FROM VulnerabilitySELECT count(*) as 'Detections'FACET sourceSINCE 30 days ago의존성/종속성 분석
자바 관련 취약점에 집중하세요:
FROM VulnerabilitySELECT count(*) as 'Vulnerabilities'WHERE affectedPackage LIKE '%.jar'OR affectedPackage LIKE '%maven%'FACET affectedPackage, severitySINCE 30 days ago엔티티별 쿼리
애플리케이션 취약점 요약
특정 애플리케이션의 취약점 개수를 확인하세요:
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 entity.name = 'YOUR_APP_NAME'AND state = 'OPEN'SINCE 1 day ago호스트 구성 분석
인프라 호스트의 취약점을 분석합니다.
FROM VulnerabilitySELECT count(*) as 'Vulnerabilities'WHERE entityType = 'HOST'AND state = 'OPEN'FACET entity.name, severityLIMIT 50SINCE 7 days ago최근 스캔 기록이 없는 경우
보고 데이터가 아닐 수 있는 부분을 식별하십시오.
FROM VulnerabilitySELECT entity.name, max(timestamp) as 'Last Scan'FACET entity.nameHAVING max(timestamp) < ago(7 days)SINCE 30 days ago현황 및 흐름 추적
검토가 필요한 무시된 취약점
검토 예정일이 다가오는, 간과된 취약점을 찾아보세요:
FROM NrAiIncidentTimelineSELECT incidentId, entity.name, reason, timestamp as 'Ignored At'WHERE event = 'STATUS_CHANGED'AND newState = 'IGNORED'AND timestamp < ago(60 days)FACET incidentId, entity.nameSINCE 90 days ago상태 변경 감사 추적
누가 상태를 변경하는지 추적하세요:
FROM NrAiIncidentTimelineSELECT timestamp, entity.name, previousState, newState, changedBy, reasonWHERE event = 'STATUS_CHANGED'ORDER BY timestamp DESCLIMIT 100SINCE 30 days ago오탐 rate
무시된 것으로 표시된 취약점과 영향을 받은 것으로 표시된 취약점의 수를 계산하십시오.
FROM NrAiIncidentTimelineSELECT filter(count(*), WHERE newState = 'IGNORED') as 'Ignored', filter(count(*), WHERE newState = 'AFFECTED') as 'Affected', percentage(filter(count(*), WHERE newState = 'IGNORED'), count(*)) as 'Ignore Rate %'WHERE event = 'STATUS_CHANGED'SINCE 90 days ago규정 준수 및 보고
30일 이상 경과된 취약점 (SLA 추적)
취약점 해결 SLA를 초과하는 취약점을 모니터링하세요.
FROM VulnerabilitySELECT count(*) as 'Overdue Vulnerabilities', entity.name, severityWHERE state = 'OPEN'AND detectedAt < ago(30 days)FACET entity.name, severitySINCE 180 days agoCritical 접속 응답 시간
심각한 취약점이 얼마나 빨리 해결되는지 추적하세요:
FROM VulnerabilitySELECT percentile((resolvedAt - detectedAt) / 86400, 50, 75, 90, 95) as 'Days to Resolve'WHERE severity = 'CRITICAL'AND state = 'CLOSED'SINCE 90 days ago월간 기준
월간 보고서 생성:
FROM VulnerabilitySELECT count(*) as 'Total Detected', uniqueCount(entity.guid) as 'Affected Entities', filter(count(*), WHERE severity IN ('CRITICAL', 'HIGH')) as 'High Risk'FACET monthOf(detectedAt)SINCE 180 days agoTIMESERIES 1 month고급 분석
폭발 반경
많은 부분에 영향을 미치는 부분을 식별합니다.
FROM VulnerabilitySELECT cveId, count(entity.guid) as 'Affected Entities', max(cvssScore) as 'CVSS'WHERE state = 'OPEN'FACET cveIdHAVING count(entity.guid) > 5ORDER BY count(entity.guid) DESCLIMIT 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'WHERE state = 'OPEN'FACET entity.nameSINCE 1 day ago유형별 취약점 추세
애플리케이션 취약점과 인프라 취약점을 비교하십시오.
FROM VulnerabilitySELECT count(*) as 'Vulnerabilities'WHERE state = 'OPEN'FACET entityTypeTIMESERIES AUTOSINCE 30 days ago이러한 쿼리를 사용하여
쿼리 빌더에서
- one.newrelic.com > All capabilities > Query your data로 이동하세요.
- 이 페이지의 쿼리를 복사하여 붙여넣으세요.
- 결과를 보려면 Run [실행]을 클릭하세요.
- 필요에 따라 시간 범위와 필터를 조정하세요.
맞춤형 대시보드
- 새 대시보드를 만들거나 기존 대시보드를 편집하세요.
- 위젯을 추가하고 Query builder [쿼리 빌더]를선택하세요.
- 쿼리를 붙여넣고 시각화를 구성하세요.
- 위젯을 대시보드에 저장하세요
알림에서
- Alerts > Create a condition으로 이동하세요.
- 조건 유형으로 NRQL query [NRQL 쿼리]를 선택하세요.
- 개수를 반환하는 쿼리나 기둥값, 관련값을 사용하세요.
- 공지 청소년 값, 공지 채널 구성
알림에 대한 자세한 내용은 취약점 알림 설정하기를 참조하세요.
쿼리 사용자 지정 팁
교체 플레이스홀더
'YOUR_APP_NAME'- 실제 애플리케이션 이름으로 바꿔주세요'YOUR_ENTITY_GUID'- 해당 엔티티의 GUID로 바꿔주세요- 시간 범위(예:
SINCE 30 days ago) - 필요에 따라 조정하세요
다른 데이터와 결합
APM 또는 피규어를 사용하여 데이터 조인:
FROM Vulnerability, TransactionSELECT count(Vulnerability.cveId), average(Transaction.duration)WHERE Vulnerability.entity.guid = Transaction.appIdAND Vulnerability.state = 'OPEN'FACET Vulnerability.entity.nameSINCE 1 day ago결과 내보내기
모든 쿼리 결과는 다음과 같습니다.
- CSV 파일로 다운로드됨
- 대시보드에 추가되었습니다
- API를 통해 내보내기
- 팀원들과 공유했습니다.