1概览
近期,安天CERT监测到通过GitHub传播窃密木马的攻击活动。攻击者在其发布项目的环境依赖文件requirements.txt中添加恶意URL,以获取其恶意篡改的流行开源模块,从而在受害者电脑中植入窃密木马。
攻击者使用空格将恶意代码掩藏在该行代码的末尾,以避免被用户察觉;并使用多种手段对恶意代码进行混淆处理,以规避安全产品检测、阻碍安全人员分析。经过多层脚本载荷的传递后,将执行一种由Python编写的窃密木马。该窃密木马会在受害主机中窃取浏览器、社交平台、加密货币钱包、游戏客户端中的敏感信息,并针对目标路径中匹配关键词的文件夹及文件进行窃取,最终将窃密数据回传至C2服务器或上传至文件共享平台Gofile中。
在此次攻击活动中,攻击者在自己发布的项目中引入经过恶意篡改的流行开源模块,从而传播窃密木马。对流行的开源项目进行篡改,在其中添加恶意代码后重新打包并在发布的项目中进行恶意引用,已经成为一种攻击方式,用户很难察觉环境依赖文件中是否存在异常。用户在使用网络中非流行、未证实安全性的开源项目时也需保持警惕,以避免执行掩藏在其中的恶意代码。
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.2version
“version”文件中的代码使用Fernet算法,通过攻击者自定义的密钥对代码进行解密,然后对解密的代码进行执行。
图 4‑2执行通过Fernet算法进行加解密的代码
解密后的代码访问指定的URL,将“inj”文件内容写入临时文件中,并通过python执行。
图 4‑3获取“inj”文件内容并执行
4.3inj
该文件是一个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 |
该窃密木马也会对目标路径中含有关键词的文件夹中的文件(最多7个)、以及含有关键词且大小小于500000字节(约488KiB)的文件进行窃取。目标路径及关键词如下表所示。
表 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加强终端文件接收和执行防护
建议企业用户部署专业的终端安全防护产品,对本地新增和启动文件进行实时检测,并周期性进行网内病毒扫描。
6 IoCs
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 |
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)