yara规则初识

article/2025/9/23 8:00:30

一、YARA介绍

YARA 是一个免费开源工具,旨在帮助安全人员检测和分类恶意软件,但它不应仅限于这一种用途。YARA规则还可以帮助检测特定文件或您可能想要检测的任何内容。目前使用YARA 的知名软件有赛门铁克、火眼、卡巴斯基、VirusTotal、安天等。
YARA的每一条描述、规则都由一系列字符串和一个布尔型表达式构成,并阐述其逻辑。YARA规则可以与文件或在运行的进程,以帮助研究人员识别其是否属于某个已进行规则描述的恶意软件等。
rule silent_banker : banker
{meta:description = "This is just an example"threat_level = 3in_the_wild = trueauthor="zq" version="0.1" date="2022/08/12"strings:$a = {6A 40 68 00 30 00 00 6A 14 8D 91}  # 文本转16进制:16进制转换,16进制转换文本字符串,在线16进制转换 | 在线工具$b = {8D 4D B0 2B C1 83 C0 27 99 6A 4E 59 F7 F9}$c = "UVODFRYSIHLNWPEJXQZAKCBGMT"condition:$a or $b or $c
}
上述例子中,任意一个YARA文件,只要包含了三个字符串如a、b、c之一的文件都必须报告为silent_banker。
其中:
  • rule silent_banker : banker 是声明当前规则名称,这个名称可以解释为检测banker类型的样本;
  • meta 后面的是一些描述信息,比如可以有规则说明、作者信息、威胁等级、在野情况、文件MD5、来源等内容;
  • strings后面是检测规则,有字符串、字节序列等内容;
  • condition为判断条件。在本例检测规则处定义的字节序列和字符串,判断条件是or,所以只要匹配到$a $b $c三个字符串或字节序列中的任意一个,那么样本就会被识别成silent_banker 。
YARA可以跨平台在Windows,Linux和Mac OS X上运行,也可通过其命令行界面使用,或从带有yara-python扩展名的Python脚本中使用。

二、安装

sudo apt install libmagic-dev libssl-dev
sudo apt install yara
sudo pip3 install --global-option="build" --global-option="--enable-magic" yara-python==4.2.3 -i Https://pypi.tuna.tsinghua.edu.cn/simple/

三、yara使用参数

yara --help 可查看yara的使用参数:所以预编译可以节省时间。
root@node1:/home/zqtest# yara --help
YARA 3.7.1, the pattern matching swiss army knife.
Usage: yara [OPTION]... [NAMESPACE:]RULES_FILE... FILE | DIR | PID
Mandatory arguments to long options are mandatory for short options too.-t,  --tag=TAG                       打印标记为TAG的规则,并忽略其他规则-i,  --identifier=IDENTIFIER          print only rules named IDENTIFIER-c,  --count                          print only number of matches-n,  --negate                         打印不满足的规则-D,  --print-module-data              打印模块数据-g,  --print-tags                     打印标签-m,  --print-meta                     打印元数据-s,  --print-strings                  print matching strings-L,  --print-string-length            打印匹配字符串的长度-e,  --print-namespace                打印规则的名称空间-p,  --threads=NUMBER                 使用指定的线程数number扫描目录-l,  --max-rules=NUMBER               匹配多个规则后终止扫描-d VAR=VALUE                          define external variable-x MODULE=FILE                        将文件内容作为额外数据传递给模块-a,  --timeout=SECONDS                扫描x秒后终止-k,  --stack-size=SLOTS               set maximum stack size (default=16384)--max-strings-per-rule=NUMBER    设置每个规则的最大字符串数 (default=10000)-r,  --recursive                      递归搜索目录-f,  --fast-scan                      fast matching mode-w,  --no-warnings                    禁用警告--fail-on-warnings               fail on warnings-v,  --version                        显示版本信息-h,  --help                           show this help and exitSend bug reports and suggestions to: vmalvarez@virustotal.com.

使用举例:

四、提取编译后的yara规则

Running YARA from the command-line — yara 4.2.0 documentation
yarac 为编译yara规则工具,使用编译后的yara规则可以加快速度,正常使用yara会先编译规则之后再加载,所以预编译可以节省时间。
yarac.exe作用就是将多个yara源码文件编译成一个yara文件。这样不仅方便存储,同时方便加解密。
yarac.exe要比python编译好的yara文件体积小很多。
用官方的yarac 编译yara规则, yarac 的使用很简单,直接yarac --help 可看到:
root@node1:/home/zqtest# yarac --help
Usage: yarac [OPTION]... [NAMESPACE:]SOURCE_FILE... OUTPUT_FILE-d VAR=VALUE                     define external variable-w,  --no-warnings               disable warnings--fail-on-warnings          fail on warnings--max-strings-per-rule=NUMBERset maximum number of strings per rule (default=10000)-v,  --version                   show version information-h,  --help                      show this help and exit
Send bug reports and suggestions to: vmalvarez@virustotal.com# 预编译yara规则命令
cat ./rules/software_components/*.yar > ./rules/software_components.yar
yarac ./rules/software_components.yar ./compile_rule/software_components.yc# 注意
1 yara-python和yara编译出来的规则不通用
2 yarac.exe要比python编译好的yara文件体积小很多。

五、在python中调用

import yara
1、编译YARA规则
# default, compiled from a file path
rules = yara.compile(filepath='/foo/bar/myrules')# compile your rules from a file object
fh = open('/foo/bar/myrules')
rules = yara.compile(file=fh)
fh.close()# compile them directly from a Python string
rules = yara.compile(source='rule dummy { condition: true }')# compile a group of files or strings, you can do it by using the filepaths or sources named arguments
rules = yara.compile(filepaths={'namespace1': '/my/path/rules1','namespace2': '/my/path/rules2'
})rules = yara.compile(sources={'namespace1': 'rule dummy { condition: true }','namespace2': 'rule dummy { condition: false }'
})
2、在所有情况下,compile 都会返回类 yara.Rules 规则的实例。 该类有一个 save 方法,可用于将编译后的规则保存到文件中
rules.save('/foo/bar/my_compiled_rules')
3、编译后的规则可以稍后使用 load 方法加载,load 的结果也是 yara.Rules 类的一个实例
rules = yara.load('/foo/bar/my_compiled_rules')
 4、规则实例也有一个 match 方法,它允许您将规则应用于文件
matches = rules.match('/foo/bar/test_file')# 当然规则也可用于Python string
with open('/foo/bar/my_file', 'rb') as f:matches = rules.match(data=f.read())# 或者到一个正在运行的进程
matches = rules.match(pid=1234) # match 方法返回 yara.Match 类的实例列表print(matches)
print(matches[0])
print(matches[0].rule)
print(matches[0].tag)
print(matches[0].string)
'''结果类似:
{
    'tags': ['foo', 'bar'], # 包含与匹配规则关联的标记的字符串数组
    'matches': True,
    'namespace': 'default', # 与匹配规则关联的命名空间
    'rule': 'my_rule', # 匹配规则的名称
    'meta': {}, # 包含与匹配规则关联的元数据的字典
    'strings': [(81L, '$a', 'abc'), (141L, '$b', 'def')] # 包含有关匹配字符串的信息的元组列表,每个元组有以下形式:(偏移,字符串标识符,字符串数据)
}'''
您还可以在调用 match 方法时指定模块回调函数。 将为扫描文件的每个导入模块调用提供的函数。 您的回调函数应该期望一个字典类型的参数,并且应该返回 CALLBACK_CONTINUE 以继续执行下一个规则或 CALLBACK_ABORT 以停止将规则应用于您的数据。
比如:
import yara
def modules_callback(data):print(data)return yara.CALLBACK_CONTINUE
matches = rules.match('/foo/bar/my_file', modules_callback=modules_callback)
您还可以在调用 match 方法时指定警告回调函数。 将为每个运行时警告调用提供的函数。 您的回调函数应该有两个参数。 第一个是包含警告类型的整数,第二个是带有警告消息的字符串。 您的回调应返回 CALLBACK_CONTINUE 以继续扫描或 CALLBACK_ABORT 以停止。
比如:
import yara
def warnings_callback(warning_type, message):if warning_type == yara.CALLBACK_TOO_MANY_MATCHES:print(f"namespace:'{message.namespace}' rule:'{message.rule}' string:'{message.string}'")return yara.CALLBACK_CONTINUE
matches = rules.match('/foo/bar/my_file', warnings_callback=warnings_callback)

六、参考

Welcome to YARA's documentation! — yara 4.2.0 documentation
https://github.com/Yara-Rules/rules
https://github.com/mandiant/red_team_tool_countermeasures


http://chatgpt.dhexx.cn/article/8ULyq6v7.shtml

相关文章

Yara规则概述

一、Yara概述 YARA是一款旨在帮助恶意软件研究人员识别和分类恶意软件样本的开源工具(由virustotal的软件工程师Victor M. Alvarezk开发),使用YARA可以基于文本或二进制模式创建恶意软件家族描述信息,当然也可以是其他匹配信息。…

这五个资源超多的资源网站 请务必珍藏起来

现在很多人都会在网上找资源,如今互联网的快速发展也让大家找起资源来非常的容易,只要有好的资源网站,就不怕没有找不到的资源。而今天我和大家分享的就是几个资源超多的网站,希望你们不再缺少资源。 1、落花网 这个就很厉害了&…

这5款电影资源网站,让人第一眼就心动,第二眼就流连忘返!

工作烦心了一天,回到家忙完事情泡一杯热腾腾的咖啡,拿起手机或平板,打开电影网站,惬意的躺在沙发上享受自己心仪的电影带给你的快乐时光吧! 今天小编为大家推荐几款电影资源网站,喜欢的小伙伴千万不要错过&…

盘点程序员必备的免费资源网站

文章目录 1、软件资源类1、JDK国内镜像资源站2、 Arm原生 JDK(为 M1系列Mac而生)3、程序员大礼包 2、工具类1、在线工具2、菜鸟工具3、爱资料 2、算法&题库1、LeetCode2、LintCode3、牛客网 3、在线资源1、Github2、Stack Overflow3、CSDN4、天堂电影…

游戏美术资源网站推荐

梚辰 2022.4.25 未经授权禁止转发 最近我整理了一下以前使用过的购买游戏美术资源的网站,现在把这些分享给大家,希望对大家有些帮助。 1.Unity Asset Store(Unity资源商店) 这些Unity资源商店可以算是Unity官方的资源库了&#x…

晶体结构资源网站

晶体结构资源网站 1、无机晶体结构数据查询软件ICSD(findit)2、[晶体原型百科全书aflowlib](http://aflowlib.org/prototype-encyclopedia/index.html)3、[Crystallography Open Database](http://www.crystallography.net/cod/search.html)4、[American…

免费资源网站,你想要的全都有【各类宝藏资源 】

这6个免费资源网站,能帮你找到所有想要资源 前言 今天就把多年收藏整理的各类资源网站全都分享出来,都是完全免费的“资源”网站,质量非常高,一起来看看吧! 1、我爱分享网 网站整理了办公软件、解压软件、截图工具、…

刷机资源网站推荐

是不是各位想刷机的朋友找不到资源站今天就来推荐一下(资源均来源于网络,如果侵权请联系删除) 1.萤火虫资源站 首页 - 首页 - 👈萤火虫资源站 (kamiui.ml) 资源比较充足还有OneDrive资源 2.Mindows工具箱 mindows.cn 可以把你的手…

珍藏已久的6个资源网站,每天让你不愁找不到资源,你值得拥有

想必如果你是一名在网上混迹多年的老网民,手上一定有几套属于自己的网站,有时候想要什么直接在里面搜索十分方便!也不需要满网进行瞎找,但是这类网站起来很快倒下来也很多,所以在很多时候我们要不断的更新自己手头上的资源。 这里我也整理了6款适合我们工作学习中常用的网…

你还在为找资源而发愁?这里有最佳的5个资源网站!

搜索引擎在我们工作生活中是举足轻重的工具了,想要在如此庞大的互联网资源库中找到自己需要的信息也是不简单的,这里给大家分享5个优质的资源网站,看完你肯定有相见恨晚的感觉。 1、纳米学习 http://www.1nami.com/ 这是一个集合了网易云课…

13个免费资源网站,你想要的全都有!【各类宝藏资源,建议收藏】

前言 前段时间,博主写了一篇文章关于如何用Python自制一款音乐播放器,有不少粉丝私信我说,这些高颜值UI设计模板都是从哪里找的,可以把网址分享出来嘛~ 当然没问题,今天就把多年收藏整理的各类资源网站全都分享出来&…

​遗传算法优化神经网络实现数据预测

作者 | 李秋键 责编 | 寇雪芹 头图 | 下载于视觉中国 出品 | AI科技大本营(ID:rgznai100) 引言 随着人工智能和大数据的发展,大量实验和数据处理等流程对算法的要求也随之变得越来越高,故综合以及灵活运用不同的算法以实现更高效的…

Python实现GWO智能灰狼优化算法优化支持向量机回归模型(svr算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 灰狼优化算法(GWO),由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种群智能…

基于遗传算法GA算法优化BP神经网络(Python代码实现)

一、 概述 BP-GA算法的设计︰基于遗传算法的BP神经网络算法(以下简称BP-GA)就是在BP神经网络的学习过程中,将权重和阀值描述为染色体,并选取适宜的适应函数,然后进行GA迭代,直到某种意义上的收敛.与普通BP学习算法相比,算法 BP一GA的优势在于可以处理一些传统方法不能处理的例子…

Python实现WOA智能鲸鱼优化算法优化支持向量机分类模型(SVC算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 鲸鱼优化算法 (whale optimization algorithm,WOA)是 2016 年由澳大利亚格里菲斯大学的Mirjalili 等提出…

基于灰狼算法优化支持向量机的数据分类算法及其MATLAB实现-附代码

基于灰狼算法优化支持向量机的数据分类算法及其MATLAB实现-附代码 文章目录 基于灰狼算法优化支持向量机的数据分类算法及其MATLAB实现-附代码1 GWO-SVM 模型1.1 灰狼优化器GWO1.2 支持向量机分类SVM 2 基于GWO-SVM 的分类算法2.1 优化变量与目标函数的选取2.2 GWO-SVM 建模步骤…

基于麻雀算法优化LSTM回归预测(matlab)

基于麻雀算法优化LSTM回归预测(matlab) 概述: 麻雀算法构思lstm原理麻雀优化lstm原理代码及结果展示 第一部分 麻雀算法构思 众所周知,麻雀是常见的留鸟而且非常喜欢群居。这种生物是非常聪明的,有很强的记忆力&am…

鲸鱼优化算法优化BP神经网络回归预测的算法设计-附代码

鲸鱼优化算法WOA优化BP神经网络回归预测模型以及MATLAB代码实现 文章目录 鲸鱼优化算法WOA优化BP神经网络回归预测模型以及MATLAB代码实现1. 算法描述2. 鲸鱼优化算法优化BP神经网络预测的步骤与流程图设计3. WOA-BP预测算法的参数设置4. 运行结果5. MATLAB代码 1. 算法描述 鲸…

遗传算法优化BP神经网络

遗传算法原理 遗传算法背景不作介绍。遗传算法作为一种并行随机搜索最优化算法,将自然界的优胜劣汰的生物进化原理引入优化参数形成的编码串联群体中,按照所选的适应度函数并通过遗传中的选择,交叉和变异对个体进行筛选,使适应度…

基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码

基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码 文章目录 基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码1 蝙蝠算法与BP神经网络分类模型1.1 蝙蝠算法BA1.2 one-hot编码 2 基于蝙蝠算法BA优化的BP神经网络分类算法2.1 优化变量与目标函数的…