




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于緩沖區(qū)溢出漏洞的攻防方案設(shè)計(jì)基于緩沖區(qū)溢出漏洞的攻防方案設(shè)計(jì)信息安全 071 班 范靜霞 指導(dǎo)老師:何巖內(nèi)容摘要:內(nèi)容摘要:。關(guān)鍵詞:關(guān)鍵詞:目目 錄錄第 1 章 引言1第 2 章 系統(tǒng)漏洞22.1 漏洞的概念22.2 漏洞的分類2系統(tǒng)配置不當(dāng)2口令失竊3嗅探未加密通訊數(shù)據(jù)3設(shè)計(jì)存在缺陷3軟件編寫存在 bug4第 3 章 本地緩沖區(qū)溢出的原理及實(shí)現(xiàn)53.1 緩沖區(qū)概念53.2 緩沖區(qū)溢出攻擊原理63.3 緩沖區(qū)溢出實(shí)現(xiàn)方式7利用跳轉(zhuǎn)指令實(shí)現(xiàn)溢出7定位參數(shù)地址實(shí)現(xiàn)溢出9溢出實(shí)現(xiàn)用戶權(quán)限提升16第 4 章 基于緩沖區(qū)溢出的防御方法194.1 關(guān)閉不需要的特權(quán)程序194.2 關(guān)閉或修改系統(tǒng)的某些
2、版本信息204.3 使堆棧向高地址方向增長(zhǎng)214.4 及時(shí)給程序漏洞打補(bǔ)丁214.5 提供高級(jí)的用戶幫助21第 5 章 總結(jié)23參考文獻(xiàn)24第第 1 1 章章 引言引言目前中國(guó)互聯(lián)網(wǎng)已經(jīng)進(jìn)入寬帶時(shí)期,網(wǎng)絡(luò)用戶和網(wǎng)絡(luò)資源持續(xù)增長(zhǎng)。但是,互聯(lián)網(wǎng)的開放性、商業(yè)化和應(yīng)用系統(tǒng)的復(fù)雜性帶來(lái)的安全風(fēng)險(xiǎn)也隨之增加,各種安全漏洞的大量存在并不斷攀升仍是網(wǎng)絡(luò)安全的最大隱患,即使計(jì)算機(jī)系統(tǒng)裝上了防火墻和防病毒軟件,但遺憾的是系統(tǒng)本身的漏洞難以避免。近年由CERT/CC 發(fā)布的系統(tǒng)安全忠告中關(guān)于緩沖區(qū)溢出(又稱堆棧溢出) 漏洞占 56.76%以上。緩沖區(qū)溢出可以讓普通用戶通過(guò)運(yùn)行一個(gè)“錯(cuò)誤”的程序,來(lái)使系統(tǒng)運(yùn)行只有在
3、超級(jí)管理員環(huán)境下才能運(yùn)行的程序。一旦系統(tǒng)存在著緩沖區(qū)溢出漏洞,系統(tǒng)就有可能被黑客完全控制。所以,緩沖區(qū)溢出漏洞是致命的。緩沖區(qū)溢出攻擊之所以成為一種常見的攻擊手段,其原因在于緩沖區(qū)溢出漏洞太普通了,并且易于實(shí)現(xiàn)。而且,緩沖區(qū)溢出所以成為遠(yuǎn)程攻擊的主要手段,其原因在于緩沖區(qū)溢出漏洞給予了攻擊者所想要的一切:植入并且執(zhí)行攻擊代碼。被植入的攻擊代碼以一定的權(quán)限運(yùn)行有緩沖區(qū)溢出漏洞的程序,從而得到被攻擊主機(jī)的控制權(quán)。本文簡(jiǎn)單介紹了緩沖區(qū)溢出的基本原理及本文講述了漏洞的基本概念,并列述了漏洞的分類。漏洞的種類繁多,主要就緩沖區(qū)漏洞的軟件編寫存在 bug、系統(tǒng)配置不當(dāng)、口令失竊、明文通訊信息被監(jiān)聽以及初始
4、設(shè)計(jì)存在缺陷等方面作了簡(jiǎn)單的介紹。在簡(jiǎn)單論述漏洞的同時(shí),本文主要以緩沖區(qū)溢出作為主要論點(diǎn)。下面介紹了緩沖區(qū)的概念及緩沖區(qū)溢出的基本原理,并介紹了緩沖區(qū)溢出漏洞的三大實(shí)現(xiàn)方式:利用跳指令實(shí)現(xiàn)溢出、定位參數(shù)地址實(shí)現(xiàn)溢出、溢出實(shí)現(xiàn)用戶權(quán)限提升。并從預(yù)防、發(fā)現(xiàn)、抵御緩沖區(qū)溢出攻擊以及攻擊后的程序恢復(fù)等方面對(duì)目前有代表性的防御、檢測(cè)方法和攻擊恢復(fù)技術(shù)進(jìn)行了歸納、分析和比較,指出這些方法和技術(shù)的弊端以及可能采取的規(guī)避手段。提出了在攻擊技術(shù)不斷發(fā)展的情況下,徹底、有效地解決緩沖區(qū)溢出所面臨的問(wèn)題。第第 2 2 章章 系統(tǒng)漏洞系統(tǒng)漏洞2.12.1 漏洞的概念漏洞的概念漏洞也叫脆弱性,是在硬件、軟件、協(xié)議的具體
5、實(shí)現(xiàn)或系統(tǒng)安全策略上存在的缺陷。從而可以使攻擊者能夠在未授權(quán)的情況下訪問(wèn)或破壞系統(tǒng)。這些缺陷被非法用戶利用,可以突破系統(tǒng)的審計(jì)和訪問(wèn)控制等安全機(jī)制,對(duì)系統(tǒng)及其承載數(shù)據(jù)的完整性、保密性和可用性造成威脅。漏洞會(huì)影響到很大范圍的軟硬件設(shè)備,包括系統(tǒng)本身及其支撐軟件、網(wǎng)絡(luò)客戶和服務(wù)器軟件、網(wǎng)絡(luò)路由器和安全防火墻等,即在不同的軟硬件設(shè)備中都可能存在不同的安全漏洞問(wèn)題。漏洞無(wú)處不在,入侵者只要找到復(fù)雜的計(jì)算機(jī)網(wǎng)絡(luò)中的一個(gè)漏洞,就能輕而易舉地闖入系統(tǒng)。所以,了解這些漏洞都有可能在哪里,對(duì)于修補(bǔ)它們至關(guān)重要。通常,漏洞主要表現(xiàn)在軟件編寫存在 bug、系統(tǒng)配置不當(dāng)、口令失竊、明文通訊信息被監(jiān)聽以及初始設(shè)計(jì)存在缺
6、陷等方面。2.22.2 漏洞的分類漏洞的分類系統(tǒng)配置不當(dāng)系統(tǒng)配置不當(dāng)(1)默認(rèn)配置的不足:許多系統(tǒng)安裝后都有默認(rèn)的安全配置信息,通常被稱為 easytouse。但遺憾的是,easytouse 還意味著 easytobreakin。所以,一定對(duì)默認(rèn)配置進(jìn)行揚(yáng)棄的工作。(2)管理員懶散:懶散的表現(xiàn)之一就是系統(tǒng)安裝后保持管理員口令的空值,而且隨后不進(jìn)行修改。要知道,入侵者首先要做的事情就是搜索網(wǎng)絡(luò)上是否有這樣的管理員為空口令的機(jī)器。(3)臨時(shí)端口:有時(shí)候?yàn)榱藴y(cè)試,管理員會(huì)在機(jī)器上打開一個(gè)臨時(shí)端口,但測(cè)試完后卻忘記了禁止,這樣就會(huì)給入侵者有洞可尋、有漏可鉆。通常的解決策略是:除非一個(gè)端口是必須使用的,
7、否則禁止它。一般情況下,安全審計(jì)數(shù)據(jù)包可用于發(fā)現(xiàn)這樣的端口并通知管理者。(4)信任關(guān)系:網(wǎng)絡(luò)間的系統(tǒng)經(jīng)常建立信任關(guān)系以方便資源共享,但這也給入侵者有可趁之機(jī)、間接攻擊的可能,例如,只要攻破信任群中的一個(gè)機(jī)器,就有可能進(jìn)一步攻擊其他的機(jī)器。所以,要對(duì)信任關(guān)系嚴(yán)格審核、確保真正的安全聯(lián)盟??诹钍Ц`口令失竊(1)弱不禁破的口令:就是說(shuō)雖然設(shè)置了口令,但是非常簡(jiǎn)單,入侵者可以輕而易舉的攻破。(2)字典攻擊:就是指入侵者使用一個(gè)程序,該程序借助一個(gè)包含用戶名和口令的字典數(shù)據(jù)庫(kù),不斷地嘗試登錄系統(tǒng),直到成功進(jìn)入。毋庸置疑,這種方式的關(guān)鍵在于有一個(gè)好的字典。(3)暴力攻擊:與字典攻擊類似,但這個(gè)字典卻是動(dòng)態(tài)
8、的,就是說(shuō),字典包含了所有可能的字符組合。例如,一個(gè)包含大小寫的 4 字符口令大約有 50 萬(wàn)個(gè)組合,1 個(gè)包含大小寫且標(biāo)點(diǎn)符號(hào)的 7 字符口令大約有 10 萬(wàn)億組合。對(duì)于后者,一般的計(jì)算機(jī)要花費(fèi)大約幾個(gè)月的時(shí)間才能試驗(yàn)一遍。.3 嗅探未加密通訊數(shù)據(jù)嗅探未加密通訊數(shù)據(jù)(1)共享介質(zhì):傳統(tǒng)的以太網(wǎng)結(jié)構(gòu)很便于入侵者在網(wǎng)絡(luò)上放置一個(gè)嗅探器就可以查看該網(wǎng)段上的通訊數(shù)據(jù),但是如果采用交換型以太網(wǎng)結(jié)構(gòu),嗅探行為將變得非常困難。(2)服務(wù)器嗅探:交換型網(wǎng)絡(luò)也有一個(gè)明顯的不足,入侵者可以在服務(wù)器上特別是充當(dāng)路由功能的服務(wù)器上安裝一個(gè)嗅探器軟件,然后就可以通過(guò)它收集到的信息闖進(jìn)客戶端機(jī)器以及信任
9、的機(jī)器。例如,雖然不知道用戶的口令,但當(dāng)用戶使用 Telnet 軟件登錄時(shí)就可以嗅探到他輸入的口令了。(3)遠(yuǎn)程嗅探:許多設(shè)備都具有 RMON,遠(yuǎn)程監(jiān)控功能以便管理者使用公共體字符串進(jìn)行遠(yuǎn)程調(diào)試。隨著寬帶的不斷普及,入侵者對(duì)這個(gè)后門越來(lái)越感興趣了。.4 設(shè)計(jì)存在缺陷設(shè)計(jì)存在缺陷(1)TCP/IP 協(xié)議的缺陷:TCP/IP 協(xié)議現(xiàn)在已經(jīng)廣為應(yīng)用、但是它設(shè)計(jì)時(shí)卻是在入侵者猖狂肆虐的今天之很早以前設(shè)計(jì)出來(lái)的。因此,存在許多不足造成安全漏洞在所難免,例如 smurf 攻擊、ICMPUnreachable 數(shù)據(jù)包斷開、IP 地址欺騙以及 SYNflood。然而,最大的問(wèn)題在于 IP 協(xié)議
10、是非常容易“輕信”的,就是說(shuō)入侵者可以隨意地偽造及修改 IP 數(shù)據(jù)包而不被發(fā)現(xiàn)?,F(xiàn)在 Ipsec 協(xié)議已經(jīng)開發(fā)出來(lái)以克服這個(gè)不足,但還沒有得到廣泛的應(yīng)用。.5 軟件編寫存在軟件編寫存在 bugbug無(wú)論是服務(wù)器程序、客戶端軟件還是操作系統(tǒng),只要是用代碼編寫的,都會(huì)存在不同程度的 Bug。Bug 主要分為以下幾類:(1)緩沖區(qū)溢出:指入侵者在程序的有關(guān)輸入項(xiàng)目中了輸入了超過(guò)規(guī)定長(zhǎng)度的字符串,超過(guò)的部分通常就是入侵者想要執(zhí)行的攻擊代碼,而程序編寫者又沒有進(jìn)行輸入長(zhǎng)度的檢查,最終導(dǎo)致多出的攻擊代碼占據(jù)了輸入緩沖區(qū)后的內(nèi)存而執(zhí)行。(2)意料外的聯(lián)合使用問(wèn)題:一個(gè)程序經(jīng)常由功能不同的多層
11、代碼組成,甚至?xí)婕暗阶畹讓拥牟僮飨到y(tǒng)級(jí)別。入侵者通常會(huì)利用這個(gè)特點(diǎn)為不同的層輸入不同的內(nèi)容,以達(dá)到竊取信息的目的。(3)不對(duì)輸入內(nèi)容進(jìn)行預(yù)期檢查:有些編程人員工作不負(fù)責(zé)任,對(duì)輸入內(nèi)容不進(jìn)行預(yù)期的匹配檢查,使入侵者輸送炸彈的工作變得非常簡(jiǎn)單。(4)Raceconditions:多任務(wù)多線程的程序越來(lái)越多,在提高運(yùn)行效率的同時(shí),也要注意 Raceconditions 的問(wèn)題。比如說(shuō):程序 A 和程序 B 都按照“讀/改/寫”的順序操作一個(gè)文件,當(dāng) A 進(jìn)行完讀和改的工作時(shí),B 啟動(dòng)立即執(zhí)行完“讀/改/寫”的全部工作,這時(shí) A 繼續(xù)執(zhí)行寫工作,結(jié)果是 A 的操作沒有了表現(xiàn)。入侵者就可能利用這個(gè)處理
12、順序上的漏洞改寫某些重要文件從而達(dá)到闖入系統(tǒng)的目的,所以,編程人員要注意文件操作的順序以及鎖定等問(wèn)題。第第 3 3 章章 本地緩沖區(qū)溢出的原理及實(shí)現(xiàn)本地緩沖區(qū)溢出的原理及實(shí)現(xiàn)3.13.1 緩沖區(qū)概念緩沖區(qū)概念緩沖區(qū),又稱中立區(qū)、中立地帶等,指的是兩地的交界處因?yàn)閼?zhàn)爭(zhēng)或其他因素,而劃定出的帶狀地區(qū),此帶狀地區(qū)并不完全屬于兩方之中的一方,通常由兩方共管或是由第三方協(xié)助管理。緩沖區(qū)是地理空間目標(biāo)的一種影響范圍或服務(wù)范圍,具體指在點(diǎn)、線、面實(shí)體的周圍,自動(dòng)建立的一定寬度的多邊形。緩沖區(qū)溢出的根本原因在于語(yǔ)言本身的一些特性。從數(shù)據(jù)結(jié)構(gòu)的角度來(lái)說(shuō),最根本的原因是由于指針、數(shù)組的存在,導(dǎo)致了一系列存儲(chǔ)操作上
13、的問(wèn)題。而直接的原因則是“沒有對(duì)數(shù)組的越界加以監(jiān)視和限制” 。程序編寫者的經(jīng)驗(yàn)不足或粗心大意使得緩沖區(qū)溢出幾乎無(wú)處不在,導(dǎo)致程序不夠健壯,為緩沖區(qū)溢出攻擊留下了隱患。緩沖區(qū)溢出攻擊利用了程序設(shè)計(jì)語(yǔ)言的安全缺陷,及程序員編寫代碼時(shí)的疏漏,將特定的內(nèi)容寫到緩沖區(qū)以外的特定內(nèi)存空間,以達(dá)到控制或破壞系統(tǒng)的目的。同時(shí)也得滿足以下幾個(gè)條件:(1)緩沖區(qū)溢出,首先要有一個(gè)緩沖區(qū),當(dāng)然不是所有的緩沖區(qū)都可以,要求是一塊有固定大小的緩沖區(qū),而且還要向這塊緩沖區(qū)中拷貝數(shù)據(jù)。(2)在程序中存在不規(guī)范,不安全的代碼,這是發(fā)生緩沖區(qū)溢出攻擊最主要的前提條件。黑客就是最先利用這些不安全,不規(guī)范的代碼,來(lái)首先取得系統(tǒng)的控
14、制權(quán)的,然后才利用系統(tǒng)的控制權(quán),進(jìn)一步實(shí)施攻擊,產(chǎn)生更大的危害。(3)程序運(yùn)行中棧的安排結(jié)構(gòu),有利于黑客展開緩沖區(qū)溢出攻擊,這是因?yàn)樵诔绦蜻\(yùn)行時(shí)通常棧是向下增長(zhǎng)的,即后進(jìn)棧的數(shù)據(jù)的地址小于先進(jìn)棧的數(shù)據(jù)的地址。這樣當(dāng)發(fā)生函數(shù)調(diào)用時(shí),首先壓棧的是該函數(shù)的參數(shù),然后是函數(shù)的返回地址,接下來(lái)是基指針,然后在進(jìn)入函數(shù)體以后還會(huì)保存一些寄存器的值,再把這些寄存器的值壓入棧頂,最后才是函數(shù)體中聲明的各個(gè)局部變量(即前文所說(shuō)的緩沖區(qū)),也有可能包含一些函數(shù)指針。因此得出結(jié)論:在函數(shù)運(yùn)行中緩沖區(qū)的地址低于寄存器的地址,低于基指針的地址,低于返回地址的地址,低于該函數(shù)的參數(shù)的地址。所以要是向緩沖區(qū)中拷貝超過(guò)其容量
15、大小的數(shù)據(jù),那么多出來(lái)的數(shù)據(jù)就會(huì)覆蓋寄存器的值,覆蓋基指針的值,覆蓋返回地址的值覆蓋參數(shù)的值,也完全可以覆蓋上層函數(shù)中的緩沖區(qū)等等,只要拷貝的數(shù)據(jù)足夠長(zhǎng)。而且棧所在的地址范圍又低于代碼所在的地址范圍,這樣也完全可能覆蓋程序中的代碼。(4)既使上訴條件都滿足,也不一定會(huì)發(fā)生緩沖區(qū)溢出攻擊,只能說(shuō)程序中存在緩沖區(qū)溢出漏洞,這是因?yàn)椴皇撬械穆┒炊寄鼙缓诳屠?。有些只是程序中存在的缺陷,黑客并沒有辦法或者說(shuō)暫時(shí)沒有辦法通過(guò)該漏洞取得系統(tǒng)的控制權(quán)限,來(lái)完成其進(jìn)一步攻擊的目的。3.23.2 緩沖區(qū)溢出攻擊原理緩沖區(qū)溢出攻擊原理當(dāng)正常的使用者操作程序的時(shí)候,所進(jìn)行的操作一般不會(huì)超出程序的運(yùn)行范圍,數(shù)據(jù)被添
16、加到分配給該緩沖區(qū)的內(nèi)存塊之外,會(huì)發(fā)生緩沖區(qū)溢出,這時(shí)候就會(huì)出現(xiàn)數(shù)據(jù)泄漏或侵占了其它的數(shù)據(jù)空間。緩沖區(qū)溢出的攻擊原理就是越過(guò)緩沖區(qū)長(zhǎng)度界限向程序中輸入超出其常規(guī)長(zhǎng)度的內(nèi)容,造成緩沖區(qū)的溢出從而破壞程序的堆棧,使程序運(yùn)行出現(xiàn)特殊的問(wèn)題轉(zhuǎn)而執(zhí)行其它指令。一般來(lái)說(shuō),單單的緩沖區(qū)溢出,并不會(huì)產(chǎn)生安全問(wèn)題,如果將溢出送到能夠以 root 權(quán)限或其它超級(jí)權(quán)限運(yùn)行命令的區(qū)域去執(zhí)行某些代碼或者運(yùn)行一個(gè) shell 的時(shí)候,該程序就是以超級(jí)用戶的權(quán)限控制了計(jì)算機(jī)。例如,有一段程序段如圖 3.1(a)所示,運(yùn)行時(shí)當(dāng)進(jìn)入一個(gè)過(guò)程,就有一個(gè)活動(dòng)記錄累筑于棧頂。sub 的活動(dòng)記錄如圖 3.1(b)所示,包含連接數(shù)據(jù)、形
17、式單元、局部變量、局部數(shù)組的內(nèi)情向量和臨時(shí)工作單元等。其中連接數(shù)據(jù)有兩個(gè):一個(gè)是老 SP 值,即前一活動(dòng)記錄的地址,另一為返回地址。圖 3.1 緩沖區(qū)漏洞的例子argv1是通過(guò)命令行傳遞給 main 的參數(shù),由于 strcpy()函數(shù)不進(jìn)行越界檢查,argv1中的內(nèi)容將完整地復(fù)制到 buf 中,如果 arg1中的內(nèi)容長(zhǎng)度超出了 buf 的范圍,多余的內(nèi)容將被寫出 buf 的后續(xù)地址中,而在函數(shù)堆棧中,局部變量之后存放的有 SP 幀指針和函數(shù)返回地址。因此黑客可以通過(guò)填寫argv 的內(nèi)容,在 strcpy 出現(xiàn)緩沖區(qū)溢出時(shí)讓程序轉(zhuǎn)去執(zhí)行相應(yīng)的攻擊代碼,完成對(duì)系統(tǒng)的攻擊。如圖 3.1(c)所示,老
18、 SP 值被修改指向緩沖區(qū)的地址返回地址被修改指向惡意代碼的入口地址。當(dāng) sub 返回時(shí),程序?qū)⑥D(zhuǎn)去執(zhí)行惡意代碼,從而達(dá)到攻擊目的。因此,為防止緩沖區(qū)溢出攻擊,開發(fā)軟件時(shí)應(yīng)該盡量使用帶邊界檢查的函數(shù),或主動(dòng)進(jìn)行邊界檢查。3.33.3 緩沖區(qū)溢出實(shí)現(xiàn)方式緩沖區(qū)溢出實(shí)現(xiàn)方式利用跳轉(zhuǎn)指令實(shí)現(xiàn)溢出利用跳轉(zhuǎn)指令實(shí)現(xiàn)溢出在調(diào)用函數(shù)時(shí),以下內(nèi)容會(huì)依次壓棧:該函數(shù)的參數(shù)(按從右向左的順序壓棧),函數(shù)的返回地址,為該函數(shù)調(diào)用分配局部??臻g之前的 EBP 寄存器的值。這些東西調(diào)試程序的時(shí)候看一看對(duì)應(yīng)的匯編代碼、對(duì)應(yīng)地址處的內(nèi)存內(nèi)容和相關(guān)寄存器的值就會(huì)一清二楚。函數(shù)調(diào)用完成后會(huì)執(zhí)行 ret 指令,ret 指令執(zhí)行完
19、后 esp 寄存器中會(huì)指向棧的原始區(qū)(執(zhí)行函數(shù)調(diào)用之前的那個(gè)棧的棧頂),所以把 shellcode 放在棧的原始區(qū),把返回地址修改后指令 jmpesp 的地址就可以,這條 jmpesp 指令的地址是通過(guò)在操作系統(tǒng)的幾個(gè)核心 DLL 中查找的。整個(gè)實(shí)驗(yàn)過(guò)程就是寫代碼時(shí)調(diào)用一個(gè)函數(shù),然后在調(diào)用函數(shù)的過(guò)程中實(shí)現(xiàn)棧溢出。圖 3.2 溢出前后堆棧分布狀態(tài)對(duì)照?qǐng)D 3.2,在程序正常執(zhí)行時(shí),memcpy 函數(shù)被執(zhí)行完畢后,指令指針會(huì)返回至 ret 地址處,繼續(xù)執(zhí)行 memcpy 函數(shù)調(diào)用處的后續(xù)指令;同時(shí),執(zhí)行完ret 指令后 ESP 指針也會(huì)指向堆棧原始區(qū)(調(diào)用 memcpy 函數(shù)前一時(shí)刻的堆棧分布) 。
20、因此,我們可以將溢出代碼 shellcode 存在堆棧原始區(qū),而剩下的工作就是在 memcpy 執(zhí)行返回時(shí)讓 EIP 指針指向原始區(qū)(也就是 ESP 指針指向的地址)即可。如何通過(guò) ret 返回地址確定此時(shí)的堆棧 ESP 指針指向呢?在這里采用的方法是通過(guò)跳轉(zhuǎn)指令“jmpesp”(無(wú)條件跳轉(zhuǎn)至 esp 指向處執(zhí)行)。通過(guò)在用戶地址空間中查找到包含有“jmpesp”指令的存儲(chǔ)地址,用該地址覆蓋 ret 返回地址就可以了。在具體實(shí)現(xiàn)時(shí),我們通過(guò)三個(gè)步驟完成緩沖區(qū)溢出:(1)編寫前導(dǎo)碼。所謂前導(dǎo)碼就是用于覆蓋局部變量到 ret 返回地址之間的堆棧空間(不包括ret 返回地址空間)的指令碼。前導(dǎo)碼僅是
21、用于填充堆棧,所以其內(nèi)容不受限制。我們需要在實(shí)際的調(diào)試中來(lái)確定前導(dǎo)碼的大小。(2)查找 jmpesp 指令地址。用”jmpesp”指令的地址覆蓋 ret,就可以在 memcpy 執(zhí)行返回后,讓 CPU執(zhí)行跳轉(zhuǎn)指令,所以首要解決的是在用戶空間中找到含有“jmpesp”指令的地址。通過(guò) VC+6.0 的反匯編功能得到“jmpesp”指令的機(jī)器碼為 0 xFFE4。利用FindJmpesp 工具進(jìn)行指令查找,確定一個(gè)含有“jmpesp”指令的內(nèi)存地址。(3)shellcode 功能體。shellcode 功能體實(shí)現(xiàn)了溢出后主要的執(zhí)行功能,如創(chuàng)建超級(jí)用戶,提升用戶權(quán)限等。在這里我們通過(guò)自定義指令來(lái)實(shí)現(xiàn)
22、彈出用戶對(duì)話框。攻擊者可以利用緩沖區(qū)溢出漏洞,通過(guò)溢出來(lái)獲取程序的控制權(quán)。若此程序具有足夠的權(quán)限,則攻擊者就因此獲得了系統(tǒng)的控制權(quán)。要實(shí)施一次有效的緩沖區(qū)溢出攻擊,攻擊者必須完成如下任務(wù):(a)在程序的地址空間里植入適當(dāng)?shù)拇a(稱為 shellcode)用于完成獲取系統(tǒng)控制權(quán)等非法任務(wù)。(b)通過(guò)修改寄存器或內(nèi)存,讓程序執(zhí)行流跳轉(zhuǎn)到攻擊者植入的shellcode 地址空間執(zhí)行。下面以棧溢出為例,簡(jiǎn)要介紹一下這兩個(gè)任務(wù)的實(shí)現(xiàn)方法:(a)shellcode 植入:當(dāng)緩沖區(qū)溢出發(fā)生在程序的 IO 操作附近時(shí),攻擊者可以直接利用程序的輸入,向程序中植入 shellcode。(b)程序執(zhí)行流程的跳轉(zhuǎn):s
23、hellcode 植入后,緩沖區(qū)溢出便會(huì)發(fā)生,以上面的棧溢出為例,如圖 3.3,函數(shù)調(diào)用的返回地址被覆蓋為 AAAAA,這樣當(dāng)此函數(shù)執(zhí)行完畢返回時(shí),程序執(zhí)行流會(huì)跳轉(zhuǎn)到 0 xAAAAA(即 shellcode)處繼續(xù)執(zhí)行。圖 3.3 堆棧溢出定位參數(shù)地址實(shí)現(xiàn)溢出定位參數(shù)地址實(shí)現(xiàn)溢出首先看下面的代碼片段。Void overflow(const char* ptr, int len) Char buff400; Memcpy(buff,ptr,len);其中第二參數(shù) len 的值為第一參數(shù) ptr 指向的字符串長(zhǎng)度。在函數(shù)參數(shù) ptr 不為空的情況下,當(dāng) len 小于 400 時(shí),該段代碼能夠正常
24、運(yùn)行。overflow 函數(shù)被調(diào)用執(zhí)行時(shí)內(nèi)存堆棧分布如圖 3.4 左側(cè)所示:首先是overflow 調(diào)用執(zhí)行后的下一條指令地址入棧(ret 返回地址),overflow 調(diào)用前堆棧基址指針入棧(原 ebp),接下來(lái)堆?;分羔樦赶虍?dāng)前棧頂(ebp 指向),最后 esp 棧頂指針減去若干字節(jié)(大于 400)完成緩沖區(qū)劃分。而 ebp 指針減去 400就應(yīng)是局部變量 buff 指針指向。圖 3.4 緩沖區(qū)溢出前后堆棧的分布當(dāng) len 大于 400 時(shí),該段代碼就會(huì)產(chǎn)生溢出,如圖 3.4 右側(cè)所示,溢出的數(shù)據(jù)會(huì)覆蓋原 ebp 地址和 ret 返回地址,使其遭到破壞。設(shè)想:(1)用 shellcode
25、 指令首地址覆蓋 ret 返回地址,當(dāng) buff 緩沖區(qū)存放shellcode 時(shí),shellcode 指令首地址即為 buff 緩沖區(qū)地址。(2)保持原 ebp 基址不被溢出數(shù)據(jù)覆蓋掉,即用 overflow 調(diào)用前的 ebp基址覆蓋原 ebp 基址。(3)在 shellcode 相關(guān)指令被執(zhí)行完成后,后續(xù)代碼應(yīng)繼續(xù)被執(zhí)行,利用跳轉(zhuǎn)指令可以執(zhí)行 overflow 后續(xù)代碼。所以溢出后的程序執(zhí)行流程就是:指令寄存器 EIP 指向 buff 基址執(zhí)行shellcode 指令,待 shellcode 相關(guān)指令完成后通過(guò) jmp 跳轉(zhuǎn)指令跳轉(zhuǎn)至 ret返回地址繼續(xù)執(zhí)行。將 shellcode 指令按
26、功能分為三部分來(lái)進(jìn)行考慮。第一部分是 shellcode頭,其主要功能是保護(hù)當(dāng)前寄存器狀態(tài),為執(zhí)行 shellcode 功能體做準(zhǔn)備;第二部分是 shellcode 功能體,由其完成一定的功能如彈出對(duì)話框、添加新用戶等;最后一部分就是 shellcode 尾,其功能是恢復(fù)寄存器狀態(tài)、跳轉(zhuǎn)至正常執(zhí)行時(shí)下一條指令地址。另外 shellcode 的最后 4 字節(jié)應(yīng)該是覆蓋 ret 返回地址的地址。(1)shellcode 頭。功能:在內(nèi)存堆棧中劃分額外空間(shellcode 功能體使用),并保護(hù)當(dāng)前寄存器狀態(tài)。實(shí)現(xiàn)代碼:_asmsub esp, 1024hpushad(2)shellcode 功能
27、體。功能:完成具體執(zhí)行功能。實(shí)現(xiàn)代碼:具體參見實(shí)現(xiàn)步驟。利用 ShellExecuteAAPI 函數(shù)運(yùn)行控制臺(tái)程序 net 實(shí)現(xiàn)添加系統(tǒng)用戶是一個(gè)不錯(cuò)的選擇,net 添加用戶及提升用戶權(quán)限命令如下:新建用戶:netuserusernamepassword/add用戶所屬組:netlocalgroupadministratorsusername/add調(diào)用執(zhí)行:ShellExecuteA(0,“open”,“net”,net 執(zhí)行參數(shù),SWHIDE)其中 username 是新建用戶名稱,password 是用戶口令,/addShellExecute 的功能是運(yùn)行一個(gè)外部程序(或者是打開一個(gè)已注
28、冊(cè)的文件、打開一個(gè)目錄、打印一個(gè)文件等等),并對(duì)外部程序有一定的控制。如果指定的文件是可執(zhí)行文件,函數(shù)將以 open 的方式打開這個(gè)文件。(3)shellcode 尾。功能:恢復(fù)寄存器狀態(tài);shellcode 功能體執(zhí)行完成后,跳轉(zhuǎn)到指定代碼地址繼續(xù)執(zhí)行;使用新地址覆蓋原 ebp 地址及 ret 返回地址。實(shí)現(xiàn)代碼:_asm popad add esp, 102Ch mov edx, OxXXXXXXXX jmp edx通過(guò) popad 指令將恢復(fù)所有普通寄存器先前狀態(tài)?;謴?fù)棧頂指針。通過(guò) jmp 指令無(wú)條件跳轉(zhuǎn)至 0 xXXXXXXXX 處執(zhí)行指令。具體實(shí)現(xiàn)過(guò)程如下:(1)使用 VC 編寫項(xiàng)
29、目文件:CreateShellCode、OverFlowClient 和OverFlowServer。(2)生成 shellcode 功能體(a)首先設(shè)置 OverFlowClient 項(xiàng)目為啟動(dòng)項(xiàng)。(b)雙擊打開 OverFlowClient.cpp 源文件,在該源文件中需要填寫的代碼有:kernel32.dll 基址(第 21 行) ,LoadlibraryA 函數(shù)的絕對(duì)內(nèi)存地址(第23 行)和 shellExecuteA 函數(shù)(隸屬于 Shell32.dll 動(dòng)態(tài)庫(kù))的絕對(duì)內(nèi)存地址。(c)編譯并生成 OverFlowClient.exe,執(zhí)行 OverFlowClient.exe,確定系
30、統(tǒng)是否新建了 jlcss 用戶,并隸屬 Administrators 組。(3)生成 shellcode 指令碼(a)設(shè)置 CreateShellCode 為啟動(dòng)項(xiàng)。雙擊打開 CreateShellCode.cpp 源文件,CreateShellCode 的工作流程是:首先生成 shellcode 頭,并將相關(guān)指令碼寫入 shellcode.shc 文件中;接下來(lái)是生成 shellcode 功能體,功能體代碼來(lái)自 OverFlowClient.exe 中 shellcode函數(shù)執(zhí)行體,將功能體代碼追加到 shellcode.shc 中;最后是生成 shellcode尾,同樣將其指令碼追加到 s
31、hellcode.shc 中。(b)這里需要填寫的宏數(shù)值有:SHELLCODEBODYSTART(OverFlowClient.exe 中 ShellCode 主體起始偏移地址) ;SHELLCODEBODYLEN(OverFlowClient.exe 中 ShellCode 主體代碼長(zhǎng)度) ;CORRECTRETURNADDR(OverFlowServer 中 overflow 調(diào)用完成后程序正常執(zhí)行返回地址,即 OverFlow 正常調(diào)用完成后的下一條指令地址) ;在 OverFlowServer 中函數(shù) OverFlow 調(diào)用執(zhí)行前,ebp 基地指針地址;OverFlow 溢出返回地址,
32、即函數(shù)溢出后 shellcode 得以執(zhí)行的首地址。獲取 SHELLCODEBODYSTART、SHELLCODEBODYLEN 值調(diào)試 OverFlowClient.exe(將該項(xiàng)目設(shè)置為啟動(dòng)項(xiàng))確定 ShellCode 函數(shù)入口偏移地址及函數(shù)體大小,調(diào)試過(guò)程參見圖 3.3 所示。圖 3.5 shellcode 函數(shù)開始、結(jié)束偏移地址根據(jù)調(diào)試結(jié)果填寫 CreateShellCode.cpp 源文件中 SHELLCODEBODYSTART宏和 SHELLCODEBODYLEN 宏的值。其它數(shù)值需要通過(guò)調(diào)試 OverFlowServer 來(lái)獲取,而 OverFlowServer 的執(zhí)行又依賴于
33、shellcode.shc 文件,所以暫且編譯生成 CreateShellCode.exe文件,執(zhí)行該文件生成臨時(shí) shellcode.shc 文件。(4)調(diào)用 OverFlowServer通過(guò)上述步驟,已經(jīng)獲得了 ShellCode 執(zhí)行體指令碼,還需要獲取溢出后程序正常返回地址、OverFlow 函數(shù)調(diào)用前 ebp 基礎(chǔ)指針地址和 shellcode 執(zhí)行的緩沖區(qū)首地址。(a)OverFlow 正常調(diào)用返回時(shí)的下一條指令地址。設(shè)置 OverFlowServerfiles 為啟動(dòng)項(xiàng),雙擊打開 OverFlowServer.cpp 文件。程序首先打開存放 shellcode 指令碼的文件(默認(rèn)
34、名稱為 shellcode.shc),讀取 shellcode.shc 的全部?jī)?nèi)容至接收緩沖區(qū)中。接下來(lái)就是利用 memcpy 函數(shù)實(shí)現(xiàn)接收緩沖區(qū)的拷貝,目標(biāo)地址是 OverFlow 函數(shù)內(nèi)的局部緩沖區(qū),該緩沖區(qū)默認(rèn)大小為 450 字節(jié),需要根據(jù)實(shí)際調(diào)試結(jié)果重新確定其大小。最后在 OverFlow調(diào)用完成后程序繼續(xù)執(zhí)行(溢出執(zhí)行后程序依然能夠正常繼續(xù)運(yùn)行)。調(diào)整 TempBuffer 緩沖區(qū)大小,使其大于臨時(shí) shellcode 指令碼長(zhǎng)度,這樣做的目的是讓程序正常執(zhí)行(不發(fā)生溢出) ,以便我們能夠獲取 OverFlow 函數(shù)執(zhí)行調(diào)用后的正確返回地址。調(diào)試獲取 OverFlow 函數(shù)正常調(diào)用執(zhí)
35、行后的下一條指令地址。調(diào)試過(guò)程如圖 3.6 所示。圖 3.6 函數(shù)溢出后返回地址填寫該指針地址到 CreateShellCode.cpp 文件中。(b)OverFlow 函數(shù)調(diào)用前 ebp 基地址指針。單步調(diào)試程序定位到 OverFlow 函數(shù)入口處,獲取此時(shí)的 EBP 指針地址,如圖 3.7 所示。圖 3.7 verFlow 調(diào)用執(zhí)行前 EBP 指針地址填寫 EBP 指針地址到 CreateShellCode.cpp 文件中。(c)最后確定 shellcode 的最后 4 字節(jié),從原理中可知需用這 4 字節(jié)數(shù)覆蓋調(diào)用返回地址,使得 shellcode 得以執(zhí)行。從 OverFlowServe
36、r 程序又可知shellcode 最后被加載到 TempBuffer 緩沖區(qū),所以只要用 TempBuffer 緩沖區(qū)首地址覆蓋調(diào)用返回地址,在程序溢出后 shellcode 便會(huì)執(zhí)行了。調(diào)用OverFlowServer.exe 確定 OverFlow 調(diào)用執(zhí)行過(guò)程中 TempBuffer 緩沖區(qū)的首地址。調(diào)試過(guò)程如圖 3.8 所示。圖 3.8 局部變量?jī)?nèi)存地址將 TempBuffer 緩沖區(qū)首地址填寫到 CreateShellCode.cpp 文件中。(5)調(diào)試確定 TempBuffer 緩沖區(qū)大小調(diào)試 OverFlowServer.exe 得到 OverFlow 調(diào)用返回時(shí)的地址,將返回地
37、址與 shellcode.shc 中的十六數(shù)相比較,有三種比較結(jié)果:(a)返回地址是 shellcode 最后 4 字節(jié)數(shù)據(jù)。函數(shù)返回時(shí)執(zhí)行shellcode。(b)返回地址沒有在 shellcode.sh 中,緩沖區(qū)空間過(guò)大,溢出未發(fā)生??梢钥s小緩沖區(qū)空間或在最后 8 個(gè)字節(jié)前用 0 x90(空指令)補(bǔ)充。(c)返回地址在 shellcode.sh 中(不是最后 4 字節(jié)數(shù)據(jù)),緩沖區(qū)空間過(guò)小。放大緩沖區(qū)空間。當(dāng)改變 TempBuffer 緩沖區(qū)大小時(shí),其首地址可能會(huì)發(fā)生變動(dòng),調(diào)試確定TempBuffer 首地址,重新填寫 CreateShellCode.cpp,并重新生成shellcode
38、.shc。經(jīng)過(guò)多次調(diào)試后確定緩沖區(qū)大小,當(dāng)滿足第一種比較結(jié)果時(shí),緩沖區(qū)溢出就可以執(zhí)行下去。運(yùn)行程序,查看系統(tǒng)用戶 jlcss(若 jlcss 用戶已存在,請(qǐng)先將其刪除再運(yùn)行程序)及其所屬用戶組。溢出實(shí)現(xiàn)用戶權(quán)限提升溢出實(shí)現(xiàn)用戶權(quán)限提升Windows 每年都會(huì)有無(wú)數(shù)的漏洞被曝光,其中影響最大危害最深的就是溢出漏洞。而溢出漏洞又分為兩類,一類是遠(yuǎn)程溢出漏洞,一類是本地溢出漏洞,前者經(jīng)常被黑客利用來(lái)入侵網(wǎng)絡(luò)上的主機(jī),后者通常被用來(lái)進(jìn)行本地的賬戶權(quán)限提升。Windows 的本地權(quán)限溢出漏洞有很多,如最新的MicrosoftWindows 鍵盤事件權(quán)限提升漏洞。該漏洞通過(guò)向以更高權(quán)限運(yùn)行的桌面應(yīng)用程序(
39、如explorer.exe)發(fā)送惡意的鍵盤事件,以此得到一個(gè)擁有最高權(quán)限的 shell,在這個(gè) shell 中可以執(zhí)行任意命令,例如建立刪除賬戶,訪問(wèn)修改文件等,當(dāng)然也包括將用戶級(jí)別的賬戶提升為系統(tǒng)權(quán)限。1、設(shè)置溢出文件所屬用戶(1)復(fù)制文件 attack 和 overflow 到 guest 用戶主目錄/home/guest 中。(2)切換工作目錄至/home/guest/,修改 attack 文件屬性及用戶權(quán)限,要求文件隸屬 guest 用戶,隸屬 guest 組,具體命令:chownguestattack、chgrpguestattack。(3)設(shè)置 overflow 文件 suid 屬
40、性,具體命令:chmoda+soverflow。2、切換用戶登錄注銷當(dāng)前用戶(root),以 guest 用戶身份登錄系統(tǒng)。3、提升權(quán)限(1)輸入命令:whoami,當(dāng)前登錄的用戶是 guest。(2)輸入命令:cat/etc/shadow,嘗試查看陰影文件,此時(shí)系統(tǒng)提示沒有這個(gè)文件或目錄。上述情況證實(shí)用戶有對(duì)陰影文件的訪問(wèn)權(quán),其它任何用戶均無(wú)此權(quán)限。(3)輸入命令:passwdroot,嘗試修改 root 用戶登錄口令,此時(shí)系統(tǒng)提示 Only root can specify a user name。(4)執(zhí)行 attack 應(yīng)用程序。(5)當(dāng)運(yùn)行 attack 后出現(xiàn)“sh-3.1#”提示
41、符時(shí),表明緩沖區(qū)溢出成功。此時(shí)我們就擁有了超級(jí)用戶(root)的權(quán)限,擁有對(duì)陰影文件的訪問(wèn)權(quán)限,隨后我們可以用口令破解程序(如 john)對(duì)該陰影文件進(jìn)行口令破解。(6)在溢出成功后對(duì) root 口令進(jìn)行修改,輸入命令:passwdroot 修改root 用戶口令。4、 root 用戶重新登錄注銷結(jié)束當(dāng)前會(huì)話,以 root 身份重新登錄系統(tǒng)。(1)獲取 explorer.exe 進(jìn)程的 PID 值由于漏洞利用程序 keybd.exe 的溢出原理,需要用到 explorer.exe 進(jìn)程的PID 值。我們的第一步工作就是得到 explorer.exe 進(jìn)程所相對(duì)應(yīng)的 PID 值。右鍵點(diǎn)擊工具欄,
42、選擇任務(wù)管理器,在進(jìn)程標(biāo)簽中可以看到當(dāng)前系統(tǒng)中運(yùn)行的所有進(jìn)程,查看進(jìn)程的 PID 值。(2)用keybd.exe進(jìn)行溢出點(diǎn)擊開始運(yùn)行,輸入CMD運(yùn)行命令提示符,在命令提示符中運(yùn)行keybd。exe,其溢出格式如下keybd。exeexplorer。exe 進(jìn)程的 PID 值,根據(jù)上文中得出的 PID 值,我們輸入keybd。exe1300即可。如果溢出成功,會(huì)出現(xiàn)一個(gè)新的命令提示符窗口。(3)得到系統(tǒng)權(quán)限溢出成功后,使用 NC 來(lái)獲取一個(gè)擁有系統(tǒng)權(quán)限的 shell。在命令提示符中運(yùn)行 NC,輸入命令nc-vvlocalhost65535,回車后就會(huì)得到一個(gè)擁有系統(tǒng)權(quán)限的 shell,在這個(gè) s
43、hell 中可以執(zhí)行任意命令,我們的目標(biāo)是將當(dāng)前使用的用戶權(quán)限賬戶提升為管理員權(quán)限。第第 4 4 章章 基于緩沖區(qū)溢出的防御方法基于緩沖區(qū)溢出的防御方法防范緩沖區(qū)溢出,要從主觀和客觀兩方面進(jìn)行入手,主觀方面,要提高程序員的編程水平;客觀方面,從底層系統(tǒng)入手,啟用自動(dòng)保護(hù)程序,盡量避免緩沖區(qū)溢出問(wèn)題的發(fā)生,也可以從系統(tǒng)和軟件兩方面入手;遺憾的是,迄今所見的所有方法都具有弱點(diǎn),因此它們不是萬(wàn)能藥,但是它們會(huì)提供一些幫助。下面對(duì)于緩沖區(qū)溢出的特點(diǎn),探討一下防范策略。在編寫程序的時(shí)候程序員有責(zé)任和義務(wù)養(yǎng)成安全編程的思想,應(yīng)該熟悉那些可能會(huì)產(chǎn)生緩沖區(qū)溢出漏洞的函數(shù),清楚那些在編程中要小心使用的函數(shù)。在軟
44、件測(cè)試階段,測(cè)試人員要專門對(duì)程序中的每個(gè)緩沖區(qū)作邊界檢查和溢出檢測(cè)。但是,由于程序員的經(jīng)驗(yàn)不足和測(cè)試工作不夠全面,目前還不可能完全避免緩沖區(qū)溢出漏洞,因此這些漏洞在已經(jīng)使用以及正在開發(fā)的軟件中還是有存在的可能性,還需要在使用軟件時(shí),對(duì)它做實(shí)時(shí)的監(jiān)測(cè)。當(dāng)前,由于計(jì)算機(jī)廠商和系統(tǒng)開發(fā)商的努力,現(xiàn)在的計(jì)算機(jī)一般使用一種叫數(shù)據(jù)執(zhí)行保護(hù)(DEP)的技術(shù),如果數(shù)據(jù)出現(xiàn)在標(biāo)記為不被執(zhí)行的內(nèi)存頁(yè)中,CPU 將不予執(zhí)行。從而有效的防護(hù)溢出漏洞。WindowsXPSP2 及WindowsServer2003 現(xiàn)在已支持這些技術(shù),目前市面上的大多數(shù)的 32 位 CPU 及全部的 64 位 CPU,都支持 NoExe
45、cute(NX)這類安全增強(qiáng)技術(shù)。另外在 VisualStudio2003 及以后微軟的 VC+開發(fā)平臺(tái)中,編譯器都加入了一個(gè)/GS 開關(guān)(即緩沖區(qū)安全檢查設(shè)置項(xiàng)) ,該開關(guān)的打開,優(yōu)化了代碼的順序,能有效防止因內(nèi)存溢出而覆蓋程序重要數(shù)據(jù)現(xiàn)象的發(fā)生。默認(rèn)情況下該開關(guān)是打開的。4.14.1 關(guān)閉不需要的特權(quán)程序關(guān)閉不需要的特權(quán)程序由于緩沖區(qū)溢出只有在獲得更高的特權(quán)時(shí)才有意義,所以帶有特權(quán)的程序都經(jīng)常是緩沖區(qū)溢出攻擊的目標(biāo)。這時(shí)候,關(guān)閉一些不必要的特權(quán)程序就可以降低被攻擊的風(fēng)險(xiǎn),當(dāng)有緩沖區(qū)溢出漏洞的程序還沒有補(bǔ)丁時(shí),就可以用這種方法。4.24.2 關(guān)閉或修改系統(tǒng)的某些版本信息關(guān)閉或修改系統(tǒng)的某些版
46、本信息攻擊者攻擊某一個(gè)系統(tǒng),必須事先通過(guò)某些途徑(如通過(guò) rpc 連接)對(duì)要攻擊的系統(tǒng)做必要的了解,如版本信息等,然后再利用系統(tǒng)的某些設(shè)置直接或間接地獲取控制權(quán)。因此,防范緩沖區(qū)溢出攻擊的另一個(gè)方面就是對(duì)系統(tǒng)設(shè)置實(shí)施有效的安全策略。這些策略種類很多,比較典型措施有:(1)在裝有 Telnet 服務(wù)的情況下,通過(guò)手工改寫“/etc/inetd.conf”文件中的 Telnet 設(shè)置,使得遠(yuǎn)程登錄的用戶無(wú)法看到系統(tǒng)的提示信息。具體方法是將 Telnet 設(shè)置改寫為:telnetstreamtcpnowaitroot/usr/sbin/tcpd/in.telnetd-h 末尾加上“-h”參數(shù)可以讓守
47、護(hù)進(jìn)程不顯示任何系統(tǒng)信息,只顯示登錄提示,這樣用戶在發(fā)出遠(yuǎn)程登錄的時(shí)候,沒有任何可用的信息,他不知道什么版本,自然想得到某種版本的漏洞信息就比較困難了。(2)改寫“rc.local”文件。默認(rèn)情況下,當(dāng)?shù)卿?Linux 系統(tǒng)時(shí)系統(tǒng)運(yùn)行rc.local 文件,顯示該 Linux 發(fā)行版本的名字、版本號(hào)、內(nèi)核版本和服務(wù)器名稱等信息,這使得大量系統(tǒng)信息被泄露。將“rc.local”文件中顯示這些信息的代碼注釋掉,可以使系統(tǒng)不顯示這些信息。另一種方法是將保存有系統(tǒng)信息的文件/etc/issue.Net 和 issue 刪除。這兩個(gè)文件分別用于在遠(yuǎn)程登錄和本地登錄時(shí)向用戶提供相關(guān)信息。刪除這兩個(gè)文件的同
48、時(shí),仍需要完成方法一中的注釋工作,否則,系統(tǒng)在啟動(dòng)時(shí)將會(huì)自動(dòng)重新生成這兩個(gè)文件。(3)禁止提供 finger 服務(wù)。在 Linux 系統(tǒng)中,使用 finger 命令可以顯示本地或遠(yuǎn)程系統(tǒng)中目前已登錄用戶的詳細(xì)信息。禁止提供 finger 服務(wù)的有效方法是,通過(guò)修改該文件屬性、權(quán)限(改為 600)使得只有 root 用戶才可以執(zhí)行該命令。(4)處理“inetd。conf”文件。Linux 系統(tǒng)通過(guò) inetd(超級(jí)服務(wù)器)程序根據(jù)網(wǎng)絡(luò)請(qǐng)求裝入網(wǎng)絡(luò)程序。該程序通過(guò)“/etc/inetd。conf”文件獲得inetd 在監(jiān)聽哪些網(wǎng)絡(luò)端口,為每個(gè)端口啟動(dòng)哪些特定服務(wù)等信息。因此,該文件同樣會(huì)泄露大量的敏感信息。解決問(wèn)題的方法是,通過(guò)將其權(quán)限改為 600只允許 root 用戶訪問(wèn),并通過(guò)改寫“/etc/inetd。conf”文件將不需要的服務(wù)程序禁止掉,最后修改該文件的屬性使其不能被修改。還有預(yù)防 ping 命令處理等系統(tǒng)策略。4.34.3 使堆棧向高地址方向增長(zhǎng)使堆棧向高地址方向增長(zhǎng)緩沖區(qū)溢出的一個(gè)重要要素是植入的代碼成功地被執(zhí)行。最常見的是被植入的代碼放在堆棧區(qū)中。通過(guò)修改操作系統(tǒng)核心,在核心層引入保護(hù)機(jī)制,限制代碼在堆棧區(qū)的執(zhí)行,這樣,緩沖區(qū)溢出攻擊就不可能成功。到目前為止,本文在討論利用函數(shù)返回地址控制程序轉(zhuǎn)移到攻擊代碼的攻擊方法時(shí),有一
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中考語(yǔ)文一輪復(fù)習(xí):小說(shuō)中的環(huán)境描寫知識(shí)點(diǎn)及訓(xùn)練
- 2025年中考語(yǔ)文一輪復(fù)習(xí):古詩(shī)詞閱讀重點(diǎn)考點(diǎn)解讀 講義
- 廣東省廣州市藝術(shù)中學(xué)2024-2025學(xué)年高一上學(xué)期期末考試數(shù)學(xué)試卷(解析版)
- 屏蔽機(jī)房施工方案模板
- 基礎(chǔ)分部工程施工方案
- 室外大棚導(dǎo)線施工方案
- 2025年葡語(yǔ)語(yǔ)音考試題及答案
- 6個(gè)月寶寶早教兒歌
- 低分子量聚丙烯酸對(duì)卡波姆樹脂的影響
- 4年級(jí)下冊(cè)人教版要寫的字第三課
- 科學(xué)研究方法與學(xué)術(shù)論文寫作
- 最新人音版音樂二年級(jí)下冊(cè)全冊(cè)教案
- 航空航天概論(課堂PPT)
- 新改版教科版六年級(jí)下冊(cè)科學(xué)全冊(cè)知識(shí)點(diǎn)歸納 (超全)
- 英語(yǔ)的起源與發(fā)展(課堂PPT)
- 藥物化學(xué)結(jié)構(gòu)式大全(高清版)
- 二房東租房合同范文
- 影視旅游作品對(duì)游客出游動(dòng)機(jī)及行為意向的影響研究
- 物業(yè)工程人員入戶維修流程
- 【圖文】煤礦井下常見的失爆現(xiàn)象
- 我的寒假生活模板
評(píng)論
0/150
提交評(píng)論