识别和分类恶意软件样本的工具YARA

https://calcguide.tech/2025/08/06/yara-a-tool-for-identifying-and-classifying-malware-samples/

data-ad-format="fluid" data-ad-layout-key="-7k+ex-4a-9w+4a">

YARA 是一个用于识别和分类恶意软件样本的工具,广泛应用于恶意软件分析、威胁情报、入侵检测等领域。它通过编写规则(YARA Rules)来匹配文件中的特定字符串、十六进制模式、正则表达式等特征。

一、YARA 的基本使用方法

1. 安装 YARA

Linux(Ubuntu/Debian)

1
2
sudo apt-get install yara

macOS

1
2
brew install yara

Python 安装(推荐用于集成)

1
2
pip install yara-python

注意:yara-python 是 YARA 的 Python 绑定,允许你在 Python 脚本中使用 YARA。

friend link:(2 封私信) YARA-规则匹配神器-简单使用篇 - 知乎

Yara规则安装和使用学习-RedLine编写Yara检测-先知社区

github:https://github.com/VirusTotal/yara

2. 编写 YARA 规则(.yar 文件)

创建一个简单的 YARA 规则文件,例如 example.yar:

1
2
3
4
5
6
7
8
9
10
11
12
13
rule HelloWorld
{
meta:
author = "YourName"
description = "Detects the string 'Hello, World!'"

strings:
$hello = "Hello, World!" ascii

condition:
$hello
}

3. 使用命令行运行 YARA

1
2
yara example.yar target_file.txt

如果 target_file.txt 中包含 Hello, World!,则会输出:

1
2
HelloWorld target_file.txt

二、YARA 集成到 Python 脚本(示例 Demo)

示例:使用 yara-python 扫描文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import yara

# 编译规则
rules = yara.compile(filepath='example.yar')

# 扫描目标文件
matches = rules.match('target_file.txt')

# 输出结果
if matches:
print("匹配到规则:")
for match in matches:
print(match)
else:
print("未匹配到任何规则")

示例:从字符串加载规则(无需文件)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import yara

# 直接在代码中定义规则
rule_source = '''
rule HelloWorld
{
strings:
$hello = "Hello, World!" ascii
condition:
$hello
}
'''

# 编译规则
rules = yara.compile(source=rule_source)

# 扫描文件
matches = rules.match('target_file.txt')
print(matches)

示例:扫描目录中的所有文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import yara
import os

def scan_directory(directory, rules):
for root, dirs, files in os.walk(directory):
for file in files:
filepath = os.path.join(root, file)
try:
matches = rules.match(filepath)
if matches:
print(f"[+] 匹配: {filepath} -> {matches}")
except Exception as e:
print(f"[-] 错误扫描 {filepath}: {e}")

# 加载规则
rules = yara.compile(filepath='example.yar')

# 扫描目录
scan_directory('/path/to/scan', rules)

三、高级 YARA 规则示例

检测 PE 文件中的特定导入函数(Windows 恶意软件常见)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import "pe"

rule SuspiciousPE
{
meta:
description = "检测包含可疑 API 调用的 PE 文件"

condition:
pe.is_pe and
any of ($suspicious_funcs) in (pe.imported_functions)

strings:
$suspicious_funcs = "VirtualAllocEx"
$suspicious_funcs = "WriteProcessMemory"
$suspicious_funcs = "CreateRemoteThread"
}

注意:使用 pe 模块需要目标文件是有效的 PE 文件。

四、YARA 与 SIEM/SOC 集成思路

定时扫描文件系统:使用 Python 脚本定期扫描上传目录或临时目录。

与文件上传服务集成:在 Web 应用中,用户上传文件后自动调用 YARA 扫描。

结合 ELK/Splunk:将扫描结果发送到日志系统进行告警。

沙箱联动:在动态分析沙箱中运行样本后,使用 YARA 提取特征。

五、实用技巧

  • 使用 –rules 参数查看已编译规则结构:yara -r example.yar /path/to/files

  • 忽略大小写:使用 nocase 修饰符$a = “virus” nocase

  • 正则表达式支持:$re = /https?://[a-zA-Z0-9./]*/

  • 使用 uint32be(0) 检测文件头:$mz = { 4D 5A } // PE 文件头 condition: $mz at 0

六、常见问题

  • 编译错误:检查语法,YARA 对缩进和标点敏感。

  • 性能问题:避免过于宽泛的规则,使用 ascii, wide, nocase 精确控制。

  • 权限问题:扫描系统文件可能需要管理员权限。

七、资源推荐

YARA Rules 仓库:

在线规则测试:https://yara-web.vercel.app/

总结

YARA 是一个强大灵活的模式匹配工具,适合用于:

  • 恶意软件检测

  • 威胁狩猎(Threat Hunting)

  • 自动化分析流水线

  • 安全产品集成(EDR、AV、沙箱)

通过 yara-python,你可以轻松将其集成到你的安全工具或平台中。

如需更复杂的集成(如多线程扫描、规则热加载、Web API 封装),可进一步封装为 REST 服务(使用 Flask/FastAPI)。

data-ad-format="auto" data-full-width-responsive="true">