概述
在微软默认禁用来自互联网的文档的 Office 宏后,其他感染媒介(如 JavaScript、MSI 文件、LNK 对象和 ISO)的使用率激增。然而,这些其他技术受到防御者的严格审查,并且被检测到的可能性很高。成熟的攻击者会寻求利用新的和未公开的感染媒介来获得访问权限,同时逃避防御。一个最近的例子涉及到朝鲜民主主义人民共和国(DPRK)的攻击者在 MSC 文件中使用了一种新的命令执行技术。
Elastic 研究人员发现了一种也利用 MSC 文件的新感染技术,我们将其称为 GrimResource。它允许攻击者在用户单击特制的 MSC 文件后,在 mmc.exe
的上下文中获得完整的代码执行权限。一个利用 GrimResource 的样本于 6 月 6 日首次上传到 VirusTotal。
主要收获
- Elastic 安全研究人员发现了一种新颖的、在野外使用的代码执行技术,该技术利用称为 GrimResource 的特制 MSC 文件
- GrimResource 允许攻击者在 Microsoft 管理控制台(
mmc.exe
)中执行任意代码,且安全警告最少,这非常适合用于获取初始访问权限和逃避防御 - Elastic 正在提供该技术分析和检测指南,以便社区可以保护自己
分析
GrimResource 技术的关键在于使用 apds.dll
库中存在的旧 XSS 漏洞。通过在精心制作的 MSC 文件的适当 StringTable 部分添加对易受攻击的 APDS 资源的引用,攻击者可以在 mmc.exe
的上下文中执行任意 JavaScript。攻击者可以将此技术与 DotNetToJScript 结合使用,以获得任意代码执行权限。
在撰写本文时,在野外发现的样本在 VirusTotal 中有 0 个静态检测。
该样本首先使用 transformNode 混淆技术,该技术在最近但不相关的宏样本中观察到。这有助于规避 ActiveX 安全警告。
这将导致一个经过混淆的嵌入式 VBScript,如下所示
VBScript 在一系列环境变量中设置目标有效负载,然后利用 DotNetToJs 技术来执行嵌入式 .NET 加载程序。我们称此组件为 PASTALOADER,将来可能会发布有关此特定工具的更多分析。
PASTALOADER 从先前步骤中 VBScript 设置的环境变量中检索有效负载
最后,PASTALOADER 生成一个新的 dllhost.exe
实例并将有效负载注入其中。这是通过使用 DirtyCLR 技术、函数取消钩子和间接系统调用以一种隐秘的方式完成的。在此示例中,最终有效负载是 Cobalt Strike。
检测
在本节中,我们将检查此样本的当前行为检测,并提出针对该技术原语的新的、更精确的检测。
通过 Microsoft 通用控制台的可疑执行
此检测是在我们发现这种新的执行技术之前建立的。它最初旨在识别一种不同的方法(需要用户在打开 MSC 文件后单击任务板),该方法利用相同的 MSC 文件类型通过控制台任务板命令行属性执行命令
process where event.action == "start" and
process.parent.executable : "?:\\Windows\\System32\\mmc.exe" and process.parent.args : "*.msc" and
not process.parent.args : ("?:\\Windows\\System32\\*.msc", "?:\\Windows\\SysWOW64\\*.msc", "?:\\Program files\\*.msc", "?:\\Program Files (x86)\\*.msc") and
not process.executable :
("?:\\Windows\\System32\\mmc.exe",
"?:\\Windows\\System32\\wermgr.exe",
"?:\\Windows\\System32\\WerFault.exe",
"?:\\Windows\\SysWOW64\\mmc.exe",
"?:\\Program Files\\*.exe",
"?:\\Program Files (x86)\\*.exe",
"?:\\Windows\\System32\\spool\\drivers\\x64\\3\\*.EXE",
"?:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe")
它在这里触发是因为此样本选择生成并注入一个 dllhost.exe 的牺牲实例
在非标准的 Windows 脚本解释器中创建的 .NET COM 对象
该示例使用 DotNetToJScript 技术,该技术会触发另一项检测,以查找代表 Windows 脚本主机(WSH)脚本引擎(Jscript 或 Vbscript)的 .NET 分配的 RWX 内存
以下 EQL 规则将检测通过 .NET 加载程序的执行
api where
not process.name : ("cscript.exe", "wscript.exe") and
process.code_signature.trusted == true and
process.code_signature.subject_name : "Microsoft*" and
process.Ext.api.name == "VirtualAlloc" and
process.Ext.api.parameters.allocation_type == "RESERVE" and
process.Ext.api.parameters.protection == "RWX" and
process.thread.Ext.call_stack_summary : (
/* .NET is allocating executable memory on behalf of a WSH script engine
* Note - this covers both .NET 2 and .NET 4 framework variants */
"*|mscoree.dll|combase.dll|jscript.dll|*",
"*|mscoree.dll|combase.dll|vbscript.dll|*",
"*|mscoree.dll|combase.dll|jscript9.dll|*",
"*|mscoree.dll|combase.dll|chakra.dll|*"
)
以下警报显示 mmc.exe
分配 RWX 内存,并且 process.thread.Ext.call_stack_summary
捕获从 vbscript.dll
到 clr.dll
的分配来源
通过 MMC 控制台文件执行脚本
先前的两个检测是由 GrimResource 方法的特定武器化实现选择(DotNetToJS 和生成子进程)触发的。这些检测可以通过使用更安全的操作安全替代方案来绕过。
其他最初看起来可疑的行为(例如 mmc.exe
加载 jscript.dll
、vbscript.dll
和 msxml3.dll
)可以通过与良性数据进行比较来澄清。我们可以看到,除了 vbscript.dll
之外,这些 WSH 引擎通常由 mmc.exe
加载
此方法的核心方面涉及使用 apds.dll 通过 XSS 执行 Jscript。此行为在 mmc.exe Procmon 输出中作为 CreateFile
操作(apds.dll
未作为库加载)中很明显
我们使用 Elastic Defend 文件打开事件添加了以下检测,其中目标文件是 apds.dll
,并且 process.name
是 mmc.exe
以下 EQL 规则将检测从 MMC 控制台执行脚本
sequence by process.entity_id with maxspan=1m
[process where event.action == "start" and
process.executable : "?:\\Windows\\System32\\mmc.exe" and process.args : "*.msc"]
[file where event.action == "open" and file.path : "?:\\Windows\\System32\\apds.dll"]
通过 MMC 控制台文件执行 Windows 脚本
另一个检测和取证工件是在 INetCache 文件夹中创建名为 redirect[*]
的临时 HTML 文件,这是由 APDS XSS 重定向导致的。
以下 EQL 关联可用于检测此行为,同时捕获 msc 文件路径。
sequence by process.entity_id with maxspan=1m
[process where event.action == "start" and
process.executable : "?:\\Windows\\System32\\mmc.exe" and process.args : "*.msc"]
[file where event.action in ("creation", "overwrite") and
process.executable : "?:\\Windows\\System32\\mmc.exe" and file.name : "redirect[?]" and
file.path : "?:\\Users\\*\\AppData\\Local\\Microsoft\\Windows\\INetCache\\IE\\*\\redirect[?]"]
除了提供的行为规则外,以下 YARA 规则可用于检测类似的文件。
rule Windows_GrimResource_MMC {
meta:
author = "Elastic Security"
reference = "https://elastic.ac.cn/security-labs/GrimResource"
reference_sample = "14bcb7196143fd2b800385e9b32cfacd837007b0face71a73b546b53310258bb"
arch_context = "x86"
scan_context = "file, memory"
license = "Elastic License v2"
os = "windows"
strings:
$xml = "<?xml"
$a = "MMC_ConsoleFile"
$b1 = "apds.dll"
$b2 = "res://"
$b3 = "javascript:eval("
$b4 = ".loadXML("
condition:
$xml at 0 and $a and 2 of ($b*)
}
结论
攻击者开发了一种新技术,可以使用精心制作的 MSC 文件在 Microsoft 管理控制台中执行任意代码。Elastic 现有的开箱即用覆盖范围表明,我们的深度防御方法即使面对像这样的新型威胁也仍然有效。防御者应利用我们的检测指南来保护自己和他们的客户免受这种技术的侵害,防止其扩散到普通威胁组织中。
可观测对象
所有可观测对象也可供下载,格式为 ECS 和 STIX。
本研究中讨论了以下可观测对象。
可观测对象 | 类型 | 名称 | 参考 |
---|---|---|---|
14bcb7196143fd2b800385e9b32cfacd837007b0face71a73b546b53310258bb | SHA-256 | sccm-updater.msc | 被滥用的 MSC 文件 |
4cb575bc114d39f8f1e66d6e7c453987639289a28cd83a7d802744cd99087fd7 | SHA-256 | N/A | PASTALOADER |
c1bba723f79282dceed4b8c40123c72a5dfcf4e3ff7dd48db8cb6c8772b60b88 | SHA-256 | N/A | Cobalt Strike 负载 |