0

我正在尝试使用 Azure 中的 Log Analytics/Sentinel 中的 Kusto 检查字段是否包含列表中的值。

该列表包含顶级域,但我只想匹配这些顶级域的子域。列表值 example.com 应与 forum.example.com 或 api.example.com 等值匹配。

我得到了以下代码,但它只完全匹配。

let domains = dynamic(["example.com", "amazon.com", "microsoft.com", "google.com"]);
DeviceNetworkEvents
| where RemoteUrl in~ (domains)
| project TimeGenerated, DeviceName, InitiatingProcessAccountUpn, RemoteUrl

我尝试使用endwith,但无法使其与列表一起使用。

4

2 回答 2

3

似乎has_any()对你有用:

let domains = dynamic(["example.com", "amazon.com", "microsoft.com", "google.com"]);
DeviceNetworkEvents
| where RemoteUrl has_any(domains)
| project TimeGenerated, DeviceName, InitiatingProcessAccountUpn, RemoteUrl

请注意,您还可以使用has_any_index()来获取数组中的哪个项目匹配

于 2022-01-30T02:30:06.757 回答
1

为了将 URL 与域列表正确匹配,您需要从这些域构建正则表达式,然后使用matches regex运算符。

确保正确构建正则表达式,以不允许这些:

  • example.com.hacker.com
  • hackerexample.com
  • hacker.com/example.com
  • ETC...
于 2022-01-31T20:41:40.347 回答