楊國旗
【摘要】 計算機網(wǎng)絡(luò)技術(shù)現(xiàn)在已經(jīng)得到了廣泛的應(yīng)用,對工作和生活均有著重要影響。但是因為網(wǎng)絡(luò)環(huán)境的特殊性,很容易受到外部攻擊影響,安全性較低,尤其是利用網(wǎng)絡(luò)漏洞進行攻擊為最為常見的威脅。緩沖區(qū)溢出漏洞攻擊作為主要威脅形式,必須要確定其特點,有針對性的采取措施進行處理優(yōu)化,降低攻擊帶來的影響,本文對此進行了簡要分析。
【關(guān)鍵詞】 緩沖區(qū) 漏洞攻擊 安全性
安全問題一直都是計算機網(wǎng)絡(luò)運行分析要點,隨著計算機技術(shù)水平的提高,黑客攻擊方式也在不斷更新,通過層出不窮的手段和控制方法對網(wǎng)絡(luò)運行帶來巨大的威脅。利用緩沖區(qū)溢出漏洞來對計算機系統(tǒng)進行攻擊,在日常操作中比較常見,想要有效解決此類問題,必須要確定攻擊原理,有的放矢的應(yīng)用有效手段進行優(yōu)化。
一、緩沖區(qū)溢出漏洞分析
緩沖區(qū)即計算機內(nèi)存塊在內(nèi)存地址的連續(xù)分配地址,而緩沖區(qū)溢出漏洞則是因為內(nèi)存邊界檢查機制在C語言或者C++語言設(shè)計時,未設(shè)置邊界造成。就象現(xiàn)在計算機操作系統(tǒng),大部分均是選擇用C語言或者C++語言編寫,如果計算機程度想要將寫入地址超出內(nèi)存邊界,便會產(chǎn)生非法操作[1]。如將寫入數(shù)據(jù)保存到臨近內(nèi)存地址內(nèi),出現(xiàn)錯誤運行命令,情況嚴重甚至會造成系統(tǒng)崩潰。或者是基于漏洞執(zhí)行操作命令,得到系統(tǒng)最高執(zhí)行權(quán),并操作干擾機器攻擊軟件系統(tǒng)。
二、緩沖區(qū)溢出漏洞攻擊分析
2.1確定溢出點
要對漏洞發(fā)現(xiàn)人或者組織原始資料進行全面收集,其根據(jù)漏洞描述重現(xiàn)漏洞。其中,漏洞重現(xiàn)時要重點做好操作系統(tǒng)類型、軟件環(huán)境和補丁版本等選擇。同時還要注意對相關(guān)出錯信息的收集,例如程序出錯原因以及出錯時EIP值。另外,可以利用Ollydbg、SoftICE等調(diào)試工具對溢出情況進行分析,對存在問題的執(zhí)行流程進行跟蹤,最終確定溢出點。
2.2 JMP ESP覆蓋
確定溢出點以后,便可以構(gòu)造攻擊語句。JMP ESP覆蓋方法,主要是利用strcpy、ssprintf等函數(shù)覆蓋堆棧,待達到堆棧保存的函數(shù)返回地址時,利用Windows系統(tǒng)核心內(nèi)的JMP DSP指令地址進行覆蓋,并在后面緊跟shellcode[2]。此種覆蓋方法可以直接進入shellcode,在函數(shù)返回時,ESP指向JMP ESP地址,使得JMP ESP地址出棧,使得EIP指針指向該地址。而ESP則會繼續(xù)下移,只想構(gòu)造好的shellcode。然后計算機繼續(xù)向下執(zhí)行EIP指向的指令JMP ESP,并且ESP此時指向shellcode,最終便會順利跳轉(zhuǎn)到shellcode位置。
2.3 SEH覆蓋
SEH覆蓋是一種水平更高的攻擊手段,其主要是利用覆蓋Windows系統(tǒng)內(nèi)異常處理鏈SEH來實現(xiàn)攻擊。對于 Windows系統(tǒng),如果運行過程中出現(xiàn)異常情況,系統(tǒng)會查找異常處理鏈SEH,并確定可以應(yīng)對此種異常情況的處理程序,然后將保存的處理程序地址賦給EIP,最終系統(tǒng)會對此處理程序進行執(zhí)行,以免造成系統(tǒng)的崩潰。對于Windows系統(tǒng),SEH鏈會被保存在堆棧中,應(yīng)用此種覆蓋方法進行攻擊,即將頂層SEH中指向下一節(jié)點值覆蓋成JMP 04,且處理程序地址被覆蓋成CALL EBX或POP POP RET的地址,后面跟上shellcode[3]。一旦系統(tǒng)運行出現(xiàn)錯誤,Windows便會跳轉(zhuǎn)到處理程序,執(zhí)行CALL EBX或者POP POP RET,進入前面的JMP 04并執(zhí)行,這樣便跳過覆蓋地址,達到shellcode位置。
三、緩沖區(qū)溢出漏洞攻擊解決對策
1.檢查數(shù)組邊界。緩沖區(qū)溢出漏洞攻擊大部分是因為某些語言未設(shè)置邊界檢查機制造成的,為減少此類攻擊問題,可以通過檢查數(shù)組邊界的方法進行避免。但是要注意此種方法,邊界檢查后C語言編譯器性能會降低大概15%。或者是應(yīng)用其他安全性比較高的語言,如JAVA程序,其自身就具有邊界檢查機制,與其他語言比,其可以有效避免此類攻擊。
2.阻止棧執(zhí)行?;诰彌_區(qū)溢出漏洞攻擊原理,在研究解決對策時,要避免控制權(quán)被轉(zhuǎn)移到執(zhí)行非法移入到棧中程序,如果棧中程序無法有效運行,無論是通過任何方式均不能執(zhí)行棧中程序,以此來避免利用漏洞產(chǎn)生的攻擊。如果選擇應(yīng)用此種方法,必須要對操作系統(tǒng)內(nèi)核進行升級或者打補丁,整個過程復雜性較高,實際應(yīng)用效率較低。因此,在對操作平臺進行開發(fā)時,需要重視操作系統(tǒng)架構(gòu)的設(shè)計,爭取從源頭上消除此漏洞。
3.指針完整性檢查。此種方法主要是對編譯器進行擴展,將1個數(shù)據(jù)結(jié)構(gòu)“canary”放入局部變量和棧返回地址中間?!癱anary”是1個占用4個字節(jié)空間的數(shù)據(jù),由程序運行過程中隨機產(chǎn)生。1個函數(shù)調(diào)用結(jié)束后,執(zhí)行棧中函數(shù)返回地址代碼前會對“canary”進行檢查,確定“canary”內(nèi)部數(shù)據(jù)是否發(fā)生變化。對于數(shù)據(jù)發(fā)生變化的,便可確定已經(jīng)發(fā)生緩沖區(qū)溢出漏洞攻擊,需要立即中止執(zhí)行棧中返回地址的代碼。
結(jié)束語:緩沖區(qū)溢出漏洞攻擊對計算機網(wǎng)絡(luò)系統(tǒng)運行安全具有很大的威脅,想要有效解決此類問題,必須要根據(jù)其攻擊原理,選擇合適的優(yōu)化對策,避免緩沖區(qū)溢出漏洞的攻擊,提高系統(tǒng)運行可靠性。
參 考 文 獻
[1] 徐欣民.一種緩沖區(qū)溢出漏洞自動挖掘及漏洞定位技術(shù)[D].華中科技大學,2008.
[2] 劉征.緩沖區(qū)溢出漏洞攻擊及其對策[J].河南科技,2012,13:57.
[3] 陸開奎.基于動態(tài)污點分析的漏洞攻擊檢測技術(shù)研究與實現(xiàn)[D].電子科技大學,2013.