【工具】用命令行与Python使用YARA规则
1、前言
YARA是一款旨在帮助恶意软件研究人员识别和分类恶意软件样本的开源工具,使用YARA可以基于文本或二进制模式创建恶意软件家族描述与匹配信息。现在已经被多家公司所运用于自身的产品。
2、YARA-规则撰写
YARA规则的字符串有三种类型:文本字符串、十六进制字符串、正则表达式。文本字符串用来定义文件或进程内存中可读型内容,十六进制字符串用来定义字节内容,正则表达式可用在文本字符串和十六进制字符串中。
rule HexExample /* 规则名称 */
{
strings: /* 字符串,可使用文本字符串、十六进制字符串、正则表达式 */
$hex_string = {6A 40 68 00 30 00 00 6A 14 8D 91}
$char_string = "UVODFRYSIHLNWPEJXQZAKCBGMT"
condition: /* 条件区域 */
$hex_string or $char_string
}
3、YARA使用
除了根据特征用来搜索病毒样本,还可以通过某些壳的特征判断软件用了啥壳。由于上传的可疑样本都会被保存到VT数据库中,所以通过VT还可以搜索到指定字符串的秘密级别文档。
3.1 VT使用
1、使用VT账户登录VT->hunting模块

2、在Rulesets选项中Edit添加YARA规则并保存

3、在Rulesets选项中Settingss设置自己的联系邮箱并保存,用于获取检索结果。

4、设置完Rulesets中的YARA规则后便可在Notifications选项中得到想要检索的样本

5、示例
1)技术细节
DDE协议是Microsoft用来允许两个正在运行的应用程序共享相同数据的几种方法之一。 该协议正在被数以千计的应用程序使用,包括MS Excel,MS Word和Visual Basic进行数据交互。由于DDE是Microsoft的合法功能,因此大多数防病毒解决方案都不会标记任何警告或阻止使用DDE字段的文档。
没有任何限制或检测的情况下,点击打开恶意文档都有可能在计算机上运行恶意代码。利用DDE的文档会运行一个控制台命令,使用PowerShell命令在受害者的机器上安装恶意软件。
利用方法:
新建一个Word文档,通过Ctrl+F9添加一个域,然后修改域代码为:
{ DDEAUTO c:\\windows\\system32\\cmd.exe " /k notepad.exe" }
{ DDE c:\\windows\\system32\\cmd.exe " /k notepad.exe" }
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规则进行匹配。
rule Office_DDEAUTO_field {
strings:
$a = /<w:fldChar\s+?w:fldCharType="begin"\/>.+?\b[Dd][Dd][Ee][Aa][Uu][Tt][Oo]\b.+?<w:fldChar\s+?w:fldCharType="end"\/>/
condition:
$a
}
rule Office_DDE_field {
strings:
$a = /<w:fldChar\s+?w:fldCharType="begin"\/>.+?\b[Dd][Dd][Ee]\b.+?<w:fldChar\s+?w:fldCharType="end"\/>/
condition:
$a
}
rule Office_OLE_DDEAUTO {
strings:
$a = /\x13\s*DDEAUTO\b[^\x14]+/ nocase
condition:
uint32be(0) == 0xD0CF11E0 and $a
}
rule Office_OLE_DDE {
strings:
$a = /\x13\s*DDE\b[^\x14]+/ nocase
condition:
uint32be(0) == 0xD0CF11E0 and $a
}
4)获取到的样本信息
通过VT就可以轻松匹配到互联网上使用这个office漏洞的样本。提取出利用这个漏洞的C&C信息后,接下来就可以根据C&C信息再关联到具体的事件,域名提取示例如下:
样本1-7bef74262c3624ca37a62c84b1ff3b82

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

样本2- 14ba65111e967d79de13cee417c89c2c

样本3- 14ba65111e967d79de13cee417c89c2c

3.2 Windows命令行运用YARA
调用YARA需要输入两条内容。一是包含想要使用的规则的文件(无论是源代码还是编译后的形式)、二是被扫描的目标( 目标可以是文件,文件夹或进程)
示例:
yara32.exe -m -w -f -r AllSigs.yarc C:\Users\AT\Desktop\YARA学习\Yara
-m 打印元数据
元数据(MetaData)的目的在于对规则描述进行额外的描述存储
-w 禁用警告信息
-f 快速匹配模式
-r 递归搜索目录
输出效果:

规则文件可以直接源代码的形式使用,也可以先用yarac工具编译后使用。 如果打算以相同的规则多次调用YARA,以编译形式使用YARA规则可以节省更多时间。因为对于YARA来说,加载编译规则要比一遍又一遍编译相同的规则更快。
编译YARA规则的批处理代码如下,代码中默认存放规则目录在C:\Yara\,编译后的库路径和名字为C:\Yara\AllSigs.yarc,这个路径可以自己定义:
@echo off
::将自身路径设置为变量
Set CurPath=%CD%
::删除原规则文件
del C:\Yara\AllSigs.yara
::把当前路径下的文件名字全部读取
::type命令解析*.yara内容追加到AllSigs.yara
for /r %%i in (*.yara) do (
type %%i >> AllSigs.yara
)
::yarac 为编译yara工具,将AllSigs.yara编译成AllSigs.yarc
call C:\Yara\yarac32.exe C:\Yara\AllSigs.yara C:\Yara\AllSigs.yarc
::如果编译成功跳转,不成功则打印出错误码,删除规则文件后跳转到结束位置
if %ERRORLEVEL% == 0 goto :next
echo Errors encountered during yara compliation. Exited with status: %errorlevel%
del C:\Yara\AllSigs.yara
goto :endofscript
::打印出编译成功
:next
echo Yara compilation successful!
:endofscript
编译完毕后,可以使用以下批处理代码对编译后的YARA数据库进行调用。
@echo off
C:\Yara\yara32.exe -m -w -f -r C:\Yara\AllSigs.yarc %1
3.3 使用python运用YARA
按照编译和安装YARA库,就可以使用Python运用YARA功能了。步骤如下:
1、导入yara模块
import yara
2、编译YARA规则,然后将它们应用到数据中,规则可以从文件路径编译:
rules = yara.compile(filepath='/foo/bar/myrules')
3、Rules实例有一个match方法,它允许将规则应用于文件或是进程,这里给出应用文件的示例代码如下:
matches = rules.match(‘/foo/bar/my_file’)
但是也可以将规则应用于Python字符串:
with的方法:
with open('/foo/bar/my_file', 'rb') as f:
matches = rules.match(data=f.read())
打开文件流的方法:
fp = open(mapath, 'rb')
matches = rule.match(data=fp.read())
核心代码学习完毕之后,就把重心点从所学应用到批量编译规则,批量扫描上来吧。不建议把目录存放在中文目录下。
yara_database_test.py
#/usr/bin/python
#coding=utf-8
import yara
import os
import sys
reload(sys)
sys.setdefaultencoding('utf8')
# 获取目录内的yara规则文件
# 将yara规则编译
def getRules(path):
filepath = {}
for index,file in enumerate(os.listdir(path)):
rupath = os.path.join(path, file)
key = "rule"+str(index)
filepath[key] = rupath
yararule = yara.compile(filepaths=filepath)
return yararule
# 扫描函数
def scan(rule, path):
for file in os.listdir(path.decode("utf-8")):
mapath = os.path.join(path, file)
fp = open(mapath, 'rb')
matches = rule.match(data=fp.read())
if len(matches)>0:
print file,matches
if __name__ == '__main__':
rulepath = sys.argv[1]
malpath = sys.argv[2]
# rulepath = "D:\\rule_test" # yara规则目录
# malpath ="D:\\test_vir" # 木马存在目录
#yara规则编译函数调用
yararule = getRules(rulepath)
# 扫描函数调用
scan(yararule, malpath)
rule_test目录内容

test_vir目录内容

运行如下:

4、参考
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
VirusTotal Hunting使用帮助
https://www.virustotal.com/intelligence/help/malware-hunting/
教你构建自己的yara数据库
http://www.freebuf.com/sectool/92399.html
Yara官方预置规则
https://github.com/Yara-Rules/rules
yarapython
http://yara.readthedocs.io/en/v3.4.0/yarapython.html
【工具】用命令行与Python使用YARA规则的更多相关文章
- 四则运算生成命令行程序 (Python)
Github项目地址:Github Pages 结对项目成员:张鹏 3118004985 郑靓 3118004988 一.项目需求分析 二.功能实现 三.代码实现or功能说明 ★ GUI功能扩展说明 ...
- 在命令行输入python出现“Warning:This Python interpreter is in a conda environment, but the environment has not been activated. Libraries may fail to load. To activate this environment please see https://conda.
[现象] 在命令行输入python出现“Warning:This Python interpreter is in a conda environment, but the environment h ...
- 在Linux命令行执行python命令
在Linux的命令行执行python的某些命令: [root@centos7 ~]# echo "import sys ;print(sys.path)"|python3.6 [' ...
- 设置PATH 环境变量、pyw格式、命令行运行python程序与多重剪贴板
pyw格式简介: 与py类似,我认为他们俩卫衣的不同就是前者运行时候不显示终端窗口,后者显示 命令行运行python程序: 在我学习python的过程中我通常使用IDLE来运行程序,这一步骤太过繁琐( ...
- 命令行运行Python脚本时传入参数的三种方式
原文链接:命令行运行Python脚本时传入参数的三种方式(原文的几处错误在此已纠正) 如果在运行python脚本时需要传入一些参数,例如gpus与batch_size,可以使用如下三种方式. pyth ...
- 命令行运行python模块时提示包找不到的问题
庄稼人不是专职python开发的道友.尽管与python相识已多年,可惜相识不相知,仅仅是偶尔借助pydev写一些简单的小工具. 多年来.一直困惑于这样一个问题:相同的project.相同的代码,使用 ...
- Android SQLite3工具常用命令行总结
Android SDK的tools目录下提供了一个sqlite3.exe工具,这是一个简单的sqlite数据库管理工具.开发者可以方便的使用其对sqlite数据库进行命令行的操作. 程序运行生成的*. ...
- android 7.0 多渠道打包 - 美团开源工具Walle 命令行打包
在Android 7.0(Nougat)推出了新的应用签名方案APK Signature Scheme v2后,之前快速生成渠道包的方式(美团Android自动化之旅-生成渠道包)已经行不通了,对此美 ...
- 命令行以及Python交互模式下python程序的编写
一.命令行模式 在Windows开始菜单选择“命令提示符”,就进入到命令行模式,它的提示符类似C:\>: 二.Python交互模式 在命令行模式下敲命令python,就看到类似如下的一堆文本输出 ...
随机推荐
- C++:继承访问属性(public/protected/private)
• 公有继承(public) 公有继承在C++中是最常用的一种继承方式,我们先来看一个示例: #include<iostream> using namespace std; class F ...
- (Alpha)Let's-个人贡献分
Alpha阶段个人贡献分如下: (1201)林珣玙 60 (1190)康家华 55 (1194)刘彦熙 53 (1168)仇栋民 48 (1183)马瑶华 42 (1222)张启东 42
- Daily Scrum 10.21
然后由于服务器端有变化,另外具体IDE已经确定,接下来对已经分配下去的任务做些细节补充: 10.20日晚所有人必须完成AS的配置,统一版本为1.3.2,安卓版本为4.4.0,可视化界面手机为Nexus ...
- File类操作文件
简单示例: public static void main(String[] args) { // 列出系统所有的根路径 File[] listRoots = File.listRoots(); fo ...
- Alpha冲刺第4天
Alpha第四天 1.团队成员 郑西坤 031602542 (队长) 陈俊杰 031602504 陈顺兴 031602505 张胜男 031602540 廖钰萍 031602323 雷光游 03160 ...
- [51CTO]新说MySQL事务隔离级别!
新说MySQL事务隔离级别! 事务隔离级别这个问题,无论是校招还是社招,面试官都爱问!然而目前网上很多文章,说句实在话啊,我看了后我都怀疑作者弄懂没!本文所讲大部分内容,皆有官网作为佐证,因此对本文内 ...
- MongoDB入门 和nodejs操作
简介 MongoDB 开源,高性能的NoSQL数据库:支持索引.集群.复制和故障转移.各种语言的驱动程序:高伸缩性: NoSQL毕竟还处于发展阶段,也有说它的各种问题的:http://coolshel ...
- Mysql 间隙锁原理,以及Repeatable Read隔离级别下可以防止幻读原理(百度)
Mysql知识实在太丰富了,前几天百度的面试官问我MySql在Repeatable Read下面是否会有幻读出现,我说按照事务的特性当然会有, 但是面试官却说 Mysql 在Repeatable Re ...
- SSR & Next.js & Nuxt.js
SSR & Next.js & Nuxt.js Server Side Rendering https://nextjs.org/ https://nuxtjs.org/ SSR &a ...
- ES6之Promise用法详解
一 前言 本文主要对ES6的Promise进行一些入门级的介绍.要想学习一个知识点,肯定是从三个方面出发,what.why.how.下面就跟着我一步步学习吧~ 二 什么是Promise 首先是what ...