2012-10-16 96 views
8

我想創建一個從頭開始鎖定用戶會話並監視屬於該用戶的進程所做的每個系統調用的內核模塊。內核模塊監控系統調用?

我知道大家都在想什麼 - 「使用strace」 - 但我想用我收集的數據進行一些自己的日誌記錄和分析,strace有一些問題 - 應用程序可以使用「mmap」寫入文件時不會出現文件內容作爲「開放」系統調用的參數,或者沒有任何寫入權限的應用程序可能會創建複製敏感數據的內核。

我想能夠處理這些特殊情況,並做一些我自己的日誌記錄。我想知道 - 我怎麼能通過我的模塊路由所有系統調用?有沒有辦法做到這一點,而不觸及內核代碼?

感謝

+1

你應該使用'ptrace'系統調用(它確實被'strace'和'gdb'使用)。祝你好運,你需要一些。但是你可能不需要編寫任何內核模塊,只需要使用'ptrace'開發一個應用程序。 –

回答

2

我有通過使用內核模塊修補系統調用表,在過去做了類似的事情。每個修補功能都做了如下操作:

patchFunction(/*params*/) 
{ 
    // pre checks 
    ret = origFunction(/*params*/); 
    // post checks 
    return ret; 
} 

請注意,當您在內核數據結構中開始混淆時,您的模塊將變爲版本相關。內核模塊可能必須針對您正在安裝的特定內核版本進行編譯。

另外請注意,這是許多rootkits採用的技術,所以如果你安裝了安全軟件,它可能會試圖阻止你做這樣的事情。

+0

這絕對是正確的方向。 https://bbs.archlinux.org/viewtopic.php?id=139406是我能找到的最好的指南。隨着一些搗亂我到了我可以劫持任何系統調用的地方。謝謝您的幫助! – PinkElephantsOnParade