이 문서에서는 ArcSight 검색 규칙을 식별, 비교 및 마이그레이션하여 분석 규칙을 Microsoft Sentinel 방법을 설명합니다.
규칙 식별 및 마이그레이션
Microsoft Sentinel 기계 학습 분석을 사용하여 충실도가 높고 실행 가능한 인시던트를 만들고, 기존 검색 중 일부는 Microsoft Sentinel 중복될 수 있습니다. 따라서 모든 검색 및 분석 규칙을 맹목적으로 마이그레이션하지 마세요. 기존 검색 규칙을 식별할 때 이러한 고려 사항을 검토합니다.
- 비즈니스 우선 순위 및 효율성을 고려하여 규칙 마이그레이션을 정당화하는 사용 사례를 선택해야 합니다.
- Microsoft Sentinel 규칙 유형을 이해하고 있는지 확인합니다.
- 규칙 용어를 이해하고 있는지 확인합니다.
- 지난 6~12개월 동안 경고를 트리거하지 않은 규칙을 검토하고 여전히 관련성이 있는지 확인합니다.
- 일상적으로 무시하는 하위 수준 위협 또는 경고를 제거합니다.
- 기존 기능을 사용하고 Microsoft Sentinel 기본 제공 분석 규칙이 현재 사용 사례를 해결할 수 있는지 여부를 검사. Microsoft Sentinel 기계 학습 분석을 사용하여 충실도가 높고 실행 가능한 인시던트가 생성되기 때문에 일부 기존 검색이 더 이상 필요하지 않을 수 있습니다.
- 연결된 데이터 원본을 확인하고 데이터 연결 방법을 검토합니다. 데이터 수집 대화를 다시 검토하여 검색하려는 사용 사례 전반에서 데이터 깊이와 폭을 확인합니다.
- SOC Prime Threat Detection Marketplace와 같은 커뮤니티 리소스를 탐색하여 규칙을 사용할 수 있는지 여부를 검사.
- Uncoder.io 같은 온라인 쿼리 변환기가 규칙에 대해 작동하는지 여부를 고려합니다.
- 규칙을 사용할 수 없거나 변환할 수 없는 경우 KQL 쿼리를 사용하여 수동으로 만들어야 합니다. 규칙 매핑을 검토하여 새 쿼리를 만듭니다.
검색 규칙 마이그레이션에 대한 모범 사례에 대해 자세히 알아봅니다.
분석 규칙을 Microsoft Sentinel 마이그레이션하려면 다음을 수행합니다.
마이그레이션하려는 각 규칙에 대한 테스트 시스템이 있는지 확인합니다.
전체 테스트 시나리오 및 스크립트를 포함하여 마이그레이션된 규칙에 대한 유효성 검사 프로세스를 준비합니다.
팀에 마이그레이션된 규칙을 테스트하는 데 유용한 리소스가 있는지 확인합니다.
필요한 데이터 원본이 연결되어 있는지 확인하고 데이터 연결 방법을 검토합니다.
검색을 Microsoft Sentinel 기본 제공 템플릿으로 사용할 수 있는지 확인합니다.
기본 제공 규칙이 충분한 경우 기본 제공 규칙 템플릿을 사용하여 고유한 작업 영역에 대한 규칙을 만듭니다.
Microsoft Sentinel Configuration > Analytics > 규칙 템플릿 탭으로 이동하여 각 관련 분석 규칙을 만들고 업데이트합니다.
자세한 내용은 템플릿에서 예약된 분석 규칙 만들기를 참조하세요.
Microsoft Sentinel 기본 제공 규칙에서 다루지 않는 검색이 있는 경우 Uncoder.io 같은 온라인 쿼리 변환기를 사용하여 쿼리를 KQL로 변환합니다.
트리거 조건 및 규칙 작업을 식별한 다음, KQL 쿼리를 생성하고 검토합니다.
기본 제공 규칙이나 온라인 규칙 변환기로 충분하지 않은 경우 규칙을 수동으로 만들어야 합니다. 이러한 경우 다음 단계를 사용하여 규칙 만들기를 시작합니다.
규칙에서 사용할 데이터 원본을 식별합니다. Microsoft Sentinel 데이터 원본과 데이터 테이블 간에 매핑 테이블을 만들어 쿼리하려는 테이블을 식별하려고 합니다.
규칙에서 사용하려는 데이터의 특성, 필드 또는 엔터티를 식별합니다.
규칙 조건 및 논리를 식별합니다. 이 단계에서는 KQL 쿼리를 생성하는 방법에 대한 샘플로 규칙 템플릿을 사용할 수 있습니다.
필터, 상관 관계 규칙, 활성 목록, 참조 집합, 관심 목록, 검색 변칙, 집계 등을 고려합니다. 레거시 SIEM에서 제공하는 참조를 사용하여 쿼리 구문을 가장 잘 매핑하는 방법을 이해할 수 있습니다.
트리거 조건 및 규칙 작업을 식별한 다음, KQL 쿼리를 생성하고 검토합니다. 쿼리를 검토할 때 KQL 최적화 지침 리소스를 고려합니다.
각 관련 사용 사례를 사용하여 규칙을 테스트합니다. 예상 결과를 제공하지 않는 경우 KQL을 검토하고 다시 테스트할 수 있습니다.
만족하면 마이그레이션된 규칙을 고려할 수 있습니다. 필요에 따라 규칙 작업에 대한 플레이북을 만듭니다. 자세한 내용은 Microsoft Sentinel 플레이북을 사용하여 위협 대응 자동화를 참조하세요.
분석 규칙에 대해 자세히 알아보세요.
- Microsoft Sentinel 예약된 분석 규칙입니다. 경고 그룹화 를 사용하여 지정된 기간 내에 발생하는 경고를 그룹화하여 경고 피로를 줄입니다.
- SOC 엔지니어가 조사 중에 추적할 증거의 일부로 엔터티를 정의할 수 있도록 데이터 필드를 Microsoft Sentinel 엔터티에 매핑합니다. 또한 엔터티 매핑을 사용하면 SOC 분석가가 시간과 노력을 줄일 수 있는 직관적인 조사 그래프 를 활용할 수 있습니다.
- 인시던트 미리 보기 창에서 특정 인시던트와 관련된 이벤트, 경고 및 책갈피를 표시하기 위해 증거를 사용하는 방법의 예로 UEBA 데이터를 사용하여 인시던트를 조사합니다.
- KQL(Kusto 쿼리 언어) - 데이터를 처리하고 결과를 반환하기 위해 Log Analytics 데이터베이스에 읽기 전용 요청을 보내는 데 사용할 수 있습니다. KQL은 엔드포인트용 Microsoft Defender 및 Application Insights와 같은 다른 Microsoft 서비스에서도 사용됩니다.
규칙 용어 비교
이 표는 ArcSight에 비해 Microsoft Sentinel 규칙의 개념을 명확히 하는 데 도움이 됩니다.
| ArcSight | Microsoft Sentinel | |
|---|---|---|
| 규칙 유형 | • 필터 규칙 • 조인 규칙 • 활성 목록 규칙 • 기타 |
• 예약된 쿼리 •퓨전 • Microsoft 보안 • ML(Machine Learning) 동작 분석 |
| Criteria | 규칙 조건에서 정의 | KQL에서 정의 |
| 트리거 조건 | • 실행 중 정의 • 집계에서 정의(이벤트 집계용) |
임계값: 쿼리 결과 수 |
| 작업 | • 이벤트 필드 설정 • 알림 보내기 • 새 사례 만들기 • 활성 목록에 추가 • 기타 |
• 경고 또는 인시던트 만들기 • Logic Apps와 통합 |
규칙 샘플 매핑 및 비교
이러한 샘플을 사용하여 ArcSight의 규칙을 비교하고 매핑하여 다양한 시나리오에서 Microsoft Sentinel.
| 규칙 | 설명 | 샘플 검색 규칙(ArcSight) | 샘플 KQL 쿼리 | 리소스 |
|---|---|---|---|---|
필터(AND) |
조건이 있는 AND 샘플 규칙입니다. 이벤트는 모든 조건과 일치해야 합니다. |
필터(AND) 예제 | 필터(AND) 예제 | 문자열 필터: • 문자열 연산자 숫자 필터: • 숫자 연산자 날짜/시간 필터: • 전 • 날짜/시간 • 사이 • 지금 구문 분석: • 구문 분석 • 추출 • parse_json • parse_csv • parse_path • parse_url |
필터(OR) |
조건이 있는 OR 샘플 규칙입니다. 이벤트는 조건 중 하나와 일치할 수 있습니다. |
OR(필터) 예제 | OR(필터) 예제 | • 문자열 연산자 • in |
| 중첩된 필터 | 중첩된 필터링 조건이 있는 샘플 규칙입니다. 규칙에는 필터링 조건도 포함된 문이 포함됩니다 MatchesFilter . |
중첩된 필터 예제 | 중첩된 필터 예제 | • 샘플 KQL 함수 • 샘플 매개 변수 함수 • 조인 • 위치 |
| 활성 목록(조회) | 문을 사용하는 InActiveList 샘플 조회 규칙입니다. |
활성 목록(조회) 예제 | 활성 목록(조회) 예제 | • 관심 목록은 활성 목록 기능과 동일합니다.
관심 목록에 대해 자세히 알아보세요. • 조회를 구현하는 다른 방법 |
| 상관 관계(일치) | 문을 사용하여 Matching Event 기본 이벤트 집합에 대한 조건을 정의하는 샘플 규칙입니다. |
상관 관계(일치) 예제 | 상관 관계(일치) 예제 | join 연산자: • 조인 • 시간 창과 조인 • 순서 섞기 • 브로드캐스트 • 공용 구조체 define 문: • 하자 집계: • make_set • make_list • make_bag • bag_pack |
| 상관 관계(기간) | 문을 사용하여 Matching Event 기본 이벤트 집합에 대한 조건을 정의하고 필터 조건을 사용하는 Wait time 샘플 규칙입니다. |
상관 관계(시간 창) 예제 | 상관 관계(시간 창) 예제 | • 조인 • Microsoft Sentinel 규칙 및 조인 문 |
필터(AND) 예제: ArcSight
ArcSight의 조건이 있는 AND 샘플 필터 규칙은 다음과 같습니다.
필터(AND) 예제: KQL
다음은 KQL 조건이 있는 AND 필터 규칙입니다.
SecurityEvent
| where EventID == 4728
| where SubjectUserName =~ "AutoMatedService"
| where isnotempty(SubjectDomainName)
이 규칙은 Azure 모니터링 에이전트(AMA)가 Windows 보안 이벤트를 수집한다고 가정합니다. 따라서 규칙은 Microsoft Sentinel SecurityEvent 테이블을 사용합니다.
다음 모범 사례를 고려합니다.
- 쿼리를 최적화하려면 가능한
=~경우 대/소문자를 구분하지 않는 연산자를 피합니다. - 값이 대/소문자를 구분하지 않는 경우 를 사용합니다
==. - 가장 많은 데이터를 필터링하는 문부터
where시작하여 필터를 정렬합니다.
필터(OR) 예제: ArcSight
ArcSight의 조건이 있는 OR 샘플 필터 규칙은 다음과 같습니다.
OR(필터) 예제: KQL
다음은 KQL의 조건을 사용하여 필터 규칙을 OR 작성하는 몇 가지 방법입니다.
첫 번째 옵션으로 문을 사용합니다 in .
SecurityEvent
| where SubjectUserName in
("Adm1","ServiceAccount1","AutomationServices")
두 번째 옵션으로 문을 사용합니다 or .
SecurityEvent
| where SubjectUserName == "Adm1" or
SubjectUserName == "ServiceAccount1" or
SubjectUserName == "AutomationServices"
두 옵션 모두 성능이 동일하지만 읽기 쉬운 첫 번째 옵션을 사용하는 것이 좋습니다.
중첩된 필터 예제: ArcSight
ArcSight의 샘플 중첩 필터 규칙은 다음과 같습니다.
필터에 대한 /All Filters/Soc Filters/Exclude Valid Users 규칙은 다음과 같습니다.
중첩된 필터 예제: KQL
다음은 KQL의 조건을 사용하여 필터 규칙을 OR 작성하는 몇 가지 방법입니다.
첫 번째 옵션으로 문과 함께 직접 필터를 where 사용합니다.
SecurityEvent
| where EventID == 4728
| where isnotempty(SubjectDomainName) or
isnotempty(TargetDomainName)
| where SubjectUserName !~ "AutoMatedService"
두 번째 옵션으로 KQL 함수를 사용합니다.
다음 쿼리를 별칭을 사용하여 KQL 함수로
ExcludeValidUsers저장합니다.SecurityEvent | where EventID == 4728 | where isnotempty(SubjectDomainName) | where SubjectUserName =~ "AutoMatedService" | project SubjectUserName다음 쿼리를 사용하여 별칭을
ExcludeValidUsers필터링합니다.SecurityEvent | where EventID == 4728 | where isnotempty(SubjectDomainName) or isnotempty(TargetDomainName) | where SubjectUserName !in (ExcludeValidUsers)
세 번째 옵션으로 매개 변수 함수를 사용합니다.
를 이름 및 별칭으로 사용하여 매개 변수 함수
ExcludeValidUsers를 만듭니다.함수의 매개 변수를 정의합니다. 예시:
Tbl: (TimeGenerated:datetime, Computer:string, EventID:string, SubjectDomainName:string, TargetDomainName:string, SubjectUserName:string)함수에는
parameter다음 쿼리가 있습니다.Tbl | where SubjectUserName !~ "AutoMatedService"다음 쿼리를 실행하여 매개 변수 함수를 호출합니다.
let Events = ( SecurityEvent | where EventID == 4728 ); ExcludeValidUsers(Events)
네 번째 옵션으로 함수를 사용합니다.join
let events = (
SecurityEvent
| where EventID == 4728
| where isnotempty(SubjectDomainName)
or isnotempty(TargetDomainName)
);
let ExcludeValidUsers = (
SecurityEvent
| where EventID == 4728
| where isnotempty(SubjectDomainName)
| where SubjectUserName =~ "AutoMatedService"
);
events
| join kind=leftanti ExcludeValidUsers on
$left.SubjectUserName == $right.SubjectUserName
고려 사항:
- 단순성 때문에 문(첫 번째 옵션)과 함께
where직접 필터를 사용하는 것이 좋습니다. 최적화된 성능을 위해서는 (네 번째 옵션)을 사용하지join마세요. - 쿼리를 최적화하려면 가능하면 및
!~대/소문자를 구분하지 않는 연산자를 피=~합니다. 값이 대/소문자를==구분하지 않는 경우 및!=연산자를 사용합니다.
활성 목록(조회) 예제: ArcSight
ArcSight의 활성 목록(조회) 규칙은 다음과 같습니다.
활성 목록(조회) 예제: KQL
이 규칙은 Cyber-Ark 예외 계정 관심 목록이 계정 필드가 있는 Microsoft Sentinel 있다고 가정합니다.
let Activelist=(
_GetWatchlist('Cyber-Ark Exception Accounts')
| project Account );
CommonSecurityLog
| where DestinationUserName in (Activelist)
| where DeviceVendor == "Cyber-Ark"
| where DeviceAction == "Get File Request"
| where DeviceCustomNumber1 != ""
| project DeviceAction, DestinationUserName,
TimeGenerated,SourceHostName,
SourceUserName, DeviceEventClassID
가장 많은 데이터를 필터링하는 문부터 where 시작하여 필터를 정렬합니다.
상관 관계(일치) 예제: ArcSight
다음은 문을 사용하여 Matching Event 기본 이벤트 집합에 대한 조건을 정의하는 샘플 ArcSight 규칙입니다.
상관 관계(일치) 예제: KQL
let event1 =(
SecurityEvent
| where EventID == 4728
);
let event2 =(
SecurityEvent
| where EventID == 4729
);
event1
| join kind=inner event2
on $left.TargetUserName==$right.TargetUserName
모범 사례:
- 쿼리를 최적화하려면 더 작은 테이블이 함수의
join왼쪽에 있는지 확인합니다. - 테이블의 왼쪽이 상대적으로 작으면(최대 100K 레코드) 더 나은 성능을 위해 를 추가
hint.strategy=broadcast합니다.
상관 관계(시간 창) 예제: ArcSight
다음은 문을 사용하여 Matching Event 기본 이벤트 집합에 대한 조건을 정의하고 필터 조건을 사용하는 Wait time 샘플 ArcSight 규칙입니다.
상관 관계(시간 창) 예제: KQL
let waittime = 10m;
let lookback = 1d;
let event1 = (
SecurityEvent
| where TimeGenerated > ago(waittime+lookback)
| where EventID == 4728
| project event1_time = TimeGenerated,
event1_ID = EventID, event1_Activity= Activity,
event1_Host = Computer, TargetUserName,
event1_UPN=UserPrincipalName,
AccountUsedToAdd = SubjectUserName
);
let event2 = (
SecurityEvent
| where TimeGenerated > ago(waittime)
| where EventID == 4729
| project event2_time = TimeGenerated,
event2_ID = EventID, event2_Activity= Activity,
event2_Host= Computer, TargetUserName,
event2_UPN=UserPrincipalName,
AccountUsedToRemove = SubjectUserName
);
event1
| join kind=inner event2 on TargetUserName
| where event2_time - event1_time < lookback
| where tolong(event2_time - event1_time ) >=0
| project delta_time = event2_time - event1_time,
event1_time, event2_time,
event1_ID,event2_ID,event1_Activity,
event2_Activity, TargetUserName, AccountUsedToAdd,
AccountUsedToRemove,event1_Host,event2_Host,
event1_UPN,event2_UPN
집계 예제: ArcSight
집계 설정이 있는 샘플 ArcSight 규칙은 10분 이내에 3개 일치합니다.
집계 예제: KQL
SecurityEvent
| summarize Count = count() by SubjectUserName,
SubjectDomainName
| where Count >3
다음 단계
이 문서에서는 ArcSight에서 Microsoft Sentinel 마이그레이션 규칙을 매핑하는 방법을 알아보았습니다.