进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。无论在Windows还是Linux中,主机在感染恶意程序后,恶意程序都会启动相应进程来完成恶意操作。
对于Windows系统中的进程排查,主要是找到恶意进程的PID、程序路径,有时还需要找到PPID(PID的父进程)及程序加载的DLL。对于进程的查看,一般有如下几种方式:
【tasklist】添加特定参数,还可以查看每个进程提供的服务。
如:添加svc参数,可以显示每个进程和服务对应的情况;
添加m参数,查询进程加载的恶意程序,
如果想要查询特定DLL的调用情况,可以使用【tasklist/m DLL名称】
-a 显示所有连接和侦听端口
-b 显示在创建每个连接或侦听端口时涉及的可执行程序
-n 以数字形式显示地址和端口号
-o 显示拥有的与每个连接关联的进程ID
-p 显示proto指定的协议的连接
常见的网络状态说明:
LISTENING:侦听状态
ESTABLISHED:建立连接
CLOSE_WAIT:对方主动关闭连接或网络异常导致连接中断
在排查过程中,一般会使用【netstat -ano | findstr “ESTABLISHED”】命令查看目前的网络连接,定位可疑的ESTABLEISHED。
(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
wmic process where processid=2004 delete
Linux系统的进程排查相对于Windows比较简单一点;
主要使用以下方式:
最常用的排查命令【netstat -ntap】查看网络连接情况和调用进程的PID再通过【ls -alt /proc/PID】查看进程的可执行文件。
【pwdx pid】 获取该pid的进程启动的时候的⽬录,并不⼀定是恶意⽂件所在的路径,只是启动恶意⽂件的路径;【systemctl status pid】 获取这个进程的status信息
获取异常进程pid;
(1)CPU占⽤
top -c -o %CPU
-c 参数显示进程的命令⾏参数
-p 参数指定进程的pid
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。所以,如果挖矿程序有调⽤⼦进程,那么就需要以进程组为单位杀死!