![网络安全应急响应技术实战指南](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=1739298315-OzZCdp9zgwB05Le5tzd3beybiEOmE7SA-0-df01448955305c3c01927ad69911a030)
图2.2.1 添加进程页列
在排查进程时,可重点关注进程的映像路径名称及命令行是否可疑,从而进一步进行排查。如图2.2.2所示,程序iexplore.exe为可疑进程。
![img](https://epubservercos.yuewen.com/CFA7D6/18685355001452006/epubprivate/OEBPS/Images/txt002_40.jpg?sign=1739298315-UqQASnc9pwx7hgxKocX5D5wBmbBBWd2s-0-cf80a1f073bb0c6419b5a320ab13b4e5)
图2.2.2 可疑进程排查
2)使用【tasklist】命令进行排查
在命令行中输入【tasklist】命令,可显示运行在计算机中的所有进程,可查看进程的映像名称、PID、会话名等信息,如图2.2.3所示。
![img](https://epubservercos.yuewen.com/CFA7D6/18685355001452006/epubprivate/OEBPS/Images/txt002_41.jpg?sign=1739298315-34Z5qO0J3qTLOYFOlpk6Eyk1cdHhT1gr-0-0e708865cc9b476f819ca58d00538360)
图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=1739298315-e8Ds9z2vW2shsYlERCLzLnEpQ78IPLNV-0-fc8b9d9d8c01f3e7b68513eaee0d6435)
图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=1739298315-elinTi5cSoY0wdxK1nR4rj5rK7W2rSX2-0-ae62f577d9498f970a078f48da748347)
图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=1739298315-QVXEwmr8pDzZzKsNkHRfQMrpBSyuDxK0-0-25a26596ca66c181934eb5b0d722f541)
图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=1739298315-QJStOByuHsMggHWolyxqHfufubSMjH66-0-f8491956e48ecab419ef797249d73b19)
图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=1739298315-6dUp4YpqWIvSzaf59yz8xfyU4dS6kZea-0-1cc5b2d87ee236424f08414227ae8331)
图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=1739298315-T5EZvzzbaNGYrvVPUSbLu8dEQnHoalGK-0-a95056abe48b49dbefc433a40b161951)
图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=1739298315-ilkmpVnQgPkdhL0s3RdnwZLzhgJKJpzX-0-5a9b902693fe078e9c5365fa22a1a740)
图2.2.10 查看具体的程序
也可以通过【netstat-anb】命令(需要管理员权限)快速定位到端口对应的程序,如图2.2.11所示。
![img](https://epubservercos.yuewen.com/CFA7D6/18685355001452006/epubprivate/OEBPS/Images/txt002_49.jpg?sign=1739298315-e5hA9KIPfaofq6S2q8l244Qr1Lq3QX8T-0-b1a3a8c6fa95fcec1215508f7e4170c0)
图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=1739298315-mJ5vl6e9p7w5SoUhq1cCpuolROKWudgN-0-d86442963c63ec2f44aa026f9c44a9f5)
图2.2.12 执行后的结果
![img](https://epubservercos.yuewen.com/CFA7D6/18685355001452006/epubprivate/OEBPS/Images/txt002_51.jpg?sign=1739298315-vZVgsEOa6IPVCeuHpanF6fx034Uk0Xk0-0-a6f8cfa618cd38f7e76c0be145a2b31e)
图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=1739298315-3r2M8TJj6rdNHnEZWprANEGr53NVwN9y-0-a393fa9ded8a2300c9869a05ddab18e8)
图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=1739298315-lTQYxtN9DI2IcpJ0deZ7YjEFEcenkf6a-0-979fd186e292b95b9a590cf7e62f0c1d)
图2.2.15 PID为2963的进程存在恶意外链情况
![img](https://epubservercos.yuewen.com/CFA7D6/18685355001452006/epubprivate/OEBPS/Images/txt002_54.jpg?sign=1739298315-nnZKPuSEEVmOYnlgvY7XfxQrNtgztKni-0-82aa82b394ca909dd2a9a8e5d4ad5d97)
图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=1739298315-O4GUQ9Z2TSn4ZGjK1xuGcx6EpQDjoPfy-0-5252aec9e2ac27fd0972a6b4df576854)
图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=1739298315-hc6U7UwEK1mtyQOIMnXSK5PBfDm9Z3lr-0-a5ef21008c06911ba1ec40b8de8e8d0e)
图2.2.18 查看隐藏进程
对于挖矿进程的排查,可使用【top】命令查看相关资源占用率较高的进程,之后进行定位。如图2.2.19所示,发现PID为29245的进程的CPU占用率较高,因此可进行重点排查。
![img](https://epubservercos.yuewen.com/CFA7D6/18685355001452006/epubprivate/OEBPS/Images/txt002_57.jpg?sign=1739298315-8zehALU9SsB7F54jkbqL5d3ebzdGh2CH-0-fb93195302b14b133c7adc5d5349e4f2)
图2.2.19 查看相关资源占用率较高的进程