混淆 API 补丁以绕过新的 Windows Defender 行为签名

admin 2024年12月2日12:04:53评论18 views字数 2051阅读6分50秒阅读模式

Obfuscating API Patches to Bypass New Windows Defender Behavior Signatures

  • 介绍
  • 实验
    • 实验 1:测试补丁修改
    • 实验 2:监控新补丁
  • 结论
  • 前进方向
  • 未来实验

介绍

今天我准备了一篇简短的文章,基于 Windows Defender 的一些最新更改。周末的时候,我注意到我的一些单元测试在一些近期未更改的代码上开始失败。经过进一步调查,我发现这是与通过 API 调用补丁绕过 AMSI 相关。这引起了我的一些警觉,因为这些绕过在过去几年中对我的许多红队计划至关重要。

混淆 API 补丁以绕过新的 Windows Defender 行为签名

我进行了些许谷歌搜索,发现微软确实发布了一些新的行为签名,旨在防止在1.419.240.0 版本 中对 amsi.dll::AmsiScanBuffer 方法的补丁。导致问题的代码是我用来补丁这个函数的代码。我们将深入探讨我用于补丁的汇编,因此理解函数签名可能会有所帮助:

HRESULT AmsiScanBuffer([in]           HAMSICONTEXT amsiContext,[in]           PVOID        buffer,[in]           ULONG        length,[in]           LPCWSTR      contentName,[in, optional] HAMSISESSION amsiSession,[out]          AMSI_RESULT  *result);

在大多数情况下,我要么将补丁修改为返回 AMSI_RESULT_NOT_DETECTED(0x0),要么跳转到其他地方的一个返回 0x0 的函数。最终目标是防止这个函数向已安装的防病毒软件传输攻击者的命令、二进制文件或其他工件。

实验

我想深入探讨微软是如何实现这些行为签名的。他们是否终于开始拒绝对 AMSI.dll 的写访问?(老实说,我不确定他们为什么还没有这样做……)。我怀疑缓解措施可能基于补丁的内容,而不是对 AMSI.dll 的通用“阻止所有”修改。所以,我从这里开始了我的实验。

实验 1:测试补丁修改

我的假设是,只有特定的值或补丁会被 Windows Defender 检测到,可能是在使用 Kernel32.WriteProcessMemory 写入内存时被检测到。我的假设是:更改补丁的汇编指令将绕过行为签名并使我的补丁生效。如果修改后的补丁生效,那么我会得出结论,Windows Defender 只检测特定的汇编指令。我一开始通过添加一些无害的指令来调整我的补丁。在左侧是我原始的补丁代码,它将执行跳转到我在可执行内存中控制的 AmsiScanBuffer 的一个虚拟副本,该副本只返回 AMSI_RESULT_NOT_DETECTED。在右侧,或在移动设备上则在下方,是我修改后的补丁模板。

我通过添加一些无用的指令(例如 mov 和 NOP)来修改该方法,以更改补丁的内容。

0:  6800000000push0x05:  c3                      ret
0:  ba 382c 30 a2          mov    edx,0xa2302c385:  6a 00push0x07:  90                      nop8:  c3                      ret

结果: 重新编译并运行单元测试后,Windows Defender 未能检测到并阻止新的补丁。大获成功!在确保单元测试通过后,我将这些更改提交到我的仓库并推送到主分支。

实验 2:监控新补丁

在最初成功的实验之后,我感觉非常良好。我的最坏的担忧没有成真。这不会成为绊脚石。这个签名很容易被绕过。我觉得自己可以单独应对整个帝国!

当然,我们都知道 Dak 的结果……

但为了确保万无一失……我继续运行我的单元测试,以查看我的修复操作是否稳定。

混淆 API 补丁以绕过新的 Windows Defender 行为签名
混淆 API 补丁以绕过新的 Windows Defender 行为签名

几个小时后,我的 AMSI 绕过单元测试再次失败。新的补丁触发了 Windows Defender 的 AMSI 绕过签名。该死。

我对 Windows Defender 对我的缓解措施的迅速响应印象深刻。猫捉老鼠的游戏还在继续……

结论

这就是我上个周末所做的全部工作。以下是我从这两个实验中得出的结论:

  1. Windows Defender 实现了用于补丁 AMSI.AmsiScanBuffer 的签名。
  2. 这些签名基于补丁的内容。有点像修改的黑名单。
  3. Windows Defender 正在收集补丁事件的数据并生成新的签名。

前进方向

基于这两个实验,我认为我需要开发一个新的解决方案来修补 AMSI。鉴于微软实现的 AMSI.AmsiScanBuffer 中有相当数量的空间,我们有很多不同方式来混淆我的补丁代码的选项……但我们需要动态地进行,以便每次执行时使用不同的补丁,从而能够领先于 Windows Defender。这些补丁可能需要由有效载荷在运行时生成。如果我们将静态补丁嵌入到我们的有效载荷中,我认为我们将在第一次运行时获得执行,但几个小时后该有效载荷将被签名化。

这里没有概念验证,但任何 AMSI 绕过补丁的 shellcode 混淆应该是足够的,只要它适合分配给 AMSI.AmsiScanBuffer 函数的空间。

未来实验

我计划尝试的一些未来实验包括:

  • 分阶段编写补丁,以便整个补丁不会一次性生效。
  • 自动化补丁混淆。

原文始发于微信公众号(securitainment):混淆 API 补丁以绕过新的 Windows Defender 行为签名

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月2日12:04:53
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   混淆 API 补丁以绕过新的 Windows Defender 行为签名https://cn-sec.com/archives/3458332.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息