【发布时间】:2021-08-31 13:02:18
【问题描述】:
我有一个多行多列的表,其中包含按用户名的登录事件。每行都提供其他详细信息,例如时间、IP 地址、设备信息、位置信息等。我有另一个表,它是单行,包含多列 IPv4 范围(监视列表)。这些 IPv4 范围被认为是“恶意的”。我希望能够从 SigninLogs 表中返回数据,并将每行的 IP 地址元素与每个 IPv4 范围进行比较,以验证 IP 地址是否是“恶意”表中找到的任何 IP 范围的成员。如果此条件为真,我希望执行特定操作。对 IPv4 子网执行“范围”分析的函数是
ipv4_is_in_range(<IP Address>, <IP Range>)
我尝试了几种不同的方法,但都无济于事。这是我尝试过的策略示例:
let GetPackage = (v_IPAddress: string){
_GetWatchlist('Bad_IP_Ranges')
| summarize IPAddresses = make_list(pack_array(IPAddress))
| mv-apply IPAddresses on (
where ipv4_is_in_range(v_IPAddress, tostring(IPAddresses))
)
};
SigninLogs
| union AADNonInteractiveUserSignInLogs
| extend Malicious_IP = iff(GetPackage(IPAddress), IPAddress, "null")
| project TimeGenerated, Category, ResultType, ResultDescription, Identity, Malicious_IP, AppDisplayName
| order by TimeGenerated | take 1000
这给出了一个错误:
iff(): argument #1 must be a scalar expression
我知道它在抱怨 GetPackage() 函数返回一个表格值,但如果 where 语句为真,我不知道如何强制 GetPackage() 函数只返回恶意 IP 地址。
【问题讨论】: