我非常赞同曾经看到的一句话,一旦你能够确定本次安全事件的类型,猜测出攻击者或者恶意代码的攻击思路,然后去验证排查这些猜想,就会加速你的分析过程。在做应急溯源的过程中,很多时候通过一两点线索,拼凑攻击者链条的画像,用下文提到的排查方法,去补充证据来证明自己的猜想。(正如打游戏要预判敌人走位,应急也要预判攻击者的行为)当然受限于自己知识的局限性还是很可能误判的,在应急中误判又是特别致命的,可能一个误操作就会为客户带来不可估量的损失。所以我个人认为现场溯源应急至少要3个人以上,互相弥补吧。

系统基本信息

系统信息概述

1
systeminfo

详细信息

1
msinfo32

显示本地计算机硬件资源、组件、软件环境;正在运行的任务,服务、驱动、加载模块、启动程序

image-20211119110244574

  • 正在运行的任务
  • 服务
  • 驱动程序
  • 加载的模块
  • 启动程序

系统账号(用户信息)

预判攻击者利用账号的可能性:

  1. 直接建立新账号(可能和系统常用名类似)
  2. 激活系统中默认账号(这个账号存在很久不经常使用)
  3. 创建隐藏账号(账户名后$

命令行

1
net user

查看具体账号的详细信息,username为具体用户名

1
net user username

图形界面

1
lusrmgr.msc

win+r –> compmgmt.msc(计算机管理窗口) –> 本地用户和组 –> 用户

注册表

win+r –>regedit(注册表编辑器) –> HKEY_LOCAL_MACHINE –> SAM

image-20211119114330813

启动继承,方框✔;F5刷新后查看用户信息。

image-20211119114848417

克隆账号

image-20211119114530559

计算机\HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000001F4

F值000001F4相同即为克隆账户

wmic

1
wmic useraccount get name,sid

启动项

系统配置

1
msconfig

在系统配置对话框中选择启动选项卡

注册表

注册表是操作是操作系统中重要的数据库,很多病毒通过注册表来实现持久化驻留。

注册表含义:

(1)HKEY_CLASSES_ROOT(HKCR) 确保资源管理器中执行时打开正确的程序

(2)HKEY_CURRENT_USER(HKCU) 当前登录系统的用户配置

(3)HKEY_LOCAL_MACHINE(HKLM) 计算机硬件特定信息

(4)HKEY_USERS(HKU) 所有用户配置文件的配置信息

(5)HKEY_CURRENT_CONFIG(HCU) 存储有关系统当前配置信息

Autoruns

https://www.sysgeek.cn/autoruns/

任务计划

cmd下执行命令compmgmt.msc(计算机管理窗口) –> 任务计划程序

powershell执行Get-ScheduledTask返回路径,名称,状态

命令行下执行schtasks

1
2
3
4
文件夹: \Microsoft\XblGameSave
任务名 下次运行时间 模式
======================================== ====================== ===============
XblGameSaveTask N/A 就绪

获取任务计划必须是本地Administrators组的

进程排查

主要目的:找到恶意进程的PID、程序路径、PPID、程序加载的DLL。

taskmgr 添加命令行和映射路径名称

tasklist

在cmd执行tasklist映像名称,PID 会话名,会话,内存使用

tasklist /svc 映像名称–PID–服务 #进程和服务的对应关系

tasklist /m | more 映像名称–PID–模块 #加载DLL的恶意进程

tasklist /m ntdll.dll 查看指定模块的进程(如ntdll.dll)

fi过滤器

eq 等于

ne 不等于

gt 大于

lt 小于

ge 大于等于

le 小于等于

tasklist /svc /fi 'PID eq 7440' #PID为7440的进程

netstat 网络信息查询

1.通过netstat定位有网络连接的PID

1
netstat -ano | findstr "ESTABLISHED"

LISTENING:监听状态

ESTABLISHED:建立连接

CLOSE_WAIT:对方主动关闭连接,或网络异常导致连接中断

2.通过tasklist对PID程序定位

1
2
3
4
5
6
7
tasklist|findstr "12308"
chrome.exe 12308 Console 1 31,252 K
tasklist /fi "PID eq 12308"

映像名称 PID 会话名 会话# 内存使用
========================= ======== ================ =========== ============
chrome.exe 12308 Console 1 30,764 K

netstat -anb #快速定位端口对应程序(需要管理员权限)

或者使用TCPView

image-20211122145838245

powershell排查确认子父进程之间的关系

1
Get-WmiObject Win32_Process | select name,processid,parentprocessid,path
1
Get-WmiObject Win32_Process

获取进程的所有信息

wmic process

1
2
3
4
5
6
7
8
9
wmic process get name,processid,parentprocessid /format:csv

wmic process get name,ExecutablePath,processid /format:csv

wmic process get name,ExecutablePath,processid,parentprocessid /format:csv

wmic process get name,ExecutablePath,processid,parentprocessid /format:csv|findstr /I "SearchFilterHost"

wmic process where processid=[PID] get parentprocessid

结束恶意进程

1
2
3
wmic process where processid=[PID] delete

wmic process where name="xxx.exe" call terminate

procexp

重点检查没有厂商名字、没有 签名验证信息、没有描述信息、CPU 或内存资源占用长时间过高的进程的进程。检查可疑进程的属主、路径是否合法。

进程颜色

  • 浅蓝色: 和Process Explorer属于同一个用户的进程。
  • 粉红色: 服务进程,通常会包含一个或多个Windows服务。
  • 黄色: .NET进程。
  • 深灰色: 挂起的进程。
  • 紫色: 标识包含压缩或者加密的可执行代码的进程。一些病毒软件经常会利用这种方式绕过杀毒软件。
  • 红色: 刚刚退出的进程。

显示选项

1.显示进程当前的权限,是系统用户权限还是网络管理员权限还是普通管理员权限(User Name)
2.显示进程的文件路径(Image Path)
3.显示进程是64位进程还是32位的(Image Type)
4.显示进程当前所在的Session ID(session)
5.显示进程命令行参数(Command Line)

faefae

参考链接

gaioengmeqmn

显示当前进程的GDI对象个数,内核对象个数,线程个数。

GDI是Graphics Device Interface的缩写,含义是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。
在Windows操作系统下,绝大多数具备图形界面的应用程序都离不开GDI,我们利用GDI所提供的众多函数就可以方便的在屏幕、打印机及其它输出设备上输出图形,文本等操作。

显示当前进程所加载的DLL

选择View - Lower Pane View - DLLs

adgagerage

通过这种方式可以观察,我们的进程是否被其他程序注入DLL,了解当前进程使用了那些编程技术。

ahrgrgaregra

我们可以修改DLL的选项卡让其显示更多的内容,比如DLL基地址,DLL内存相关信息等

在这里插入图片描述

显示当前进程所占用的系统资源句柄

在这里插入图片描述

我们查看当前进程所占用的资源句柄表,分析进程的逻辑:如图下图SunloginClient.exe进程创建了一个Event事件,并且占用一个Log文件,可以检查自己的程序是否有内核句柄泄露。

在这里插入图片描述

操控进程以及显示进程的内部信息

操控进程,杀掉进程、重启进程、挂起进程等

在这里插入图片描述

显示进程的内部信息

在这里插入图片描述

查看线程信息(还可以查当前进程环境变量、进程网络连接情况等)

在这里插入图片描述

搜索功能

有时候我们删除某个文件或文件夹的时候,会提示被某个服务占用,无法删除,这个时候,就可以使用搜索功能知道它被谁占用了,比如shell.20200608-082337.log文件被SunloginClient.exe占用了

在这里插入图片描述

DLL搜索

当你在磁盘上发现一个恶意的DLL,并且想知道是否有运行进程使用了这个DLL时,可以使用Find => find Handle on DLL 功能。

一些常见的DLL:

Ntdll.dll:如果一个可执行文件载入了这个文件,这意味着作者企图使用那些不是正常提供给windows程序使用的函数。如隐藏功能和操作进程等任务会使用这个接口。
Wsock32.dllWs32.dll:这个两个是联网DLL,访问其中任一个DLL的程序非常可能连接网络,或是执行网络相关的任务。
Wininet.dll:这个DLL包含了更高层次的网络函数,实现了如FTP、HTTP和NTP等协议。

服务排查

win+r services.msc

文件痕迹排查

三个方向:

  • 敏感路径

  • 时间点

  • 文件特征–代码关键字,关键函数,文件权限

敏感目录

1.temp(tmp)相关目录

因为临时路径相对统一

1
C:\Windows\Temp

2.排查下载记录,浏览器访问记录

3.查看用户Recent文件

Recent存储最近运行文件的快捷方式

存储位置如下

1
2
C:\Documents and Settings\Administrator\Recent
C:\Documents and Settings\Default User\Recent

先要开启隐藏文件夹

image-20211122155627701

更改所有者

image-20211122155724944

4.预读取文件查看

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

运行对话框输入%SystemRoot%\Prefetch打开C:\Windows\Prefetch

查看工具 winprefetchview

https://www.nirsoft.net/utils/win_prefetch_view.html

Amcache.hve,查询应用程序的执行路径,上次执行时间以及SHA1值

win+r –> %SystemRoot%\appcompat\Programs 打开打开Amcache.hev文件夹。

解析方式

https://github.com/williballenthin/python-registry/blob/master/samples/amcache.py

时间点

forfiles

特殊时间内新增的文件

1
forfiles /m *exe /d +2021/5/15 /s /p c:\ /c "cmd /c echo @path @fdate @ftime" 2> null

特殊时间内修改的文件

image-20211122160450094

判断创建时间,修改时间,访问时间是否存在逻辑问题

文件特征

webshell检测

D盾

HwsKill

河马查杀

日志排查

windows 日志

威胁情报

powershell获取hash

Get-FileHash 文件路径 -Algorithm 校验的Hash值类型| Format-List

如果需要校验的文件路径比较复杂,例如路径中包含空格、括号等特殊符号,则需要在路径前后加上英文双引号。

Windows PowerShell命令可以校验的Hash值类型包括:SHA1、SHA256、SHA384、SHA512、MACTripleDES、MD5、RIPEMD160,暂不支持校验CRC32值。

如果不带-Algorithm参数,也就是不指明验证的Hash值类型,那么默认验证的就是SHA256值

1
2
3
4
5
Get-FileHash C:\Windows\notepad.exe -Algorithm MD5| Format-List

Get-FileHash C:\Windows\notepad.exe -Algorithm SHA1| Format-List

Get-FileHash C:\Windows\notepad.exe | Format-List

综合工具

PcHunter

火绒剑