PowerShell安全专题之攻击工具篇

本文讲的是 PowerShell安全专题之攻击工具篇

PowerShell 成为攻击工具的演变过程

PowerShell 是一个内置在每个受支持的Windows版本中 (Windows 7 / Windows 2008 R2 和更高版本)的命令行程序,它能够提供令人难以置信的灵活性和功能化管理 Windows 系统的能力。这种能力使得 PowerShell 正在吸引攻击者使它逐渐成为一个非常流行且得力的攻击工具。一旦攻击者可以在一台计算机上运行代码,他们就会执行 PowerShell 代码,因为PS代码可以运行在防病毒软件不能看到的地方如内存中。攻击者还可能会下载 PowerShell 脚本文件 (.ps1) 到磁盘中,因为 PowerShell 能够提供从网站下载代码并在内存中运行的能力,不过这常常是不必要。

Dave Kennedy & Josh Kelley 在 DEF CON 18(2010 年) 演讲了攻击者如何利用 PowerShell进行攻击的主题。Matt Graeber 开发了 PowerSploit 并在 Monday.com 发表了博文—— 为什么 PowerShell 是一个强大的攻击平台。"PowerSploit"在 2012 年被发布后,PowerShell 被用来作为攻击平台的趋势快速上升,直到大约一年后 Mimikatz 开始支持 PowerShell 调用 (aka Invoke-Mimikatz) ,这使得 PowerShell 作为攻击工具的使用变得更为流行。PowerShell 提供了强大的能力,因为它可以运行从其他主机 (或互联网) 上下载的 .Net 代码并动态执行,甚至无需写到磁盘中执行,也能够在内存中执行。这些特点使得 PowerShell 在获得和保持对系统的访问权限时, 就成为了攻击者首选的攻击手段,利用PS的诸多特点攻击者可以持续攻击而不会被轻易发现。PowerShell v5 极大的提高了 PowerShell 的安全性并且在 Windows 10系统上运行 PowerShell 时,PowerShell 的攻击能力将会大大降低。

攻击者的多种选择

这篇文章显然会提到攻击者可以如何颠覆 PowerShell 最新的安全增强特性,包括 PowerShell v5。请记住,攻击者还有更多选择。PowerShell 只是选择之一,exe则是另一种方式。其他的选择包括︰

自定义可执行文件 (Exe,Dll 等)
Windows 命令行工具(CMD)
远程桌面
Sysinternal 工具集
Windows 脚本宿主
VBScript
CScript
JavaScript
批处理文件
PowerShell

PowerShell 的攻击能力

许多的攻击者喜欢使用 PowerShell 的原因如下︰

能够在内存中运行代码,而不需要写入磁盘文件。
能够从另一个系统中下载并执行代码。
能够直接调用.Net 和 Windows API。
内置了远程操作的功能。
CMD.exe 通常会被限制运行而 PowerShell 不会。
大多数企业组织都不太关注 PowerShell 的活动情况。
很多端点安全产品不具有可视化 PowerShell 活动的功能。

PowerShell 在客户端攻击中常常被利用并且会频繁地调用下列运行选项 (通常是编码过的命令(bypasses exec. policy)。

以下是几个典型的 PowerShell 运行选项:

WindowsStyle Hidden
NoProfile
ExecutionPolicy Bypass
File
Command
EncodedCommand

现实世界中的 PowerShell 攻击工具

PowerSploit

描述︰ 这是众多 PowerShell 攻击工具中被广泛使用的 PowerShell 后期漏洞利用框架。 使用场景︰ 信息探测,特权提升,凭证窃取,持久化。 作者︰ Matt Graeber (@Mattifestation) & Chris Campbell (@obscuresec)

常用的cmdlets:

Invoke-DllInjection.ps1
Invoke-Shellcode.ps1
Invoke-WmiCommand.ps1
Get-GPPPassword.ps1
Get-Keystrokes.ps1
Get-TimedScreenshot.ps1
Get-VaultCredential.ps1
Invoke-CredentialInjection.ps1
Invoke-Mimikatz.ps1
Invoke-NinjaCopy.ps1
Invoke-TokenManipulation.ps1
Out-Minidump.ps1
VolumeShadowCopyTools.ps1
Invoke-ReflectivePEInjection.ps1

Invoke-Mimikatz

功能特性︰ 能够在 PowerShell 中执行 Mimikatz,凭证偷窃 & 注入,伪造 Kerberos 票证创建,还有很多很多功能。 使用场景︰ 凭证窃取 & 重用,持久化 作者︰ Joseph Bialek (@clymb3r)

PowerView

描述︰ 一款纯粹的 PowerShell 域/网络态势感知工具。现在是 PowerSploit 的一部分。 使用︰ 信息探测 作者︰ Will Harmjoy (@HarmJ0y)

常用的cmslets:

Get-NetUser
Get-NetGroup
Get-NetGroupMember
Get-NetLocalGroup
Get-NetSession
Invoke-UserHunter
Get-NetOU
Find-GPOLocation
Get-NetGPOGroup
Get-ObjectACL
Add-ObjectACL
Invoke-ACLScanner
Set-ADObject
Invoke-DowngradeAccount
Get-NetForest
Get-NetForestTrust
Get-NetForestDomain
Get-NetDomainTrust
Get-MapDomainTrust

PowerUp

描述︰ 本地特权提升的一些调用方法,也是 PowerShell Empire 的一部分。 使用︰ 特权提升 作者︰ Will Harmjoy (@harmj0y)

Get-ServiceUnquoted
Get-ServiceFilePermission
Get-ServicePermission
Invoke-ServiceAbuse
Install-ServiceBinary
Get-RegAutoLogon
Get-VulnAutoRun
Get-VulnSchTask
Get-UnattendedInstallFile
Get-WebConfig
Get-ApplicationHost
Get-RegAlwaysInstallElevated

Nishang

描述︰ PowerShell 渗透测试。 使用场景︰ 信息探测,凭据窃取,特权提升,持久化。 作者: Nikhil Mitt (@nikhil_mitt)

Get-Unconstrained
Add-RegBackdoor
Add-ScrnSaveBackdoor
Gupt-Backdoor
Invoke-ADSBackdoor
Enabled-DuplicateToken
Invoke-PsUaCme
Remove-Update
Check-VM
Copy-VSS
Get-Information
Get-LSASecret
Get-PassHashes
Invoke-Mimikatz
Show-TargetScreen
Port-Scan
Invoke-PoshRatHttp
Invoke-PowerShellTCP
Invoke-PowerShellWMI
Add-Exfiltration
Add-Persistence
Do-Exfiltration
Start-CaptureServer

PowerShell Empire

功能特性:

基于 PowerShell 的远程控制木马
Python 编写的服务端组件(Kali Linux)
AES 加密的 C2 通信通道
可以从凭证数据库导出和跟踪凭证信息

使用场景︰ 提供前期漏洞利用的集成模块、 信息探测、 凭据窃取 & 重用,以及持久化。 作者: Will Schroeder (@harmj0y) & Justin Warner (@sixdub) & Matt Nelson (@enigma0x3)

模块如下:

Code Execution
Collection
Credentials
Exfiltration
Exploitation
Lateral Movement
Management
Persistence
Privilege Escalation
Recon
Situational Awareness
Fun & Trollsploit

Cmdlets:

Invoke-DllInjection
Invoke-ReflectivePEInjection
Invoke-ShellCode
Get-ChromeDump
Get-ClipboardContents
Get-FoxDump
Get-IndexedItem
Get-Keystrokes
Get-Screenshot
Invoke-Inveigh
Invoke-NetRipper
Invoke-NinjaCopy
Out-Minidump
Invoke-EgressCheck
Invoke-PostExfil
Invoke-PSInject
Invoke-RunAs
MailRaider
New-HoneyHash
Set-MacAttribute
Get-VaultCredential
Invoke-DCSync
Invoke-Mimikatz
Invoke-PowerDump
Invoke-TokenManipulation
Exploit-Jboss
Invoke-ThunderStruck
Invoke-VoiceTroll
Set-Wallpaper
Invoke-InveighRelay
Invoke-PsExec
Invoke-SSHCommand
Get-SecurityPackages
Install-SSP
Invoke-BackdoorLNK
PowerBreach
Get-GPPPassword
Get-SiteListPassword
Get-System
Invoke-BypassUAC
Invoke-Tater
Invoke-WScriptBypassUAC
PowerUp
PowerView
Get-RickAstley
Find-Fruit
HTTP-Login
Find-TrustedDocuments
Get-ComputerDetails
Get-SystemDNSServer
Invoke-Paranoia
Invoke-WinEnum
Get-SPN
Invoke-ARPScan
Invoke-PortScan
Invoke-ReverseDNSLookup
Invoke-SMBScanner

PowerShell 攻击工具的使用

最好的 PowerShell 攻击工具无疑是——Empire,下载 PowerShell Empire zip 文件并解压。 解压之后,在 datamodule_source 中查看 PS1 文件。

PowerShell 并不只是 “PowerShell.exe”

阻止对 PowerShell.exe 的访问是限制 PowerShell 执行的一个比较"简单"的方法,至少,它看上去很简单。但现实情况是 PowerShell 并不仅仅是一个可执行文件这么简单。PowerShell 是 Windows 系统的一个核心组件 (且不可移除),它存在于 System.Management.Automation.dll 动态链接库文件 (DLL) 中并且可以附加到不同的运行空间中而且可以有效的进行 PowerShell 实例化 (想想 PowerShell.exe 和 PowerShell_ISE.exe)。可以通过代码在自定义的 PowerShell 运行空间实例化,所以 PowerShell 可以通过一个自定义的可执行文件进行启动 (例如 MyPowershell.exe) 。实际上,已经有一些无需 Powershell.exe 就能运行 PowerShell 代码的几种方法了。Justin Warner (@SixDub) 在 2014 年底发表了一篇博文 如何启动受限的Powershell.exe ,也叫做 PowerPick)。
由于 PowerShell 代码可在不运行 PowerShell.exe 的情况下执行代码,因此限制 Powershell.exe 可执行文件的运行并不是理想的解决方案,也不能很好的阻止攻击。

这里有两个辩论的对立面。

一面是"要限制 PowerShell"。这种做法会有一个积极的结果,由于攻击者在前期无法执行 PS 代码所以一些潜在的攻击就能被阻断。但是由于微软或第三方软件在一些功能上可能会依赖 PowerShell 的支持,因此这个做法有一定的副作用,因为它限制了 windows management 的功能。
另一面是 "不能限制 PowerShell",因为有其他方法可以限制攻击者执行 PowerShell 代码而无需限制 PowerShell.exe 的运行。可通过 AppLocker 配置 PowerShell 的保护限制。另外 ,将 Powershell 设置为受限的语言模式的这个方法还有待测试。如果要想了解更多此类信息,可以查看后面的章节"限制 PowerShell 的能力"。

PowerShell = System.Management.Automation.dll
应用程序可以执行 PowerShell 代码
“PowerShell ps = PowerShell.Create()”
Ben Ten’s AwesomerShell

无需 PowerShell.exe 执行 PS 命令

PowerShell v2: "提供了用于创建管道命令以及同步或异步调用运行空间内的命令的方法。此类还提供了调用命令时生成的且包含数据的输出流的访问。此类主要用于宿主应用程序以编程方式使用 Windows PowerShell 执行任务。在 Windows PowerShell 2.0 中,介绍了此类。

创建引用了 Powershell System.Automation.dll 程序集的 C# 应用程序。
利用 Automation 程序集的功能执行 PowerShell 代码。
类似于 PowerShell.exe 的工作方式。

由 Lee Christensen 提出的非托管的 PowerShell 是大多数 PowerShell 攻击工具在脱离 powershell.exe 就能执行 PowerShell 代码的基础。这种方式在非托管进程的 PowerShell 中启动 .NET 并且在内存中加载并执行自定义的 C# 程序集。 自 2016 年 3 月起,Metasploit PowerShell 模块就是利用了非托管的 PowerShell。

另一种利用非托管的 PowerShell 的 PS 项目是 P0wnedShell ,这是一款 "PowerShell 运行空间后期漏洞利用工具包"。它在 powershell 运行空间环境 (.NET)内运行 PowerShell 命令和函数,并且包含了许多 PowerShell 攻击工具,其中包括 PowerSploit,PowerCat,Inveigh,Nishang等等,这些攻击工具都包含在一个单一的可执行文件中。

这个项目还提供了一个简单的 PowerShell 攻击工具执行示例——“数字排序”用于简单的执行PS攻击工具。我将它重命名为"Calc.exe",我从来没有见到运行 Calc 就使用了超过几 MB 的 RAM,当我使用 Mimikatz 执行它时,"Calc" 竟然使用了大于 180 MB的内存。




原文发布时间为:2017年2月5日
本文作者:丝绸之路
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
原文链接

你可能感兴趣的:(PowerShell安全专题之攻击工具篇)