Windows 系统的应急事件,按照处理的方式,可分为下面几种类别:
入侵肯定会留下痕迹,另外重点强调的是不要一上来就各种查查查,问清楚谁在什么时间发现的主机异常情况,异常的现象是什么,受害用户做了什么样的紧急处理。问清楚主机异常情况后,需要动脑考虑为什么会产生某种异常,从现象反推可能的入侵思路,再考虑会在 Windows 主机上可能留下的痕迹,最后才是排除各种可能,确定入侵的过程。
获取 Windows 的基本信息,如机器名称、操作系统版本、OS 安装时间、启动时间、域名、补丁安装情况,使用systeminfo
命令获取。运行msinfo32
也可以查看计算机的详细信息。
任何操作(人、程序、进程)都会导致产生相关日志
日志记录了系统中硬件、软件和系统问题的信息,同时还监视着系统中发生的事件。当服务器被入侵或者系统(应用)出现问题时,管理员可以根据日志迅速定位问题的关键,再快速处理问题,从而极大地提高工作效率和服务器的安全性。
Widdows 通过自带事件查看器管理日志,使用命令eventvwr.msc
打开,或者 Windows 10 搜索框直接搜索事件查看器
,或者使用开始菜单
-Windows 管理工具
-事件查看器打开
。
Windows 日志位置
Windows 2000/Server2003/Windows XP
\%SystemRoot%\System32\Config\*.evt
Windows Vista/7/10/Server2008:
\%SystemRoot%\System32\winevt\Logs\*.evtx
日志审核策略,使用命令auditpol /get /category:*
其他一些可能会用到的事件日志的位置:
C:\Windows\System32\SleepStudy
Windows 日志
系统日志
系统日志包含Windows系统组件记录的事件。例如,系统日志中会记录在启动过程中加载驱动程序或其他系统组件失败。系统组件所记录的事件类型由Windows预先确定。
应用程序日志
应用程序日志包含由应用程序或程序记录的事件。例如,数据库程序可在应用程序日志中记录文件错误。程序开发人员决定记录哪些事件。
安全日志
安全日志包含诸如有效和无效的登录尝试等事件,以及与资源使用相关的事件,如创建、打开或删除文件或其他对象。管理员可以指定在安全日志中记录什么事件。例如,如果已启用登录审核,则安全日志将记录对系统的登录尝试。
关于安全日志登录部分的事件 ID 和登录类型代码的含义见下面 2 个表。
常用事件 ID 含义
Event ID(2000/XP/2003) | Event ID(Vista/7/8/2008/2012) | 描述 | 日志名称 |
---|---|---|---|
528 | 4624 | 成功登录 | Security |
529 | 4625 | 失败登录 | Security |
680 | 4776 | 成功/失败的账户认证 | Security |
624 | 4720 | 创建用户 | Security |
636 | 4732 | 添加用户到启用安全性的本地组中 | Security |
632 | 4728 | 添加用户到启用安全性的全局组中 | Security |
2934 | 7030 | 服务创建错误 | System |
2944 | 7040 | IPSEC服务服务的启动类型已从禁用更改为自动启动 | System |
2949 | 7045 | 服务创建 | System |
登录类型 ID
成功/失败登录事件提供的有用信息之一是用户/进程尝试登录(登录类型),但 Windows 将此信息显示为数字,下面是数字和对应的说明:
登录类型 | 登录类型 | 描述 |
---|---|---|
2 | Interactive | 用户登录到本机 |
3 | Network | 用户或计算手机从网络登录到本机,如果网络共享,或使用 net use 访问网络共享,net view 查看网络共享 |
4 | Batch | 批处理登录类型,无需用户干预 |
5 | Service | 服务控制管理器登录 |
7 | Unlock | 用户解锁主机 |
8 | NetworkCleartext | 用户从网络登录到此计算机,用户密码用非哈希的形式传递 |
9 | NewCredentials | 进程或线程克隆了其当前令牌,但为出站连接指定了新凭据 |
10 | Remotelnteractive | 使用终端服务或远程桌面连接登录 |
11 | Cachedlnteractive | 用户使用本地存储在计算机上的凭据登录到计算机(域控制器可能无法验证凭据),如主机不能连接域控,以前使用域账户登录过这台主机,再登录就会产生这样日志 |
12 | CachedRemotelnteractive | 与 Remotelnteractive 相同,内部用于审计目的 |
13 | CachedUnlock | 登录尝试解锁 |
账户类型
应用程序和服务日志
应用程序和服务日志是一种新类别的事件日志。这些日志存储来自单个应用程序或组件的事件,而非可能影响整个系统的事件。
查看 PowerShell 的日志
Microsoft
->Windows
->PowerShell
->OPtions
攻击者可能造成的远程登录事件
RDP
攻击者使用 RDP 远程登录受害者计算机,源主机和目的主机都会生成相应事件。
重要的事件 ID(安全日志,Security.evtx)
远程连接日志(应用程序和服务日志
->Microsoft
->Windows
->-TerminalServices
->RemoteConnectionManager
->Operational
),重要事件 ID 和含义:
远程连接日志关注 RemoteInteractive(10) 和CachedRemoteInteractive(12)表明使用了 RDP ,因为这些登录类型专用于RDP使用。
计划任务和 AT
关注的事件 ID
计划任务事件 Microsoft-Windows-TaskScheduler/Operational.evtx,计划任务 ID 含义:
统一后台进程管理器(UBPM)
PSExec
PSExec是系统管理员的远程命令执行工具,包含在“Sysinternals Suite”工具中,但它通常也用于针对性攻击的横向移动。
PsExec的典型行为
%SystemRoot%
。-c
选项,则通过 $Admin 共享将文件复制到 %SystemRoot% 执行命令。PSExec选项的重要选项:
可以从System.evtx
中查找事件 ID 7045 发现 PSExec,相关的事件 ID
PsExec在执行命令时在远程主机上创建服务,默认服务名称为PSEXESVC
,配合检测系统 7045 事件可以确定。
如果使用-r
参数更改了默认的服务名称,通过以下特征可以检测 PSExec 的执行:
Widnows 自带事件管理器就是很不错的日志工具,其他可以了解下Event Log Explorer
可以将目标 IP 的所有日志文件复制出来,然后在其他电脑上使用 Event Log Explorer 进行分析。
其他一些工具:
使用Get-WinEvent
Get-WinEvent @{logname='application','system'} -MaxEvents 1
一些常见日志操作
# Get-WinEvent帮助命令
get-help Get-WinEvent
# 列出所有事件日志
Get-WinEvent -ListLog *
# powershell管理员权限下获取安全事件日志
Get-WinEvent -FilterHashtable @{LogName='Security'}
# 过滤安全事件ID 4624
Get-WinEvent -FilterHashtable @{LogName='Security';ID='4624'}
# 查询今天的应用和系统日志,显示前2条
Get-WinEvent @{logname='application','system';starttime=[datetime]::today } -MaxEvents 2
# 根据ID查询事件
Get-WinEvent -LogName Microsoft-Windows-PowerShell/Operational | Where-Object {$_.ID -eq "4100" -or $_.ID -eq "4104"}
# 查询指定时间内的事件
$StartTime=Get-Date -Year 2017 -Month 1 -Day 1 -Hour 15 -Minute 30
$EndTime=Get-Date -Year 2017 -Month 2 -Day 15 -Hour 20 -Minute 00
Get-WinEvent -FilterHashtable @{LogName='System';StartTime=$StartTime;EndTime=$EndTime}
Get-EventLog 的使用可以参考:https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-eventlog?view=powershell-5.1
攻击者入侵系统后,很可能会删除日志,比较粗暴的手法是直接删除所有日志和停止日志服务,对于应急来说删除掉的日志本身就是就是入侵的明显特征,根据文件创建时间也能大概判断入侵时间。另外有工具可以删除单条日志,这样只是分析 Windows 日志时对分析人员来说很难找到攻击痕迹,单条日志删除工具 https://github.com/360-A-Team/EventCleaner,另外可以参考 https://github.com/3gstudent/Eventlogedit-evtx--Evolution。
对抗删除的的措施是实施日志集中化,从 Windows 7 开始,Windows 记录日志为 XML 格式,可以使用
检查账户的几种方式:
lusrmgr.msc
net user
列出当前登录账号,使用wmic UserAccount get
列出当前系统所有账户HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
,HKLM\SAM\Domains\Account\
(默认是 SYSTEM)权限,需要配置成管理员权限查看。SID 位于HKU\
和 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
两个密钥中。 用户SID可以在值“Profilelist”下找到Subkeys(在用户登录系统时创建)。 值“ProfileImagePath”将列出该特定用户的配置文件的路径。 在操作系统级别,SID可识别无疑问题的帐户。 多用户系统看起来像这样
HKU\.DEFAULT
HKU\S-1-5-18
HKU\S-1-5-19
HKU\S-1-5-20
HKU\S-1-5-21-1116317227-3122546273-4014252621-1000
HKU\S-1-5-21-1116317227-3122546273-4014252621-1000_Classes
HKU\S-1-5-21-1116317227-3122546273-4014252621-1003
HKU\S-1-5-21-1116317227-3122546273-4014252621-1003_Classes
前四个密钥是系统帐户,从计算机到计算机通常是相同的。 HKU\.DEFAULT
包含全局用户信息。 HKU\S-1-5-18
属于“LocalSystem帐户”。HKU\S-1-5-19
用于运行本地服务,是“本地服务帐户”。HKU\S-1-5-20
是用于运行网络服务的“NetworkService帐户”。 其他子键是唯一的SID,它们与已登录系统的各个用户相关联。 他们的解释如下:
检查网络监听和连接的端口和应用程序
netstat -anob
输出主机上的所有侦听和活动连接,包括 PID 和连接到每个连接的程序的名称。 这也告诉 Netstat返回连接的 IP 地址,而不是试图确定它们的主机名。
路由
netstat -rn
结合findstr
命令查找特定的端口或程序。
发现的感觉异常的 IP 地址可以在威胁情报平台上查询,如果是已知的恶意 IP,可以比较快速的确认攻击方式。
防火墙配置
netsh firewall show all
Windows 10 自带的网络连接可以参考:
https://betanews.com/2018/07/31/all-the-websites-windows-10-connects-to-clean-install/
进程通常结合网络查看异常,先检查异常的网络连接,再获取由哪个进程生成的网络连接
netstat -abno | find "port number"
tasklist | findstr PID
使用 wmic 命令获取进程信息
wmic process | find "Proccess Id" > proc.csv
Get-WmiObject -Class Win32_Process
Get-WmiObject -Query "select * from win32_service where name='WinRM'" -ComputerName Server01, Server02 | Format-List -Property PSComputerName, Name, ExitCode, Name, ProcessID, StartMode, State, Status
PowerShell 的其他关于进程和网络的命令
Get-Process
Get-NetTCPConnection
Get-NetTCPConnection -State Established
# 进程跟服务的对应关系
tasklist /svc
使用 SysinternalsSuite 的 procexp 可以获取进程比较详细的信息,比如真实路径、加载的 DLL 文件等、CPU 和内存使用情况等。
当然也可以使用内存管理器。
查看可疑的进程及其子进程。可以通过观察以下内容:
可以获取进程关联的文件 MD5 值,然后发送到威胁情报平台上辅助检查。进程关联的文件也可以使用在线病毒检测平台上直接检测。
有 2 种比较方便的方法:
第一种是使用系统自带功能,在计算机属性,系统属性,高级选项卡中选择“启动和故障恢复设置”,选择完全转储内存,然后点击确定,系统会提示重启。
重启后在配置的文件位置可以找到上次转储的内存文件。
另外一种方法,使用 SysinternalsSuite 工具集的 notmyfault64 工具,在使用管理员权限的命令行模式下(cmd、PowerShell),运行
NotMyFault64.exe /crash
利用 Volatility 进行内存取证,分析入侵攻击痕迹,包括网络连接、进程、服务、驱动模块、DLL、handles、检测进程注入、检测Meterpreter、cmd历史命令、IE浏览器历史记录、启动项、用户、shimcache、userassist、部分rootkit隐藏文件、cmdliner等。
参考:https://xz.aliyun.com/t/2497
关于开机启动需要分析的位置:
gpedit.msc
在本地组策略编辑器里查看开机运行脚本,包括计算机配置和用户配置的。服务状态,自动启动配置,在 PowerShell 下可以运行:
Get-Service
# 运行service命令
service
运行services.msc
可以打开 Windows 服务工具,常见的 GUI 界面。
存放计划任务的文件
使用命令查看计划任务
schtasks
运行taskschd.msc
打开计划任务面板,或者从计算机管理进入,直接查看计划任务。
也可以使用 SysinternalsSuite 工具集的 Autoruns 工具查看计划任务。
检查可疑文件的思路,一种是通过可疑进程(CPU 利用率、进程名)关联的文件,一种是按照时间现象关联的文件,文件大小也可以 作为辅助的判断方法,文件的操作可以使用Get-ChildItem
命令查看。需要关注的文件位置:
驱动
driverquery
进程 DLL 的关联查询
tasklist -M
注册表目录含义:
一些重要的注册表键
hklm:\Software\Microsoft\Windows\CurrentVersion\policies\system
hklm:\Software\Microsoft\Active Setup\Installed Components
hklm:\Software\Microsoft\Windows\CurrentVersion\App Paths
hklm:\software\microsoft\windows nt\CurrentVersion\winlogon
hklm:\software\microsoft\security center\svc
hkcu:\Software\Microsoft\Windows\CurrentVersion\Explorer\TypedPaths
hkcu:\Software\Microsoft\Windows\CurrentVersion\explorer\RunMru
hklm:\Software\Microsoft\Windows\CurrentVersion\explorer\Startmenu
hklm:\System\CurrentControlSet\Control\Session Manager
hklm:\Software\Microsoft\Windows\CurrentVersion\explorer\ShellFolders
hklm:\Software\Microsoft\Windows\CurrentVersion\ShellExtensions\Approved
hklm:\System\CurrentControlSet\Control\Session Manager\AppCertDlls
hklm:\Software\Classes\exefile\shell\open\command
hklm:\BCD00000000
hklm:\system\currentcontrolset\control\lsa
hklm:\Software \Microsoft\Windows\CurrentVersion\Explorer\BrowserHelper Objects
hklm:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects
hkcu:\Software\Microsoft\Internet Explorer\Extensions
hklm:\Software\Microsoft\Internet Explorer\Extensions
hklm:\Software\Wow6432Node\Microsoft\Internet Explorer\Extensions
活用注册表编辑器的搜索功能,根据进程名称、服务名称、文件名称搜索注册表。
通常可能的传播方式:
挖矿事件应急可能需要对样本进行分析,需要二进制的一些分析能力,通过提取样本后确认样本分类、行为、危害。
通常可能的传播方式:
确认勒索病毒后要立即拔掉网线,限制传播范围。
工具中有些是命令行工具,有些是有 GUI 界面,作用:
下载:https://docs.microsoft.com/en-us/sysinternals/downloads/
可以方便的查看自启动、计划任务和运行服务,通过关联右键菜单可以获取更详细的内容。
查看进程的工具。
Active Directory Explorer(AD Explorer)是一种高级Active Directory(AD)查看器和编辑器。 您可以使用AD Explorer轻松导航AD数据库,定义收藏位置,查看对象属性和属性,而无需打开对话框,编辑权限,查看对象的架构,以及执行可以保存和重新执行的复杂搜索。
AD Explorer还包括保存AD数据库快照以进行脱机查看和比较的功能。 加载已保存的快照时,您可以像实时数据库一样导航和浏览它。 如果您有两个AD数据库快照,则可以使用AD Explorer的比较功能查看它们之间更改的对象,属性和安全权限。
查看网络连接情况
像Telnet这样的实用程序和Symantec的PC Anywhere等远程控制程序允许您在远程系统上执行程序,但是设置起来很麻烦,并且要求您在要访问的远程系统上安装客户端软件。 PsExec是一种轻量级的 telne t替代品,可让您在其他系统上执行进程,完成控制台应用程序的完全交互,而无需手动安装客户端软件。 PsExec最强大的用途包括在远程系统上启动交互式命令提示和IpConfig等远程启用工具,否则它们无法显示有关远程系统的信息。
使用可以参考:https://www.itprotoday.com/management-mobility/psexec
列出了当前活动的登录会话,如果指定-p选项,则列出每个会话中运行的进程。
这是一本书,介绍 Sysinternals 工具集的使用。