引用单独存储在 KQL 中的数据

问题描述 投票:0回答:1

我目前正在使用 KQL,我需要制作某种列表或表格来保存数百个恶意 IP 值。一般来说,我对 KQL 和 InfoSec 非常陌生,所以我想知道是否有一种方法可以创建某种可以在各种查询中调用的 IP 数据表。

这是我正在使用的数据表类型的示例:

let ipAddresses = datatable(IPAddress:string)
[
    "62.86.18.86",
    "8.211.111.53",
    "14.178.141.190"
];

本质上,我希望将其存储在单独的查询中,然后能够在需要时随时调用该数据表。例如,如果我希望能够在单独的查询中使用此数据表,以便能够检查这些 IP 中的任何一个是否已成功登录用户帐户。

我尝试在每次查询中复制并粘贴这些长长的 IP 列表,但这似乎效率很低。问题是,如果更新一个查询的数据表,则也必须更新所有也使用该数据表的查询。我正在寻找这张桌子更加集中(如果这有意义的话)。

security kql windows-defender
1个回答
0
投票

复制并粘贴 IP 列表是浪费时间,这确实是事实! 您关于如何增强 KQL 查询的思路令人印象深刻,而且完全是开箱即用的。为此,建议构建一个包含所有不良 IP 的中心表并将其链接到您的查询:

  1. 创建保存的函数

KQL 允许您定义可在不同查询中重用的已保存函数。这非常适合存储您的 IP 地址列表。方法如下:

.create function GetMaliciousIPs() {
datatable(IPAddress:string)
[
    "62.86.18.86",
    "8.211.111.53",
    "14.178.141.190",
    // ... add more IPs here
]
}

这将创建一个名为

GetMaliciousIPs
的函数,该函数返回您的 IP 地址表。

  1. 在查询中使用该函数

现在,每当您需要检查此列表时,只需调用该函数即可:

let maliciousIPs = GetMaliciousIPs();
// ... rest of your query ...

有关检查从这些 IP 成功登录的示例:

let maliciousIPs = GetMaliciousIPs();
SigninLogs 
| where IPAddress in (maliciousIPs)
// ... further filtering or analysis ...

概述的约定的优点:

提供单点修改:更新IP白名单只需保存程序即可。如果使用任何程序,使用它进行的查询会自动获取新的 IP 列表。 使扩展功能变得容易:无需一次又一次地复制代码,因为这将使保存的函数内部的查询透明,而不会浪费代码。 使代码更易于处理:在查询中嵌入一个具有简洁名称的函数将使其更加人性化。

令人着迷的细节:

应用范围:存储过程仅对给定的数据库有效。这意味着您可以在任何包含的查询中需要时访问它。 强制修改:对函数的任何更新都会在调用该函数的任何未来查询中立即生效。但是,已经执行的查询可能必须在调用另一个事件之前完成先前版本的处理。 使用已保存函数的主要目的之一是有效管理所有列入黑名单的 IP,从而增强其使用以简化 KQL 查询。通过这种方法可以实现更高效、更务实的内部安全流程组织。

© www.soinside.com 2019 - 2024. All rights reserved.