1. Windows 的应急事件分类

Windows 系统的应急事件,按照处理的方式,可分为下面几种类别:

2. 通用排查思路

入侵肯定会留下痕迹,另外重点强调的是不要一上来就各种查查查,问清楚谁在什么时间发现的主机异常情况,异常的现象是什么,受害用户做了什么样的紧急处理。问清楚主机异常情况后,需要动脑考虑为什么会产生某种异常,从现象反推可能的入侵思路,再考虑会在 Windows 主机上可能留下的痕迹,最后才是排除各种可能,确定入侵的过程。

获取 Windows 的基本信息,如机器名称、操作系统版本、OS 安装时间、启动时间、域名、补丁安装情况,使用systeminfo命令获取。运行msinfo32也可以查看计算机的详细信息。

2.1 直接检查相关日志

任何操作(人、程序、进程)都会导致产生相关日志

2.1.1 Windows 日志简介

日志记录了系统中硬件、软件和系统问题的信息,同时还监视着系统中发生的事件。当服务器被入侵或者系统(应用)出现问题时,管理员可以根据日志迅速定位问题的关键,再快速处理问题,从而极大地提高工作效率和服务器的安全性。
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:*

其他一些可能会用到的事件日志的位置:

关于安全日志登录部分的事件 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

2.1.2 远程登录事件

攻击者可能造成的远程登录事件

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的典型行为

PSExec选项的重要选项:

可以从System.evtx中查找事件 ID 7045 发现 PSExec,相关的事件 ID

PsExec在执行命令时在远程主机上创建服务,默认服务名称为PSEXESVC,配合检测系统 7045 事件可以确定。
如果使用-r参数更改了默认的服务名称,通过以下特征可以检测 PSExec 的执行:

2.1.3 GUI 的日志工具介绍

Widnows 自带事件管理器就是很不错的日志工具,其他可以了解下Event Log Explorer

可以将目标 IP 的所有日志文件复制出来,然后在其他电脑上使用 Event Log Explorer 进行分析。
其他一些工具:

2.2.4 PowerShell 日志操作

使用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

2.2.5 Windows 日志删除和日志集中化

攻击者入侵系统后,很可能会删除日志,比较粗暴的手法是直接删除所有日志和停止日志服务,对于应急来说删除掉的日志本身就是就是入侵的明显特征,根据文件创建时间也能大概判断入侵时间。另外有工具可以删除单条日志,这样只是分析 Windows 日志时对分析人员来说很难找到攻击痕迹,单条日志删除工具 https://github.com/360-A-Team/EventCleaner,另外可以参考 https://github.com/3gstudent/Eventlogedit-evtx--Evolution。

对抗删除的的措施是实施日志集中化,从 Windows 7 开始,Windows 记录日志为 XML 格式,可以使用

2.2 检查账户

检查账户的几种方式:

  1. 在本地用户和组里查看,运行lusrmgr.msc
  2. 使用net user列出当前登录账号,使用wmic UserAccount get列出当前系统所有账户
  3. 检查注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileListHKLM\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,它们与已登录系统的各个用户相关联。 他们的解释如下:

2.3 检查网络连接

检查网络监听和连接的端口和应用程序

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/

2.4 检查进程

进程通常结合网络查看异常,先检查异常的网络连接,再获取由哪个进程生成的网络连接

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.4.1 内存 dump

有 2 种比较方便的方法:
第一种是使用系统自带功能,在计算机属性,系统属性,高级选项卡中选择“启动和故障恢复设置”,选择完全转储内存,然后点击确定,系统会提示重启。

重启后在配置的文件位置可以找到上次转储的内存文件。

另外一种方法,使用 SysinternalsSuite 工具集的 notmyfault64 工具,在使用管理员权限的命令行模式下(cmd、PowerShell),运行

NotMyFault64.exe /crash

2.4.2 内存分析

利用 Volatility 进行内存取证,分析入侵攻击痕迹,包括网络连接、进程、服务、驱动模块、DLL、handles、检测进程注入、检测Meterpreter、cmd历史命令、IE浏览器历史记录、启动项、用户、shimcache、userassist、部分rootkit隐藏文件、cmdliner等。

参考:https://xz.aliyun.com/t/2497

2.5 检查开机启动和运行服务

2.5.1 开机启动

关于开机启动需要分析的位置:

2.5.2 查看服务状态

服务状态,自动启动配置,在 PowerShell 下可以运行:

Get-Service

# 运行service命令
service

运行services.msc可以打开 Windows 服务工具,常见的 GUI 界面。

2.6 检查计划任务

存放计划任务的文件

使用命令查看计划任务

schtasks

运行taskschd.msc打开计划任务面板,或者从计算机管理进入,直接查看计划任务。

也可以使用 SysinternalsSuite 工具集的 Autoruns 工具查看计划任务。

2.7 检查文件

检查可疑文件的思路,一种是通过可疑进程(CPU 利用率、进程名)关联的文件,一种是按照时间现象关联的文件,文件大小也可以 作为辅助的判断方法,文件的操作可以使用Get-ChildItem命令查看。需要关注的文件位置:

tasklist -M

2.8 检查注册表

注册表目录含义:

  1. HKEY_CLASSES_ROOT(HKCR):此处存储的信息可确保在Windows资源管理器中执行时打开正确的程序。它还包含有关拖放规则,快捷方式和用户界面信息的更多详细信息。
  2. HKEY_CURRENT_USER(HKCU):包含当前登录系统的用户的配置信息,包括用户的文件夹,屏幕颜色和控制面板设置。HKEY_USERS中特定于用户的分支的别名。通用信息通常适用于所有用户,并且是HKU.DEFAULT。
  3. HKEY_LOCAL_MACHINE(H​​KLM):包含运行操作系统的计算机硬件特定信息。它包括系统上安装的驱动器列表以及已安装硬件和应用程序的通用配置。
  4. HKEY_USERS(HKU):包含系统上所有用户配置文件的配置信息,包括应用程序配置和可视设置。
  5. HKEY_CURRENT_CONFIG(HCU):存储有关系统当前配置的信息。

一些重要的注册表键

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

活用注册表编辑器的搜索功能,根据进程名称、服务名称、文件名称搜索注册表。

3. 特定事件痕迹检查

3.1 挖矿病毒应急

3.1.1 传播方式

通常可能的传播方式:

  1. 通过社工、钓鱼方式下载和运行了挖矿程序(邮件、IM 等)
  2. 利用计算机系统远程代码执行漏洞下载、上传和执行挖矿程序
  3. 利用计算机 Web 或第三方软件漏洞获取计算机权限,然后下载和执行挖矿程序
  4. 利用弱口令进入系统,下载和执行挖矿程序
  5. 执行 Web 页面的挖矿 JS 脚本

3.1.2 挖矿程序特点

3.1.3 挖矿程序应急目的

挖矿事件应急可能需要对样本进行分析,需要二进制的一些分析能力,通过提取样本后确认样本分类、行为、危害。

3.2 勒索病毒事件应急

3.2.1 传播方式

通常可能的传播方式:

  1. 通过社工、钓鱼方式下载和运行了勒索程序(邮件、IM 等)
  2. 利用计算机系统远程代码执行漏洞下载、上传和执行勒索病毒
  3. 利用计算机 Web 或第三方软件漏洞获取计算机权限,然后下载和执行勒索病毒
  4. 利用弱口令进入计算机系统,下载和执行勒索病毒

3.2.2 勒索病毒特点

3.3.3 勒索病毒应急目的

确认勒索病毒后要立即拔掉网线,限制传播范围。

3.3 应急示例

4. Sysinternals Utilities

工具中有些是命令行工具,有些是有 GUI 界面,作用:

下载:https://docs.microsoft.com/en-us/sysinternals/downloads/

4.1 常用工具介绍

4.1.1 autoruns

可以方便的查看自启动、计划任务和运行服务,通过关联右键菜单可以获取更详细的内容。

4.1.2 procexp

查看进程的工具。

4.1.3 ADExplorer

Active Directory Explorer(AD Explorer)是一种高级Active Directory(AD)查看器和编辑器。 您可以使用AD Explorer轻松导航AD数据库,定义收藏位置,查看对象属性和属性,而无需打开对话框,编辑权限,查看对象的架构,以及执行可以保存和重新执行的复杂搜索。

AD Explorer还包括保存AD数据库快照以进行脱机查看和比较的功能。 加载已保存的快照时,您可以像实时数据库一样导航和浏览它。 如果您有两个AD数据库快照,则可以使用AD Explorer的比较功能查看它们之间更改的对象,属性和安全权限。

4.1.4 TCPView

查看网络连接情况

4.1.5 PSExec

像Telnet这样的实用程序和Symantec的PC Anywhere等远程控制程序允许您在远程系统上执行程序,但是设置起来很麻烦,并且要求您在要访问的远程系统上安装客户端软件。 PsExec是一种轻量级的 telne t替代品,可让您在其他系统上执行进程,完成控制台应用程序的完全交互,而无需手动安装客户端软件。 PsExec最强大的用途包括在远程系统上启动交互式命令提示和IpConfig等远程启用工具,否则它们无法显示有关远程系统的信息。

使用可以参考:https://www.itprotoday.com/management-mobility/psexec

4.1.6 LogonSessions

列出了当前活动的登录会话,如果指定-p选项,则列出每个会话中运行的进程。

4.2 Troubleshooting with the Windows Sysinternals Tools 2nd Edition

这是一本书,介绍 Sysinternals 工具集的使用。

5. 其他

参考

源链接

Hacking more

...