Yara
YARA是一款旨在帮助恶意软件研究人员识别和分类恶意软件样本的开源工具,使用YARA可以基于文本或二进制模式创建恶意软件家族描述与匹配信息。现在已经被多家公司所运用于自身的产品。
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
}
安装yara
1. 下载解压yara
sudo tar -zxvf yara-3.6.3.tar.gz
2. 安装支持包automake
apt-get install automake -y
3. 安装支持包libtool
apt-get install libtool -y
4. 安装支持包make
apt-get install make -y
5. 安装支持包gcc
apt-get install gcc -y
6. 进入yara -3.6.3 目录
cd yara-3.6.3
7. 编译环境
./bootstrap.sh
8. 以标准方式编译和安装yara
./configure
make
sudo make install
9. 运行测试
make check
Yara的lib库
如果编译报错缺少cuckoo,libjansson,libmagic等。。。
编译libjansson
Jshon的安装需要Jansson支持:jansson
#wget http://www.digip.org/jansson/releases/jansson-2.5.tar.gz
#tar -zxvf jansson-2.5.tar.gz
#cd jansson-2.5
#./configure && make && make install
#cd /root/soft
#wget http://kmkeen.com/jshon/jshon.tar.gz
#tar -zxvf jshon.tar.gz
#cd jshon-20120914
# make
安装之后测试
# echo '{"40154":"SND-VN-709", "40163":"SND-VN-710"}' | ./jshon
在这里可能会出现问题
error while loading shared libraries: libjansson.so.4: cannot open shared object file: No such file or directory
解决问题
# ls /usr/local/lib/
libjansson.a libjansson.la libjansson.so libjansson.so.4 libjansson.so.4.7.0 pkgconfig
# ln -s /usr/local/lib/libjansson.so.4 /usr/lib/libjansson.so.4
# ldconfig
好了问题解决
下面我们测试一下:
# echo '{"40154":"SND-VN-709", "40163":"SND-VN-710"}' | ./jshon
{
"40163": "SND-VN-710",
"40154": "SND-VN-709"
}
编译安装file-devel或libmagic-dev
yum install file-devel
apt-get install libmagic-dev
安装yara-python
https://github.com/VirusTotal/yara-python(写的很清楚了,但是有点下问题,按照我的来)
rm -rf build/ dist/
python setup.py build --dynamic-linking
python setup.py install
成功:
Python运用yara
编译和安装YARA库,就可以使用Python运用YARA功能了。
Demo:
#!/usr/bin/env.python # -*- coding: utf-8 -*-import yara import os# 获取目录内的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] = rupathyararule = 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)print malpathfp = open(mapath, 'rb')matches = rule.match(data=fp.read())if len(matches) > 0:print file, matchesif __name__ == '__main__':rulepath = "/home/authenticate/yara/rule_yara/" # yara规则目录malpath ="/home/authenticate/yara/test_simple/" # simple目录# yara规则编译函数调用yararule = getRules(rulepath)# 扫描函数调用scan(yararule, malpath)
注意:
1. 不建议目录中包含中文!!!
2. 报错yara: error while loading shared libraries: /usr/lib/libyara.so: cannot open shared object file: No such file or directory
解决:将libyara.so复制到/usr/lib目录下即可。