进程(process)是计算机中的程序关于某数据集合上的一次运动活动,是系统进行资源分配和调度的基本单位,是操作系统结果的基础。在早期面向进程结构中,进程是线程的容器。无论是在Windows系统还是Linux系统中,主机在感染恶意程序后,恶意程序都会启动相应的进程,来完成相关的恶意操作,有的恶意进程为了能够不被查杀,还会启动相应的守护进行对恶意进程进行守护。
对于windows系统中的进程排查,主要是找到恶意进程的PID、程序路径,有时还需要找到PPID(PID的父进程)及程序加载的DLL。对于进程的排查,一般有如下几种方法。
任务管理器查看
- 比较直观的方法是通过【任务管理器】查看可疑程序。但是需要在打开【任务管理器】窗口后,添加【命令行】和【映射路径名称】等进程页列,如图所示,以方便获取更多的进程信息。
- 在排查进程时,可重点关注进程的映像路径名称及命令行是否可疑,从而进一步进行排查,如图所示,程序iexplore.exe为可疑进程。
tasklist命令行排查
- 在命令行中输入【tasklist】命令,可显示运行在计算机的所有进程,可查看进程的映像名称、PID、会话名等信息,如图所示
- 使用【tasklist】命令并添加特定参数,还可以查看每个进程提供的服务,如添加svc参数,即输入【tasklist/svc】命令,可以显示每个进程和服务的对应情况,如图所示。
- 对于某些恶意加载DELL的进程,可以通过输入【tasklist /m】命令进行查询,如图所示。
- 要想查询特定DLL的调用情况,可以使用命令【tasklist /m 名称】。如图所示。输入【tasklist/m ntdll.dll】命令,可查询调用ntdll.dll模块的进程。
- 同时,【tasklist】命令还有过滤器的功能,可以使用【fi】命令进行条件筛选,结合关系运算符【eq】(等于)、【ne】(不等于)、【gt】(大于)、【lt】(小于)、【ge】(大于等于)、【le】(小于等于)等命令进行有效过滤,如图所示。
- 例如,查看PID为992的进程,可使用命令【tasklist /svc /fi "PID eq 992"】查看,如图所示、。
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:重新显示选的统计信息,每次显示之间暂停时间间隔(以秒计)。常见的网络状态如下。
-
-
- LISTRNING:侦听状态
- ESTABLISHEN:建立连接
- CLOSE_WAIT:对方主动关闭连接或网络异常导致连接中断
-
- 在排查过程中,一般会使用【netstat -ano | findstr "ESTABLISHED"】命令查看当前的网络连接,定位可以的ESTABLISHED。如图所示。在排查中发现PID为2856的进程有大量的网络连接。
- 通过【netstat】命令定位出PID,在通过【tasklist】命令进行程序定位,发现PID为2856的进程有大量网络连接后,使用【tasklist | find "2856"】命令可查看具体的程序。
- 也可通过【netstat -anb】命令(需要管理员权限)快速定位端口对应的程序,如图所示。
PowerShell排查
- 有时对于有守护进程的进程,还要确认子夫进程之间的关系,可以使用PowerShell进行查看,一般PowerShekk在查询时会调用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 个字段的内容。执行后的结果如图所示。
WMIC命令查询
- 在命令行中使用【wmic process】命令,可以对进程情况进行查询。但使用【wmic process list full /format:cvs】命令,即以cvs格式列出进程的所有信息,此时命令列出的信息过多,不便于阅读。因此,可以使用【 wmic process get name,parentprocessid,processid /format:csv 】
- 其他类似命令如下。
-
- 【wmic process get ExecutablePath,processid /format:csv】命令表示以csv格式来显示进程路径、进程ID信息。
- 【wmic process get name,ExecutablePath,processid,parentprocessid /format:csv findstr /I "appdata"】命令表示以CSV格式来显示进程的名称、进程路径、进程ID、父进程ID信息。
- 同时【wmic】命令还可以结合条件对进程进行筛选。
-
- 【wmic process where processid=[PID] get parentprocessid 】命令以表示以PID的值作为条件来获取其父进程的PID情况。如图所示,是获取PID的值为1820的进程的父进程PID的值,获取到父进程PID的值为10556。
- 其他类似命令如下
-
- 【wmic process where processid=[PID] get commandline 】命令表示以PID的值作为条件来获取其命令行。
- 在使用【wmic process】 命令查出恶意进程后,会结束恶意进程,一般使用命令如下
-
- 【wmic process where name="malware.exe" call terminate】 命令是值删除"malware.exe" 恶意程序的进程。
- 【wmic process where processid=[PID] delete】命令是指删除PID为某值的进程。