通过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


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