前言:想要寫出一篇引人入勝的文章?我們特意為您整理了開源代碼組件安全審計探究范文,希望能給你帶來靈感和參考,敬請閱讀。
摘要:隨著計算機信息技術(shù)的發(fā)展,開源代碼安全審計已經(jīng)是網(wǎng)絡(luò)安全建設(shè)的重要組成部分。本文首先介紹了開源代碼常見漏洞的類型及產(chǎn)生原因,其次介紹了開源代碼審計通常遵守的一般原則,最后重點介紹了開源代碼審計的主要技術(shù)方法。通過本文的研究,探討了開源代碼組件網(wǎng)絡(luò)安全審計的重要思想,普及了網(wǎng)絡(luò)安全意識,對促進網(wǎng)絡(luò)安全意識與軟件開發(fā)能力齊頭并進有參考價值。
關(guān)鍵詞:開源代碼;安全漏洞;代碼審計;信息安全
1引言
近些年隨著計算機科學(xué)技術(shù)的發(fā)展,應(yīng)用軟件的功能也隨著增大,與之對應(yīng)的就會使得源代碼的規(guī)模也大大增加,同時由于開源代碼本身的特點,這使得利用傳統(tǒng)的方法檢測代碼的安全漏洞工作難上加難。因此從源代碼的最原始位置出發(fā),對其進行檢測和分析,從而從根本上保護軟件和信息系統(tǒng)的安全,杜絕了代碼后門又能夠避免潛在的漏洞安全威脅,進一步保障了信息安全。對于計算機應(yīng)用軟件源代碼的審核工作,最常出現(xiàn)問題的是編碼階段,例如在SQL注入的階段、XSS跨站腳本攻擊等環(huán)節(jié)。解決這些最常見的問題的最優(yōu)方式是在軟件的源代碼中進行修改,由此可見,在進行應(yīng)用軟件信息保護的過程中,從最底層的源代碼著手,是解決該類問題的最有效手段。
2開源代碼漏洞的類型
隨著開源代碼的發(fā)展,對于開源代碼漏洞的研究逐漸深入,分類也不盡相同,主要原因是研究者從不同的角度對其進行劃分,因此對程序運行的影響也不同。通過對漏洞的分析,可以使得程序員對漏洞進行全面的描述和把握。通常而言,按照不同的分列依據(jù),潛在的分類屬性是其最根本的特征之一,因此這也是為漏洞賦予各種不同屬性的方式之一,通過這種方式可使得不同的漏洞類型具有各自的特征。常見漏洞如XSS漏洞、CSRF漏洞、Json-Hijacking漏洞、注入缺陷漏洞都是具有上述特征的典型代表。XSS漏洞全稱是CrossSiteScript,是Web安全中最為常見的漏洞,其攻擊原理是黑客通過給網(wǎng)頁“HTML注入”,在網(wǎng)頁中加入了惡意腳本內(nèi)容,使得網(wǎng)頁的內(nèi)容發(fā)生了改變,從而達到了控制控制用戶瀏覽器的一種攻擊方式。同時,這種網(wǎng)站訪問,可以是從正常的網(wǎng)站跨到黑客的服務(wù)器,也可以是黑客的服務(wù)器跨到正常的網(wǎng)站。這種漏洞最常出現(xiàn)在用戶需要輸入內(nèi)容的地方,這些地方一旦對輸入不進行處理,黑客就可以進行HTML注入,進而篡改網(wǎng)頁。CSRF漏洞全稱是CSRF(Cross-siterequestforgery),是一種常見的跨站偽造請求,這種方式與XSS漏洞最大的區(qū)別是CSRF通過偽裝成受信任用戶的請求來利用受信任的網(wǎng)站,相比于XSS攻擊,CSRF攻擊往往給用戶帶來更大的風(fēng)險,具有更高的危險性。其原理是攻擊者通過偽造一個鏈接,將鏈接發(fā)送給目標(biāo)用戶,該鏈接實際上是獲取某網(wǎng)站信任用戶信息的鏈接,目的是在用戶電腦上登錄該網(wǎng)站,一旦用戶點擊了該鏈接,實際上攻擊就完成了。Json-Hijacking漏洞其實是一個跨域數(shù)據(jù)竊取漏洞,它通過誘導(dǎo)用戶點擊惡意文件,重寫Array()的構(gòu)造函數(shù)的方法,將敏感的Json數(shù)據(jù)發(fā)送攻擊者,從而造成敏感信息泄露,所以可以理解為“通過CSRF方式導(dǎo)致的敏感信息泄露”。注入缺陷漏洞通常是由于程序開發(fā)人員在源代碼中假設(shè)條件造成的,這些假設(shè)條件會導(dǎo)致有效輸入的缺失。這種攻擊方式可以使攻擊者避開程序的訪問控制,從而對其內(nèi)容進行重新創(chuàng)建、修改或綜合刪除用戶的信息。通常有系統(tǒng)調(diào)用、Shell命令及SQL注入。SQL注入是目前黑客對數(shù)據(jù)庫進行攻擊最常使用的手段之一,一般可通過函數(shù)調(diào)用、緩沖區(qū)溢出、SQL操縱及代碼注入等方式操作。
3開源代碼審計的原則
通常代碼審計的第一步是閱讀系統(tǒng)開源代碼,然后檢查保證代碼正確安全的控制是否設(shè)置在了關(guān)鍵的邏輯流位置上。經(jīng)過審計的代碼能夠規(guī)避大部分應(yīng)用程序中的代碼漏洞,提高軟件的運行效率。
3.1確保輸入信息均不可信原則
在開源代碼程序中有很多輸入情況,主要包括系統(tǒng)內(nèi)部和外部輸入,這些用戶輸入的信息經(jīng)過軟件程序處理之后將進行展示。因此每一個輸入都有可能被惡意利用或者偽造成代碼紕漏。因此在輸入信息的過程中,對內(nèi)容進行嚴(yán)格的限定。據(jù)相關(guān)統(tǒng)計顯示,在漏洞里面由于輸入數(shù)據(jù)引起的安全問題占90%以上。
3.2遵循安全編碼基本規(guī)范原則
在計算機程序開發(fā)過程中有很多編程規(guī)范和標(biāo)準(zhǔn),因此程序員在進行程序開發(fā)的過程中要嚴(yán)格遵守規(guī)范和標(biāo)準(zhǔn),降低漏洞出現(xiàn)的可能性。此外不同的程序設(shè)計語言又推出了不同的標(biāo)準(zhǔn),要求使用本程序開發(fā)語言設(shè)計的程序員嚴(yán)格按照標(biāo)準(zhǔ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ī)則,同時也提供了規(guī)避產(chǎn)生類似錯誤的最佳操作指南。遵循安全的編碼規(guī)范在代碼開發(fā)的階段很有必要,同時也是降低程序源代碼出現(xiàn)漏洞的最有效方式之一。使用規(guī)范的編碼方式才能夠確保程序安全、穩(wěn)定的運行。此外源代碼審計制度制定的不同程序設(shè)計語言中的代碼安全規(guī)范,并在審查的過程中應(yīng)該檢查程序員是否遵照了本規(guī)范,若沒有遵照所制定的規(guī)范,但并沒有造成安全風(fēng)險的,這種代碼仍屬于存在安全風(fēng)險的代碼,需要在審計報告中明確指出。同時應(yīng)該給出合理的修改意見,限期在規(guī)定的時間內(nèi)進行修改完善,確保降低源代碼運行的安全風(fēng)險。
3.3漏洞與安全編碼內(nèi)在一致原則
就目前而言代碼審計主要是查找已知的安全漏洞,這些安全漏洞的發(fā)布通常依賴于一些有權(quán)威的國際組織,這些漏洞都是根據(jù)不同的安全漏洞模型反復(fù)查找得出的。通過使用數(shù)據(jù)流、控制流等技術(shù)查找出惡意數(shù)據(jù)的入口和惡意數(shù)據(jù)可能被利用的出口點,同時進行人工分析從入口到出口全過程的風(fēng)險等級,以此來判斷問題存在的真實性,同時所有的出入口都是基于開發(fā)源代碼語言API來測試的,因此這種測試與本身代碼的邏輯沒有任何關(guān)系,進一步確保了查找的準(zhǔn)確性。
3.4反向思考原則
在進行源代碼審計的過程中,審計人員應(yīng)該站在惡意用戶或者攻擊者的角度,多方位的考慮有可能攻擊的目標(biāo),保持靈活的思維,從各個方面對有可能進行攻擊的代碼進行全方位的排查和分析,對于有可能存在攻擊風(fēng)險的代碼進行更換。因此審計人員須轉(zhuǎn)變思維和角色身份,從攻擊者的角度檢查可能存在漏洞的地方,同時對有可能攻擊的地方進行更詳細(xì)的設(shè)計。
4開源代碼審計的主要技術(shù)方法
4.1漏洞產(chǎn)生的必要條件
漏洞產(chǎn)生的必要條件主要有三個,分別為第一,用戶可以控制的輸入,第二用戶可以獲得對應(yīng)的輸出,第三用戶可以利用輸入在服務(wù)器或者客戶端執(zhí)行權(quán)限的各項操作。第二個條件是直接通過訪問可以獲得對應(yīng)的結(jié)果,同時也包含了延遲判斷、非正常返回等各種結(jié)果獲取的方式,因此對不同方式返回的結(jié)果進行分類統(tǒng)計。第三個條件為主觀條件,是指在某一個權(quán)限范圍之內(nèi)出現(xiàn)的各種BUG,即使有設(shè)計者考慮不周全引起的,但這種操作的權(quán)限在管理者允許范圍之內(nèi),這種漏洞的判定彈性條件相對較大,也是能把握的一點。
4.2危險函數(shù)追蹤法
審計原理:由于開源代碼的特殊性,任何人可對其進行讀取、修改和刪除等操作,這些結(jié)果的實現(xiàn)都是通過程序設(shè)計的函數(shù)(方法)實現(xiàn)的,因此在對不同的函數(shù)進行審計時,采取針對性的方式獲得關(guān)鍵詞和函數(shù)等,這種方式達到了從關(guān)鍵程序(函數(shù)或方法)出發(fā),獲取危險源的目的。審計方法:在程序設(shè)計的編輯器中使用函數(shù)追蹤方法,如檢索、源碼審計等。主要優(yōu)勢:這種方法的優(yōu)點主要表現(xiàn)在兩個方面,其一為獲取速度快,二為能夠獲得源代碼,查詢源代碼中可能存在的漏洞代碼。不足:這種方法的缺點主要表現(xiàn)在兩個方面,其一為很難做到對整體文件進行檢查,特別是對于內(nèi)容較多的文件,其二是不能檢查文件內(nèi)容中存在的邏輯錯誤和邏輯對應(yīng)關(guān)系。
4.3邏輯分析法
審計原理:這是一種采取對所有可能出現(xiàn)概率都可以測試的方法,又稱為黑盒測試,在眾多程序設(shè)計語言中都可實現(xiàn)這種測試。通過對頁面內(nèi)容、頁面反應(yīng)、數(shù)據(jù)反應(yīng)及后臺反應(yīng)等中的數(shù)據(jù)監(jiān)測,獲得對應(yīng)的不同輸出,這種審計過程體現(xiàn)了權(quán)限關(guān)系、功能關(guān)系、角色關(guān)系等的思維導(dǎo)圖,能夠醒目清晰的展示各種關(guān)系。主要優(yōu)勢:這種方法的主要優(yōu)勢表現(xiàn)在兩個方面,其一為可以尋找相對危險的函數(shù)產(chǎn)生的各種漏洞,且發(fā)現(xiàn)的準(zhǔn)確率會很高,具有很強的針對性,其二為通過目前主要的黑盒測試、白盒測試及灰盒測試可以幾乎對所有的漏洞類型進行檢查,能夠滿足絕大多數(shù)的測試需求。不足:主要表現(xiàn)在兩個方面,其一為在審計之前需要完全了解并熟知代碼的內(nèi)容,因此在審計之前的準(zhǔn)備時間較長,其次為由于測試內(nèi)容較多,容易造成測試不完善,有可能漏掉部分本身存在的漏洞。
4.4抽象解釋
審計原理:抽象解釋法是將程序代碼執(zhí)行的全部過程看做多個不同抽象狀態(tài)的遷移過程,并通過對多個抽象狀態(tài)進行分析判斷,獲得最終的結(jié)果。初始抽象狀態(tài)必須是初始實際狀態(tài)或者最接近初始狀態(tài)的特殊狀態(tài),并且要求每次狀態(tài)遷移過程中要保持與原有狀態(tài)不變的關(guān)系,這樣做主要是保證分析過程的一致性。在理論上正確的抽象能夠找出程序在執(zhí)行過程中可能產(chǎn)生的在緩沖區(qū)溢出的各種漏洞和其他情況,但是相應(yīng)的也會有不同程度的誤報,在實際的應(yīng)用過程中為了降低誤報率,用戶可以根據(jù)被檢測程序的特性選擇合適的抽象函數(shù)。主要優(yōu)勢:可將一個對象域的計算引申到另外一個對象域中,因此可使計算更加簡單容易,同時也是其他眾多檢測分析法的理論基礎(chǔ)。
5結(jié)語
本文對開源代碼組件安全審計進行了綜合性系統(tǒng)介紹。通過對系統(tǒng)開展代碼安全審計,有利于實現(xiàn)對系統(tǒng)全面深入的安全問題分析,及時發(fā)現(xiàn)漏洞,提前預(yù)防,提高軟件運行的穩(wěn)定性。
作者:尹君 易榮 唐旭玥 王海林 單位:云南電網(wǎng)有限責(zé)任公司信息中心 云南云電同方科技有限公司