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