首页
社区
课程
招聘
[原创]用命令行与Python使用YARA规则-识别恶意木马必备
发表于: 2017-12-1 20:17 14174

[原创]用命令行与Python使用YARA规则-识别恶意木马必备

2017-12-1 20:17
14174

  YARA是一款旨在帮助恶意软件研究人员识别和分类恶意软件样本的开源工具,使用YARA可以基于文本或二进制模式创建恶意软件家族描述与匹配信息。现在已经被多家公司所运用于自身的产品。

  YARA规则的字符串有三种类型:文本字符串、十六进制字符串、正则表达式。文本字符串用来定义文件或进程内存中可读型内容,十六进制字符串用来定义字节内容,正则表达式可用在文本字符串和十六进制字符串中。

  除了根据特征用来搜索病毒样本,还可以通过某些壳的特征判断软件用了啥壳。由于上传的可疑样本都会被保存到VT数据库中,所以通过VT还可以搜索到指定字符串的秘密级别文档。

1)技术细节

  DDE协议是Microsoft用来允许两个正在运行的应用程序共享相同数据的几种方法之一。 该协议正在被数以千计的应用程序使用,包括MS Excel,MS Word和Visual Basic进行数据交互。由于DDE是Microsoft的合法功能,因此大多数防病毒解决方案都不会标记任何警告或阻止使用DDE字段的文档。

  没有任何限制或检测的情况下,点击打开恶意文档都有可能在计算机上运行恶意代码。利用DDE的文档会运行一个控制台命令,使用PowerShell命令在受害者的机器上安装恶意软件。

利用方法:

2)安全事件

  这种DDE攻击技术首次被高级持续威胁(APT)黑客组织APT28利用,FireEye公司发布了最新的威胁情报报告《APT28: At The Center for The Storm(APT28:位于风暴中心)》。在此报告中FireEye认定著名的APT28组织就是俄罗斯政府支持的黑客组织。结合本次用YARA规则获取的样本,利用样本里的C&C信息还关联到DDE当前还被大量的Locky类勒索病毒所使用。

3)YARA规则

  通过Github搜索现有DDE YARA规则进行匹配。

4)获取到的样本信息

  通过VT就可以轻松匹配到互联网上使用这个office漏洞的样本。提取出利用这个漏洞的C&C信息后,接下来就可以根据C&C信息再关联到具体的事件,域名提取示例如下:

样本1-7bef74262c3624ca37a62c84b1ff3b82

通过关联C&C信息对应的样本跟locky勒索者病毒有关。

样本2- 14ba65111e967d79de13cee417c89c2c

样本3- 14ba65111e967d79de13cee417c89c2c

  调用YARA需要输入两条内容。一是包含想要使用的规则的文件(无论是源代码还是编译后的形式)、二是被扫描的目标( 目标可以是文件,文件夹或进程)

示例:

输出效果:

  规则文件可以直接源代码的形式使用,也可以先用yarac工具编译后使用。 如果打算以相同的规则多次调用YARA,以编译形式使用YARA规则可以节省更多时间。因为对于YARA来说,加载编译规则要比一遍又一遍编译相同的规则更快。

  编译YARA规则的批处理代码如下,代码中默认存放规则目录在C:\Yara\,编译后的库路径和名字为C:\Yara\AllSigs.yarc,这个路径可以自己定义:

编译完毕后,可以使用以下批处理代码对编译后的YARA数据库进行调用。

按照编译和安装YARA库,就可以使用Python运用YARA功能了。步骤如下:

1、导入yara模块

2、编译YARA规则,然后将它们应用到数据中,规则可以从文件路径编译:

3、Rules实例有一个match方法,它允许将规则应用于文件或是进程,这里给出应用文件的示例代码如下:

但是也可以将规则应用于Python字符串:

with的方法:

打开文件流的方法:

  核心代码学习完毕之后,就把重心点从所学应用到批量编译规则,批量扫描上来吧。不建议把目录存放在中文目录下。

yara_database_test.py

rule_test目录内容

test_vir目录内容

运行如下:

yara手册
http://yara.readthedocs.io/en/v3.7.0/

yara介绍
http://virustotal.github.io/yara/

恶意软件模式匹配利器 – YARA
http://www.freebuf.com/articles/system/26373.html

VirusTotal Hunting示例
https://www.virustotal.com/#/hunting-overview


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (8)
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
请问楼主,我将您的代码修改了部分,把我自己电脑上的路径输入,但是却出现了报错,请您看看我的使用是不是有什么不对的地方
if  __name__  ==  '__main__':
        rulepath  =  "D:\yujin\yara\新建文件夹  (2)源代码\Ft44k-yavol-87828aa60741\yara_rules"
        malpath  =  "D:\yujin\yara\新建文件夹  (2)源代码\Ft44k-yavol-87828aa60741\yara_rules"

报错是:Traceback  (most  recent  call  last):
    File  "D:\yujin\���\pycharm\PyCharm  Community  Edition  5.0.4\helpers\pydev\pydevd.py",  line  2411,  in  <module>
        globals  =  debugger.run(setup['file'],  None,  None,  is_module)
    File  "D:\yujin\���\pycharm\PyCharm  Community  Edition  5.0.4\helpers\pydev\pydevd.py",  line  1802,  in  run
        launch(file,  globals,  locals)    #  execute  the  script
    File  "D:/yujin/��ҵ���/gui/����/123yara.py",  line  35,  in  <module>
        yararule  =  getRules(rulepath)
    File  "D:/yujin/��ҵ���/gui/����/123yara.py",  line  13,  in  getRules
        for  index,file  in  enumerate(os.listdir(path)):
WindowsError:  [Error  123]  :  'D:\\yujin\\yara\\\xe6\x96\xb0\xe5\xbb\xba\xe6\x96\x87\xe4\xbb\xb6\xe5\xa4\xb9  (2)\xe6\xba\x90\xe4\xbb\xa3\xe7\xa0\x81\\Ft44k-yavol-87828aa60741\\yara_rules/*.*'
望楼主能指点一二,我将不胜感激
2018-3-29 17:02
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我后来更改了一下:
if  __name__  ==  '__main__':
        rulepath  =  'D:/vawtrack.yar/'
        malpath  =  'D:/rule.yar/'
但仍旧报错:
    Traceback  (most  recent  call  last):
    File  "D:/yujin/��ҵ���/gui/����/123yara.py",  line  35,  in  <module>
        yararule  =  getRules(rulepath)
    File  "D:/yujin/��ҵ���/gui/����/123yara.py",  line  13,  in  getRules
        for  index,file  in  enumerate(os.listdir(path)):
WindowsError:  [Error  267]  :  'D:/vawtrack.yar/*.*'
2018-3-29 17:20
0
雪    币: 4634
活跃值: (936)
能力值: ( LV13,RANK:350 )
在线值:
发帖
回帖
粉丝
4
python初学者 请问楼主,我将您的代码修改了部分,把我自己电脑上的路径输入,但是却出现了报错,请您看看我的使用是不是有什么不对的地方 if __name__ == '__main__': rulepath ...
同学,你这个问题我遇到过,是由于中文目录产生的。这也是我为什么加上
```
reload(sys)
sys.setdefaultencoding('utf8')
```

这两句的原因。 

至于你的报错,我感觉会两个原因,1、中文目录。2、yara规则库
仔细多看几遍文章与参考章节的文章,肯定可以搞定的。
2018-4-3 22:00
0
雪    币: 4634
活跃值: (936)
能力值: ( LV13,RANK:350 )
在线值:
发帖
回帖
粉丝
5
python初学者 我后来更改了一下: if __name__ == '__main__': rulepath = 'D:/vawtrack.yar/' malpath = 'D:/rule.yar ...
另外,请注意看我代码中的注释。

      #  rulepath  =  "D:\\rule_test"      #  yara规则目录
        #  malpath  ="D:\\test_vir"  #  木马存在目录
2018-4-3 22:02
0
雪    币: 1441
活跃值: (299)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
6
这个VT账号  需要购买吗
2018-4-22 11:24
0
雪    币: 940
活跃值: (1053)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
没有可以提交yara的vt账号
2018-7-9 16:29
0
雪    币: 2296
活跃值: (6668)
能力值: ( LV7,RANK:102 )
在线值:
发帖
回帖
粉丝
8
我比较好奇的是YARA是用什么算法来扫描那么多匹配规则的,难道是暴力搜索吗
2018-11-20 15:38
0
雪    币: 192
活跃值: (61)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
请问在yara3.9后的版本生成规则时需要的-C配置,在命令行调用时找到对应的么
2020-6-4 16:44
0
游客
登录 | 注册 方可回帖
返回
//