上篇回顾:windows手工杀毒-寻找可疑进程之进程模块-CSDN博客
上篇我们介绍了如何通过进程模块寻找可疑进程,进程模块文件按照PE格式存储,我们可以使用IDA等静态分析(不需要运行文件,只看文件内容)工具分析文件行为,也可以使用windbg,x64debug等动态分析(运行文件)文件行为,也可以根据文件所属公司,文件路径等文件相关信息寻找可疑进程。今天介绍如何通过线程寻找可疑进程。
术语介绍:
线程:
通过前几篇的介绍,我们知道进程是一整套运行时占用的资源的集合体,他是个逻辑概念。可以简单理解为是一个仓库的管理人员,他记录着仓库中有哪些货物,这些货物都放在哪,但是真正去搬运,去使用这些货物的不是他,而是线程。线程负责真正执行可执行文件的代码,从哪里开始执行,怎么执行等等。
如何获取进程的线程列表
使用之前介绍的ProcExp.exe,view->lower panel view->Threads查看线程列表
注:有人反馈看到的线程列表,模块列表是空的,这种情况下需要以管理员权限运行该工具,如果还看不到列表那可能存在黑客对抗,可能是工具被注入了,也可能中了rootkit
图中展示了DouyuUpdate.exe进程的线程列表。TID是线程唯一标识符
如何发现可疑线程
1. 通过线程开始时间发现可疑线程
我们通过右键选中进程,查看进程属性,在属性面板中可以看到进程启动时间。通常线程启动时间和进程启动时间是临近的,如果某个线程的启动时间与进程相距很远且与恶意行为发生的时间很紧近,那这就是个可疑的线程。
线程一定在进程启动的临近时间启动吗?这倒也不是,主要看线程的用途,比如一些周期性任务,像软件运行情况的收集,资源文件的写入或释放,不过这类线程通常是在执行某些动作后进入等待状态,等待指定时间间隔或信号后再次执行,所以TID通常是不会变化的。
2. 通过线程数量发现可疑线程
通常进程稳定运行一段时间后他的线程数量也是稳定的,如果我们发现一个进程的线程数量在不行的变化,那可能需要重点关注下这个进程。这种情况也要看进程是干什么的,还需要结合线程开始地址进一步判断
3. 通过线程开始地址发现可疑线程
从上面的截图中我们可以看到线程的开始地址。这个地址通常是在某个模块的偏移处,如果线程的开始地址不属于任意一个模块范围内,那这就是可疑线程。比如通过进程注入技术,在进程空间内手动分配内存,写入恶意代码并执行的情况。我们还可以按照上篇介绍的方法分析下线程开始地址所在的模块是否是恶意模块