Cyber Security Academy · 课时

YARA 规则语法

字符串、条件与元数据。

第 2 / 4 课13 个步骤

YARA 规则语法 是 CoddyKit 上的免费 Cyber Security Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cyber Security Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cyber Security Academy 课程共包含 4 节课。

三个部分

YARA 规则包含一个名称以及最多三个部分:meta、strings 和 condition。condition 是唯一必需的部分,但实际规则通常会使用全部三个部分。

rule Example_Malware
{
  meta:
    author = "analyst"
    description = "Detects Example family"
  strings:
    $a = "EvilConfig"
    $b = { 6A 40 68 00 30 00 00 }
  condition:
    $a and $b
}

meta 部分

meta 存放描述性元数据。它不会影响匹配,但对于初步研判和维护至关重要。

  • author、date、description
  • reference — 报告或公告链接
  • hash — 构建规则所依据的样本哈希值
  • tlp — 共享分类

值可以是字符串、整数或布尔值。请把 meta 当作文档:后续响应人员会依赖其中的信息。

文本字符串

strings 部分定义绑定到模式的标识符(以 $ 开头)。最简单的形式是带引号的文本字符串。

修饰符可以细化匹配:

  • nocase — 不区分大小写
  • wide — UTF-16(每个字符占两个字节,Windows 中常见)
  • ascii — ASCII(默认;与 wide 组合即可同时匹配两者)
  • fullword — 仅匹配完整单词
strings:
  $s1 = "cmd.exe /c" nocase
  $s2 = "InjectDll" wide ascii
  $s3 = "admin" fullword

十六进制字符串

对于二进制模式,请在花括号中使用十六进制字符串。这些字符串匹配原始字节,非常适合匹配操作码、魔数和结构。

十六进制字符串支持灵活匹配:

  • ?? — 通配半字节/字节
  • [n-m] — 跳过 n 到 m 个任意字节
  • ( A | B ) — 备选项
strings:
  $h1 = { 4D 5A 90 00 }
  $h2 = { E8 ?? ?? ?? ?? 83 C4 04 }
  $h3 = { 6A 00 [2-6] FF 15 ?? ?? ?? ?? }
  $h4 = { ( B8 | B9 ) 00 00 00 00 }

正则表达式

YARA 支持使用斜杠分隔的正则表达式模式,并支持与文本字符串相同的修饰符。当模式会变化但遵循某种结构时(例如配置标记或生成的互斥体名称),请使用正则表达式。

正则表达式功能强大,但代价较高;在可能的情况下,请优先使用固定字符串或十六进制,并对正则表达式进行严格锚定,以避免扫描整个文件。

strings:
  $re1 = /mutex_[a-f0-9]{8}/ nocase
  $re2 = /https?:\/\/[a-z0-9]{12,20}\.top\// ascii

条件部分

condition 是决定是否匹配的布尔表达式。请直接引用字符串标识符;如果找到字符串,单独使用的 $a 就为真。

请使用 and、or、not 和括号进行组合。您可以在此处编码逻辑,将真正命中某个家族与偶然 совп合区分开来。

condition:
  $a and ($b or $c) and not $benign

计数与集合

YARA 提供了针对字符串集合的富表达力词:

  • any of them / all of them
  • 2 of ($s*) — 一个组中至少有两个
  • #a > 3 — $a 的匹配次数超过 3

借助这些功能,您可以要求五个家族标记中至少出现三个,在灵敏度与误报之间取得平衡。

condition:
  3 of ($str*) and #marker >= 2

偏移量与文件大小

条件可以引用匹配发生的位置以及文件的大小:

  • $a at 0 — 匹配必须位于偏移量 0
  • $a in (0..1024) — 位于某个字节范围内
  • filesize — 总大小,例如 filesize < 200KB
  • uint16(0) == 0x5A4D — 在某个偏移量处读取整数(这里是 MZ 标头)

将匹配锚定到特定位置,可以大幅减少误报并加快扫描。

condition:
  uint16(0) == 0x5A4D and filesize < 500KB and $payload

模块

YARA 的模块提供结构化且了解格式的数据,使条件可以根据解析后的字段进行判断,而不必处理原始字节。

  • pe — PE imports、节、入口点、签名和 imphash
  • hash — 计算区域的 md5/sha256 值
  • math — entropy 和统计信息
  • elf、dotnet、magic

例如,导入 pe 后,您可以根据导入的函数或特定的 imphash 进行匹配,这比匹配字面字符串可靠得多。

import "pe"
condition:
  pe.imphash() == "a1b2c3d4e5f6..." and
  pe.imports("kernel32.dll", "VirtualAllocEx")

遍历集合

对于更丰富的逻辑,YARA 支持使用 for 遍历集合。您可以表达这样的条件:这些偏移量中至少有两个满足某个属性,或者任意节名称匹配某个模式。

处理 PE 节或 imports 等模块数据时,这一点非常重要,因为您必须检查长度可变的列表,而不是单个值。

import "pe"
condition:
  for any i in (0..pe.number_of_sections - 1) : (
    pe.sections[i].name == ".evil"
  )

全局、私有与标签

规则级关键字可以组织规则集:

  • global rule — 其条件会约束文件中的所有其他规则(例如仅扫描 PE 文件)
  • private rule — 可复用的构建块,不会单独报告,但其他规则可以引用它
  • 规则名称后的标签用于对命中结果分类(例如用于筛选输出)
global private rule IsPE { condition: uint16(0) == 0x5A4D }

rule Dropper : trojan dropper {
  strings: $a = "drop_payload"
  condition: $a
}

快速检查

请思考某个条件的稳健性。

回顾

YARA 的 rule 语法一览:

  • 一个 rule = meta + strings + condition
  • 带有 nocase/wide/ascii/fullword 修饰符的文本字符串
  • 带有通配符 ??、跳转 [n-m] 和替代项的十六进制字符串
  • 用于结构化可变模式的正则表达式(请谨慎使用)
  • condition 使用与/或/非组合字符串
  • 量词:any/all/N of,以及计数 #a
  • 锚定:at、in、filesize 和 uint 读取
  • 模块(pe、hash、math)匹配结构化数据和 imphash
  • global、private 和标签用于组织规则集

接下来:使用字符串和十六进制进行实战搜寻。

免费开始

用 AI 导师学习 Cyber Security Academy — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
76
课程
303

常见问题解答

「YARA 规则语法」课时是免费的吗?

是的 — 「YARA 规则语法」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cyber Security Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cyber Security Academy 课程共包含 4 节课。

「YARA 规则语法」这节课中我会学到什么?

字符串、条件与元数据。 你通过在浏览器中直接运行的动手代码来练习 Cyber Security Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cyber Security Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cyber Security Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「YARA 规则语法」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cyber Security Academy 课中编写并运行代码吗?

能。每节 Cyber Security Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. YARA 的用途
  2. YARA 规则语法
  3. 使用字符串与十六进制进行威胁狩猎
  4. 扩展并自动化扫描
← 返回 Cyber Security Academy