恶意软件匹配引擎Yara

在使用之前,先来看看yara规则是什么样子的
如下是典型一个yara规则
恶意软件匹配引擎Yara
YARA的规则可以复杂和强大到支持通配符、大小写敏感字符串、正则表达式、特殊符号以及其他特性。
我们在规则定义中有两个主要部分。
第一部分是字符串:用于定义变量。 在这种情况下,变量的类型是字符串。 如果我们有不同类型的变量,可能会有多个部分。
第二部分是条件:我们定义逻辑以匹配预期数据。

关键字:
YARA规则的标识符类似于C语言结构,其规则声明以rule标识,在规则描述中可以包括字母、数字甚至下划线字符,但字符串第一个字符不能是数字,且单条描述不能超过128个字符。和C语言一样,YARA规则也有关键字:
恶意软件匹配引擎Yara

注释:
YARA规则的注释方式和类C语言一样,可以用//进行单行注释,也可以用/**/进行多行注释。
如下图所示
恶意软件匹配引擎Yara
Strings:
现在我们将开始定义要在规则中使用的变量和数据。 最常用的变量之一是string。 我们可以设置一个字符串值并在二进制文件中查找它
恶意软件匹配引擎Yara
正则匹配:
yara规则最常见的用法之一是使用正则表达式。 正则表达式提供了一定的灵活性。
在这个例子中,我们将看到像malare那样的字符串。 我们将使用通配符。 这可以是字母数字字符。
恶意软件匹配引擎Yara
文件大小
文件大小是编写规则时的另一个因素。 我们可以使用<,>,=等运算符检查文件的大小,并提供如下所示的大小。
KB为千字节
MB为兆字节
在此示例中,我们将使用filesize关键字将大小条件指定为大于300KB。
恶意软件匹配引擎Yara
访问数据
直到现在我们检查了文件中的字符串或文件的大小。 这些对于完整的恶意软件分析很有用但不够。 恶意软件通常在相关的内存范围内有一些签名。 我们需要访问这些内存范围中的数据。 我们将使用以下关键字提供我们要检查的地址和数据。
恶意软件匹配引擎Yara
例如,在此示例中,我们将检查给定文件是否为可移植可执行文件(PE)。
通过检查文件头部一定偏移出的特征字节来实现
恶意软件匹配引擎Yara
全局规则:
在恶意软件分析期间,我们需要一些通用规则来定义。我们将这些称为全局规则,并影响此运行中的所有规则。 我们将简单地将全局规则的全局关键字开头放在下面
恶意软件匹配引擎Yara
私有规则:
Yara提供类似继承的功能来创建基本规则并创建继承这些基本规则的规则。在这种情况下,我们可以在规则定义之前使用private关键字 我们将使用私有规则来构建其他规则。
恶意软件匹配引擎Yara
规则标签:
在打印匹配的规则时使用标记以进行过滤。 它们对匹配没有影响。标签计数没有限制。 在这个规则中,Foo,Bar和Baz是规则的标签。
恶意软件匹配引擎Yara
元数据:
我们可能需要指定有关规则的其他信息,可以使用元数据进行这项工作。我们将使用meta:keyword创建一个新的部分,如下所示
恶意软件匹配引擎Yara

我们可以自己尝试简单写一个完整的实例
使用nano进行编辑名为demorule的文件
恶意软件匹配引擎Yara

rule是所有规则最开始的关键字,HelloWorld是规则的名字
在strings部分是之后用于检查条件的字符串
变量aHelloWorldconditiona包含的变量内容为Hello World condition部分定义了条件 如果匹配a则为真
然后再分别创建两个文本
恶意软件匹配引擎Yara
恶意软件匹配引擎Yara

使用yara检测
恶意软件匹配引擎Yara
可以看到text1不匹配,text2匹配,匹配时返回的为规则名,以及被检测文件的路径

再创建一个demorule2写入刚才介绍的部分规则
恶意软件匹配引擎Yara
检测
恶意软件匹配引擎Yara
可以看到检测malware.exe匹配到了相应的规则

Yara还可以配合python调用
首先pip安装
恶意软件匹配引擎Yara
使用compile编译规则,match进行匹配,还是以一个最基础的作为例子
恶意软件匹配引擎Yara
规则名为foo,标签为bar,条件为字符串stu
在abcd…26个英语字母中进行匹配
我们打印出匹配后的结果
恶意软件匹配引擎Yara
打印出的分别是规则名、标记名、从a开始数第18个位置开始匹配到stu

查看解压后的yara_rules
该项目涵中不同的Yara签名被编译,分类并尽可能保持最新。
恶意软件匹配引擎Yara
从文件夹的名字就可以看出yara规则对应检测的有webshell、恶意软件、cve、反调试等特征。我们解压准备好的恶意软件样本,该样本从github上下载,属于CryptoLocker家族的一员
恶意软件匹配引擎Yara
将其移动到yara rules文件夹方便分析
接下里可以使用已有的yara文件检测了
恶意软件匹配引擎Yara
同样,yara命令后跟着的分别是检测用的规则、待检测的文件
从结果可以看出该恶意软件被检测出有截屏、键盘记录、操作文件、修改注册表等功能。
根据前面所学语法知识,我们可以查看该yara规则的一部分,比如win_file_operation是怎么写的
恶意软件匹配引擎Yara
先看condition,只有符合f1和c*中的三条就判断该文件有文件操作的功能。
从已有的成熟的代码中进行学习、修改不失为练习yara使用的一种好办法。
接下来使用其他yara规则进行分析
恶意软件匹配引擎Yara
以Crypto为例,可以看到只有最后一条特征命中,其他回显的是slow down scanning.这是什么意思呢?
我们查看文件
恶意软件匹配引擎Yara
可以看到$c0使用了{ 0-9,a-f,A-F }的大范围匹配,导致Yara运行时间大大增长,故而输出了警告。扫描单个样本的时候差别不大,但扫描大量样本的时候就会消耗大量时间,所以我们编写yara规则的时候要多加谨慎。
继续测试其他的规则
恶意软件匹配引擎Yara
Email规则没有命中,所以没有结果,基本上测试时就是以上几类情况。
其他规则请自行测试。

参考:

  1. 官方手册
    https://yara.readthedocs.io/en/v3.8.1/