你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用摘要规则聚合 Microsoft Sentinel 数据(预览版)

在 Microsoft Sentinel 中使用摘要规则在后台聚合大量数据,以便在所有日志层中实现更顺畅的安全操作体验。 摘要数据在自定义日志表中进行预编译,并提供快速查询性能,其中包括对从低成本日志层派生的数据运行的查询。 摘要规则可帮助你优化以下各项的数据:

  • 分析和报告,尤其是针对大型数据集和时间范围,按照安全和事件分析、每月或年度业务报告等要求。
  • 针对详细日志实现的成本节省:你可以在较便宜的日志层中根据需要保留详细日志,保留时间可长可短,然后仅将其作为汇总数据发送到 Analytics 表进行分析和报告。
  • 通过在可共享的汇总数据中删除或模糊处理隐私详细信息并限制对具有原始数据的表的访问,从而保护安全和数据隐私

通过 Kusto 查询语言 (KQL) 访问检测、调查、搜寻和报告活动中的摘要规则结果。 在历史调查、搜寻和合规性活动中,使用更长时间段的摘要规则结果。

摘要规则结果存储在 Analytics 数据计划下的单独表格中,并收取相应的费用。 有关数据计划和存储费用的详细信息,请参阅根据 Log Analytics 工作区中的使用模式选择表计划

重要

摘要规则目前为预览版。 请参阅 Microsoft Azure 预览版的补充使用条款,了解适用于 beta 版、预览版或其他尚未正式发布的 Azure 功能的其他法律条款。

Microsoft Sentinel 已在 Microsoft Defender 门户的 Microsoft 统一安全运营平台中正式发布。 对于预览版,Microsoft Sentinel 在 Defender 门户中提供,无需 Microsoft Defender XDR 或 E5 许可证。 有关详细信息,请参阅 Microsoft Defender 门户中的 Microsoft Sentinel

先决条件

若要在 Microsoft Sentinel 中创建摘要规则,必须符合以下条件:

我们建议你在创建规则之前,先在“日志”页中试验摘要规则查询。 验证查询是否未达到或接近查询限制,并检查查询是否生成目标架构和预期结果。 如果查询接近查询限制,请考虑使用较小的 binSize 在每个箱中处理更少的数据。 还可以修改查询以返回更少的记录或删除容量较高的字段。

创建摘要规则

创建一项新的摘要规则,将特定的大型数据集聚合到动态表中。 配置规则频率以确定从原始数据更新聚合数据集的频率。

  1. 在 Azure 门户中,从 Microsoft Sentinel 导航菜单中的“配置”下选择“摘要规则(预览版)”。 在 Defender 门户中,选择“Microsoft Sentinel”>“配置”>“摘要规则(预览版)”。 例如:

    Azure 门户中“摘要规则”页的屏幕截图。

  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 中的 Kusto 查询语言 (KQL)

  6. 选择“预览结果”可显示使用配置的查询收集的数据的示例。

  7. 在“查询计划”区域中,定义以下详细信息:

    • 你希望规则以什么频率运行
    • 是否希望规则以某种延迟方式运行(以分钟为单位)
    • 你希望规则何时开始运行

    计划中定义的时间基于数据中的 timegenerated

  8. 选择“下一步: 查看 + 创建 >”>“保存”以完成摘要规则。

现有的摘要规则列在“摘要规则(预览版)”页中,你可以在此查看规则状态。 对于每条规则,选择行尾的选项菜单即可执行以下任一操作:

  • 在“日志”页中查看规则的当前数据,就像你要立即运行查询一样
  • 查看选定规则的运行历史记录
  • 禁用或启用规则。
  • 编辑规则配置

若要删除规则,请选择规则行,然后选择页面顶部工具栏中的“删除”

备注

Azure Monitor 还支持通过 API 或 Azure 资源监视器 (ARM) 模板创建摘要规则。 有关详细信息,请参阅创建或更新摘要规则

示例摘要规则场景

本部分回顾了在 Microsoft Sentinel 中创建摘要规则的常见场景,以及我们对如何配置每项规则的建议。 如需更多信息和示例,请参阅将摘要规则与辅助日志配合使用(示例流程)用于辅助日志引入的日志源

在网络流量中快速查找恶意 IP 地址

场景:你是一名威胁搜寻者,你团队的目标之一是识别过去 90 天内在活动事件的网络流量日志中与恶意 IP 地址交互的所有实例。

挑战:Microsoft Sentinel 目前每天引入数 TB 的网络日志。 你需要快速浏览它们以找到恶意 IP 地址的匹配项。

解决方案:我们建议使用摘要规则执行以下操作:

  1. 为与事件相关的每个 IP 地址(包括 SourceIPDestinationIPMaliciousIPRemoteIP创建摘要数据集,每个都列出了重要属性,例如 IPTypeFirstTimeSeenLastTimeSeen

    摘要数据集使你能够快速搜索特定的 IP 地址并缩小找到该 IP 地址的时间范围。 即使搜索到的事件发生在 90 天以前,超出了其工作区保留期,你也可以执行此操作。

    在此示例中,请将摘要配置为每天运行,以便查询每天添加新的摘要记录,直到过期为止。

  2. 请创建一条针对摘要数据集的运行时间少于两分钟的分析规则,快速钻取到恶意 IP 地址与公司网络交互的特定时间范围。

    请确保至少配置长达五分钟的运行间隔,以适应不同的摘要有效负载大小。 这确保即使在出现事件引入延迟的情况下,也不会造成损失。

    例如:

    let csl_columnmatch=(column_name: string) {
    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 防火墙流量、Fortigate 流量等。 每天的总量约为 1 TB。

挑战:创建单独的规则需要多个逻辑应用,这需要额外的设置以及维护开销和费用。

解决方案:我们建议使用摘要规则执行以下操作:

  1. 每 10 分钟汇总一次 McAfee 防火墙日志,每次运行时更新同一张自定义表中的数据。 在与 McAfee 日志交互时,ASIM 函数可能有助于进行摘要查询。

  2. 创建分析规则,以便在摘要数据中的域名与威胁情报列表中的条目匹配时触发警报。 例如:

    //let timeRange = 5m;
    //let httpstrim = "https://";
    //let httptrim = "http://";
    let timeRangeStart = now (-10m);
    let timeRangeEnd = (timeRangeStart + 10m);
    //Take visited domains from McAfee proxy
    adx('https://adxfwlog01.northeurope.kusto.windows.net/nwlogs').MappedMcAfeeSyslog
    | where timestamp between (timeRangeStart .. timeRangeEnd)
    | where isnotempty(URL)
    | extend URLDomain = parse_url(URL).Host
    | extend URLDomain = iff(isempty(URLDomain),URL,URLDomain)
    | extend URLDomain = extract(@"([0-9a-zA-Z-]{1,}\.[0-9a-zA-Z-]{2,3}\.[0-9a-zA-Z-]{2,3}|[0-9a-zA-Z-]{1,}\.[0-9a-zA-Z-]{2,10})$", 0, URLDomain)
    | where isnotempty(URLDomain)
    | summarize by URLDomain
    //Match visited domains with TI DomainName list
    | join kind=inner (ThreatIntelligenceIndicator
        | where isnotempty(DomainName)
        | where Active == true
        | where ExpirationDateTime > now()
        | summarize LatestIndicatorTime = arg_max(TimeGenerated, *) by DomainName
          ) on $left.URLDomain == $right.DomainName
    | extend LogicApp = "SOC-McAfee-ADX-DstDomainAgainstThreatIntelligence"
    | project LatestIndicatorTime, TI_Domain = DomainName, Description, ConfidenceScore, AdditionalInformation, LogicApp
    

将摘要规则与辅助日志配合使用(示例流程)

此过程描述了将摘要规则和辅助日志配合使用的示例流程,使用通过 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 门户)将数据发送到 Azure Monitor 日志

    4. 使用示例脚本来更新 Logstash 配置文件。 这些更新会将 Logstash 配置为将 CEF 日志发送到 ARM 模板创建的自定义表,从而将 JSON 数据转换为 DCR 格式。 在此脚本中,请确保将占位符值替换为你自己的适用于之前创建的自定义表和 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), NoofByesTransferred = 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