一、那年我遇到AMSI

在一次渗透测试任务中,我锁定了一个目标系统,该系统的安全防护措施做得相当到位。在深入研究后,发现其中有个名叫AMSI(Antimalware Scan Interface)的组件,它负责拦截和扫描脚本中的恶意代码。AMSI能与多种安全软件协作,实时监控并阻止潜在威胁。为了渗透进这套系统,我需要找到绕过AMSI的方法。

二、漏洞探秘:AMSI是如何工作的

AMSI的工作原理可以用三个字概括:拦截、扫描、阻断。它会在脚本运行时拦截代码,将其传递到注册的反病毒软件进行扫描。如果发现有恶意代码,它会阻止该代码执行,并向管理员发出警告。

具体来说,AMSI主要通过以下几个步骤运行:

  1. 拦截脚本:当脚本开始执行时,AMSI会调用相关API来拦截代码。
  2. 扫描代码:拦截到的代码被传递给注册的反病毒软件进行分析。
  3. 阻断恶意:如果扫描结果表明代码包含恶意内容,AMSI会阻止执行。

这种机制虽然有效,但并不是无懈可击。于是,我开始研究如何绕过这个强大的防御机制。

三、实战环境搭建:准备你的实验室

为了研究AMSI绕过方法,我在实验室搭建了一套测试环境。你可以使用以下组件:

  • 一个Windows 10虚拟机,作为目标系统。
  • 安装PowerShell,并确保AMSI功能开启。
  • 设置开发环境,包括Python和Bash。

搭建步骤:

  • 创建虚拟机:使用VirtualBox或VMware安装Windows 10。
  • 开启PowerShell:确保PowerShell的版本是5.0或更高,以支持AMSI。
  • 安装开发工具:通过Chocolatey或直接安装Python和Bash。

有了这套环境,我可以尽情尝试各种绕过技巧,测试我的代码和策略。

四、流量捕获实战:POC代码来袭

黑客示意图

为了绕过AMSI,我尝试了多种方法。其中一个有效的策略是先捕获流量,然后进行代码注入。以下是我实现的POC代码:

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

我们要用到的WinAPI函数

def amsi_bypass():

获取amsi.dll模块句柄

amsi_dll = ctypes.windll.kernel32.GetModuleHandleW(&#039;amsi.dll&#039;)

确定要覆盖的目标地址,AMSIScanBuffer在amsi.dll的偏移位置

target_address = amsi_dll + 0x00123456 # 假设偏移位置为0x123456,你需要使用调试工具确定

修改内存权限以允许写入

ctypes.windll.kernel32.VirtualProtect(target_address, ctypes.sizeof(ctypes.c_void_p), 0x40, ctypes.byref(ctypes.c_ulong()))

黑客示意图

用空字节覆盖目标地址以绕过检查

ctypes.memmove(target_address, b&#039;\x00&#039;, ctypes.sizeof(ctypes.c_void_p))

执行绕过函数

amsi_bypass()</code></pre>

代码解释:

  1. 我们通过ctypes模块调用WinAPI函数。
  2. 获取amsi.dll模块的句柄,然后找到目标函数的内存地址。
  3. 修改内存权限,让目标地址可写。
  4. 将目标内存地址写入空字节,以绕过AMSI的检测。

五、Payload构造的艺术:绕过策略详解

AMSI的拦截机制虽然强大,但并不是不可绕过的。除了内存操作,我们还可以采用多种策略来构造免杀Payload。这些策略包括:

  • 代码编码:通过对代码进行Base64编码或混淆,让AMSI无法识别。
  • 动态加载:使用反射技术,将恶意代码隐藏在合法模块中。
  • 拆分执行:将代码拆分成多个部分,逐步执行以避开AMSI的拦截。

以下是一个使用Base64编码绕过AMSI的例子:

<pre><code class="language-bash">echo &quot;cHJpbnQoIkhlbGxvLCBXb3JsZCIp&quot; | base64 -d | python</code></pre>

这种方式简单而有效,通过编码和解码操作,AMSI无法识别其中内容。

六、检测与防御:反制的经验

作为渗透测试人员,我们不仅要攻,还要防。在绕过AMSI的过程中,我也总结了一些检测和反制的经验:

  • 监控异常行为:通过行为分析,识别异常内存操作和API调用。
  • 启用高级日志:记录所有脚本执行日志,以便在事后分析。
  • 定期更新:保持安全软件和系统更新,修补已知漏洞。

这些策略虽然不能百分百防止攻击,但确实能有效提高系统的安全性。

黑客示意图

七、那些年的经验分享

最后,我要分享一些个人的实战经验。在绕过AMSI的过程中,我发现以下几点非常重要:

  • 不断学习新技术:攻击和防御技术都在快速发展,保持与时俱进。
  • 关注细节:许多漏洞和绕过方法都藏在细节中,仔细研究每个函数和模块。
  • 团队合作:安全不仅是个人的事,团队协作能更好地提高系统防护。

希望这些经验能帮助你在渗透测试和安全研究中取得突破。记住,唯一的极限是你自己。