Microsoft Sentinel 서비스에서 포괄적이고 중단 없이 변조되지 않는 위협 탐지를 보장하려면 분석 규칙의 상태 및 무결성을 추적합니다. 실행 인사이트를 모니터링하고, 상태 및 감사 로그를 쿼리하고, 수동으로 다시 실행하여 규칙을 테스트하고 최적화하여 최적의 기능을 유지합니다.
조치를 취할 수 있는 관련 이해 관계자에 대한 상태 및 감사 이벤트 알림을 설정합니다. 예를 들어 이메일 또는 Microsoft Teams 메시지를 정의 및 전송하고 티켓팅 시스템에서 새 티켓을 생성하는 등의 작업을 수행합니다.
이 문서에서는 Microsoft Sentinel의 감사 및 상태 모니터링 기능을 사용하여 Microsoft Sentinel 내에서 분석 규칙의 상태 및 무결성을 추적하는 방법을 설명합니다.
규칙 인사이트 및 규칙의 수동 다시 실행에 대한 자세한 내용은 예약된 분석 규칙의 실행 모니터링 및 최적화를 참조하세요.
요약
Microsoft Sentinel 분석 규칙 상태 로그:
- 이 로그는 분석 규칙의 실행을 기록하는 이벤트와 이러한 실행의 최종 결과(성공 또는 실패 여부, 실패한 경우 그 이유)를 캡처합니다.
- 또한 로그는 분석 규칙의 각 실행에 대해 다음을 기록합니다.
- 규칙의 쿼리가 캡처한 이벤트 수입니다.
- 규칙에서 정의된 임계값을 통과한 이벤트 수로 인해 규칙이 경고를 발생시키는지 여부.
이러한 로그는 Log Analytics의 SentinelHealth 테이블에서 수집됩니다.
Microsoft Sentinel 분석 규칙 감사 로그:
- 이 로그는 다음 세부 정보를 포함하여 분석 규칙의 변경 내용을 기록하는 이벤트를 캡처합니다.
- 변경된 규칙의 이름.
- 변경된 규칙의 속성.
- 변경 전후의 규칙 설정 상태.
- 변경한 사용자 또는 ID.
- 변경의 원본 IP 및 날짜/시간.
- 등등
이러한 로그는 Log Analytics의 SentinelAudit 테이블에서 수집됩니다.
- 이 로그는 다음 세부 정보를 포함하여 분석 규칙의 변경 내용을 기록하는 이벤트를 캡처합니다.
SentinelHealth 및 SentinelAudit 데이터 테이블 사용
앞에서 설명한 테이블에서 감사 및 상태 데이터를 얻으려면 먼저 작업 영역에 대한 Microsoft Sentinel 상태 기능을 켜야 합니다. 자세한 내용은 Microsoft Sentinel에 대한 감사 및 상태 모니터링 켜기를 참조하세요.
상태 기능이 켜져 있으면 자동화 규칙 및 플레이북에 대해 만들어진 첫 번째 성공 또는 실패 이벤트에서 SentinelHealth 데이터 테이블이 만들어집니다.
SentinelHealth 및 SentinelAudit 테이블 이벤트 이해
SentinelHealth 테이블은 다음과 같은 유형의 분석 규칙 상태 이벤트를 기록합니다.
- 예약된 분석 규칙 실행.
- NRT 분석 규칙 실행.
자세한 내용은 SentinelHealth 테이블 열 스키마를 참조하세요.
SentinelAudit 테이블은 다음과 같은 유형의 분석 규칙 감사 이벤트를 기록합니다.
- 분석 규칙을 만들거나 업데이트.
- 분석 규칙 삭제.
자세한 내용은 SentinelAudit 테이블 열 스키마를 참조하세요.
쿼리를 실행하여 상태 및 무결성 문제 검색
최상의 결과를 위해 테이블을 직접 쿼리하는 대신 이러한 테이블에 대해 미리 빌드된 함수 ( _SentinelHealth() 및 _SentinelAudit()에 대한 쿼리를 빌드합니다. 이러한 함수는 테이블의 스키마를 변경하는 경우 쿼리의 이전 버전과의 호환성을 유지합니다.
첫 번째 단계로 분석 규칙과 관련된 데이터에 대한 테이블을 필터링합니다.
SentinelResourceType 매개 변수를 사용합니다.
_SentinelHealth()
| where SentinelResourceType == "Analytics Rule"
원하는 경우 특정 종류의 분석 규칙에 대한 목록을 추가로 필터링할 수 있습니다.
SentinelResourceKind 매개 변수를 사용합니다.
| where SentinelResourceKind == "Scheduled"
# OR
| where SentinelResourceKind == "NRT"
다음은 시작하는 데 도움이 되는 몇 가지 샘플 쿼리입니다.
"autodisabled"인 규칙을 찾습니다.
_SentinelHealth() | where SentinelResourceType == "Analytics Rule" | where Reason == "The analytics rule is disabled and was not executed."성공하거나 실패한 규칙 및 실행 수를 다음과 같이 계산합니다.
_SentinelHealth() | where SentinelResourceType == "Analytics Rule" | summarize Occurrence=count(), Unique_rule=dcount(SentinelResourceId) by Status, Reason규칙 삭제 작업을 찾습니다.
_SentinelAudit() | where SentinelResourceType =="Analytic Rule" | where Description =="Analytics rule deleted"규칙 이름 및 활동 이름으로 규칙에 대한 활동을 찾습니다.
_SentinelAudit() | where SentinelResourceType =="Analytic Rule" | summarize Count= count() by RuleName=SentinelResourceName, Activity=Description호출자 이름(활동을 수행한 ID)을 기준으로 규칙에 대한 활동을 찾습니다.
_SentinelAudit() | where SentinelResourceType =="Analytic Rule" | extend Caller= tostring(ExtendedProperties.CallerName) | summarize Count = count() by Caller, Activity=Description
앞의 예제에서 사용된 다음 항목에 대한 자세한 내용은 Kusto 설명서를 참조하세요.
KQL에 대한 자세한 내용은 KQL(Kusto 쿼리 언어) 개요를 참조하세요.
기타 리소스:
예정된 규칙
일정 규칙이 실패하면 정확히 동일한 창에서 5번 더 시도됩니다. 6번의 시도 중 하나가 성공하는 한 규칙은 창을 건너뛰고 경고를 놓치지 않습니다.
6번의 시도 중 하나에서 실패하면 경고 트리거가 지연되었음을 나타냅니다. 다음 쿼리는 정확한 지연 시간을 계산합니다.
_SentinelHealth()
| where SentinelResourceType == @"Analytics Rule"
| where SentinelResourceKind == "Scheduled"
| extend startTime = todatetime(ExtendedProperties["QueryStartTimeUTC"]), executionStart = todatetime(ExtendedProperties["executionStart"])
| extend delay = datetime_diff('minute', startTime, executionStart)
전체 오류(즉, 건너뛴 창)를 찾으려면 다음 쿼리를 사용합니다.
_SentinelHealth()| where SentinelResourceType == @"Analytics Rule"
| where SentinelResourceKind == "Scheduled"
| where Status != "Success"
| extend startTime = tostring(ExtendedProperties["QueryStartTimeUTC"])
| summarize failuresByStartTime = count() by startTime, SentinelResourceId
| where failuresByStartTime == 6
| summarize count() by SentinelResourceId
이 쿼리는 6개의 재시도 중 어느 것도 성공하지 못한 예약된 분석 규칙 실행을 찾습니다. 다시 시도는 항상 원래 시작 시간을 확인하기 때문에 규칙 창의 시작 시간을 확인하여 재시도를 식별할 수 있습니다. 이 쿼리는 각 분석 규칙에 대해 건너뛴 창의 양을 제공합니다. 건너뛴 창은 드물 것으로 예상됩니다. 건너뛴 창이 있는 분석 규칙이 있는 경우 쿼리를 사용하여 이러한 특정 규칙의 실패 이유와 오류 이유 및 완화 테이블을 이해하여 문제를 해결합니다.
NRT 규칙
NRT 규칙에 대한 재시도 메커니즘은 예약된 규칙과 다르게 동작합니다. 규칙을 실행하지 못하면 시스템은 다음 실행에서 실패한 창도 고려합니다(1분 후). 이 동작은 최대 60개의 실패(1시간)동안 계속됩니다.
특정 실행의 한 실패는 1분 지연만 반영하므로 단일 실패에 주목하지 마세요. 대신 다음 쿼리를 사용하여 각 분석 규칙의 지연을 모니터링합니다.
_SentinelHealth()
| where SentinelResourceKind == "NRT"
| extend startTime = todatetime(ExtendedProperties["QueryStartTimeUTC"]), endTime = todatetime(ExtendedProperties["QueryEndTimeUTC"]), alertsCreated = toint(ExtendedProperties["AlertsGeneratedAmount"])
| where alertsCreated == 0
| extend ruleDelay = datetime_diff('minute', endTime, startTime)
| project TimeGenerated, ruleDelay, SentinelResourceId
| render timechart
또한 상당한 지연에 대한 경고를 트리거하는 분석 규칙을 정의할 수 있습니다(예: NRT 규칙의 지연이 10분 이상인 경우).
상태, 오류 및 제안된 단계
예약된 분석 규칙 실행 또는 NRT 분석 규칙 실행의 경우 다음 상태 및 설명이 표시될 수 있습니다.
성공: 규칙이 성공적으로 실행되어 경고가
<n>생성되었습니다.성공: 규칙이 성공적으로 실행되었지만 경고를 생성하는 데 필요한 임계값(
<n>)에 도달하지 못했습니다.실패: 이러한 설명은 규칙 실패 및 이에 대해 수행할 수 있는 작업을 설명합니다.
설명 재구성 쿼리를 실행하는 동안 내부 서버 오류가 발생했습니다. 쿼리 실행 시간이 초과되었습니다. 쿼리에서 참조된 테이블을 찾을 수 없습니다. 관련 데이터 원본이 연결되어 있는지 확인합니다. 쿼리를 실행하는 동안 의미 체계 오류가 발생했습니다. 설정을 변경하지 않은 채로 편집하고 저장하여 분석 규칙을 다시 설정해 보세요. 쿼리에서 호출하는 함수의 이름은 예약어로 지정됩니다. 함수를 제거하거나 이름을 바꿉니다. 쿼리를 실행하는 동안 구문 오류가 발생했습니다. 설정을 변경하지 않은 채로 편집하고 저장하여 분석 규칙을 다시 설정해 보세요. 작업 영역이 없습니다. 이 쿼리는 너무 많은 시스템 리소스를 사용하며 실행되지 않습니다. 분석 규칙을 검토하고 조정합니다. Kusto 쿼리 언어 개요 및 모범 사례 설명서를 참조하세요. 쿼리에서 호출된 함수를 찾을 수 없습니다. 쿼리에서 호출하는 모든 함수의 작업 영역에 있는지 확인합니다. 쿼리에 사용된 작업 영역을 찾을 수 없습니다. 쿼리의 모든 작업 영역이 있는지 확인합니다. 이 쿼리를 실행할 수 있는 권한이 없습니다. 설정을 변경하지 않은 채로 편집하고 저장하여 분석 규칙을 다시 설정해 보세요. 쿼리에서 하나 이상의 리소스에 대한 액세스 권한이 없습니다. 쿼리를 찾을 수 없는 스토리지 경로를 참조했습니다. 쿼리에 스토리지 경로에 대한 액세스가 거부되었습니다. 이름이 같은 여러 함수가 이 작업 영역에 정의되어 있습니다. 중복 함수를 제거하거나 이름을 바꾸고 규칙을 편집하고 저장하여 다시 설정합니다. 이 쿼리는 결과를 반환하지 않았습니다. 이 쿼리의 여러 결과 집합은 허용되지 않습니다. 쿼리 결과에는 행당 필드 수가 일치하지 않습니다. 긴 데이터 수집 시간 때문에 규칙의 실행이 지연되었습니다. 임시 문제로 인해 규칙 실행이 지연되었습니다. 일시적인 문제로 인해 경고가 보강되지 않았습니다. 엔터티 매핑 문제로 인해 경고가 보강되지 않았습니다. 32KB 경고 크기 제한으로 인해 경고 <이름>에서 <숫자> 엔터티가 삭제되었습니다. 엔터티 매핑 문제로 인해 경고 <이름>에서 <숫자> 엔터티가 삭제되었습니다. 쿼리로 인해 행별 경고 이벤트 그룹화 구성이 있는 <규칙 유형> 규칙에 허용되는 최대 <제한>개의 결과를 초과하는 <숫자>개의 이벤트가 발생했습니다. 첫 번째 <제한-1>개의 이벤트에 대해 행당 경고가 생성되었으며 모든 이벤트를 고려하여 추가 집계된 경고가 생성되었습니다.
- <숫자> = 쿼리에서 반환된 이벤트 수
- <제한> = 현재 예약된 규칙에 대한 경고 150개, NRT 규칙의 경우 30개
- <규칙 유형> = 예약됨 또는 NRT
감사 및 상태 모니터링 통합 문서 사용
작업 영역에서 통합 문서를 사용할 수 있도록 하려면 Microsoft Sentinel 콘텐츠 허브에서 통합 문서 솔루션을 설치합니다.
Microsoft Sentinel 포털의 콘텐츠 관리 메뉴에서 콘텐츠 허브(미리 보기)를 선택합니다.
콘텐츠 허브의 검색 창에 상태를 입력하고 결과에서 독립 실행형 아래 통합 문서 솔루션 중에서 분석 상태 및 감사를 선택합니다.
세부 정보 창에서 설치를 선택한 다음, 해당 위치에 표시되는 저장을 선택합니다.
솔루션이 설치되었음을 나타내면 위협 관리 메뉴에서 통합 문서를 선택합니다.
통합 문서 갤러리에서 템플릿 탭을 선택하고, 검색 표시줄에 상태를 입력하고, 결과 중에서 분석 상태 및 감사를 선택합니다.
세부 정보 창에서 저장을 선택하여 통합 문서의 편집 가능하고 사용 가능한 복사본을 만듭니다. 복사본을 만들 때 저장된 통합 문서 보기를 선택합니다.
통합 문서에서 먼저 보려는 구독과 작업 영역을 선택한 다음(이미 선택되었을 수 있음), TimeRange를 정의하여 필요에 따라 데이터를 필터링합니다. 도움말 표시 토글을 사용하여 통합 문서에 대한 현재 위치 설명을 표시합니다.
이 통합 문서에는 세 개의 탭 섹션이 있습니다.
개요 탭
개요 탭에 상태 및 감사 요약이 표시됩니다.
- 선택한 작업 영역에서 실행되는 분석 규칙의 상태 대한 상태 요약: 실행 수, 성공 및 실패, 실패 이벤트 세부 정보.
- 선택한 작업 영역의 분석 규칙에 대한 활동 요약 감사: 시간 경과에 따른 활동 수, 유형별 활동 수 및 규칙별 다양한 유형의 활동 수.
상태 탭
상태 탭을 사용하여 특정 상태 이벤트를 탐색할 수 있습니다.
- 상태(성공 또는 실패) 및 규칙 유형(예약 또는 NRT)을 사용하여 전체 페이지 데이터를 필터링합니다.
- 선택한 기간 동안의 성공 및 실패 규칙 실행 추세(상태 필터에 따라 다름)를 참조하세요. 추세 그래프를 "시간 브러시"하여 원래 시간 범위의 하위 집합을 볼 수 있습니다.
- 이유로 페이지의 나머지 부분을 필터링합니다.
- 원형 차트에서 상태에 비례적으로 표시되는 모든 분석 규칙에 대한 총 실행 수를 참조하세요.
- 다음은 규칙 유형 및 상태 따라 실행되고 세분화되는 고유한 분석 규칙의 수를 보여 주는 테이블입니다.
- 상태를 선택하여 해당 상태에 대한 나머지 차트를 필터링합니다.
- 차트의 오른쪽 위 모서리에 있는 "선택 영역 지우기" 아이콘("실행 취소" 아이콘처럼 표시됨)을 선택하여 필터를 지웁니다.
- 해당 상태에 대해 가능한 이유의 수와 함께 각 상태를 확인합니다. (선택한 시간 프레임에서 실행되는 이유만 표시됩니다.)
- 상태를 선택하여 해당 상태에 대한 나머지 차트를 필터링합니다.
- 차트의 오른쪽 위 모서리에 있는 "선택 영역 지우기" 아이콘("실행 취소" 아이콘처럼 표시됨)을 선택하여 필터를 지웁니다.
- 다음으로 총 규칙 실행 수와 실행된 고유 규칙 수가 있는 이러한 이유의 목록을 참조하세요.
- 이러한 이유로 다음 차트를 필터링할 이유를 선택합니다.
- 차트의 오른쪽 위 모서리에 있는 "선택 영역 지우기" 아이콘("실행 취소" 아이콘처럼 표시됨)을 선택하여 필터를 지웁니다.
- 그 후에는 실행된 고유한 분석 규칙 목록이며, 최신 결과와 성공 및 실패 추세선(목록을 필터링하기 위해 선택한 상태에 따라 다름)이 표시됩니다.
- 드릴다운할 규칙을 선택하고 선택한 시간 프레임에서 해당 규칙의 모든 실행이 포함된 새 테이블을 표시합니다.
- 차트의 오른쪽 위 모서리에 있는 "선택 영역 지우기" 아이콘("실행 취소" 아이콘처럼 표시됨)을 선택하여 해당 테이블을 지웁니다.
- 목록에서 규칙을 선택하면 선택한 규칙에 대한 상태 세부 정보와 함께 새 테이블이 나타납니다.
감사 탭
감사 탭을 사용하면 특정 감사 이벤트로 드릴다운할 수 있습니다.
- 감사 규칙 유형(예약/Fusion)을 기준으로 전체 페이지 데이터를 필터링합니다.
- 선택한 기간 동안 분석 규칙에 대한 감사된 활동의 추세를 참조하세요. 추세 그래프를 "시간 브러시"하여 원래 시간 범위의 하위 집합을 볼 수 있습니다.
-
활동 및 규칙 유형으로 세분화된 감사된 이벤트 수를 참조하세요.
- 활동을 선택하여 해당 활동에 대해 다음 차트를 필터링합니다.
- 차트의 오른쪽 위 모서리에 있는 "선택 영역 지우기" 아이콘("실행 취소" 아이콘처럼 표시됨)을 선택하여 필터를 지웁니다.
-
규칙 이름별로 감사된 이벤트 수를 참조하세요.
- 규칙 이름을 선택하여 해당 규칙에 대해 다음 테이블을 필터링하고 해당 규칙의 모든 작업이 있는 새 테이블을 드릴다운하고 표시합니다(선택한 시간 프레임). (다음 스크린샷 이후 부분을 참조하세요.)
- 차트의 오른쪽 위 모서리에 있는 "선택 영역 지우기" 아이콘("실행 취소" 아이콘처럼 표시됨)을 선택하여 필터를 지웁니다.
- 호출자가 감사한 이벤트 수(활동을 수행한 ID)를 참조하세요.
- 이전 차트에서 규칙 이름을 선택한 경우 해당 규칙의 감사된 활동을 보여 주는 다른 테이블이 나타납니다. ExtendedProperties 열에서 링크로 표시되는 값을 선택하여 규칙의 변경 내용을 표시하는 측면 패널을 엽니다.
다음 단계
- Microsoft Sentinel에서 분석 규칙 실행 모니터링 및 최적화.
- Microsoft Sentinel의 감사 및 상태 모니터링에 대해 알아봅니다.
- Microsoft Sentinel에서 감사 및 상태 모니터링의 설정을 켭니다.
- 자동화 규칙 및 플레이북의 상태를 모니터링합니다.
- 데이터 커넥터의 상태를 모니터링합니다.
- SentinelHealth 및 SentinelAudit 테이블 스키마에 대한 자세한 내용을 참조하세요.