日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Linux系統(tǒng)環(huán)境下的高級隱藏技術(shù)介紹( 二 )


2、技術(shù)分析

2.1 隱藏文件

Linux系統(tǒng)中用來查詢文件信息的系統(tǒng)調(diào)用是sys_getdents,這一點可以通過strace來觀察到,例如strace ls 將列出命令ls用到的系統(tǒng)調(diào)用,從中可以發(fā)現(xiàn)ls是通過sys_getedents來執(zhí)行操作的 。當查詢文件或者目錄的相關(guān)信息時,Linux系統(tǒng)用sys_getedents來執(zhí)行相應的查詢操作,并把得到的信息傳遞給用戶空間運行的程序,所以如果修改該系統(tǒng)調(diào)用,去掉結(jié)果中與某些特定文件的相關(guān)信息,那么所有利用該系統(tǒng)調(diào)用的程序?qū)⒖床灰娫撐募?,從而達到了隱藏的目的 。首先介紹一下原來的系統(tǒng)調(diào)用,其原型為:
int sys_getdents(unsigned int fd, struct dirent *dirp,unsigned int count)
其中fd為指向目錄文件的文件描述符,該函數(shù)根據(jù)fd所指向的目錄文件讀取相應dirent結(jié)構(gòu),并放入dirp中,其中count為dirp中返回的數(shù)據(jù)量,正確時該函數(shù)返回值為填充到dirp的字節(jié)數(shù) 。下圖是修改后的系統(tǒng)調(diào)用hacked_getdents執(zhí)行流程 。


圖 系統(tǒng)調(diào)用hacked_getdents執(zhí)行流程
圖中的hacked_getdents函數(shù)實際上就是先調(diào)用原來的系統(tǒng)調(diào)用,然后從得到的dirent結(jié)構(gòu)中去除與特定文件名相關(guān)的文件信息,從而應用程序從該系統(tǒng)調(diào)用返回后將看不到該文件的存在 。

應該注意的是,一些較新的版本中是通過sys_getdents64來查詢文件信息的,但其實現(xiàn)原理與sys_getdents基本相同,所以在這些版本中仍然可以用與上面類似的方法來修改該系統(tǒng)調(diào)用,隱藏文件 。
2.2 隱藏模塊

上面分析了如何修改系統(tǒng)調(diào)用以隱藏特定名字的文件,在實際的處理中,經(jīng)常會用模塊來達到修改系統(tǒng)調(diào)用的目的,但是當插入一個模塊時,若不采取任何隱藏措施,很容易被對方發(fā)現(xiàn),一旦對方發(fā)現(xiàn)并卸載了所插入的模塊,那么所有利用該模塊來隱藏的文件就暴露了,所以應繼續(xù)分析如何來隱藏特定名字的模塊 。Linux中用來查詢模塊信息的系統(tǒng)調(diào)用是sys_query_module,所以可以通過修改該系統(tǒng)調(diào)用達到隱藏特定模塊的目的 。首先解釋一下原來的系統(tǒng)調(diào)用,原來系統(tǒng)調(diào)用的原型為:
int sys_query_module(const char *name, int which, void *buf, size_t bufsize , size_t *ret)
如果參數(shù)name不空,則訪問特定的模塊,否則訪問的是內(nèi)核模塊,參數(shù)which說明查詢的類型,當which=QM_MODULES時,返回所有當前已插入的模塊名稱,存入buff, 并且在ret中存放模塊的個數(shù),buffsize是buf緩沖區(qū)的大小 。在模塊隱藏的過程中只需要對which=QM_MODULES的情況進行處理就可以達到目的 。修改后的系統(tǒng)調(diào)用工作過程如下:

1)調(diào)用原來的系統(tǒng)調(diào)用,出錯則返回錯誤代碼;
2)如果which不等于QM_MODULES,則不需要處理,直接返回 。
3)從buf的開始位置進行處理,如果存在特定的名字,則將后面的模塊名稱向前覆蓋該名字 。
4)重復3),直到處理處理完所有的名字,正確返回 。

2.3 隱藏進程

在Linux中不存在直接查詢進程信息的系統(tǒng)調(diào)用,類似于ps這樣查詢進程信息的命令是通過查詢proc文件系統(tǒng)來實現(xiàn)的,在背景知識中已經(jīng)介紹過proc文件系統(tǒng),由于它應用文件系統(tǒng)的接口實現(xiàn),因此同樣可以用隱藏文件的方法來隱藏proc文件系統(tǒng)中的文件,只需要在上面的hacked_getdents中加入對于proc文件系統(tǒng)的判斷即可 。由于proc是特殊的文件系統(tǒng),只存在于內(nèi)存之中,不存在于任何實際設(shè)備之上,所以Linux內(nèi)核分配給它一個特定的主設(shè)備號0以及一個特定的次設(shè)備號1,除此之外,由于在外存上沒有與之對應的i節(jié)點,所以系統(tǒng)也分配給它一個特殊的節(jié)點號PROC_ROOT_INO(值為1),而設(shè)備上的1號索引節(jié)點是保留不用的 。通過上面的分析,可以得出判斷一個文件是否屬于proc文件系統(tǒng)的方法:

推薦閱讀