横向移动检测之远程执行(四)WMI/WMIC
横向移动检测之远程执行—WMI/WMIC
1.1 介绍
在横向移动过程,攻击者可能会利用WMI(Windows Management Instrumentation)提供的功能,通过远程执行命令进行横向移动。在Windows平台,在客户端通常使用wmic执行命令,服务端会使用wmiprvse.exe来创建客户端请求的进程,wmic命令的基本格式如下:
CMD:wmic /node:host process call create “evil.exe”
Powershell:Invoke-WmiMethod –Computer host –Class Win32_Process –Name create -Argument “c:\temp\evil.exe” # 默认使用当前用户的凭证
通过对源和目的主机的事件日志,注册表,文件系统进行分析,可以获得源主机运行程序wmic的时间,运行次数等信息,从目的主机可以获得客户端的源IP,可执行文件wmiprvse.exe及上传的恶意文件的执行时间等信息。
首先需要对winrm服务进行配置:
检查winrm服务是否启动:get-service winrm
如果没启动,则启动服务:
对于win7,只需启动服务即可,无需后续操作:
为远程主机添加访问权限:winrm s winrm/config/client '@{TrustedHosts="REMOTECOMPUTERNAME/IP"}'
检查winrm服务:
设置防火墙规则:
Win+R->secpol.msc
创建一个远程进程进行测试:wmic /node:192.168.49.145 /user joker /password:123456 process call create "notepad.exe"
如下图,成功远程创建进程:
环境
使用wimc,在192.168.49.155上远程在目标主机192.168.49.144创建进程。
- 源:192.168.49.155
- 目的:192.168.49.144
在目标主机查看,成功执行了evil.exe:
1.2 WMI/WMIC - 源
1.2.1 事件日志
-
security.evtx
- 4648,试图使用显式凭据登录,记录当前登录的用户名,可选的用户名,目标主机名/IP,进程名。
每执行一次wmic,产生3条日志:
日志收集:kape.exe --tsource C: --target EventLogs --tdest EventLogs
使用LogParser进行分析:LogParser -stats:OFF -i:EVT "SELECT timegenerated as date, extract_token(strings, 1, '|') as accountname, extract_token(strings, 2, '|') as domain, extract_token(strings, 5, '|') as usedaccount, extract_token(strings, 6, '|') as useddomain, extract_token(strings, 8, '|') as targetserver, extract_token(strings, 9, '|') as extradata, extract_token(strings, 11, '|') as procname, extract_token(strings, 12, '|') as sourceip from 'Security.evtx' WHERE EventID = 4648 ORDER BY timegenerated DESC"
1.2.2 注册表
-
ShimCache
Windows Application Compatibility(兼容性) Database,被Windows用来识别可执行程序可能面临的兼容性。ShimCache会记录可执行文件的名称,文件大小,最后的修改时间,及在Windows XP中的最后更新时间。在Win7/8/10中,位于SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache。
通过分析wmic.exe的shimcache记录,可以确认程序执行,通过last write timestamp在一定程度上也能确认程序的执行时间范围(最晚不超过last write timestamp)。
在下图中,可以确认程序执行过,但这里时间不准确: -
BAM/DAM
Windows Background Activity Moderator (BAM),用于控制后台应用活动的服务。此服务存在于Windows 10的更新版本1709之后。BAM记录系统运行的可执行文件的完整路径和最后的执行日期/时间。记录存在于SYSTEM注册表文件,位置为SYSTEM\CurrentControlset\Services\bam\UserSettings{SID},可通过查看wmic.exe的记录,确定程序的最后执行日期/时间。
测试过程未发现执行记录: -
Amcache.hve
AmCache.hve位于C:\Windows\Appcompat\Programs\Amcache.hve,记录程序的首次执行时间。可用kape.exe在live系统提取Amcache.hve:kape.exe --tsource C: --target Amcache --tdest Amcache
然后用工具RegRipper对Amcache.hve文件进行分析,如***意结果中时间加8),测试过程未找到程序wmic.exe的执行记录:
1.2.3 文件系统
-
Prefetch
Windows Prefetch文件位于C:\windows\prefetch\目录,通过分析恶意服务的可执行文件对应的.pf文件,可以获得程序的执行次数,首次执行时间,最后执行时间等信息。
用winprefetchview对wmic.exe文件进行分析,在下图中,程序首次运行时间为2019-07-03 21:35:55,运行次数为15,最后运行时间为2019-09-14 23:23:08:
1.3 WMI/WMIC - 目的
1.3.1 事件日志
-
security.evtx
- 4624,登录类型3,记录源IP,登录的用户名。每远程执行一次,产生3条日志记录。
使用LogParser.exe对日志进行分析:LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 5, '|') as Username, EXTRACT_TOKEN(Strings, 6, '|') as Domain, EXTRACT_TOKEN(Strings, 8, '|') as LogonType,EXTRACT_TOKEN(strings, 9, '|') AS AuthPackage, EXTRACT_TOKEN(Strings, 11, '|') AS Workstation, EXTRACT_TOKEN(Strings, 17, '|') AS ProcessName, EXTRACT_TOKEN(Strings, 18, '|') AS SourceIP FROM 'Security.evtx' WHERE EventID = 4624 AND Username NOT IN ('SYSTEM'; 'ANONYMOUS LOGON'; 'LOCAL SERVICE'; 'NETWORK SERVICE') AND Domain NOT IN ('NT AUTHORITY') AND LogonType= '3' ORDER BY TimeGenerated DESC"
- 4672,记录登录的用户名,用户以管理员权限登录。每执行一次wmic会产生3条记录。
使用LogParser进行分析:LogParser -stats:OFF -i:EVT "Select TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 1, '|') AS Username, EXTRACT_TOKEN(Strings, 2, '|') AS Domain FROM 'Security.evtx' WHERE EventID = 4672 AND Domain NOT IN ('NT AUTHORITY') ORDER BY TimeGenerated DESC"
-
Microsoft-Windows-WMI-Activity%4Operational.evtx
- 5857,表明wmiprvse执行的时间和provider DLL的路径(攻击者有时会安装恶意的WMI provider DLL)。
测试过程win7不存在该日志,win10存在。
- 5860,5861,注册一个临时(5860)和持久(5861)的Event Consumer。通常用于持久性,但也可以用于远程执行。
测试过程远程创建进程未产生上述日志记录。
系统存在的对应日志如下:
1.3.2 注册表
-
ShimCache
Windows Application Compatibility(兼容性) Database,被Windows用来识别可执行程序可能面临的兼容性。ShimCache会记录可执行文件的名称,文件大小,最后的修改时间,及在Windows XP中的最后更新时间。在Win7/8/10中,位于SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache。
- wmiprvse.exe
在下图中,可以确认程序执行过,但执行时间没有实际意义:
- evil.exe
在下图中,可以确认程序执行过,及程序的最后修改时间:
- mofcomp.exe
如果编译过mof文件,可能会记录mofcomp.exe的执行,由于测试过程未编译mof文件,所以不存在mofcomp.exe的记录。
1.3.3 文件系统
-
文件创建
当攻击者在远程系统创建进程或执行命令时,可能需要在目标系统上传恶意文件如evil.exe(恶意服务可执行文件)或evil.dll(服务DLL),因此文件的创建和删除等会被文件系统记录。
- evil.exe
- evil.mof,.mof文件被用于管理WMI仓库。
分析$MFT:analyzeMFT.py -f \$MFT -o win10_mft_analyze.csv -e bodyfull -p --localtz
查看生成的结果: -
Prefetch
Windows Prefetch文件位于C:\windows\prefetch\目录,通过分析恶意服务的可执行文件对应的.pf文件,可以获得程序的执行次数,首次执行时间,最后执行时间等信息。
用winprefetchview对evil.exe文件进行分析,在下图中,程序首次运行时间为2019-09-10 11:48:57,运行次数为19,最后运行时间为2019-09-15 9:37:13:
- wmiprvse.exe-{hash}.pf
在使用wmic远程执行命令时,会在服务端使用wmiprvse.exe创建进程执行命令,使用WinPrefetchView分析结果如下: