KQL查询技术需求:获取指定Compromised日志对应的前5条deny日志
解决KQL中获取Compromised日志前5条deny日志的需求
嘿,刚上手KQL确实会遇到这类逻辑关联的问题,我来帮你实现想要的查询逻辑!你的需求是找到指定SourceIP下包含"Compromised"的日志,再返回每条这类日志时间点之前的5条DeviceAction = "deny"的日志,下面是具体的实现方案:
核心思路
- 先定位所有符合条件的"Compromised"日志,记录它们的发生时间;
- 关联同一个SourceIP下所有
DeviceAction = "deny"的日志,筛选出时间在"Compromised"日志之前的条目; - 针对每条"Compromised"日志,单独提取它之前的最新5条deny日志。
完整KQL查询语句
// 第一步:先获取所有目标SourceIP下的Compromised事件,记录它们的时间 let compromised_events = YourTableName // 替换成你的实际日志表名 | where SourceIP == "555.555.555.555" | where TimeGenerated between (datetime(10/20/2021, 16:25:41.750).. datetime(10/20/2021, 16:35:41.750)) | where AdditionalExtensions has "Compromised" | project CompromisedTime = TimeGenerated, SourceIP; // 第二步:获取deny事件,关联Compromised时间,提取每个Compromised事件前的5条deny日志 YourTableName | where SourceIP == "555.555.555.555" | where TimeGenerated between (datetime(10/20/2021, 16:25:41.750).. datetime(10/20/2021, 16:35:41.750)) | where DeviceAction == "deny" | join kind=inner compromised_events on SourceIP // 关联同一个SourceIP的Compromised事件 | where TimeGenerated < CompromisedTime // 筛选出Compromised事件发生前的deny日志 | partition by CompromisedTime ( // 按每个Compromised事件的时间分组处理 sort by TimeGenerated desc // 按时间倒序,确保取到最新的前5条 | take 5 ) | project-away SourceIP1 // 移除关联后重复的SourceIP列,让结果更整洁
关键语法解释
let:用来定义变量存储中间结果,让查询逻辑更清晰;join:将deny日志和Compromised日志通过SourceIP关联起来,确保是同一个IP的事件;partition by:针对每条Compromised日志单独处理,避免不同Compromised事件的deny日志混在一起;take 5:提取分组后的前5条日志,配合sort by TimeGenerated desc就能拿到Compromised事件发生前的最新5条deny记录。
如果你的日志表中有唯一标识每条日志的字段(比如EventID),也可以加入到project中,方便后续溯源。
内容的提问来源于stack exchange,提问作者cs-tech
相关产品推荐
相关产品推荐

