三好学生 · 2015/09/07 10:20

0x00 前言


前两篇分别介绍了WMI Attacks & WMI Backdoor,侧重于攻击,所以这篇介绍一下WMI Defense,攻防结合,便于大家更清楚认识WMI.

0x01 简介


本篇侧重于介绍如何通过Powershell调用WMI监视自身系统、记录入侵行为,并对WMI的检测工具做具体测试。

0x02 测试环境


Win8 x86 powershell v3(win8默认安装) 开启Winmgmt服务,支持WMI

0x03 监视系统


*注: 以下均为Powershell代码

1、监视进程创建

 $filterName = 'BotFilter48'$consumerName = 'BotConsumer48'#查询进程创建事件$Query = "SELECT * FROM __InstanceCreationEvent WITHIN 5 WHERE TargetInstance ISA 'Win32_Process'"$WMIEventFilter = Set-WmiInstance -Class __EventFilter -NameSpace "root\subscription" -Arguments @{Name=$filterName;EventNameSpace="root\cimv2";QueryLanguage="WQL";Query=$Query} -ErrorAction Stop#写入日志文件$Arg =@{Name=$consumerNameFilename = 'C:\test\log.log'Text = 'New Process Created with name %TargetInstance.Name%'}$WMIEventConsumer = Set-WmiInstance -Class LogFileEventConsumer -Namespace "root\subscription" -Arguments $ArgSet-WmiInstance -Class __FilterToConsumerBinding -Namespace "root\subscription" -Arguments @{Filter=$WMIEventFilter;Consumer=$WMIEventConsumer}
复制代码

如图

2、监视进程结束

$filterName = 'BotFilter49'
$consumerName = 'BotConsumer49'# 查询进程结束事件$Query = "SELECT * FROM __InstanceDeletionEvent WITHIN 5 WHERE TargetInstance ISA 'Win32_Process'"
$WMIEventFilter = Set-WmiInstance -Class __EventFilter -NameSpace "root\subscription" -Arguments @{Name=$filterName;EventNameSpace="root\cimv2";QueryLanguage="WQL";Query=$Query} -ErrorAction Stop$Arg =@{Name=$consumerNameFilename = 'C:\test\log.log'Text = 'Task kill with name %TargetInstance.Name%'}
$WMIEventConsumer = Set-WmiInstance -Class LogFileEventConsumer -Namespace "root\subscription" -Arguments $ArgSet-WmiInstance -Class __FilterToConsumerBinding -Namespace "root\subscription" -Arguments @{Filter=$WMIEventFilter;Consumer=$WMIEventConsumer}
复制代码

如图

3、监视注册表

(1)监视单一键值

$filterName = 'BotFilter51'
$consumerName = 'BotConsumer51'$Query ="SELECT * FROM RegistryKeyChangeEvent WHERE Hive='HKEY_LOCAL_MACHINE' AND KeyPath='SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run'" $WMIEventFilter = Set-WmiInstance -Class __EventFilter -NameSpace "root\subscription" -Arguments @{Name=$filterName;EventNameSpace="root\default";QueryLanguage="WQL";Query=$Query} -ErrorAction Stop$Arg =@{Name=$consumerNameFilename = 'C:\test\log.log'Text ='The change is HKEY_LOCAL_MACHINE\\%KeyPath%'}$WMIEventConsumer = Set-WmiInstance -Class LogFileEventConsumer -Namespace "root\subscription" -Arguments $ArgSet-WmiInstance -Class __FilterToConsumerBinding -Namespace "root\subscription" -Arguments @{Filter=$WMIEventFilter;Consumer=$WMIEventConsumer}
复制代码

监视 “HKEY_LOCAL_MACHINE\\SOFTWARE\Microsoft\Windows\CurrentVersion\Run” 键值的任何改动

如图

(2)监视某一键值及其子键

监视 “HKEY_LOCAL_MACHINE\\SOFTWARE\Microsoft” 键值及其子键的任何改动

$filterName = 'BotFilter52'
$consumerName = 'BotConsumer52'$Query ="SELECT * FROM RegistryTreeChangeEvent WHERE Hive='HKEY_LOCAL_MACHINE' AND RootPath='SOFTWARE\\Microsoft\\'" $WMIEventFilter = Set-WmiInstance -Class __EventFilter -NameSpace "root\subscription" -Arguments @{Name=
$filterName;EventNameSpace="root\default";QueryLanguage="WQL";Query=$Query} -ErrorAction Stop$Arg =@{Name=$consumerNameFilename = 'C:\test\logtree.log'Text ='The change is HKEY_LOCAL_MACHINE\\%RootPath%'}$WMIEventConsumer = Set-WmiInstance -Class LogFileEventConsumer -Namespace "root\subscription" -Arguments $Arg
Set-WmiInstance -Class __FilterToConsumerBinding -Namespace "root\subscription" -Arguments @{Filter=$WMIEventFilter;Consumer=$WMIEventConsumer}
复制代码

0x04 检测工具测试

测试工具

Sysinternals Autoruns
复制代码

检测目标

能否查出所有WMI定时运行的操作

测试方法

在目标主机运行包含以下Consumer的定时运行操作,使用Sysinternals Autoruns进行检测。

-ActiveScriptEventConsumer
-CommandLineEventConsumer
-LogFileEventConsumer
-NTEventLogEventConsumer
-ScriptingStandardConsumerSetting
-SMTPEventConsumer
复制代码

测试结果

如图

Sysinternals Autoruns只能检测到ActiveScriptEventConsumerCommandLineEventConsumer的操作,可以理解为上述对进程和注册表监视的操作无法识别

解决措施

直接查询WMI调用,即可获得所有定时执行的操作

#List Event FiltersGet-WMIObject -Namespace root\Subscription -Class __EventFilter#List Event ConsumersGet-WMIObject -Namespace root\Subscription -Class __EventConsumer#List Event BindingsGet-WMIObject -Namespace root\Subscription -Class __FilterToConsumerBinding
复制代码

0x05 WMI使用补充

以上三篇关于WMI的文章均采用Powershell实现,当然用mofvbs也能够实现,这里给出一些参考代码,其他功能代码按照格式修改即可

1、mof文件记录注册表修改的操作

(1)以下文件保存为reg.mof文件

 #pragma namespace ("\\\\.\\root\\subscription")instance of __EventFilter as $Filter{Name = "RunKeyFilter";QueryLanguage = "WQL";Query = "Select * from RegistryTreeChangeEvent"" where (Hive = \"HKEY_LOCAL_MACHINE\" and ""KeyPath = \"Software\\\\Microsoft\\\\Windows""\\\\CurrentVersion\\\\Run\")";// RegistryTreeChangeEvents only fire// in root\default namespaceEventNamespace = "root\\default";   };instance of LogFileEventConsumer as $Consumer{Name= "consumer1";Filename = "C:\test\log.log";Text ="The change is HKEY_LOCAL_MACHINE\\%KeyPath%";};// Bind the filter to the consumerinstance of __FilterToConsumerBinding{Filter = $Filter;Consumer = $Consumer;};
复制代码

(2)编译mof文件

命令行下管理员权限执行mofcomp reg.mof

2、vbs文件记录注册表修改的操作

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\default")
Set colEvents = objWMIService.ExecNotificationQuery _("SELECT * FROM RegistryKeyChangeEvent WHERE Hive='HKEY_LOCAL_MACHINE' AND " & _"KeyPath='SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run'")
DoSet objLatestEvent = colEvents.NextEventWscript.Echo Now & ": The registry has been modified."
Loop
复制代码

0x06 小结

以上三篇对WMI AttacksWMI BackdoorWMI Defense做了全面介绍,时间有限细节之处难免会有疏忽,欢迎大家共同交流,共同学习,我会在留言作适当补充更正:)


本文由三好学生原创并首发于乌云drops,转载请注明

WMI Defense相关推荐

  1. 内网渗透系列:权限维持方法小结

    目录 前言 一.Windows 1.密码记录工具 (1)WinlogonHack (2)键盘记录器 (3)NTPass 2.常用的存储Payload位置 (1)WMI (2)包含数字签名的PE文件 ( ...

  2. 新型入侵技术:使用WMI编译的“.bmf”文件和CertUtil进行混淆执行

    前言 这篇文章主要讲述了一个有趣的入侵尝试,FireEye Managed Defense近期阻止了一项利用近期披露漏洞的快速武器化攻击,在该攻击中,攻击者创造性地使用了WMI编译的".bm ...

  3. .NET 框架中的 WMI 命名空间

    .NET 框架中的 WMI 命名空间   .NET框架中与WMI规范有关的命名空间有两个,分别是System.Management和System.Management.Instrumentation两 ...

  4. WMI Series :管理对象的信息查询和方法访问

    管理对象的信息查询和方法访问   在这一节内容,我们将通过几个实例来学习如何查询管理对象信息和访问管理对象提供的方法,这一部分内容将使用到我们在前面讲述到的System.Management命名空间中 ...

  5. WMI Series :事件预订和处理

    WMI事件概述 对于从事Winows编程的开发人员来说,事件驱动的应用程序设计是再熟悉不过了,但是WMI中的事件又是一个什么样的概念呢?对于宝贵的内存和CPU资源,管理员需要不断的监视其性能:对于磁盘 ...

  6. C#精髓【月儿原创】第二讲 WMI完美秀出CPU编号厂商主频百分比等全部信息

    说明:准备出一个系列,所谓精髓讲C#语言要点.这个系列没有先后顺序,不过尽量做到精.可能会不断增删整理,本系列最原始出处是csdn博客,谢谢关注. C#精髓 第二讲 WMI完美秀出CPU编号厂商主频电 ...

  7. 通过WMI获得硬盘和CPU的物理序列号(VB.net)

    作者:iwebsms   '获得硬盘序列号 Dim cmicWmi As New System.Management.ManagementObjectSearcher("SELECT * F ...

  8. WMI技术介绍和应用——总结(完)

    断断续续的,历经三年将WMI这个主题给写完了.记得最开始时接触该技术,是因为传统获取CPU序列号的方法总是出错.于是接触了这种已经很老的技术.本着打破砂锅问到底的想法,我决定稍微研究一下,结果越来越深 ...

  9. WMI技术介绍和应用——Event Consumer Provider

    在<WMI技术介绍和应用--Event Provider>和<WMI技术介绍和应用--接收事件>中,我们展现了如何处理和事件相关的WMI知识.而<WMI技术介绍和应用-- ...

  10. WMI技术介绍和应用——Event Provider

    在<WMI技术介绍和应用--Instance/Method Provider>一文中,我们介绍了Instance和Method Provider的编写方法.本文我们将介绍更有意思的&quo ...

最新文章

  1. Hadoop jobhistory历史服务器
  2. mysql 查询后怎么定位列_MySQL如何定位并优化慢查询sql
  3. 从Java视角理解CPU缓存(CPU Cache)
  4. 【cJSon】cJSON学习笔记(一)
  5. 基于Azure Blob冷存储的数据压缩备份总结
  6. 关于 SET QUOTED_IDENTIFIER ON 和 SET ANSI_NULLS ON
  7. oracle类似sqlcmd工具,Oracle:是否有跟踪查询的工具,例如用于SQL Server的Profiler?...
  8. JQuery解析Json数据填充到表格
  9. python 计算标准体重程序
  10. 微型计算机软件系统分为什么,微型计算机软件微型计算机软件主要包括哪些软件?...
  11. C语言二级操作题满分班(2015年9月方法篇)-叶冬冬-专题视频课程
  12. 文件被占用无法删除,解决办法
  13. 携程ajax,Python爬虫实战之爬取携程评论
  14. 小红的签到题 (shui
  15. Xilinx xdma Linux平台使用
  16. python --- alipay
  17. 数学公式 —— 向量
  18. 电脑优化软件测试大乐,电脑整机性能测试软件(PCMark 7)
  19. 微软正式抛弃UWP!
  20. 荣耀8 基于官方8.0系统 刷xposed,面具 trwp踩坑

热门文章

  1. 差点被开除:一次订单号重复的事故
  2. 手把手图文教你从Eclipse项目迁移Android Studio
  3. python基础篇——列表与列表算法(下)
  4. python基础篇--变量和简单的数据类型(中)
  5. 华为发布了其自研的鸿蒙操作系统,官宣!鸿蒙手机操作系统即将发布
  6. php api 在线编辑导出,api在线管理,调试,文档生成工具之Apizza
  7. java实时解析mysql日志,利用maxwell 组件实时监听Mysql的Binlog日志,并且把解析的json格式数据发送到kafka窗口供实时消费...
  8. html的经典语法大全,HTML语法大全
  9. vue实现上移下移_vue.js实现组件间的上移下移
  10. word一键排版_这个 Word 插件神器,帮你快速搞定排版问题