Linux操作系統下的高級隱藏技術詳解(4)
2.2 隱藏模塊
上面分析了如何修改系統調用以隱藏特定名字的文件,在實際的處理中,經常會用模塊來達到修改系統調用的目的,但是當插入一個模塊時,若不采取任何隱藏措施,很容易被對方發現,一旦對方發現並卸載了所插入的模塊,那麼所有利用該模塊來隱藏的文件就暴露了,所以應繼續分析如何來隱藏特定名字的模塊。 Linux中用來查詢模塊信息的系統調用是sys_query_module,所以可以通過修改該系統調用達到隱藏特定模塊的目的。首先解釋一下原來的系統調用,原來系統調用的原型為:
int sys_query_module(const char *name, int which, void *buf, size_t bufsize , size_t *ret)
如果參數name不空,則訪問特定的模塊,否則訪問的是內核模塊,參數which說明查詢的類型,當which=QM_MODULES時,返回所有當前已插入的模塊名稱,存入buff, 並且在ret中存放模塊的個數,buffsize是buf緩沖區的大小。在模塊隱藏的過程中只需要對which=QM_MODULES的情況進行處理就可以達到目的。修改後的系統調用工作過程如下:
1)調用原來的系統調用,出錯則返回錯誤代碼;
2)如果which不等於QM_MODULES,則不需要處理,直接返回。
3)從buf的開始位置進行處理,如果存在特定的名字,則將後面的模塊名稱向前覆蓋該名字。
4)重復3),直到處理處理完所有的名字,正確返回。