我正在研究一個基於機器學習技術的惡意軟件檢測項目。我的主要目標是Linux設備。我的第一個問題是;如何從Linux內核中提取功能?
- 我怎麼能提取有關使用內核驅動程序的Linux內核進程的數據? 我想第一次提取有關正在運行的進程的數據,只是爲了驗證概念。後來我想寫一個內核驅動程序來自動實時地完成這個操作。
- 是否有任何其他方式來提取運行進程的數據,如ProcessName,PID,UID,IS_ROOT等?
我正在研究一個基於機器學習技術的惡意軟件檢測項目。我的主要目標是Linux設備。我的第一個問題是;如何從Linux內核中提取功能?
在用戶空間做到這一點:
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線程
我認爲這是我正在尋找的答案。我試圖從用戶空間獲取lstart,cmd,pid,ppid,uid,pgrp,pcpu,%mem,vsize,share,cmin_flt,time,size,ruser。但是,由於我是新手,能否請你解釋你提到的第一種方法。例如,如何打印PID和cmd?它是-s和-d? – mburakergenc
我覺得我做到了。這裏是如何:) ps -eo cmd,pid,ppid,uid,pgrp,pcpu,%mem,vsize,share,cmin_flt,size,ruser | tr -s''| tr''','> cleandata.csv – mburakergenc
是不是已經可以通過'procfs'使用? – 0andriy
您的問題太寬泛且不清楚。 「提取數據」?什麼數據?由誰提取(人類,C程序,網頁...)?對於第二點,通過[/ proc文件系統](http://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html) – kaylum
即使在用戶級別也可以獲得大量信息。感謝您的糾正。我編輯了這篇文章。對於proc文件系統,是否可以將結果導出到csv或任何類型的文件中。我想我可以寫一個python腳本來做到這一點,但我想知道在bash中是否有一個快捷方式。 @kaylum – mburakergenc
對不起,stackoverflow是幫助人們修復他們現有的代碼,而不是研究,規範,開發和測試。考慮到你的問題,你需要花更多的時間來定義你的最終目標,並編寫一些試圖實現這一目標的代碼。當你在此之後卡住,然後張貼Q [關於MCVE]的指導(http://stackoverflow.com/help/mcve)。祝你好運。 – shellter