概述
这是我针对年初出现的新型 Babuk 勒索软件的报告。 由于这是首次在野外检测到此恶意软件,因此Babuk完全没有被混淆也就不足为奇了。 总体而言,它是一种相当标准的勒索软件,利用了我们看到的一些新技术,例如多线程加密以及滥用类似于Conti和REvil的Windows 重启管理器。 对于加密方案,Babuk使用其自己的SHA256 哈希、ChaCha8 加密和椭圆曲线 Diffie-Hellman (ECDH) 密钥生成和交换算法来保护其密钥并加密文件。 与之前的许多勒索软件一样,它也能够通过枚举可用的网络资源来传播其加密。
图 1:RaidForums Babuk 泄漏
海外合作委员会
Babuk Ransomware 以 32 位 .exe 文件的形式出现。
-
• MD5:e10713a4a5f635767dcd54d609bed977 -
• SHA256:8203c2f00ecd3ae960cb3247a7d7bfb35e55c38939607c85dbdb5c92f0495fa9 -
• 示例:https://bazaar.abuse.ch/sample/8203c2f00ecd3ae960cb3247a7d7bfb35e55c38939607c85dbdb5c92f0495fa9/
图 2:VirusTotal 结果
赎金记录
图 3:Babuk 的赎金纸条
图 4:Babuk 的网站
(Babuk 团队非常不专业,因为他们没有删除他们与受害者之间的聊天记录)
代码分析
命令行参数
Babuk 可以使用或不使用 命令行参数。 如果没有给出参数,则仅限于加密本地机器。
图 5:参数解析
如果给出了参数,它将在执行时处理这些参数并相应地采取行动。
(点击图片可查看完整电子表格 - 这里可能需要您在公众号文章中处理成链接或说明)
终止服务
Babuk 的作者对加密前需要关闭的 服务 列表进行了硬编码。 在终止服务之前,Babuk 将调用 EnumDependentServicesA
来检索依赖于该指定服务的每个服务的名称和状态。 然后它将使用控制代码 SERVICE_CONTROL_STOP
调用 ControlService
来停止它们,然后以同样的方式终止主服务。
图 6:终止服务
以下是即将关闭的服务列表。
Plain Text
vss, sql, svc$, memtas, mepocs, sophos, veeam, backup, GxVss, GxBlr, GxFWD, GxCVD, GxCIMgr, DefWatch, ccEvtMgr,
ccSetMgr, SavRoam, RTVscan, QBFCService, QBIDPService, Intuit.QuickBooks.FCS, QBCFMonitorService, YooBackup,
YooIT, zhudongfangyu, sophos, stc_raw_agent, VSNAPVSS, VeeamTransportSvc, VeeamDeploymentService, VeeamNFSSvc,
veeam, PDVFSService, BackupExecVSSProvider, BackupExecAgentAccelerator, BackupExecAgentBrowser,
BackupExecDiveciMediaService, BackupExecJobEngine, BackupExecManagementService, BackupExecRPCService,
AcrSch2Svc, AcronisAgent, CASAD2DWebSvc, CAARCUpdateSvc,
终止正在运行的进程
作者还硬编码了需要关闭的 进程 列表。 通过调用 CreateToolhelp32Snapshot
、Process32FirstW
和 Process32NextW
检查系统上运行的所有进程,Babuk 可以循环查找需要关闭的进程。 一旦找到,它将调用 TerminateProcess
来终止它。
图 7:终止进程
以下是要关闭的进程的列表。
Plain Text
sql.exe, oracle.exe, ocssd.exe, dbsnmp.exe, synctime.exe, agntsvc.exe, isqlplussvc.exe,
xfssvccon.exe, mydesktopservice.exe, ocautoupds.exe, encsvc.exe, firefox.exe, tbirdconfig.exe,
mydesktopqos.exe, ocomm.exe, dbeng50.exe, sqbcoreservice.exe, excel.exe, infopath.exe, msaccess.exe,
mspub.exe, onenote.exe, outlook.exe, powerpnt.exe, steam.exe, thebat.exe, thunderbird.exe,
visio.exe, winword.exe, wordpad.exe, notepad.exe
删除卷影副本
Babuk 尝试在加密之前和之后删除 卷影副本。 首先,它调用 Wow64DisableWow64FsRedirection
来禁用文件系统重定向,然后调用 ShellExecuteW
来执行此命令
cmd.exe /c vssadmin.exe delete shadows /all /quiet
删除卷影副本后,Babuk 检查系统是否在 64 位处理器下运行。 如果是,则调用 Wow64RevertWow64FsRedirection
以再次启用文件系统重定向。
图 8:删除卷影副本
加密
密钥生成
首先,Babuk 使用 RtlGenRandom
生成 4 个随机缓冲区。 其中两个用作 ChaCha8 密钥,另外两个用作 ChaCha8 随机数。
图 9:随机生成 ChaCha8 密钥和随机数
接下来,它将使用第一个密钥和随机数加密第二个 ChaCha8 密钥。 之后,再使用加密的第二个密钥和随机数加密第一个密钥。 该加密的第一个密钥被视为本地机器的 椭圆曲线 Diffie-Hellman (ECDH) 私钥。
图 10:随机生成 ECDH 私钥
从这里,Babuk 使用来自此ECDH库的代码从私钥生成本地ECDH 公钥。 然后,它使用本地私钥和作者的硬编码公钥生成共享秘密。 该共享密钥通过SHA256 哈希算法生成 2 个ChaCha8 密钥,用于稍后加密文件。 为了能够解密文件,Babuk将本地公钥存储在APPDATA
文件夹中的ecdh_pub_k.bin
文件中。 由于ECDH的机制,勒索软件作者可以使用自己的私钥和受害者的公钥生成共享密钥 来解密文件。 这使得受害者无法自行解密,除非他们能在恶意软件完成加密之前捕获其中随机生成的私钥。
图 11:从 ECDH 共享密钥生成 ChaCha8 密钥
多线程
从程序员的角度来看,Babuk 的 多线程 方法相当平庸。 首先,它通过将受害者机器上的核心数量加倍来确定要产生的线程数量,并分配一个数组来存储所有线程句柄。
图 12:线程初始化
这种方法的第一个问题与操作系统中的 线程并发性 有关。 每个进程都可能创建大量线程。 然而,在理想情况下,最好每个处理器运行一个线程,以避免线程在加密期间相互竞争处理器的时间和资源。 然而,如果作者实施了类似队列的结构来处理加密请求,以充分利用受害者 100% 的处理能力,那么这本身就不是什么大问题。 不幸的是,他们决定只为每个现有驱动器生成一个加密线程。
图 13:启动加密线程
如果驱动器数量少于处理器数量(这种可能性很大),Babuk 就不会生成尽可能多的线程来加密。 由于每个线程负责整个驱动器,这迫使它使用传统的 递归方法 遍历其自己的文件夹,由于工作量巨大导致加密时间更长。 每个线程的工作量根据其加密的驱动器的大小而变化,因此平均加密时间将大约接近一个线程加密最大驱动器所需的时间。 这是低效的,并且确实违背了使用 多线程加密 驱动器的目的。
文件夹遍历
如上所述,Babuk 使用 递归方法 遍历和加密文件。 使用 FindFirstFileW
和 FindNextFileW
调用,它会遍历每个目录来查找文件和子目录。 当遇到目录时,它会再次递归调用 main_encrypt
函数。 但是,Babuk 只深入 16 个目录层,因此它可能不会加密驱动器中的每个文件夹以节省时间。 当遇到文件时,它会检查文件名是否为 How To Restore Your Files.txt
或者文件扩展名是否为 .__NIST_K571__
,以避免加密 勒索信 或加密文件。
图 14:遍历文件夹
杀死文件所有者
与 Conti或REvil 勒索软件类似,Babuk利用Windows 重启管理器终止正在使用文件的任何进程。 这确保没有任何因素阻止它打开和加密文件。 这是通过调用RmStartSession
、RmRegisterResources
和RmGetList
来实现的,以获取正在使用指定文件的进程列表。 如果该进程不是explorer.exe
或关键进程,则Babuk将调用TerminateProcess
来终止它。
图 15:终止正在使用文件的进程
文件加密
Babuk 的 文件加密 分为两种不同的类型——小文件加密 和 大文件加密。
对于小于 41943040 字节或大约 41 MB 的小文件,该文件将被完全映射并使用 ChaCha8 加密两次。
图 16:小文件加密
对于大文件,加密略有不同。 为了节省时间,整个文件被分成三个大小相同的区域。 对于每个区域,只有前 10485760 个字节或 10 MB 会被加密。
图 17:大文件加密
对于加密,Babuk 使用从 ECDH 共享密钥 的 SHA256 哈希 生成的两个 ChaCha8 密钥 作为加密密钥,并使用共享密钥的前 12 个字节作为随机数。
远程文件加密
为了从受害机器加密 远程驱动器,Babuk 调用 WNetGetConnectionW
来检索与这些驱动器关联的网络资源的名称并将其传递给加密线程。
图 18:加密远程驱动器
如果给出正确的参数,它还会加密机器 LAN 上的网络共享。 Babuk 调用 WNetOpenEnumW
和 WNetOpenEnumW
遍历网络上的远程文件夹,并使用类似上面提到的 递归方法 加密文件。
图 19:LAN 加密
主要发现
Babuk 是今年年初出现的一种新型 勒索软件。 尽管其编码方式比较业余,但其采用 椭圆曲线 Diffie-Hellman 算法 的强加密方案迄今为止已证明能够有效攻击许多公司。 由于恶意软件作者为每个 Babuk 样本使用一个私钥,因此很明显他们的主要目标是大型公司,而不是普通计算机用户。 到目前为止,根据 勒索信 中嵌入的网站以及 Raidforums 上的泄漏,他们已经成功入侵了全球 5 家不同的公司。
给新受害者的信息
我最近注意到该页面的欧洲流量明显增多,我猜测这是因为新的受害者查看该页面是为了更好地了解 勒索软件。 这篇博文确实过时了,因为 Babuk 已经发生了很大的变化,而且恶意软件与我在这里谈论的有很大不同。 如果最近的 Babuk 受害者有兴趣获取有关此 勒索软件 新版本的更多信息,或者需要任何帮助来分析任何样本,请随时通过我的电子邮件 cdong49@gatech 或 Twitter 与我联系!
YARA 规则
Plain Text
rule BabukRansomware {
meta:
description = "YARA rule for Babuk Ransomware"
reference = "http://chuongdong.com/reverse%20engineering/2021/01/03/BabukRansomware/"
author = "@cPeterr"
date = "2021-01-03"
rule_version = "v1"
malware_type = "ransomware"
tlp = "white"
strings:
$lanstr1 = "-lanfirst"
$lanstr2 = "-lansecond"
$lanstr3 = "-nolan"
$str1 = "BABUK LOCKER"
$str2 = ".__NIST_K571__" wide
$str3 = "How To Restore Your Files.txt" wide
$str4 = "ecdh_pub_k.bin" wide
condition:
all of ($str*) and all of ($lanstr*)
}
原文始发于微信公众号(网安守护):警惕新型 Babuk 勒索软件:技术揭秘与政府及企业网络安全预警
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论