零、快速构建yara规则库的方案
-
Yara官方预置的规则库,链接 https://github.com/Yara-Rules/rules
-
ClamAV的特征码转换为yara规则,利用工具clamav_to_yara.py将clamav的特征码转换为yara规则
-
从yara-generator爬取别人上传的样本的规则
-
利用 yarGen工具 自动生成新的yara规则
当分析一个样本时,先用yara官方预置的库进行扫描。若没有匹配,将其上传到yara-generator网站
http://www.yara-generator.net/上自动分析yara规则,再将规则加入到规则库中。对于有针对性的分析某些行业的恶意软件,可以人工分析一些行业的关键字串特征,手动修改yara规则。
思路:
一、Yara官方预置的yara规则库
git clone
https://github.com/Yara-Rules/rules.git
规则以yar结尾。
二、ClamAV特征码转换为yara规则
2.1、用自带工具解压特征码
默认规则库放在/var/lib/clamav/main.cvd中,使用clamav自带的工具sigtool可以将其解压。
命令sigtool -u /var/lib/clamav/main.cvd可以将特征码解压,结果如下:
root@node1:/var/lib/clamav# sigtool -u /var/lib/clamav/main.cvd
root@node1:/var/lib/clamav# ll
total 808912
drwxr-xr-x 2 clamav clamav 4096 3月 2 13:39 ./
drwxr-xr-x 74 root root 4096 11月 29 14:50 ../
-rw-r--r-- 1 clamav clamav 1430528 2月 23 06:09 bytecode.cld
-rw-r--r-- 1 root root 17992 3月 2 13:39 COPYING
-rw-r--r-- 1 clamav clamav 192306688 3月 1 17:07 daily.cld
-rw-r--r-- 1 clamav clamav 69 11月 29 14:50 freshclam.dat
-rw-r--r-- 1 root root 44 3月 2 13:39 main.cdb
-rw-r--r-- 1 root root 44 3月 2 13:39 main.crb
-rw-r--r-- 1 clamav clamav 170479789 11月 29 14:51 main.cvd
-rw-r--r-- 1 root root 27584 3月 2 13:39 main.fp
-rw-r--r-- 1 root root 5220903 3月 2 13:39 main.hdb # 已知的恶意软件文件的MD5哈希值
-rw-r--r-- 1 root root 167946684 3月 2 13:39 main.hsb
-rw-r--r-- 1 root root 1221 3月 2 13:39 main.info
-rw-r--r-- 1 root root 11650768 3月 2 13:39 main.ldb
-rw-r--r-- 1 root root 255457140 3月 2 13:39 main.mdb # Windows PE恶意软件文件的MD5哈希值
-rw-r--r-- 1 root root 92 3月 2 13:39 main.msb
-rw-r--r-- 1 root root 23720141 3月 2 13:39 main.ndb # 十六进制特征码
-rw-r--r-- 1 root root 87 3月 2 13:39 main.sfp
Main.ndb 是下一步的输入文件。
2.2、特征码转换为规则
脚本地址:https://github.com/mattulm/volgui/blob/master/tools/clamav_to_yara.py
转换命令: python2 clamav_to_yara.py -f main.ndb -o clamav.yara -s Agent
转换出来的结果clamav.yara如下所示:
转换的规则存在部分问题,使用过程中还需要人工修整规则。
三、从yara-generator爬取规则
yara-generator(Joe Sandbox公司的)网上可以查看其他用户上传的样本文件生成的规则。其网址为
http://www.yara-generator.net/,这网站也可以下载恶意样本。
这里可以下载每个样本的yara rule,没有提供所有的打包下载,写个爬虫可以轻易获取所有的rule。
在不担心样本泄露的情况下,可以将样本上传到
www.yara-generator.net进行分析, 完成之后即可下载对应的yara规则,这样就省去了自己编写yara规则的繁重工作了。
四、yarGen生成yara规则
4.1、yarGen介绍
yargen是一个自动化提取yara规则的工具,可以提取strings和opcodes特征。
原理:
先解析出样本集中的共同的字符串,然后经过白名单库的过滤,最后通过启发式、机器学习等方式筛选出最优的yara规则。
yarGen从样本中提取所有ASCII和UNICODE字符串,并删除所有出现在 goodware 字符串数据库中的数据。然后,它通过使用fuzzy regular expressions和Gibberish Detector”来评估和评分每个字符串,该检测器允许yarGen检测并首选真实语言而不是没有意义的字符链。字符串的前 20 个将集成到生成的规则中。
多数据库支持:
yarGen允许为opcodes或strings创建多个数据库。您可以通过使用“-c”创建新数据库和“-i identifier”为新数据库提供唯一标识符(例如“office”)来轻松创建新数据库。它将创建两个名为“good-strings-office.db”和“good-opcodes-office.db”的新数据库文件,从那以后,这些文件将在内置数据库启动期间初始化。
数据库创建/更新示例:
从 Office 2013 程序目录创建新的字符串和操作码数据库:$ yarGen.py -c --opcodes -i office -g /opt/packs/office2013分析和字符串提取过程将在“./dbs”子文件夹中创建以下新数据库:good-strings-office.dbgood-opcodes-office.db这些新数据库中的值将在规则创建过程中自动应用,因为子文件夹“./dbs”中的所有 *.db 文件都将在启动期间初始化。可以使用“-u”参数更新创建后的数据库:yarGen.py -u --opcodes -i office -g /opt/packs/office365这将使用从给定目录中的文件中提取的新字符串更新“office”数据库
可以从日常应急中收集恶意样本,还可以通过蜜罐、威胁情报平台等渠道获取恶意样本,然后根据特征或者个人的习惯进行分类存放。
4.2、安装
因为yarGen 将整个 goodstring 数据库拉到内存中,并在几秒钟内使用至少 3 GB 的内存,请确保您计划使用 yarGen 的计算机上至少有 4GB 的 RAM(如果规则生成中包含操作码,则为 8GB,请与 --opcodes 一起使用)
1、git clone
https://github.com/Neo23x0/yarGen.git
2、cd yarGen/
3、安装依赖: pip3 install -r requirements.txt
4、运行 python3 yarGen.py --update以自动下载内置数据库。将保存到“ ./dbs”子文件夹中
5、对webshell样本文件生成yara规则文件,输入python3 yarGen.py -m webshell文件 -o yar文件名
python3 yarGen.py -m /home/yara_test/webshellSample/PHP/ransomware/ -o ransomware.yar
生成的yara规则还需修正。
4.3、yarGen指令
usage: yarGen.py [-h] [-m M] [-y min-size] [-z min-score] [-x high-scoring][-w superrule-overlap] [-s max-size] [-rc maxstrings][--excludegood] [-o output_rule_file] [-e output_dir_strings][-a author] [-r ref] [-l lic] [-p prefix] [-b identifier][--score] [--strings] [--nosimple] [--nomagic] [--nofilesize][-fm FM] [--globalrule] [--nosuper] [--update] [-g G] [-u][-c] [-i I] [--dropzone] [--nr] [--oe] [-fs size-in-MB][--noextras] [--debug] [--trace] [--opcodes] [-n opcode-num]yarGenoptional arguments:-h, --help show this help message and exitRule Creation:-m M 扫描恶意软件的路径-y min-size 要考虑的最小字符串长度(默认值=8)-z min-score 要考虑的最小分数(默认值=0)-x high-scoring 将字符串设置为“高度特定字符串”所需的分数(默认值:30)-w superrule-overlap 创建超级规则时重叠的最小字符串数(默认值:5)-s max-size 要考虑的最大长度(默认值=128)-rc maxstrings 每个规则的最大字符串数(默认值=20,将应用智能筛选)--excludegood 强制排除所有goodware stringsRule Output:-o output_rule_file 输出规则文件-e output_dir_strings 字符串导出的输出目录-a author 作者名字-r ref 引用(可以是string或text)-l lic License-p prefix 规则描述的前缀-b identifier Text file from which the identifier is read (default:last folder name in the full path, e.g. "myRAT" if -mpoints to /mnt/mal/myRAT)--score 将字符串分数显示为规则中的注释--strings 将字符串分数显示为规则中的注释--nosimple 跳过为包含在超级规则中的文件创建简单规则--nomagic Don't include the magic header condition statement--nofilesize Don't include the filesize condition statement-fm FM Multiplier for the maximum 'filesize' condition value(default: 3)--globalrule 创建全局规则global rules(提高了规则集速度)--nosuper 不要尝试创建与各种文件匹配的超级规则Database Operations:--update 从在线存储库更新本地字符串和操作码dbs-g G 扫描goodware的路径(不要使用yaraGen附带的数据库)-u 使用新的分析结果更新本地标准goodware数据库(与-g一起使用)-c 创建新的本地goodware数据库(与-g和可选的-i "identifier"一起使用)-i I 为新创建的数据库指定标识符(good-strings-identifier.db,good-opcode-identifier.db)General Options:--dropzone Dropzone模式-监视要处理的新样本的目录警告[-m]:已处理的文件将被删除!--nr 不递归扫描目录--oe 仅扫描可执行扩展EXE、DLL、ASP、JSP、PHP、BIN、INFECTED-fs size-in-MB 要分析的最大文件大小(MB)(默认值=10)--noextras 不要使用Imphash或PE头细节等额外内容--debug Debug output--trace Trace outputOther Features:--opcodes 请务必使用OpCode功能(如果找不到足够的高分字符串,请使用此功能)-n opcode-num 如果找不到足够的高分字符串,则要添加的opcodes数(默认值=3)
五、最佳实践
有关如何使用 yarGen 创建 YARA 规则的更详细说明,请参阅以下博客文章:
如何编写简单但合理的雅苒规则 - 第 1 部分
如何编写简单但合理的雅苒规则 - 第 2 部分
如何编写简单但合理的雅苒规则 - 第 3 部分
六、参考
Webshell样本库:
https://github.com/xl7dev/WebShell
https://github.com/tanjiti/webshellSample
https://github.com/webshellpub/awsome-webshell
https://github.com/DeEpinGh0st/PHP-bypass-collection/
GitHub - tutorial0/WebShell: WebShell Collect
https://github.com/malwares/WebShell
https://github.com/lhlsec/webshell
https://github.com/oneoneplus/webshell
https://github.com/vnhacker1337/Webshell
https://github.com/backlion/webshell
GitHub - Neo23x0/yarGen: yarGen is a generator for YARA rules
https://github.com/Neo23x0/yarAnalyzer
Yara规则以及yargen工具总结_qq_36944048的博客-CSDN博客
如何打造一款自己的恶意样本检测工具 - 哔哩哔哩 (bilibili.com)
构建自己的yara数据库 - alert123 - 博客园 (cnblogs.com)