高级搜寻基于 Kusto 查询语言。 你可以使用 Kusto 运算符和语句构建查询,在专门 的高级狩猎模式中定位信息。
观看此简短视频,了解一些方便的 Kusto 查询语言基础知识。
要了解高级搜寻中的 Kusto 查询语言基础知识,请先运行你的第一个查询。
尝试第一个查询
在Microsoft Defender门户中,转到“搜寻”以运行第一个查询。 使用以下示例:
// Finds PowerShell execution events that could involve a download
union DeviceProcessEvents, DeviceNetworkEvents
| where Timestamp > ago(7d)
// Pivoting on PowerShell processes
| where FileName in~ ("powershell.exe", "powershell_ise.exe")
// Suspicious commands
| where ProcessCommandLine has_any("WebClient",
"DownloadFile",
"DownloadData",
"DownloadString",
"WebRequest",
"Shellcode",
"http",
"https")
| project Timestamp, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine,
FileName, ProcessCommandLine, RemoteIP, RemoteUrl, RemotePort, RemoteIPType
| top 100 by Timestamp
描述查询并指定要搜索的表
已将简短注释添加到查询的开头,以描述查询的目的。 如果你日后决定保存该查询并与组织中的其他人共享,此注释会很有帮助。
// Finds PowerShell execution events that could involve a download
查询本身通常以表名开头,后跟多个以管道 (|) 开头的元素。 在此示例中,我们首先对两个表 DeviceProcessEvents 和 DeviceNetworkEvents 执行联合操作,并根据需要添加通过管道传递的元素。
union DeviceProcessEvents, DeviceNetworkEvents
设置时间范围
第一个管道元素是范围限定为前七天的时间筛选器。 限制时间范围有助于确保查询运行良好、返回可管理的结果,并且不会超时。
| where Timestamp > ago(7d)
注意
Kusto时间过滤器无论你在 时区设置中指定哪个时区,都是UTC时间。
检查特定进程
紧接着该时间范围的是,对标识 PowerShell 应用程序的进程文件名进行搜索。
// Pivoting on PowerShell processes
| where FileName in~ ("powershell.exe", "powershell_ise.exe")
搜索特定命令字符串
之后,查询在命令行中查找通常用于使用 PowerShell 下载文件的字符串。
// Suspicious commands
| where ProcessCommandLine has_any("WebClient",
"DownloadFile",
"DownloadData",
"DownloadString",
"WebRequest",
"Shellcode",
"http",
"https")
自定义结果列和长度
现在,你的查询清楚地标识了要查找的数据,你可以定义结果外观。
project 返回特定列,并 top 限制结果数。 这些运算符有助于确保结果格式正确、大小合理且易于处理。
| project Timestamp, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine,
FileName, ProcessCommandLine, RemoteIP, RemoteUrl, RemotePort, RemoteIPType
| top 100 by Timestamp
选择“ 运行查询 ”以查看结果。
提示
可以将查询结果作为图表查看,并快速调整筛选器。 如需指导,请参阅 处理查询结果
了解常见查询运算符
你刚刚运行了第一个查询,并大致了解了它的组件。 是时候稍微回溯一下并学习一些基础知识了。 高级搜寻使用的 Kusto 查询语言支持多种运算符,包括以下常见的运算符。
| 运算符 | 说明和用法 |
|---|---|
where |
从表中筛选出满足谓词的行的子集。 |
summarize |
生成聚合输入表内容的表。 |
join |
通过匹配每个表中指定列的值,合并两个表的行以形成新表。 观看在 KQL 中联接表以了解如何操作。 |
count |
返回输入记录集中的记录数。 |
top |
返回按指定列排序的前 N 条记录。 |
limit |
最多返回指定数量的行。 |
project |
选择要包含、重命名或删除的列,然后插入新的计算列。 |
extend |
创建计算列并将其附加到结果集。 |
makeset |
返回一个动态 (JSON) 数组,其中包含 Expr 在该组中取到的一组不同值。 |
find |
查找与一组表中的谓词匹配的行。 |
要查看这些操作员的实时示例,请在 Microsoft Defender 门户的高级狩猎页面的“开始”面板中运行它们。
了解数据类型
高级搜寻支持 Kusto 数据类型,包括以下常见类型:
| 数据类型 | 描述和查询影响 |
|---|---|
datetime |
通常表示事件时间戳的数据和时间信息。 支持的日期/时间格式 |
string |
UTF-8 中的字符串用单引号 (') 或双引号 (") 括起来。
String 数据类型 |
bool |
此数据类型支持 true 或 false 状态。
支持的布尔文本和运算符 |
int |
32 位整数 |
long |
64 位整数 |
想了解更多关于 Kusto 标量数据类型的信息,请参见 Kusto 标量数据类型。
编写查询时获取帮助
利用以下功能更快地编写查询:
- 自动建议 - 编写查询时,高级搜寻会提供 IntelliSense 的建议。
- 架构树 - 在工作区旁边提供包含表及其列列表的架构表示形式。 有关详细信息,请将鼠标悬停在某个项上。 双击某个项,将其插入到查询编辑器中。
-
架构参考 - 门户内参考文档,其中包含表和列说明、支持的事件类型(
ActionType值)以及示例查询
在编辑器中处理多个查询
可以使用查询编辑器来试验多个查询。 若要使用多个查询,请执行以下操作:
使用空行分隔每个查询。
将光标置于查询的任何部分,以在运行查询之前选择该查询。 这将仅运行所选查询。 若要运行另一个查询,请相应地移动光标并选择“ 运行查询”。
为了获得更高效的工作区,还可以在同一搜寻页中使用多个选项卡。 选择“ 新建查询 ”,打开新查询的选项卡。
然后,无需打开新的浏览器选项卡即可运行不同的查询。
注意
使用具有高级搜寻功能的多个浏览器选项卡可能会导致丢失未保存的查询。 若要防止发生这种情况,请在高级搜寻中使用选项卡功能,而不是单独的浏览器选项卡。
使用示例查询
入门部分提供了使用常用运算符的几个简单查询。 请尝试在 “入门 ”部分运行示例查询,并对其进行少量修改。
注意
除了基本查询示例之外,你还可以访问特定威胁搜寻方案的共享查询。 浏览页面左侧的共享查询或 GitHub 查询存储库。
访问查询语言文档
有关 Kusto 查询语言和受支持运算符的详细信息,请参阅 Kusto 查询语言文档。
注意
本文中的某些表在 Microsoft Defender for Endpoint 中可能不可用。 启用Microsoft Defender以使用更多数据源搜寻威胁。 可以按照从 Microsoft Defender for Endpoint 迁移高级搜寻查询中的步骤,将高级搜寻工作流从Microsoft Defender for Endpoint移动到Microsoft Defender。
相关内容
提示
想要了解更多信息? 请在我们的技术社区中与 Microsoft 安全社区互动:Microsoft Defender XDR 技术社区。