国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

軟件代碼漏洞的電子取證技術(shù)綜述

2016-01-24 08:05印杰李千目
軟件 2015年12期
關(guān)鍵詞:信息安全

印杰++李千目

摘要:軟件漏洞是當今信息系統(tǒng)最主要的安全漏洞來源。本文綜述了軟件漏洞的概念和特點,同時歸納和分析了當前主流的代碼漏洞分類標準,在此基礎上敘述了代碼漏洞分析方法的技術(shù)原理和國內(nèi)外的研究現(xiàn)狀,并分析了常見的漏洞取證方法的優(yōu)缺點。

關(guān)鍵詞:軟件漏洞;電子取證;信息安全

中圖分類號:TP391.41

文獻標識碼:A

DOI:10.3969/j.issn.1003-6970.2015.12.012

本文著錄格式:印杰,李千目.軟件代碼漏洞的電子取證技術(shù)綜述[J]軟件,2015,36(12):49-59

0 引言

軟件漏洞是信息安全風險的主要根源之一,是網(wǎng)絡攻防對抗中的重要目標,無論從國家層面的網(wǎng)絡安全戰(zhàn)略,還是社會層面的信息安全防護,安全漏洞已經(jīng)成為信息對抗雙方博弈的核心問題之一。2014年,國家信息安全漏洞庫收集并公布漏洞6824個,高危漏洞2440個,比例逐步上升,相關(guān)報告顯示境外有近7.3萬個IP地址作為木馬或僵尸網(wǎng)絡控制服務器參與攻擊我國境內(nèi)主機,境內(nèi)被控制主機數(shù)量高達1419萬臺,增幅近60%。信息安全形勢不容樂觀。

同時,針對源代碼漏洞的取證成為構(gòu)建安全體系的重要戰(zhàn)略之一,國內(nèi)信息安全體系的建立和實施需要安全平臺的技術(shù)支持與安全管理的體系支撐,為了保障信息基礎平臺,有必要進行源代碼漏洞取證的深入研究,來確保應用程序或者Web程序在信息平臺上的安全性,而另一方面,對于源代碼的漏洞取證研究已然不僅僅局限在PC端和Web層面上,隨著移動互聯(lián)網(wǎng)大力發(fā)展的趨勢,國家對于Android,IOS等移動平臺上的源代碼漏洞取證也同樣重視。因此,從某種程度上來說,源代碼漏洞取證的研究工作對于信息基礎平臺的安全性保障十分重要。

1 軟件漏洞

程序或硬件邏輯中設計和實現(xiàn)上的缺陷、人為設計和實現(xiàn)的隱蔽功能以及因使用管理不當造成的安全隱患統(tǒng)稱為漏洞,其主要特征是被人利用后會造成控制權(quán)的部分或全部轉(zhuǎn)移,往往使系統(tǒng)遭到非法操控或破壞,喪失合法控制權(quán)。

軟件漏洞是當今信息系統(tǒng)絕大多數(shù)安全漏洞的來源。軟件漏洞是軟件中存在的一些缺陷,這些缺陷可以被第三方或程序利用來進行未經(jīng)授權(quán)的資源訪問,或改變控制權(quán)限來執(zhí)行其他操作。軟件漏洞輕則造成相應的經(jīng)濟或財產(chǎn)損失(如敏感信息被盜,不可用的服務),重則導致嚴重的災難,尤其是發(fā)生在被人類生活和生計所依賴的關(guān)鍵基礎設施的軟件系統(tǒng)上(如核,生物,化學實驗室,電網(wǎng),水處理和分配系統(tǒng),空中交通控制和交通信號系統(tǒng))。

目前代碼安全審查和白盒安全測試被廣泛用于分析源代碼并檢測安全漏洞??蛇@些代碼安全審查解決方案有很多不足(例如精度問題,產(chǎn)生大量的誤報和漏報;可擴展性問題,為復雜的應用程序支持不足,無法處理的大型應用程序;適用性問題,需要大量的額外的人工操作的工作量等),導致它們無法廣泛的為程序員或測試人員應用。

自動代碼安全審查技術(shù)利用分析工具來執(zhí)行所有的代碼檢查,這就避免了安全審查人員手動代碼審查的過程,也節(jié)省了很多高度密集的工作量。但在自動代碼安全審查實踐中,會存在精度和可擴展性之間的權(quán)衡。目前有兩種不同的解決方案:

(1)犧牲精確度,一些自動化代碼審計工具利用字符串匹配或其它簡單的方法來快速檢查代碼,但它會產(chǎn)生大量的誤報和漏報。這些解決方案都是基于詞法檢查,只將檢測危險庫函數(shù)和系統(tǒng)調(diào)用的源代碼中進行對比而沒有進一步的分析,也就是RATS和ITS4語義分析。這是最簡單的方法,但會產(chǎn)生大量的誤報。例如,一個局部變量的名稱包含strcat都可以導致錯誤的報警。

(2)其他一些基于模型檢測的自動化代碼審計工具,把更多的注意力放在了精密性而不是可擴展性。它們的程序經(jīng)常要進行大量繁重的計算和分析,這就導致在處理大型應用程序時容易產(chǎn)生故障。

惰性抽象化技術(shù)展示了其不斷建立和改善需求的單一的抽象模型,它通過模型檢查器驅(qū)動,因此模型的不同部分可能會出現(xiàn)驗證了終止性的不同精確度的檢測方法。其他一些技術(shù),如MOPS也存在不同的模型檢測的解決方案,但模型檢測的局限是,在進行核查過程中有很多的注釋和謂詞會被插入到程序中,整個過程都需要程序員的參與。同時,由于程序分析要消耗大量資源,處理大型應用程序的能力十分欠缺。

2 代碼漏洞分類

2.1 通用弱點枚舉CWE

通用弱點枚舉(CWE,Common WeaknessEnumeration)是由美國國家安全局首先倡議的戰(zhàn)略行動,該行動的組織發(fā)布了《CWE/SANS最危險的程序設計錯誤》,其中列舉了最嚴重的25種代碼錯誤,同時也是軟件最容易受到攻擊的點。這個列表是SANS學院、MITRE以及“美國和歐洲很多頂級軟件安全專家”共同合作的成果。在CWE站點上列有800多個編程、設計和架構(gòu)上的錯誤,CWE文檔首先列舉的是針對程序員最重要的25項,從而幫助他們編寫更安全的代碼。同時文檔還適用于軟件設計師、架構(gòu)師、甚至CIO,他們應該了解這些可能出現(xiàn)的弱點,并采取恰當?shù)拇胧?。CWE是繼CVE(Common Vulnerabilities andExposures)之后的又一個安全漏洞詞典。通過這一詞典,Mitre希望提供識別、減輕、阻止軟件缺陷的通用標準。CWE也可以作為人們購買軟件的安全衡量標準,尤其是在購買旨在阻止或發(fā)現(xiàn)具體安全問題的安全工具時。

跨站腳本攻擊

跨站腳本攻擊(Cross Site Scripting),為不和層疊樣式表(Cascading Style Sheets,CSS)的縮寫混淆,故將跨站腳本攻擊縮寫為XSS。惡意攻擊者往Web頁面里插入惡意html代碼,當用戶瀏覽該頁之時,嵌入其中Web里面的html代碼會被執(zhí)行,從而達到惡意攻擊用戶的特殊目的。

SQL注入攻擊

SQL注入攻擊指的是通過構(gòu)建特殊的輸入作為參數(shù)傳人Web應用程序,而這些輸入大都是SQL語法里的一些組合,通過執(zhí)行SQL語句進而執(zhí)行攻擊者所要的操作,其主要原因是程序沒有細致地過濾用戶輸入的數(shù)據(jù),致使非法數(shù)據(jù)侵入系統(tǒng)。

當應用程序使用輸入內(nèi)容來構(gòu)造動態(tài)sql語句以訪問數(shù)據(jù)庫時,會發(fā)生sql注入攻擊。如果代碼使用存儲過程,而這些存儲過程作為包含未篩選的用戶輸入的字符串來傳遞,也會發(fā)生sql注入。sql注入可能導致攻擊者使用應用程序登陸在數(shù)據(jù)庫中執(zhí)行命令。相關(guān)的SQL注入可以通過測試工具pangolin進行。如果應用程序使用特權(quán)過高的帳戶連接到數(shù)據(jù)庫,這種問題會變得很嚴重。在某些表單中,用戶輸入的內(nèi)容直接用來構(gòu)造動態(tài)sql命令,或者作為存儲過程的輸入?yún)?shù),這些表單特別容易受到sql注入的攻擊。而許多網(wǎng)站程序在編寫時,沒有對用戶輸入的合法性進行判斷或者程序中本身的變量處理不當,使應用程序存在安全隱患。這樣,用戶就可以提交一段數(shù)據(jù)庫查詢的代碼,根據(jù)程序返回的結(jié)果,獲得一些敏感的信息或者控制整個服務器,于是sql注入就發(fā)生了。

緩沖區(qū)溢出

緩沖區(qū)溢出是指當計算機向緩沖區(qū)內(nèi)填充數(shù)據(jù)位數(shù)時超過了緩沖區(qū)本身的容量,使得溢出的數(shù)據(jù)覆蓋在合法數(shù)據(jù)上,理想的情況是程序檢查數(shù)據(jù)長度并不允許輸入超過緩沖區(qū)長度的字符,但是絕大多數(shù)程序都會假設數(shù)據(jù)長度總是與所分配的儲存空間相匹配,這就為緩沖區(qū)溢出埋下隱患。操作系統(tǒng)所使用的緩沖區(qū)又被稱為“堆?!?。在各個操作進程之間,指令會被臨時儲存在“堆?!碑斨?,“堆?!币矔霈F(xiàn)緩沖區(qū)溢出。

通過向程序的緩沖區(qū)寫超出其長度的內(nèi)容,造成緩沖區(qū)的溢出,從而破壞程序的堆棧,造成程序崩潰或使程序轉(zhuǎn)而執(zhí)行其它指令,以達到攻擊的目的。造成緩沖區(qū)溢出的原因是程序中沒有仔細檢查用戶輸入的參數(shù)。

跨站點偽造請求

CSRF(Cross-site request forgery跨站請求偽造,也被稱為“one click attack”或者session riding,通??s寫為CSRF或者XSRF,是一種對網(wǎng)站的惡意利用。盡管聽起來像跨站腳本(XSS),但它與XSS非常不同,并且攻擊方式幾乎相左。XSS利用站點內(nèi)的信任用戶,而CSRF則通過偽裝來自受信任用戶的請求來利用受信任的網(wǎng)站。與XSS攻擊相比,CSRF攻擊往往不大流行(因此對其進行防范的資源也相當稀少)和難以防范,所以被認為比XSS更具危險性。

不當?shù)脑L問控制授權(quán)

假設一個給定的身份的用戶,授權(quán)的過程是決定用戶是否可以訪問給定的資源,根據(jù)用戶的權(quán)利以及任意的許可或者可以應用在資源上的特殊訪問控制權(quán)限。

當訪問控制的檢查不一致或完全不做檢查時,所有的用戶都可以訪問數(shù)據(jù)或執(zhí)行數(shù)據(jù),這是他們不應該被允許執(zhí)行的操作。這可能會導致廣泛的問題,包括信息的泄露,拒絕服務攻擊,以及任意代碼的執(zhí)行。

在安全決策中信賴不被信任的輸入

開發(fā)者可以假設諸如cookies,環(huán)境變量,表單隱藏域等這些輸入不能被更改,然而,攻擊者可以利用自定義的客戶端或者其他的攻擊來改變這些輸入。這些改變可能不會被檢測到。當諸如驗證和授權(quán)等安全決策建立在這些輸入的基礎之上時,攻擊者可以繞過軟件安全實施攻擊。

不當?shù)貙⒙窂矫拗茷槭芟薜哪夸洠窂酱┩福?/p>

許多文件的操作是試圖是在一個受限制的目錄中發(fā)生。通過使用特殊的元素,如“..”和“/”分隔符,攻擊者可以跳出限制訪問系統(tǒng)其他地方的文件或目錄。最常見的一種特殊的符號是“../”,這在大多數(shù)現(xiàn)代操作系統(tǒng)被解釋為當前位置的父目錄,這屬于相對路徑遍歷。遍歷路徑還包括使用絕對路徑名如“/usr/local/bin”,這也可能是有用的文件意外訪問,這屬于絕對路徑遍歷。

在許多程序設計語言中,一個空字節(jié)注射(0或NULL字符)可以讓攻擊者截斷生成的文件名來擴大攻擊范圍。例如,該軟件可以添加“.txt”到任何路徑,從而限制了攻擊者的文本文件,但空字符注射可有效去除這個限制。

對危險類型文件的上載不加限制

對文件的上傳不做檢查,不加以限制,攻擊者可以利用這一漏洞上傳含有惡意代碼的文件,從而執(zhí)行惡意命令,對服務器產(chǎn)生破壞,甚至獲取到操作權(quán)限,重要的數(shù)據(jù),必須對上傳的文件類型加以限制以防止此類攻擊產(chǎn)生。

OS命令注入

允許攻擊者執(zhí)行意外的,直接作用在操作系統(tǒng)上的危險命令。這個缺點可以導致系統(tǒng)環(huán)境中,這個漏洞會導致原本無法直接進入操作系統(tǒng)的攻擊者找到一個易被破壞的環(huán)境,比如web應用程序,如果缺陷發(fā)生在一個有特權(quán)的程序,它可以允許攻擊者使用通常不能被訪問的命令或者攻擊者原本沒有權(quán)利執(zhí)行的命令。問題是如果過程不遵循最小特權(quán)原則,攻擊者控制命令可以運行特殊的系統(tǒng)特權(quán),增加系統(tǒng)的傷害量。

缺少對敏感數(shù)據(jù)的加密

對諸如登陸密碼等敏感數(shù)據(jù)采用明文的方式存儲,攻擊者可能會通過內(nèi)部攻擊獲取到這些數(shù)據(jù),采用安全的加密算法加密敏感數(shù)據(jù)總是正確的,以防止攻擊者通過各種攻擊方式獲取到關(guān)鍵數(shù)據(jù)源。

使用硬編碼的證書

硬編碼證書通常會產(chǎn)生一個顯著的漏洞,該漏洞允許攻擊者繞過軟件管理員配置的認證。該漏洞對系統(tǒng)管理員來說難以檢測。即使檢測到了也難以修復,這樣一來,系統(tǒng)管理員不得不被迫停止產(chǎn)品的使用。

使用不正確的長度值訪問緩沖區(qū)

這類漏洞是相當不安全的,因為使用錯誤的數(shù)據(jù)訪問緩沖區(qū)容易造成嚴重的后果,如緩沖區(qū)溢出攻擊,對緩沖區(qū)的使用一定要謹慎小心,在編寫程序時,你需要考慮到內(nèi)存管理以及堆棧的問題,使用過長的值訪問緩沖區(qū),造成越界的錯誤可能引發(fā)意想不到的后果。

PHP文件包含漏洞

文件包含漏洞即當程序員在包含文件的過程中引入了外部提交的數(shù)據(jù)參與包含的過程所產(chǎn)生的漏洞,這個漏洞是目前Web攻擊中最利用率最高的一個漏洞,攻擊者可以輕松獲取服務器的訪問權(quán)限(即拿到webshell)。而文件包含通常又有本地文件包含(Local File Inclusion)和遠程文件包含(Remote File Inclusion)之分。allow_url_fop en和allow_url_include是決定包含屬于本地文件包含(LFI)還是遠程文件包含(RFI)的條件,在PHP4中則只有一個allow_url_fop en選擇。其中allow_url_fopen和allow_url_include為On的情況為遠程文件包含漏洞,相反為本地文件包含漏洞。

對數(shù)組索引檢查不當

對數(shù)組的索引檢查不當,訪問了超出數(shù)組長度的索引,引發(fā)未知的錯誤,在編寫程序時,沒有對索引變量進行檢查,誤以為訪問數(shù)組沒有越界,在程序運行時產(chǎn)生錯誤的結(jié)果,拋出意外的異常,甚至產(chǎn)生破壞。同樣攻擊者可以利用這點構(gòu)造緩沖區(qū)溢出的攻擊。

對非正常或異常的條件檢測不當

程序員可能會認為某些事件或者條件永遠不會出現(xiàn),所以不需要擔心這類情況發(fā)生,比如內(nèi)存不足,由于權(quán)限限制缺少對資源的訪問,或者行為不端的客戶端或組建等情況。然而,攻擊者可能會試圖觸發(fā)這些不尋常的條件,從而破壞程序程序員原有的設想并引起異常,錯誤的行為或者對程序產(chǎn)生破壞。

通過錯誤消息透露信息

敏感信息可能是對自己有價值的信息(如密碼),或者可以利用它發(fā)起更致命的攻擊。如果攻擊失敗,攻擊者可以使用服務器提供的的錯誤信息發(fā)起集中攻擊。例如,試圖利用一個路徑遍歷的弱點(cwe-22)可能產(chǎn)生應用程序的安裝全路徑。反過來,這可以用來選擇“..序列定位到目標文件的適當數(shù)量。使用SQL注入攻擊(cwe-89)可能最初不能成功,但顯示畸形查詢的一個錯誤消息,并將在查詢中使用的查詢邏輯甚至密碼或其他敏感信息暴露JLH來。

整型溢出和環(huán)繞

整型溢出顧名思義,就是由用戶提交的整型數(shù)據(jù)超出程序內(nèi)部對整型數(shù)的安全要求,造成違反原來的程序限制,導致其他類型的溢出。一般來說,整型溢出并不能直接導致改變程序流程,它是由整型溢出造成字符串類型的溢出,從而導致覆蓋系統(tǒng)數(shù)據(jù)結(jié)構(gòu),改變程序流程。值得注意的就是程序內(nèi)部對整型數(shù)的安全數(shù)據(jù)范圍要求,而不是僅僅字符串數(shù)據(jù)范圍的要求,這是整型溢出的根本原因。

對緩沖區(qū)大小計算錯誤

對緩沖區(qū)的大小計算錯誤,產(chǎn)生潛在的漏洞風險,開發(fā)者在設計程序時沒有考慮到要分配緩沖區(qū)的合理大小,分配了一個不恰當或者較小的內(nèi)存空間,在面對精心構(gòu)造的數(shù)據(jù)時,可能會產(chǎn)生緩沖區(qū)溢出,淹沒原有的數(shù)據(jù)。攻擊者可以利用該漏洞構(gòu)造緩沖區(qū)溢出攻擊。

缺少對重要功能的授權(quán)

對于一些重要的功能,如管理用戶日志,管理備份數(shù)據(jù)等系統(tǒng)功能,沒有設置權(quán)限檢測,導致一些重要功能被除管理員以及更高級別的用戶訪問外,能被攻擊者以某些方式訪問甚至惡意修改,惡意刪除。對于系統(tǒng)重要功能,需要授權(quán)訪問,保證關(guān)鍵數(shù)據(jù)不會被泄露和惡意篡改。時刻保持對敏感數(shù)據(jù)訪問源的可信度進行授權(quán)檢查,以確保系統(tǒng)重要功能的使用安全。

下載代碼卻不做完整性檢查

攻擊者可以通過影響主機服務器執(zhí)行惡意代碼,如DNS欺騙,或者在傳輸中修改代碼。對于手機應用的代碼最為普遍,盡管在任何管理自己的更新的軟件中都可能存在。攻擊者可以通過修改下載源的代碼,使得用戶下載并執(zhí)行了被精心修改過的代碼,從而產(chǎn)生嚴重后果。

對重要的資源賦值不當

當資源被授權(quán)獲得更大的被請求訪問范圍時,可能會使得敏感數(shù)據(jù)暴露,或者資源被意外的方式所修改,當該資源和程序的配置以及用戶的敏感數(shù)據(jù)相關(guān)聯(lián)時,這是非常危險的行為。

分配資源卻不做限制和調(diào)節(jié)

在預定的安全策略中,給相關(guān)請求分配資源不做限制和調(diào)節(jié),可能會導致資源搶占,資源耗盡,或者死鎖的情況產(chǎn)生。攻擊者可以通過對某一重要資源的請求使得該資源被過度使用,從而使得系統(tǒng)癱瘓。而對于內(nèi)建資源管理的程序,此類問題可以有效避免。

重定向到不受信任站點的URL(開放重定向)

一個http參數(shù)可能含有URL值并且可能造成Web程序重定向到這個特殊的URL參數(shù)請求。通過修改URL的值到一個惡意站點,攻擊者可以成功的啟用掛馬竊取用戶的機密信息。而因為修改后的服務器名和原戰(zhàn)點鏈接相同,使得這種釣魚網(wǎng)站有更高的可信度,從而產(chǎn)生更大的危害。

使用被破解或者有風險的加密算法

使用不標準的加密算法或者有風險的加密算法對數(shù)據(jù)加密,攻擊者可以通過字典構(gòu)造或者其他相對的破解算法對加密數(shù)據(jù)進行破解,諸如一些被技術(shù)所攻破的算法不要使用,對敏感數(shù)據(jù)的加密要使用更為安全和復雜的加密算法。

競爭條件

在安全關(guān)鍵代碼中進行預期同步,諸如對記錄用戶是否被授權(quán)認證或者修改重要的敏感信息不應愛由外部人員所影響。競爭條件發(fā)生在并行環(huán)境,并有效地作為適當?shù)拇a序列屬性。競爭條件違反這些屬性:獨一無二的代碼序列進行資源共享,即獨占訪問,沒有其他的代碼序列可以在原始序列完成執(zhí)行修改的共享資源的特性。競爭條件存在時,一個“干擾碼”仍然可以訪問共享資源,違反壟斷。程序員可能會假定某些被干擾碼序列影響的代碼序列執(zhí)行太快;當競爭條件不在的時候,這違反了原子行為。例如,單一的“X++”的聲明可能會出現(xiàn)在原子代碼層,但它實際上是在非原子的指令層,因為它涉及到一個讀取(原始值X),隨后計算(x+1),其次是寫入(保存結(jié)果到X)。干擾碼序列可以是“可信的”或“不可信的”。一個可信的干擾碼序列發(fā)生在程序中且它不能被攻擊者修改,它只能間接地被使用。一個不受信任的干擾碼序列可以直接編寫攻擊命令,產(chǎn)生的通常是脆弱的程序。

2.2 開放式Web應用程序安全OWASP

開放式Web應用程序安全項目(OWASP,Open Web Application Security Project)是一個非盈利組織,不附屬于任何企業(yè)或財團,因此由OWASP提供和開發(fā)的所有設施和文件都不受商業(yè)因素的影響。它提供有關(guān)計算機和互聯(lián)網(wǎng)應用程序的公正、實際、有成本效益的信息。其目的是協(xié)助個人、企業(yè)和機構(gòu)來發(fā)現(xiàn)和使用可信賴軟件。OWASP支持商業(yè)安全技術(shù)的合理使用,它有一個論壇,在論壇里信息技術(shù)專業(yè)人員可以發(fā)表和傳授專業(yè)知識和技能。

OWASP目前全球有130個分會近萬名會員,其主要目標是研議協(xié)助解決Web軟體安全之標準、T具與技術(shù)文件,長期致力于協(xié)助政府或企業(yè)了解并改善網(wǎng)頁應用程式與網(wǎng)頁服務的安全性。由于應用范圍日廣,網(wǎng)頁應用安全已經(jīng)逐漸的受到重視,并漸漸成為在安全領(lǐng)域的一個熱門話題,在此同時,黑客們也悄悄的將焦點轉(zhuǎn)移到網(wǎng)頁應用程式開發(fā)時所會產(chǎn)生的弱點來進行攻擊與破壞。

2013年版的OWASP Top 10文檔所基于的8個數(shù)據(jù)組由7家專業(yè)的應用安全公司提供,其中包括:4家咨詢公司,3家產(chǎn)品OR SaaS提供商(其中,1家提供靜態(tài)工具,1家提供動態(tài)工具,1家兩者都提供)。數(shù)據(jù)涵蓋了來自上百家組織上千個應用,超過500,000個漏洞。Top 10根據(jù)所有這些相關(guān)數(shù)據(jù)挑選和排序,并與可利用性、可檢測性和影響程度的一致評估相結(jié)合。OWASP Top 10的首要目的是培訓開發(fā)人員、設計人員、架構(gòu)師、經(jīng)理和企業(yè)組織,讓他們認識到最嚴重的web應用程序安全漏洞所產(chǎn)生的后果。Top 10提供了防止這些高風險問題的基本方法,并提供了獲得這些方法的來源。

注入

注入攻擊漏洞,例如SQL,OS以及LDAP注入。這些攻擊發(fā)生在當不可信的數(shù)據(jù)作為命令或者查詢語句的一部分,被發(fā)送給解釋器的時候。攻擊者發(fā)送的惡意數(shù)據(jù)可以欺騙解釋器,以執(zhí)行計劃外的命令或者在未被恰當授權(quán)時訪問數(shù)據(jù)。

任何能夠向系統(tǒng)發(fā)送不信任數(shù)據(jù)的人都是潛在的攻擊者,包括外部用戶,內(nèi)部用戶和管理員。攻擊者利用有針對性的解釋器語法發(fā)送簡單的、基于文本的攻擊。幾乎任何數(shù)據(jù)源都能成為注入載體,包括內(nèi)部來源。注入漏洞發(fā)生在應用程序?qū)⒉豢尚诺臄?shù)據(jù)發(fā)送到解釋器時。注入漏洞十分普遍,尤其是在遺留代碼中。通常能在SQL查詢語句、LDAP查詢語句、Xpath查詢語句、OS命令、XML解析器、SMTP頭、程序參數(shù)等中找到。注入漏洞很容易通過審查代碼發(fā)現(xiàn),但是卻不容易在測試中發(fā)現(xiàn)。掃描器和模糊測試工具可以幫助攻擊者找到這些漏洞。注入能導致數(shù)據(jù)丟失或數(shù)據(jù)破壞、缺乏可審計性或是拒絕服務。注入漏洞有時甚至能導致完全主機接管。所有的數(shù)據(jù)都有可能被偷竊,篡改和刪除。

失效的身份認證和會話管理

與身份認證和會話管理相關(guān)的應用程序功能往往得不到正確的實現(xiàn),這就導致了攻擊者破壞密碼、密匙、會話令牌或攻擊其他的漏洞去冒充其他用戶的身份。

任何匿名的外部攻擊者和擁有賬號的用戶都可能試圖盜取其他用戶賬號。同樣也會有內(nèi)部人員為了掩飾他們的行為而這么做。攻擊者使用認證或會話管理功能中的泄露或漏洞(比如暴露的帳戶、密碼、或會話ID)來假冒用戶。開發(fā)者通常會建立白定義的認證和會話管理方案。但要正確實現(xiàn)這些方案卻很難,結(jié)果這些自定義的方案往往在如下方面存在漏洞:退出、密碼管理、超時、記住我、秘密問題、帳戶更新等等。因為每一個實現(xiàn)都不同,要找出這些漏洞有時會很困難。這些漏洞可能導致部分甚至全部帳戶遭受攻擊。一旦成功,攻擊者能執(zhí)行受害用戶的任何操作。因此特權(quán)帳戶是常見的攻擊對象。需要考慮受影響的數(shù)據(jù)及應用程序功能的商業(yè)價值。還應該考慮漏洞公開后對業(yè)務的不利影響。

跨站腳本

當應用程序收到含有不可信的數(shù)據(jù),在沒有進行適當?shù)尿炞C和轉(zhuǎn)義的情況下,就將它發(fā)送給一個網(wǎng)頁瀏覽器,這就會產(chǎn)生跨站腳本攻擊(簡稱XSS)。XSS允許攻擊者在受害者的瀏覽器上執(zhí)行腳本,從而劫持用戶會話、危害網(wǎng)站、或者將用戶轉(zhuǎn)向至惡意網(wǎng)站。

任何能夠發(fā)送不可信數(shù)據(jù)到系統(tǒng)的人,包括外部用戶、內(nèi)部用戶和管理員。攻擊者利用瀏覽器中的解釋器發(fā)送基于文本的攻擊腳本。幾乎所有數(shù)據(jù)源都能成為攻擊媒介,包括內(nèi)部數(shù)據(jù)源比如數(shù)據(jù)庫中的數(shù)據(jù)。XSS是最普遍的web應用安全漏洞。當應用程序發(fā)送給瀏覽器的頁面中包含用戶提供的數(shù)據(jù),而這些數(shù)據(jù)沒有經(jīng)過適當?shù)尿炞C或轉(zhuǎn)義(escape),就會導致跨站腳本漏洞。有三種已知的跨站漏洞類型:1)存儲式;2)反射式;3)基于DOM的XSS。大部分跨站腳本漏洞通過測試或代碼分析很容易找到。攻擊者能在受害者的瀏覽器中執(zhí)行腳本以劫持用戶會話、破壞網(wǎng)站、插入惡意內(nèi)容、重定向用戶、使用惡意軟件劫持用戶瀏覽器等等??紤]受影響的系統(tǒng)及該系統(tǒng)處理的所有數(shù)據(jù)的商業(yè)價值。還應該考慮漏洞公開后對業(yè)務的不利影響。

不安全的直接對象引用

當開發(fā)人員暴露一個對內(nèi)部實現(xiàn)對象的引用時,例如,一個文件、目錄或者數(shù)據(jù)庫密匙,就會產(chǎn)生一個不安全的直接對象引用。在沒有訪問控制檢測或其他保護時,攻擊者會操控這些引用去訪問未授權(quán)數(shù)據(jù)。

考慮系統(tǒng)的用戶類型。對于某些系統(tǒng)數(shù)據(jù)類型,是否有的用戶只具有部分訪問權(quán)限。作為授權(quán)的系統(tǒng)用戶,攻擊者只需要修改指向一個系統(tǒng)對象的直接引用參數(shù)值,讓其指向另一個無權(quán)訪問的對象,系統(tǒng)是否會允許這樣的訪問。當生成web頁面時,應用程序經(jīng)常使用對象的實名或關(guān)鍵字。而應用程序并不會每次都驗證用戶是否有權(quán)訪問該目標對象,這就導致了不安全的直接對象引用漏洞。測試者能輕易操作參數(shù)值以檢測該漏洞。代碼分析能很快顯示應用程序是否進行了適當?shù)臋?quán)限驗證。這種漏洞能破壞通過該參數(shù)引用的所有數(shù)據(jù)。除非對象引用是不可預知的,否則攻擊者很容易訪問該類型的所有數(shù)據(jù)??紤]暴露的數(shù)據(jù)的商業(yè)價值。還應該考慮漏洞公開后對業(yè)務的不利影響。

安全配置錯誤

好的安全需要對應用程序、框架、應用程序服務器、web服務器、數(shù)據(jù)庫服務器和平臺定義和執(zhí)行安全配置。由于許多設置的默認值并不是安全的,因此,必須定義、實施和維護這些設置。這包含了對所有的軟件保持及時地更新,包括所有應用程序的庫文件。

考慮外部的匿名攻擊者和擁有自己帳戶的內(nèi)部用戶都可能會試圖破壞系統(tǒng)的。另外考慮想要掩飾他們的攻擊行為的內(nèi)部攻擊者。攻擊者訪問默認帳戶、未使用的網(wǎng)頁、未安裝補丁的漏洞、未被保護的文件和目錄等,以獲得對系統(tǒng)未授權(quán)的訪問或了解。安全配置錯誤可以發(fā)生在一個應用程序堆棧的任何層面,包括平臺、Web服務器、應用服務器、數(shù)據(jù)庫、框架和白定義代碼。開發(fā)人員和系統(tǒng)管理員需共同努力,以確保整個堆棧的正確配置。自動掃描器可用于檢測未安裝的補丁、錯誤的配置、默認帳戶的使用、不必要的服務等。這些漏洞使攻擊者能經(jīng)常訪問一些未授權(quán)的系統(tǒng)數(shù)據(jù)或功能。有時,這些漏洞導致系統(tǒng)的完全攻破。系統(tǒng)可能在你未知的情況下被完全攻破。你的數(shù)據(jù)可能會隨著時間推移被全部盜走或者篡改?;謴偷幕ㄙM可能會很昂貴。

敏感信息泄露

許多Web應用程序沒有正確保護敏感數(shù)據(jù),如信用卡,稅務ID和身份驗證憑據(jù)。攻擊者可能會竊取或篡改這些弱保護的數(shù)據(jù)以進行信用卡詐騙、身份竊取,或其他犯罪。敏感數(shù)據(jù)值需額外的保護,比如在存放或在傳輸過程中的加密,以及在與瀏覽器交換時進行特殊的預防措施。

考慮誰可以訪問您的敏感數(shù)據(jù)和這些數(shù)據(jù)的備份。這包括靜態(tài)數(shù)據(jù)、傳輸中的數(shù)據(jù)甚至是客戶瀏覽器中的數(shù)據(jù)。攻擊者通常不直接攻擊加密系統(tǒng)。他們往往通過諸如竊取密鑰、發(fā)起中間人攻擊或從服務器竊取明文數(shù)據(jù)等方式對傳輸中的或者客戶瀏覽器中的數(shù)據(jù)進行破解。在這個領(lǐng)域最常見的漏洞是應該加密的數(shù)據(jù)不進行加密。在使用加密的情況下,常見的問題是不安全的密鑰生成和管理和使用弱算法是很普遍的,特別是使用弱的哈希算法來保護密碼。瀏覽器的漏洞也很普遍,且可以很輕易的檢測到,但是很難大規(guī)模的利用。外部攻擊者因訪問的局限性很難探測這種漏洞,并且難以利用。這個領(lǐng)域的錯誤頻繁影響那些本應該加密的數(shù)據(jù)。這些信息通常包括很多敏感數(shù)據(jù),比如醫(yī)療記錄,認證憑證,個人隱私數(shù)據(jù),信用卡信息,等等??紤]丟失數(shù)據(jù)和聲譽影響造成的商業(yè)損失。如果這些數(shù)據(jù)被泄露,那你要承擔的法律責任是什么,另外考慮到對企業(yè)造成的聲譽影響。

功能級訪問控制缺失

大多數(shù)Web應用程序在功能在UI中可見以前,驗證功能級別的訪問權(quán)限。但是,應用程序需要在每個功能被訪問時在服務器端執(zhí)行相同的訪問控制檢查。如果請求沒有被驗證,攻擊者能夠偽造請求以在未經(jīng)適當授權(quán)時訪問功能。

任何人具有網(wǎng)絡訪問權(quán)限的人都可以向你的應用程序發(fā)送一個請求。匿名用戶可以訪問私人網(wǎng)頁嗎,又或者普通用戶可以訪問享有特權(quán)的網(wǎng)頁嗎。攻擊者是被授權(quán)的系統(tǒng)用戶,很容易就把網(wǎng)址更改成享有特權(quán)的網(wǎng)頁,這樣的訪問會被允許嗎。匿名用戶可以訪問未受保護的私人網(wǎng)頁。應用程序并不總是能正確地保護頁面請求。有時功能級的防護是通過配置來管理的,而系統(tǒng)的配置是錯誤的。開發(fā)人員必須要做相應的代碼檢查,然而,有時他們忘記了。檢測這些漏洞是很容易的。最難的是確定應用程序存在哪些可被攻擊的網(wǎng)頁或者鏈接(URI)。這種漏洞允許攻擊者訪問未經(jīng)授權(quán)的功能。管理性的功能是這類攻擊的主要目標。考慮被暴露的功能及其處理的數(shù)據(jù)的商業(yè)價值。另外考慮如果這樣的弱點被公布于眾而對你造成的名譽影響。

跨站請求偽造

一個跨站請求偽造攻擊迫使登錄用戶的瀏覽器將偽造的HTTP請求,包括該用戶的會話cookie和其他認證信息,發(fā)送到一個存在漏洞的web應用程序。這就允許了攻擊者迫使用戶瀏覽器向存在漏洞的應用程序發(fā)送請求,而這些請求會被應用程序認為是用戶的合法請求。

考慮可能將內(nèi)容載入你用戶的瀏覽器并迫使他們向你的網(wǎng)站提交請求的任何人。你的用戶所訪問的任何網(wǎng)站或者HTML源(feed)都可以這樣做。攻擊者創(chuàng)建偽造HTTP請求并通過圖片標簽、跨站腳本或許多其他技術(shù)誘使受害用戶提交這些請求。如果該受害用戶已經(jīng)經(jīng)過身份認證,那么攻擊就能成功。CSRF是利用某些web應用程序允許攻擊者預測一個特定操作的所有細節(jié)這一特點。由于瀏覽器自動發(fā)送會話cookie等認證憑證,攻擊者能創(chuàng)建惡意web頁面產(chǎn)生偽造請求。這些偽造請求很難與合法請求區(qū)分開??缯菊埱髠卧炻┒纯梢院苋菀淄ㄟ^滲透測試或代碼分析檢測到。攻擊者能欺騙受害用戶完成該受害者所允許的任意狀態(tài)改變的操作,比如:更新帳號細節(jié),完成購物,注銷甚至登錄等操作。考慮受影響的數(shù)據(jù)和應用功能的商業(yè)價值。試想如果并不知道這些操作是否是用戶的真正意愿會產(chǎn)生什么后果,同時考慮帶來的聲譽影響。

使用含有已知漏洞的組件

組件,比如:庫文件、框架和其它軟件模塊,幾乎總是以全部的權(quán)限運行。如果一個帶有漏洞的組件被利用,這種攻擊可以造成更為嚴重的數(shù)據(jù)丟失或服務器接管。應用程序使用帶有已知漏洞的組件會破壞應用程序防御系統(tǒng),并使一系列可能的攻擊和影響成為可能。

一些含有漏洞的組件(如:框架庫)可以被自動化工具發(fā)現(xiàn)和利用。這使得威脅代理部分引入了“混亂”的角色,而不僅僅是攻擊者了。攻擊者通過掃描或手動分析識別問題組件,然后根據(jù)需要定制攻擊代碼并實施攻擊。在應用中使用組件越深入,實施攻擊的難度越大。事實上,大多數(shù)的應用都存在這些問題。因為大多數(shù)的開發(fā)團隊并不會把及時更新組件/庫作為他們的工作重心。在很多情況下,開發(fā)者都不了解他們所使用的全部組件,更不用說組件的版本了。組件的依賴性使情況更加糟糕??赡苁怯傻偷礁呷盗械穆┒?,包括注入,破損的訪問控制,XSS等。受影響范圍也從最低的受損到主機被完全接管和數(shù)據(jù)的泄漏??紤]一下受影響的應用中,每個脆弱點對業(yè)務控制來說意味著什么??赡苁欠浅<毼⒌挠绊懀灿锌赡芤馕吨煌耆テ?。

未驗證的重定向和轉(zhuǎn)發(fā)

Web應用程序經(jīng)常將用戶重定向和轉(zhuǎn)發(fā)到其他網(wǎng)頁和網(wǎng)站,并且利用不可信的數(shù)據(jù)去判定目的頁面。如果沒有得到適當驗證,攻擊者可以重定向受害用戶到釣魚軟件或惡意網(wǎng)站,或者使用轉(zhuǎn)發(fā)去訪問未授權(quán)的頁面。

考慮所有能誘使用戶向網(wǎng)站遞交請求的人。用戶使用的任何網(wǎng)站或其他HTML源(feed)都可以這樣做。攻擊者鏈接到未驗證的重定向并誘使受害者去點擊。由于是鏈接到有效的網(wǎng)站,受害者很有可能去點擊。攻擊者利用不安全的轉(zhuǎn)發(fā)繞過安全檢測。應用程序經(jīng)常將用戶重定向到其他網(wǎng)頁,或以類似的方式進行內(nèi)部轉(zhuǎn)發(fā)。有時,目標網(wǎng)頁是通過一個未經(jīng)驗證的參數(shù)來指定的,這就允許攻擊者選擇目標頁面。檢測未經(jīng)驗證的重定向很容易,只需尋找那些允許你指定整個URL的重定向。但檢測未經(jīng)驗證的轉(zhuǎn)發(fā)困難些,因為它們的目標是內(nèi)部網(wǎng)頁。這種重定向可能試圖安裝惡意軟件或者誘使受害者泄露密碼或其他敏感信息。不安全的轉(zhuǎn)發(fā)可能允許繞過訪問控制。

3 軟件代碼安全漏洞取證方法

近年來,國外的研究熱點集中在對漏洞取證的建模、針對已知漏洞的安全編程技術(shù)、針對安全漏洞的路徑敏感分析、應用數(shù)據(jù)流分析到漏洞檢測的研究中和漏洞特征的快速匹配等。除了科研機構(gòu),國外的黑客在這方面也做了大量的工作。國外頂級的黑客會議,如Black Hat大會、Defcon大會,在會上有很多與安全相關(guān)的議題,都是當前安全研究的熱點。著名的Phrack黑客雜志也是專注于安全技術(shù)的有名刊物。Bugtraq郵件組和CVE都致力于收集軟件的脆弱點。Security Focus的Bugtraq郵件組是很多安全研究人員首選的討論區(qū),CVE則是專家們所選擇的分類方式討論區(qū)。

相對來說國內(nèi)起步較晚,但同樣取得不錯的成績。在國內(nèi),網(wǎng)絡安全焦點(xfocus)、綠盟科技、啟明星辰和CCERT(中國教育和科研計算機網(wǎng)緊急響應組)等是國內(nèi)安全研究機構(gòu)的代表,并且維護了自己的漏洞數(shù)據(jù)庫。xcon大會被譽為國內(nèi)最頂級的探討安全問題的大會。在2013年的xcon大會上就有關(guān)于軟件安全漏洞的議題,比如夏超的二進制環(huán)境下的緩沖區(qū)溢出漏洞動態(tài)取證技術(shù)。2015年的xcon會議上也出現(xiàn)了關(guān)于軟件安全的探討。

目前軟件安全漏洞的檢測技術(shù)包括靜態(tài)分析檢測技術(shù)和動態(tài)檢測技術(shù)。靜態(tài)檢測技術(shù)是利用二進制比對技術(shù)、詞法分析、形式化驗證技術(shù)或者手工測試技術(shù),對被測程序的源程序或二進制代碼進行掃描,然后從語法、語義上理解程序的行為,并分析程序的特征,找出可能導致程序異常的漏洞。這類技術(shù)具有簡單高效自動化的優(yōu)勢,但只是對代碼本身的特征進行檢查,不能很好檢測出漏洞間復雜的邏輯關(guān)聯(lián),并且存在大量的誤報和漏報;動態(tài)檢測技術(shù)是通過自動化生成測試數(shù)據(jù),以仿真攻擊應用程序來判斷是否存在漏洞,主要手段是利用各種輸入對程序進行探測,并分析程序運行環(huán)境等。這類技術(shù)效率不如靜態(tài)分析檢測技術(shù),但它能準確的定位漏洞。本文詳細綜述了常見的源代碼安全漏洞取證方法。

3.1 非執(zhí)行棧技術(shù)

基于棧進行攻擊的事件最近幾年經(jīng)常發(fā)生,原因就是很多操作系統(tǒng)的棧是可以寫與執(zhí)行的,而且內(nèi)部變量尤其是數(shù)組變量都保存在棧中,攻擊者向棧中注入惡意代碼,然后想方設法來執(zhí)行這段代碼。棧攻擊技術(shù)的文檔也比較全面,這從某種程度上加速了基于棧的攻擊。一個最直接的防范棧攻擊的方法就是使得棧不能執(zhí)行代碼。這樣即使攻擊者在棧中寫入了惡意代碼,這個惡意代碼也不會被執(zhí)行,在一定程度上防住了一些攻擊者。只是這個方法需要在操作系統(tǒng)層進行修改,同時,不可執(zhí)行棧的技術(shù)涉及到的一個大問題就是性能問題。此外,在既有棧溢出漏洞又有堆溢出漏洞的程序中,易出問題。可以利用棧溢出使程序跳轉(zhuǎn)至攻擊代碼,該代碼是被放置在堆上。沒有實際執(zhí)行棧中的代碼,而是執(zhí)行了堆中的代碼。該技術(shù)所付出的代價就是對操作系統(tǒng)內(nèi)核引入一個微小的改變:把棧頁標記為不可執(zhí)行。

該技術(shù)的檢測不夠全面,它僅能檢測并阻止摧毀棧攻擊。一個攻擊者可以通過把惡意代碼注入到數(shù)據(jù)段來繞過該技術(shù)的檢測,他只需要把棧中返回地址覆蓋掉,使得這個返回地址指向數(shù)據(jù)段中的惡意代碼就可以了。該技術(shù)可能會造成小量的兼容性問題,因為有個別的應用程序就是依靠棧執(zhí)行來正確運行的。該技術(shù)對性能的消耗可以被忽略,有報告稱這項技術(shù)僅僅在上下文切換時增加了2到3個CPU的指令周期。

3.2 非執(zhí)行堆與數(shù)據(jù)技術(shù)

由于堆是程序運行時動態(tài)分配內(nèi)存的區(qū)域,而數(shù)據(jù)段則是程序編譯時就初始化好了的。很長時期以來,由于擔心非執(zhí)行的堆與數(shù)據(jù)段會破壞軟件的正常運行,所以該方法進展緩慢,最近幾年才有些進展和文章。如果堆和數(shù)據(jù)段都不能執(zhí)行代碼,攻擊者注入其中的惡意代碼將不能被執(zhí)行。這項技術(shù)和前面的非執(zhí)行棧技術(shù)結(jié)合能起到更全面的作用,使得惡意代碼徹底失去執(zhí)行機會。使用該技術(shù)所付出的代價要比非執(zhí)行棧技術(shù)大一些,因為它對內(nèi)核的修改要多一些?,F(xiàn)在已經(jīng)有了大量的實例可以使用,這個技術(shù)還是可以接受的。

從全面性上來看,該技術(shù)對于幾乎所有的利用把惡意代碼注入進程內(nèi)存中的攻擊都可以檢測并阻止。但是,對于惡意修改函數(shù)指針和函數(shù)參數(shù)的攻擊沒有辦法檢測和防范。該技術(shù)改變了傳統(tǒng)程序在堆或數(shù)據(jù)段中動態(tài)生成代碼的方式,會造成很多應用程序的不兼容性。另外,使用這個技術(shù)來檢測并排除漏洞對很多的應用不會產(chǎn)生太大影響,性能上的消耗也可以忽略。

3.3 內(nèi)存映射技術(shù)

有些攻擊者通過使用NULL結(jié)尾的字符串來覆蓋內(nèi)存,以達到攻擊的目的。通過使用映射代碼頁方法,將使得攻擊者很難通過NULL結(jié)尾的字符串來跳轉(zhuǎn)到較低的內(nèi)存區(qū),而且這些代碼本身又可能含有NULL字符。再者,把代碼頁隨機地映射到不同的內(nèi)存地址,在某種程度上防止了那些靠猜地址來進行攻擊的攻擊方法。比如對于緩沖區(qū)溢出的漏洞,攻擊者就是要尋找目標進程在內(nèi)存中的某些地址,然后構(gòu)造自己的數(shù)據(jù)來覆蓋這些地址。這些地址在很多操作系統(tǒng)上都是有規(guī)律可以計算出的。如果使用內(nèi)存映射技術(shù),把代碼頁映射到隨機的地址,將給攻擊者增加很大的困難,不做大量的嘗試是不可能查出所需地址的。使用內(nèi)存映射技術(shù)所付出的最大的代價就是要修改操作系統(tǒng)內(nèi)核、使得操作系統(tǒng)可以把代碼頁映射到較低的內(nèi)存空間。雖然這個技術(shù)不需要對代碼進行修改,但要重新鏈接,因為二進制的地址在程序鏈接階段就確定了。

內(nèi)存映射技術(shù)可以檢測并阻止基于內(nèi)存中地址跳轉(zhuǎn)的攻擊。但它對于注入新代碼并執(zhí)行新代碼的攻擊不能檢測和預防。除此之外,因為低端內(nèi)存是有大小限制的,想把所有的代碼頁都映射到低端內(nèi)存在有些應用中是不可行的。內(nèi)存映射技術(shù)僅僅對那些依靠固定地址或使用高端地址的應用程序有影響。而這樣的應用程序并不多。內(nèi)存映射技術(shù)對性能的消耗也可以忽略,它僅僅是在程序裝載的過程中工作,運行起來之后對程序沒有任何影響。

3.4 安全共享庫技術(shù)

很多軟件的安全漏洞來源于使用了不安全的共享庫,尤其是C&C++,當中有很多的函數(shù)都不夠“安全”,比如:strcpy、strcat、gets等等。這些函數(shù)使用不好就會帶來災難性的后果。用安全共享庫技術(shù),能在一定程度上阻止攻擊者的攻擊。安全共享庫技術(shù)就是依靠動態(tài)鏈接技術(shù),能在程序運行期間攔截對不安全的函數(shù)的調(diào)用,并對函數(shù)參數(shù)等進行檢測,這在Windows和UNIX上都被廣泛應用。特別的是,這個技術(shù)能對當前內(nèi)存大小的上限給出一個評估值,這在一定程度上阻止了把數(shù)據(jù)寫到評估邊界的外面。安全共享庫技術(shù)從技術(shù)的角度很容易開發(fā)和配置,而且不需要對已有的應用程序作任何的修改和再編譯。從理論上講,安全共享庫技術(shù)可以檢測并防止所有的基于標準庫函數(shù)的攻擊。但是它不能保護本地變量的安全,而且它也不能防止數(shù)據(jù)段和代碼段數(shù)據(jù)的溢出攻擊。安全共享庫技術(shù)對于非標準的庫函數(shù)無能為力。安全共享庫技術(shù)不會造成任何兼容性問題,在標準庫下運行正常的程序在安全共享庫技術(shù)下面也同樣運行良好。安全共享庫技術(shù)對于那些和安全沒有關(guān)系的標準庫中函數(shù)不做任何處理。性能瓶頸主要在這些有安全弱點的函數(shù)上。這樣可以大幅度提高程序的性能。如果所有的庫中的函數(shù)都被攔截并檢查,性能上的消耗將提高15%?,F(xiàn)在安全共享庫的研究項目中的某些特性已經(jīng)整合到某些標準庫中了,如glibc。使用glibc庫的應用程序能提供隱式的安全性。

3.5 沙箱技術(shù)

通過限制一個進程所訪問的資源來預防某些攻擊行為。例如:在C語言中有execv、system等系統(tǒng)調(diào)用函數(shù),一個軟件可能根本不會存在這些系統(tǒng)調(diào)用,如果發(fā)現(xiàn)某一大該運行軟件有了這些系統(tǒng)調(diào)用,可能就是被攻擊了。在攻擊之前如果能使用沙箱技術(shù)限制住對這些資源的訪問,則攻擊就不會得逞。沙箱技術(shù)不需要對操作系統(tǒng)內(nèi)核和應用程序作任何改變。然而,要給每一個需要安全檢測的應用程序定義一個資源訪問策略。對于一個復雜的應用程序而言,定義這樣的一個策略將是很麻煩的工作。

沙箱技術(shù)檢測的全面性主要看定義的策略的全面性。一個嚴格定義的策略可以更好的保護程序不受攻擊。但該技術(shù)對于通過改寫關(guān)鍵的木地變量(例如用戶的身份ID等)而修改程序邏輯流程的攻擊束手無策。沙箱技術(shù)依賴于安全策略。它不會帶來兼容性方面的問題。但是一個過于嚴格的策略可能會限制應用程序的合法行為,最終導致程序不能使用。而且對系統(tǒng)調(diào)用函數(shù)的審查可能會帶來競爭條件問題的出現(xiàn)。

沙箱技術(shù)的主要性能消耗是在每個系統(tǒng)函數(shù)調(diào)用的檢測開關(guān)上和查詢策略表上。這個性能消耗在系統(tǒng)函數(shù)調(diào)用不頻繁的應用程序中并不明顯。沙箱技術(shù)目前主要集中于系統(tǒng)調(diào)用方面。在不知道一個應用程序邏輯的情況下限制它的行為是很困難的,而且可以通過不在策略中的函數(shù)而繞過檢測。

3.6 程序解釋技術(shù)

在程序運行之后來監(jiān)視其行為并且強制進行安全檢查是最顯而易見的好方法,這就需要解釋程序的執(zhí)行。但程序解釋技術(shù)方法,通常會消耗大量性能。最近也有很多的動態(tài)優(yōu)化技術(shù)來彌補這個缺陷。程序監(jiān)視器是使用這種方法的一個較好的例子。它使得進行額外的安全檢測卻不犧牲太多的性能成為可能。

程序解釋技術(shù)不需要對操作系統(tǒng)內(nèi)核和應用程序代碼作任何改變,應用程序只要重新鏈接產(chǎn)生一個新的起動代碼就可以了,然后有這個起動代碼來調(diào)用動態(tài)優(yōu)化的程序解釋框架。有了嚴謹?shù)陌踩呗裕瑤缀跛幸阎母淖兂绦蚩刂屏鞒袒蛐薷奈kU函數(shù)的參數(shù)的攻擊都可以被檢測到并防范住。但是,通過對關(guān)鍵變量(如身份ID)的修改、覆蓋來改變程序邏輯流程的攻擊沒有好的辦法防范,除非對每一個讀寫指令都進行解釋,而這樣又會帶來不能接受的性能上的消耗。使用程序解釋技術(shù)的又一個優(yōu)點是它能對動態(tài)生成的代碼執(zhí)行安全檢測,例如JIT代碼。

3.7 二進制文件分析技術(shù)

針對非開源的軟件程序,通過自動審核工具對程序的二進制文件進行自動分析。其中應用最廣泛的工具便是IDA反匯編工具,該工具是專用的二進制文件分析工具,它可以通過目標程序反匯編得到匯編代碼,然后對匯編代碼進行掃描,從而去識別可能存在的安全漏洞缺陷。IDA之所以被廣泛應用,其中一個很重要的因素就是該工具可以識別程序的關(guān)鍵結(jié)構(gòu),它可以自動識別高級語言的關(guān)鍵結(jié)構(gòu),如new和delete操作符、函數(shù)的返回值、局部堆棧變量、文本與字符串、IF-THEN-ELSE條件語句等,從而進一步對目標程序進行分析。但是IDA反匯編工具采用的反匯編技術(shù)需要大量的人工分析,且具有很強的復雜性,因此其自動化程度也不會高。

二進制文件分析技術(shù)通過分析軟件反匯編后的匯編代碼,來發(fā)現(xiàn)軟件中存在的安全漏洞。匯編代碼不利于人的理解,這是不爭的事實,但是,針對不公開源代碼的軟件進行漏洞的分析,只能以匯編代碼為源代碼。對匯編代碼的理解深度就決定了軟件安全漏洞取證工作的深度。靜態(tài)分析技術(shù)的優(yōu)點是,由于是從機器的角度去理解安全漏洞的機理,理解更深刻、更到位,對細節(jié)的把握也更加透徹。缺點在于軟件反匯編后的匯編代碼量巨大、結(jié)構(gòu)復雜,即使是一個小型的應用程序產(chǎn)生的匯編代碼其復雜性也不可小覷,對漏洞發(fā)生現(xiàn)場不易進行準確的定位。同時,由于匯編代碼與機器碼基本一一對應,晦澀難懂,對研究人員的技術(shù)能力和技術(shù)積累要求較高。

4 軟件漏洞取證技術(shù)對比分析

通過對現(xiàn)有常見的源代碼漏洞取證方法的詳細描述,經(jīng)過深入分析可得到這些方法各自存在的優(yōu)點和缺點,本文歸納結(jié)果如下表2所示:

可以看到,雖然現(xiàn)有的源代碼漏洞取證方法有較多的優(yōu)點,但是也普遍存在著不能覆蓋全部安全漏洞、擴展性較差、效率較低等多種缺點。為了克服這些已有漏洞取證方法存在的缺點,能夠使得源代碼漏洞取證更加準確、全面、高效、靈活地進行,研究基于大數(shù)據(jù)分析的軟件代碼漏洞取證技術(shù)是必要且迫切的工作。

5 結(jié)論

本文綜述了軟件漏洞的概念和特點,同時歸納和分析了當前主流的代碼漏洞分類標準,在此基礎上敘述了代碼漏洞分析方法的技術(shù)原理和國內(nèi)外的研究現(xiàn)狀,并分析了常見的漏洞取證方法的優(yōu)缺點。

猜你喜歡
信息安全
《信息安全與通信保密》征稿函
基于三級等級保護的CBTC信號系統(tǒng)信息安全方案設計
《信息安全研究》2018年(第4卷)總目次
信息安全專業(yè)人才培養(yǎng)探索與實踐
計算機網(wǎng)絡信息安全及防護策略
保護信息安全要滴水不漏
高校信息安全防護
保護個人信息安全刻不容緩
WebSocket技術(shù)在信息安全系統(tǒng)中的應用
中國信息安全認證中心
吉安市| 措美县| 曲阜市| 手机| 岫岩| 揭西县| 黑龙江省| 罗城| 巴彦县| 许昌市| 县级市| 日土县| 曲周县| 孙吴县| 武宁县| 济阳县| 保康县| 安阳市| 抚州市| 高州市| 安义县| 阿鲁科尔沁旗| 开阳县| 奉节县| 玉环县| 浮梁县| 宽城| 马关县| 福州市| 喀什市| 贺州市| 天镇县| 长泰县| 察雅县| 永济市| 阳新县| 揭东县| 宣威市| 堆龙德庆县| 嘉义市| 麦盖提县|