"알림이 왔는데 어디서부터 시작해야 할지 모르겠어요."
"나는 KQL을 쓸 수 있지만, 매번 처음부터 쓰는 건 어렵다."
"조사 중에 너무 많은 시간이 걸리고, 초기 조치도 지연됩니다."
KQL(Kusto 쿼리 언어)은 Microsoft Sentinel과 Defender 제품의 로그를 검사하는 언어입니다.
잘 활용하면 초기 속도가 크게 달라집니다.
이번에는 현장에서 실제로 사용되는 '먼저 타격해야 할 세 가지 템플릿'을 소개하겠습니다.
1. 템플릿이 중요한 이유
사건 대응은 시간과의 싸움입니다.
매번 '어떤 표를 볼지'와 '어떤 항목을 필터링할까'를 생각하면, 중요한 초기 행동 시간이 녹아버릴 것입니다.
템플릿을 미리 준비한다면:
- 설문 시작 시간 단축
- 누락된 설문조사 감소
- 주니어 회원도 일정 수준의 연구를 할 수 있습니다.
2. 템플릿 (1): 로그인 지점에서의 조사
이는 의심스러운 로그인 전후의 행동을 전개하는 템플릿입니다.
KQL
타겟 사용자의 최근 로그인 기록
사인인 로그
| 여기서 TimeGenerated > 전(7d)
| 여기서 UserPrincipalName == "target@example.com"
| 프로젝트 TimeGenerated, UserPrincipalName, IPAddress, Location, AppDisplayName,
ConditionalAccessStatus, RiskLevelDuringSignIn, ResultType
| TimeGenerated 설명에 따른 순서
다음은 확인해야 할 몇 가지 사항입니다:
- IPAddress: 평소와 다른 국가/지역에서 접근하나요?
- RiskLevelDuringSignIn: 마이크로소프트의 AI가 위험을 결정하고 있나요?
- 조건부 접근 상태: 조건부 접근 권한을 우회하고 있나요?
- 결과유형: 성공(0) 또는 실패(50126 등)?
의심스러운 로그인 시도가 발견되면 그 IP에서 다른 계정으로도 시도가 있는지 확인하세요.
KQL
동일한 IP에서 여러 사용자에게 로그인 시도
사인인 로그
| 여기서 TimeGeneral은 > 전(24h)
| 어디서 IPAddress == "suspicious.ip.here"
| summarize count(), make_set(UserPrincipalName) by IPAddress
3. 템플릿 (2): 터미널 포인트에서의 조사
엔드포인트에서 의심스러운 행동이 감지되면, 이는 터미널의 전체 그림을 포착하는 템플릿입니다.
KQL
대상 장치의 최신 프로세스 출시 이력
디바이스프로세스이벤트
| 여기서 TimeGeneral은 > 전(24h)
| 여기서 DeviceName == "target-device-name"
| 프로젝트 TimeGenerated, DeviceName, InitiatingProcessFileName,
FileName, ProcessCommandLine, AccountName
| TimeGenerated 설명에 따른 순서
또한 네트워크 연결도 확인하세요.
KQL
대상 장치의 외부 통신 이력
디바이스 네트워크 이벤트
| 여기서 TimeGeneral은 > 전(24h)
| 여기서 DeviceName == "target-device-name"
| 여기서 RemoteIPType != "Private"
| 프로젝트 TimeGenerated, DeviceName, RemoteIP, RemoteURL, RemotePort,
InitiatingProcessFileName, ActionType
| TimeGenerated 설명에 따른 순서
확인 포인트:
- ProcessCommandLine:p owershell, cmd, wscript 등에서 의심스러운 명령 실행.
- RemoteUrl: 알려진 C2 도메인 및 의심스러운 IP와 통신
- InitiatingProcessFileName: 정식 프로세스로 위장된 실행 파일
4. 템플릿 (3): 이메일 시작 조사
이 템플릿은 피싱 이메일과 악성 첨부파일을 조사하는 데 사용됩니다.
KQL
특정 도메인의 이메일 수령 기록
이메일이벤트
| 여기서 TimeGenerated > 전(7d)
| 여기서 SenderFromDomain == "suspicious-domain.com"
| 프로젝트 TimeGenerated, SenderFromAddress, RecipientEmailAddress,
주제, 위협 유형, 배달행동, 배달위치
| TimeGenerated 설명에 따른 순서
또한 이메일을 받은 사용자가 첨부파일을 열었는지도 확인합니다.
KQL
이메일 수신 후 기기 활동 (클릭 후 추적)
이메일URLInfo
| 여기서 TimeGenerated > 전(7d)
| join kind=inner (
디바이스프로세스이벤트
| 여기서 TimeGenerated > 전(7d)
) $left. URL == $right. 프로세스명령줄
| 프로젝트 TimeGenerated, URL, DeviceName, FileName, AccountName
5. 팀과 템플릿을 공유하고 관리하는 방법
KQL 템플릿을 Sentinel에서 "저장된 쿼리"로 관리하거나 Git 저장소에서 Markdown 파일로 관리하는 것이 현실적입니다.
권장 관리 방법:
- GitHub에 KQL 쿼리 컬렉션 저장소를 생성하세요
- 파일 유형을 사고 유형(피싱/, 계정 침해 등)으로 나누기
- 사용 후 효과가 있었는지에 대한 댓글을 남기고 계속 개선해 주세요.
6. 컬러크루 시큐리티의 접근 방식
Colorkrew Security는 KQL 설문조사 템플릿 개발과 팀 내 구축을 지원합니다.
**초기 반응 속도가 피해의 규모를 결정합니다. **
템플릿 유지보수부터 설문 절차의 표준화까지, 현장에서 사용 가능하게 만들 것입니다.