yara 实验

article/2025/9/23 7:55:10

yara 实验


免责声明

本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关.


什么是 yara

YARA 是一款旨在帮助恶意软件研究人员识别和分类恶意软件样本的开源工具,使用 YARA 可以基于文本或二进制模式创建恶意软件家族描述信息,当然也可以是其他匹配信息。

这款工具配备一个短小精悍的命令行搜索引擎,它由纯C语言编写,优化了执行的效率。该引擎可以跨平台使用,能够运行 Windows,Linux 及Mac OS X 系统上。同时,这款工具提供 python 扩展,允许通过 python 脚本访问搜索引擎。

YARA 的功能非常丰富,尤其是与模块的集成。模块可以在保持规则可读性的基础上开启了非常精细的扫描。


安装

linux 下可以直接用包管理器进行安装

apt install -y yara

windows 下访问项目的 releases 页面下载 https://github.com/VirusTotal/yara/releases

为了方便,这里重命名 yara64.exe 为 yara.exe

在当前目录下打开 CMD, 输入 help

yara.exe --help


语法

--atom-quality-table=FILE        path to a file with the atom quality table-C,  --compiled-rules                 加载已编译的规则-c,  --count                          只打印匹配的数量-d,  --define=VAR=VALUE               定义外部变量--fail-on-warnings               警告失败-f,  --fast-scan                      快速匹配模式-h,  --help                           显示此帮助并退出-i,  --identifier=IDENTIFIER          print only rules named IDENTIFIER-l,  --max-rules=NUMBER               匹配多个规则后中止扫描--max-strings-per-rule=NUMBER    设置每条规则的最大字符串数(默认=10000)-x,  --module-data=MODULE=FILE        pass FILE's content as extra data to MODULE-n,  --negate                         仅打印不满足的规则 (negate)-w,  --no-warnings                    禁用警告-m,  --print-meta                     打印元数据-D,  --print-module-data              打印模块数据-e,  --print-namespace                打印规则的名称空间-S,  --print-stats                    打印规则的统计信息-s,  --print-strings                  打印匹配的字符串-L,  --print-string-length            打印匹配字符串的长度-g,  --print-tags                     打印标签-r,  --recursive                      递归搜索目录(遵循符号链接)--scan-list                      扫描FILE中列出的文件,每行一个-k,  --stack-size=SLOTS               设置最大堆栈大小(默认=16384)-t,  --tag=TAG                        只打印标记为TAG的规则-p,  --threads=NUMBER                 使用指定的线程数来扫描一个目录-a,  --timeout=SECONDS                在给定的秒数后中止扫描。-v,  --version                        显示版本信息

示例

基本使用

rule silent_banker : banker
{meta:description = "This is just an example"thread_level = 3in_the_wild = truestrings:$a = {6A 40 68 00 30 00 00 6A 14 8D 91}$b = {8D 4D B0 2B C1 83 C0 27 99 6A 4E 59 F7 F9}$c = "UVODFRYSIHLNWPEJXQZAKCBGMT"condition:$a or $b or $c
}
  • 第一行的 rule silent_banker : banker 是声明该规则用于检出 banker 类型的样本。
  • meta 后面的是一些描述信息,比如规则说明、作者信息等。
  • strings 定义了 $a $b $c 两个十六进制字符串(十六进制字符串用大括号括起来)和一个文本字符串(文本字符串直接用双引号括起来)
  • condition 规定了匹配的条件,这里写的是 or,表明样本中只要匹配到了 $a $b $c 三个字符串中的任意一个,那么样本就会被识别为 banker

新建一个 test.yara,内容同上,同时新建一个文件夹,文件夹中随机复制几个文件进去,进行识别

yara.exe test.yara 111/

没有任何反应, 因为我们的 yara 规则没有命中 111 文件夹下的任何文件。

修改下规则

rule silent_banker : banker
{meta:description = "This is just an example"thread_level = 3in_the_wild = truestrings:$a = {6A 40 68 00 30 00 00 6A 14 8D 91}$b = {8D 4D B0 2B C1 83 C0 27 99 6A 4E 59 F7 F9}$c = "UVODFRYSIHLNWPEJXQZAKCBGMT"$d = {4D 5A}condition:$a or $b or $c or $d
}

增加了一个十六进制字符串 $d 所匹配的值是 4D 5A。 而 4D 5A 是 PE 文件(包括 exe、dll 等)的文件头,也就是说一个正常的 PE 文件中是一定会包含 4D 5A 这个十六进制的数据的。

且我们在最后的 condition 中加入了 or $d,表示如果 $d 条件满足,样本也可以成功识别。

重新对111文件夹下的文件进行扫描

这里识别了多个文件,并命中自定义的 yara 特征。

如果要识别子目录下的文件需要 -r 参数

识别 python

新建 test.yara

rule python_test : python
{strings:$a="if __name__ == '__main__':" nocasecondition:$a
}

nocase 关键字代表不区分大小写

测试


匹配 CS

Win32_PE

这里生成多个 cs 马,分析提取一些特征。

可以看到大小区分的比较明显,要么 20kb 以下,要么 300kb 以下,这是因为小的是 Staged 大的是 Stageless。

yara 规则是会全文扫描的,那么这样将会大大降低扫描效率,如果我们能够写一些 filter 过滤掉大部分的不相关样本,那么 yara 在扫描的时候将会只对疑似的文件进行有效的扫描而不会浪费资源。

那这里可以过滤文件大小

rule CS : win32
{condition:filesize < 400KB
}

用 IDA 分析2个exe

来到 start 函数之后,我们可以发现多个 CobaltStrike 样本的入口点是完全一致的,程序入口点都是 004014B0

用 exeinfo pe 获取入口点,需要注意的是,这里是获取到的文件偏移,也就是offset,并不是我们在IDA中看到的entry_point

使用pe.entry_point来获取入口点

import "pe"rule CS : win32
{condition:pe.entry_point == 0x8b0 and filesize < 400KB
}

接下来继续找特征,静态查看 main 函数

这里调用了 sub_402A60 和 sub_401795 ,跟进查看,这里 sub_401795 比较关键

在 sub_401795 函数中,程序会通过 CreateThread 创建一个新线程

并且可以看到有一个 %c%c%c%c%c%c%c%c%cMSSE-%d-server 看起来像是通信协议。

这里 CreateThread 的 lpStartAddress 是 sub_401685, 在 sub_401685 的 sub_4015D0 函数中可以看到通过 CreateNamedPipeA 的方式创建管道准备通信。

那么接下来直接匹配这个字符串

import "pe"rule CS : win32
{strings:$comm="%c%c%c%c%c%c%c%c%cMSSE-%d-server"condition:pe.entry_point == 0x8b0 and filesize < 400KB and $comm
}

最后再加上一个 PE 文件的判断

import "pe"rule CS : win32
{strings:$comm="%c%c%c%c%c%c%c%c%cMSSE-%d-server"condition:uint16(0)==0x5A4D and pe.entry_point == 0x8b0 and filesize < 400KB and $comm
}

powershell

生成不同位数下的 powershell 后门

32位

64位

32 位和 64 位结构相似, 32 位使用 $DoIt = @''@方式定义两个函数. 程序关键执行的内容被 base64 编码

比较相似的就是这个 [Byte[]]$var_code = [System.Convert]::FromBase64String

匹配这种类似的字符串

rule powershell
{strings:$string1="[Byte[]]$var_code = [System.Convert]::FromBase64String"$string2="$var_runme.Invoke([IntPtr]::Zero)"condition:filesize < 20KB and $string1 and $string2
}


html_pe

CobaltStrike 提供 3 种生成 html 木马的方式 exe,powershell,vba,依次生成如下

exe

简单粗暴,直接包含一个 PE 文件在其中,

文件最后将 shellcode 释出为 evil.exe 并执行,这里文件名不一定是固定值,尝试通过正则进行匹配。

rule html_exe
{strings:$string="evil.exe"$string2="var_shellcode"$reg1= /var_tempexe = var_basedir & \"\\\" & \"[A-z]{1,20}.exe\"/condition:filesize < 100KB and $string and $string2 and $reg1
}

vba

查看 vba 版的html马

中间一大段为混淆的 vba 代码

通过 & 符号拼接由 chr 函数转换的 ascii

&Chr(10)&

这里比较容易找到特征,比如 myAr"&"ray

rule html_vba
{strings:$string="Wscript.Shell"$string2= "myAr\"&\"ray \"&Chr(61)&\" Array\"&Chr(40)&Chr(45)&\"4\"&Chr(44)&Chr(45)&\"24\"&Chr(44)&Chr(45)&"condition:filesize < 100KB and $string and $string2
}

powershell

查看结构

同样的 base64 编码命令, 解码查看

这里 $s=New-Object IO.MemoryStream 结合下文是将数据加载到内存中执行

在 cs3.14中是$s=New-Object IO.Memor

rule html_ps
{strings:$string= "Wscript.Shell"$string2= "var_shell.run \"powershell -nop -w hidden -encodedcommand"$string3= "var_func"condition:filesize < 100KB and $string and $string2 and $string3
}


Source & Reference

  • Yara入门——如何通过Yara规则匹配CobaltStrike恶意样本

点击关注,共同学习!安全狗的自我修养

github haidragon

https://github.com/haidragon


http://chatgpt.dhexx.cn/article/oXH6WSTc.shtml

相关文章

yara 分析器

1.下载源码 wget https://github.com/VirusTotal/yara/archive/refs/tags/v4.2.3.tar.gz 2.预编译 tar -zxf yara-4.2.0.tar.gz cd yara-4.2.0 ./bootstrap.shyum -y install automake libtool make gcc pkg-config yum -y flex bison 3.编译与安装 ./bootstrap.sh ./conf…

yara安装与使用

yara安装与使用 环境及安装工具使用yara规则编写strings部分转义大小写字符集表示匹配单个词组文本字符串 condition部分infilesizeatentrypointint8/16/32、uint8/16/32of??&#xff1f;[X-Y]them/($*)!for xxx of xxx &#xff1a;(xxx)for xxx i in (xxx) &#xff1a;(xx…

yara规则初识

一、YARA介绍 YARA 是一个免费开源工具&#xff0c;旨在帮助安全人员检测和分类恶意软件&#xff0c;但它不应仅限于这一种用途。YARA规则还可以帮助检测特定文件或您可能想要检测的任何内容。目前使用YARA 的知名软件有赛门铁克、火眼、卡巴斯基、VirusTotal、安天等。 YARA的…

Yara规则概述

一、Yara概述 YARA是一款旨在帮助恶意软件研究人员识别和分类恶意软件样本的开源工具&#xff08;由virustotal的软件工程师Victor M. Alvarezk开发&#xff09;&#xff0c;使用YARA可以基于文本或二进制模式创建恶意软件家族描述信息&#xff0c;当然也可以是其他匹配信息。…

这五个资源超多的资源网站 请务必珍藏起来

现在很多人都会在网上找资源&#xff0c;如今互联网的快速发展也让大家找起资源来非常的容易&#xff0c;只要有好的资源网站&#xff0c;就不怕没有找不到的资源。而今天我和大家分享的就是几个资源超多的网站&#xff0c;希望你们不再缺少资源。 1、落花网 这个就很厉害了&…

这5款电影资源网站,让人第一眼就心动,第二眼就流连忘返!

工作烦心了一天&#xff0c;回到家忙完事情泡一杯热腾腾的咖啡&#xff0c;拿起手机或平板&#xff0c;打开电影网站&#xff0c;惬意的躺在沙发上享受自己心仪的电影带给你的快乐时光吧&#xff01; 今天小编为大家推荐几款电影资源网站&#xff0c;喜欢的小伙伴千万不要错过&…

盘点程序员必备的免费资源网站

文章目录 1、软件资源类1、JDK国内镜像资源站2、 Arm原生 JDK&#xff08;为 M1系列Mac而生&#xff09;3、程序员大礼包 2、工具类1、在线工具2、菜鸟工具3、爱资料 2、算法&题库1、LeetCode2、LintCode3、牛客网 3、在线资源1、Github2、Stack Overflow3、CSDN4、天堂电影…

游戏美术资源网站推荐

梚辰 2022.4.25 未经授权禁止转发 最近我整理了一下以前使用过的购买游戏美术资源的网站&#xff0c;现在把这些分享给大家&#xff0c;希望对大家有些帮助。 1.Unity Asset Store&#xff08;Unity资源商店&#xff09; 这些Unity资源商店可以算是Unity官方的资源库了&#x…

晶体结构资源网站

晶体结构资源网站 1、无机晶体结构数据查询软件ICSD&#xff08;findit&#xff09;2、[晶体原型百科全书aflowlib](http://aflowlib.org/prototype-encyclopedia/index.html)3、[Crystallography Open Database](http://www.crystallography.net/cod/search.html)4、[American…

免费资源网站,你想要的全都有【各类宝藏资源 】

这6个免费资源网站&#xff0c;能帮你找到所有想要资源 前言 今天就把多年收藏整理的各类资源网站全都分享出来&#xff0c;都是完全免费的“资源”网站&#xff0c;质量非常高&#xff0c;一起来看看吧&#xff01; 1、我爱分享网 网站整理了办公软件、解压软件、截图工具、…

刷机资源网站推荐

是不是各位想刷机的朋友找不到资源站今天就来推荐一下&#xff08;资源均来源于网络&#xff0c;如果侵权请联系删除&#xff09; 1.萤火虫资源站 首页 - 首页 - &#x1f448;萤火虫资源站 (kamiui.ml) 资源比较充足还有OneDrive资源 2.Mindows工具箱 mindows.cn 可以把你的手…

珍藏已久的6个资源网站,每天让你不愁找不到资源,你值得拥有

想必如果你是一名在网上混迹多年的老网民,手上一定有几套属于自己的网站,有时候想要什么直接在里面搜索十分方便!也不需要满网进行瞎找,但是这类网站起来很快倒下来也很多,所以在很多时候我们要不断的更新自己手头上的资源。 这里我也整理了6款适合我们工作学习中常用的网…

你还在为找资源而发愁?这里有最佳的5个资源网站!

搜索引擎在我们工作生活中是举足轻重的工具了&#xff0c;想要在如此庞大的互联网资源库中找到自己需要的信息也是不简单的&#xff0c;这里给大家分享5个优质的资源网站&#xff0c;看完你肯定有相见恨晚的感觉。 1、纳米学习 http://www.1nami.com/ 这是一个集合了网易云课…

13个免费资源网站,你想要的全都有!【各类宝藏资源,建议收藏】

前言 前段时间&#xff0c;博主写了一篇文章关于如何用Python自制一款音乐播放器&#xff0c;有不少粉丝私信我说&#xff0c;这些高颜值UI设计模板都是从哪里找的&#xff0c;可以把网址分享出来嘛~ 当然没问题&#xff0c;今天就把多年收藏整理的各类资源网站全都分享出来&…

​遗传算法优化神经网络实现数据预测

作者 | 李秋键 责编 | 寇雪芹 头图 | 下载于视觉中国 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 引言 随着人工智能和大数据的发展&#xff0c;大量实验和数据处理等流程对算法的要求也随之变得越来越高&#xff0c;故综合以及灵活运用不同的算法以实现更高效的…

Python实现GWO智能灰狼优化算法优化支持向量机回归模型(svr算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 灰狼优化算法(GWO)&#xff0c;由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种群智能…

基于遗传算法GA算法优化BP神经网络(Python代码实现)

一、 概述 BP-GA算法的设计︰基于遗传算法的BP神经网络算法(以下简称BP-GA)就是在BP神经网络的学习过程中,将权重和阀值描述为染色体,并选取适宜的适应函数,然后进行GA迭代,直到某种意义上的收敛.与普通BP学习算法相比,算法 BP一GA的优势在于可以处理一些传统方法不能处理的例子…

Python实现WOA智能鲸鱼优化算法优化支持向量机分类模型(SVC算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 鲸鱼优化算法 (whale optimization algorithm,WOA)是 2016 年由澳大利亚格里菲斯大学的Mirjalili 等提出…

基于灰狼算法优化支持向量机的数据分类算法及其MATLAB实现-附代码

基于灰狼算法优化支持向量机的数据分类算法及其MATLAB实现-附代码 文章目录 基于灰狼算法优化支持向量机的数据分类算法及其MATLAB实现-附代码1 GWO-SVM 模型1.1 灰狼优化器GWO1.2 支持向量机分类SVM 2 基于GWO-SVM 的分类算法2.1 优化变量与目标函数的选取2.2 GWO-SVM 建模步骤…

基于麻雀算法优化LSTM回归预测(matlab)

基于麻雀算法优化LSTM回归预测&#xff08;matlab&#xff09; 概述&#xff1a; 麻雀算法构思lstm原理麻雀优化lstm原理代码及结果展示 第一部分 麻雀算法构思 众所周知&#xff0c;麻雀是常见的留鸟而且非常喜欢群居。这种生物是非常聪明的&#xff0c;有很强的记忆力&am…