yara规则--构建yara规则库

news2024/11/25 2:47:33

零、快速构建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规则库

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 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 一起使用)
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]
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 规则的更详细说明,请参阅以下博客文章:
如何编写简单但合理的雅苒规则 - 第 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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/448011.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电容笔和触控笔有什么区别?2023平价好用的电容笔测评

无论是导电的材料,还是工作的原理,还是操作的方式,甚至是价格,电容笔都和一般的触控笔有着明显的区别。电容笔具有更小的笔尖,并且具有更好的耐磨性。而且现在科技进步很快,IPAD的市场也越来越大&#xff0…

【蓝桥杯省赛真题18】python阴影图形面积 青少年组蓝桥杯python编程省赛真题解析

目录 python阴影图形面积 一、题目要求 1、编程实现 2、输入输出

Linux-零拷贝及Java实现

RabbitMQ比RocketMQ、Kafka较慢点一点重要原因就是 零拷贝 什么是零拷贝? 零拷贝指的是在进行IO的时候减少或避免让CPU拷贝数据(数据在IO缓冲区中进行拷贝) 零拷贝的优点: 减少甚至完全避免不必要的CPU拷贝,从而让C…

paddlepaddle 的 CPU 和 GPU

想记录一下一个 bug 改了一上午改到最后发现并没有 bug 的 bug。 总结: 因为下午要跑很久,为了省 GPU 算力,我想上午先用 CPU 把数据处理部分跑出来(感觉数据处理部分不像网络训练那样涉及太多计算,所以感觉用 CPU 就…

JavaWeb开发 —— MyBatis动态SQL

目录 一、XML映射文件 1. 介绍 2. MyBatisX插件 二、MyBatis动态SQL 1. if 2. foreach 3. sql & include 一、XML映射文件 1. 介绍 ① XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名…

【Java EE】-网络编程(三) TCP/IP协议详解

作者:学Java的冬瓜 博客主页:☀冬瓜的主页🌙 专栏:【JavaEE】 主要内容:应用层HTTP协议、DNS域名解析系统、传输层UDP协议,TCP协议。TCP协议的工作机制:确认应答、超时重传、连接管理、滑动窗口…

【Linux】MySQL高可用之读写分离监控实践

一、Mycat-web安装配置 1、Mycat节点安装zookeeper(在mycat实现了读写分离上安装) ① 解压zookeeper压缩包 tar -zxvf zookeeper-3.4.14.tar.gz -C /opt/② cd到cnf目录下将文件复制 ③ cd到bin目录下启动 ./zkServer.sh start2、Mycat节点安装mycat-we…

跨境卖家不可错过的2023开斋节选品和营销技巧,轻松拓展海外市场

开斋节是穆斯林世界最重要的节日之一,同时也是跨境电商一个非常重要的销售节点。在这个节日期间,跨境卖家可以通过合适的选品和营销策略吸引更多的消费者,提高销售额。本文将探讨2023年跨境卖家在开斋节期间如何做好选品和营销。 一、选品 1…

MySQL到ClickHouse数据同步方案对比

ClickHouse 在执行分析查询时的速度优势很好的弥补了 MySQL 的不足,但是对于很多开发者和DBA来说,如何将MySQL稳定、高效、简单的同步到 ClickHouse 却很困难。本文对比了 NineData、MaterializeMySQL(ClickHouse自带)、Bifrost 三…

下一代听歌识曲技术——从信号处理到深度学习

音乐丰富我们的生活;音乐传达人类的情感;音乐表达人类的艺术。人类文明的进程中离不开音乐这个载体,音乐也离不开人类的真情创作。在听到好听却没听过的歌曲时,如何快速准确得到该歌曲的歌名成为当务之急。LiveVideoStackCon 2022…

网页学习-小试牛刀

网页学习 一、 网页组成二、HTML认知2.1 结构2.2 常用标签2.3 列表标签2.4 表格标签2.5 表单标签2.6 语义化标签2.7 字符实体 三、CSS认知四、JS认知 一、 网页组成 分为三大部分:HTML、CSS和JavaScript。 HTML(Hyper Text Markup Language&#xff0c…

根据端口号查询进程路径

研究背景: 在工作的时候,有时候我们会在服务器上部署很多API接口程式,每个程式都有不同的端口号,便于提供服务。当时间久了,我们需要对接口操作的时候,我们有可能会忘掉接口程式所在的路径,而只…

一文掌握如何使用Java操作文件与IO流

文章目录 1. 认识文件2. 文件的类型3. 操作文件3.1 属性3.2 构造方法3.3 常用方法 4. IO流4.1 字节流4.1.1 InputStream4.1.2 OutputStream4.1.3 flush刷新4.1.4 关闭文件close4.1.5 字节缓冲流 4.2 字符流4.2.1 Reader4.2.2 Writer4.2.3 Scanner4.2.4 字符缓冲流 5. 复制文件5…

C语言入门篇——语句篇

目录 1、空语句 2、表达式语句 3、复合语句 4、控制语句 4.1、C控制语句:循环 4.1.1、while 4.1.2、while里的break和continue 4.2.1、for 4.2.2、for里的break和continue 4.3.1、do while 4.3.2、do while里的break和continue 5、C控制语句&#xff1a…

Flink 实时数仓 (一) --------- 数据采集层

目录 一、数仓分层介绍二、实时需求概览三、统计架构分析四、日志数据采集1. 模拟日志生成器的使用2. 日志采集模块-本地测试3. 日志采集模块-打包单机部署 五、业务数据库数据采集1. MySQL 的准备2. 环境搭建3. 代码实现 六、Nginx 安装七、Maxwell 安装八、Canal 安装 一、数…

STM32 平衡小车之电机驱动

TB6612FNG简介 单片机引脚的电流一般只有几十个毫安,无法驱动电机,因此一般是通过单片机控制电机驱动芯片进而控制电机。TB6612是比较常用的电机驱动芯片之一。 TB6612FNG可以同时控制两个电机,工作电流1.2A,最大电流3.2A。 VM电…

通信方式基础知识

文章目录 前言一、分类方式1、串行通信和并行通信2、同步通信和异步通信3、单工、半双工、全双工通信 前言 南京的梧桐树可以鲨掉我的程度 一、分类方式 1、串行通信和并行通信 串行通信:按位顺序,占用引脚资源较少,速度较慢 并行通信&…

移除链表元素(链表篇)

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 思路: ①直接使用原来的链表来进行删除操作。 ②设置一个虚拟头结点在进行删除操作 ①直接使用原来的链表…

【数据结构】- (带头结点)循环双向链表 - 详细实现思路及代码

目录 一、概述 二、循环双向链表 三、循环双向链表实现步骤  📌3.1 C语言定义循环双向链表结点  📌3.2 循环双向链表初始化  📌3.3 循环双向链表插入数据  📌3.4 循环双向链表删除数据  📌3.5 循环双向链表查找数…

【python中的多线程了解一下?】

基本说明 线程(Thread)是操作系统进行调度的最小单位,是进程中的一个独立执行单元。线程与进程相比,具有更轻量级、更高效率、更易调度、共享资源等优点。 在传统的单核CPU中,操作系统通过时间片轮转算法将CPU的时间…