尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Windows提权与EDR检测绕过:从PsExec到内存注入的隐蔽实战

Windows提权与EDR检测绕过:从PsExec到内存注入的隐蔽实战 1. 项目概述当“CE提权”遇上“检测”这道墙在Windows安全攻防的实战演练或渗透测试中通过配置错误或漏洞获取更高权限提权是至关重要的一环。而“CE提权”这个说法在圈内通常不是一个标准术语它更像是一个混合体一部分可能指代利用像PsExec这类源自Sysinternals套件的强大工具进行远程命令执行和权限提升另一部分则可能关联到使用“Cheat Engine”简称CE这类内存修改工具通过注入、劫持进程内存等方式在特定场景如某些游戏或应用中绕过本地权限限制执行非授权操作。无论具体指代哪一种其核心目标都是突破系统预设的权限边界。但如今单纯地执行提权操作已经远远不够。无论是企业部署的终端检测与响应EDR系统、新一代防病毒软件AV还是操作系统自身的安全机制如Windows Defender、受控文件夹访问、攻击面减少规则等都构建了层层检测防线。你的提权动作无论是通过PsExec的网络连接、服务创建还是通过内存注入修改关键数据都可能触发警报导致行动暴露甚至被阻断。因此“过检测”成为了比“能提权”更高级、更迫切的需求。它要求我们不仅要知道怎么拿到SYSTEM或Administrator权限更要研究如何让这个过程在安全软件的“眼皮底下”悄无声息地完成。这就像一场猫鼠游戏。防守方检测系统在不断进化从简单的特征码匹配发展到行为分析、异常检测、机器学习模型。作为攻击方或安全测试人员我们的技术也必须随之迭代。本文将深入探讨在Windows环境下围绕“提权”这一核心动作如何识别并规避常见的检测点。我们会结合PsExec的经典用例并延伸讨论内存操作、进程注入等相关技术的隐蔽化思路目标是提供一套可落地的、强调“静默”和“融合”的实战方法论而不仅仅是罗列攻击命令。2. 理解检测的维度安全软件在看什么在尝试绕过检测之前我们必须先站在防守方的角度理解安全产品究竟在监控哪些行为和特征。盲目地使用工具就像在雷区乱跑迟早会踩响警报。现代终端安全检测通常涵盖多个维度我们可以将其分为静态检测和动态检测两大类。2.1 静态检测你的“装备”是否上了通缉令静态检测关注的是文件本身而不关心它是否运行、如何运行。这主要包括文件哈希值匹配这是最基础的检测方式。安全厂商维护着庞大的恶意软件哈希值如MD5、SHA-1、SHA-256数据库。如果你使用的PsExec.exe是直接从Sysinternals官网下载的原始版本它的哈希值大概率是干净的。但如果你使用的是一些被黑客修改过的、捆绑了后门的版本或者是一些小众的、已被标记的提权工具那么仅仅将其拷贝到目标机器上就可能被实时扫描检出。特征码扫描安全软件会在文件二进制代码中搜索特定的字节序列特征码这些序列被认为是恶意软件的独特标识。例如一个专门用于提权的Shellcode载荷、某个已知漏洞利用的汇编指令片段都可能被提取为特征码。一些公开的漏洞利用代码Exp或“武器化”的提权脚本很容易被收录特征。数字签名与信誉Windows系统本身和许多安全软件会检查文件的数字签名。一个由微软Microsoft或知名公司签名的PsExec其可信度远高于一个无签名的、名称也是PsExec.exe的可执行文件。无签名或签名无效的文件会被标记为“信誉未知”或“低信誉”从而引发更严格的行为监控。应对思路对于静态检测核心思路是“变”。但这不仅仅是改个文件名那么简单。对于工具本身如果条件允许使用官方正版、有合法签名的工具是最佳选择。对于必须使用的无签名或自定义工具则需要进行代码混淆、加壳但要注意某些壳本身也被标记、或从根本上重写关键功能代码以改变其二进制特征。更高级的做法是“就地取材”利用系统已存在的、可信的合法程序如powershell.exe,certutil.exe,bitsadmin.exe来承载你的恶意操作这被称为“Living-off-the-Land”LotL。2.2 动态检测你的“行为”是否露出了马脚动态检测也称为行为检测是当前更主流的、也更难规避的检测方式。安全软件会监控进程的运行时行为建立基线并对异常行为进行告警。与提权相关的关键检测点包括进程创建行为父进程-子进程关系异常一个普通的word.exe进程突然创建了cmd.exe或powershell.exe这是高度可疑的。同样svchost.exe通常不会直接生成whoami.exe。检测系统会学习正常环境下的进程派生树。进程路径异常从临时目录C:\Users\Public、C:\Windows\Temp、回收站、或网络共享位置启动的可执行文件会被高度关注。进程参数可疑命令行参数中包含了明显的恶意指令如-nop -w hidden -cPowerShell 隐藏窗口执行、/c net user ...等。权限与令牌操作令牌窃取与复制这是提权的核心。操作如OpenProcess打开高权限进程、OpenProcessToken获取令牌、DuplicateTokenEx复制令牌、CreateProcessWithTokenW或CreateProcessAsUser创建新进程这一系列API调用是EDR的重点监控对象。特别是从lsass.exe存储凭据或winlogon.exe等关键系统进程获取令牌。特权启用调用AdjustTokenPrivileges来启用诸如SeDebugPrivilege调试权限、SeImpersonatePrivilege模拟权限等是提权前的常见准备动作。服务与计划任务操作服务创建/修改PsExec的核心原理就是在远程或本地系统上创建并启动一个服务默认名称为PSEXESVC通过服务执行命令。因此CreateService、StartService这些API调用以及短时间内创建又删除的服务都是强信号。计划任务创建通过schtasks创建计划任务来执行后续载荷也是常见手法。网络与横向移动异常的网络连接PsExec需要访问目标机器的445端口SMB和135端口RPC。从一台非管理员的办公电脑向多台服务器发起大量的SMB连接这种行为本身就值得怀疑。WMI远程调用使用wmic或Invoke-WmiMethod进行远程进程创建是PsExec的替代方案之一同样会被监控。内存操作进程注入这是“CE”类工具如Cheat Engine或Shellcode加载器的常见行为。包括使用VirtualAllocEx在目标进程分配内存、WriteProcessMemory写入Shellcode、CreateRemoteThread或QueueUserAPC远程执行代码。这些API调用序列是EDR的“头号通缉犯”。对关键进程的内存读写尝试读取lsass.exe的内存以提取哈希Mimikatz 行为或向系统进程写入代码都会触发最高级别的警报。理解了这些检测点我们才能有针对性地设计我们的“过检测”策略。核心原则是尽可能模仿正常、合法的系统活动避免触发那些被明确定义为恶意的行为模式。3. 经典工具PsExec的“隐身”实战PsExec是系统管理员和渗透测试人员的“瑞士军刀”正因如此它的行为模式也被安全产品研究得非常透彻。直接使用默认参数的PsExec在稍有防护的环境下无异于“裸奔”。下面我们拆解其每一步并给出隐蔽化方案。3.1 默认PsExec的执行流程与检测点当我们执行PsExec.exe \\目标IP -u 用户名 -p 密码 cmd.exe时背后发生了以下关键步骤每一步都可能被记录连接与认证通过SMB协议连接至目标的ADMIN$共享并进行身份认证。网络流量可能被IDS/IPS检测。服务端上传将PSEXESVC.exe一个小的服务包装器上传到目标的ADMIN$\System32目录。文件落地动作会被监控。服务创建通过SCM服务控制管理器远程创建名为PSEXESVC的服务指向上传的可执行文件。CreateServiceAPI被调用。服务启动启动该服务。服务启动后会连接回发起端的命名管道接收要执行的命令。命令执行与回显服务进程创建目标命令进程如cmd.exe并将其输入/输出通过管道重定向回控制端。清理命令执行完毕后服务停止并被删除上传的PSEXESVC.exe文件也被删除。这种“速建速删”的服务模式非常可疑。3.2 阶段一工具本身的伪装与免杀这是绕过静态检测的第一步。使用合法签名版本始终从微软官方Sysinternals套件中获取PsExec。它有微软的有效数字签名信誉极高。重命名与哈希规避将PsExec.exe改名为一个看似无害的名字例如help.exe,svchosthelper.exe或者模仿系统组件如dllhost.exe。但这只能规避基于名称的简单规则对哈希和特征码检测无效。自定义编译高级最彻底的方法是获取PsExec的源代码Sysinternals工具早期部分有泄露修改其中的服务名、管道名、通信方式等特征然后用自己的编译器重新编译。这会生成一个哈希值全新的文件只要你的代码修改没有引入新的可疑字符串或API调用模式就能有效绕过静态特征库。注意这需要一定的编程和逆向工程能力。3.3 阶段二执行过程的隐蔽化改造这是绕过动态检测的关键。我们需要在流程上做文章。修改默认服务名和描述PsExec支持-r参数指定服务名。不要使用默认的PSEXESVC。可以改为一个看起来像系统服务或已知合法软件服务的名称例如TeamViewerService,IntelUpdateManager等。同时如果自定义编译可以连服务描述也一并修改。PsExec.exe \\target -u admin -p Passw0rd -r IntelUpdateSvc cmd.exe避免使用ADMIN$共享PsExec默认使用ADMIN$共享映射到C:\Windows。可以尝试使用其他已有的可写共享或者如果权限足够先建立一个隐蔽的共享。但这通常比较困难因为ADMIN$是管理员默认就有的。延缓清理持久化伪装不要立即删除服务和文件。可以让服务保持停止状态而不是删除它。将PSEXESVC.exe文件留在系统目录并将其属性、时间戳修改得与周围系统文件一致使用timestomp类工具。这样安全软件的一次性扫描可能不会将其与刚刚发生的恶意行为关联起来。风险在于留下了持久化的痕迹容易被后续排查发现。使用备用端口与加密如果支持某些修改版的PsExec或类似工具支持更换通信端口和使用SSL/TLS加密通信流量这可以绕过基于默认端口和明文协议检测的IDS规则。降权运行与上下文模仿如果已经有一个立足点可以考虑先以当前用户权限运行一个合法的、有签名的管理工具如msiexec.exe然后通过进程注入或DLL劫持的方式将PsExec的功能代码“寄生”到该合法进程中执行。这样行为监控看到的父进程是合法的难度大增。3.4 阶段三替代方案与“无文件”思路有时候最好的隐藏就是不使用会被重点监控的工具。WMI作为替代Windows Management Instrumentation (WMI) 是管理系统的重要组件其活动非常频繁。使用wmic或 PowerShell 的Invoke-WmiMethod进行远程进程创建在很多环境中可能比PsExec更低调。# 使用 wmic wmic /node:targetIP /user:admin /password:Passw0rd process call create cmd.exe /c whoami C:\output.txt # 使用 PowerShell $Cred New-Object System.Management.Automation.PSCredential (admin, (ConvertTo-SecureString Passw0rd -AsPlainText -Force)) Invoke-WmiMethod -Class Win32_Process -Name Create -ArgumentList cmd.exe /c whoami -ComputerName targetIP -Credential $Cred注意WMI活动同样会被高级EDR监控特别是异常的远程WMI调用。但其“噪音”相对较小更容易混迹于正常的管理流量中。计划任务远程执行通过schtasks在远程机器上创建计划任务来执行命令也是一种方法。可以设置任务在创建后立即执行一次然后自我删除。schtasks /create /s targetIP /u admin /p Passw0rd /tn SystemUpdate /tr cmd.exe /c whoami C:\log.txt /sc once /st 00:00 /ru SYSTEM schtasks /run /s targetIP /u admin /p Passw0rd /tn SystemUpdate schtasks /delete /s targetIP /u admin /p Passw0rd /tn SystemUpdate /f“无文件”与内存执行这是更高阶的规避技术。不向磁盘上传任何可执行文件。而是将提权所需的Shellcode或PE文件通过PowerShell、 .NET程序、VBScript等脚本直接加载到内存中执行。例如使用PowerShell的Invoke-ReflectivePEInjection可以将一个PE文件反射加载到内存。结合WMI或计划任务来触发内存执行可以做到“落地无文件”极大增加检测难度。这种技术门槛较高且内存行为本身也可能被EDR的运行时检测捕捉。4. 内存注入与进程劫持的隐蔽之道“CE提权”中的“CE”如果指代类似Cheat Engine的内存修改那么其核心就是进程注入和内存读写。这在提权场景中常被用于向高权限进程如以SYSTEM运行的services.exe,spoolsv.exe等注入代码从而继承其权限。下面我们探讨如何让这个过程更隐蔽。4.1 选择“合适”的目标进程不是所有高权限进程都适合注入。选择目标时需考虑稳定性注入系统关键进程可能导致系统不稳定甚至崩溃。通常选择那些非核心但又是SYSTEM权限的进程例如svchost.exe的某个实例承载非关键服务、dllhost.exeCOM宿主等。行为基线选择一个在正常环境下也会产生子进程、进行网络连接或加载模块的进程。例如向一个从不联网的svchost实例注入并让其发起网络连接就很异常。但如果向RuntimeBroker.exe本身负责应用权限管理行为多样注入可能更隐蔽。现有工具Metasploit的migrate命令、Cobalt Strike的inject功能都内置了进程迁移逻辑通常会优先选择与当前进程架构相同x86/x64、权限足够且“安静”的进程。4.2 优化注入技术与API调用链传统的VirtualAllocEx-WriteProcessMemory-CreateRemoteThread三联招是教科书级别的也是EDR重点监控的黄金指标。使用替代的注入技术线程劫持Thread Hijacking挂起目标进程的一个现有线程修改其上下文如指令指针EIP/RIP指向你的Shellcode然后恢复线程。这避免了创建新线程。异步过程调用APC注入使用QueueUserAPC将Shellcode排队到目标进程的线程APC队列中。当线程进入可警报状态时Shellcode被执行。这需要目标线程能进入这种状态常用于svchost等。DLL劫持/搜索顺序劫持利用Windows DLL搜索路径的缺陷将恶意DLL放在合法程序查找的位置当高权限进程启动时自动加载。这属于持久化技术也可用于提权。反射式DLL注入Reflective DLL InjectionDLL不从磁盘加载而是直接将DLL的二进制映像映射到内存中并自行完成重定位、解析导入表等加载器的工作。全程无文件落地且不调用LoadLibrary等敏感API。间接调用与API混淆直接调用CreateRemoteThread很显眼。可以尝试通过RtlCreateUserThread或NtCreateThreadEx等更底层的NT API来创建线程。在Shellcode内部使用动态解析API地址通过PEB遍历的方式而不是直接引入kernel32.dll的函数名以避免字符串特征。将注入代码拆分成多个无害的小片段分时写入和执行。4.3 规避运行时内存扫描ETWTIWindows提供了强大的事件跟踪机制ETWTEDR可以通过它订阅内核事件深度监控进程内存的分配、写入和执行。一些高级EDR甚至能对进程内存进行实时或定时的YARA规则扫描。内存加密与混淆仅在执行前一刻将关键的Shellcode解密到内存中执行后立即擦除。这减少了恶意代码在内存中以明文形式驻留的时间窗口。使用合法的代码签名如果注入的代码块本身具有有效的微软或其他受信任发行者的签名内存扫描引擎可能会选择信任而降低检测级别。利用合法的内存区域尝试将代码注入到具有可执行权限的合法模块如某个已加载的DLL的内存空间中或者利用一些应用程序固有的可读可写可执行RWX内存页这比新分配一块具有PAGE_EXECUTE_READWRITE属性的内存更低调。5. 系统配置错误利用的“低调”艺术除了主动注入利用系统已有的配置错误Misconfiguration进行提权往往能更有效地绕过行为检测因为你的操作是在利用一个“合法”的缺陷。这与输入中提到的“windows配置错误导致的提权”思路一致。5.1 服务路径与权限漏洞如果一个以SYSTEM权限运行的服务其可执行文件路径未被引号包裹且路径中包含空格Windows会按顺序尝试解析路径。例如服务路径为C:\Program Files\My Service\service.exe攻击者可以在C:\Program目录下上传一个名为Files.exe的可执行文件当服务重启时系统会执行C:\Program Files.exe而不是预期的程序。过检测要点文件放置将你的后门程序如反向Shell命名为一个看似合理的名字如java.exe,python.exe并放置在可写目录。避免使用svchost.exe,lsass.exe等关键系统文件名这太容易触发警报。触发时机不要立即重启服务这会引起注意。可以等待系统计划的重启或者结合其他漏洞如权限提升后再修改服务配置并触发。文件属性伪装修改后门文件的时间戳、版本信息等使其看起来更像一个合法文件。5.2 不安全的服务权限服务的访问控制列表ACL配置不当允许低权限用户修改服务配置或状态。例如允许普通用户对某个SYSTEM服务拥有SERVICE_CHANGE_CONFIG权限。过检测要点使用原生工具利用系统自带的sc.exe或PowerShell的Set-Service、Get-Service等cmdlet来查询和修改服务配置。这些工具的行为是正常的系统管理活动。最小化修改只修改必要的字段如binPath。避免同时修改服务名、描述等多个属性。恢复现场在获得权限后考虑将服务配置恢复原状清除痕迹。5.3 计划任务权限漏洞与服务类似计划任务的ACL配置错误也可能导致提权。过检测要点模仿合法任务创建或修改计划任务时使用与系统其他任务相似的命名如\Microsoft\Windows\Maintenance下的任务、描述和作者信息。设置合理的触发条件不要设置为“每分钟触发”或“登录时”这种高频率或敏感触发点。可以设置为每天特定时间或系统事件ID触发看起来更像一个维护任务。使用schtasks/XML参数通过XML文件创建任务可以更精细地控制所有属性使其看起来更“正规”。5.4 AlwaysInstallElevated策略如果组策略中启用了AlwaysInstallElevated任何用户都可以以SYSTEM权限安装MSI包。这是一个严重的配置错误。过检测要点制作“合法”的MSI包使用如WiX Toolset或msiexec配合.vbs脚本生成一个功能简单的MSI安装包其安装操作就是执行你的载荷。给MSI包添加看似合理的产品名称、制造商信息。静默安装使用msiexec /i evil.msi /quiet /qn /norestart进行静默安装不弹出任何界面。安装后清理安装程序执行完载荷后应能自动回滚或卸载移除MSI包本身减少残留。利用配置错误的核心优势在于你的大部分操作如写文件、修改注册表、创建计划任务本身是系统允许的因为权限配置错误只是目的不正当。因此关键是将这些操作伪装成正常的系统管理或软件维护活动融入环境噪音之中。6. 环境融合与痕迹清理即使技术再隐蔽异常的行为模式或残留的痕迹也可能在事后分析中暴露你。因此操作中和操作后的“环境融合”与“痕迹清理”至关重要。6.1 操作中的融合节奏控制避免在短时间内进行大量高权限操作。将提权、信息收集、横向移动等步骤分散在不同时间进行模拟正常管理员的工作节奏。使用合法账户尽可能使用窃取到的合法管理员凭据进行操作而不是一直使用漏洞利用获得的权限。来自合法账户的登录和操作在日志中看起来更正常。模仿正常流量如果进行横向移动网络连接应模仿正常的运维流量。例如使用RDP3389、WinRM5985/5986等协议比使用自定义端口的反向Shell流量更常见。6.2 操作后的清理日志清除Windows事件日志安全日志、系统日志、应用程序日志是调查的主要依据。需要清除相关事件ID。但这本身是一个高危操作因为直接删除日志条目或清空日志会产生新的、更可疑的日志事件ID 1102。更隐蔽的做法是在操作前禁用特定渠道的日志记录如果权限足够或者使用内存修补技术阻止关键操作被记录。文件痕迹清理删除上传的工具、生成的输出文件。使用sdelete或cipher /w进行安全擦除防止文件恢复。恢复你修改过的文件如服务二进制文件、计划任务XML的原始时间戳使用SetFileTimeAPI或timestomp工具。注册表清理清除运行键、服务注册表项、WMI持久化等留下的注册表项。同样要注意恢复键的最后修改时间。内存痕迹卸载注入的DLL结束创建的远程线程释放分配的内存。对于注入到系统进程的代码如果无法安全卸载则让其进入休眠状态或自我终结避免持续活动。重要提醒完全的痕迹清理几乎是不可能的尤其是面对部署了EDR和完整日志审计的环境。安全团队可以通过网络流量记录、终端行为基线对比等多种方式进行关联分析。因此红队行动或渗透测试的最高目标不是“绝对隐身”而是“在达到战术目标的时间内保持隐蔽”并尽量提高事后调查的成本和难度。7. 工具、检测与对抗的持续演进安全是一个动态对抗的过程。本文讨论的技术可能会随着操作系统更新和安全产品升级而失效。关注微软安全更新微软定期发布安全更新修补提权漏洞如最新的“九世”漏洞可能指某个具体的CVE。同时Windows Defender和系统自身的安全机制如AMSI、WDAC、CFG也在不断增强。研究EDR绕过技术关注安全研究社区如MDSec、Red Team Ops的最新成果了解如何绕过特定EDR产品的用户态/内核态钩子Hooking、如何禁用ETW提供程序、如何利用未导出的内核函数等高级技术。自定义工具开发依赖公开工具的风险越来越高。根据目标环境定制开发工具是高级攻击者的常见做法。这要求具备C/C、C#、PowerShell等语言的开发能力以及对Windows内部机制的深入理解。模拟测试与验证在内部实验室搭建与目标相似的环境相同的OS版本、安全产品对你的提权及过检测方法进行充分测试。使用Sysmon、Procmon、Windows事件日志以及商业EDR的试用版来验证你的操作是否会产生警报。最终CE提权过检测不是一个固定的技术点而是一个涵盖工具学、行为分析、操作系统原理和对抗思维的综合性领域。它要求从业者不仅要知道攻击的“矛”如何锋利更要深入理解防守的“盾”如何运作并在两者的动态博弈中找到那条稍纵即逝的路径。真正的隐蔽源于对“正常”的深刻理解和精准模仿。
返回列表