YARA-规则匹配神器-简单使用篇
2021-04-01 10:00:00 Author: www.4hou.com(查看原文) 阅读量:125 收藏

导语:YARA 是一个旨在(但不限于)帮助恶意软件研究人员识别和分类恶意软件样本的开源工具。目前使用YARA 的知名软件有赛门铁克、火眼、卡巴斯基、VirusTotal、安天等。

当前默认实验环境、工具:

Windows 10

yara v4.0.2 64

Visual Studio 2015

1、简单介绍

YARA 是一个旨在(但不限于)帮助恶意软件研究人员识别和分类恶意软件样本的开源工具。目前使用YARA 的知名软件有赛门铁克、火眼、卡巴斯基、VirusTotal、安天等。

YARA的每一条描述、规则都由一系列字符串和一个布尔型表达式构成,并阐述其逻辑。YARA规则可以与文件或在运行的进程,以帮助研究人员识别其是否属于某个已进行规则描述的恶意软件等。

YARA 支持在Windows、Linux 和 Mac OS X 平台上运行。

项目地址:

https://github.com/VirusTotal/yara

官方文档:https://yara.readthedocs.io/

2、下载安装

在windows环境下,可直接下载编译好的exe文件使用,也可以下载源代码自行编译后使用。当前最新版本v4.0.2 (20201201),下载地址:

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

其他平台上安装使用也很方便,可查看官方提供的安装文档:

https://yara.readthedocs.io/en/stable/gettingstarted.html

(1)关于文件

下载完成之后解压看到两个文件:yara64.exe , yarac64.exe ,以下内容分别统称为yara[.exe] 和yarac[.exe]

yara 为yara使用程序

yarac 为编译yara规则工具,使用编译后的yara规则可以加快速度,正常使用yara会先编译规则之后再加载,所以预编译可以节省时间。

(2)测试-快速开始

图片

运行之后可看到:

(3)使用参数参考

yara --help 可查看yara的使用参数:

图片

简略翻译:

图片

图片

3、简单使用

(1)官方示例demo

在yara官方项目可以看到如下规则:

图片图片

将内容保存到一个文件里banker.yar (后缀名都可以,内容是规则就行,但是严谨统一常用还是yar吧),然后找个测试的文件直接测试就可以。

代码解释:

首行的rule silent_banker : banker 是声明当前规则名称,编写人员习惯和要求等不同,这个名称可以解释为检测banker类型的样本,silent_banker样本解释可查看链接:https://www.microsoft.com/

en-us/wdsi/threats/malware-encyclopedia-description?Name=Trojan:Win32/Silentbanker.B。

meta后面的是一些描述信息,比如可以有规则说明、作者信息、威胁等级、在野情况、文件MD5、来源等内容;strings后面是检测规则,有字符串、字节序列等内容;condition为判断条件。在本例检测规则处定义的字节序列和字符串,判断条件是or ,所以只要匹配到

$a $b $c三个字符串或字节序列中的任意一个,那么样本就会被识别成silent_banker 。因为没有找到样本,所以直接创建文件测试:

创建含有

{6A 40 68 00 30 00 00 6A 14 8D 91} 字节序列文件测试,之后运行命令扫描即可,其他参数可按需添加,执行:

yara silent_banker.yar testfile

图片

创建"UVODFRYSIHLNWPEJXQZAKCBGMT"字符串文件测试:

图片

修改一下,判断不是该样本:

(2)webshell扫描

一个收集yara规则的github项目:https://github.com/Yara-Rules/rules,里面有挺多webshell、恶意软件的yara规则。

以/webshells/WShell_THOR_Webshells.yar 文件的规则为示例,规则名:

webshell_h4ntu_shell_powered_by_tsoi_ : webshell ,在里面有对应样本的文件hash:

去沙箱平台查样本hash可以看到样本被检测过了,可下载样本回来本地检测:

图片

最后可以本地使用检测

/webshells/WShell_THOR_Webshells.yar 规则去检测该样本:

图片

规则解释:

当样本都存在以上四个字符串,则表示是

webshell_h4ntu_shell_powered_by_tsoi_ : webshell样本。

(3)恶意软件扫描

同样从https://github.com/Yara-Rules/rules项目找规则,到找样本,再到本地检测。这里选取/malware/APT_HackingTeam.yar 文件规则,规则名为Hackingteam_Elevator_DLL ,可以看到样本的hash:

图片

同样去沙箱下载样本:

图片

最后可以本地使用检测

/malware/APT_HackingTeam.yar 规则去检测该样本:

规则解释:

图片

当样本文件大小小于1000KB

当样本文件文件头为0x5a4d,即mz 头(window的PE文件标志)

当样本都涵盖了以上至少6个字符串

则表示是Hackingteam_Elevator_DLL 样本。

(4)火眼红队工具泄露分享规则

12月8日,美国顶级安全公司FireEye(中文名:火眼)发布一则通告称其内部网络被某个“拥有一流网络攻击能力的国家”所攻击,攻击者“拿走”了一些内部红队工具。FireEye 称不确定攻击者是否打算使用这些Red Team工具或公开披露它们,但是,出于谨慎考虑,为了协助防范这些工具被公开的风险,FireEye已发布识别这些工具的OpenIOC,Yara,Snort和ClamAV检测规则,以尽量减少丢失这些工具的潜在影响。

检测规则项目:

https://github.com/fireeye/red_team_tool_countermeasures,这里直接看allyara.yar就可以了,其他的规则可以慢慢查看研究。可以看到第一个检测规则名HackTool_MSIL_Rubeus_1 :

在meta字段里有两个重要信息:描述和样本的md5。按照描述可以知道这是针对https://github.com/GhostPack/Rubeus 项目编译出来的样本检测规则(一个针对域攻击的工具),同样可以通过md5直接在沙箱下载样本回来检测:

规则解释:

同样是检测是pe文件,之后当

658C8B7F-3664-4A95-9572-A3E5871DFC06 字符串(修饰符表明忽略大小写、ascii、宽字节字符串匹配中了都可以)存在样本里则说明是HackTool_MSIL_Rubeus_1 样本。

(5)其他

扫描进程:yara rules\rules.yar pid

文件夹扫描:yara rules\rules.yar folder

4、提取编译后的yara规则

用官方的yarac 编译yara规则, yarac 的使用很简单,直接yara --help 可看到:

Usage: yarac [OPTION]... [NAMESPACE:]SOURCE_FILE... OUTPUT_FILE

直接拿一个规则测试:

图片

遇到一个错误可在官方项目issue里面找到解决方案,使用编译后的规则加个参数-C 。可见编译后的字节码规则检测出了样本,可以看到字节码文件的文件头有YARA 标识:

提取YARA编译后的规则字节码文件看到的文章不多,在youtube看到有人在研究,应该是有工具了但是没公开。

一种方法:基于源码改造实现反编译YARA规则,文章链接:

https://www.anquanke.com/post/id/170938,里面介绍了yara的一些流程和作者分享的思路,这里我直接按照作者思路提取规则信息。想要的信息都保存在YR_RULE类似的结构体中,只不过官方把这些信息全部都封装起来了,它并没有提供输出反编译后的信息,这个就需要自己手动调试,修改一些处理逻辑,将这些所谓“隐藏“的信息全部打印出来即可。匹配中规则,和不中规则的全部打印出来,下载yara源码进行修改,之后重新编译生成可执行文件即可:

这里准备一个空文件,让规则不匹配,达到打印字节码文件全部规则的效果。运行:yara_diy.exe -C

rules\APT_HackingTeam_.yar simples\blankfile -nms

图片

yara_diy.exe 为修改重新编译生成的yara,参数-n 、-m 、-s

图片

规则编写思考(话痨):

规则要经过误报测试,不能匹配白文件或其他类型木马,只能匹配同一类木马家族,规则要通用性,不能只单独匹配到一个文件,正则最好不能出现"扫描速度慢",写的时候可以写多些字符串(除非敢打包票一定对,可以写少点)或者字符串跟16进制结合,也可以思考攻击队使用的一些手法来拓展检测思

路。

如若转载,请注明原文地址


文章来源: https://www.4hou.com/posts/NX1N
如有侵权请联系:admin#unsafe.sh