国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種Linux平臺(tái)下的可執(zhí)行文件防篡改方法

2011-09-04 06:09斌,張
關(guān)鍵詞:鉤子U盤哈希

姜 斌,張 君

(1.杭州電子科技大學(xué)通信工程學(xué)院,浙江杭州310018;2.浙江省電子信息產(chǎn)品檢驗(yàn)所,浙江 杭州310007)

0 引言

隨著信息技術(shù)的飛速發(fā)展,信息安全事件已經(jīng)深入到人們生活的方方面面[1]。調(diào)查表明,在各類信息安全事件當(dāng)中,惡意代碼是最重要的安全威脅之一[2]。惡意代碼要傳播,必須要進(jìn)行幾個(gè)特定的操作,以最典型的病毒和木馬為例,其在傳播的過程中,必然要改寫其它可執(zhí)行文件,以達(dá)到感染的目的。因此,如果能有效檢測(cè)到病毒木馬對(duì)其它可執(zhí)行文件的篡改,則可以遏止病毒木馬的傳播過程。基于這種思想,本文提出了一種可執(zhí)行文件防篡改方法。這種方法的基本思想是:在任何一個(gè)可執(zhí)行文件運(yùn)行之前,先檢查其是否被篡改。如果被篡改了,則說明該文件不可信,拒絕其執(zhí)行;如果沒有被篡改,則允許其執(zhí)行。由此達(dá)到防止被篡改的(惡意)軟件運(yùn)行的目的。Linux平臺(tái)下的實(shí)驗(yàn)結(jié)果表明達(dá)到了預(yù)期效果。

1 Linux平臺(tái)下可執(zhí)行文件防篡改架構(gòu)

要實(shí)現(xiàn)可執(zhí)行文件防篡改架構(gòu),有兩個(gè)關(guān)鍵步驟:第一步,在任何一個(gè)可執(zhí)行文件運(yùn)行之前,先捕獲其運(yùn)行請(qǐng)求;第二步,在捕獲到運(yùn)行請(qǐng)求之后,判定該文件是否被篡改。要實(shí)現(xiàn)第一步,可以采用鉤子機(jī)制。在Windows平臺(tái)下采用相應(yīng)的Hook函數(shù)即可,Linux平臺(tái)下,則可以通過Linux安全模塊(Linux Security Module,LSM)實(shí)現(xiàn);要實(shí)現(xiàn)第二步,只要計(jì)算可執(zhí)行文件的哈希值即可。如果可執(zhí)行文件的當(dāng)前哈希值與該文件的預(yù)期哈希值是一致的,則說明文件沒有被篡改,是可信的;否則說明被篡改,是不可信的。

1.1 Linux內(nèi)核安全模塊

LSM是一個(gè)輕量級(jí)通用的訪問控制框架。它通過在內(nèi)核當(dāng)中的特點(diǎn)位置增加檢測(cè)點(diǎn),并在檢測(cè)點(diǎn)插入鉤子函數(shù)。這樣,當(dāng)用戶需要施加額外的訪問控制的時(shí)候,可以改寫這些鉤子函數(shù),從而獲得安全增強(qiáng)[3]。一個(gè)訪問文件節(jié)點(diǎn)inode的訪問過程如圖1所示。在經(jīng)過了錯(cuò)誤檢查、訪問控制DAC檢查之后,就在Linux內(nèi)核試圖對(duì)內(nèi)核對(duì)象進(jìn)行訪問之前,LSM鉤子調(diào)用一個(gè)LSM模塊所提供的函數(shù)。該函數(shù)根據(jù)策略引擎進(jìn)行判斷,要么允許此次訪問,要么拒絕訪問并強(qiáng)制返回一個(gè)錯(cuò)誤。在LSM當(dāng)中,對(duì)如下一些內(nèi)核對(duì)象插入了安全鉤子:任務(wù)鉤子、程序鉤子、文件系統(tǒng)鉤子、管道/文件/socket相關(guān)鉤子;文件操作鉤子;網(wǎng)絡(luò)數(shù)據(jù)包相關(guān)鉤子;網(wǎng)絡(luò)設(shè)備相關(guān)鉤子;信號(hào)量/共享內(nèi)存/消息隊(duì)列鉤子;單個(gè)消息鉤子等。可見,LSM的功能還是比較強(qiáng)大的。

圖1 LSM的掛鉤結(jié)構(gòu)(以文件訪問為例)

1.2 系統(tǒng)架構(gòu)

在LSM的基礎(chǔ)上,Linux平臺(tái)下可執(zhí)行文件防篡改架構(gòu)如圖2所示。

圖2 Linux平臺(tái)下可執(zhí)行文件防篡改架構(gòu)

整個(gè)架構(gòu)的工作流程是這樣的:(1)首先,某個(gè)可執(zhí)行文件被用戶運(yùn)行;(2)LSM鉤子截獲到該文件的運(yùn)行請(qǐng)求;(3)相應(yīng)的LSM鉤子函數(shù)被執(zhí)行。該函數(shù)將解析請(qǐng)求運(yùn)行文件的詳細(xì)信息——包括絕對(duì)路徑文件名、參數(shù)等等;(4)根據(jù)步驟(3)當(dāng)中獲取的可執(zhí)行文件絕對(duì)路徑文件名,計(jì)算該文件的當(dāng)前哈希值;(5)獲取該文件的預(yù)期哈希值(通常保存在外部的U盤當(dāng)中);(6)將文件的當(dāng)前哈希值與預(yù)期哈希值相比較,如果兩者一致,則允許該可執(zhí)行文件的運(yùn)行,否則拒絕其運(yùn)行。

2 系統(tǒng)實(shí)現(xiàn)

2.1 LSM鉤子設(shè)置

在圖2的架構(gòu)當(dāng)中,為了截獲可執(zhí)行文件的運(yùn)行請(qǐng)求,需要進(jìn)行LSM鉤子設(shè)置,這是通過設(shè)置bprm_check_security函數(shù)鉤子實(shí)現(xiàn)的。bprm_check_security鉤子函數(shù)原型是:

int(*bprm_check_security)(struct linux_binprm*bprm)。其中,參數(shù)bprm包含了基本的linux_binprm結(jié)構(gòu)體信息,例如:要執(zhí)行的應(yīng)用程序的真實(shí)名稱、命令行參數(shù)信息等等。通過在LSM內(nèi)核模塊文件當(dāng)中添加如下代碼,可以設(shè)置bprm_check_security鉤子:

static struct security_operations jetway_security_ops={.bprm_check_security=appprotec_check_security,};

這樣,任何時(shí)候當(dāng)某個(gè)應(yīng)用程序開始運(yùn)行之后,在Linux內(nèi)核調(diào)用實(shí)際的加載器加載其運(yùn)行之前,會(huì)自動(dòng)轉(zhuǎn)到定義的appprotec_check_security函數(shù)。appprotec_check_security首先根據(jù)參數(shù)“struct linux_binprm*bprm”獲取文件的相關(guān)信息,特別是其絕對(duì)路徑文件名、參數(shù)信息等,其中bprm->interp就給出了絕對(duì)路徑文件名;然后,內(nèi)核根據(jù)獲取的絕對(duì)路徑文件名打開相應(yīng)的文件,計(jì)算其哈希(MD5);最后,內(nèi)核從U盤讀取該文件的預(yù)期哈希:如果兩者不一致,則返回-1拒絕文件的運(yùn)行;否則返回0允許其運(yùn)行。

2.2 USB 驅(qū)動(dòng)

在圖2的架構(gòu)當(dāng)中,進(jìn)行哈希值比較的時(shí)候,需要從U盤讀取文件的預(yù)期哈希值。這就需要編寫特定的USB驅(qū)動(dòng)。為什么不直接使用Linux自帶的USB驅(qū)動(dòng)呢?這是因?yàn)?需要對(duì)U盤進(jìn)行判定,只有是特定的U盤,才相信其存儲(chǔ)的預(yù)期哈希值,否則如果讀取任意U盤的話,那攻擊者完全可以偽造假的預(yù)期哈希值從而使得架構(gòu)失去作用。從U盤讀取預(yù)期哈希值的過程是:首先從內(nèi)核判定插入的U盤是不是允許的U盤(這可以通過id號(hào),以及特殊扇區(qū)的特殊信息來保證),如果是允許的U盤,則讀取U盤內(nèi)部名為expectedhash的文件,并解析該文件獲取預(yù)期哈希值。

USB本身有4種傳輸方式:等時(shí)傳輸、中斷傳輸、控制傳輸和猝發(fā)傳輸。USB使用1ms的時(shí)間幀來傳輸數(shù)據(jù)。在每次傳輸之前,HC產(chǎn)生一個(gè)幀頭Start Of Frame。每次傳輸?shù)臅r(shí)候,如果有等時(shí)數(shù)據(jù)存在,則等時(shí)數(shù)據(jù)最先被傳輸。HCD需要確保:有足夠的時(shí)間用來完成所有的等時(shí)傳輸和中斷傳輸數(shù)據(jù),然后使用剩下的時(shí)間來完成控制傳輸和猝發(fā)傳輸數(shù)據(jù)[4]。根據(jù)上述USB驅(qū)動(dòng)特點(diǎn),就可以對(duì)USB驅(qū)動(dòng)框架進(jìn)行填寫,開發(fā)實(shí)際的USB驅(qū)動(dòng)了。描述USB驅(qū)動(dòng)程序的結(jié)構(gòu)體是系統(tǒng)定義的標(biāo)準(zhǔn)結(jié)構(gòu)struct usb_driver,在struct usb_driver中,name用來告訴內(nèi)核模塊的名字;probe和disconnect是函數(shù)指針,當(dāng)設(shè)備與在id_table中的變量信息匹配時(shí),函數(shù)被調(diào)用;id_table用來告訴內(nèi)核模塊支持的設(shè)備。更詳細(xì)的USB開發(fā)可以參見文獻(xiàn)4、5。

3 實(shí)驗(yàn)和討論

3.1 實(shí)驗(yàn)結(jié)果

Linux Redhat內(nèi)核2.4上實(shí)現(xiàn)了一個(gè)原型系統(tǒng),構(gòu)造了一個(gè)名為appproect.ko的LSM驅(qū)動(dòng),在其中實(shí)現(xiàn)了int(*bprm_check_security)(struct linux_binprm*bprm)鉤子。在root權(quán)限下,使用“insmod appprotect.ko”加載的內(nèi)核,然后插入具有預(yù)期哈希信息的U盤。啟動(dòng)/bin/ls,可以發(fā)現(xiàn),正常列出了文件和目錄信息;之后,使用編輯器更改/bin/ls當(dāng)中任意位置的任意個(gè)字節(jié),再次運(yùn)行,系統(tǒng)顯示“operation not permitted”。實(shí)驗(yàn)達(dá)到了預(yù)期結(jié)果。

經(jīng)過多次實(shí)驗(yàn)統(tǒng)計(jì),系統(tǒng)引起約1%的額外負(fù)載,這主要是計(jì)算哈希值所引起的。不過,1%的負(fù)載對(duì)系統(tǒng)性能影響不大,可以接受,用戶幾乎感受不到時(shí)間的延遲。

3.2 討論

首先需要指出的是,雖然本文在Linux平臺(tái)實(shí)現(xiàn)的原型系統(tǒng),但該架構(gòu)仍然可以應(yīng)用到Windows平臺(tái)上面。當(dāng)應(yīng)用到Windows平臺(tái)時(shí),其基本流程類似于Linux平臺(tái)(如圖2所示),唯一不同的是,Linux平臺(tái)采用LSM捕獲可執(zhí)行文件運(yùn)行請(qǐng)求,而在Windows平臺(tái)下,可以通過設(shè)置Windows鉤子的方法來達(dá)到相同目的。要設(shè)置Windows鉤子,可以調(diào)用SetWindowsHookEx()函數(shù)。其次需要指出的是,本文提出的方法是在可執(zhí)行文件運(yùn)行之前,先判定該文件是否已經(jīng)被篡改。也就是說,本文的方法并不能“阻止篡改”,而只能“發(fā)現(xiàn)篡改”,并在“發(fā)現(xiàn)篡改”之后,調(diào)用備份文件進(jìn)行主動(dòng)恢復(fù),從而達(dá)到保護(hù)的目的。之所以不采用“阻止篡改”的方法,是由于采用“阻止篡改”的方法,就需要判定當(dāng)執(zhí)行寫入操作時(shí),執(zhí)行寫入的進(jìn)程究竟是一個(gè)正常進(jìn)程,還是一個(gè)病毒或者木馬進(jìn)程,而這種判定從理論上是不可行的:因?yàn)椴淮嬖谝粋€(gè)算法,能夠判定任意一個(gè)文件是否是病毒或者木馬?;谶@種原因,才采用了“發(fā)現(xiàn)篡改”的方法。注意到在架構(gòu)當(dāng)中,任何一個(gè)可執(zhí)行文件在剛剛發(fā)出執(zhí)行請(qǐng)求,而并沒有創(chuàng)建進(jìn)程實(shí)體之前,其完整性就被檢查了,因而這種方案不僅能夠發(fā)現(xiàn)對(duì)文件的篡改,而且能夠有效避免系統(tǒng)感染病毒或者木馬,保證了系統(tǒng)的安全性。

4 結(jié)束語(yǔ)

本文提出了一種可執(zhí)行文件防篡改框架,該框架在任何一個(gè)可執(zhí)行文件實(shí)際運(yùn)行之前,先通過計(jì)算哈希值判定其是否被非法篡改。如果被篡改,則禁止其運(yùn)行;否則允許其運(yùn)行。本文以Linux平臺(tái)為基礎(chǔ),實(shí)現(xiàn)了一個(gè)原型系統(tǒng),達(dá)到了預(yù)期效果。下一步,該架構(gòu)可以進(jìn)一步擴(kuò)展,即:在可執(zhí)行文件進(jìn)行完整性哈希比較時(shí),針對(duì)指定的配置文件進(jìn)行完整性比較。

[1] 國(guó)際計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)急技術(shù)處理協(xié)調(diào)中心.CNCERT互聯(lián)網(wǎng)安全威脅報(bào)告[EB/OL].http://www.cert.org.cn/UserFiles/File/201101monthly.pdf,2011 -02 -01.

[2] 國(guó)際計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)急技術(shù)處理協(xié)調(diào)中心.CNCERT互聯(lián)網(wǎng)安全威脅報(bào)告[EB/OL].http://www.cert.org.cn/UserFiles/File/201102monthly.pdf,2011 -03 -01.

[3] Wright C,Cowan C,Smalley S,et al.Linux Security Modules:General Security Support for the Linux Kernel[C].San Francisco:Proceedings of the 11thUSENIX Security Symposium,2002:1-14.

[4] Intel.Universal Host Controller Interface(UHCI)Design Guide [EB/OL].http://download.intel.com/technology/usb/UHCI11D.pdf,2011 -05 -31.

[5] Corbet J,Rubini A,Kroah-Hartman G.Linux Device Drivers(Third Edition)[M].O’Reilly Media Press:Cambridge Massachusetts,2005:10 -14,50 -64.

猜你喜歡
鉤子U盤哈希
文件哈希值處理一條龍
采用U盤文件冗余方案實(shí)現(xiàn)TSP系統(tǒng)的可靠裝載
自動(dòng)辨認(rèn)插口方向的U盤
誰和誰好
幸福的一家
《脈望館鈔校本古今雜劇》穿關(guān)之“鉤子困帶”考
精鉤子
基于OpenCV與均值哈希算法的人臉相似識(shí)別系統(tǒng)
巧用哈希數(shù)值傳遞文件
U盤“鬧肚子”