了解高级搜寻查询语言
高级搜寻基于 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
查询本身通常以表名开头,后跟多个以管道 (|
) 开头的元素。 在此示例中,我们首先创建两个表 和 DeviceNetworkEvents
的联合,DeviceProcessEvents
并根据需要添加管道元素。
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 |
返回 Expr 在组中采用的一组不同值的动态 (JSON) 数组。 |
find |
查找与一组表中的谓词匹配的行。 |
若要查看这些操作符的实时示例,请在高级搜寻的入门部分中运行它们。
了解数据类型
高级搜寻支持 Kusto 数据类型,包括以下常见类型:
数据类型 | 说明和查询含义 |
---|---|
datetime |
通常表示事件时间戳的数据和时间信息。 请参阅支持的日期/时间格式 |
string |
UTF-8 中的字符串用单引号 (' ) 或双引号 (" ) 括起来。
阅读有关字符串的详细信息 |
bool |
此数据类型支持 true 或 false 状态。
请参阅支持的文本和运算符 |
int |
32 位整数 |
long |
64 位整数 |
若要详细了解这些数据类型, 请阅读 Kusto 标量数据类型。
编写查询时获取帮助
利用以下功能更快地编写查询:
- 自动建议 - 编写查询时,高级搜寻会提供 IntelliSense 的建议。
- 架构树 - 在工作区旁边提供包含表及其列列表的架构表示形式。 有关详细信息,请将鼠标悬停在某个项上。 双击某个项,将其插入到查询编辑器中。
-
架构参考 - 包含表和列说明的门户中引用,以及支持的事件类型 (
ActionType
值) 和示例查询
在编辑器中处理多个查询
可以使用查询编辑器来试验多个查询。 若要使用多个查询,请执行以下操作:
使用空行分隔每个查询。
将光标置于查询的任何部分,以在运行查询之前选择该查询。 这将仅运行所选查询。 若要运行另一个查询,请相应地移动光标并选择“ 运行查询”。
为了获得更高效的工作区,还可以在同一搜寻页中使用多个选项卡。 选择“ 新建查询 ”,打开新查询的选项卡。
然后,无需打开新的浏览器选项卡即可运行不同的查询。
注意
使用具有高级搜寻功能的多个浏览器选项卡可能会导致丢失未保存的查询。 若要防止发生这种情况,请在高级搜寻中使用选项卡功能,而不是单独的浏览器选项卡。
使用示例查询
入门部分提供了使用常用运算符的几个简单查询。 请尝试运行这些查询,并对其进行细微修改。
注意
除了基本查询示例之外,你还可以访问特定威胁搜寻方案的共享查询。 浏览页面左侧的共享查询或 GitHub 查询存储库。
访问查询语言文档
有关 Kusto 查询语言和受支持运算符的详细信息,请参阅 Kusto 查询语言文档。
注意
本文中的某些表在 Microsoft Defender for Endpoint 中可能不可用。 启用Microsoft Defender XDR,以使用更多数据源搜寻威胁。 可以按照从 Microsoft Defender for Endpoint 迁移高级搜寻查询中的步骤,将高级搜寻工作流从 Microsoft Defender for Endpoint 移动到 Microsoft Defender XDR。
相关主题
提示
想要了解更多信息? 请在我们的技术社区中与 Microsoft 安全社区互动:Microsoft Defender XDR 技术社区。