Windows应急响应指南

本文总结Windows系统应急响应的基本思路与技巧...

0x00 开始运行

运行程序 运行命令
计算机管理 compmgmt.msc
设备管理器 devmgmt.msc
事件查看器 eventvwr.msc
组策略编辑器 gpedit.msc
本地安全策略 secpol.msc
本地用户和组 lusrmgr.msc
服务 services.msc
共享文件夹 fsmgmt.msc
证书管理控制台 certmgr.msc
任务管理器 taskmgr
任务计划 control schedtasks
注册表编辑器 regedit
系统信息 msinfo32
系统配置 msconfig
管理工具 control admintools
组件服务 dcomcnfg
文件签名验证 sigverif
性能监视器 perfmon
远程桌面连接 mstsc
系统文件检查工具 sfc
程序和功能 appwiz.cpl
网络连接 ncpa.cpl
系统属性 sysdm.cpl
Windows防火墙 firewall.cpl

0x01 系统排查

1. 系统信息

1
2
3
4
5
6
7
8
9
10
11
msinfo32  #查看系统信息

systeminfo | findstr /B /C:"OS Name" /C:"OS Version"

wmic qfe # 补丁更新信息

wmic os get osarchitecture || echo %PROCESSOR_ARCHITECTURE% # 体系架构

wmic logicaldisk get caption || fsutil fsinfo drives # 查看驱动信息
wmic logicaldisk get caption,description,providername
Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}| ft Name,Root

2. 用户账号

系统被入侵后,需排查攻击者是否新建账户、激活系统默认账户、建立隐藏账户(账户名称最后加$)等

排查方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
(1) 命令行查看

echo %USERNAME% || whoami # 获取当前用户名

net user # 列举所有用户,无法查看隐藏账户
whoami /all
Get-LocalUser | ft Name,Enabled,LastLogon
Get-ChildItem C:\Users -Force | select Name

net user username # 获取用户详细信息
net user admin
net user %USERNAME%

net localgroup # 枚举本地用户组
Get-LocalGroup | ft Name

whoami /priv # 查看用户权限
whoami /groups

net localgroup administrators # 查看用户组详细信息
Get-LocalGroupMember Administrators | ft Name, PrincipalSource
Get-LocalGroupMember Administrateurs | ft Name, PrincipalSource

nltest /DCLIST:DomainName # 枚举域控用户
nltest /DCNAME:DomainName
nltest /DSGETDC:DomainName

(2) 图形界面查看

a. CMD输入compmgmt.msc(计算机管理) -> 本地用户和组 -> 用户 //可查看隐藏账户

b. 命令行输入lusrmgr.msc,查看用户信息

(3) wmic 命令

> wmic useraccount get name,SID //可查看隐藏账户

3. 启动项

病毒后门等常用启动项来实现持久化驻留,检查服务器是否有异常的启动项

排查方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
(1) 任务管理器查看

命令行中输入taskmgr命令,任务管理器 -> 启动

(2) 通过注册表查看

单击【开始】>【运行】,输入regedit,打开注册表,查看开机启动项是否正常,关注以下注册表项

a. HKEY_CURRENT_USER\software\micorsoft\windows\currentversion\run

b. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

c. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Runonce

检查右侧是否有启动异常的项目

(3) 通过组策略查看

命令行运行gpedit.msc,计算机配置 -> Windows设置 —> 脚本(启动/关机)

4. 计划任务

命令查看

1
2
3
4
5
6
7
schtasks /query /fo LIST 2>nul | findstr TaskName

schtasks /query /fo LIST /v > schtasks.txt; cat schtask.txt | grep "SYSTEM\|Task To Run" | grep -B 1 SYSTEM

Get-ScheduledTask | where {$_.TaskPath -notlike "\Microsoft*"} | ft TaskName,TaskPath,State

Get-ScheduledTask //powershell查看

界面查看

1
2
3
# 计算机管理

CMD输入compmgmt.msc【计算机管理】 > 【系统工具】> 【任务计划程序】> 【任务计划程序库】

5. 自启功服务

查看命令

1
2
3
4
5
6
wmic startup get caption,command
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\R
reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Run
reg query HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce
dir "C:\Documents and Settings\All Users\Start Menu\Programs\Startup"
dir "C:\Documents and Settings\%username%\Start Menu\Programs\Startup"

检查方法: 单击【开始】>【运行】,输入services.msc,查看服务状态和启动类型,检查是否有异常服务

0x02 进程排查

1. 排查思路

1
2
3
> netstat -ano | findstr "ESTABLISHED" //查看目前的网络连接,定位可疑的ESTABLISHED

> tasklist | findstr "PID" //根据netstat定位出的pid,再通过tasklist命令排查进程

2. 常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
(1) tasklist命令

a. 查看端口对应的PID: netstat -ano | findstr "port"

b. 查看进程对应的PID:tasklist | findstr "PID"

c. 显示进程与服务对应关系:tasklist /svc

d. 查看加载DLL的进程:tasklist /m | more

e. 查看特定DLL的调用情况:tasklist /m DLL名称

(2) wmic命令

a. wmic process list full /format:csv //以csv格式显示进程所有信息

b. wmic process get name,parentprocessid,processid,commandline /format:csv //以csv格式显示进程特定列

c. wmic process where process=[pid] get parentprocessid //以pid的值为条件获取其父进程pid

d. wmic process where processid=[pid] delete //删除指定pid的进程

e. wmic process where name="trojan.exe" call terminate //删除指定进程名的进程

(3) PowerShell

PowerShell可查看存在守护进程的进程,查询时调用Wmi对象

> Get-WmiObject Win32_Process | select Name,ProcessId,ParentProcessId,Path,CommandLine //查看进程名、进程id,父进程id、进程路径、进程命令行等信息

3. system服务进程

1
2
3
4
5
net start
wmic service list brief
tasklist /SVC

tasklist /v /fi "username eq system"

0x03 网络排查

1. 网卡信息

1
2
3
4
5
ipconfig /all   # 查看网络网卡、ip、DNS信息

Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address

Get-DnsClientServerAddress -AddressFamily IPv4 | ft

2. 路由表信息

1
2
3
route print     

Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric,ifIndex

3. ARP信息

1
2
3
arp -A

Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,LinkLayerAddress,State

4. 连接信息

1
netstat -ano # 查看当前连接

5. 网络共享信息

1
2
net share
powershell Find-DomainShare -ComputerDomain domain.local

6. SNMP配置信息

1
2
3
reg query HKLM\SYSTEM\CurrentControlSet\Services\SNMP /s  

Get-ChildItem -path HKLM:\SYSTEM\CurrentControlSet\Services\SNMP -Recurse

0x04 文件排查

1. 敏感目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(1) 各个盘下temp目录

恶意程序运行时投放出的文件(释放子体)多存放于路径相对固定的临时目录

(2) 用户Recent文件

Recent文件主要存储最近运行文件的快捷方式,可分析最近运行的文件来排查可疑文件

【开始】>【运行】,输入【%UserProfile%\Recent】,分析Recent文件

(3) 预读取文件夹

Prefetch为预读取文件夹,用于存放系统已访问过的文件预读取信息,扩展名为pf

【开始】>【运行】,输入【%SystemRoot%\Prefetch\】,排查Prefetch文件夹

(4) Amcache.hve文件

可查询应用程序的执行路径、上次执行的时间以及SHA1值

【开始】>【运行】,输入【%SystemRoot%\appcompat\Programs\】,排查Amcache.hve文件夹

2. 时间点查找

入侵事件发生后,需优先确认时间发生的时间点,排查时间点前后的文件变动情况

排查技巧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
(1) forfiles命令

FORFILES [/P pathname] [/M searchmask] [/S]
[/C command] [/D [+ | -] {yyyy/MM/dd | dd}]

描述:
选择一个文件(或一组文件)并在那个文件上
执行一个命令。这有助于批处理作业。

参数列表:
/P pathname 表示开始搜索的路径。默认文件夹是当前工作的
目录 (.)。


/M searchmask 根据搜索掩码搜索文件。默认搜索掩码是 '*'。

/S 指导 forfiles 递归到子目录。像 "DIR /S"。


/C command 表示为每个文件执行的命令。命令字符串应该
用双引号括起来。


默认命令是 "cmd /c echo @file"。下列变量
可以用在命令字符串中:

@file - 返回文件名。
@fname - 返回不带扩展名的文件名。

@ext - 只返回文件的扩展名。

@path - 返回文件的完整路径。
@relpath - 返回文件的相对路径。

@isdir - 如果文件类型是目录,返回 "TRUE";
如果是文件,返回 "FALSE"。
@fsize - 以字节为单位返回文件大小。

@fdate - 返回文件上一次修改的日期。

@ftime - 返回文件上一次修改的时间。


要在命令行包括特殊字符,字符请以 0xHH
形式使用十六进制代码(例如,0x09 为 tab)。

内部 CMD.exe 命令前面应以 "cmd /c" 开始。


/D date 选择文件,其上一次修改日期大于或等于 (+),
或者小于或等于 (-) 用 "yyyy/MM/dd" 格式指定的日期;

或选择文件,其上一次修改日期大于或等于 (+)
当前日期加 "dd" 天,或者小于或等于 (-) 当前

日期减 "dd" 天。有效的 "dd" 天数可以是
0 - 32768 范围内的任何数字。如果没有指定,

"+" 被当作默认符号。

/? 显示此帮助消息。

0x05 日志分析

1. 日志简介

Windows主要有以下三类日志文件:应用程序日志、系统日志和安全日志

系统日志

1
2
3
记录操作系统组件产生的事件,主要包括驱动程序、系统组件和应用软件的崩溃以及数据丢失错误等

默认位置:%SystemRoot%\System32\Winevt\Logs\System.evtx

安全日志

1
2
3
记录系统的安全审计事件,包含各种类型的登录日志、对象访问日志、进程追踪日志、特权使用、帐号管理、策略变更、系统事件。默认设置下,安全性日志是关闭的,管理员可以使用组策略来启动安全性日志,或者在注册表中设置审核策略

默认位置:%SystemRoot%\System32\Winevt\Logs\Security.evtx

应用日志

1
2
3
包含由应用程序或系统程序记录的事件,主要记录程序运行方面的事件,例如数据库程序可以在应用程序日志中记录文件错误。如果某个应用程序出现崩溃情况,可以从程序事件日志中找到相应的记录

默认位置:%SystemRoot%\System32\Winevt\Logs\Application.evtx

2. 日志事件ID

对于Windows事件日志分析,不同的EVENT ID代表了不同的意义,摘录一些常见的安全事件的说明

事件ID 说明
4624 登录成功
4625 登录失败
4634 注销成功
4647 用户启动的注销
4672 使用超级用户(如管理员)进行登录
4720 创建用户

每个成功登录的事件都会标记一个登录类型,不同登录类型代表不同的方式:

登录类型 描述 说明
2 交互式登录(Interactive) 用户在本地进行登录
3 网络(Network) 最常见的情况就是连接到共享文件夹或共享打印机时
4 批处理(Batch) 通常表明某计划任务启动
5 服务(Service) 每种服务都被配置在某个特定的用户账号下运行
7 解锁(Unlock) 屏保解锁
8 网络明文(NetworkCleartext) 登录的密码在网络上是通过明文传输的,如FTP
9 新凭证(NewCredentials) 使用带/Netonly参数的RUNAS命令运行一个程序
10 远程交互,(RemoteInteractive) 通过终端服务、远程桌面或远程协助访问计算机
11 缓存交互(CachedInteractive) 以一个域用户登录而又没有域控制器可用

3. 日志分析技巧

事件查看器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
(1) 利用eventlog事件来查看系统账号登录情况

a. 在"开始"菜单上,依次指向"所有程序"、"管理工具",然后单击"事件查看器";

b. 在事件查看器中,单击"安全",查看安全日志;

c. 在安全日志右侧操作中,点击"筛选当前日志",输入事件ID进行筛选。

4624 -- 登录成功
4625 -- 登录失败
4634 -- 注销成功 4647 -- 用户启动的注销
4672 -- 使用超级用户(如管理员)进行登录

(2) 利用eventlog事件来查看计算机开关机的记录

a. 在"开始"菜单上,依次指向"所有程序"、"管理工具",然后单击"事件查看器";

b. 在事件查看器中,单击"系统",查看系统日志;

c. 在系统日志右侧操作中,点击"筛选当前日志",输入事件ID进行筛选

6006 -- 服务已启动,开机
6005 -- 服务已停止,关机
6009 -- 按ctrl、alt、delete键(非正常)关机

Log Parser

Log Parser是微软公司出品的日志分析工具,功能强大,使用简单,可以分析基于文本的日志文件、XML 文件、CSV(逗号分隔符)文件,以及操作系统的事件日志、注册表、文件系统、Active Directory

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
(1) 基本查询语法

Logparser.exe -i:EVT -o:DATAGRID "SELECT * FROM c:\xx.evtx"

(2) 查询登录成功的事件

a. 登录成功的所有事件
LogParser.exe -i:EVT -o:DATAGRID "SELECT * FROM c:\Security.evtx where EventID=4624"

b. 指定登录时间范围的事件
LogParser.exe -i:EVT -o:DATAGRID "SELECT * FROM c:\Security.evtx where TimeGenerated>'2018-06-19 23:32:11' and TimeGenerated<'2018-06-20 23:34:00' and EventID=4624"

c. 提取登录成功的用户名和IP
LogParser.exe -i:EVT -o:DATAGRID "SELECT EXTRACT_TOKEN(Message,13,' ') as EventType,TimeGenerated as LoginTime,EXTRACT_TOKEN(Strings,5,'|') as Username,EXTRACT_TOKEN(Message,38,' ') as Loginip FROM c:\Security.evtx where EventID=4624"

(3) 查询登录失败的事件

a. 登录失败的所有事件
LogParser.exe -i:EVT -o:DATAGRID "SELECT * FROM c:\Security.evtx where EventID=4625"

b. 提取登录失败用户名进行聚合统计
LogParser.exe -i:EVT "SELECT EXTRACT_TOKEN(Message,13,' ') as EventType,EXTRACT_TOKEN(Message,19,' ') as user,count(EXTRACT_TOKEN(Message,19,' ')) as Times,EXTRACT_TOKEN(Message,39,' ') as Loginip FROM c:\Security.evtx where EventID=4625 GROUP BY Message"

(4) 系统历史开关机记录

LogParser.exe -i:EVT -o:DATAGRID "SELECT TimeGenerated,EventID,Message FROM c:\System.evtx where EventID=6005 or EventID=6006"

4. 历史命令查看

1
2
3
4
5
6
7
8
9
type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt

type C:\Users\swissky\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt

type $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt

cat (Get-PSReadlineOption).HistorySavePath

cat (Get-PSReadlineOption).HistorySavePath | sls passw

0x05 工具集合

1. 工具箱

Sysinternals Suite : 微软发布的一套强大的免费工具程序集,共包括将近70个windows工具

  • AccessChk 了解特定用户或用户组对文件、目录、注册表项和Windows服务等资源具有哪种访问权限

  • AccessEnum 显示用户可以用何种访问权限访问您系统中的目录、文件和注册表项,使用此工具可查找权限漏洞

  • AdExplorer Active Directory Explorer 是一个高级的 Active Directory (AD) 查看器和编辑器

  • AutoRuns windows启动程序管理工具,可显示系统启动或登录时会自动启动的项目和配置,包括扩展和加载各种Windows进程

  • Handle 可显示哪些进程打开了哪些文件,以及更多其他信息

  • ListDLLs 列出所有当前加载的 DLL,包括加载位置及其版本号,2.0版将打印已加载模块的完整路径名

  • LogonSessions 列出系统中的活动登录会话

  • Process Explorer 进程查看器,查看进程的详细信息包括CPU,GPU,IO,线程,句柄,内存

  • Process Monitor 一个高级的windows监视器,实时显示文件系统,注册表,网络活动,进程或线程活动

  • PsTools PsTools 套件,可列出本地或远程计算机上运行的进程、远程运行进程、重新启动计算机、转储事件日志,以及执行其他任务

  • RegDelNull 扫描并删除包含嵌入空字符的注册表项,标准注册表编辑工具不能删除这种注册表项

  • RootkitRevealer 扫描系统以找出基于Rootkit的恶意软件

  • ShareEnum 扫描网络上的文件共享并查看其安全设置,以关闭安全漏洞

  • Strings 在二进制映像中搜索 ANSI 和 UNICODE 字符串

  • TcpView 显示TCP和UDP端点的详细清单,包括进程名、远程地址和TCP连接的状态

2. 监控分析

  • 火绒剑 火绒推出的一款专业的内核级监控分析工具

3. 日志分析

  • Log Parser 微软推出的日志分析工具,可分析多种文件类型的系统事件日志、注册表、文件系统、Active Directory

  • Event Log Explorer Windows日志分析工具,可用于查看,监视和分析跟事件记录

4. 病毒查杀

5. Webshell查杀

6. 勒索软件解密