恶意shell脚本攻击的方法与预防策略

前言

网络安全对于互联网从业者而言,一直是一个重要的、绕不开的话题,PowerShell可以给运维人员带来极大的方便,但同时也是被攻击者盯上的重灾区。想想就非常可怕,攻击的人只要能从远程执行shell脚本,就能执行一些敏感的安全操作,比如篡改重要数据,修改安全配置等。所以我们有必要掌握一些恶意shell脚本攻击的方法与预防策略。

PowerShell攻击方法

PowerShell攻击方法一般分为两方面:

一方面是攻击者利用系统漏洞向用户终端释放恶意的PowerShell脚本。

另一方面是攻击者通过发送钓鱼邮件等方式诱导用户下载和运行恶意PowerShell脚本。

尽管PowerShell提供了相应的安全机制,但是攻击者还是可以通过N种方法绕过这些机制进行攻击。针对“执行策略”对运行脚本文件的限制,攻击者可诱导用户关闭这一限制,或通过参数设置等方法绕过该限制,而由于脚本文件大多为纯文本形式,攻击者可以很容易地对脚本的内容进行编码、混淆,使其绕过AMSI机制的检测,也绕过用户肉眼的识别。

PowerShell攻击实例

以输出“Hello World”为例,咱们来看看几种常见的绕过“执行策略”、对代码进行编码和混淆的方法。

为了便于介绍,我们首先创建一个脚本文件,内容为“write-host’HelloWorld’”,保存在D:\test.ps1。如果用户在该文件的图标上点击右键,选择“使用PowerShell运行”,是可以作为主动执行的方式运行该脚本文件的。如果在PowerShell命令行中直接输入上述内容,同样可以运行,如图1的①所示。但是,受“执行策略”的限制,在PowerShell命令行中无法直接运行该脚本文件,如图1 的②所示。然而,如果通过Get-Content方法读取文件内容,再将内容通过管道作为PowerShell的输入,则可绕过这一限制,如图1的③所示。

 

图1  在Pow erShell中执行命令
图1  在Pow erShell中执行命令

即使用户依然将“命令提示符”作为默认的命令行环境,也同样可以调用PowerShell来执行脚本文件和命令。例如:(1)可以通过临时修改“执行策略”的方式运行脚本文件;(2)可以将图1在PowerShell中执行命令经过Base64编码后的命令直接解码执行;(3)可以从网络直接下载脚本文件并执行;(4)经过内容混淆的命令依然可以执行。上述事例分别如图2的①~④所示。

图2  在传统的“命令提示符”中执行Pow erShell命令
图2  在传统的“命令提示符”中执行Pow erShell命令

此外,PowerShell的很多安全机制需要3.0或更高的版本才能支持。然而,由于兼容性等原因,系统中可能同时存在多个版本的PowerShell。在高、低版本共存的环境下,即使默认使用的是高版本,攻击者也可能通过命令行参数调用低版本PowerShell,发起“降级攻击”,从而绕过某些安全机制。

需要说明的是,PowerShell脚本的执行权限和当前用户的权限是一致的。如当前用户具有系统管理员权限,且未通过Windows内的用户账户控制(UserAccountControl,UAC)进行必要的防护,则以该用户权限执行的PowerShell脚本就可能对系统造成非常大的危害。但是,即使当前用户是普通用户,通过PowerShell脚本也能够窃取该用户有权访问的所有文件,包括其工作文件和私人文件等。

PowerShell攻击的防御策略

在Windows 7及更高版本的系统中,PowerShell是内置组件,无法直接卸载。为了降低PowerShell攻击的风险隐患,提高系统的安全性,可采取以下措施。

  1. 升级PowerShell 到更新版本。在命令行中运行“Get-Host”即可查看当前PowerShell的版本号。为使用PowerShell内置的安全特性,建议升级到5.0 以上版本。
  2. 检查是否存在旧版本。由于PowerShell支持多版本并存,即使已安装高版本,也应当在命令行中尝试运行形如“PowerShell.exe -version 2 Get-Host”的命令,判断系统中是否依然存在较低版本的PowerShell,避免“降级攻击”。
  3. 检查“执行策略”是否已设置为“Restricted”。如果不是,可通过“Set-ExecutionPolicy Restricted”命令进行设置。
  4. 限制PowerShell的语言模式。如仅需保留PowerShell最基本的运行环境,不需要调用.Net 框架的类库,则可限制PowerShell支持的语言种类。具体做法是,首先在系统的环境变量中添加名为“__PSLockdownPolicy”的变量,取值为“4”;然后可以在PowerShell命令行中输入“$ExecutionContext.SessionState.LanguageMode” 进行验证,如返回结果由“FullLanguage” 变为“ConstrainedLanguage”,则表明语言模式修改成功。此时,大部分恶意程序都会因无法调用.Net 框架的类库而无法正常运行,从而不会对系统造成显著破坏。
  5. 安装杀毒软件并定期升级。一些杀毒软件能够检测PowerShell 脚本文件的恶意特征,有的还能够在执行PowerShell 脚本文件时发现其恶意行为,这也有助于防范恶意PowerShell 脚本的运行。
  6. 对于Windows XP系统,由于PowerShell是可选组件,如在日常工作中确实无需使用PowerShell的,还可通过控制面板中的“添加/删除程序”功能卸载该组件。

总结

了解了恶意shell脚本攻击的方法与预防策略后,我们在享受PowerShell带来的便利同时,更要加强警惕,不让攻击者有漏洞可钻。同时,我们也应该意识到个人使用网络的良好习惯养成的重要性。要做到不访问来路不明的网站、邮件及其附件,不运行可疑的程序和脚本文件,定期更新杀毒软件和系统补丁,防止PowerShell恶意脚本的植入和运行。

 

+1

发表评论

邮箱地址不会被公开。