一、背景
近期发现有人称在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的内容,如下图所示:
我们继续调试运行下去,程序产生了以下可疑字符串:
[Asm] 纯文本查看 复制代码
当\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