Yara简介

yara是一个用于检测恶意软件的开源工具,由VirusTotal研发。 其原理是基于模式匹配的。通过创建规则文件,文件中包含具体的检测规则,用来检测恶意软件包含的字符串等特征,比如恶意软件的sha256 hash值,IOC域名/IP,hex值(16进制)等。

世界范围内当前主流杀毒软件的恶意软件分析引擎几乎都集成了支持yara的工具,比如我们熟知的趋势,virusTotal,McAfee,Tenable,Cisco, Avast, Fortinet等。

完整列表请查阅:https://github.com/VirusTotal/yara

但是只使用yara来编写规则的工作量会非常巨大,所以由此衍生出一些基于yara的恶意软件扫描器。其中比较主流的有Loki,Thor Lite和Thor。前两款是免费开源,最后一个是收费的。上述工具均由Florian Roth开发,另外该作者维护了一个叫valhalla的公开的yara规则库(也是威胁情报平台), 可用于搜索有关恶意软件的yara规则及威胁情报。

另外yarGen这个工具可以用来生成自定义的yara规则。

总的来说就是,yara是最基础的单位,.yar文件里面可以写各种检测规则。Loki和Thor是基于yara开发的恶意软件扫描器,内置很多.yar文件(里面包含各种各样的规则)。当你遇到一个不在规则库中的恶意文件,需要针对特定恶意软件自定义规则时,yarGen可用于自动生成这些规则。

这里再分享一个yara工具的资源合集,有兴趣可以看看:GitHub - InQuest/awesome-yara: A curated list of awesome YARA rules, tools, and people.

所有工具的安装过程略,自行查阅github。

Yara规则创建

yara的规则文件以.yar结尾。 下面看一个示例的规则文件,内容如下:

yara_rule

  • rule后面跟规则名称
  • strings用于设置字符串变量,这里设置了小写和大写的hello
  • condition是条件判断,any of them表示匹配上面任意一个字符串就触发规则(表示检测到了)

详细的yara规则配置教程请查阅官方文档:Writing YARA rules — yara 4.2.0 documentation

Yara扫描示例

首先创建三个文件,其中test.yar是yara规则文件,另两个是纯文本文件,内容分别包含首字母大写的Hello和全大写的HELLO。

test.yar内容如下:

意思是只有匹配Hello的才检测成功。

下面我们来实际验证一下。 yara的使用语法如下:

yara <.yar规则文件> <需检测的可疑文件>

连续运行两次,结果如下:

可看到,第一次检测全大写的HELLO.txt没有任何输出,表示没检测到。 而第二次的输出表示,由test_hello规则检测出来,恶意文件为Hello.txt。

Loki扫描示例

Loki主要有以下四个功能:

  • 文件名IOC检查
  • Yara规则检查
  • 哈希值检查
  • C2回连检查

loki下载地址:Releases · Neo23x0/Loki · GitHub

实验环境需要安装:

  • Python3
  • Yara
  • Loki
  • yarGen 另外需要准备一个webshell恶意文件,这里使用一个名为b374k的php webshell,请自行去github搜索下载(下载index.php文件即可)。

安装完成后,需要先运行这个命令更新loki的yara规则库:

python3 loki.py --update # 更新后会在loki安装路径下新增signature-base目录

由于国内的网络环境所致,大概率会更新失败。这里提供另一个方法。

直接下载这个项目 https://github.com/Neo23x0/signature-base 然后解压到Loki的目录中,把解压后的目录名改成signature-base即可。

执行检测的命令只有一条,即:

python3 loki.py -p . # 切换到可疑文件所在目录,执行命令。-p是指定目录。

现在对php webshell文件进行检测:

结果显示ALERT,表示确认是恶意软件。图中列出了文件的hash值,匹配了哪条检测规则,检测结果为detected(检测到了)。

使用yarGen创建Yara规则

假设你收到一封钓鱼邮件,该邮件携带一封疑似恶意软件的.htm附件。虽然你使用Loki并未查出任何异常,但是当你分析其源代码时发现,该htm附件确认系恶意文件。此时你需要做的就是针对该恶意文件,生成新的yara规则文件,此时yarGen就派上用场了。

yarGen会分析恶意文件内容中的字符串,由于yarGen内置了一个庞大的字符串数据库,里面存储了大量存在于正常软件中的字符串,把这些正常的字符串与恶意文件内容中的字符串作对比,去除恶意文件中正常的字符串,剩下的就是疑似恶意的字符串,基于此生成新的yara检测规则。

跟Loki一样,使用前先更新一下:

python3 yarGen.py --update

生成新规则:

python3 yarGen.py -m /home/kali/suspicious-files/file2 --excludegood -o /home/kali/suspicious-files/file2.yar

其中:

  1. -m 指定恶意软件存储的路径。这里需要特别注意,经实测,该目录下最好是只放一个恶意文件样本,如果放多个,生成的检测规则可能会很不准确。
  2. –excludegood 表示去除无害的字符串
  3. -o 指定规则文件保存的路径

实际操作的截图:

生成后的规则可以使用yara直接运行:

yara new.yar malware

或者把新的规则文件挪到Loki程序目录的signature-base/yara路径下,然后使用Loki执行检测即可。

实际工作中我会遇到一些杀毒软件检测不出来的恶意文件(比如0day病毒),但是通过分析源码或者其它方式确信这就是恶意软件,那么我就会使用这种自定义生成规则的方式,更新loki的yara规则。以后遇到此类软件,都会自动识别为恶意。

Valhalla介绍

Valhalla平台由开发loki和thor的作者Florian Roth维护,可以在该网站上查询某个技术的关键字,搜索对应yara规则。 或者查询已知恶意软件的哈希值,也可以检索出对应规则(如果有的话)。

主页:https://valhalla.nextron-systems.com/

可以搜索phishing,结果会显示跟钓鱼邮件有关的规则,规则旁边有描述,以及virusTotal的病毒样本,有些还会关联MITRE ATT&CK知识库。

搜索恶意软件的哈希值:

另外如果能在该平台上检索出恶意软件对应规则,但本地实验环境上检测不出恶意行为,就表示本地的规则库该更新了。

原创文章转载请注明出处: 基于yara的恶意软件分析