고급 헌팅 쿼리 언어 알아보기

적용 대상:

  • Microsoft Defender XDR

고급 헌팅은 Kusto 쿼리 언어를 기반으로 합니다. Kusto 연산자 및 문을 사용하여 특수 스키마에서 정보를 찾는 쿼리를 생성할 수 있습니다.

이 짧은 비디오를 시청하여 편리한 Kusto 쿼리 언어 기본 사항을 알아보세요.

이러한 개념을 보다 잘 이해하려면 첫 번째 쿼리를 실행합니다.

첫 번째 쿼리 시도하기

Microsoft Defender 포털에서 헌팅으로 이동하여 첫 번째 쿼리를 실행합니다. 다음 예제를 사용합니다.

// Finds PowerShell execution events that could involve a download
union DeviceProcessEvents, DeviceNetworkEvents
| where Timestamp > ago(7d)
// Pivoting on PowerShell processes
| where FileName in~ ("powershell.exe", "powershell_ise.exe")
// Suspicious commands
| where ProcessCommandLine has_any("WebClient",
 "DownloadFile",
 "DownloadData",
 "DownloadString",
"WebRequest",
"Shellcode",
"http",
"https")
| project Timestamp, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine,
FileName, ProcessCommandLine, RemoteIP, RemoteUrl, RemotePort, RemoteIPType
| top 100 by Timestamp

고급 헌팅에서 이 쿼리 실행

쿼리의 시작 부분에 간단한 주석이 추가되어 해당 설명을 설명합니다. 이 설명은 나중에 쿼리를 저장하고 조직의 다른 사람들과 공유하기로 결정할 때 도움이 됩니다.

// Finds PowerShell execution events that could involve a download

쿼리 자체는 일반적으로 테이블 이름 다음에 파이프(|)로 시작하는 여러 요소로 시작됩니다. 이 예제에서는 두 테이블 DeviceProcessEventsDeviceNetworkEvents및 의 공용 구조체를 만들고 필요에 따라 파이프된 요소를 추가합니다.

union DeviceProcessEvents, DeviceNetworkEvents

시간 범위 설정

첫 번째 파이프된 요소는 이전 7일로 범위가 지정된 시간 필터입니다. 시간 범위를 제한하면 쿼리가 잘 수행되고 관리 가능한 결과를 반환하며 시간 초과를 방지하는 데 도움이 됩니다.

| where Timestamp > ago(7d)

참고

Kusto 시간 필터는 설정에서 지정한 표준 시간대에 관계없이 UTC에 있습니다.

특정 프로세스 확인

시간 범위 바로 뒤에 PowerShell 애플리케이션을 나타내는 프로세스 파일 이름을 검색합니다.

// Pivoting on PowerShell processes
| where FileName in~ ("powershell.exe", "powershell_ise.exe")

특정 명령 문자열 검색

그런 다음 쿼리는 일반적으로 PowerShell을 사용하여 파일을 다운로드하는 데 사용되는 명령줄에서 문자열을 찾습니다.

// Suspicious commands
| where ProcessCommandLine has_any("WebClient",
    "DownloadFile",
    "DownloadData",
    "DownloadString",
    "WebRequest",
    "Shellcode",
    "http",
    "https")

결과 열 및 길이 사용자 지정

이제 쿼리가 찾고자 하는 데이터를 명확하게 식별하므로 결과 모양을 정의할 수 있습니다. project 는 특정 열을 반환하고 top 결과 수를 제한합니다. 이러한 연산자는 결과가 형식이 잘 지정되고 합리적으로 크고 처리하기 쉬운지 확인하는 데 도움이 됩니다.

| project Timestamp, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine,
FileName, ProcessCommandLine, RemoteIP, RemoteUrl, RemotePort, RemoteIPType
| top 100 by Timestamp

쿼리 실행을 선택하여 결과를 확인합니다.

쿼리 결과를 차트로 보고 필터를 빠르게 조정할 수 있습니다. 지침은 쿼리 결과 작업에 대해 읽어보세요.

일반적인 쿼리 연산자 알아보기

방금 첫 번째 쿼리를 실행하고 해당 구성 요소에 대한 일반적인 아이디어를 가지고 있습니다. 그것은 약간 역추적하고 몇 가지 기본 사항을 배울 시간이다. 고급 헌팅에서 사용하는 Kusto 쿼리 언어는 다음을 포함하여 다양한 연산자를 지원합니다.

연산자 설명 및 사용법
where 조건자를 충족하는 행의 하위 집합으로 표를 필터링합니다.
summarize 입력 표의 내용을 집계하는 표를 생성합니다.
join 각 표에서 지정된 열의 값을 일치시켜 새 표를 구성하는 두 테이블의 행을 병합합니다. 방법을 알아보려면 KQL의 테이블 조 인을 참조하세요.
count 입력 레코드 집합의 레코드 수를 반환합니다.
top 지정된 열을 기준으로 정렬된 처음 N개의 레코드를 반환합니다.
limit 지정된 수의 행까지 반환합니다.
project 포함할 열을 선택하고 이름을 바꾸거나 삭제하고 새 계산된 열을 삽입합니다.
extend 계산된 열을 만들고 결과 집합에 추가합니다.
makeset Expr이 그룹에서 사용하는 고유한 값 집합의 동적(JSON) 배열을 반환합니다.
find 표 집합에서 조건자와 일치하는 행을 찾습니다.

이러한 연산자의 실제 예제를 보려면 고급 헌팅의 시작 섹션에서 해당 연산자를 실행합니다.

데이터 유형 이해

고급 헌팅은 다음과 같은 일반적인 형식을 포함하여 Kusto 데이터 형식을 지원합니다.

데이터 형식 설명 및 쿼리 의미
datetime 일반적으로 이벤트 타임스탬프를 나타내는 데이터 및 시간 정보입니다. 지원되는 날짜/시간 형식 참조
string 작은 따옴표(') 또는 큰 따옴표(")로 묶인 UTF-8의 문자열입니다. 문자열에 대해 자세히 알아보기
bool 이 데이터 유형은 true 또는 false 상태를 지원합니다. 지원되는 리터럴 및 연산자 참조
int 32비트 정수
long 64비트 정수

이러한 데이터 형식에 대해 자세히 알아보려면 Kusto 스칼라 데이터 형식에 대해 읽어보세요.

쿼리 작성시 도움말 보기

다음 기능을 활용하여 쿼리를 더 빠르게 작성하세요.

  • Autosuggest - 쿼리를 작성할 때 고급 헌팅은 IntelliSense의 제안을 제공합니다.
  • 스키마 트리 - 테이블 목록과 해당 열이 작업 영역 옆에 제공되는 스키마 표현입니다. 자세한 내용을 보려면 항목 위로 마우스를 가져갑니다. 항목을 두 번 클릭하여 쿼리 편집기에 삽입합니다.
  • 스키마 참조 - 지원되는 이벤트 유형(ActionType 값) 및 샘플 쿼리뿐만 아니라 테이블 및 열 설명이 포함된 포털 내 참조

편집기에서 여러 쿼리 작업

쿼리 편집기를 사용하여 여러 쿼리를 실험할 수 있습니다. 여러 쿼리를 사용하려면 다음을 수행합니다.

  • 각 쿼리를 빈 줄로 구분합니다.
  • 쿼리의 모든 부분에 커서를 놓고 쿼리를 실행하기 전에 해당 쿼리를 선택합니다. 그러면 선택한 쿼리만 실행됩니다. 다른 쿼리를 실행하려면 커서를 적절하게 이동하고 쿼리 실행을 선택합니다.

Microsoft Defender 포털의 **새 쿼리** 페이지에서 여러 쿼리를 실행하는 예제

보다 효율적인 작업 영역을 위해 동일한 헌팅 페이지에서 여러 탭을 사용할 수도 있습니다. 새 쿼리를 선택하여 새 쿼리에 대한 탭을 엽니다.

Microsoft Defender 포털에서 고급 헌팅에서 새 Create 선택하여 새 탭 열기

그런 다음 새 브라우저 탭을 열지 않고도 다른 쿼리를 실행할 수 있습니다.

Microsoft Defender 포털에서 고급 헌팅 페이지를 벗어나지 않고 다른 쿼리 실행

참고

고급 헌팅과 함께 여러 브라우저 탭을 사용하면 저장되지 않은 쿼리가 손실될 수 있습니다. 이러한 일이 발생하지 않도록 하려면 별도의 브라우저 탭 대신 고급 헌팅 내에서 탭 기능을 사용합니다.

샘플 쿼리 사용

시작 섹션에서는 자주 사용하는 연산자를 사용하는 몇 가지 간단한 쿼리를 제공합니다. 이러한 쿼리를 실행하고 약간 수정해 보세요.

Microsoft Defender 포털의 **고급 헌팅** 페이지의 **시작** 섹션

참고

기본 쿼리 샘플과는 별도로 특정 위협 헌팅 시나리오에 대한 공유 쿼리에 액세스할 수도 있습니다. 페이지 왼쪽 또는 GitHub 쿼리 리포지토리의 공유 쿼리를 탐색합니다.

쿼리 언어 설명서에 액세스

Kusto 쿼리 언어와 지원되는 연산자에 대한 자세한 내용은 Kusto 쿼리 언어 설명서를 참조하세요.

참고

이 문서의 일부 테이블은 엔드포인트용 Microsoft Defender 사용할 수 없습니다. Microsoft Defender XDR 켜서 더 많은 데이터 원본을 사용하여 위협을 헌팅합니다. 엔드포인트용 Microsoft Defender 고급 헌팅 쿼리 마이그레이션의 단계에 따라 고급 헌팅 워크플로를 엔드포인트용 Microsoft Defender Microsoft Defender XDR 이동할 수 있습니다.

더 자세히 알아보고 싶으신가요? 기술 커뮤니티: Microsoft Defender XDR Tech Community의 Microsoft 보안 커뮤니티와 Engage.