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

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

隱藏技術(shù)在計算機(jī)系統(tǒng)安全中應(yīng)用十分廣泛,尤其是在網(wǎng)絡(luò)攻擊中,當(dāng)攻擊者成功侵入一個系統(tǒng)后,有效隱藏攻擊者的文件、進(jìn)程及其加載的模塊變得尤為重要 。本文將討論Linux系統(tǒng)中文件、進(jìn)程及模塊的高級隱藏技術(shù),這些技術(shù)有的已經(jīng)被廣泛應(yīng)用到各種后門或安全檢測程序之中,而有一些則剛剛起步,仍然處在討論階段,應(yīng)用很少 。
1、隱藏技術(shù)
1.1.Linux下的中斷控制及系統(tǒng)調(diào)用
Intel x86系列微機(jī)支持256種中斷,為了使處理器比較容易地識別每種中斷源,把它們從0~256編號,即賦予一個中斷類型碼n,Intel把它稱作中斷向量 。
Linux用一個中斷向量(128或者0x80)來實(shí)現(xiàn)系統(tǒng)調(diào)用,所有的系統(tǒng)調(diào)用都通過唯一的入口system_call來進(jìn)入內(nèi)核,當(dāng)用戶動態(tài)進(jìn)程執(zhí)行一條int 0x80匯編指令時,CPU就切換到內(nèi)核態(tài),并開始執(zhí)行system_call函數(shù),system_call函數(shù)再通過系統(tǒng)調(diào)用表sys_call_table來取得相應(yīng)系統(tǒng)調(diào)用的地址進(jìn)行執(zhí)行 。系統(tǒng)調(diào)用表sys_call_table中存放所有系統(tǒng)調(diào)用函數(shù)的地址,每個地址可以用系統(tǒng)調(diào)用號來進(jìn)行索引,例如sys_call_table[NR_fork]索引到的就是系統(tǒng)調(diào)用sys_fork()的地址 。
Linux用中斷描述符(8字節(jié))來表示每個中斷的相關(guān)信息,其格式如下:
偏移量31….16一些標(biāo)志、類型碼及保留位
段選擇符偏移量15….0
所有的中斷描述符存放在一片連續(xù)的地址空間中,這個連續(xù)的地址空間稱作中斷描述符表(IDT),其起始地址存放在中斷描述符表寄存器(IDTR)中,其格式如下:
32位基址值界限
其中各個結(jié)構(gòu)的相應(yīng)聯(lián)系可以如下表示:
通過上面的說明可以得出通過IDTR寄存器來找到system_call函數(shù)地址的方法:根據(jù)IDTR寄存器找到中斷描述符表,中斷描述符表的第0x80項即是system_call函數(shù)的地址,這個地址將在后面的討論中應(yīng)用到 。
1.2.Linux 的LKM(可裝載內(nèi)核模塊)技術(shù)
為了使內(nèi)核保持較小的體積并能夠方便的進(jìn)行功能擴(kuò)展,Linux系統(tǒng)提供了模塊機(jī)制 。模塊是內(nèi)核的一部分,但并沒有被編譯進(jìn)內(nèi)核,它們被編譯成目標(biāo)文件,在運(yùn)行過程中根據(jù)需要動態(tài)的插入內(nèi)核或者從內(nèi)核中移除 。由于模塊在插入后是作為Linux內(nèi)核的一部分來運(yùn)行的,所以模塊編程實(shí)際上就是內(nèi)核編程,因此可以在模塊中使用一些由內(nèi)核導(dǎo)出的資源,例如Linux2.4.18版以前的內(nèi)核導(dǎo)出系統(tǒng)調(diào)用表(sys_call_table)的地址,這樣就可以根據(jù)該地址直接修改系統(tǒng)調(diào)用的入口,從而改變系統(tǒng)調(diào)用 。在模塊編程中必須存在初始化函數(shù)及清除函數(shù),一般情況下,這兩個函數(shù)默認(rèn)為init_module()以及clearup_module(),從2.3.13內(nèi)核版本開始,用戶也可以給這兩個函數(shù)重新命名,初始化函數(shù)在模塊被插入系統(tǒng)時調(diào)用,在其中可以進(jìn)行一些函數(shù)及符號的注冊工作,清除函數(shù)則在模塊移除系統(tǒng)時進(jìn)行調(diào)用,一些恢復(fù)工作通常在該函數(shù)中完成 。
1.3.Linux下的內(nèi)存映像
/dev/kmem是一個字符設(shè)備,是計算機(jī)主存的映像,通過它可以測試甚至修改系統(tǒng),當(dāng)內(nèi)核不導(dǎo)出sys_call_table地址或者不允許插入模塊時可以通過該映像修改系統(tǒng)調(diào)用,從而實(shí)現(xiàn)隱藏文件、進(jìn)程或者模塊的目的 。
1.4.proc 文件系統(tǒng)
proc文件系統(tǒng)是一個虛擬的文件系統(tǒng),它通過文件系統(tǒng)的接口實(shí)現(xiàn),用于輸出系統(tǒng)運(yùn)行狀態(tài) 。它以文件系統(tǒng)的形式,為操作系統(tǒng)本身和應(yīng)用進(jìn)程之間的通信提供了一個界面,使應(yīng)用程序能夠安全、方便地獲得系統(tǒng)當(dāng)前的運(yùn)行狀況何內(nèi)核的內(nèi)部數(shù)據(jù)信息,并可以修改某些系統(tǒng)的配置信息 。由于proc以文件系統(tǒng)的接口實(shí)現(xiàn),因此可以象訪問普通文件一樣訪問它,但它只存在于內(nèi)存之中 。

推薦閱讀