ahov 发表于 2024-4-13 13:47

警惕,黑客通过伪装游戏作弊器 dll注入器等的GitHub开源项目传播多种恶意软件

# 一、背景

近期发现有人称在GitHub上下载了一个工程文件打开,不幸中招恶意软件,如下图所示:


## (一)文件信息

下载后可发现,该项目的sln工程文件,实为一个PE可执行文件,如下图所示:


VirusTotal中的历史文件名称,如下图所示:


该PE文件使用了无效数字签名,如下图所示:


该文件使用.NET编写,如下图所示:


## (二)恶意GitHub organization信息

该仓库隶属于一个名为Hayrowi的GitHub organization,截至发帖前仍然存在并有效,该organization下部分仓库,如下图所示:


我们随意点开几个仓库,均发现了相关恶意软件,如下图所示:




其中,Releases中也包含相关的恶意软件,如下图所示:


此外,这些仓库都包含一个名为Star的workflows,Github actions执行后会修改LOG文件中的最后更新时间,如下图所示:


(比较有趣的是,黑客填写的本地git邮箱是ischhfd83#rambler.ru)


其README.md均较为逼真,如下图所示:


# 二、样本分析

## (一)第一层.NET文件

将样本使用dnspy反编译后,第一眼映入眼帘的是样本伪装成sln文件有多么“良苦用心”,如下图所示:


随后映入眼帘的便是UHJvZ3JhbUFB下的 "DownloadAll()" "DownloadRU()" "GetCountry()" 等函数名,如下图所示:


我们还可以看到,其有一个namespace,名为Costura,进入后可以看到其下QXNzZW1ibHlMb2FkZXJB类和QXNzZW1ibHlMb2FkZXJB类之下的静态构造函数.cctor()中有大量调用0xb11a1()模块进行疑似加解密的操作,如下图所示:



于是我们进入0xb11a1()中查看,可以看到0xb11a1()是一个解密函数,其首先将转化为Base64编码的二进制数据解码得到一个字节数组,随后使用MD5CryptoServiceProvider()计算指定密钥,随后使用TripleDES算法进行解密操作,最后返回的结果为Encoding.UTF8.GetString(bytes),如下图所示:


我们在第14行返回结果处添加断点,随后调试程序,即可获取bytes数组内每个Hex的内容,如下图所示:




我们继续调试运行下去,程序产生了以下可疑字符串:
当\u0011 == "DcoAUBmho367yTRLca4PWGOTDapCDF7i"时,bytes数组内容为"68747470733A2F2F6970696E666F2E696F",其对应的字符串为"https://ipinfo.io"
当\u0011 == "YarWFP+EY1k="时,bytes数组内容为"636F756E747279",其对应字符串为"country"
当\u0011 == "WQ9RJjRWvr4="时,byte数组内容为"5255",其对应字符串为"RU"
当\u0011 == "DcoAUBmho37SbvQx8t9W89i0JeQvhJ9wMSeXNO2uJoA="时,bytes数组内容为"68747470733A2F2F72656E7472792E636F2F6E396471722F726177",其对应字符串为"https://rentry.co/n9dqr/raw"
当\u0011 == "iluO4PO7Pv8="时,bytes数组内容为"2E736C6E",其对应字符串为".sln"
当\u0011 == "OIT6ITVzsw8="时,bytes数组内容为"636D64",其对应字符串为"cmd"
当\u0011 == "NlI2H/2+8sE="时,bytes数组内容为"2F432022",其对应字符串为'/C "'
当\u0011 == "DcoAUBmho36mBDorlHHmdCf3Z2mGuxd4lraH5pQj6ak="时,bytes数组内容为"68747470733A2F2F7777772E372D7A69702E6F72672F377A722E657865",其对应字符串为"https://www.7-zip.org/7zr.exe"
当\u0011 == "DcoAUBmho37SbvQx8t9W83/Ge3q60WKUmGrtUiDPNuREEna+M2RGUQ=="时,bytes数组内容为"68747470733A2F2F72656E7472792E636F2F4D75636B436F6D70616E794D4D432F726177",其对应字符串为"https://rentry.co/MuckCompanyMMC/raw"
当\u0011 == "dw3Hoq0iR7Q=",bytes数组内容为"2E377A",其对应字符串为".7z"
当\u0011 == "kPTQfX8JImAM/GQNAChwT71mgweZc58JQ5/KYY2TfQY=",bytes数组内容为"22202D706852335E26623225413921674B2A364C71503774244E7057",其对应字符串为'" -phR3^&b2%A9!gK*6LqP7t$NpW'

我们可以看到,以上字符串中,除下载7zr.exe外,访问了2个URL

我们手动访问第一个URL,如下图所示:


这是一个下载地址,下载该文件后我们发现这是一个真实的sln白文件,如下图所示:


我们手动访问第二个URL,如下图所示:


这是一个下载地址,下载该文件后我们发现这是一个加密的7-Zip压缩包(VisualStudioEN.7z),里面有一个PE可执行文件VisualStudio.exe,如下图所示:


结合以上字符串,我们可以判断,该程序的主要目的是下载7-Zip组件解压加密压缩包VisualStudioEN.7z(解压密码为"hR3^&b2%A9!gK*6LqP7t$NpW")

通过以上字符串,基本上可以判断该程序的行为:
第一步,访问ipinfo.io,判断国家
第二步,下载一个真实的sln白文件,然后通过cmd来打开它
第三步,下载内含第二阶段恶意载荷的加密压缩包VisualStudioEN.7z,通过下载的7-Zip组件来解压加密压缩包VisualStudioEN.7z(解压密码为"hR3^&b2%A9!gK*6LqP7t$NpW")

## (二)第二层.NET文件

通过加密压缩包VisualStudioEN.7z解压得到的第二阶段恶意载荷VisualStudio.exe仍然使用.NET编写,如下图所示:


第二层.NET文件引用的Costura namespace与第一层.NET文件结构非常相似,但是上方程序主函数不同,如下图所示:


### 一、Service.exe模块
其首先创建一个"C:\\Users\\Public\\Videos\\b.bat"文件,用于绕过UAC并执行稍后将要释放的恶意Payload "C:\\Users\\Public\\Videos\\Service.exe";然后创建一个"C:\\Users\\Public\\Videos\\b.vbs"文件,用于启动刚才创建的b.bat文件,如下图所示:


随后,base64解密出Service.exe,如下图所示:



之后无窗口静默启动刚才上面释放的b.vbs,(然后b.vbs会启动b.bat,b.bat会尝试绕过系统UAC并启动Payload Service.exe),如下图所示:


Service.exe的作用是为稍后将要释放的"C:\ProgramData\MicrosoftTool\current\Microsoft.exe"文件通过命令行添加计划任务,其会在%temp%下释放一个临时的v2.bat,待添加完成后会对v2.bat进行删除。

行为如下图所示:



行为链如下图所示:




删除临时的v2.bat,如下图所示:


添加的计划任务,如下图所示:



### 二、BitDefender.7z
随后,其下载7-Zip组件(至ProgramData下)与https://rentry.co/MuckMKV/raw下的加密压缩包进行解压(解压密码为"SaToshi780189.!"),如下图所示:



我们手动访问URL,如下图所示:


下载之后得到BitDefender.7z,如下图所示:


将其解压后可得到4个PE可执行文件,如下图所示:


其中,使用.NET编写的文件均使用了Cronos-Crypter代码混淆器,如下图所示:


其会注入RegAsm.exe,然后进程自退出,如下图所示:



通信协议疑似为AsyncRAT,如下图所示:


C2为40.66.42.41:9471,如下图所示:


此外,通过C2地址与端口,还发现了一份相同C2相同配置的疑似AsyncRAT样本,是一个PowerShell脚本文件,有兴趣的可以研究一下(https://tria.ge/240401-nslb6adc7s, SHA256: f23e4b5e2ed8fd275c1cb96d55becb6e357c6fd92c354127046957412202a9d121c2f385b804d5f441f7c4e3c921e15d9af89e72b9bfb845443deb54c2a25ff7):


而WinSAT.exe为NSIS自解压程序包,内含一个app-32.7z压缩包,将其解压后可以发现其内部是一个Electron应用,如下图所示:


恶意软件制作者通过修改Electron依赖app.asar内的index.js、config_obf.js与package.json从而实现恶意行为,如下图所示:



### 三、Microsoft.7z
在上述逻辑执行完成后,程序会睡眠一段时间,然后其会执行下一个逻辑:下载7-Zip组件(至ProgramData下)与https://rentry.co/MuckSoft/raw下的加密压缩包进行解压(解压密码为"somaliMUSTAFA681!!..."),如下图所示:



我们手动访问URL,如下图所示:


下载之后得到Microsoft.7z,如下图所示:


将Microsoft.7z解压后可以发现其内部是一个Electron应用,如下图所示:


运行Microsoft.exe后可以发现同样也会释放先前的Service.exe,并且具备与先前的Service.exe十分接近的恶意行为,如下图所示:




恶意软件制作者通过修改Electron依赖app.asar内的main.bundle.js从而实现恶意行为,如下图所示:


# 三、总结
我们通过线索捕获到了该恶意软件的一整条攻击链,如下图所示:

我们发现,该恶意软件攻击链通过采用两个.NET恶意下载者下载最终载荷,最终载荷中包含了两个恶意的Electron模块,而在最终载荷中看似毫不相关单独释放的Service.exe模块,却与其中的一个恶意Electron模块产生了联系,此外还有一个注入RegAsm.exe且通信协议疑似为AsyncRAT的恶意模块。由此可见,该恶意软件行为链条完整,并且传播多种不同类型的恶意软件。

# 四、loc


## (一)恶意GitHub organization

https://github.com/Hayrowi

## (二)C2

40.66.42.41:9471

## (三)样本文件Hash

文件名称:DLL Injector Resou.nls.scr
SHA256:1ed90c2a319e37c10a4646c8ae087d691ab13cbf2d39066080a96c685ab9c6c1

文件名称:VisualStudio.exe
SHA256:ced23104253e55e011dd15862eec275352406b0541672bb9bdace10af2bf6a52

文件名称:Service.exe
SHA256:7f67bcf190c26e663aa465b4cadfc41816c3d6c95c18515d3ef75b9aa86e7209

文件名称:aitstatic.exe
SHA256:630c70be4bf71082167abe3e0da283ce25b95a26e5c9b185ca3ec0a95d0ca3a5

文件名称:ComSvcConfig.exe
SHA256:dad9345512882c703297c4e3608eab4de31463264b1121b9f57d3b116b8c9177

文件名称:WinSAT.exe
SHA256:bffa0f9b42c64683b0cfc2d236614482474604aa61a44dbc07a5598755161502

文件名称:WinSAT.exe => $PLUGINSDIR\app-32.7z => resources\app\app.asar
SHA256:6a239058ca4150aeeb4477b0ff221f285879c7122023ea4983b567153c8ab644

文件名称:WinSAT.exe => $PLUGINSDIR\app-32.7z => resources\app\app.asar => config_obf.js
SHA256:4d018f58579616bec46f3d2fa03f8a41b1b5e68e4ccd01081cc3d96f01c5438c

文件名称:WinSAT.exe => $PLUGINSDIR\app-32.7z => resources\app\app.asar => index.js
SHA256:39dcb2ed9b874c3c49ac12b42801f0b02058dde3073fdfec3e9c1d687b4a5cc7

文件名称:MicrosoftCertificateServices.exe
SHA256:004d814eff2c57efadf1977f2b72957a8477a45413b2cf0fbe4424069f5469ca

文件名称:MicrosoftCertificateServices.exe
SHA256:ae0f5057a493097e2393df0fd713ddb02d04b3e2e6139c80655da1e59ad1917b

文件名称:Microsoft.7z => current\app.asar
SHA256:e5772f1c30fa84b138e670422e566d3a1f18aad74c257a19fad1f95811a1451a

文件名称:Microsoft.7z => current\app.asar => main.bundle.js
SHA256:039cb756025abfa0802cf5891d4b7d63a974160f52b3bdcb7f95f690de76294e

ahov 发表于 2024-4-13 14:23

Courser 发表于 2024-4-13 14:09
github上这个库已经没了

是的

国内有中招的人在3月末就出现了,我文章是4月初开始分析撰写的,一直在修修改改补补



直到最近才最终定稿完工

然后刚好前几天,有国外的分析研究人员也发现了大量相关的恶意GitHub账户和恶意GitHub仓库发表了一篇文章
https://thehackernews.com/2024/04/beware-githubs-fake-popularity-scam.html
https://checkmarx.com/blog/new-technique-to-trick-developers-detected-in-an-open-source-supply-chain-attack/

随后GitHub大概是注意到了,应该是一窝端了

frankB4 发表于 2024-4-13 13:55

虽然看不懂,但大受震惊

T2ao 发表于 2024-4-13 20:09

很强,大佬分析的太仔细了

我的爱是你 发表于 2024-4-13 14:03

看来下载文件不能直接启动工程了,还是老老实实 ctrl+c比较安全。

MIAIONE 发表于 2024-4-13 14:02

图标+扩展名一眼确实很难分辨, 不过终端上一眼就能看出来不正常, 毕竟一个是scr一个是sln

飘零星夜 发表于 2024-4-13 14:04

好老土的办法,当年我就下载过,然后用vs打开的时候,弹出错提示。//一般工程文件都用对应的IDE去打开,没双击习惯。

Courser 发表于 2024-4-13 14:09

github上这个库已经没了

dongxi 发表于 2024-4-13 14:17

一脸懵,根本看不懂

博士 发表于 2024-4-13 14:26

大佬 这个版本的火绒剑能共享一下吗

ManaCola 发表于 2024-4-13 14:26

关注,感谢提醒
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 警惕,黑客通过伪装游戏作弊器 dll注入器等的GitHub开源项目传播多种恶意软件