导语: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进制结合,也可以思考攻击队使用的一些手法来拓展检测思
如若转载,请注明原文地址