2016-11-13 28 views
0

我正在研究一個基於機器學習技術的惡意軟件檢測項目。我的主要目標是Linux設備。我的第一個問題是;如何從Linux內核中提取功能?

  1. 我怎麼能提取有關使用內核驅動程序的Linux內核進程的數據? 我想第一次提取有關正在運行的進程的數據,只是爲了驗證概念。後來我想寫一個內核驅動程序來自動實時地完成這個操作。
  2. 是否有任何其他方式來提取運行進程的數據,如ProcessName,PID,UID,IS_ROOT等?
+2

您的問題太寬泛且不清楚。 「提取數據」?什麼數據?由誰提取(人類,C程序,網頁...)?對於第二點,通過[/ proc文件系統](http://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html) – kaylum

+0

即使在用戶級別也可以獲得大量信息。感謝您的糾正。我編輯了這篇文章。對於proc文件系統,是否可以將結果導出到csv或任何類型的文件中。我想我可以寫一個python腳本來做到這一點,但我想知道在bash中是否有一個快捷方式。 @kaylum – mburakergenc

+0

對不起,stackoverflow是幫助人們修復他們現有的代碼,而不是研究,規範,開發和測試。考慮到你的問題,你需要花更多的時間來定義你的最終目標,並編寫一些試圖實現這一目標的代碼。當你在此之後卡住,然後張貼Q [關於MCVE]的指導(http://stackoverflow.com/help/mcve)。祝你好運。 – shellter

回答

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 ("[email protected]"); 
MODULE_DESCRIPTION ("Print process Info"); 
MODULE_LICENSE("GPL"); 

我沒有檢查的UID,但你可以把它作爲模塊參數或運行時間傳遞器觸發k線程

+0

我認爲這是我正在尋找的答案。我試圖從用戶空間獲取lstart,cmd,pid,ppid,uid,pgrp,pcpu,%mem,vsize,share,cmin_flt,time,size,ruser。但是,由於我是新手,能否請你解釋你提到的第一種方法。例如,如何打印PID和cmd?它是-s和-d? – mburakergenc

+0

我覺得我做到了。這裏是如何:) ps -eo cmd,pid,ppid,uid,pgrp,pcpu,%mem,vsize,share,cmin_flt,size,ruser | tr -s''| tr''','> cleandata.csv – mburakergenc

+0

是不是已經可以通過'procfs'使用? – 0andriy