进行安全方面研究的同学,很多可能都熟悉YARA,它是专为研究人员设计的恶意软件模式搜索模式匹配工具,用于扫描和识别恶意软件的行为。
最近YARA开发商VirusTotal宣布,将用基于Rust语言全新实现的下一代系统YARA-X来替代YARA,官方开发将全面转移到YARA-X上。
概述YARA-X设计目标为实现更快、更安全、更用户友好替代YARA系统。它以文本或者二进制方式创建恶意软件或者任何想要的内容特征的描述(或规则)。每个描述由一组模式和一个决定其规则的布尔表达式组成逻辑。一个典型的例子:
rule silent_banker : banker {meta:description = "This is just an example"threat_level = 3in_the_wild = truestrings:$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}上述规则告诉YARA-X任何包含这三个字符之一模式的文件将会报告silent_banker。这只是一个简单的例子,可以使用通配符创建更复杂和更强大的规则,不区分大小写的字符串、正则表达式、特殊运算符和许多其他。
特点YARA-X为使用Rust语言重写的YARA实现,其主要特点:
更好的用户体验:新的命令行界面更加现代,色彩缤纷,错误报告更加明确,定位更准确。
99%规则向后兼容:虽然百分百向后兼容性无法实现,YARA-X目标是在规则级别与 YARA达到99%兼容。对不兼容性部分实现完全文档记录解释。
性能提升:YARA以其速度而闻名,但有一定的规则,特别是那些使用正则表达式或复杂循环的用例,可能性能会慢慢降低。而YARA-X针对这样的用例进行内部优化,具有更高性能,可更快完成扫描任务。
同样一个正则实现的规则:
rule bitcoin_address {strings:$rule = /(bc1|[13])[a-zA-HJ-NP-Z0-9]{25,39}/ fullwordcondition:$ruel}用该规则扫描一个大概200M的文件,在YARA中需要20秒,同样的情况下用YARA-X中可在1秒内完成。
增强的可靠性和安全性:YARA C代码的复杂性可能会导致错误和安全漏洞。 YARA-X采用Rust构建,提供更强大的功能的同时实现更大地可靠性和安全性。
开发人员友好:优先考虑易于集成到其他项目和简化维护。提供Python、Golang和C 的官方API,实现多语言无缝集成。YARA-X还解决了一些YARA版本中难以维护和扩展设计缺陷。
安装可与直接下载YARA-X对应系统的二进制版本包,目前支持Windows、Linux、和MacOS二进制发布包,直接解压到本地就可以使用:
熟悉Rust的同学,可以自己从(修改)源码进行安装。
git clone github /VirusTotal/yara-xcd yara-xcargo install --path cli然后就开始使用命令行使用YARA-X了:
使用YARA-X使用基本可以沿用YARA的各种语法,大多数的集成模块和脚本仍然可以使用。此处,我们以Python为例介绍其用法:
首先pip安装yara-x模块
pip install yara-x一个简单的规则,文本扫描:
rules = yara_x.compile("rule test { condition: true }")result = rules.scan(b"chongchong")使用compliler实现更复杂的规则,定义一组规则组成的命名空间:
compiler = yara_x.Compiler()compiler.new_namespace("chongchong")compiler.add_source("rule test { condition: true }")compiler.new_namespace("example")compiler.add_source("rule test { condition: false }")rules = compiler.build()然后就可以在扫描器中,对这个编译的规则进行扫描,结果
scanner = yara_x.Scanner(rules)scanner.set_timeout(60)result = scanner.scan(b"cc example")总结根据官方最新提供的消息,YARA-X目前还处于测试阶段,VirusTotal已经在其生产环境中和YARA共同运行并对比测试。其线上环境有几万条规则和几百万的文件扫描任务。目前可以说,YARA-X基本已经足够成熟和稳定可以使用,有其是对于CLI使用的用户或者调用Python脚本调用的例子完全可以切换到YARA-X。多语言的API目前已经大体上确定,但是可能会有一些细微的变化。为了稳妥起见建议,可以先用两套系统并行运行,等跑一段时间后再完全切换到YARA-X。
YARA还会继续维护,但是只会进行问题修复和一些小功能完善,不会在进行大功能更新或者模块的添加。
官方的开发重点将全面转移到YARA-X,静静的等待YARA的老死,并在合适的时间完全放弃它。