大家都知道黑客發(fā)起攻擊、入侵等行為都需要挖掘其網(wǎng)絡(luò)、系統(tǒng)、程序的"漏洞",然后利用其"漏洞"來完成目標(biāo)實(shí)施,那么"漏洞是如何產(chǎn)生的"?又是如何被挖掘出來被利用的呢?
今天就以本篇文章內(nèi)容給大家詳細(xì)闡述一下"漏洞的定義、趨勢、產(chǎn)生、分類、以及漏洞的挖掘和分析技術(shù)詳解"!
我們經(jīng)常聽到漏洞這個(gè)概念,可什么是安全漏洞?
官方定義:漏洞是在硬件、軟件、協(xié)議的具體實(shí)現(xiàn)或系統(tǒng)安全策略上存在的缺陷,從而可以使攻擊者能夠在未授權(quán)的下訪問或破壞系統(tǒng)。
基本理解:漏洞是硬件、軟件、協(xié)議在生命周期的各個(gè)階段(設(shè)計(jì)、實(shí)現(xiàn)、運(yùn)維等過程)中產(chǎn)生的某類問題,這些問題會對系統(tǒng)的安全(機(jī)密性、完整性、可用性)產(chǎn)生影響。
有人經(jīng)常理解為BUG就是漏洞,其實(shí)它們兩者之間還是有很大區(qū)別的,漏洞與Bug并不等同,他們之間的關(guān)系基本可以描述為:大部分的Bug影響功能性,并不涉及安全性,也就不構(gòu)成漏洞;大部分的漏洞來源于Bug,但并不是全部,它們之間只是有一個(gè)很大的交集。
近幾年來漏洞數(shù)量依然處在上升趨勢,不僅如此,新漏洞從公布到被利用的時(shí)間越來越短,黑客對發(fā)布的漏洞信息進(jìn)行分析研究,往往在極短時(shí)間內(nèi)就能成功利用這些漏洞。除了利用已知漏洞,黑客們也善于挖掘并利用一些尚未公布的漏洞,發(fā)起病毒攻擊,或出售漏洞資料,滿足經(jīng)濟(jì)目的。因此漏洞的研究值得感興趣的小伙伴們深度研究,國家信息安全漏洞共享平臺(CNVD),對漏洞研究有成果的會員會給予相應(yīng)獎勵(lì)。
漏洞是在硬件、軟件、協(xié)議的具體實(shí)現(xiàn)或系統(tǒng)安全策略上存在的缺陷,從而可以使攻擊者能夠在未授權(quán)的情況下訪問或破壞系統(tǒng)。即某個(gè)程序(包括操作系統(tǒng))在設(shè)計(jì)時(shí)未考慮周全,當(dāng)程序遇到一個(gè)看似合理,但實(shí)際無法處理的問題時(shí),引發(fā)的不可預(yù)見的錯(cuò)誤
它不是安裝的時(shí)候的結(jié)果 也不是永久后的結(jié)果而是編程人員的人為因素,在程序編寫過程,為實(shí)現(xiàn)不可告人的目的,在程序代碼的隱蔽處保留后門,受編程人員的能力、經(jīng)驗(yàn)和當(dāng)時(shí)安全技術(shù)所限,在程序中難免會有不足之處,輕則影響程序效率,重則導(dǎo)致非授權(quán)用戶的權(quán)限提升。
以軟件漏洞來舉例的產(chǎn)生的主要來源如下:
1、緩沖區(qū)溢出(buffer overflows)
緩沖區(qū)溢出是軟件安全漏洞的主要來源。所謂緩沖區(qū)溢出,指的就是代碼寫入的數(shù)據(jù)超過了緩沖區(qū)的邊界,比如向大小10KB的緩沖區(qū)寫如12KB的數(shù)據(jù),那么這個(gè)緩沖就溢出了。當(dāng)然,前向溢出也算溢出,也就是寫入的數(shù)據(jù)寫入到了緩沖區(qū)的起始邊界之前。
緩沖區(qū)溢出是一種比較常見的編碼錯(cuò)誤,特別是在字符串處理過程中。緩沖區(qū)造成的危害也是比較多樣的。比較輕微的就是程序直接崩潰,除了用戶體驗(yàn)也沒什么大損失;比較嚴(yán)重的就是錯(cuò)誤的寫入覆蓋了其他敏感數(shù)據(jù),造成數(shù)據(jù)的丟失;最嚴(yán)重的莫過于執(zhí)行惡意代碼,因?yàn)閿?shù)據(jù)寫入越界,惡意代碼可以將原先正常的函數(shù)修改為自己的代碼,從而獲得整個(gè)軟件的執(zhí)行權(quán)。
緩沖區(qū)溢出根據(jù)溢出的內(nèi)存類型分為:
棧溢出()
棧內(nèi)的數(shù)據(jù)溢出。
堆溢出(heap overflow)
堆內(nèi)的數(shù)據(jù)溢出,
根據(jù)溢出的類型可分為overflow及underflow
overflow,寫入的數(shù)據(jù)超過了緩沖的邊界
underflow, 緩沖中有用數(shù)據(jù)的大小小于緩沖區(qū)長度,這有可能造成臟數(shù)據(jù)的問題
2、未驗(yàn)證輸入(Unvalidated Input)
一款應(yīng)用往往需要接收各種各樣的輸入,針對一款iOS應(yīng)用,主要的輸入有讀取文件,讀取用戶輸入,讀取網(wǎng)絡(luò)傳輸數(shù)據(jù),或通過URL被啟動(URL Schema)。各種類型的輸入都有可能是非法的,甚至是惡意的,所以針對所有類型的輸入,應(yīng)用都要進(jìn)行檢驗(yàn),確保輸入的數(shù)據(jù)是符合程序要求的,合理的,合法的數(shù)據(jù)。
非法輸入可能造成的危害主要有:
輸入的數(shù)據(jù)大于接收緩沖,會造成緩沖溢出
格式化字符串注入,對這些字符串進(jìn)行處理時(shí),如果不小心會造成程序的崩潰,或某些敏感數(shù)據(jù)被篡改
URLSchema中的命令為惡意命令,執(zhí)行了惡意的命令
代碼注入,輸入的URL或命令中帶有腳本、代碼等惡意片段
3、競爭條件(Race Condtions)
如果一個(gè)任務(wù)的完成需要幾個(gè)特定的子任務(wù)以特定的順序完成來完成,那么這個(gè)任務(wù)就是存在競爭條件這個(gè)漏洞的。黑客可以通過修改事件完成的順序來改變應(yīng)用的行為。
競爭條件類型的漏洞主要有以下兩種:
Time of Check Versus Time of Use (TOCTOU)
應(yīng)用運(yùn)行的過程中,在某個(gè)操作之前,比如寫文件,都會檢查一下文件是否存在,在檢查與真正的寫入之間的間隔就是一個(gè)可以被利用的Race Condition,惡意軟件可以將用戶檢查的文件替換成自己的文件,這樣數(shù)據(jù)就泄露了。
Signal Handling
處理信號的過程中,是隨時(shí)可以被另一個(gè)信號的處理打斷的,如果在處理一個(gè)信號的過程中另一個(gè)信號到來,那么這個(gè)過程會被馬上中斷,這樣,系統(tǒng)就會處于一種未知的狀態(tài)。
4、進(jìn)程間通信(Interprocess Communication)
進(jìn)程間通信采用的方法很多,共享內(nèi)存,管道,油槽等,由于通信管道兩端的應(yīng)用的不同,那么,有可能存在這鐘管道被惡意利用的肯能性,也就是說,進(jìn)程間通信也是軟件漏洞的一個(gè)來源,當(dāng)與另一個(gè)應(yīng)用通信的時(shí)候,要默認(rèn)此應(yīng)用是不安全的,要對通信的內(nèi)容進(jìn)行安全方面的驗(yàn)證。
5、不安全的文件操作(Insecure File Operation)
應(yīng)用對文件進(jìn)行處理時(shí),若果沒有進(jìn)行進(jìn)行有效的驗(yàn)證,那么有可能處理的文件已經(jīng)是被惡意軟件修改過的,是不安全的。所以,進(jìn)行有效的驗(yàn)證是安全處理文件的重要保證。不安全文件操作類型有以幾種:
讀取或?qū)懭胍粋€(gè)位于其他應(yīng)用也擁有讀寫權(quán)限路徑下的文件。
對文件信息,例如權(quán)限等信息沒有進(jìn)行有效驗(yàn)證便進(jìn)行處理。
對文件操作的返回結(jié)果沒有進(jìn)行有效利用
假定一個(gè)擁有本地文件名的文件就是真正的本地文件。
6、權(quán)限控制問題(Access Control)
很多情況下,權(quán)限控制是安全機(jī)制保證的核心,同時(shí)也是漏洞的主要來源。每個(gè)應(yīng)用都有與其匹配的權(quán)限,應(yīng)用申請的權(quán)限應(yīng)該物盡其用,不能申請超過自身需求的權(quán)限,而很多的軟件漏洞就是因?yàn)閼?yīng)用申請了超過自身需求的權(quán)限,比如root權(quán)限,然后被惡意軟件利用,也就有了對整個(gè)系統(tǒng)執(zhí)行所有操作的權(quán)限。
很多情況下,對權(quán)限的申請進(jìn)行驗(yàn)證是明智的選擇,例如輸入用戶名及密碼來提升權(quán)限。注意,在采用驗(yàn)證機(jī)制時(shí),最好使用系統(tǒng)內(nèi)置的權(quán)限驗(yàn)證方法,而不是自己取實(shí)現(xiàn),這里需要額外提一下,權(quán)限控制是操作系統(tǒng)級別的,當(dāng)硬件設(shè)備被控制時(shí),各種權(quán)限的控制也就顯得無力,這種情況下,數(shù)據(jù)的加密保護(hù)就顯現(xiàn)出了其價(jià)值。
7、社會工程(Social Engineering)
用戶往往是安全保證機(jī)制中那薄弱的一環(huán)。即使提供再強(qiáng)大的安全保全機(jī)制,如果用戶安全意識薄弱,同樣會出現(xiàn)問題。很簡單的例子,比如用戶將密碼設(shè)置的非常復(fù)雜,服務(wù)器端數(shù)據(jù)庫的安全保證也很周全,黑客完全無法通過技術(shù)手段竊取用戶密碼,可黑客一個(gè)偽裝客服的電話就完全有可能將用戶的密碼從用戶的口中騙取到。這就是所謂的"社會工程". 在界面,使用習(xí)慣上教育,引導(dǎo)用戶進(jìn)行安全的操作,也是軟件設(shè)計(jì)的重中之重。
按照漏洞的形成原因,漏洞大體上可以分為程序邏輯結(jié)構(gòu)漏洞、程序設(shè)計(jì)錯(cuò)誤漏洞、開放式協(xié)議造成的漏洞和人為因素造成的漏洞。
按照漏洞被人掌握的情況,漏洞又可以分為已知漏洞、未知漏洞和0day等幾種類型。
1、 程序邏輯結(jié)構(gòu)漏洞
這種類型的漏洞有可能是編程人員在編寫程序時(shí),因?yàn)槌绦虻倪壿嬙O(shè)計(jì)不合理或者錯(cuò)誤而造成的程序邏輯漏洞。這種類型的漏洞最典型的要數(shù)微軟的Windows 2000用戶登錄的中文輸入法漏洞。非授權(quán)人員可以通過登錄界面的輸入法的幫助文件繞過Windows的用戶名和密碼驗(yàn)證而取的計(jì)算機(jī)的最高權(quán)限。
這種類型的漏洞也有可能是合法的程序用途被黑客利用去做不正當(dāng)?shù)挠猛?。這種類型的漏洞最典型的就是后面案例中提到的Winrar的自解壓功能,程序設(shè)計(jì)者的本意是為了方便用戶的使用,使得沒有安裝Winrar的用戶也可以解壓經(jīng)過這種方式壓縮的文件。但是這種功能被黑客用到了不正當(dāng)?shù)挠猛旧稀?/p>
這種漏洞用一個(gè)比喻可能更容易理解。打一個(gè)比方來說,你開了一扇門,在門上開了一個(gè)狗洞,專門為了狗方便出入。正常情況下,人應(yīng)該用鑰匙打開鎖才能進(jìn)來。可是有個(gè)家伙他發(fā)現(xiàn)利用某個(gè)竅門人也可以從狗洞進(jìn)出,那么這個(gè)從狗洞進(jìn)出的方法就可以看著是一個(gè)安全漏洞。
2、 程序設(shè)計(jì)錯(cuò)誤漏洞
還有一種類型的漏洞是編程人員在編寫程序時(shí)由于技術(shù)上的疏忽造成的漏洞。這種類型的漏洞最典型的是緩沖區(qū)溢出漏洞,它也是被黑客利用得最多的一種類型的漏洞。
3、開放式協(xié)議造成的漏洞
目前,國際互聯(lián)網(wǎng)的通信采用的是具有開放性的TCP/IP協(xié)議。因?yàn)門CP/IP協(xié)議的最初設(shè)計(jì)者在設(shè)計(jì)該通信協(xié)議時(shí),只考慮到了協(xié)議的實(shí)用性,而沒有考慮到協(xié)議的安全性,所以在TCP/IP協(xié)議中存在著很多漏洞。比如說,利用TCP/IP協(xié)議的開放和透明性嗅探網(wǎng)絡(luò)數(shù)據(jù)包,竊取數(shù)據(jù)包里面的用戶口令和密碼信息;TCP協(xié)議三次握手的潛在缺陷所導(dǎo)致的DDOS拒絕服務(wù)攻擊等。
4、 人為因素造成的漏洞
一個(gè)系統(tǒng)如果本身設(shè)計(jì)得很完善,安全性也很高,但管理人員安全意識淡薄,同樣的會給系統(tǒng)留下漏洞。譬如說,系統(tǒng)本身非常完備安全,但系統(tǒng)登錄所需要的管理 員帳戶或口令,可是因?yàn)樵O(shè)置過于得簡單而被黑客猜解出來了,那么其他的環(huán)節(jié)再安全也沒有絲毫意義;再或者雖然管理員設(shè)置了很復(fù)雜的密碼,可是他把密碼寫在 一張紙上,并隨手扔到廢紙簍里,那么也同樣有可能造成密碼泄露而導(dǎo)致系統(tǒng)被黑客入侵。
5、 已知漏洞
已知漏洞是指已經(jīng)被人們發(fā)現(xiàn),并被人們廣為傳播的公開漏洞。這種類型的特點(diǎn)是漏洞形成的原因和利用方法已經(jīng)被眾多的安全組織、黑客和黑客組織所掌握。安全 組織或廠商按照公布的漏洞形成原因和利用方法,在他們的安全防護(hù)產(chǎn)品中或安全服務(wù)項(xiàng)目加入針對相應(yīng)類型漏洞的防護(hù)方法。黑客和黑客組織利用公布的漏洞形成 原因,寫出專門的具有針對性的漏洞利用程序文件,并能繞過安全防護(hù)軟件。比如說針對某個(gè)IE瀏覽器版本的IE漏洞利用文件,或者他們干脆利用一些漏洞公布站點(diǎn)上提供的漏洞利用程序文件并不加任何修改地去攻擊互聯(lián)網(wǎng)上的計(jì)算機(jī)。
產(chǎn)生漏洞的軟件的開發(fā)商則會針對被公開的漏洞的信息,修補(bǔ)他們開發(fā)的程序以供他們的用戶修補(bǔ)已經(jīng)存在漏洞的軟件。
6、未知漏洞
未知的漏洞則是指那些已經(jīng)存在但還沒有被人發(fā)現(xiàn)的漏洞,這種類型漏洞的特征是雖然它們沒有被發(fā)現(xiàn),但它們在客觀上已經(jīng)存在了,它們帶給計(jì)算機(jī)網(wǎng)絡(luò)安全的是隱蔽的威脅。如果它們哪一天被黑客有意或無意的找出來后就會對計(jì)算機(jī)網(wǎng)絡(luò)安全構(gòu)成巨大的威脅。
所以軟件開發(fā)商、安全組織、黑客和黑客組織都在努力的發(fā)現(xiàn)漏洞,可以說誰先發(fā)現(xiàn)了漏洞,誰就可以掌握主動權(quán)。如果是軟件開發(fā)商和安全組織先發(fā)現(xiàn)了漏洞,他們就可以在安全防護(hù)上取得主動權(quán);如果是黑客或黑客組織先發(fā)現(xiàn)了漏洞,他們就可以在攻擊上取得主動權(quán)。
7、 0day漏洞
所謂0day漏 洞是指已經(jīng)被發(fā)掘出來,但還沒有大范圍傳播開的漏洞,也就是說,這種類型的漏洞有可能掌握在極少數(shù)人的手里。黑客有可能在這種類型的漏洞的信息還沒有大范 圍的傳播開的時(shí)候,利用這段時(shí)間差攻擊他們想要攻擊的目標(biāo)機(jī)器,因?yàn)榻^大多數(shù)用戶還沒有獲取到相關(guān)的漏洞信息,也無從防御,黑客要想得手還是很容易的
由于種種原因,漏洞的存在不可避免,一旦某些較嚴(yán)重的漏洞被攻擊者發(fā)現(xiàn),就有可能被其利用,在未授權(quán)的情況下訪問或破壞計(jì)算機(jī)系統(tǒng)。先于攻擊者發(fā)現(xiàn)并及時(shí)修補(bǔ)漏洞可有效減少來自網(wǎng)絡(luò)的威脅。因此主動發(fā)掘并分析系統(tǒng)安全漏洞,對網(wǎng)絡(luò)攻防戰(zhàn)具有重要的意義。漏洞的研究主要分為漏洞挖掘與漏洞分析兩部分。漏洞挖掘技術(shù)是指對未知漏洞的探索,綜合應(yīng)用各種技術(shù)和工具,盡可能地找出軟件中的潛在漏洞;漏洞分析技術(shù)是指對已發(fā)現(xiàn)漏洞的細(xì)節(jié)進(jìn)行深入分析,為漏洞利用、補(bǔ)救等處理措施作鋪墊。
1、 現(xiàn)有漏洞挖掘技術(shù)分類
根據(jù)分析對象的不同,漏洞挖掘技術(shù)可以分為基于源碼的漏洞挖掘技術(shù)和基于目標(biāo)代碼的漏洞挖掘技術(shù)兩大類?;谠创a的漏洞挖掘的前提是必須能獲取源代碼,對于一些開源項(xiàng)目,通過分析其公布的源代碼,就可能找到存在的漏洞。
例如對Linux系統(tǒng)的漏洞挖掘就可采用這種方法。但大多數(shù)的商業(yè)軟件其源碼很難獲得,不能從源碼的角度進(jìn)行漏洞挖掘,只能采用基于目標(biāo)代碼的漏洞挖掘技術(shù)。對目標(biāo)碼進(jìn)行分析涉及編譯器、指令系統(tǒng)、可執(zhí)行文件格式等多方面的知識,難度較大。
基于目標(biāo)代碼的漏洞挖掘首先將要分析的二進(jìn)制目標(biāo)代碼反匯編,得到匯編代碼;然后對匯編代碼進(jìn)行切片,即對某些上下文關(guān)聯(lián)密切、有意義的代碼進(jìn)行匯聚,降低其復(fù)雜性;最后通過分析功能模塊,來判斷是否存在漏洞。漏洞挖掘技術(shù)從逆向分析的軟件測試角度,又可分為白箱分析、黑箱分析和灰箱分析三類
2、常見的漏洞挖掘分析技術(shù)
漏洞挖掘是一個(gè)多種漏洞挖掘分析技術(shù)相互結(jié)合、共同使用和優(yōu)勢互補(bǔ)的過程。目前漏洞挖掘分析技術(shù)有多種,主要包括手工測試技術(shù)(manual testing)、Fuzzing技術(shù)、比對和二進(jìn)制比對技術(shù)(Diff and BinDiff)、靜態(tài)分析技術(shù)(static analysis)、動態(tài)分析技術(shù)(runtime analysis)等。
2.1.人工分析
人工分析是一種灰盒分析技術(shù)。針對被分析目標(biāo)程序,手工構(gòu)造特殊輸入條件,觀察輸出、目標(biāo)狀態(tài)變化等,獲得漏洞的分析技術(shù)。輸入包括有效的和無效的輸入,輸出包括正常輸出和非正常輸出。非正常輸出是漏洞出現(xiàn)的前提,或者就是目標(biāo)程序的漏洞。非正常目標(biāo)狀態(tài)的變化也是發(fā)現(xiàn)漏洞的預(yù)兆,是深入挖掘的方向。人工分析高度依賴于分析人員的經(jīng)驗(yàn)和技巧。人工分析多用于有人機(jī)交互界面的目標(biāo)程序,Web漏洞挖掘中多使用人工分析的方法。
2.2.Fuzzing技術(shù)
Fuzzing技術(shù)是一種基于缺陷注入的自動軟件測試技術(shù),它利用黑盒分析技術(shù)方法,使用大量半有效的數(shù)據(jù)作為應(yīng)用程序的輸入,以程序是否出現(xiàn)異常為標(biāo)志,來發(fā)現(xiàn)應(yīng)用程序中可能存在的安全漏洞。半有效數(shù)據(jù)是指被測目標(biāo)程序的必要標(biāo)識部分和大部分?jǐn)?shù)據(jù)是有效的,有意構(gòu)造的數(shù)據(jù)部分是無效的,應(yīng)用程序在處理該數(shù)據(jù)時(shí)就有可能發(fā)生錯(cuò)誤,可能導(dǎo)致應(yīng)用程序的崩潰或者觸發(fā)相應(yīng)的安全漏洞。根據(jù)分析目標(biāo)的特點(diǎn),F(xiàn)uzzing可以分為三類:
1).動態(tài)Web頁面Fuzzing,針對ASP、PHP、Java、Perl等編寫的網(wǎng)頁程序,也包括使用這類技術(shù)構(gòu)建的B/S架構(gòu)應(yīng)用程序,典型應(yīng)用軟件為HTTP Fuzz;
2).文件格式Fuzzing,針對各種文檔格式,典型應(yīng)用軟件為PDF Fuzz;
3).協(xié)議Fuzzing,針對網(wǎng)絡(luò)協(xié)議,典型應(yīng)用軟件為針對微軟RPC(遠(yuǎn)程過程調(diào)用)的Fuzz。Fuzzer軟件輸入的構(gòu)造方法與黑盒測試軟件的構(gòu)造相似,邊界值、字符串、文件頭、文件尾的附加字符串等均可以作為基本的構(gòu)造條件。
Fuzzer軟件可以用于檢測多種安全漏洞,包括緩沖區(qū)溢出漏洞、整型溢出漏洞、格式化字符串和特殊字符漏洞、競爭條件和死鎖漏洞、SQL注入、跨站腳本、RPC漏洞攻擊、文件系統(tǒng)攻擊、信息泄露等。與其它技術(shù)相比,F(xiàn)uzzing技術(shù)具有思想簡單,容易理解、從發(fā)現(xiàn)漏洞到漏洞重現(xiàn)容易、不存在誤報(bào)的優(yōu)點(diǎn)。
同時(shí)它也存在黑盒分析的全部缺點(diǎn),而且具有不通用、構(gòu)造測試周期長等問題。常用的Fuzzer軟件包括SPIKE Proxy、Peach Fuzzer Framework、Acunetix Web Vulnerability Scanner的HTTP Fuzzer、OWASP JBroFuzz、WebScarab等。
2.3.補(bǔ)丁比對技術(shù)
補(bǔ)丁比對技術(shù)主要用于黑客或競爭對手找出軟件發(fā)布者已修正但未尚公開的漏洞,是黑客利用漏洞前經(jīng)常使用的技術(shù)手段。
安全公告或補(bǔ)丁發(fā)布說明書中一般不指明漏洞的準(zhǔn)確位置和原因,黑客很難僅根據(jù)該聲明利用漏洞。黑客可以通過比較打補(bǔ)丁前后的二進(jìn)制文件,確定漏洞的位置,再結(jié)合其他漏洞挖掘技術(shù),即可了解漏洞的細(xì)節(jié),最后可以得到漏洞利用的攻擊代碼。簡單的比較方法有二進(jìn)制字節(jié)和字符串比較、對目標(biāo)程序逆向工程后的比較兩種。
第一種方法適用于補(bǔ)丁前后有少量變化的比較,常用的于字符串變化、邊界值變化等導(dǎo)致漏洞的分析。
第二種方法適用于程序可被反編譯,且可根據(jù)反編譯找到函數(shù)參數(shù)變化導(dǎo)致漏洞的分析。這兩種方法都不適合文件修改較多的情況。復(fù)雜的比較方法有Tobb Sabin提出的基于指令相似性的圖形化比較和Halvar Flake提出的結(jié)構(gòu)化二進(jìn)制比較,可以發(fā)現(xiàn)文件中一些非結(jié)構(gòu)化的變化,如緩沖區(qū)大小的改變,且以圖形化的方式進(jìn)行顯示。
常用的補(bǔ)丁比對工具有Beyond Compare、IDACompare、Binary Diffing Suite(EBDS)、BinDiff、NIPC Binary Differ(NBD)。此外大量的高級文字編輯工具也有相似的功能,如Ultra Edit、HexEdit等。這些補(bǔ)丁比對工具軟件基于字符串比較或二進(jìn)制比較技術(shù)。
2.4.靜態(tài)分析技術(shù)
靜態(tài)分析技術(shù)是對被分析目標(biāo)的源程序進(jìn)行分析檢測,發(fā)現(xiàn)程序中存在的安全漏洞或隱患,是一種典型的白盒分析技術(shù)。它的方法主要包括靜態(tài)字符串搜索、上下文搜索。
靜態(tài)分析過程主要是找到不正確的函數(shù)調(diào)用及返回狀態(tài),特別是可能未進(jìn)行邊界檢查或邊界檢查不正確的函數(shù)調(diào)用,可能造成緩沖區(qū)溢出的函數(shù)、外部調(diào)用函數(shù)、共享內(nèi)存函數(shù)以及函數(shù)指針等。對開放源代碼的程序,通過檢測程序中不符合安全規(guī)則的文件結(jié)構(gòu)、命名規(guī)則、函數(shù)、堆棧指針可以發(fā)現(xiàn)程序中存在的安全缺陷。
被分析目標(biāo)沒有附帶源程序時(shí),就需要對程序進(jìn)行逆向工程,獲取類似于源代碼的逆向工程代碼,然后再進(jìn)行搜索。使用與源代碼相似的方法,也可以發(fā)現(xiàn)程序中的漏洞,這類靜態(tài)分析方法叫做反匯編掃描。
由于采用了底層的匯編語言進(jìn)行漏洞分析,在理論上可以發(fā)現(xiàn)所有計(jì)算機(jī)可運(yùn)行的漏洞,對于不公開源代碼的程序來說往往是最有效的發(fā)現(xiàn)安全漏洞的辦法。但這種方法也存在很大的局限性,不斷擴(kuò)充的特征庫或詞典將造成檢測的結(jié)果集大、誤報(bào)率高;同時(shí)此方法重點(diǎn)是分析代碼的"特征",而不關(guān)心程序的功能,不會有針對功能及程序結(jié)構(gòu)的分析檢查。
2.5.動態(tài)分析技術(shù)
動態(tài)分析技術(shù)起源于軟件調(diào)試技術(shù),是用調(diào)試器作為動態(tài)分析工具,但不同于軟件調(diào)試技術(shù)的是它往往處理的是沒有源代碼的被分析程序,或是被逆向工程過的被分析程序。動態(tài)分析需要在調(diào)試器中運(yùn)行目標(biāo)程序,通過觀察執(zhí)行過程中程序的運(yùn)行狀態(tài)、內(nèi)存使用狀況以及寄存器的值等以發(fā)現(xiàn)漏洞。
一般分析過程分為代碼流分析和數(shù)據(jù)流分析。代碼流分析主要是通過設(shè)置斷點(diǎn)動態(tài)跟蹤目標(biāo)程序代碼流,以檢測有缺陷的函數(shù)調(diào)用及其參數(shù)。數(shù)據(jù)流分析是通過構(gòu)造特殊數(shù)據(jù)觸發(fā)潛在錯(cuò)誤。比較特殊的,在動態(tài)分析過程中可以采用動態(tài)代碼替換技術(shù),破壞程序運(yùn)行流程、替換函數(shù)入口、函數(shù)參數(shù),相當(dāng)于構(gòu)造半有效數(shù)據(jù),從而找到隱藏在系統(tǒng)中的缺陷。常見的動態(tài)分析工具有SoftIce、OllyDbg、WinDbg等。
1、使用Acunetix Web Vulnerability Scanner軟件進(jìn)行漏洞挖掘:
該軟件提供了一些預(yù)定義好的Fuzz運(yùn)算參數(shù)庫,可以便于初學(xué)者上手,也可以方便分析者使用。過程如下:
1)定義HTTP請求(Request),即定義所需訪問的網(wǎng)頁URL;
2)定義運(yùn)算參數(shù)(Add generator),即定義可能產(chǎn)生漏洞的字符串表達(dá)式,如:查找$password、$passwd、$token;
3)插入運(yùn)算參數(shù)(Insert into request),即將定義好的多條運(yùn)算參數(shù)綁定為一條搜索策略;4)定義成功觸發(fā)特征(Fuzzer Filters),將運(yùn)算參數(shù)與HTTP請求綁定;
5)掃描(Start);
6)等待軟件返回匹配的項(xiàng),這些項(xiàng)就是可能的漏洞。經(jīng)過以上步驟,一個(gè)網(wǎng)頁中可能存在的漏洞就被發(fā)現(xiàn)了。
2、使用補(bǔ)丁比對技術(shù)找到漏洞的例子:
微軟發(fā)布的MS08-067的補(bǔ)丁,該問題被列為嚴(yán)重。該安全更新解決了服務(wù)器服務(wù)中一個(gè)秘密報(bào)告的漏洞。如果用戶在受影響的系統(tǒng)上收到特制的RPC請求,則該漏洞可能允許遠(yuǎn)程執(zhí)行代碼。漏洞挖掘過程為例說明補(bǔ)丁對比技術(shù)的應(yīng)用。首先保留一份原始文件,然后安裝新的補(bǔ)丁程序,提取出相同和新加入的文件后,就可以使用軟件進(jìn)行對比。
經(jīng)過對比后發(fā)現(xiàn)被修改的3個(gè)函數(shù)
對比軟件列出了三個(gè)函數(shù)名稱,分別為0.25、0.67和0.94并列出補(bǔ)丁前后的相似程度。通過對比結(jié)果,可以針對性構(gòu)造參數(shù),觀察補(bǔ)丁前后的行為,最終發(fā)現(xiàn)在給出的這三個(gè)函數(shù)中,有兩個(gè)是和漏洞直接相關(guān)的。