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规则的更多相关文章

  1. 四则运算生成命令行程序 (Python)

    Github项目地址:Github Pages 结对项目成员:张鹏 3118004985 郑靓 3118004988 一.项目需求分析 二.功能实现 三.代码实现or功能说明 ★ GUI功能扩展说明 ...

  2. 在命令行输入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 ...

  3. 在Linux命令行执行python命令

    在Linux的命令行执行python的某些命令: [root@centos7 ~]# echo "import sys ;print(sys.path)"|python3.6 [' ...

  4. 设置PATH 环境变量、pyw格式、命令行运行python程序与多重剪贴板

    pyw格式简介: 与py类似,我认为他们俩卫衣的不同就是前者运行时候不显示终端窗口,后者显示 命令行运行python程序: 在我学习python的过程中我通常使用IDLE来运行程序,这一步骤太过繁琐( ...

  5. 命令行运行Python脚本时传入参数的三种方式

    原文链接:命令行运行Python脚本时传入参数的三种方式(原文的几处错误在此已纠正) 如果在运行python脚本时需要传入一些参数,例如gpus与batch_size,可以使用如下三种方式. pyth ...

  6. 命令行运行python模块时提示包找不到的问题

    庄稼人不是专职python开发的道友.尽管与python相识已多年,可惜相识不相知,仅仅是偶尔借助pydev写一些简单的小工具. 多年来.一直困惑于这样一个问题:相同的project.相同的代码,使用 ...

  7. Android SQLite3工具常用命令行总结

    Android SDK的tools目录下提供了一个sqlite3.exe工具,这是一个简单的sqlite数据库管理工具.开发者可以方便的使用其对sqlite数据库进行命令行的操作. 程序运行生成的*. ...

  8. android 7.0 多渠道打包 - 美团开源工具Walle 命令行打包

    在Android 7.0(Nougat)推出了新的应用签名方案APK Signature Scheme v2后,之前快速生成渠道包的方式(美团Android自动化之旅-生成渠道包)已经行不通了,对此美 ...

  9. 命令行以及Python交互模式下python程序的编写

    一.命令行模式 在Windows开始菜单选择“命令提示符”,就进入到命令行模式,它的提示符类似C:\>: 二.Python交互模式 在命令行模式下敲命令python,就看到类似如下的一堆文本输出 ...

随机推荐

  1. 第二个spring冲刺第9天

    其中一个队员在检查程序的BUG途中发现了几个重要的BUG比如答案乱码.程序闪退,弹出黑幕.于是我们决定先把这些问题解决再继续开发其他功能

  2. squid介绍和作用

    介绍 squid服务程序是一款在Unix系统中最为流行的高性能代理服务软件,通常会被当作网站的前置缓存服务,用于替代用户向网站服务器请求页面数据并进行缓存,通俗来讲,Squid服务程序会接收用户的请求 ...

  3. java词频统计——改进后的单元测试

    测试项目 博客文章地址:[http://www.cnblogs.com/jx8zjs/p/5862269.html] 工程地址:https://coding.net/u/jx8zjs/p/wordCo ...

  4. final发布简评

    1.nice!——约跑app:本次发布使用摄像头展示,比之前清晰的多,展示效果很好,值得学习!功能都已实现,已经可以使用,好评. 2.飞天小女警——礼物挑选:本次发布风格与上次不同,除此之外添加了猜你 ...

  5. C语言入门:05.scanf函数

    一.变量的内存分析 1.字节和地址 为了更好地理解变量在内存中的存储细节,先来认识一下内存中的“字节”和“地址”. (1)内存以“字节为单位”

  6. [转帖]SAP MES生产执行系统解决方案

    一.SAP MES概述: SAP公司成立于1972年,总部位于德国,是全球最大的企业管理和协同化商务解决方案供应商.全球第三大独立软件供应商.目前,在全球有120多个国家的超过86,000多家用户正在 ...

  7. 32位机和64位机下面各类型sizeof的大小

    ---<这种类型的题目出的太多了,还是整理下吧!>--- 一.机器平台:X86_64 处理器 操作系统:Red Hat 4.1.2-14 编译器: gcc version 4.1.2 20 ...

  8. delphi中登录界面关闭直接现实主界面是怎么回事?

    修改工程文件: Application.Initialize; Application.CreateForm(TmainForm, mainForm); Application.ShowMainFor ...

  9. ubuntu系统部署web项目

    1.安装java 下载java安装文件 可至http://www.oracle.com/technetwork/java/javase/downloads/index.html下载最新的JDK版本,当 ...

  10. The Accomodation of Students HDU - 2444(判断二分图 + 二分匹配)

    The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...