一、项目简介
YARA 是由 VirusTotal 开发维护的开源工具,面向(但不限于)恶意软件研究者,用于根据文本或二进制模式描述来识别和分类恶意软件样本。你可以为某个恶意软件家族编写一组规则(Rule),规则由一组字符串和一个布尔表达式组成,YARA 会在扫描文件时匹配这些规则并输出命中结果。
一个典型规则如下:定义若干字符串特征(二进制字节、明文字符串、正则等),再用 condition 子句描述这些字符串需要满足的逻辑关系,即可构成一条检测规则。
官方仓库:https://github.com/VirusTotal/yara
官方文档:https://yara.readthedocs.org/
注意:原版 YARA 已进入维护模式,官方推荐新的 Rust 重写版本 yara-x,但原版 YARA 仍被大量现有规则库和工具链使用。
二、功能特点
- 模式灵活:支持明文字符串、十六进制字节、通配符、大小写不敏感、正则表达式等多种字符串类型。
- 逻辑组合:用布尔表达式(and/or/not/括号)自由组合字符串条件。
- 跨平台:Windows、Linux、macOS 均可运行,提供命令行和 Python(yara-python)两种调用方式。
- 元数据:规则可携带 description、author、threat_level 等元信息,便于规则管理。
- 模块扩展:内置 pe、elf、macho、dotnet、hash 等模块,可对文件格式做结构化检测。
- 生态丰富:大量开源规则库(如 Neo23x0/signature-base、YARA-Rules)可直接复用。
三、环境要求
- 操作系统:Linux(Ubuntu/Debian/CentOS)、macOS、Windows。
- 编译依赖(源码安装时):C 编译器(gcc/clang)、make、flex、bison、openssl 开发库。
- Python 版本:使用 yara-python 扩展时需要 Python 3.6+。
- 磁盘:工具本体约几十 MB;规则库和样本库视规模而定。
四、安装部署步骤
4.1 方式一:包管理器安装(Linux)
# Debian/Ubuntu
sudo apt update
sudo apt install -y yara
# CentOS/RHEL(需 EPEL)
sudo yum install -y epel-release
sudo yum install -y yara
# macOS
brew install yara4.2 方式二:源码编译安装(最新版)
sudo apt install -y automake libtool make gcc flex bison openssl libssl-dev
git clone --recursive https://github.com/VirusTotal/yara.git
cd yara
./bootstrap.sh
./configure --enable-cuckoo --enable-magic --enable-dotnet
make -j$(nproc)
sudo make install
sudo ldconfig
yara --version常用 configure 选项:--enable-cuckoo 启用 cuckoo 模块、--enable-magic 启用 libmagic 文件类型识别、--enable-dotnet 启用 .NET 模块。
4.3 方式三:Python 绑定 yara-python
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install yara-python安装后可在 Python 脚本中 import yara 直接编译和匹配规则。
五、基础使用
5.1 编写第一条规则
新建 malware.yar 文件:
rule silent_banker : banker
{
meta:
description = "This is just an example"
threat_level = 3
in_the_wild = true
strings:
$a = {6A 40 68 00 30 00 00 6A 14 8D 91}
$b = {8D 4D B0 2B C1 83 C0 27 99 6A 4E 59 F7 F9}
$c = "UVODFRYSIHLNWPEJXQZAKCBGMT"
condition:
$a or $b or $c
}5.2 命令行扫描
# 扫描单个文件
yara malware.yar suspicious.exe
# 扫描整个目录(递归)
yara -r malware.yar /path/to/samples/
# 输出 JSON 格式
yara -f -w malware.yar suspicious.exe
# 仅显示规则名,不输出数据
yara -m malware.yar suspicious.exe5.3 使用 yara-python 编程调用
import yara
rules = yara.compile(filepath='malware.yar')
matches = rules.match('/path/to/suspicious.exe')
for m in matches:
print(m.rule, m.meta)
for s in m.strings:
print(' offset:', s[0], 'identifier:', s[1])5.4 加载开源规则库
git clone https://github.com/Neo23x0/signature-base.git
yara -r signature-base/yara/*.yar suspicious.exe更多规则资源见 InQuest 维护的 awesome-yara 清单。
六、常见问题 FAQ
Q1:编译时报错 "flex/bison not found"
安装依赖即可:sudo apt install flex bison(Debian/Ubuntu)或 brew install flex bison(macOS)。
Q2:规则写了但匹配不上
先用 yara -d 调试;检查字符串大小写是否需要 nocase 修饰;十六进制字节注意空格和通配符写法;condition 中字符串是否用对了标识符。
Q3:扫描大目录很慢
YARA 会读取文件内容做匹配。可先用 hash 模块或文件大小过滤,再缩小扫描范围;也可用 --max-filesize 限制单文件大小。
Q4:YARA 和 yara-x 有什么区别?
yara-x 是官方用 Rust 重写的下一代版本,性能更好、语法更严格、规则兼容性仍在完善中。现有大量规则仍基于原版 YARA,生产环境可两者并存。
Q5:如何持续测试自己写的规则?
使用 YARA-CI,这是 VirusTotal 提供的 GitHub 应用,可对仓库中的 YARA 规则做持续测试,发现常见错误和误报。
七、参考链接
- GitHub 仓库:https://github.com/VirusTotal/yara
- 官方文档:https://yara.readthedocs.org/
- 下一代版本 yara-x:https://github.com/VirusTotal/yara-x
- awesome-yara 资源清单:https://github.com/InQuest/awesome-yara
- YARA-CI 规则测试:https://yara-ci.cloud.virustotal.com
- PyPI 包:https://pypi.org/project/yara-python/