KQL 작업은 Microsoft Sentinel 데이터 레이크의 데이터에 대한 일회성 또는 예약된 KQL 쿼리입니다. 다음과 같은 조사 및 분석 시나리오에 작업을 사용합니다.
- 인시던트 조사 및 대응을 위한 오랫동안 실행되는 일회성 쿼리
- 충실도가 낮은 로그를 사용하여 보강 워크플로를 지원하는 데이터 집계 작업
- 회고 분석을 위한 TI(기록 위협 인텔리전스) 일치 검사
- 여러 테이블에서 비정상적인 패턴을 식별하는 변칙 검색 검사
KQL 작업은 쿼리가 서로 다른 데이터 세트에 조인 또는 공용 구조체를 사용하는 경우에 특히 효과적입니다.
작업을 사용하여 데이터 레이크 계층에서 분석 계층으로 데이터를 승격합니다. 분석 계층에서 고급 헌팅 KQL 편집기를 사용하여 데이터를 쿼리합니다. 데이터를 분석 계층으로 승격하면 다음과 같은 이점이 있습니다.
- 분석 계층의 현재 및 기록 데이터를 결합하여 데이터에 대한 고급 분석 및 기계 학습 모델을 실행합니다.
- 분석 계층에서 쿼리를 실행하여 쿼리 비용을 줄입니다.
- 여러 작업 영역의 데이터를 분석 계층의 단일 작업 영역으로 결합합니다.
- 분석 계층에서 Microsoft Entra ID, Microsoft 365 및 Microsoft Resource Graph 데이터를 결합하여 데이터 원본에서 고급 분석을 실행합니다.
비고
분석 계층의 스토리지는 데이터 레이크 계층보다 더 높은 청구 속도를 발생합니다. 비용을 줄이려면 추가로 분석해야 하는 데이터만 선택하십시오. 쿼리에서 KQL을 사용하여 필요한 열만 프로젝터하고 데이터를 필터링하여 분석 계층으로 승격된 데이터의 양을 줄입니다.
데이터를 새 테이블로 승격하거나 분석 계층의 기존 테이블에 결과를 추가할 수 있습니다. 새 테이블을 만들 때 테이블 이름에 _KQL_CL 접미사가 지정되어 KQL 작업에서 테이블을 만들었음을 나타냅니다.
필수 조건
Microsoft Sentinel 데이터 레이크에서 KQL 작업을 만들고 관리하려면 다음 필수 구성 요소가 필요합니다.
데이터 레이크에 온보딩
Microsoft Sentinel 데이터 레이크에서 KQL 작업을 만들고 관리하려면 먼저 데이터 레이크에 온보딩해야 합니다. 데이터 레이크에 온보딩하는 방법에 대한 자세한 내용은 Microsoft Sentinel 데이터 레이크에 온보딩을 참조하세요.
권한
Microsoft Entra ID 역할은 데이터 레이크의 모든 작업 영역에서 광범위한 액세스를 제공합니다. 모든 작업 영역에서 테이블을 읽고, 분석 계층에 쓰고, KQL 쿼리를 사용하여 작업을 예약하려면 지원되는 Microsoft Entra ID 역할 중 하나가 있어야 합니다. 역할 및 권한에 대한 자세한 내용은 Microsoft Sentinel 데이터 레이크 역할 및 사용 권한을 참조하세요.
분석 계층에서 새 사용자 지정 테이블을 만들려면 Log Analytics 작업 영역의 Log Analytics 기여자 역할을 데이터 레이크 관리 ID에 할당합니다.
역할을 할당하려면 다음 단계를 수행합니다.
- Azure Portal에서 역할을 할당하려는 Log Analytics 작업 영역으로 이동합니다.
- 왼쪽 탐색 창에서 액세스 제어(IAM)를 선택합니다.
- 역할 할당 추가를 선택합니다.
- 역할 테이블에서 *Log Analytics 기여자, 다음을 선택합니다.
- 관리 ID를 선택한 다음 멤버 선택을 선택합니다.
- 귀하의 데이터 레이크 관리 ID는
msg-resources-<guid>라는 이름이 지정된 시스템 할당 관리 ID입니다. 관리 ID를 선택한 다음, 선택을 선택합니다. - 검토 및 할당을 선택합니다.
관리 ID에 역할을 할당하는 방법에 대한 자세한 내용은 Azure Portal을 사용하여 Azure 역할 할당을 참조하세요.
작업 생성
일정 또는 일회성으로 실행할 작업을 만들 수 있습니다. 작업을 만들 때 결과의 대상 작업 영역과 테이블을 지정합니다. 결과를 새 테이블에 쓰거나 분석 계층의 기존 테이블에 추가할 수 있습니다. 새 KQL 작업을 만들거나 쿼리 및 작업 설정을 포함하는 템플릿에서 작업을 만들 수 있습니다. 자세한 내용은 템플릿에서 KQL 작업 만들기를 참조하세요.
KQL 쿼리 편집기 또는 작업 관리 페이지에서 작업 만들기 프로세스를 시작합니다.
작업 이름을 입력합니다. 작업 이름은 테넌트에 대해 고유해야 합니다. 작업 이름은 최대 256자를 포함할 수 있습니다. 작업 이름에는
#나-를 사용할 수 없습니다.작업의 컨텍스트와 용도를 제공하는 작업 설명을 입력합니다.
작업 영역 선택 드롭다운에서 대상 작업 영역을 선택합니다. 이 작업 영역은 쿼리 결과를 작성하려는 분석 계층에 있습니다.
대상 테이블을 선택합니다.
새 테이블을 만들려면 새 테이블 만들기를 선택하고 테이블 이름을 입력합니다. KQL 작업으로 생성된 테이블에는 테이블 이름에 _KQL_CL이라는 접미사가 추가됩니다.
기존 테이블에 추가하려면 기존 테이블에 추가를 선택하고 드롭다운 목록을 구성하는 테이블 이름을 선택합니다. 기존 테이블에 추가할 때 쿼리 결과는 기존 테이블의 스키마와 일치해야 합니다.
쿼리 준비 패널에서 쿼리를 검토하거나 작성합니다. 날짜 범위가 쿼리에 지정되지 않은 경우 시간 선택기가 작업에 필요한 시간 범위로 설정되어 있는지 확인합니다.
선택한 작업 영역 드롭다운에서 쿼리를 실행할 작업 영역을 선택합니다. 이러한 작업 영역은 쿼리하려는 테이블이 있는 원본 작업 영역입니다. 선택한 작업 영역에 따라 쿼리에 사용할 수 있는 테이블이 결정됩니다. 선택한 작업 영역은 쿼리 편집기에서 모든 쿼리 탭에 적용됩니다. 여러 작업 영역을
union()사용하는 경우 연산자는 기본적으로 서로 다른 작업 영역의 이름과 스키마가 같은 테이블에 적용됩니다. 연산자를workspace()사용하여 특정 작업 영역에서 테이블을 쿼리합니다(예:workspace("MyWorkspace").AuditLogs).비고
기존 테이블에 쓰는 경우 쿼리는 대상 테이블 스키마와 일치하는 스키마를 사용하여 결과를 반환해야 합니다. 쿼리가 올바른 스키마를 사용하여 결과를 반환하지 않으면 작업이 실행되면 실패합니다.
다음을 선택합니다.
쿼리 작업 예약 페이지에서 작업을 한 번 실행할지 또는 일정에 따라 실행할지를 선택합니다. 한 번 선택하면 작업 정의가 완료되는 즉시 작업이 실행됩니다. 일정을 선택하는 경우 작업을 실행할 날짜와 시간을 지정하거나 되풀이 일정에 따라 작업을 실행할 수 있습니다.
한 번 또는 예약된 작업을 선택합니다.
비고
일회성 작업을 편집할 경우 즉시 실행이 트리거됩니다.
일정을 선택한 경우 다음 세부 정보를 입력합니다.
- 드롭다운에서 반복 빈도 를 선택합니다. 분, 매시간, 매일, 매주 또는 매월을 선택할 수 있습니다.
- 선택한 빈도와 관련하여 작업을 실행할 빈도에 대해 모든 값 반복 을 설정합니다.
- 일정 설정에서 원본 날짜 및 시간을 입력합니다. 시작 필드의 작업 시작 시간은 작업을 만든 후 30분 이상이어야 합니다. 작업은 매 실행 드롭다운에서 선택한 빈도에 따라 이 날짜와 시간부터 실행됩니다.
- 작업 일정이 완료 되는 시기를 지정할 날짜 및 시간을 선택합니다. 일정을 무기한으로 계속하려면 무기한 실행하도록 작업 설정을 선택합니다.
사용자의 로캘에 대해 작업 시작 및 시간이 설정됩니다.
비고
예를 들어 30분마다 높은 빈도로 작업을 실행하도록 예약하는 경우 데이터 레이크에서 데이터를 사용할 수 있게 되는 데 걸리는 시간을 고려해야 합니다. 일반적으로 새로 수집된 데이터를 쿼리에 사용할 수 있기까지 최대 15분의 대기 시간이 있습니다.
다음을 선택하여 작업 세부 정보를 검토합니다.
작업 세부 정보를 검토하고 제출 을 선택하여 작업을 만듭니다. 작업이 일회성 작업인 경우 제출을 선택한 후 실행됩니다. 작업이 예약된 경우 작업 페이지의 작업 목록에 추가되고 시작 데이터 및 시간에 따라 실행됩니다.
템플릿에서 작업 만들기
미리 정의된 작업 템플릿에서 KQL 작업을 만들 수 있습니다. 작업 템플릿에는 대상 작업 영역, 테이블, 일정 및 설명과 같은 KQL 쿼리 및 작업 설정이 포함됩니다. 사용자 고유의 작업 템플릿을 만들거나 Microsoft에서 제공하는 기본 제공 템플릿을 사용할 수 있습니다.
템플릿에서 작업을 만들려면 다음 단계를 수행합니다.
작업 페이지 또는 KQL 쿼리 편집기에서 작업 만들기를 선택한 다음 템플릿에서 만들기를 선택합니다.
작업 템플릿 페이지의 사용 가능한 템플릿 목록에서 사용할 템플릿을 선택합니다.
템플릿에서 설명 및 KQL 쿼리 를 검토합니다.
템플릿에서 작업 만들기를 선택합니다.
새 KQL 작업 만들기 페이지와 함께 작업 만들기 마법사가 열립니다. 대상 작업 영역을 제외하고 템플릿에서 미리 채워진 작업 세부 정보입니다.
작업 영역 선택 드롭다운에서 대상 작업 영역을 선택합니다 .
필요에 따라 작업 세부 정보를 검토하고 수정한 다음 다음 을 선택하여 작업 만들기 마법사를 진행합니다.
나머지 단계는 새 작업을 만드는 것과 동일합니다. 필드는 템플릿에서 미리 채워지고 필요에 따라 수정할 수 있습니다. 자세한 내용은 작업 만들기를 참조하세요.
다음과 같은 템플릿이 제공됩니다.
| 서식 파일 이름 | 카테고리 |
|---|---|
비정상적인 로그인 위치 증가Entra ID 로그인 로그의 추세 분석을 분석하여 위치 다양성의 추세 줄을 계산하여 애플리케이션 전체의 사용자에게 비정상적인 위치 변경을 검색합니다. 위치 가변성이 가장 가파르게 증가하는 상위 3개 계정을 강조 표시하고 21일 기간 내에 연결된 위치를 나열합니다. 대상 테이블: UserAppSigninLocationTrend 쿼리 조회: 1일 일정: 매일 시작 날짜: 현재 날짜 + 1시간 |
사냥 |
위치 변경에 따른 비정상적인 로그인 동작엔트라 ID 사용자 및 앱의 위치 변경에 따라 비정상적인 로그인 동작을 식별하여 갑작스러운 동작 변경을 감지합니다. 대상 테이블: UserAppSigninLocationAnomalies 쿼리 조회: 1일 일정: 매일 시작 날짜: 현재 날짜 + 1시간 |
이상 탐지 |
앱별 드문 활동 조사조용히 권한을 만들 수 있는 드문 작업(예: 동의, 권한 부여)을 수행하는 앱을 찾습니다. 현재 날짜와 지난 14일간의 감사를 비교하여 새 감사 활동을 식별합니다. Azure Apps 및 자동화된 승인에 의한 사용자/그룹 추가 또는 제거와 관련된 악의적인 활동을 추적하는 데 유용합니다. 대상 테이블: AppAuditRareActivity 쿼리 조회: 14일 일정: 매일 시작 날짜: 현재 날짜 + 1시간 |
사냥 |
Azure 드문 구독 수준 작업Azure 활동 로그를 기반으로 중요한 Azure 구독 수준 이벤트를 식별합니다. 예를 들어 백업을 만드는 데 사용되지만 공격자가 디스크에서 해시를 덤프하거나 중요한 정보를 추출하는 데 오용될 수 있는 작업 이름 "스냅샷 만들기 또는 업데이트"를 기반으로 모니터링합니다. 대상 테이블: AzureSubscriptionSensitiveOps 쿼리 조회: 14일 일정: 매일 시작 날짜: 현재 날짜 + 1시간 |
사냥 |
AuditLogs의 앱별 일일 활동 추세지난 14일 동안 사용자 또는 앱에서 발생하는 "애플리케이션에 대한 동의" 작업을 식별합니다. 이는 나열된 AzureApp에 액세스할 수 있는 권한이 악의적인 행위자에게 제공되었음을 나타낼 수 있습니다. 애플리케이션에 동의하고, 서비스 주체를 추가하고, Auth2PermissionGrant 이벤트를 추가하는 경우는 드물어야 합니다. 사용 가능한 경우 "애플리케이션에 동의"를 수행한 동일한 계정의 CorrleationId를 기반으로 AuditLogs에서 추가 컨텍스트가 추가됩니다. 대상 테이블: AppAuditActivityBaseline 쿼리 조회: 14일 일정: 매일 시작 날짜: 현재 날짜 + 1시간 |
기준선 |
SignInLogs의 사용자 또는 앱당 일일 위치 추세모든 사용자 로그인, 위치 수 및 앱 사용에 대한 일일 추세를 작성합니다. 대상 테이블: UserAppSigninLocationBaseline 쿼리 조회: 1일 일정: 매일 시작 날짜: 현재 날짜 + 1시간 |
기준선 |
대상 IP당 일일 네트워크 트래픽 추세바이트와 고유 피어를 포함한 기준선을 만들어 비코닝 및 데이터 반출을 감지합니다. 대상 테이블: NetworkTrafficDestinationIPDailyBaseline 쿼리 조회: 1일 일정: 매일 시작 날짜: 현재 날짜 + 1시간 |
기준선 |
데이터 전송 통계를 사용하는 대상 IP당 일일 네트워크 트래픽 추세볼륨 추세, 폭발 반경 예측 등 아웃바운드 대상에 도달한 내부 호스트를 식별합니다. 대상 테이블: NetworkTrafficDestinationIPTrend 쿼리 조회: 1일 일정: 매일 시작 날짜: 현재 날짜 + 1시간 |
사냥 |
원본 IP당 일일 네트워크 트래픽 추세바이트 및 고유 피어를 포함한 기준선을 생성하여 네트워크 비콘 활동 및 데이터 반출을 감지합니다. 대상 테이블: NetworkTrafficSourceIPDailyBaseline 쿼리 조회: 1일 일정: 매일 시작 날짜: 현재 날짜 + 1시간 |
기준선 |
데이터 전송 통계를 사용하는 원본 IP당 일일 네트워크 트래픽 추세오늘의 연결 및 바이트는 호스트의 일별 기준선에 대해 평가되어 관찰된 동작이 설정된 패턴에서 크게 벗어나는지 여부를 확인합니다. 대상 테이블: NetworkTrafficSourceIPTrend 쿼리 조회: 1일 일정: 매일 시작 날짜: 현재 날짜 + 1시간 |
사냥 |
사용자 및 앱당 일일 로그인 위치 추세일반적인 지리적 및 IP를 사용하여 각 사용자 또는 애플리케이션에 대한 로그인 기준을 만들어 대규모로 효율적이고 비용 효율적인 변칙 검색을 지원합니다. 대상 테이블: UserAppSigninLocationDailyBaseline 쿼리 조회: 1일 일정: 매일 시작 날짜: 현재 날짜 + 1시간 |
기준선 |
일일 프로세스 실행 추세새로운 프로세스 및 보급을 식별하여 "새로운 드문 프로세스" 검색을 더 쉽게 만듭니다. 대상 테이블: EndpointProcessExecutionBaseline 쿼리 조회: 1일 일정: 매일 시작 날짜: 현재 날짜 + 1시간 |
기준선 |
앱별 희귀한 Entra ID 사용자 에이전트일반적으로 특정 애플리케이션에 사용되는 UserAgent 유형(즉, 브라우저, 사무실 응용 프로그램 등)의 기준을 며칠 동안 되돌아보면 설정합니다. 그런 다음 현재 날짜에서 이 패턴과의 차이를 검색하는데, 이는 이 애플리케이션과 결합해 이전에 본 적이 없는 사용자 에이전트 유형을 말합니다. 대상 테이블: UserAppRareUserAgentAnomalies 쿼리 조회: 7일 일정: 매일 시작 날짜: 현재 날짜 + 1시간 |
이상 탐지 |
네트워크 로그 IOC 일치CommonSecurityLog에서 일치 항목을 검색하여 TI(위협 인텔리전스)에서 IOC(손상 IP 표시기)를 식별합니다. 대상 테이블: NetworkLogIOCMatches 쿼리 조회: 1시간 일정: 매시간 시작 날짜: 현재 날짜 + 1시간 |
사냥 |
지난 24시간 동안 관찰된 새로운 프로세스안정적인 환경의 새 프로세스는 악의적인 활동을 나타낼 수 있습니다. 이러한 이진 파일이 실행된 로그인 세션을 분석하면 공격을 식별하는 데 도움이 될 수 있습니다. 대상 테이블: EndpointNewProcessExecutions 쿼리 조회: 14일 일정: 매일 시작 날짜: 현재 날짜 + 1시간 |
사냥 |
이전에 보이지 않는 IP를 통한 SharePoint 파일 작업새 IP 주소에서 파일 업로드/다운로드 작업의 중요한 변경에 대한 임계값을 설정하여 사용자 동작을 사용하여 변칙을 식별합니다. 일반적인 동작의 기준을 설정하고, 최근 활동과 비교하고, 기본 임계값인 25를 초과하는 편차에 플래그를 지정합니다. 대상 테이블: SharePointFileOpsNewIPs 쿼리 조회: 14일 일정: 매일 시작 날짜: 현재 날짜 + 1시간 |
사냥 |
Palo Alto 잠재적 네트워크 비콘되풀이 시간 델타 패턴을 기반으로 Palo Alto 네트워크 트래픽 로그에서 비콘 패턴을 식별합니다. 쿼리는 다양한 KQL 함수를 사용하여 시간 차이를 계산한 다음 하루 동안 관찰된 전체 이벤트와 비교하여 비콘닝의 백분율을 찾습니다. 대상 테이블: PaloAltoNetworkBeaconingTrend 쿼리 조회: 1일 일정: 매일 시작 날짜: 현재 날짜 + 1시간 |
사냥 |
정상적인 시간 외의 Windows 의심스러운 로그인지난 14일간의 로그인 활동과 비교하여 기록 패턴에 따라 변칙에 플래그를 지정하여 사용자의 정상 시간 외에 비정상적인 Windows 로그인 이벤트를 식별합니다. 대상 테이블: WindowsLoginOffHoursAnomalies 쿼리 조회: 14일 일정: 매일 시작 날짜: 현재 날짜 + 1시간 |
이상 탐지 |
고려사항 및 제한사항
Microsoft Sentinel 데이터 레이크에서 작업을 만들 때는 다음과 같은 제한 사항 및 모범 사례를 고려합니다.
KQL
다음을 제외한 모든 KQL 연산자 및 함수가 지원됩니다.
adx()arg()externaldata()ingestion_time()
stored_query_results명령을 사용할 때, KQL 쿼리에서 시간 범위를 제공하세요. 쿼리 편집기 위의 시간 선택기는 이 명령에서 작동하지 않습니다.사용자 정의 함수는 지원되지 않습니다.
직업
- 작업 이름은 테넌트에 대해 고유해야 합니다.
- 작업 이름은 최대 256자까지 가능합니다.
- 작업 이름에는 을
#-포함할 수 없습니다. - 작업 시작 시간은 작업을 만들거나 편집한 후 30분 이상이어야 합니다.
데이터 레이크 수집 대기 시간
데이터 레이크 계층은 콜드 스토리지에 데이터를 저장합니다. 핫 또는 거의 실시간 분석 계층과 달리 콜드 스토리지는 장기 보존 및 비용 효율성에 최적화되어 있으며 새로 수집된 데이터에 대한 즉각적인 액세스를 제공하지 않습니다. 데이터 레이크의 기존 테이블에 새 행을 추가하면 데이터를 쿼리할 수 있기까지 최대 15분의 일반적인 대기 시간이 있습니다. 쿼리를 실행하고 KQL 작업을 예약할 때 아직 사용할 수 없는 데이터를 방지하도록 조회 기간 및 작업 일정을 구성하여 수집 대기 시간을 고려합니다.
아직 사용할 수 없는 데이터를 쿼리하지 않으려면 KQL 쿼리 또는 작업에 지연 매개 변수를 포함합니다. 예를 들어 자동화된 작업을 예약할 때 쿼리의 종료 시간을 15분의 일반적인 데이터 준비 대기 시간과 일치하도록 now() - delaydelay 설정합니다. 이 방법을 사용하면 쿼리가 완전히 수집되고 분석할 준비가 된 데이터만을 대상으로 합니다.
let lookback = 15m;
let delay = 15m;
let endTime = now() - delay;
let startTime = endTime - lookback;
CommonSecurityLog
| where TimeGenerated between (startTime .. endTime)
이 방법은 짧은 조회 기간 또는 빈번한 실행 간격이 있는 작업에 효과적입니다.
늦게 도착하는 데이터가 누락될 위험을 줄이기 위해 조회 기간을 작업 빈도와 겹치는 것이 좋습니다.
자세한 내용은 예약된 분석 규칙에서 수집 지연 처리하기를 참조하세요.
열 이름
다음 표준 열은 내보내기에서 지원되지 않습니다. 수집 프로세스는 대상 계층에서 이러한 열을 덮어씁니다.
테넌트아이디
_TimeReceived
유형
소스 시스템
_리소스아이디
_서브스크립션아이디
_ItemId
_BilledSize
_IsBillable (과금 가능 여부)
_WorkspaceId
TimeGenerated는 2일보다 오래된 경우 덮어씁니다. 원래 이벤트 시간을 유지하려면 원본 타임스탬프를 별도의 열에 씁니다.
서비스 제한은 Microsoft Sentinel 데이터 레이크 서비스 제한을 참조하세요.
비고
작업의 쿼리가 1시간 제한을 초과하면 부분 결과가 승격될 수 있습니다.
KQL 작업에 대한 서비스 매개 변수 및 제한
다음 표에서는 Microsoft Sentinel 데이터 레이크의 KQL 작업에 대한 서비스 매개 변수 및 제한을 나열합니다.
| 카테고리 | 매개 변수/제한 |
|---|---|
| 테넌트당 동시 작업 실행 | 3 |
| 작업 쿼리 실행 시간 제한 | 1시간 |
| 테넌트당 작업(활성화된 작업) | 100 |
| 작업당 출력 테이블 수 | 1 |
| 쿼리 범위 | 여러 작업 영역 |
| 쿼리 시간 범위 | 최대 12년 |
문제 해결 팁 및 오류 메시지는 Microsoft Sentinel 데이터 레이크에 대한 KQL 쿼리 문제 해결을 참조하세요.