一、概述
自2025年7月起,一系列恶意wheel包被上传至Python库,相关样本经卡巴斯基威胁归因引擎分析后被认为与海莲花组织有关。上传的包作为投放器隐蔽释放针对Windows和Linux平台的.dll或.so文件,最终载荷是一种此前未知的恶意软件家族ZiChatBot,它不依赖传统C2服务器,而是利用公共团队聊天应用Zulip的REST API作为C2基础设施。
二、技术细节
传播
攻击者在PyPI上创建了三个项目,并上传了恶意wheel包,这些包旨在模仿流行的库,诱骗用户下载。这是一个典型的通过PyPI发起的供应链攻击案例。有关这些伪造库及其对应的wheel包的详细信息,请参见下文。
恶意软件套装
攻击者添加并列在PyPI下载页面上的软件包有:
1.uuid32-utils用于生成 32 个字符的随机字符串作为 UUID 的库;
2.colorinal用于实现跨平台彩色终端文本的库;
3.termncolor用于终端输出的 ANSI 颜色格式库。
这些软件包的关键元数据如下:
根据Python软件库上的分发信息,可以看到它提供了适用于Windows的x86和x64版本,以及适用于Linux的 x86_64 版本。例如,colorinal项目提供了以下下载选项:
初始感染
uuid32-utils和colorinal库采用了类似的感染链和恶意载荷。因此,本文将以该colorinal库为例进行分析。
快速查看第三个库的代码,termncolor并未发现明显的恶意内容,而是将恶意colorinal库作为依赖项导入。这种方法允许攻击者将恶意软件深度隐藏,使该termncolor库在分发或诱骗目标时看起来无害。
在初始感染阶段,Windows和Linux平台上的Python代码几乎完全相同。这里,我们以Windows版本为例进行分析。
Windows 版本
Python用户下载并安装了colorinal-0.1.7-py3-none-win_amd64.whlwheel包文件,或者使用该工具安装了它pip,ZiChatBot的dropper(一个名为 的文件terminate.dll)将从wheel包中提取出来并放置在受害者的硬盘驱动器上。之后,如果将该colorinal库导入到受害者的项目中,则会首先执行位于[Python库安装路径]\colorinal-0.1.7-py3-none-win_amd64\colorinal\__init__.py 的Python脚本文件。
这段Python脚本导入并执行位于[python 库安装路径]\colorinal-0.1.7-py3-none-win_amd64\colorinal\unicode.py的另一个脚本。is_color_supported()其中的函数unicode.py会立即被调用。
函数中的注释is_color_supported()指出,高亮显示的代码会检查用户的终端环境是否支持颜色。实际上,这段代码会将文件加载terminate.dll到 Python 进程中,调用DLL 导出的函数envir,并将UTF-8编码的字符串xterminalunicod作为参数传递。该DLL充当投放器,投放最终有效载荷,ZiChatBot然后自删除。函数执行完毕后is_color_supported(),unicode.py脚本文件也会被删除。这些步骤会清除库中的所有恶意文件并部署ZiChatBot。
对于Linux平台,wheel包和unicode.pyPython 脚本与Windows版本几乎完全相同。唯一的区别是投放器文件名为“terminate.so”。
ZiChatBot投放机制
从之前的分析可知,投放器由Python脚本加载到宿主Python进程中并激活。投放器的主要逻辑在envir导出函数中实现,旨在达成以下三个目标:
1.部署ZiChatBot;
2.建立自动运行机制;
3.执行shellcode 从已安装的库文件夹中删除投放器文件 (terminate.dll) 和恶意脚本文件。
该投放器首先使用CBC模式下的AES算法解密敏感字符串。密钥是导出函数的字符串类型参数“xterminalunicode”。解密后的字符串包括“libcef.dll”、“vcpacket”、“pkt-update”和“vcpktsvr.exe”。接下来,恶意软件使用相同的算法解密与相关的嵌入数据。然后,它使用LZMA解压缩解密后的数据,以检索与关联的ZiChatBot文件。恶意软件在系统目录中创建一个名为vcpacket的文件夹“vcpktsvr.exelibcef.dllZiChatBot%LOCALAPPDATA%”,并将这些文件放入其中。
为了使ZiChatBot保持持久运行,投放器会在注册表中创建以下自动运行条目:
1.Windows版本
2.Linux版本
ZiChatBot恶意软件
ZiChatBot的Windows版本是一个DLL文件(libcef.dll),它由合法的可执行文件vcpktsvr.exe(哈希值:48be833b0b0ca1ad3cf99c66dc89c3f4)加载。该DLL包含多个导出函数,恶意代码就存在于其中cef_api_mash export。DLL加载后,EXE文件会调用这些导出函数。ZiChatBot使用公共团队聊天应用程序Zulip的REST API作为其命令和控制服务器。
ZiChatBot能够执行从服务器接收到的shellcode,并且仅支持这一条控制命令。运行后,它会向Zulip REST API发起一系列顺序HTTP请求。在每个HTTP请求中,都会包含一个API身份验证令牌作为HTTP标头,用于服务器端身份验证,如下所示。
ZiChatBot使用两对独立的通道-主题进行操作。一对用于传输当前系统信息,另一对用于检索包含shellcode的消息。接收到shellcode后,会创建一个新线程来执行它。命令执行完毕后,heart会向原始消息发送一个表情符号,以表明执行成功。
三、IOC
恶意wheel包MD5值:
| | |
| termncolor-3.1.0-py3-none-any.whl | 5152410aeef667ffaf42d40746af4d84 |
| uuid32_utils-1.x.x-py3-none-xxxx.whl | 0a5a06fa2e74a57fd5ed8e85f04a483a |
| e4a0ad38fd18a0e11199d1c52751908b |
| 5598baa59c716590d8841c6312d8349e |
| 968782b4feb4236858e3253f77ecf4b0 |
| b55b6e364be44f27e3fecdce5ad69eca |
| 02f4701559fc40067e69bb426776a54f |
| e200f2f6a2120286f9056743bc94a49d |
| 22538214a3c917ff3b13a9e2035ca521 |
| colorinal-0.1.7-py3-none-xxxx.whl | ba2f1868f2af9e191ebf47a5fab5cbab |
| | c33782c94c29dd268a42cbe03542bca5 |
| 454b85dc32dc8023cd2be04e4501f16a |
| fce65c540d8186d9506e2f84c38a57c4 |
| 652f4da6c467838957de19eed40d39da |
| 1995682d600e329b7833003a01609252 |
| 38b75af6cbdb60127decd59140d10640 |
| | a26019b68ef060e593b8651262cbd0f6 |