关键词:勒索软件,样本分析
Group-IB事件响应小组调查了一起与DeadBolt攻击有关的事件,并分析了DeadBolt勒索软件样本。他们的调查是对DeadBolt的首次全面分析,包括对代码进行完整的逆向工程,以揭示该勒索软件样本的功能和能力。
1. 时间线
2022年1月,一些NAS(网络附加存储)用户在他们的系统上发现了扩展名为.deadbolt的加密文件。大约在这个时候,Bleeping Computer发表了一则关于3600个设备也受到影响的新闻。从那时起,关于涉及DeadBolt系列勒索软件的NAS设备攻击的报告经常出现。DeadBolt勒索软件团伙声称其成员利用了NAS软件的零日漏洞,每一个新检测到的漏洞往往与一系列新的攻击有关。
2022年6月中旬,NAS设备制造商QNAP检测到一系列DeadBolt攻击,目标是运行QTS 4.2.x、4.3.x和4.4.x的企业NAS设备。
2022年2月,各种版本的DeadBolt勒索软件被用于攻击属于ASUSTOR的NAS设备。
2022年9月初,QNAP发布了另一个关于以DeadBolt勒索软件为特征的攻击的安全警报(CVE-2022-27593)。
2. 关键点
目标:通过向受害者索要赎金以解锁存储在其NAS设备上的数据,以及向NAS制造商索要赎金以提供有关攻击期间操纵的漏洞的技术信息和加密客户数据的主密钥,从而获得经济利益。
受害者:中小型企业、学校、个人。威胁者的目标是全球的用户,缺乏特定的地理重点。
赎金数额:从受害者那里,威胁者要求获得0.03至0.05比特币(<1,000美元)。从nas制造商那里,他们要求得到10到50个比特币(200,000美元到1,000,000美元之间)< p="">
活动时间:从2022年1月到现在。
最初的攻击向量:NAS软件的漏洞。
勒索软件:跨平台勒索软件家族使用反分析技术用Go编程语言编写。该恶意软件可用于加密或解密数据。为了与受害者沟通,DeadBolt使用目标NAS设备的网络界面。
鲜明的特征:威胁者不与受害者直接沟通;受害者在支付赎金后会在交易细节中收到一个解密密钥。
3. 对DeadBolt勒索软件的分析
在所分析的事件中,QNAP NAS设备正在运行QTS 4.3.6.1446 build 20200929,这是QTS操作系统的一个有漏洞的版本,这使得该NAS设备成为威胁者的目标。也许不足为奇,该公司的员工有一天发现NAS设备的网页界面上嵌入了一条信息,要求解密存储在上面的数据,并要求支付赎金。
图1: 在NAS设备的网络界面中嵌入DeadBolt赎金信息
威胁者要求攻击的受害者和安装有漏洞软件的NAS设备的供应商支付赎金。
图2: 给NAS设备供应商QNAP的DeadBolt赎金信息
威胁者向NAS供应商QNAP承诺,只要支付10个比特币的赎金,他们将分享所有与他们操纵的零日漏洞有关的技术细节;如果支付50个比特币,他们将提供包括解密属于该供应商客户的文件的主密钥。与其他勒索软件团伙相比,威胁者在向QNAP的客户索要赎金方面相对温和。一般来说,金额从0.03到0.05比特币不等,在撰写本报告时,相当于600美元到1000美元之间。
正如威胁者所承诺的那样,如果受害者将所要求的金额转到所提供的地址,解密密钥将在交易细节中以代码为OP_RETURN的比特币区块链发送。为了收到该代码,受害者需要在公共区块链探索器上追踪付款地址,寻找含有OP_RETURN文本的新交易。
图3: 接收解密密钥过程的描述
Group-IB分析的攻击中使用的DeadBolt勒索软件样本是一个用Go编写的32位ELF格式的Linux/ARM软件。该软件使用UPX加壳程序进行了混淆和归档,并删除了Go 的编译ID。鉴于分析这样的样本可能很困难,作者将详细描述DeadBolt的功能和操作行为。作者是在对该勒索软件的Go代码进行完全逆向工程后才得以做到这一点的。
图4: DeadBolt勒索软件的函数main的代码
根据命令行参数,该软件要么加密要么解密文件。
- 加密文件。{RANSOM_APP} -e {config} {dir} {dir}
- 解密文件。{RANSOM_APP} -d {key} {dir} {dir}
其中:
RANSOM_APP是DeadBolt勒索软件的路径
dir是用于加密/解密文件的路径,用逗号分隔
config是配置文件的路径
key是文件解密密钥
4. 加密
当勒索软件以加密模式启动时,它从命令行中指定的JSON文本文件加载要加密的文件扩展名列表和配置。
图5: DeadBolt的核心结构
加载后,配置文件会用空字节重写并删除。
图6: DeadBolt加密模式功能的初始片段
DeadBolt配置文件包含以下数据:
字段 "client_id"、"master_key_hash "和 "key "包含十六进制字符串。client_id "和 "key "字段的长度为32个符号,而 "master_key_hash "的长度为64个符号。
key "字段的值是一个带有文件加密密钥的十六进制字符串。所有字段都在下面描述。
为了替换NAS设备的界面页面,软件创建了以下文件:
/home/httpd/index.html
/mnt/HDA_ROOT/update_pkg/SDDPd.bin
/mnt/HDA_ROOT/update_pkg/.SDDPd_required
图7: DeadBolt加密模式功能的最后片段
之前存在的文件/home/httpd/index.html被提前重命名为/home/httpd/index.html.bak。被DeadBolt取代的文件/home/httpd/index.html是一个shell脚本,旨在处理传入的HTTP请求。
图8: 包含在DeadBolt正文中的shell脚本模板/home/httpd/index.html的片段
该脚本检查传入的HTTP请求的方法是否为POST。如果URL地址包含查询字符串 "action=decrypt "和 "key={KEY}"(其中KEY是解密密钥),shell脚本会检查key的值是否与用于加密的密钥的哈希值或主密钥的哈希值匹配。如果key的值与其中一个哈希值相匹配,该脚本将在解密模式下运行DeadBolt勒索软件,并将key指定为命令行的相应参数。如果URL包含参数 "action=status",脚本会以JSON格式返回数据,包括文件解密过程的统计数据。
解密过程的开始取决于文件/tmp/deadbolt.pid的内容,解密过程的结束基于文件/tmp/deadbolt.finish的内容,而当前解密文件的数量则存储在文件/tmp/deadbolt.status。
对于其他HTTP请求方式,该脚本会显示一个gzip-archived的HTML页面,其正文中包含赎金要求和其他信息。该HTML页面的截图显示在上面,位于本文的开头。
图9: 包含在DeadBolt正文中的shell脚本模板/home/httpd/index.html的片段
包含在HTML页面中的JavaScript代码不时地通过发送请求POST /index.html?action=status来检查解密状态。
当用户在相应的字段中输入正确的解密密钥值并点击 "解密文件 "按钮时,页面会发送请求POST /index.html?action=decrypt&key={KEY},其中KEY是用户输入的密钥值。
Shell脚本/mnt/HDA_ROOT/update_pkg/SDDPd.bin包含一个gzip档案,其中有赎金软件早先创建的脚本/home/httpd/index.html的内容。
图10: 提取函数/mnt/HDA_ROOT/update_pkg/SDDPd.bin
脚本/mnt/HDA_ROOT/update_pkg/SDDPd.bin是为了帮助威胁者在系统中获得立足点。执行后,它恢复了Shell脚本DeadBolt /home/httpd/index.html的内容,并阻止任何修改。
图11: Shell脚本模板/mnt/HDA_ROOT/update_pkg/SDDPd.bin包含在DeadBolt的正文中
5. 文件加密
该勒索软件使用多线程,使用命令行中指定的路径加密文件。多线程是使用内置的Go工具实现的。
被该勒索软件加密的文件扩展名如下:
DeadBolt勒索软件不会加密以下目录中的文件:
/dev
/sys
/proc
/usr/share
/usr/bin
/usr/sbin
/sbin
该勒索软件还跳过了以下文件和目录:
.swap
.qpkg
.samba
.@root
.@sys
.ssh
.@system
.@zlog
.system
.@system
.@ezsync
.@iscsi
.@snapshots
.@thumbnail
.@tmp
.@uploads
.@trashcan
.@plugins
.@CNID
DeadBolt将扩展名".deadbolt "添加到任何被加密的文件名称中。该勒索软件在命令行中列出的每个目录中创建一个文本文件!!!_IMPORTANT_README_WHERE_MY_FILES_!!.txt,其中包含赎金要求。
图12: !!! _IMPORTANT_README_WHERE_ARE_MY_FILES_!!.txt的内容
文件内容使用AES-128 CBC算法进行加密。为了实现该算法,威胁者使用标准的Go加密包 "crypto/aes "和 "crypto/cipher"。配置文件中指定的值作为加密密钥;16字节的初始化向量IV是为每个文件随机选择的。为了生成这个向量,使用Go加密包 "crypto/rand "中的标准函数rand.Read。
所有文件都被完全加密。在此之前,如果有必要,它们会被填充所需的空字节量,以确保文件大小是AES分组大小(16字节)的倍数。
图13: 死锁文件的加密功能的片段
加密数据后,DeadBolt在文件末尾添加了一个128字节的元数据块。
图14: 文件加密功能的结束片段
6. 配置
如上所述,DeadBolt勒索软件的配置数据包含在一个JSON文本文件中,事后将其删除,以防止数据恢复。
配置参数:
7. 解密
要在DeadBolt命令行中解密文件,必须指定密钥和解密路径。然而,用户不需要知道所有这些信息。当他们在支付赎金后获得密钥时,文件解密将使用NAS设备的网络界面启动。
用户只需在相应的字段中输入正确的密钥。用于文件加密的路径和其他参数在加密过程开始时创建的Shell脚本中被插入。
为了解密文件,受害者必须输入配置文件中的密钥或主密钥。在对文件解密功能进行分析后,"主密钥 "一词的含义将变得清晰。
图15: 解密模式功能
在解密过程的早期,DeadBolt创建了文本文件/tmp/deadbolt.pid,其中包含勒索软件进程的标识符。在解密过程中,勒索软件更新文本文件/tmp/deadbolt.status中的解密文件数量,当解密完成后,它创建文件/tmp/deadbolt.finish,其中包含 "1"。如上所述,这些文件被DeadBolt Shell脚本用来与解密过程保持一致并显示其执行状态。
在解密文件之前,DeadBolt读取元数据,检查标记 "DEADBOLT",并接收原始文件的大小。
图16: 文件解密功能的片段
之后,软件会检查指定的解密密钥是否正确。
图17: 文件解密功能的片段
如果指定的加密密钥的哈希值与用于加密文件的密钥的哈希值相匹配,它将被用于解密。如果密钥与主密钥的哈希值相匹配,勒索软件会将此密钥与客户ID一起用来计算加密/解密密钥。它与取自主密钥和客户ID的SHA-256哈希值的前16字节相匹配。因此,为了进行一系列的攻击,威胁者必须生成一个主密钥,然后为每次攻击和每个受害者创建唯一的客户端ID,从而获得加密密钥。
当解密完成后,赎金软件会自我删除。
图18: DeadBolt的自我删除功能
8. 其他信息
勒索软件的主体包含嵌入式Go文件,这些文件被用作创建Shell脚本和其他补充文件的模板。
模板使用下列变量将数值插入脚本和补充文件中。
Group-IB创建的一个演示项目包含DeadBolt勒索软件的部分源代码,可在此获得。
9. 总结
作者对DeadBolt的分析没有发现任何复杂的元素,如涉及非对称加密的密码学方案。一切都很简单和有效,对受害者来说更是如此,因为该勒索软件的网络界面是用户友好的,相对容易理解。
威胁者不窃取客户数据,因此不会进行双重勒索,这是与其他RaaS(勒索软件即服务)团体的不同。该模式不涉及受害者和威胁者之间的任何沟通,受害者要么向指定的地址付款,并在交易细节中收到密钥,要么不付款。这可以部分地解释为什么DeadBolt不向受害者索要巨额赎金。
然而,该组织遵循相当不寻常的做法,向NAS设备的供应商要求赎金。DeadBolt已经活跃了相当长的时间,所以作者认为这种商业模式是有利可图的。
作者对DeadBolt集团勒索软件攻击的分析表明,威胁者如何使用书中的每一个技巧、以及如何利用受害者外部和内部基础设施的缺陷或漏洞来实现他们的犯罪目标。
参考链接:https://blog.group-ib.com/nas-under-threat
编辑|李昊
审校|何双泽、金矢
本文为CNTIC编译整理,不代表本公众号观点,转载请保留出处与链接。
声明:本文来自国家网络威胁情报共享开放平台,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。