다음을 통해 공유


요약 규칙을 사용하여 Microsoft Sentinel 데이터 집계(미리 보기)

Microsoft Sentinel의 요약 규칙을 사용하여 모든 로그 계층에서 보다 원활한 보안 작업 환경을 위해 백그라운드에서 큰 데이터 집합을 집계합니다. 요약 데이터는 사용자 지정 로그 테이블에 미리 컴파일되며 저렴한 로그 계층에서 파생된 데이터에서 실행되는 쿼리를 포함하여 빠른 쿼리 성능을 제공합니다. 요약 규칙은 데이터를 최적화하는 데 도움이 되어 다음 이점을 얻을 수 있습니다.

  • 특히 보안 및 인시던트 분석, 월별 또는 연간 비즈니스 보고서 등에 필요한 대규모 데이터 집합 및 시간 범위에 대한 분석 및 보고서입니다.
  • 비용 절감은 자세한 로그를 더 저렴한 로그 계층에서 필요에 따라 원하는 기간만큼 보관하고, 분석 및 보고를 위해 요약된 데이터만 분석 테이블로 전송하는 것입니다.
  • 요약된 공유 가능한 데이터에서 개인 정보 세부 정보를 제거하거나 암호화하고, 원시 데이터가 있는 테이블에 대한 액세스를 제한하여 보안 및 데이터 개인 정보 보호를 강화합니다.

감지, 조사, 헌팅 및 보고 활동에서 KQL(Kusto 쿼리 언어)을 통해 요약 규칙 결과에 액세스합니다. 기록 조사, 헌팅 및 규정 준수 활동에서 더 긴 기간 동안 요약 규칙 결과를 사용합니다.

요약 규칙 결과는 분석 데이터 계획에 따라 별도의 테이블에 저장되며 그에 따라 요금이 청구됩니다. 데이터 계획 및 스토리지 비용에 대한 자세한 내용은 Log Analytics 작업 영역의 사용 패턴에 따라 테이블 계획 선택을 참조하세요.

중요합니다

요약 규칙은 현재 미리 보기로 제공됩니다. 베타, 미리 보기 또는 아직 일반 공급으로 릴리스되지 않은 Azure 기능에 적용되는 추가 법적 용어는 Microsoft Azure 미리 보기에 대한 추가 사용 약관 을 참조하세요.

Microsoft Sentinel은 일반적으로 Microsoft Defender XDR 또는 E5 라이선스가 없는 고객을 포함하여 Microsoft Defender 포털에서 Microsoft의 통합 보안 운영 플랫폼 내에서 사용할 수 있습니다. 자세한 내용은 Microsoft Defender 포털에서 Microsoft Sentinel을 참조하세요.

필수 조건

Microsoft Sentinel에서 요약 규칙을 만들려면:

규칙을 만들기 전에 로그 페이지에서 요약 규칙 쿼리를 실험하는 것이 좋습니다. 쿼리가 쿼리 제한에 도달하지 않거나 쿼리 제한에 근접하지 않는지 확인하고 쿼리가 의도한 스키마 및 예상 결과를 생성하는지 확인합니다. 쿼리가 쿼리 제한에 근접한 경우 더 작은 binSize를 사용하여 bin당 더 적은 데이터를 처리하는 것이 좋습니다. 더 적은 레코드를 반환하거나 볼륨이 높은 필드를 제거하도록 쿼리를 수정할 수도 있습니다.

요약 규칙 만들기

특정 대용량 데이터 집합을 동적 표로 집계하는 새 요약 규칙을 만듭니다. 집계된 데이터 집합이 원시 데이터에서 업데이트되는 빈도를 결정하는 규칙 빈도를 구성합니다.

  1. Defender 포털에서 Microsoft Sentinel > 구성 > 요약 규칙(미리 보기)을 선택합니다. Azure Portal의 Microsoft Sentinel 탐색 메뉴의 구성에서 요약 규칙(미리 보기)을 선택합니다. 예시:

    Azure Portal의 요약 규칙 페이지 스크린샷.

  2. + 만들기를 선택하고 다음 세부 정보를 입력합니다.

    • 이름입니다. 규칙의 의미 있는 이름을 입력합니다.

    • 설명입니다. 선택적 설명을 입력합니다.

    • 대상 테이블입니다. 데이터가 집계되는 사용자 지정 로그 표를 정의합니다.

      • 기존 사용자 지정 로그 테이블을 선택하는 경우 사용할 테이블을 선택합니다.

      • 새 사용자 지정 로그 테이블을 선택하는 경우 테이블의 의미 있는 이름을 입력합니다. 전체 표 이름은 <tableName>_CL 구문을 사용합니다.

  3. 작업 영역에서 SummaryLogs 진단 설정을 사용하여 과거 실행 및 실패에 대한 가시성을 확보할 것을 권장합니다. SummaryLogs 진단 설정을 사용하도록 설정하지 않으면 진단 설정 영역에서 사용하도록 설정하라는 메시지가 표시됩니다.

    SummaryLogs 진단 설정이 이미 사용하도록 설정되어 있지만 설정을 수정하려면 고급 진단 설정 구성을 선택합니다. 요약 규칙 마법사 페이지로 돌아오면 새로 고침을 선택하여 설정 세부 정보를 새로 고쳐야 합니다.

    중요합니다

    SummaryLogs 진단 설정에는 추가 비용이 있습니다. 자세한 내용은 Azure Monitor의 진단 설정을 참조하세요.

  4. 다음 선택: 계속하려면 요약 논리>를 설정합니다.

  5. 요약 논리 설정 페이지에서 요약 쿼리를 입력합니다. 예를 들어 Google Cloud Platform에서 콘텐츠를 가져오려면 다음을 입력할 수 있습니다.

    GCPAuditLogs
    | where ServiceName == 'pubsub.googleapis.com'
    | summarize count() by Severity
    

    자세한 내용은 Azure Monitor의 샘플 요약 규칙 시나리오KQL(Kusto Query Language)을 참조하세요.

  6. 미리 보기 결과를 선택하여 구성된 쿼리를 사용하여 수집한 데이터의 예를 표시합니다.

  7. 쿼리 예약 영역에서 다음 세부 정보를 정의합니다.

    • 규칙을 실행하는 빈도
    • 어떤 종류의 지연으로든 몇 분 안에 규칙을 실행할지 여부
    • 규칙 실행을 시작하려는 때

    예약에 정의된 시간은 데이터의 timegenerated 열을 기반으로 합니다.

  8. 다음: 검토 + 만들기 >>저장 를 선택하여 요약 규칙을 완료합니다.

기존 요약 규칙은 규칙 상태를 검토할 수 있는 요약 규칙(미리 보기) 페이지에 나열됩니다. 각 규칙에 대해 행 끝에 있는 옵션 메뉴를 선택하여 다음 작업을 수행합니다.

  • 즉시 쿼리를 실행하는 것처럼 로그 페이지에서 규칙의 현재 데이터 보기
  • 선택한 규칙의 실행 기록 보기
  • 규칙을 사용 안 함 또는 사용으로 설정합니다.
  • 규칙 구성 편집

규칙을 삭제하려면 규칙 행을 선택한 다음 페이지 맨 위에 있는 도구 모음에서 삭제 를 선택합니다.

참고 항목

또한 Azure Monitor는 API 또는 ARM(Azure Resource Monitor) 템플릿을 통해 요약 규칙 만들기를 지원합니다. 자세한 내용은 요약 규칙 만들기 또는 업데이트를 참조하세요.

샘플 요약 규칙 시나리오

이 섹션에서는 Microsoft Sentinel에서 요약 규칙을 만드는 일반적인 시나리오와 각 규칙을 구성하는 방법에 대한 권장 사항을 검토합니다. 자세한 정보와 예시는 요약 규칙을 사용한 보조 로그(샘플 프로세스)보조 로그 수집에 사용할 로그 원본을 참조하세요.

네트워크 트래픽에서 악성 IP 주소를 빠르게 찾기

시나리오: 위협 사냥꾼이며, 팀의 목표 중 하나는 지난 90일 동안 활성 인시던트의 네트워크 트래픽 로그에서 악의적인 IP 주소가 상호 작용한 경우의 모든 인스턴스를 식별하는 것입니다.

과제: Microsoft Sentinel은 현재 하루에 여러 테라바이트의 네트워크 로그를 수집합니다. 악성 IP 주소와 일치하는 항목을 찾으려면 빠르게 탐색해야 합니다.

해결 방법: 요약 규칙을 사용하여 다음을 수행하는 것이 좋습니다.

  1. 각 IP 주소와 관련된 인시던트에 대해 요약 데이터 세트를 생성하여, SourceIP, DestinationIP, MaliciousIP, RemoteIP 등 중요한 속성인 IPType, FirstTimeSeen, LastTimeSeen을 포함합니다.

    요약 데이터 세트를 사용하면 특정 IP 주소를 빠르게 검색하고 IP 주소를 발견할 수 있는 시간 범위를 좁힐 수 있습니다. 검색된 이벤트가 작업 영역 보존 기간을 초과하는 90일 이상 전에 발생한 경우에도 이 작업을 수행할 수 있습니다.

    이 예시에서는 쿼리가 만료될 때까지 매일 실행되어 매일 새 요약 레코드를 추가하도록 요약을 구성합니다.

  2. 요약 데이터 세트에 대해 2분 이내에 실행되는 분석 규칙을 만들어 악의적인 IP 주소가 회사 네트워크와 상호 작용할 때 특정 시간 범위로 신속하게 드릴다운합니다.

    다른 요약 페이로드 크기를 수용하려면 최소 5분까지의 실행 간격을 구성해야 합니다. 이렇게 하면 이벤트 수집 지연이 있는 경우에도 손실이 발생하지 않습니다.

    예시:

    let csl_columnmatch=(column_name: string) {
    summarized_CommonSecurityLog
    | where isnotempty(column_name)
    | extend
        Date = format_datetime(TimeGenerated, "yyyy-MM-dd"),
        IPaddress = column_ifexists(column_name, ""),
        FieldName = column_name
    | extend IPType = iff(ipv4_is_private(IPaddress) == true, "Private", "Public")
    | where isnotempty(IPaddress)
    | project Date, TimeGenerated, IPaddress, FieldName, IPType, DeviceVendor
    | summarize count(), FirstTimeSeen = min(TimeGenerated), LastTimeSeen = min(TimeGenerated) by Date, IPaddress, FieldName, IPType, DeviceVendor
    };
    union csl_columnmatch("SourceIP")
        , csl_columnmatch("DestinationIP") 
        , csl_columnmatch("MaliciousIP")
        , csl_columnmatch("RemoteIP")
    // Further summarization can be done per IPaddress to remove duplicates per day on larger timeframe for the first run
    | summarize make_set(FieldName), make_set(DeviceVendor) by IPType, IPaddress
    
  3. 후속 검색 또는 다른 데이터와의 상관 관계를 실행 하여 공격 스토리를 완료합니다.

네트워크 데이터와 위협 인텔리전스의 일치에 대한 경고 생성

노이즈가 많고, 볼륨이 크고, 보안성이 낮은 네트워크 데이터와 위협 인텔리전스의 일치에 대한 경고를 생성합니다.

시나리오: 위협 인텔리전스 도메인 이름 목록에 대해 방문한 시스템의 도메인 이름과 일치하도록 방화벽 로그에 대한 분석 규칙을 빌드해야 합니다.

대부분의 데이터 원본은 노이즈가 많고 볼륨이 큰 원시 로그이지만, IP 주소, Azure Firewall 트래픽, Fortigate 트래픽 등을 포함하여 보안 가치가 낮습니다. 하루에 약 총 1TB의 볼륨이 있습니다.

과제: 별도의 규칙을 만들려면 여러 논리 앱이 필요하며 추가 설정 및 유지 관리 오버헤드 및 비용이 필요합니다.

해결 방법: 요약 규칙을 사용하여 다음을 수행하는 것이 좋습니다.

  1. 요약 규칙을 만듭니다.

    1. 보조 계획을 사용하는 CommonSecurityLogCommonSecurityLog_CL 테이블에서 원본 주소, 대상 주소 및 대상 포트와 같은 키 필드를 추출하도록 쿼리를 확장합니다.

    2. 활성 위협 인텔리전스 지표에 대한 내부 조회를 수행하여 원본 주소와 일치하는 항목을 식별합니다. 이를 통해 알려진 위협과 데이터를 상호 참조할 수 있습니다.

    3. 생성된 시간, 활동 유형 및 악의적인 원본 IP와 대상 세부 정보를 포함한 프로젝트 관련 정보입니다. 쿼리를 실행할 빈도 및 대상 테이블(예: MaliciousIPDetection )을 설정합니다. 이 테이블의 결과는 분석 계층에 있으며 그에 따라 요금이 청구됩니다.

  2. 경고를 만듭니다.

    Microsoft Sentinel에서 MaliciousIPDetection 테이블의 결과에 따라 경고하는 분석 규칙을 만듭니다. 이 단계는 사전 위협 탐지 및 인시던트 대응에 매우 중요합니다.

샘플 요약 규칙:

CommonSecurityLog_CL​
| extend sourceAddress = tostring(parse_json(Message).sourceAddress), destinationAddress = tostring(parse_json(Message).destinationAddress), destinationPort = tostring(parse_json(Message).destinationPort)​
| lookup kind=inner (ThreatIntelligenceIndicator | where Active == true ) on $left.sourceAddress == $right.NetworkIP​
| project TimeGenerated, Activity, Message, DeviceVendor, DeviceProduct, sourceMaliciousIP =sourceAddress, destinationAddress, destinationPort

보조 로그를 통해 요약 규칙 사용(샘플 프로세스)

이 절차에서는 ARM 템플릿을 통해 만든 사용자 지정 연결을 사용하여 Logstash에서 CEF 데이터를 수집하는 보조 로그와 함께 요약 규칙을 사용하는 샘플 프로세스를 설명합니다.

  1. Logstash에서 사용자 지정 CEF 커넥터를 설정합니다.

    1. 다음 ARM 템플릿을 Microsoft Sentinel 작업 영역에 배포하여 DCR(데이터 수집 규칙)과 DCE(데이터 수집 엔드포인트)와 함께 사용자 지정 표를 만듭니다.

      Azure에 배포

    2. ARM 템플릿 출력에서 다음 세부 정보를 확인합니다.

      • tenant_id
      • data_collection_endpoint
      • dcr_immutable_id
      • dcr_stream_name
    3. Microsoft Entra 애플리케이션을 만들고 애플리케이션의 클라이언트 ID 및 비밀을 기록해 둡 니다. 자세한 내용은 자습서: 로그 수집 API를 사용하여 Azure Monitor 로그로 데이터 보내기(Azure Portal)를 참조하세요.

    4. 샘플 스크립트를 사용하여 Logstash 구성 파일을 업데이트합니다. 업데이트는 ARM 템플릿에서 만든 사용자 지정 표에 CEF 로그를 보내 JSON 데이터를 DCR 형식으로 변환하도록 Logstash를 구성합니다. 이 스크립트에서 자리 표시자 값을 이전에 만든 사용자 지정 표 및 Microsoft Entra 앱의 고유한 값으로 바꿔야 합니다.

  2. CEF 데이터가 예상대로 Logstash에서 흐르는지 확인합니다. 예를 들어 Microsoft Sentinel에서 로그 페이지로 이동하여 다음 쿼리를 실행 합니다 .

    CefAux_CL
    | take 10
    
  3. CEF 데이터를 집계하는 요약 규칙을 만듭니다. 예시:

    • IoC(손상 지표) 데이터 조회: 집계된 요약 쿼리를 실행하여 특정 IoC를 헌팅하여 고유한 항목을 가져온 다음 더 빠른 결과를 위해 해당 항목만 쿼리합니다. 다음 예시는 다른 메타데이터와 함께 고유한 Source Ip 피드를 가져오는 방법을 보여줍니다. 이는 IoC 조회에 사용할 수 있습니다.

      // Daily Network traffic trend Per Destination IP along with Data transfer stats 
      // Frequency - Daily - Maintain 30 day or 60 Day History. 
        Custom_CommonSecurityLog 
        | extend Day = format_datetime(TimeGenerated, "yyyy-MM-dd") 
        | summarize Count= count(), DistinctSourceIps = dcount(SourceIP), NoofBytesTransferred = sum(SentBytes), NoofBytesReceived = sum(ReceivedBytes)  
        by Day,DestinationIp, DeviceVendor 
      
    • 변칙 검색에 대한 요약 기준을 쿼리합니다. 30일 또는 60일과 같은 장시간 기록 기간에 대해 쿼리를 실행하는 대신 사용자 지정 로그로 데이터를 수집한 다음 시계열 변칙 감지와 같은 요약 기준 데이터만 쿼리하는 것이 좋습니다. 예시:

      // Time series data for Firewall traffic logs 
      let starttime = 14d; 
      let endtime = 1d; 
      let timeframe = 1h; 
      let TimeSeriesData =  
      Custom_CommonSecurityLog 
        | where TimeGenerated between (startofday(ago(starttime))..startofday(ago(endtime))) 
        | where isnotempty(DestinationIP) and isnotempty(SourceIP) 
        | where ipv4_is_private(DestinationIP) == false 
        | project TimeGenerated, SentBytes, DeviceVendor 
        | make-series TotalBytesSent=sum(SentBytes) on TimeGenerated from startofday(ago(starttime)) to startofday(ago(endtime)) step timeframe by DeviceVendor 
      

앞의 예제에서 사용된 다음 항목에 대한 자세한 내용은 Kusto 설명서를 참조하세요.

KQL에 대한 자세한 내용은 KQL(Kusto Query Language) 개요를 참조하세요.

기타 리소스: