2022年勒索软件概况
根据Chainanalysis中2022年加密犯罪报告显示,2021年勒索软件攻击者获取了价值6.02亿美元的加密货币。在CyberEdge Group在2022年网络威胁防御报告中表示,71%的受访企业成为勒索软件攻击的受害者。
RaaS商业模式
勒索软件即服务Ransomware-as-a-Service (RaaS)是当前全球勒索软件攻击势头急剧上升的背景下出现一种服务模式。
2. 勒索软件攻击手段及攻击流程
2.1. 攻击手段
勒索病毒主要的攻击方法,其实主要的三种:
上面的三种方式都可以进行一重勒索攻击活动,但如果想进行二重勒索、三重勒索等攻击活动,一般都是先通过上面的某种方法,进入企业内网,然后利用各种黑客工具进行横向渗透或安装其他恶意软件,包含远控木马,后门等拿到企业核心数据之后,再进行勒索攻击活动,横向渗透一般使用的技巧就是红队的一些攻击技巧了。
勒索病毒攻击技术已经从最开始单一的使用RDP暴破等攻击方式,逐渐向APT定向攻击进行演变,勒索病毒样本使用的加密算法、免杀技术、攻击模块也在不断增加,同时黑客也会通过RAAS平台来运营自己的勒索病毒,以赚取更多的利益。
2.2. 攻击流程
勒索软件的攻击过程可分为系统感染、文件遍历和加密、索取赎金与文件解密四个阶段。系统感染阶段,勒索软件可通过网络钓鱼、漏洞利用等方式来感染主机;在文件遍历和加密阶段,勒索软件通常会执行一系列诸如文件查找及识别、文件加密等操作,这些操作一旦执行完成,被感染主机中全部特定文件都会被加密;索取赎金阶段通过勒索文本告知受害用户如何支付赎金;当受害用户支付赎金后,即进入文件解密阶段,攻击者释放解密器以解密被加密的文件。
3. 勒索软件检测技术
勒索软件检测技术是用来对勒索软件进行发现并分类,从而避免收到安全威胁。其检测技术主要分为静态检测与动态检测。
静态检测与动态检测适用期
3.1. 静态分析
静态分析包括检查可执行文件的代码或结构,而不执行它。用于唯一识别恶意程序的最常见方法是哈希。两种最流行的哈希函数分别是消息摘要算法5(MD5)和安全哈希算法1(SHA-1)。静态分析缺点在于对使用了混淆、变形等技术等软件无法准确识别。
3.1.1. 查找字符或字符串的序列
搜索程序的字符串是获得有关其功能的提示的最简单的方法。从二进制中提取的字符串可以包含对可执行文件修饰符或访问的文件路径的引用、程序访问的URL、域名、IP地址、攻击命令、加载的Window动态链接库(DLL)的名称、注册表项等。实用程序工具Strings可用于搜索ASII或Unicode字符串、而忽略可执行文件中的上下文和格式话。
3.1.2. 链接库、函数、元数据
这些数据提供了许多程序通用的代码库和功能信息。通过Windows函数名称可以了解执行文件的是什么。可以使用PEView进行检索此类信息。API函数和系统调用与操作系统提供的服务有关,如网络、安全、文件管理等。由于软件在没有使用API函数的情况下没有其他方式访问系统资源,因此对特定API函数的调用提供了表示恶意软件行为的关键信息。(详情见windows api索引:https://learn.microsoft.com/zh-cn/windows/win32/apiindex/windows-api-list?redirectedfrom=MSDN)。
3.1.3. 分析PE文件头和部分
PE文件头提供的信息不仅仅是导入。他们包含关于文件本身的元数据。通过Windows函数名称可以了解执行文件的是什么。可以使用PEView进行检索此类信息。
3.1.4. 正在搜索已打包/加密的代码。
恶意软件编写者通常使用包装和加密使他们的文件更难分析。被打包或加密的软件程序通常包含更少的字符串和熵。检测打包文件的一种方法是使用PEiD程序。
3.1.5. 将机器码转换成汇编语言
使用IDA等反汇编工具对可执行文件进行逆向分析。
3.1.6. 熵
勒索软件经常用各种模糊技术来隐藏可执行文件。常用的两种是压缩和加密。因为经过加密或压缩的代码段的文件往往比本机代码具有更高的熵。
3.2. 动态分析
动态分析克服了静态分析的缺点,可快速识别勒索软件类型,建立在隔离的物理环境或虚拟机进行执行。如开源的cuckoo(布谷鸟沙箱)。通过执行程序和监视其在系统上的行为。一些工具有Procmon,Process Explorer、RegShot、ApateDNS、NetCat、WireShake等。
3.2.1. 内存和寄存器的使用情况
监视勒索软件的运行时行为,并在调用API之前和之后存储每个连接的API调用的寄存器值。随后追踪寄存器值的分布和变化。
3.2.2. 指令跟踪
动态指令跟踪是在程序执行过程中调用的处理器指令序列。与静态指令跟踪相反,动态跟踪是在执行时排序的,而静态跟踪是在在二进制文件中出现时排序的。动态跟踪是对程序行为的一种更健壮的度量方法,因为代码打包器和加密器可能会混淆和阻碍代码指令的静态分析。其中又可能用到的算法有:随机森林(RF)、隐马尔可夫模型。
3.2.3. 网络流量
检测网络上的恶意流量可以观察到勒索软件的行为。一旦勒索软件感染了主机,它可能会与外部服务器建立通信,以获得对受害者执行的命令。对流量检测的一些方案有:网络流量行为特征、恶意DNS检测、基于HTTP流量中代理异常建立检测签名法等。
3.2.4. API调用跟踪
使用了WindowsAPI调用跟踪来捕获恶意应用程序的行为。一些方案有:调用连接手机的原始信息法、基于API检测关联挖掘法、基于API调用参数和返回值检测法、基于API序列特征识别法等。
3.3. 流量检测
勒索软件利用本地的互联网访问权限连接至黑客的C&C(Command-and-Control)服务器,进而上传本机信息并下载加密私钥与公钥,利用私钥和公钥对文件进行加密。基于此活动特征,通过提取流量中连接通信日志、SSL协议日志、证书日志三部分,基于四元组对流量进行特征提取。
连接特征包括:聚合和连接记录的数量,每个连接四元组包含的SSL聚合和连接记录数量和;持续时间均值,每个连接四元组的连接参数duration的均值;持续时间标准差,每个连接四原则的连接参数duration的标准差;超出标准差范围的持续时间占比,每个连接四元组的所有持续时间值中有多少百分比超出的范围;总发包大小,每个连接四元组的所有连接记录发送的有效负载字节数;等等。
SSL特征:连接记录中SSL连接的占比;TLS与SSL的比值;SNI占比,连接四元组中server_name不为空的比例;SNI is IP,连接四元组中server_name为ip地址的比例;等等。
证书特征:公钥均值,连接四元组中全部证书expon的均值;证书有效期的平均差,连接四元组全部证书的有效天数的均值;证书有效期的标准差,连接四元组全部证书的有效天数的标准差;捕获期间证书周期的有效性,连接四元组的全部证书中没有过期的占比;等等。
通过提取丰富的特征,使用随机森林、XGBOOST等模型,通过对流量进行检测。
4. 检测案例
4.1. CS Beacon木马检测
使用CobaltStrike生成windows的木马文件:
将生成的木马文件存放到某一个目录,并创建一些文件以做效果展示。
使用Exeinfo PE查看木马文件:
使用IDA对木马文件反编译木马文件,并使用空格转换成汇编代码:
使用Control+E,跳转到start函数,入口点为4014B0:
使用CS再生成多个beacon样本,发现入口点都是14b0,推测CS生成的入口点都在14b0:
使用Visual Studio Code添加yara插件进行编写检测规则:
终端命令执行该规则:
yara test.yara cs
命中该规则的程序将会展示出来。
4.2. CS html_pe木马检测
使用CobaltStrike生成html_pe的木马文件:
查看生成的木马文件:
编写yara检测规则:
命中该规则的程序会展示出来:
4.3. BillGates检测
在微步下载billgates的样本
基本信息:
SHA256 |
a4b278170b0cb798ec930938b5bd45bbf12370a1ccb31a2bee6b2c406d881df6 |
MD5 |
c8ba8bcfd8f068a19b89f112e80a9e56 |
文件格式 |
ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.2.5, not stripped |
文件大小 |
1223123 |
文件名称 |
aaa |
使用strings工具查看样本字符串信息:
根据字符串特征编写yara检测规则:
成功检测出存在该规则的BillGate病毒样本:
4.4. 微步下载恶意程序样本检测测试
下载LoaderMaker样本。
基本信息:
SHA256 |
75b0c0dabd9950535a34804cd40175a34e796e19d4fdb0f9225a3e54ea1c4b24 |
MD5 |
8cda918257b87b986e57ec715ff8bee8 |
文件格式 |
PE32 executable (console) Intel 80386, for MS Windows |
文件大小 |
105500 |
文件名称 |
LoaderMaker.exe |
使用strings工具查看样本字符串信息:
首先获取LoadLibrary地址,加载wininet.dll。
然后利用wininet.dll的库函数请求http://www2.jquery.ink:2087/maps/overlayBfpr获取恶意shellcode。
申请空间存储恶意代码,最终跳转至恶意代码中执行。
并编写yara检测规则:
4.5. 漏洞攻击检测
开启Log4j2的漏洞环境
对该目标发送攻击payload的同时,开启wireshark。
发送payload后将wireshark的数据包保存。
以log4j2的攻击payload作为检测规则,编写yara代码:
执行该规则:
成功匹配到该攻击payload的流量文件。
4.6. Local勒索病毒分析
首先查看他的PE及壳信息这是一个VC8程序编写的未加壳程序:
只有一个主函数,主函数第一步调用申请的堆空间,并对堆空间进行初始化:
将自身复制到”%LocalAppData%”目录下,将新路径添加到注册表自启动项中,另外还将复制自身到自启动目录下实现开机自启动。
病毒在执行时还会检查当前所属进程的执行权限。如果当前进程非管理员权限,则以管理员权限方式重新启动自身。重新以管理员权限运行自身时,系统会弹出用户账户控制(UAC)对话框,等待用户选择,一旦用户点击”是”,病毒将以管理员权限执行;如果用户点击”否”,即新起病毒进程未通过UAC,程序则以普通权限运行。病毒在管理员权限下运行将拥有更高的文件访问和读写权限,并可以执行诸多高权限操作(比如防火墙、进程访问和关闭等)。
关闭防火墙:
遍历当前所有活动进程,找到目标并关闭。被关闭软件主要以文档编辑或数据操作类软件为主,关闭这些进程的目的在于解除文件的占用,以便于文件加密的顺利进行。
搜索本地资源时,对所有磁盘进行遍历搜寻。
病毒会对搜索到的文件进行过滤,以避免加密自身释放的文件以及一些系统正常运行不可少的相关文件或程序,并且会对一些特殊目标匹配并进行标记,对这类文件进行全部加密。
开始加密后,首先获取待加密文件大小。如果文件小于1.5Mb或待加密文件被标记为全加密文件,则local将待加密文件全部加密;否则只加密文件的部分内容。
对于可加密而又非数据库等类型的文件,local为其添加加密文件特殊后缀,从待加密文件间歇读取3次262144字节片段,合计786432字节内容,再加上部分常量和校验值,使用与加密文件同一套AES256(CBC)密钥和初始向量进行加密。
再将加密后内容拼接上与全加密方式中尾部空间结构相同的242字节内容,写在待加密文件尾部。最后,将原文件中截取的3个262144字节片段全部置0,如此一来,只有解密出附加在原文件尾部的内容才可恢复出原本文件。
加密后的文件结构:
勒索信息:local将会释放出info.hta和info.txt文件,将两者放入所有磁盘根目录以及桌面目录下。
大致程序运行流程:
5. 建立恶意软件规则库
5.1. Yara官方预置规则库
Yara规则的官方网站为yararules.com,规则存放在github上github.com/Yara-Rules/rules,规则以yar结尾。https://github.com/Yara-Rules/rules。
5.2. 开源yara规则
通过在github等平台寻找开源yara规则对相应病毒软件进行规则,并且可以据此对病毒软件进行反推:
https://github.com/Neo23x0/signature-base/tree/master/yara
https://github.com/InQuest/awesome-yara
https://valhalla.nextron-systems.com/
https://github.com/bartblaze/Yara-rules
5.3. ClamAV病毒库
Clam AntiVirus(ClamAV)是免费而且开放源代码的防毒软件,软件与病毒码的更新皆由社群免费发布。
ClamAV主要功能和特点:
病毒库下载地址:http://database.clamav.net/daily.cvd
安装clamav:
更新病毒库:
本地测试:
扫描结果:
pyClamd是clamd的python接口,可以通过pyClamd,利用python控制clamd执行命令。官方链接:https://xael.org/pages/python-module-pyclamd.html
https://xael.org/pages/pyclamd-en.html
安装pyClamd:
1.通过scan_stream()方法检测bytes流:
2.通过scan_file()文件/文件夹扫描:
3. contscan_file()文件/文件夹扫描:
5.4. Strings工具查看字符串信息
使用strings工具查看BillGates木马:
5.5. 自动解析规则
在不担心样本泄漏的情况下,可以使用www.yara-generator.net
需要企业邮箱才能进行注册。
5.6. 互斥量命名检测法
为了保证同一时间这个程序只有一份实例在运行,恶意软件会使用到互斥量。如“异鬼Ⅱ”Bootkit木马、冲击波病毒(Worm.Blaster)等。“异鬼Ⅱ”Bootkit木马为例,它使用到SamRootDetect作为互斥量,主程序启动后会检测互斥量,检测到存在会进行感染。
因此,检测字符串中是否存在SamRootDetect来判断是否病毒文件。
要使用互斥对象,必须有一个进程首先调用CreateMutex来创建互斥对象:
通过调用OpenMutex,另一个进程可以获得与本进程相关的互斥量对象的句柄:
5.7. IDA反编译检测函数名
在恶意软件未进行加壳的情况下,使用IDA对其进行反编译来协助静态分析。根据导出的函数名称,可以分析出可疑文件可能存在的恶意行为。
5.8. yarGen自动生成yara检测规则
5.8.1. yarGen工作原理
yarGen安装:
https://github.com/Neo23x0/yarGen
在执行完:python yarGen.py –update后,会在yarGen/dbs目录下下载内置的数据库。
来到yarGen.py代码,首先会遍历加载内置数据库。
加载完后,调用processSampleDir开始提取yara规则。
processSampleDir由3个核心函数组成:parse_sample_dir、sample_string_evaluation、generate_rules,作用分别为:提取样本特征、过滤特征、聚合特征生成yara规则。
parse_sample_dir函数做了2个操作,从样本中提取字符串,和字节码。
提取完特征后,进入到sample_string_evaluation函数过滤特征, 会筛选掉出现频率大于等于10且出现在白名单库里的字符串。
然后使用filter_string_set函数进行高级的过滤。进入启发式过滤,若字符串中存在一些垃圾符号,则减去相应的恶意评分。
字符串中若带有一些可疑字符,则加上相应的恶意评分。
最后,筛选出评分较高的字符串,作为最终的特征串。
将每个样本的特征串取交集,就得到了超级特征,即匹配多个样本的yara规则。
5.8.2. yarGen测试案例
以CS生成的 Beacon.dll为例子,使用yarGen生成相应的规则:
使用yarGen生成的yara规则进行检测:
可以匹配到该目标文件。
原文始发于微信公众号(赛哈文):勒索软件识别检测技术