1、简述
YARA 是一种 模式匹配工具,最初由 VirusTotal 团队开发,被广泛用于恶意软件分析、威胁情报、入侵检测等安全场景。 它的定位是:
★YARA = 恶意软件的正则表达式
代码样例:https://gitee.com/lhdxhl/python-demo.git
安全研究人员通常使用 YARA 编写规则,用于描述恶意软件的特征,然后通过这些规则在文件、内存、进程中快速匹配出可疑对象。

2、什么是 yara-python?
yara-python 是 YARA 的 Python 绑定库,允许我们在 Python 程序中:
- 将 YARA 与其他 Python 工具结合,形成自动化检测框架
相比直接使用命令行,yara-python 更适合在安全自动化平台、沙箱系统、威胁检测脚本中集成。
安装方法
pip install yara-python
⚠️ 注意:需要系统安装 libyara,有时需要编译环境(Linux 上可 apt install libyara-dev)。
3、实践样例
1️⃣ 编写一个简单规则并检测字符串
import yara
# 定义 YARA 规则
rule = """
rule HelloYara {
strings:
$hello = "Hello YARA"
condition:
$hello
}
"""
# 编译规则
rules = yara.compile(source=rule)
# 匹配内容
matches = rules.match(data="This is a test: Hello YARA inside.")
print(matches)
✅ 输出:
[HelloYara]
表示规则 HelloYara 成功匹配。
2️⃣ 检测文件是否含有特征字符串
import yara
rule = """
rule SuspiciousKeyword {
strings:
$pw = "password"
$ip = "192.168."
condition:
any of them
}
"""
rules = yara.compile(source=rule)
# 检查文件
matches = rules.match(filepath="example.txt")
print(matches)
如果文件包含 "password" 或 "192.168.",就会触发规则。
3️⃣ 多规则文件编译
我们可以将多个规则写在 .yar 文件中,例如 rules.yar:
rule DetectEXE {
condition:
uint16(0) == 0x5A4D // 检测 Windows EXE 文件头 "MZ"
}
rule ContainsSuspicious {
strings:
$a = "malware"
$b = "trojan"
condition:
any of them
}
Python 调用:
import yara
rules = yara.compile(filepath="rules.yar")
matches = rules.match(filepath="test.exe")
print(matches)
4️⃣ 在目录中批量检测文件
import yara
import os
rules = yara.compile(filepath="rules.yar")
for root, _, files in os.walk("samples"):
for f in files:
path = os.path.join(root, f)
matches = rules.match(filepath=path)
if matches:
print(f"[!] {path} 匹配规则: {matches}")
5️⃣ 扫描内存中的数据(模拟)
import yara
rule = """
rule MemoryCheck {
strings:
$a = "malicious"
condition:
$a
}
"""
rules = yara.compile(source=rule)
data = b"Some malicious payload in memory"
matches = rules.match(data=data)
print(matches)
4、实际应用场景
✅ 恶意软件检测
✅ 威胁情报自动化
- 集成到 邮件网关 或 SIEM 平台,检测附件是否命中已知规则
✅ 内存取证
- 对进程转储、内存镜像运行 YARA 规则,发现可疑 payload
✅ DevSecOps
- 在代码审查/构建流水线中扫描可疑字符串(如私钥泄露、恶意依赖)
✅ 进阶技巧
- 规则优化:字符串太多时可用
condition: all of them 或 2 of ($a,$b,$c) 控制匹配逻辑 - 模块支持:YARA 支持
pe, elf, math, time 等模块,可以直接检测 PE 文件导入表、节区名称等 - 结合 Python:可与 Flask/FastAPI 搭建 Web 扫描服务,或者与 Celery 结合实现分布式检测
5、总结
- yara-python = YARA + Python 的结合
- 它让我们能在 Python 生态中更灵活地使用 YARA 规则
- 典型场景包括:恶意软件检测、内存取证、威胁情报、DevSecOps
对于安全研究员来说,yara-python 是一把「数字放大镜」,能帮助快速锁定潜在威胁。
📚 参考资料
- 官方文档:https://yara.readthedocs.io/
- yara-python 项目:https://github.com/VirusTotal/yara-python
- YARA 社区规则库:https://github.com/Yara-Rules/rules