通过GitHub传播窃密木马的攻击活动分析
时间 : 2024年03月19日 来源: 安天CERT
1.概述
近期,安天CERT监测到通过GitHub传播窃密木马的攻击活动。攻击者在其发布项目的环境依赖文件requirements.txt中添加恶意URL,以获取其恶意篡改的流行开源模块,从而在受害者电脑中植入窃密木马。
攻击者使用空格将恶意代码掩藏在该行代码的末尾,以避免被用户察觉;并使用多种手段对恶意代码进行混淆处理,以规避安全产品检测、阻碍安全人员分析。经过多层脚本载荷的传递后,将执行一种由Python编写的窃密木马。该窃密木马会在受害主机中窃取浏览器、社交平台、加密货币钱包、游戏客户端中的敏感信息,并针对目标路径中匹配关键词的文件夹及文件进行窃取,最终将窃密数据回传至C2服务器或上传至文件共享平台Gofile中。
在此次攻击活动中,攻击者在自己发布的项目中引入经过恶意篡改的流行开源模块,从而传播窃密木马。对流行的开源项目进行篡改,在其中添加恶意代码后重新打包并在发布的项目中进行恶意引用,已经成为一种攻击方式,用户很难察觉环境依赖文件中是否存在异常。用户在使用网络中非流行、未证实安全性的开源项目时也需保持警惕,以避免执行掩藏在其中的恶意代码。
经验证,安天智甲终端防御系统(简称IEP)可实现对该窃密木马的有效查杀。
针对该窃密木马的防护建议详见本文第五章节。
2.技术梳理
攻击者在GitHub中上传项目,并在环境依赖文件requirements.txt中添加恶意URL。当用户使用该项目时,需要根据该文件中的内容进行配置,从而下载执行经过攻击者恶意篡改的colorama模块。
攻击者添加的恶意代码用于从其服务器中获取“version”文件,该文件使用Fernet算法进行加解密,执行后获取“inj”文件并写入临时文件中;“inj”文件经过混淆处理,通过zlib对代码进行解压;解压后的代码用于获取最终的窃密木马,通过注册表实现持久化,并向C2服务器回传受害主机的用户名称、IP信息等基本数据。
该窃密木马会窃取指定浏览器、社交平台、加密货币钱包、游戏客户端中的敏感数据,并对目标路径中含有关键词的文件夹中的文件(最多7个)、以及含有关键词且大小小于500000字节(约488KiB)的文件进行窃取。完成窃密行为后,窃密木马通过HTTP POST方式将窃密数据回传至C2服务器中。当第一种回传方式出错时,该窃密木马会将窃取的数据上传至文件共享平台Gofile。
图2-1 攻击流程图
3.关联分析
此次发现的恶意GitHub项目是“Discord-Token-Generator”,最早于2024年1月份创建。
图3-1 恶意GitHub项目
该项目的环境依赖文件requirements.txt中包含一个托管colorama-0.4.6.tar.gz的URL。攻击者对域名进行了伪装,在流行开源模块colorama-0.4.6中添加了恶意代码,并进行重新打包。
图3-2 恶意Github项目中的requirements.txt文件
根据requirements.txt文件中发现的恶意域名,目前在GitHub中有多个项目引用了经过攻击者恶意篡改的模块,相关账号可能都是由同一批攻击者所创建。
图3-3 引用经过攻击者恶意篡改模块的相关GitHub项目
攻击者用于托管载荷的域名于2024年2月份注册,表明这是一起刚开始进行的攻击活动。
图3-4 攻击者使用域名的注册时间
在多个恶意GitHub项目中存在攻击者修改requirements.txt文件的痕迹。分析时已无法获取到该URL中的colorama-0.4.3.tar.gz,不能判断该文件是否恶意。
图3-5 攻击者修改requirements.txt的痕迹
此外,在窃密木马文件中存在多处葡萄牙语痕迹,表明攻击者可能位于葡语系国家或地区。
图3-6 攻击者在窃密木马文件中使用葡萄牙语进行输出
窃密木马窃取文件的关键词列表中存在几处法语,表明攻击者可能更加针对法语用户。
图3-7 窃密文件中的法语痕迹
4.样本分析
4.1 经过攻击者篡改的colorama模块
colorama是一个开源的Python模块,能够提供彩色的终端文本。攻击者在其__init__.py文件中,通过463个空格将恶意代码掩藏在第5行末尾,然后将篡改的colorama模块重新打包并托管于搭建的服务器中。由于__init__.py文件用于定义包的初始化代码,因此当用户导入该包时会自动执行其中的恶意代码。该恶意代码用于从攻击者服务器中接收“version”文件中的内容并执行。
图4-1 攻击者掩藏的恶意代码
4.2 version
“version”文件中的代码使用Fernet算法,通过攻击者自定义的密钥对代码进行解密,然后对解密的代码进行执行。
图4-2 执行通过Fernet算法进行加解密的代码
解密后的代码访问指定的URL,将“inj”文件内容写入临时文件中,并通过python执行。
图4-3 获取“inj”文件内容并执行
4.3 inj
该文件是一个Python脚本,攻击者使用中文、日文对变量及函数等进行命名,并且对代码进行了混淆处理。
图4-4 inj文件内容
攻击者同样通过空格对关键代码进行掩藏,经解混淆处理后发现,该脚本的作用是使用zlib解压出下一阶段的代码并进行执行。
图4-5 经过zlib压缩的代码
4.4 经过zlib解压的代码
该代码使用Python编写,其作用是在%APPDATA、%LOCALAPPDATA%、%TEMP%中选取一个目录生成一个随机名称的文件,将从指定URL中获取的内容写入该文件中执行,通过注册表实现持久化,并向C2服务器回传受害主机的用户名称、IP信息等数据。
图4-6 该代码的作用
4.5 窃密木马
4.5.1 窃密
经过以上多层载荷的传递,最终将执行一种使用Python编写的窃密木马。其窃密目标如下表所示。
表4-1 窃密目标
浏览器 |
Opera |
Chrome |
Brave |
Vivaldi |
Edge |
Yandex |
Firefox |
|
|
社交平台 |
Discord |
Telegram |
|
|
加密货币钱包 |
Atomic Wallet |
Guarda |
Zcash |
Armory |
Bytecoin |
Exodus |
Binance |
Jaxx |
|
Electrum |
Coinomi |
|
|
|
游戏客户端 |
Steam |
Riot Client |
|
|
表4-2 目标路径及关键词
目标路径 |
桌面 |
下载 |
文档 |
最近使用的项目 |
关键词 |
passw |
mdp |
motdepasse |
mot_de_passe |
login |
secret |
bot |
atomic |
|
account |
acount |
paypal |
banque |
|
bot |
metamask |
wallet |
crypto |
|
exodus |
ledger |
trezor |
hardware |
|
cold |
.dat |
discord |
2fa |
|
code |
memo |
compte |
to0k3en |
|
backup |
secret |
seed |
mnemonic |
|
memoric |
private |
key |
passphrase |
|
pass |
phrase |
steal |
bank |
|
info |
casino |
prv |
privé |
|
prive |
telegram |
identifiant |
personnel |
|
trading |
bitcoin |
sauvegarde |
funds |
|
récupé |
recup |
note |
|
4.5.2 回传
该窃密木马通过HTTP POST将窃取的数据回传至C2服务器中。
图4-7 HTTP POST回传方式
当该回传方式出错时,该窃密木马会将窃取的数据上传至文件共享平台Gofile,并将上传后形成的下载链接记录在“loggrab”文件中回传至C2服务器。
图4-8 将数据上传至Gofile
5.防护建议
5.1 加强终端文件接收和执行防护
建议企业用户部署专业的终端安全防护产品,对本地新增和启动文件进行实时检测,并周期性进行网内病毒扫描。安天智甲终端安全系列产品(以下简称“智甲”)依托安天自研威胁检测引擎和内核级主动防御能力,可以有效查杀本次发现病毒样本。
智甲可对本地磁盘进行实时监测,对新增文件自动化进行病毒检测,对发现病毒可在其落地时第一时间发送告警并进行处置,避免恶意代码启动。
图5-1 发现病毒时,智甲第一时间捕获并发送告警
智甲还为用户提供统一管理平台,管理员可通过平台集中查看网内威胁事件详情,并批量进行处置,提高终端安全运维效率。
图5-2 通过智甲管理中心查看并完成威胁事件处置
6.IoCs
96B4C32AFE965529510A6430C2A7AAD3 |
150B3626C85EC5AF88B86C0D0E24736B |
6580C4990E1E56A7D31A36FF1A0502FA |
DD9914573C751C4D8BE4BFE0519F9597 |
6573627FFC97CA6E82A238561C14A9E4 |
https[:]//files.pypihosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz |
https[:]//pypihosted.org |
162.248.100[.]217 |