Powershell最佳安全实践

写在前面的话

其实很早之前,攻击者就已经开始使用合法工具来渗透目标网络并实现横向攻击了。理由很简单:使用合法工具可以降低被检测到的几率,而且进过授权的工具(而并非恶意工具)可以更容易绕过安全防护机制。因此对于攻击者来说,PowerShell就成为了一个绝佳的工具。在这篇文章中,我们将跟大家讨论PowerShell的最佳实践方式,而本文的内容将能够帮助你对抗那些使用PowerShell来攻击你的人。

PowerShell是什么?

PowerShell是一种专为MicrosoftWindows和Windows Server设计的自动化平台兼脚本语言,它可以简化系统管理步骤。与其他基于文本的shell不同,PowerShell还可以利用Microsoft .Net Framework的强大功能,并给用户提供多种对象和内置功能来帮助用户管理自己的Windows环境。

为什么是PowerShell?

目前有很多网络攻击都在使用PowerShell,尤其是近期的Petya/NotPetya攻击活动。对于攻击者来说,最重要的是PowerShell是Windows自带的工具,并且整合了.NET Framework组件,而在攻击者的入侵和感染活动中,这个框架组件能够提供多种操作选项。

对于攻击者而言,PowerShell最吸引人的方面有以下几个:

  1. 可以轻松访问网络套接字;
  2. 可以在内存中动态编译恶意代码;
  3. 可直接访问Win32应用程序编程接口(API);
  4. 可以轻松访问WMI接口;
  5. 强大的脚本环境;
  6. 动态、运行时方法调用;
  7. 轻松访问加密库,例如IPSec和各种哈希算法;
  8. 轻松绑定COM;

上面列出的这些因素让PowerShell成为了一种高效的攻击向量。

PowerShell首次被当作一种攻击平台被提出是在2010年,当时在DefCon18上有研究人员演示了利用PowerShell的PoC。

目前,社区中有很多类似Nishang、PowerSploit和PowerShell Empire平台的攻击工具,攻击者可以利用这些工具来进行网络侦察、持续性感染以及横向攻击活动。当然了,考虑到PowerShell的自身属性,它还可以进行各种形式的编程,攻击者可以采用编程的方式将其打造成一款自定义工具。

PowerShell安全最佳实践

考虑到某些组织因为需求关系不能禁用或删除PowerShell,下面给出的几条安全实践建议可以帮助你在享受PowerShell的高效性时免受网络威胁的困扰。

1. PSLockDownPloicy以及PowerShell的受限语言模式

受限语言模式能够将PowerShell限制在基础功能状态,并移除其高级功能的支持,例如.NET和Windows API调用以及COM访问。一旦PowerShell失去了这些高级功能,那么绝大多数的基于PowerShell的攻击工具都将会失效。但是在企业环境中,这种方法将会对合法脚本产生负面影响,因此我们建议在采用这种方法之前,一定要进行多次测试,以保证合法代码的正常运行。【 配置参考资料】

启用受限语言模式:

通过组策略启动:

2. PowerShell v.5+Applocker+DeviceGuard

PowerShell v.5自带了很多优秀的安全增强功能,非常适合企业环境使用。这些安全增强功能包括:

脚本块日志:将反混淆化的PowerShell代码记录到事件日志中; 系统范围的脚本拷贝:该功能可通过组策略开启,可记录下每一条在系统中执行过的PowerShell命令和代码块; 受限语言模式的PowerShell:进入受限语言模式; 整合反恶意软件(Windows 10):Windows 10的反恶意软件扫描接口(AMSI)允许所有的脚本引擎(PowerShell、VBScript和JScript)请求对动态内容进行安全分析,包括脚本文件、命令行输入的命令以及内存中下载和执行的代码。它可以在PowerShell代码执行之前对其进行安全扫描。

除此之外,用户还可以使用Applocker来阻止未知来源的PowerShell代码。

Device Guard是Windows 10和Windows Server2016新推出的功能,它可以利用先进的硬件功能来增强受限语言模式和应用程序白名单功能。

3. 记录PowerShell活动

我们可以通过组策略来开启PowerShell模块记录功能:

Microsoft.PowerShell.* (例如Microsoft.PowerShell.Managementmodule):记录大多数PowerShell的核心功能; ActiveDirectory:记录活动目录的使用; BITS Transfer:记录BITS(后台智能传输服务)的使用; CimCmdlets (2012R2/8.1) :记录CIM(公共信息模型)的使用; Microsoft.WSMan.Management:记录WS-Management以及WinRM的使用; NetAdapter/NetConnection:记录与网络相关的活动情况; PSScheduledJob/ScheduledTasks (PSv5) :记录管理计划任务; SmbShare:记录SMB共享活动;

为了让这些日志发挥作用,我们需要将其提供给一个中央日志系统,并针对已知的攻击方法进行警告配置。

相关活动:

涉及到.Net的下载活动(New-Object Net.WebClient).DownloadString) Invoke-Expression BITS活动 计划任务创建/删除 远程PowerShell

检测PowerShell攻击代码最好的方法就是查找关键标识符,即关键代码段。

例子:检测Mimikatz(一种收集登录用户凭证的工具)

相关的Mimikatz事件日志关键词:

“System.Reflection.AssemblyName” “System.Reflection.Emit.AssemblyBuilderAccess “ “System.Runtime.InteropServices.MarshalAsAttribute” “TOKEN_PRIVILEGES” “SE_PRIVILEGE_ENABLED”

对于经过混淆处理的PowerShell,我们应该设计自定义规则。比如说:

寻找大括号{ } 寻找单引号或双引号’ “

因为它们都是在混淆技术中会经常使用的,而合法软件或正常的管理员一般是不会使用它们的。

4. 移除PowerShell V.2

由于微软给最新版本PowerShell整合的安全增强功能并不适用于PowerShell v.2,因此v.2版本的PowerShell将有可能被用于攻击者的横向渗透或持久化攻击之中。处于类似原因,微软近期宣布将在下一个Windows10更新中废除PowerShell v.2。因此,我们建议广大用户尽快移除系统中的PowerShell v.2。

5. 脚本代码签名

如果你需要在企业环境中使用PowerShell脚本的话,代码签名也是另一种可以增强安全性的方法。这种功能将只允许经过数字签名的脚本代码在计算机中运行。但是我们haixuya噢考虑到某些攻击者可能会使用恶意文件签名来绕过这种防护机制,因此我们还需要添加额外的安全层以防止这种绕过技术。

6. PowerShell检测绕过技术

由于使用PowerShell的攻击事件越来越多,因此PowerShell也逐渐开始吸引到了社区研究人员的注意。而针对各种各样的检测技术,攻击者也研发出了相应的绕过方法。其中包括:

将目标主机中的PowerShell降级至PowerShellv.2 自定义使用.NET Framework(不涉及到PowerShell.exe的执行) PowerShell脚本混淆

上面列举出的只是其中的一小部分技术,但“记录PowerShell活动”那部分的安全实践建议可以检测其中的绝大部分绕过行为。

总结-PowerShell的安全并没有那么容易实现

在对目前绝大多数已知的攻击技术进行了分析之后,我们强烈建议大家升级至Windows 10和PowerShell v.5,并移除PowerShell v.2。虽然这种操作可能不适用于某些特殊的企业环境,但相关的网络管理员也应该尽量部署并激活本文所介绍的安全保护技术,并及时更新攻击识别信息。

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2017-10-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员的知识天地

10 款最好的 Python 开发编辑器

Python 非常易学,强大的编程语言。Python 包括高效高级的数据结构,提供简单且高效的面向对象编程。

1811
来自专栏张善友的专栏

Entity Framework开源了

EF开发团队的博客上发了文章Entity Framework source code has been released under an open sourc...

21010
来自专栏智能大石头

XCode v9.6.2017.0830

新生命团队基础框架X组件,包括网络、数据库、安全、多线程、反射、序列化、模版引擎、服务代理、远程过程调用等模块,包括Mvc后台魔方、超级码神工具、消息队列等子系...

1560
来自专栏.NET技术

.net core实践系列之短信服务-Sikiro.SMS.Bus服务的实现

前两篇《.net core实践系列之短信服务-Sikiro.SMS.Api服务的实现》、《.net core实践系列之短信服务-Api的SDK的实现与测试》分别...

931
来自专栏程序猿

tools for penetration test

渗透测试的几种工具介绍; Fiddler 代理服务应用 Fiddler 是一个免费的 Web 代理工具,具有浏览器和平台不可知性的特点。它有许多...

3967
来自专栏Web 开发

iOS抓包新姿势 – rvictl

其原理是将iOS设备的流量,像打日志一样复制一份到Mac上,在Mac上再通过Wireshark就能进行分析。这种做法,不像代理,不会干扰iOS设备正常的网络访问...

1040
来自专栏自由而无用的灵魂的碎碎念

让WMP12成为万能播放器

Windows 7下的WMP12还是非常优秀的,最新卸载掉本机的KM PLAYER、XMP、暴风后,一直想使用WMP来一统本地视频播放,索性今天找到了:Wind...

1063
来自专栏张善友的专栏

推荐个找代码示例的VS 插件 All-In-One Code Framework Sample Browser

Microsoft All-In-One Code Framework 又称 1code,汇集微软开发平台中各个技术领域的范例程序代码,目前已经累积了超过六百多...

2298
来自专栏技术博客

win7 64位系统及开发环境重装后的总结

   话说来这家公司之后就一直使用这个系统,现在感觉这系统跑的实在是有点慢了,运行,调试各种浪费时间呀,不过也用了将近20个月了,这也可以说是我用的最久的一个系...

1156
来自专栏技术博客

aehyok.com的成长之路三——框架结构

aehyok.com的成长之路一——开篇 中主要阐述了自己为什么建立自己的网站,以及个人网站的大致方向。

904

扫码关注云+社区

领取腾讯云代金券