进程排查
进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。无论在Windows还是Linux中,主机在感染恶意程序后,恶意程序都会启动相应进程来完成恶意操作。
Windows进程排查
对于Windows系统中的进程排查,主要是找到恶意进程的PID、程序路径,有时还需要找到PPID(PID的父进程)及程序加载的DLL。对于进程的查看,一般有如下几种方式:
-
通过【任务管理器】查看可疑进程。
在打开【任务管理器】窗口后,点击【查看】>>【选择列】添加【命令行】和【映射路径名称】等进程页列,以方便获取更多进程信息。
-
使用【tasklist】命令进行排查,显示运行在计算机的所有进程,可看到映像名称、PID、会话名等信息。
【tasklist】添加特定参数,还可以查看每个进程提供的服务。
如:添加svc参数,可以显示每个进程和服务对应的情况;
添加m参数,查询进程加载的恶意程序,
如果想要查询特定DLL的调用情况,可以使用【tasklist/m DLL名称】
- 使用【netstat】命令进行排查;
在命令行中输入【netstat】,可以显示网络连接的信息,包括活动的TCP连接、路由器和网络接口信息。
-a 显示所有连接和侦听端口
-b 显示在创建每个连接或侦听端口时涉及的可执行程序
-n 以数字形式显示地址和端口号
-o 显示拥有的与每个连接关联的进程ID
-p 显示proto指定的协议的连接
常见的网络状态说明:
LISTENING:侦听状态
ESTABLISHED:建立连接
CLOSE_WAIT:对方主动关闭连接或网络异常导致连接中断
在排查过程中,一般会使用【netstat -ano | findstr “ESTABLISHED”】命令查看目前的网络连接,定位可疑的ESTABLEISHED。
- 使用【wmic】命令进行查询;
(1) 在命令行使用【wmic process】命令,可以对进程情况进行查询。
如果感觉很乱的话,可以使用【wmic process > c:/1.txt】输出到文本进行查看。
(2)【wmic process get ExecutablePath, processid/format: csv】命令表示以csv格式来显示进程路径、进程ID。
(3)【wmic process get name, ExecutablePath, processid, parentprocessid/format: csv|findstr/| “appdata”】命令表示以csv格式来显示进程的名称、进程路径、进程ID、父进程ID信息。
(4)【wmic process where processid=380 get parentprocessid】命令表示以PID的值作为条件来获取其父进程的PID情况;
(5)【wmic process where processid=4 get commandline】命令表示以PID的值作为条件来获取命令行;
- 【wmic process where name=“bind_4556.exe” call terminate】命令是指删除“bind_4556.exe”恶意程序的进程。
运行一个名为bind_4556.exe的恶意木马;
删除“bind_4556.exe”恶意程序的进程。
wmic process where name="bind_4556.exe" call terminate
再次查看;
- 【wmic process where processid=[PID] delete】命令是指删除PID为某值的进程。
再次打开木马;PID为2004;
删除PID为2004的恶意进程。
wmic process where processid=2004 delete
Linux进程排查
Linux系统的进程排查相对于Windows比较简单一点;
主要使用以下方式:
-
一般情况下使用【ps -aux】查看,但是对于进程排查的帮助不是特别大!
-
最常用的排查命令【netstat -ntap】查看网络连接情况和调用进程的PID再通过【ls -alt /proc/PID】查看进程的可执行文件。
-
【pwdx pid】 获取该pid的进程启动的时候的⽬录,并不⼀定是恶意⽂件所在的路径,只是启动恶意⽂件的路径;【systemctl status pid】 获取这个进程的status信息
-
获取异常进程pid;
(1)CPU占⽤
top -c -o %CPU
-c 参数显示进程的命令⾏参数
-p 参数指定进程的pid
按Q退出;
ps -eo pid,ppid,%mem,%cpu,cmd --sort=-%cpu | head -n 5
cpu占⽤前5的进程信息
(2)内存占⽤
top -c -o %MEM
-c 参数显示进程的命令⾏参数
-p 参数指定进程的pid
ps -eo pid,ppid,%mem,%cpu,cmd --sort=-%mem | head -n 5
内存占⽤前5的进程信息
- 有些进程会起⼦进程,可以使⽤如下命令查看:
ps ajfx
如果⽆⼦进程,直接使⽤【kill -9 pid】 这样会直接杀死指定进程,但是,由这个进程产⽣的⼦进程不会被杀死;
如果进程起⼦进程,需要使⽤如下命令:【kill -9 -pid】 注意,这⾥pid前有个减号,表示杀掉这个进程组;
使⽤ ps ajfx 可以看到具体的PPID、PID、PGID、SID 信息;
程序运⾏起来后,会产⽣⼀个主进程,并且分配⼀个进程ID(pid),如果在运⾏期间起其他进程,那么这个其他进程就是⼦进程,同时分配相应的进程ID,并设置其PPID的值为⽗进程的pid,此时,⽗进程和所有⽣成的⼦进程会组合成⼀个进程组,并且分配⼀个进程组ID。所以,如果挖矿程序有调⽤⼦进程,那么就需要以进程组为单位杀死!