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

零C++基础,打造Windows事件钩子:对WMI的深入分析

来源:本站整理 作者:佚名 时间:2017-08-08 TAG: 我要投稿

在想要Hook Windows事件时,大家往往会想到rootkits、低级C++代码和Windows API调用。其实还有另一种更简单的方法,无需了解任何关于Windows内部结构的知识,使用预装在Windows中的工具即可实现,那就是WMI。
关于WMI
以下是摘自MSDN的官方说明:
WMI(Windows Management Instrumentation)是Windows操作系统上管理数据和操作的基础结构。您可以编写WMI脚本或应用程序,以自动化的方式远程管理计算机上的任务。同时,WMI也能够向操作系统和产品的其他部分提供管理数据。
这个说明让我们知道了WMI的潜力,它可以在远程计算机上去执行管理任务。然而,这只是冰山一角。在近期,一些攻击者(例如CozyDuke和Deep Panda)已经开始使用Windows本地工具来进行攻击活动,这将会成为一种发展趋势。
这种攻击方式对于攻击者而言具有许多优势。首先,攻击者无需再将自己的工具放在目标系统中,有效降低了被检测到的概率。其次,使用WMI在被攻击的系统中留下的痕迹少之又少。
WMI可以通过PowerShell、WMI控制台或使用托管对象格式(MOF)脚本进行调用。
使用PowerShell的WMI,可以打开一个PowerShell终端,并按下述方式执行get-wmiobject(或gwmi)命令:

$ get-wmiobject win32_logicaldisk name, freespace, systemname, size -filter drivetype=3   __GENUS: 2 __CLASS: Win32_LogicalDisk __SUPERCLASS: __DYNASTY: __RELPATH: __PROPERTY_COUNT: 4 __DERIVATION: {} __SERVER: __NAMESPACE: __PATH: FreeSpace: 34652438528 Nam: C: Size: 106901270528 SystemName: AI-PINCHEWEEEY-VM PSComputerName:
如上所示,我们可以通过使用Win32_LogicalDisk类获得多个系统驱动器属性。这些类中的每一个都有属性和可以执行的方法。可以通过阅读对应的MSDN文档(https://msdn.microsoft.com/en-us/library/windows/desktop/aa394173%28v=vs.85%29.aspx),获取其信息。
攻击者可以执行创建C盘卷影副本的WMI命令,并检索其ID,以便后期清理痕迹时删除卷影副本。目前,这种方法已经被用于解密SAM文件并获得Windows凭据。在这种情况下,Win32_ShadowCopy类中的Create()方法被调用:

$ Get-WMIObject Win32_ShadowCopy -List).Create("C:\", "ClientAccessible").ShadowID
如果你想要卷影副本的moar cookie,可以参考这一篇文章:
https://webcache.googleusercontent.com/search?q=cache:qiIjB9TU0VwJ:blog.szynalski.com/2009/11/volume-shadow-copy-system-restore/
另外,也可以从Windows命令行中通过WMI控制台执行WMI命令,其语法类似于:

$ wmic logicaldisk where drivetype=3 get name, freespace, systemname, size FreeSpace         Name  Size               SystemName 33230168064  C:   106901270528  AI-PINCHEWEEEY-VM
开始攻击
我们现在知道,已经有很多可以通过WMI使用的类,并且每一个类都有可以执行的方法。那么攻击者如何利用WMI实现攻击呢?我们举两个例子。
首先是启动进程:

$ wmic process call create "notepad.exe" Executing (Win32_Process)->Create() Method execution successful. Out Parameters: instance of __PARAMETERS {
接下来是结束进程:

$ wmic process where name="notepad.exe" delete Deleting instance \\AI-PINCHEWEEEY-VM\ROOT\CIMV2:Win32_Process.Handle="2416" Instance deletion successful.
想必大家已经觉得事情有些可怕了吧。甚至,你可以使用很多操作系统类,例如:
Win32_Process (“edit”, query processes)
Win32_Service (“edit”, query services)
Win32_Directory (“edit”, query directories)
Win32_Shares (“edit”, query network shares)
Win32_LocalTime (query time)
更多关于操作系统类的介绍可以参考:https://msdn.microsoft.com/en-us/library/dn792258
我们尝试远程运行命令:

$ wmic /node: "192.168.1.10" /username:domain\user /password:pwd process call create 'notepad.exe' Executing (Win32_Process)->Create() Method execution successful. Out Parameters: instance of __PARAMETERS {              ProcessId = 5176;
当攻击者需要从一台主机横向移动到另一台主机时,这无疑来说是一个简单的方式,因为不需要再像PSExec一样将工具放入目标主机中。
Hook Windows事件
接下来,我们来聊一下MOF脚本。简而言之,MOF脚本是通过mofcomp.exe程序编译后产生的文件,通过它可以调用WMI的一些功能。
借助MOF脚本,我们可以定时执行指定的命令,其使用如下:
__EventConsumer: 执行什么内容
__EventFilter: 什么时间执行
 __FilterToConsumerBinding: 绑定执行内容与执行时间
特别说明的一点是,Event Consumer可以执行VB脚本,例如:

instance of ActiveScriptEventConsumer as $Cons {          Name = "ASEC";          ScriptingEngine = "VBScript";          ScriptText =              "Set objShell = CreateObject(\"WScript.Shell\") \n"               "objShell.Exec(\"c:\\windows\\system32\\cmd.exe /c echo MOF Script Output>c:\\mof_output.txt\")\n"; };

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

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