0x01 AMSI的秘密世界

AMSI(Antimalware Scan Interface)是微软引入的一个强大功能,旨在在内存中对潜在恶意脚本进行实时扫描。作为攻击者,了解其工作原理是绕过它的第一步。AMSI提供了一个标准化的API,使得反恶意软件产品可以在脚本运行期间进行内容扫描,以检测和阻止可疑活动。

AMSI的工作方式可以简单地拆分为以下步骤:

  1. 加载与初始化:当脚本运行时,AMSI被加载并初始化,与反恶意软件引擎建立连接。
  2. 内容提交:AMSI会截获脚本或内存中的代码片段,并通过AMSI API提交到反恶意软件引擎进行分析。
  3. 检测与响应:反恶意软件引擎根据预定义的规则或机器学习模型分析代码片段,并响应是恶意代码还是安全代码。
  4. 执行结果:如果被识别为恶意代码,AMSI会阻止其执行,否则继续运行。

作为攻击者,我们需要在AMSI提交代码片段之前或者提交期间找到绕过的方法。以下,我们将深入探讨几种有效的绕过技术。

流量捕获实战

在实际攻击中,AMSI拦截流量是攻击者绕过的主要障碍。为了有效进行绕过,我们需要搭建一个实验环境来观察AMSI行为,并开发一些技术来规避检测。

搭建实验环境

  • 系统准备:使用一台安装了Windows 10的虚拟机,并确保安装了最新的Windows Defender。
  • 工具选择:我们需要一些工具,如Process Monitor用于监控AMSI调用,Python用于编写绕过工具,Bash用于脚本自动化。

以下是在Windows 10上使用Python进行简单的AMSI流量观察:

黑客示意图

<pre><code class="language-python">import ctypes

这是调用AMSI的关键步骤,我们需要监控它

amsi = ctypes.WinDLL(&#039;amsi.dll&#039;)

初始化AMSI

amsi.AmsiInitialize.restype = ctypes.c_ulong amsi_context = ctypes.c_ulong() amsi.AmsiInitialize(b&quot;TestAMSI&quot;, ctypes.byref(amsi_context))

print(f&quot;AMSI Context initialized: {amsi_context.value}&quot;)</code></pre>

通过Process Monitor,我们可以跟踪AMSI的调用过程,对其行为有深入理解。

AMSI绕过的艺术

绕过技巧:字符串混淆

字符串混淆是一种经典的绕过技术,通过在代码中使用加密或变形字符串来逃避AMSI的检测。以下是一个简单Python例子:

<pre><code class="language-python">def decode_obfuscated_string(s):

这是将混淆的字符串还原的简单逻辑

return &#039;&#039;.join(chr(ord(c) ^ 0x12) for c in s)

obfuscated_string = &#039;&#039;.join(chr(ord(c) ^ 0x12) for c in &quot;Invoke-Mimikatz&quot;) decoded_string = decode_obfuscated_string(obfuscated_string)

print(f&quot;Decoded string: {decoded_string}&quot;)</code></pre>

通过这种方式,我们可以在运行时恢复原始指令,而避免直接暴露恶意字样。

绕过技巧:内存修改

内存修改涉及动态修复或修改内存中的代码,以避开AMSI的检测。在实际攻击中,我们可以通过Patch AMSI相关内存地址实现绕过:

<pre><code class="language-python">import ctypes

找到相关内存地址并进行修改

amsi = ctypes.WinDLL(&#039;amsi.dll&#039;) patch_address = ctypes.c_void_p(amsi.AmsiScanBuffer) ctypes.memset(patch_address, 0x90, 10) # 将相关地址填充NOP指令

print(&quot;AMSI memory patch applied.&quot;)</code></pre>

黑客示意图

这种技术需要对内存布局和代码执行有深刻理解。

黑客示意图

检测与防御对策

虽然作为攻击者,我们通常专注于绕过技术,但了解对手的防御策略也能帮助我们提升攻击效果。

检测机制

  • 行为监控:最新的EDR产品具备行为监控能力,可以检测并响应异常的内存修改和字符串混淆。
  • 机器学习:一些现代防御系统使用机器学习技术来识别模式和行为的异常,这使得简单的混淆技术越来越难以绕过。

防御策略

  • 代码审计:定期审计和分析脚本代码,检测潜在的混淆和异常行为。
  • 内存完整性:使用系统提供的内存完整性保护功能,防止内存篡改。
  • 实时更新:保持安全产品的实时更新,确保拥有最新的检测规则和技术。

个人经验分享

作为红队成员,我们常常需要在攻防之间找寻平衡。以下几点是我多年经验总结:

  • 持续学习:攻击技术和防御技术都在不断演变,保持学习的心态是关键。
  • 工具熟练度:熟练使用各种工具,能够帮助我们快速定位并绕过检测。
  • 细节关注:许多绕过技巧在细节上有很深的研究,关注细节往往能带来意想不到的结果。

AMSI是一个复杂且强大的保护机制,但正如所有防御技术一样,它并非不可攻破。通过深入分析其工作原理,结合实际攻击技巧,我们能够有效地绕过AMSI,完成我们的攻击任务。请记住,以上技术仅供授权的安全测试和研究使用。