在linux下会通过fork和exec来执行进程,最终都会执行到exec,那么我们来思考下,仅仅挂钩exec足够不足够呢,肯定是不足够的,举两个例子
1.运行exploit,在fork中判断子进程,如果是子进程执行exploit,完成提权,提权后进行一系列后续操作,可以不执行exec来完成bash弹出,而选择其他api接口完成内核功能,例如关闭agent等等,那么这样场景是监控不到的,就明显会被绕过了
2.通过fork和exec来构建我们的父子进程表,如果不这样挂钩,在使用kprobe这样的事件源仅挂钩exec时,去读proc获取父进程时,有可能读慢,造成父进程丢失,也会导致程序判断失败