PowerShell脚本类病毒分析

PowerShell介绍

Powershell 是早期一种VBScript的代替脚本语言,同时也是一种shell命令行执行窗口。微软最初出行PowerShell的原因是为管理员提供的自动化管理工具。在2016年中期,微软迈出了之前想都不会想的一步,完整开源了Windows PowerShell。

为什么要重视Powershell?
1.GUI无法带来效率上的提升。
2.其他脚本语言总是有种种缺憾。
3.越来越多的产品和Windows系统中组件已经采用PowerShell

现今的反病毒产品,对于检测磁盘上的恶意文件,是相当在行的;然而,要想检测到只存在于内存中的恶意代码,他们往往是事倍功半。内存的易失性、动态性,使得恶意软件很容易地改变形态;同时,可以自由地运行,无需顾忌任何反恶意技术的侦测。Powershell因其功能强大,而且无文件落地内存中执行,所以在无文件攻击中Powershell的攻击方式是非常流行的。例如:PowerGhost,2018年被发现使用Powershell无文件方式进行攻击感染的挖矿以及DDOS病毒。今年11月份深信服披露的MSASCMiner组织的挖矿病毒等等。

PowerShell的参数

在Windows cmd命令窗口中使用powershell -h命令即可方便查看参数用处。
在这里插入图片描述
Powershell脚本类攻击经常用到的参数 :
Nologo 表示启动时隐藏版权标志
NoProfile 不使用用户配置文件
NonInteractive 不向用户显示交互式提示
ExceptionPolicy 执行策略 一般都是bypass
WindowsStyle 一般都是Hidden
enc 就是encode的宿写,默认指base64编码加密。

PowerShell的去混淆与解密

去混淆与美化时的逻辑:
遇到“$ ;” 必换行
遇到{和}换行 遇到第二个{再缩进2个空格
最后统一转换为小写字母(部分代码可能会受影响无法执行,但方便观察)

这样可以使杂乱无章的powershell脚本变漂亮,容易审查。也可以写个python。

Powershell最常用的就是base64编码加解密,BASE64加解密
该网站比较适合加解密powershell的base64编解码。

PowerShell的调试

调试前需要关闭执行策略限制:

1
set-executionpolicy remotesigned

或者

1
set-executionpolicy unrestricted

Win10以上还需要关闭Windows Defender

1
reg add “HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender” /v “DisableAntiSpyware” /d 1 /t REG_DWORD /f

调试方法有两种:ISE调试 和VSCode调试 ,相比之下VScode调试比较灵活,因为可以在调试时添加代码,显示的变量比较方便
在这里插入图片描述
掌握powershell的一些语法在遇到一些复杂的脚本类病毒会有很大帮助,推荐一本《Windows PowerShell实战指南 第2版》

使用VSCode调试powershell的可以参考
https://blog.csdn.net/m0_37552052/article/details/108978935

参考文献

https://blog.csdn.net/m0_37552052/article/details/108978935