初探Powershell与AMSI检测对抗技术
作为Windows系统内置工具, Powershell脚本的功能十分强大,同时作为系统的功能组件不会被常规杀毒引擎查杀。兼具这两个有点,Powershell的恶意利用程序得到快速发展,从2012年Powershell 攻击利用工具成型化以来,互联网中的通过无文件与Powershell的攻击事件数量逐年递增。无文件攻击在感染计算机时,不需写入磁盘即可从事恶意活动,绕过那些基于签名和文件检测的传统安全软件。 如何检测这些恶意行为成了安全厂商和企业用户与个人更为关心的问题。微软在2015年中旬开始提出了针对无文件攻击和Powershell脚本攻击的检测缓解方案-AMSI。
本文以Powershell行为日志审计为切入点, 展开介绍AMSI的功能,工作机制与现有绕过方法。
0x00 Powershell 攻击
Powershell作为内网渗透的利器, 在Windows环境下被广泛使用。利用Poweshell可以降低软件的查杀概率,同时也是无文件攻击的常用手段。在内网渗透中Powershell扮演着重要角色。
一般渗透攻击过程
Powershell可以用于入侵,下载,权限维持,横向移动等攻击阶段。
常用利用工具
Powersploit和Nishang是老牌后渗透利用框架,集成了后门,提权,信息收集,RCE等功能。
Powershell Empire和PSAttack都是不依赖于powershell.exe的PowerShell利用框架。它们分别使用python和.NET重新封装了脚本解释器,执行相关渗透脚本。
Powershell与.NET攻击利用时间线
传统安全软件对Powershell的防御不甚完善,通过Powershell进行网络勒索,挖矿的恶意软件越来越多,攻击方式也越来越复杂。
0x01 Powershell 日志与版本
本文不对Powershell语法做阐述,攻击利用的命令与代码可以参考开源工具。除了攻击利用,本文将关注点放在Powershell日志和版本上。
Powershell日志
日志类型
模块(module)日志
Event ID: 4103
路径: Microsoft > Windows > PowerShell/Operational
作用:可以为 Windows PowerShell 模块启用日志记录
使用下面命令可以获取或有可用的模块名称:
Get-Module -ListAvailable
管道执行(pipeline execute)日志
Event ID: 800
作用:记录Powershell管道执行过程的事件简介
脚本块(script block)日志
Event ID: 4104
路径:Microsoft-Windows-PowerShell/Operational
作用:Windows PowerShell 将记录命令、脚本块、函数和脚本的处理,无论是以交互方式调用还是通过自动方式处理
脚本转换(transcription)日志
可以将 Windows PowerShell 命令的输入和输出捕获到基于文本的脚本中。
当然,开启 transcription有个bug
如何打开日志记录功能
这四种日志功能默认不开启,需要手工开启
4种日志记录内容对比
日志详情
模块日志
管道执行日志
脚本块日志
脚本转换日志
执行命令
有
有
有(包括脚本内容)
有
上下文信息
有
有
无
有
参数绑定详情
有
有
无
无
解码/解混淆代码
无
无
有
有
命令输出
无
无
无
有
Powershell版本
Powershell个版本对日志的支持度
日志类型
V2版本
V3版本
V4版本
V5版本
模块日志
无
支持
支持(V3增强)
支持
管道执行日志
支持
支持
支持
支持
脚本块日志
无
无
支持
支持(自动记录恶意命令)
脚本转换日志
无
无
支持
支持(V4增强)
不同操作系统的默认Powershell版本
作为Windows系统内置工具, Powershell脚本的功能十分强大,同时作为系统的功能组件不会被常规杀毒引擎查杀。兼具这两个有点,Powershell的恶意利用程序得到快速发展,从2012年Powershell 攻击利用工具成型化以来,互联网中的通过无文件与Powershell的攻击事件数量逐年递增。无文件攻击在感染计算机时,不需写入磁盘即可从事恶意活动,绕过那些基于签名和文件检测的传统安全软件。 如何检测这些恶意行为成了安全厂商和企业用户与个人更为关心的问题。微软在2015年中旬开始提出了针对无文件攻击和Powershell脚本攻击的检测缓解方案-AMSI。
本文以Powershell行为日志审计为切入点, 展开介绍AMSI的功能,工作机制与现有绕过方法。
0x00 Powershell 攻击
Powershell作为内网渗透的利器, 在Windows环境下被广泛使用。利用Poweshell可以降低软件的查杀概率,同时也是无文件攻击的常用手段。在内网渗透中Powershell扮演着重要角色。
一般渗透攻击过程
本文来自无奈人生安全网
Powershell可以用于入侵,下载,权限维持,横向移动等攻击阶段。
常用利用工具
Powersploit和Nishang是老牌后渗透利用框架,集成了后门,提权,信息收集,RCE等功能。
Powershell Empire和PSAttack都是不依赖于powershell.exe的PowerShell利用框架。它们分别使用python和.NET重新封装了脚本解释器,执行相关渗透脚本。
Powershell与.NET攻击利用时间线
传统安全软件对Powershell的防御不甚完善,通过Powershell进行网络勒索,挖矿的恶意软件越来越多,攻击方式也越来越复杂。
0x01 Powershell 日志与版本
本文不对Powershell语法做阐述,攻击利用的命令与代码可以参考开源工具。除了攻击利用,本文将关注点放在Powershell日志和版本上。
Powershell日志 无奈人生安全网
日志类型
模块(module)日志
Event ID: 4103
路径: Microsoft > Windows > PowerShell/Operational
作用:可以为 Windows PowerShell 模块启用日志记录
使用下面命令可以获取或有可用的模块名称:
Get-Module -ListAvailable
管道执行(pipeline execute)日志
Event ID: 800
作用:记录Powershell管道执行过程的事件简介
无奈人生安全网
脚本块(script block)日志
Event ID: 4104
路径:Microsoft-Windows-PowerShell/Operational
作用:Windows PowerShell 将记录命令、脚本块、函数和脚本的处理,无论是以交互方式调用还是通过自动方式处理
脚本转换(transcription)日志
可以将 Windows PowerShell 命令的输入和输出捕获到基于文本的脚本中。
当然,开启 transcription有个bug
如何打开日志记录功能
这四种日志功能默认不开启,需要手工开启
内容来自无奈安全网
4种日志记录内容对比
日志详情
模块日志
管道执行日志
脚本块日志
脚本转换日志
执行命令
有
有
有(包括脚本内容)
有
上下文信息
有
有
无
有
参数绑定详情
有
有
无
无
解码/解混淆代码
无
无
有
有
命令输出
无
无
无
有
Powershell版本
Powershell个版本对日志的支持度
日志类型
V2版本
V3版本
V4版本
V5版本
模块日志
无
支持
支持(V3增强)
支持
管道执行日志
支持
支持
支持
支持
脚本块日志
无
无
支持
支持(自动记录恶意命令)
脚本转换日志
无
无
支持
支持(V4增强)
不同操作系统的默认Powershell版本
内容来自无奈安全网