如何用KQL将事件IP匹配Sentinel监视列表IP范围以丰富事件
在Azure Sentinel中用KQL实现IP范围与Watchlist的匹配(替代Splunk lookup)
你要实现的是将分析规则生成事件里的SourceIP字段,与Watchlist中的子网范围匹配,输出对应Office名称,对应Splunk的|lookup office-ranges.csv Range AS SourceIP OUTPUT Office语句。由于KQL的lookup默认是精确值匹配,而你需要的是IP子网范围匹配,所以得结合ipv4_is_in_range()函数来实现,以下是可行的写法:
方法1:使用apply逐行匹配
// 替换成你实际的事件数据表名 YourEventTable | apply ( // 加载你的Watchlist数据 _GetWatchlist("office-ranges") // 判断当前事件的SourceIP是否在Watchlist的子网范围内 | where ipv4_is_in_range(SourceIP, Range) // 只保留需要输出的Office字段 | project Office )
方法2:使用变量+标量查询
// 先把Watchlist数据存入变量 let office_ranges = _GetWatchlist("office-ranges"); // 处理你的事件数据 YourEventTable // 为每条事件匹配对应的Office值,无匹配则返回null | extend Office = toscalar(office_ranges | where ipv4_is_in_range(SourceIP, Range) | project Office)
方法3:左连接后过滤匹配项
YourEventTable // 左连接Watchlist数据,先建立关联(这里用!=是为了避免精确匹配限制,后续再过滤) | join kind=leftouter (_GetWatchlist("office-ranges") on $left.SourceIP != $right.Range) // 只保留IP在子网范围内的结果 | where ipv4_is_in_range(SourceIP, Range) // 移除重复的字段(如果有重名的Range字段,可根据实际情况调整) | project-away Range1
说明
你之前尝试的join和lookup失败,是因为这两个操作默认是精确字段匹配,而你的场景需要判断IP是否属于某个子网范围,必须用ipv4_is_in_range()函数来做逻辑判断,无法直接通过字段相等的条件完成匹配。
内容的提问来源于stack exchange,提问作者JohnnyMnemonic
相关产品推荐
相关产品推荐

