欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

攻击与防御的双刃剑:深入分析PowerShell的两面性

来源:本站整理 作者:佚名 时间:2020-03-14 TAG: 我要投稿

在这一系列文章中,我将站在攻击与防御的两个不同视角,重点介绍已知攻击者如何利用不同的策略和技术来实现其恶意目的,并分析我们应该如何检测并阻止这些恶意活动。我将使用MITRE ATT&CK知识库和术语来说明其中涉及的各项技术。如果大家对MITRE ATT&CK技术不是很了解,建议可以先参考我在2018年发表过的文章和视频,题目名为“了解网络犯罪分子的工作方式,实现更加智能的安全”(Smarter Security Starts with Understanding How Cybercriminals Work)。
之所以使用ATT&CK知识库,其原因之一在于,目前安全领域的技术正在不断发展,可以更加准确地评估针对现实世界的特定安全攻击的效果。已经有越来越多的组织和网络专业人员正在使用这样的知识库来更加准确地衡量这种有效性。如果您的组织目前还没有使用这种方法论,我强烈建议大家可以考虑尝试采用这种方法。
在本系列的第一篇文章中,我们将首先分析广受攻击者欢迎的PowerShell。
关于PowerShell
微软的.NET是一种免费的跨平台Web服务策略,可以帮助管理员使用多种语言编辑器和库来快速构建应用程序。PowerShell在2006年11月首次发布,是一种基于.NET的命令行脚本语言,可以帮助管理员和高级用户快速自动化管理操作系统所需的某些日常任务。它还可以用于使用多种语言编辑器和库快速构建跨平台的应用程序。在管理网络中的操作系统时,PowerShell基本上已经演变成一种通用的标准。目前,PowerShell是开源的,并且默认预装在很多版本的Windows上。
尽管如此,我们大部分人可能还了解到,攻击者往往会利用这种易于使用的脚本语言,包括利用它来安装恶意Payload,并且已经取得了相当大的“成功”。我们分析其原因如下:
1、目前,PowerShell已经预装在Windows计算机上。
2、PowerShell能提供一种简单的方式,直接从内存中执行任何Payload,这是一个非常有用的特性,可以允许攻击者传递无文件恶意软件。
3、PowerShell易于进行混淆,以逃避基于签名的防御方式。
4、PowerShell是一个受信任的工具,管理员每天都在使用,并且通常不会对其进行加固。
5、许多使用PowerShell的恶意脚本都可以免费获得,包括PowerShellEmpire、PowerSploit等工具。
由于上述这些优势,多年以来,网络攻击者持续利用PowerShell并取得了一定的成功。幸运的是,较高版本的脚本语言已经具有能更好地保护PowerShell环境的功能。
防范PowerShell攻击
要防御PowerShell攻击,我们可以采取一些防御措施,包括:
1、约束语言模式
禁止直接访问.NET脚本,通过Add-Type cmdlet调用Win32 API以及与COM对象进行交互(注意:请谨慎操作,这样可能会影响一些现有的PowerShell管理任务)。
2、升级到PowerShell v5(该版本增加了许多安全功能,具有更加良好的安全性)
(1)脚本块日志:允许管理员查看脚本试图执行的操作,在该版本之前,未记录此活动。
(2)系统级监控。
(3)反恶意软件集成(在v3中实现):AMSI(反恶意软件扫描接口)为其他安全厂商提供了一个接口,以便在脚本运行前对其进行检查。这是一个非常好的工具,但有一些攻击方法仍然可以对其进行绕过。
(4)Applocker:根据Applocker策略验证脚本。
3、记录PowerShell活动
通过组策略为各种PowerShell模块启用日志记录。
4、删除PowerShell v2
这是较旧的不安全脚本,在安装v5版本时不会被删除。如果该版本仍存在,攻击者就仍然可以使用这一不安全的版本。
powershell.exe -Version 2.0 -Command {
5、代码签名
我们可以对PowerShell脚本进行代码签名,并且仅运行已经签名的脚本。尽管目前仍然存在一些绕过该方法的方式,但这种方式相对比较有效。
6、使用Just Enough Administration(JEA)限制管理员权限
通过PowerShell远程处理启用基于角色的管理员,这样就可以限制登录用户所执行的操作。
正如大家可能会注意到的,在上面我建议大家采取安全措施的同时,还提到攻击者仍然有方法可以绕过其中的一些防御方式。这些绕过技术包括PowerShell降级攻击、进程注入和PowerShell混淆处理等。尽管如此,上述的这些方式仍然非常有价值,因为并非每一个攻击者都知道如何开展这些绕过攻击,所以这样的机制将会有效防范技术实力较弱的攻击者。我们需要时刻知道,我们可以在无需调用powershell.exe的情况下运行PowerShell脚本。
真实恶意样本和检测
通常,攻击者会利用PowerShell和武器化文档(例如Word或Excel文档)共同执行恶意Payload。通常情况下,文档中将包含一个宏,该宏将会调用PowerShell来执行其恶意Payload。当然,攻击者还有很多其他方式可以利用,但接下来,让我们集中讨论一些使用PowerShell来下载和执行文件的常见攻击技术。
PowerShell允许我们使用Invoke-WebRequest、System.Net.WebClient和Start-BitsTransfer来下载文件。随后,我们可以使用Start-Process、Invoke-item或Invoke-Expression来运行下载的文件。如果我们发现了上述这样的组合,并且了解到管理员并没有利用这些工具来下载并执行文件,那么就证明很可能是恶意的,需要引起我们的关注。
除了下载文件之外,System.Net.Webclient还允许我们将文件的内容直接下载到位于内存的正在运行的进程中,随后运行。这也就是众所周知的“无文件恶意软件”,用于尝试绕过传统的反病毒产品。以下是使用System.Net.Webclient cmdlet的两种方式,以及一些我们在野外看到的恶意脚本的真实示例,这些示例用于下载恶意Payload并执行。
(New-object System.net.webclient).Downloadfile() 将文件下载到磁盘
(New-object System.net.webclient).DownloadString() 将内容直接移动到内存中
在下图中,我们可以看到一个攻击者生成的PowerShell代码示例,该PowerShell代码从多个动态生成的URL下载Emotet恶意文件。如果大家想了解有关该威胁的更多信息,请参考我们在去年发表的文章《Emotet恶意软件的新变种分析》。

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载