作者简介:张博,网易高级信息安全工程师。
0x00 简介
在入侵检测的过程中,进程创建监控是必不可少的一点,因为攻击者的绝大多数攻击行为都是以进程的方式呈现,所以及时获取到新进程创建的信息能帮助我们快速地定位攻击行为。
本文将介绍一些常见的监控进程创建的方式,包括其原理、Demo、使用条件和优缺点。行文仓促,如果有哪些错误和不足,还望大家批评指正。
0x01 常见方式
目前来看,常见的获取进程创建的信息的方式有以下四种:
- So preload
- Netlink Connector
- Audit
- Syscall hook
下面我们就从原理、Demo、使用条件和优缺点来了解一下这四种方式。
0x02 So preload
原理
首先跟大家介绍两点基础知识:
1.Linux 中大部分的可执行程序是动态链接的,常用的有关进程执行的函数例如 execve均实现在 libc.so 这个动态链接库中。
2.Linux 提供了一个 so preload 的机制,它允许定义优先加载的动态链接库,方便使用者有选择地载入不同动态链接库中的相同函数。
结合上述两点不难得出,我们可以通过 so preload 来覆盖 libc.so 中的 execve等函数来监控进程的创建。
Demo
下面我们就来实现一个简单的 demo 。
1.创建文件 hook.c ,内容如下:
#define _GNU_SOURCE
#include
#include
#include
typedef ssize_t (*execve_func_t)(const char* filename, char* const argv[], char* const envp[]);
static execve_func_t old_execve = NULL;
int execve(const char* filename, char* const argv[], char* const envp[]) {
printf("Running hook");
printf("Program executed: %s