yara规则--构建yara规则库

零、快速构建yara规则库的方案

  1. Yara官方预置的规则库,链接  https://github.com/Yara-Rules/rules
  2. ClamAV的特征码转换为yara规则,利用工具clamav_to_yara.py将clamav的特征码转换为yara规则
  3. 从yara-generator爬取别人上传的样本的规则
  4. 利用 yarGen工具 自动生成新的yara规则
当分析一个样本时,先用yara官方预置的库进行扫描。若没有匹配,将其上传到yara-generator网站 http://www.yara-generator.net/上自动分析yara规则,再将规则加入到规则库中。对于有针对性的分析某些行业的恶意软件,可以人工分析一些行业的关键字串特征,手动修改yara规则。
思路:
 

一、Yara官方预置的yara规则库

规则以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、特征码转换为规则

转换命令: 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 expressionsGibberish Detector”来评估和评分每个字符串,该检测器允许yarGen检测并首选真实语言而不是没有意义的字符链。字符串的前 20 个将集成到生成的规则中。
多数据库支持:
        yarGen允许为opcodesstrings创建多个数据库。您可以通过使用“-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.db
good-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 一起使用)
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]
yarGen
optional arguments:
  -h, --help            show this help message and exit
Rule 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 strings
Rule 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 -m
                        points 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 output
Other Features:
  --opcodes             请务必使用OpCode功能(如果找不到足够的高分字符串,请使用此功能)
  -n opcode-num         如果找不到足够的高分字符串,则要添加的opcodes数(默认值=3)

五、最佳实践

有关如何使用 yarGen 创建 YARA 规则的更详细说明,请参阅以下博客文章:

六、参考

Webshell样本库:
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值