将列表中的部分字符串与字段匹配

Match partial string from list with field

我正在尝试使用 Azure 中的日志 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

我尝试使用 endswith,但无法让它与列表一起使用。

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() 来获取数组中匹配的项目

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

确保正确构建正则表达式,以免出现以下情况:

  • example.com.hacker.com
  • hackerexample.com
  • hacker.com/example.com
  • 等等...