规则语法
规则是使用基于 XML 的语言定义的一组表达式。
ESET Inspect Web 控制台已包含一组预定义的规则,但您可以添加和编辑您自己的规则。
规则的一般主体结构为:
<rule> <definition> <ancestor></ancestor> <parentprocess></parentprocess> <process></process> <operations> <operation></operation> </operations> </definition> <description> <name></name> <category></category> <explanation></explanation> <os></os> <mitreattackid></mitreattackid> <maliciousCauses></maliciousCauses> <benignCauses></benignCauses> <recommendedActions></recommendedActions> </description> <maliciousTarget name=""/> <actions> <action name="action" /> </actions> </rule> |
Definition 标记
ancestor - 可以采用附加属性:
•distance - 指定与匹配的祖先的当前进程的实际距离,即 1 是父进程,2 是祖父进程,以此类推…。如果未指定,则该属性将对照所有进程祖先进行比较
•unique - 启用 ancestor 标记以删除祖先树中的重复进程。例如,恶意软件会为同一进程创建多个实例以逃避检测(资源管理器 -> cmd -> cmd -> cmd -> 恶意软件),而此属性将消除这些重复项(资源管理器 -> cmd -> 恶意软件)
Process 和 parentprocess
process 部分使安全工程师可以将事件范围限制在特定进程;因此,您可以编写诸如“Outlook 创建 EXE 文件”之类的规则。如果进程元素为空,则会针对所有进程评估 parentprocess 和 operations。
parentprocess 部分与进程类似,但允许安全工程师测试父进程属性。这将启用诸如“由 Word 启动的 PowerShell 连接到 Internet”之类的规则。
process、parentprocess、ancestor 和 operation 使用表达式元素来描述逻辑表达式,该逻辑表达式通过计算看看是否应触发检测。表达式由条件和逻辑运算符组成。条件检查某些属性的值,逻辑运算符将这些条件组合成逻辑表达式。
表达式示例:
<operator type="and"> <condition component="FileItem" property="Path" condition="notstarts" value="%SYSTEM%" /> <operator type="or"> <condition component="FileItem" property="FileNameWithoutExtension" condition="is" value="svchost" /> <condition component="FileItem" property="FileNameWithoutExtension" condition="is" value="smss" /> <condition component="FileItem" property="FileNameWithoutExtension" condition="is" value="lsass" /> <condition component="FileItem" property="FileNameWithoutExtension" condition="is" value="csrss" /> <condition component="FileItem" property="FileNameWithoutExtension" condition="is" value="wininit" /> <condition component="FileItem" property="FileNameWithoutExtension" condition="is" value="services" /> <condition component="FileItem" property="FileNameWithoutExtension" condition="is" value="winlogon" /> <condition component="FileItem" property="FileNameWithoutExtension" condition="is" value="system" /> <condition component="FileItem" property="FileNameWithoutExtension" condition="is" value="userinit" /> <condition component="FileItem" property="FileNameWithoutExtension" condition="is" value="conhost" /> </operator> </operator> |
Operations
operations 部分定义进程执行的哪些操作会引发检测。如果为空,则在进程生成事件时触发检测。
操作是使用具有 type 属性的操作元素和表达式元素定义的。
<operation type="WriteFile">Expression</operation>
有关受支持操作的完整列表,请参阅操作主题。
Operator
支持的逻辑运算符包括:AND、OR 和 NOT。逻辑运算符可以嵌套。因此,一个逻辑运算符可以是另一个逻辑运算符的参数。除了逻辑运算符之外,条件元素也可以用作逻辑运算符的参数。可以使用 operator 标记,如以下示例所示:
<process> <operator type ="AND"> <condition component ="FileItem" property ="Path" condition ="starts" value ="% TEMP %"/> <condition component ="FileItem" property ="FileName" condition ="is" value ="svchost"/> </operator> </process> |
条件元素由三部分组成:
•操作的参数或进程的属性
•规则创建者指定的值
•值和属性之间的关系
属性按层次结构分组为“组件”。
检测有三种严重级别:1–39 > Info,40–69 > Warning,70–100 > Threat。
属性类型及其关系(条件属性)包括:
|
is(not)set |
is(not) |
is(not)empty |
(not)starts |
(not)contains |
(not)ends |
less, lessOrEqual, greater, greaterOrEqual |
|---|---|---|---|---|---|---|---|
字符串 |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
|
整型 |
✔ |
✔ |
|
|
✔ |
|
✔ |
值 |
✔ |
✔ |
✔ |
|
|
|
|
布尔值 |
✔ |
✔ |
|
|
|
|
|
日期 |
✔ |
✔ |
|
|
|
|
✔ |
字符串集 |
✔ |
|
✔ |
|
✔ |
|
|
IPv4 地址 |
✔ |
✔ |
✔ |
|
|
|
|
IPv6 地址 |
✔ |
✔ |
✔ |
|
|
|
|
IPv4 地址集 |
✔ |
|
✔ |
|
✔ |
|
|
IPv6 地址集 |
✔ |
|
✔ |
|
✔ |
|
|
Description 标记
description 是必需的,并且必须包含名称和类别,但其余部分是可选的。它有助于定义下面列出的字段,因为它们出现在 ESET Inspect 的“检测”详细信息中
name - 规则的唯一名称。它显示在规则列表中。
category - 允许您对规则进行分类。您可以指定您自己的类别。
explanation - 解释触发规则的原因
os - 此标记包含要应用规则的操作系统。可能的值为:Windows, Linux, OSX, ANY
mitreattackid - 包含 MITRE ATT&CK® 的 ID
maliciousCauses - 描述触发规则的事件或变动的恶意诱因
benignCauses - 描述触发规则的事件或变动的善意诱因
recommendedActions - 描述安全工程师要采取的建议操作。用户可以使用以下 Markdown:
•[navigation:computer_details] - 向用户显示的默认名称将为 Computer Details
•[navigation:executable_details] - 向用户显示的默认名称将为 Executable Details
•[navigation:process_details] - 向用户显示的默认名称将为 Process Details
•[remediation:shutdown] - 向用户显示的默认名称将为 Shutdown Computer
•[remediation:reboot] - 向用户显示的默认名称将为 Reboot Computer
•[remediation:kill] - 向用户显示的默认名称将为 Kill Process
•[remediation:block] - 向用户显示的默认名称将为 Block Hash
•[misc:download] - 向用户显示的默认名称将为 Download file
此外,每个命令都可以显示替代文本而不是默认文本。若要指定要显示的替代文本,请在命令后面加上竖线符号和文本。例如,[navigation:computer_details|GoToComDet] 将显示 GoToComDet 而不是默认的计算机详细信息。有关其他使用示例,请在审核主窗口的检测规则选项卡中搜索规则 c0601。
guid - 用于内部规则。外部规则已自动生成 guid。它用于在导出/导入过程中唯一标识规则。
maliciousTarget 标记
您可以使用 maliciousTarget 标记指定将受用户操作影响的目标。例如,当您选择块可执行文件时,更改将取决于 maliciousTarget。如果将 maliciousTarget 指定为 current 或 parent,则块可执行文件用户操作将分别更改为 blockProcessExecutable 或 blockParentProcessExecutable。它不会更改 Actions 标记的行为。可能的值为 current、module、none 和 parent。
maliciousProcess 标记已替换为 maliciousTarget 标记。虽然它仍获得旧有支持,但我们建议使用 maliciousTarget 标记。
Actions 标记
Actions 标记允许您指定在触发规则时执行的一组操作。 有关受支持操作的完整列表,请参阅操作主题。
您可以将操作置于单个操作元素中:
<action name="BlockProcessExecutable"/>
或者将多个操作元素堆叠到一个操作元素中(如以下示例所示):
<actions> <action name="BlockProcessExecutable"/> … </actions> |
可以通过单个规则触发多个操作。