如何从linux内核中提取功能?

时间:2016-11-13 23:47:57

标签: linux linux-kernel malware malware-detection

我正在开发一个基于机器学习技术检测恶意软件的项目。我的主要目标是linux设备。我的第一个问题是;

  1. 如何使用内核驱动程序从linux内核中提取有关进程的数据? 我想首次提取有关运行进程的数据,这只是为了概念验证。后来我想编写一个内核驱动程序来自动实时地执行此操作。
  2. 是否还有其他方法可以为ProcessName,PID,UID,IS_ROOT等运行进程提取数据?

1 个答案:

答案 0 :(得分:3)

要从用户空间执行此操作:

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