公務(wù)員期刊網(wǎng) 論文中心 正文

開源代碼組件安全審計(jì)探究

前言:想要寫出一篇引人入勝的文章?我們特意為您整理了開源代碼組件安全審計(jì)探究范文,希望能給你帶來靈感和參考,敬請閱讀。

開源代碼組件安全審計(jì)探究

摘要:隨著計(jì)算機(jī)信息技術(shù)的發(fā)展,開源代碼安全審計(jì)已經(jīng)是網(wǎng)絡(luò)安全建設(shè)的重要組成部分。本文首先介紹了開源代碼常見漏洞的類型及產(chǎn)生原因,其次介紹了開源代碼審計(jì)通常遵守的一般原則,最后重點(diǎn)介紹了開源代碼審計(jì)的主要技術(shù)方法。通過本文的研究,探討了開源代碼組件網(wǎng)絡(luò)安全審計(jì)的重要思想,普及了網(wǎng)絡(luò)安全意識,對促進(jìn)網(wǎng)絡(luò)安全意識與軟件開發(fā)能力齊頭并進(jìn)有參考價(jià)值。

關(guān)鍵詞:開源代碼;安全漏洞;代碼審計(jì);信息安全

1引言

近些年隨著計(jì)算機(jī)科學(xué)技術(shù)的發(fā)展,應(yīng)用軟件的功能也隨著增大,與之對應(yīng)的就會使得源代碼的規(guī)模也大大增加,同時(shí)由于開源代碼本身的特點(diǎn),這使得利用傳統(tǒng)的方法檢測代碼的安全漏洞工作難上加難。因此從源代碼的最原始位置出發(fā),對其進(jìn)行檢測和分析,從而從根本上保護(hù)軟件和信息系統(tǒng)的安全,杜絕了代碼后門又能夠避免潛在的漏洞安全威脅,進(jìn)一步保障了信息安全。對于計(jì)算機(jī)應(yīng)用軟件源代碼的審核工作,最常出現(xiàn)問題的是編碼階段,例如在SQL注入的階段、XSS跨站腳本攻擊等環(huán)節(jié)。解決這些最常見的問題的最優(yōu)方式是在軟件的源代碼中進(jìn)行修改,由此可見,在進(jìn)行應(yīng)用軟件信息保護(hù)的過程中,從最底層的源代碼著手,是解決該類問題的最有效手段。

2開源代碼漏洞的類型

隨著開源代碼的發(fā)展,對于開源代碼漏洞的研究逐漸深入,分類也不盡相同,主要原因是研究者從不同的角度對其進(jìn)行劃分,因此對程序運(yùn)行的影響也不同。通過對漏洞的分析,可以使得程序員對漏洞進(jìn)行全面的描述和把握。通常而言,按照不同的分列依據(jù),潛在的分類屬性是其最根本的特征之一,因此這也是為漏洞賦予各種不同屬性的方式之一,通過這種方式可使得不同的漏洞類型具有各自的特征。常見漏洞如XSS漏洞、CSRF漏洞、Json-Hijacking漏洞、注入缺陷漏洞都是具有上述特征的典型代表。XSS漏洞全稱是CrossSiteScript,是Web安全中最為常見的漏洞,其攻擊原理是黑客通過給網(wǎng)頁“HTML注入”,在網(wǎng)頁中加入了惡意腳本內(nèi)容,使得網(wǎng)頁的內(nèi)容發(fā)生了改變,從而達(dá)到了控制控制用戶瀏覽器的一種攻擊方式。同時(shí),這種網(wǎng)站訪問,可以是從正常的網(wǎng)站跨到黑客的服務(wù)器,也可以是黑客的服務(wù)器跨到正常的網(wǎng)站。這種漏洞最常出現(xiàn)在用戶需要輸入內(nèi)容的地方,這些地方一旦對輸入不進(jìn)行處理,黑客就可以進(jìn)行HTML注入,進(jìn)而篡改網(wǎng)頁。CSRF漏洞全稱是CSRF(Cross-siterequestforgery),是一種常見的跨站偽造請求,這種方式與XSS漏洞最大的區(qū)別是CSRF通過偽裝成受信任用戶的請求來利用受信任的網(wǎng)站,相比于XSS攻擊,CSRF攻擊往往給用戶帶來更大的風(fēng)險(xiǎn),具有更高的危險(xiǎn)性。其原理是攻擊者通過偽造一個(gè)鏈接,將鏈接發(fā)送給目標(biāo)用戶,該鏈接實(shí)際上是獲取某網(wǎng)站信任用戶信息的鏈接,目的是在用戶電腦上登錄該網(wǎng)站,一旦用戶點(diǎn)擊了該鏈接,實(shí)際上攻擊就完成了。Json-Hijacking漏洞其實(shí)是一個(gè)跨域數(shù)據(jù)竊取漏洞,它通過誘導(dǎo)用戶點(diǎn)擊惡意文件,重寫Array()的構(gòu)造函數(shù)的方法,將敏感的Json數(shù)據(jù)發(fā)送攻擊者,從而造成敏感信息泄露,所以可以理解為“通過CSRF方式導(dǎo)致的敏感信息泄露”。注入缺陷漏洞通常是由于程序開發(fā)人員在源代碼中假設(shè)條件造成的,這些假設(shè)條件會導(dǎo)致有效輸入的缺失。這種攻擊方式可以使攻擊者避開程序的訪問控制,從而對其內(nèi)容進(jìn)行重新創(chuàng)建、修改或綜合刪除用戶的信息。通常有系統(tǒng)調(diào)用、Shell命令及SQL注入。SQL注入是目前黑客對數(shù)據(jù)庫進(jìn)行攻擊最常使用的手段之一,一般可通過函數(shù)調(diào)用、緩沖區(qū)溢出、SQL操縱及代碼注入等方式操作。

3開源代碼審計(jì)的原則

通常代碼審計(jì)的第一步是閱讀系統(tǒng)開源代碼,然后檢查保證代碼正確安全的控制是否設(shè)置在了關(guān)鍵的邏輯流位置上。經(jīng)過審計(jì)的代碼能夠規(guī)避大部分應(yīng)用程序中的代碼漏洞,提高軟件的運(yùn)行效率。

3.1確保輸入信息均不可信原則

在開源代碼程序中有很多輸入情況,主要包括系統(tǒng)內(nèi)部和外部輸入,這些用戶輸入的信息經(jīng)過軟件程序處理之后將進(jìn)行展示。因此每一個(gè)輸入都有可能被惡意利用或者偽造成代碼紕漏。因此在輸入信息的過程中,對內(nèi)容進(jìn)行嚴(yán)格的限定。據(jù)相關(guān)統(tǒng)計(jì)顯示,在漏洞里面由于輸入數(shù)據(jù)引起的安全問題占90%以上。

3.2遵循安全編碼基本規(guī)范原則

在計(jì)算機(jī)程序開發(fā)過程中有很多編程規(guī)范和標(biāo)準(zhǔn),因此程序員在進(jìn)行程序開發(fā)的過程中要嚴(yán)格遵守規(guī)范和標(biāo)準(zhǔn),降低漏洞出現(xiàn)的可能性。此外不同的程序設(shè)計(jì)語言又推出了不同的標(biāo)準(zhǔn),要求使用本程序開發(fā)語言設(shè)計(jì)的程序員嚴(yán)格按照標(biāo)準(zhǔn)進(jìn)行程序開發(fā),不得隨意或破壞編碼規(guī)范。如美國軟件工程研究所編制的Java安全編碼標(biāo)準(zhǔn)已經(jīng)于2011年9月14日出版發(fā)行,該安全編碼標(biāo)準(zhǔn)著重于Java程序中最容易出錯、產(chǎn)生代碼安全問題的環(huán)節(jié),詳細(xì)制定了編碼層保障安全的規(guī)則,同時(shí)也提供了規(guī)避產(chǎn)生類似錯誤的最佳操作指南。遵循安全的編碼規(guī)范在代碼開發(fā)的階段很有必要,同時(shí)也是降低程序源代碼出現(xiàn)漏洞的最有效方式之一。使用規(guī)范的編碼方式才能夠確保程序安全、穩(wěn)定的運(yùn)行。此外源代碼審計(jì)制度制定的不同程序設(shè)計(jì)語言中的代碼安全規(guī)范,并在審查的過程中應(yīng)該檢查程序員是否遵照了本規(guī)范,若沒有遵照所制定的規(guī)范,但并沒有造成安全風(fēng)險(xiǎn)的,這種代碼仍屬于存在安全風(fēng)險(xiǎn)的代碼,需要在審計(jì)報(bào)告中明確指出。同時(shí)應(yīng)該給出合理的修改意見,限期在規(guī)定的時(shí)間內(nèi)進(jìn)行修改完善,確保降低源代碼運(yùn)行的安全風(fēng)險(xiǎn)。

3.3漏洞與安全編碼內(nèi)在一致原則

就目前而言代碼審計(jì)主要是查找已知的安全漏洞,這些安全漏洞的發(fā)布通常依賴于一些有權(quán)威的國際組織,這些漏洞都是根據(jù)不同的安全漏洞模型反復(fù)查找得出的。通過使用數(shù)據(jù)流、控制流等技術(shù)查找出惡意數(shù)據(jù)的入口和惡意數(shù)據(jù)可能被利用的出口點(diǎn),同時(shí)進(jìn)行人工分析從入口到出口全過程的風(fēng)險(xiǎn)等級,以此來判斷問題存在的真實(shí)性,同時(shí)所有的出入口都是基于開發(fā)源代碼語言API來測試的,因此這種測試與本身代碼的邏輯沒有任何關(guān)系,進(jìn)一步確保了查找的準(zhǔn)確性。

3.4反向思考原則

在進(jìn)行源代碼審計(jì)的過程中,審計(jì)人員應(yīng)該站在惡意用戶或者攻擊者的角度,多方位的考慮有可能攻擊的目標(biāo),保持靈活的思維,從各個(gè)方面對有可能進(jìn)行攻擊的代碼進(jìn)行全方位的排查和分析,對于有可能存在攻擊風(fēng)險(xiǎn)的代碼進(jìn)行更換。因此審計(jì)人員須轉(zhuǎn)變思維和角色身份,從攻擊者的角度檢查可能存在漏洞的地方,同時(shí)對有可能攻擊的地方進(jìn)行更詳細(xì)的設(shè)計(jì)。

4開源代碼審計(jì)的主要技術(shù)方法

4.1漏洞產(chǎn)生的必要條件

漏洞產(chǎn)生的必要條件主要有三個(gè),分別為第一,用戶可以控制的輸入,第二用戶可以獲得對應(yīng)的輸出,第三用戶可以利用輸入在服務(wù)器或者客戶端執(zhí)行權(quán)限的各項(xiàng)操作。第二個(gè)條件是直接通過訪問可以獲得對應(yīng)的結(jié)果,同時(shí)也包含了延遲判斷、非正常返回等各種結(jié)果獲取的方式,因此對不同方式返回的結(jié)果進(jìn)行分類統(tǒng)計(jì)。第三個(gè)條件為主觀條件,是指在某一個(gè)權(quán)限范圍之內(nèi)出現(xiàn)的各種BUG,即使有設(shè)計(jì)者考慮不周全引起的,但這種操作的權(quán)限在管理者允許范圍之內(nèi),這種漏洞的判定彈性條件相對較大,也是能把握的一點(diǎn)。

4.2危險(xiǎn)函數(shù)追蹤法

審計(jì)原理:由于開源代碼的特殊性,任何人可對其進(jìn)行讀取、修改和刪除等操作,這些結(jié)果的實(shí)現(xiàn)都是通過程序設(shè)計(jì)的函數(shù)(方法)實(shí)現(xiàn)的,因此在對不同的函數(shù)進(jìn)行審計(jì)時(shí),采取針對性的方式獲得關(guān)鍵詞和函數(shù)等,這種方式達(dá)到了從關(guān)鍵程序(函數(shù)或方法)出發(fā),獲取危險(xiǎn)源的目的。審計(jì)方法:在程序設(shè)計(jì)的編輯器中使用函數(shù)追蹤方法,如檢索、源碼審計(jì)等。主要優(yōu)勢:這種方法的優(yōu)點(diǎn)主要表現(xiàn)在兩個(gè)方面,其一為獲取速度快,二為能夠獲得源代碼,查詢源代碼中可能存在的漏洞代碼。不足:這種方法的缺點(diǎn)主要表現(xiàn)在兩個(gè)方面,其一為很難做到對整體文件進(jìn)行檢查,特別是對于內(nèi)容較多的文件,其二是不能檢查文件內(nèi)容中存在的邏輯錯誤和邏輯對應(yīng)關(guān)系。

4.3邏輯分析法

審計(jì)原理:這是一種采取對所有可能出現(xiàn)概率都可以測試的方法,又稱為黑盒測試,在眾多程序設(shè)計(jì)語言中都可實(shí)現(xiàn)這種測試。通過對頁面內(nèi)容、頁面反應(yīng)、數(shù)據(jù)反應(yīng)及后臺反應(yīng)等中的數(shù)據(jù)監(jiān)測,獲得對應(yīng)的不同輸出,這種審計(jì)過程體現(xiàn)了權(quán)限關(guān)系、功能關(guān)系、角色關(guān)系等的思維導(dǎo)圖,能夠醒目清晰的展示各種關(guān)系。主要優(yōu)勢:這種方法的主要優(yōu)勢表現(xiàn)在兩個(gè)方面,其一為可以尋找相對危險(xiǎn)的函數(shù)產(chǎn)生的各種漏洞,且發(fā)現(xiàn)的準(zhǔn)確率會很高,具有很強(qiáng)的針對性,其二為通過目前主要的黑盒測試、白盒測試及灰盒測試可以幾乎對所有的漏洞類型進(jìn)行檢查,能夠滿足絕大多數(shù)的測試需求。不足:主要表現(xiàn)在兩個(gè)方面,其一為在審計(jì)之前需要完全了解并熟知代碼的內(nèi)容,因此在審計(jì)之前的準(zhǔn)備時(shí)間較長,其次為由于測試內(nèi)容較多,容易造成測試不完善,有可能漏掉部分本身存在的漏洞。

4.4抽象解釋

審計(jì)原理:抽象解釋法是將程序代碼執(zhí)行的全部過程看做多個(gè)不同抽象狀態(tài)的遷移過程,并通過對多個(gè)抽象狀態(tài)進(jìn)行分析判斷,獲得最終的結(jié)果。初始抽象狀態(tài)必須是初始實(shí)際狀態(tài)或者最接近初始狀態(tài)的特殊狀態(tài),并且要求每次狀態(tài)遷移過程中要保持與原有狀態(tài)不變的關(guān)系,這樣做主要是保證分析過程的一致性。在理論上正確的抽象能夠找出程序在執(zhí)行過程中可能產(chǎn)生的在緩沖區(qū)溢出的各種漏洞和其他情況,但是相應(yīng)的也會有不同程度的誤報(bào),在實(shí)際的應(yīng)用過程中為了降低誤報(bào)率,用戶可以根據(jù)被檢測程序的特性選擇合適的抽象函數(shù)。主要優(yōu)勢:可將一個(gè)對象域的計(jì)算引申到另外一個(gè)對象域中,因此可使計(jì)算更加簡單容易,同時(shí)也是其他眾多檢測分析法的理論基礎(chǔ)。

5結(jié)語

本文對開源代碼組件安全審計(jì)進(jìn)行了綜合性系統(tǒng)介紹。通過對系統(tǒng)開展代碼安全審計(jì),有利于實(shí)現(xiàn)對系統(tǒng)全面深入的安全問題分析,及時(shí)發(fā)現(xiàn)漏洞,提前預(yù)防,提高軟件運(yùn)行的穩(wěn)定性。

作者:尹君 易榮 唐旭玥 王海林 單位:云南電網(wǎng)有限責(zé)任公司信息中心 云南云電同方科技有限公司

精選范文推薦