![网络安全应急响应技术实战指南](https://wfqqreader-1252317822.image.myqcloud.com/cover/77/35011077/b_35011077.jpg)
2.2 进程排查
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在面向线程设计的计算机结构中,进程是线程的容器。无论是在Windows系统还是Linux系统中,主机在感染恶意程序后,恶意程序都会启动相应的进程,来完成相关的恶意操作,有的恶意进程为了能够不被查杀,还会启动相应的守护进程对恶意进程进行守护。
1.Windows系统
对于Windows系统中的进程排查,主要是找到恶意进程的PID、程序路径,有时还需要找到PPID(PID的父进程)及程序加载的DLL。对于进程的排查,一般有如下几种方法。
1)通过【任务管理器】查看
比较直观的方法是通过【任务管理器】查看可疑程序。但是需要在打开【任务管理器】窗口后,添加【命令行】和【映射路径名称】等进程页列,如图2.2.1所示,以方便获取更多进程信息。
![img](https://epubservercos.yuewen.com/CFA7D6/18685355001452006/epubprivate/OEBPS/Images/txt002_39.jpg?sign=1739525974-zrUzLNLWrsSXSBzq2p0rw0nelcduJX6M-0-ef2d0f2401ac43c33f5a55ca39b3979a)
图2.2.1 添加进程页列
在排查进程时,可重点关注进程的映像路径名称及命令行是否可疑,从而进一步进行排查。如图2.2.2所示,程序iexplore.exe为可疑进程。
![img](https://epubservercos.yuewen.com/CFA7D6/18685355001452006/epubprivate/OEBPS/Images/txt002_40.jpg?sign=1739525974-0Jz6uDmgFwo6xBgvB0rFmH59oUJYwjt0-0-b118f01449f2cc8f2fd32b0cc9429a39)
图2.2.2 可疑进程排查
2)使用【tasklist】命令进行排查
在命令行中输入【tasklist】命令,可显示运行在计算机中的所有进程,可查看进程的映像名称、PID、会话名等信息,如图2.2.3所示。
![img](https://epubservercos.yuewen.com/CFA7D6/18685355001452006/epubprivate/OEBPS/Images/txt002_41.jpg?sign=1739525974-poFDeXK8Y2RiMPvwWWLXGQZ3LnF3Y9E9-0-a333f113850c6dad53f39969fb547a68)
图2.2.3 使用【tasklist】命令进行排查
使用【tasklist】命令并添加特定参数,还可以查看每个进程提供的服务,如添加svc参数,即输入【tasklist/svc】命令,可以显示每个进程和服务的对应情况,如图2.2.4所示。
![img](https://epubservercos.yuewen.com/CFA7D6/18685355001452006/epubprivate/OEBPS/Images/txt002_42.jpg?sign=1739525974-7Orqb8olq3Y5c8QOuNhXM32Zjztezxsa-0-b4c72a395870e7e896d242a22b265cbd)
图2.2.4 输入【tasklist/svc】命令
对于某些加载DLL的恶意进程,可以通过输入【tasklist/m】命令进行查询,如图2.2.5所示。
![img](https://epubservercos.yuewen.com/CFA7D6/18685355001452006/epubprivate/OEBPS/Images/txt002_43.jpg?sign=1739525974-TDjo5Pa39ATG0g5lxOE7zPDIjVFKjZ5k-0-bc014e4e972c991e5ac60225cd39075a)
图2.2.5 输入【tasklist/m】命令
要想查询特定DLL的调用情况,可以使用命令【tasklist/m 名称】。如图2.2.6所示,输入【tasklist/m ntdll.dll】命令,可查询调用ntdll.dll模块的进程。
![img](https://epubservercos.yuewen.com/CFA7D6/18685355001452006/epubprivate/OEBPS/Images/txt002_44.jpg?sign=1739525974-Bb4eyp9yyxaovQGyVbCKJdcNqWjdF7ZY-0-47f3e5bfa9bb81769ba4e8b523ef4c71)
图2.2.6 输入【tasklist/m ntdll.dll】命令
同时,【tasklist】命令还有过滤器的功能,可以使用【fi】命令进行条件筛选,结合关系运算符【eq】(等于)、【ne】(不等于)、【gt】(大于)、【lt】(小于)、【ge】(大于等于)、【le】(小于等于)等命令进行有效过滤,如图2.2.7所示。
![img](https://epubservercos.yuewen.com/CFA7D6/18685355001452006/epubprivate/OEBPS/Images/txt002_45.jpg?sign=1739525974-UCtOJn162NaRHgYJtmQchJjFRC00tmDZ-0-e72ecc2e321e76cfc673e633118448a6)
图2.2.7 过滤
例如,查看PID为992的进程,可使用命令【tasklist/svc/fi "PID eq 992"】查看,如图2.2.8所示。
![img](https://epubservercos.yuewen.com/CFA7D6/18685355001452006/epubprivate/OEBPS/Images/txt002_46.jpg?sign=1739525974-OXqW1J2j0mJQdQLlDQOsYfKEQptMVv1e-0-9b4bc6cd3a142922c53db22ae010b93f)
图2.2.8 查看PID为992的进程
3)使用【netstat】命令进行排查
在命令行中输入【netstat】命令,可显示网络连接的信息,包括活动的TCP连接、路由器和网络接口信息,是一个监控TCP/IP网络的工具。相关参数如下。
-a:显示所有连接和侦听端口。
-b:显示在创建每个连接或侦听端口时涉及的可执行程序。
-e:显示以太网统计信息。可以与-s结合使用。
-f:显示外部地址的完全限定域名(FQDN)。
-n:以数字形式显示地址和端口号。
-o:显示拥有的与每个连接关联的进程 ID。
-p proto:显示proto指定的协议的连接。
-q:显示所有连接、侦听端口和绑定的非侦听TCP端口。绑定的非侦听端口不一定与活动连接相关联。
-r:显示路由表。
-s:显示每个协议的统计信息。默认情况下,显示 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的统计信息。
-t:显示当前连接卸载状态。
-x:显示NetworkDirect连接、侦听器和共享终结点。
-y:显示所有连接的TCP连接模板。无法与其他选项结合使用。
interval:重新显示选定统计信息,每次显示之间暂停时间间隔(以秒计)。
常见的网络状态说明如下。
LISTENING:侦听状态。
ESTABLISHED:建立连接。
CLOSE_WAIT:对方主动关闭连接或网络异常导致连接中断。
在排查过程中,一般会使用【netstat-ano|findstr "ESTABLISHED"】命令查看目前的网络连接,定位可疑的ESTABLISHED。如图2.29所示,在排查中发现PID为2856的进程有大量网络连接。
![img](https://epubservercos.yuewen.com/CFA7D6/18685355001452006/epubprivate/OEBPS/Images/txt002_47.jpg?sign=1739525974-LvkTwJxyDcN2AwkDJdY1YJHJCrUngQDX-0-efd729bd19a0541b66c81e628b1026be)
图2.2.9 PID为2856的进程有大量网络连接
通过【netstat】命令定位出PID,再通过【tasklist】命令进行程序定位,发现PID为2856的进程有大量网络连接后,使用【tasklist|find "2856"】命令可查看具体的程序,如图2.2.10所示。
![img](https://epubservercos.yuewen.com/CFA7D6/18685355001452006/epubprivate/OEBPS/Images/txt002_48.jpg?sign=1739525974-qtqXjYNDzd6hMVSXQmtSHYYHSp5Aj7cB-0-4fd02739f7a310373e84dbbb364eb88a)
图2.2.10 查看具体的程序
也可以通过【netstat-anb】命令(需要管理员权限)快速定位到端口对应的程序,如图2.2.11所示。
![img](https://epubservercos.yuewen.com/CFA7D6/18685355001452006/epubprivate/OEBPS/Images/txt002_49.jpg?sign=1739525974-4HBddk3xfH25qOGnfoQMxHOtiXJZBHXh-0-b44d9e470d9209fcd729c13a1d6f1490)
图2.2.11 快速定位到端口对应的程序
4)使用PowerShell进行排查
有时对于有守护进程的进程,还要确认子父进程之间的关系,可以使用PowerShell进行查看,一般PowerShell在查询时会调用Wmi对象。【Get-WmiObject Win32_Process|select Name,ProcessId,ParentProcessId,Path】命令中Get-WmiObject Win32_Process表示获取进程的所有信息,select Name,ProcessId,ParentProcessId,Path表示选择Name,ProcessId,ParentProcessId,Path 4个字段,整个命令表示显示所有进程信息中的Name,ProcessId,ParentProcessId,Path 4个字段的内容。执行后的结果如图2.2.12所示。
5)使用【wmic】命令进行查询
(1)在命令行中使用【wmic process】命令,可以对进程情况进行查询。 但使用【wmic process list full/format:csv】命令,即以csv格式列出进程的所有信息,此时命令列出的信息过多,不便于阅读。因此,可以使用【wmic process get name,parentprocessid,processid/format:csv】命令,以csv格式来显示进程的名称、父进程ID、进程ID,如图2.2.13所示。
![img](https://epubservercos.yuewen.com/CFA7D6/18685355001452006/epubprivate/OEBPS/Images/txt002_50.jpg?sign=1739525974-lYcpqz6XPcNZE1tcLrohEkib5RKUU1cu-0-15a9c0406315c324971c2676f8f22939)
图2.2.12 执行后的结果
![img](https://epubservercos.yuewen.com/CFA7D6/18685355001452006/epubprivate/OEBPS/Images/txt002_51.jpg?sign=1739525974-Q86wt0gZgvycQNRgIQO5OHNnB3OI8f7T-0-8a6b62a72625782bd82fef977596f849)
图2.2.13 显示所有进程的部分信息
其他类似命令如下。
【wmic process get ExecutablePath,processid/format:csv】命令表示以csv格式来显示进程路径、进程ID信息。
【wmic process get name,ExecutablePath,processid,parentprocessid/format:csv|findstr/I "appdata"】命令表示以csv格式来显示进程的名称、进程路径、进程ID、父进程ID信息。
(2)同时【wmic】命令还可以结合条件对进程进行筛选。
【wmic process where processid=[PID] get parentprocessid】命令表示以PID的值作为条件来获取其父进程的PID情况。如图2.2.14所示,是获取PID的值为1888的进程的父进程PID的值,获取到的父进程PID的值为808。
![img](https://epubservercos.yuewen.com/CFA7D6/18685355001452006/epubprivate/OEBPS/Images/txt002_52.jpg?sign=1739525974-ZqMSH9NBsz4tHt0yUhbvVD7oTtPM85ps-0-dff08f562126f62febd6d272e6be4a9f)
图2.2.14 获取指定进程的父进程PID的值
其他类似命令如下。
【wmic process where processid=[PID] get commandline】命令表示以PID的值作为条件来获取其命令行。
(3)在使用【wmic process】命令查出恶意进程后,会结束恶意进程,一般使用如下命令结束恶意进程。
【wmic process where name="malware.exe" call terminate】命令是指删除"malware.exe"恶意程序的进程。
【wmic process where processid=[PID] delete】命令是指删除PID为某值的进程。
2.Linux系统
在命令行中输入【netstat】网络连接命令,可分析可疑端口、可疑IP地址、可疑PID及程序进程。如图2.2.15所示,PID为2963的进程存在恶意外链情况。
根据PID的值,利用【ls-alt/proc/PID】命令,可查看其对应的可执行程序。如图2.2.16所示,使用【ls-alt/proc/2963】命令,可查看PID为2963的进程的可执行程序。
![img](https://epubservercos.yuewen.com/CFA7D6/18685355001452006/epubprivate/OEBPS/Images/txt002_53.jpg?sign=1739525974-HMUQQrAmtKlscw3CLYvrfpyYvO7k3W0P-0-2721271b87e62a35a05609d9769889f4)
图2.2.15 PID为2963的进程存在恶意外链情况
![img](https://epubservercos.yuewen.com/CFA7D6/18685355001452006/epubprivate/OEBPS/Images/txt002_54.jpg?sign=1739525974-NLUkjMKIKCaOFws9FNNutF8JpQgdbJ5C-0-b36a1e3747c82bc9f063054711e6c380)
图2.2.16 查看对应可执行程序
也可以利用【lsof-p PID】命令,查看进程所打开的文件。如图2.2.17所示,使用【lsof-p 2963】命令,可查看PID为2963的进程所打开的文件,发现文件mbrn为可疑文件。
![img](https://epubservercos.yuewen.com/CFA7D6/18685355001452006/epubprivate/OEBPS/Images/txt002_55.jpg?sign=1739525974-TIhB4IxXwvAFJFOblpF3f1jCIaZFqitx-0-ccff97a3998bcb3b4d79e787fe530d83)
图2.2.17 查看PID为2963的进程所打开的文件
如果是恶意进程,可以使用【kill-9 PID】命令结束进程,如【kill-9 2535】命令表示结束PID为2535的进程。然后使用【rm-rf filename】命令可删除木马,如要删除mbrn文件,则可使用命令【rm-rf mbrn】。如果root用户都无法删除相关文件,那么很可能是因为该文件被加上了i属性。使用【lsatter filename】命令,可查看文件属性,然后使用【chattr-i filename】命令,可移除i属性,进而删除文件。也有的进程因为存在守护进程而无法删除,我们可以先把进程挂起,查杀守护进程后,再返回将进程删除。
有些攻击者会将进程隐藏,以躲避排查,因此查看隐藏进程同样重要。按照顺序执行【ps-ef|awk '{print}'|sort-n|uniq >1】、【ls/proc|sort-n |uniq >2】和【diff 1 2】命令,可以查看隐藏进程,如图2.2.18所示。
![img](https://epubservercos.yuewen.com/CFA7D6/18685355001452006/epubprivate/OEBPS/Images/txt002_56.jpg?sign=1739525974-hDKP815SPyXLc4ET1JRXCQ0ePygA7DBO-0-3f45131807558fdf98c5d301c212b987)
图2.2.18 查看隐藏进程
对于挖矿进程的排查,可使用【top】命令查看相关资源占用率较高的进程,之后进行定位。如图2.2.19所示,发现PID为29245的进程的CPU占用率较高,因此可进行重点排查。
![img](https://epubservercos.yuewen.com/CFA7D6/18685355001452006/epubprivate/OEBPS/Images/txt002_57.jpg?sign=1739525974-sinhRWJYhtQZ4zssNq1fKJDBLH5rX6lV-0-d6f901d4c8eb7ea229638da31c4d3c82)
图2.2.19 查看相关资源占用率较高的进程