我正在做一个基于机器学习技术检测恶意软件的项目。我的主要目标是Linux设备。我的第一个问题是;
如何使用内核驱动程序从Linux内核中提取有关进程的数据?
我想第一次提取自己运行进程的数据,只是为了证明概念。稍后,我想编写一个内核驱动程序来自动和实时地完成这项工作。
是否有其他方法提取用于运行进程的数据,如processname、pid、uid、is-root等?
最佳答案
要从用户空间执行此操作:
ps -U <username/UID> | tr -s ' '| tr ' ' ','| cut -d ',' -f2,5 > out.csv
从内核空间,作为一个模块:
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/sched.h>
static int uid=0;
static int procx_init(void){
struct task_struct *task;
for_each_process(task)
printk ("uid=%d, pid=%d, command=%s\n", task->cred->uid, task->pid, task->comm);
return 0;
}
static void procx_exit(void)
{
printk("procx destructor\n");
}
module_init(procx_init);
module_exit(procx_exit);
module_param(uid, int, 0);
MODULE_AUTHOR ("sundeep471@gmail.com");
MODULE_DESCRIPTION ("Print process Info");
MODULE_LICENSE("GPL");
我没有检查uid,但是可以将其作为模块参数或运行时传递给触发器kthread