999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

軟件代碼漏洞的電子取證技術綜述

2016-01-24 08:05:12印杰李千目
軟件 2015年12期

印杰++李千目

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

關鍵詞:軟件漏洞;電子取證;信息安全

中圖分類號:TP391.41

文獻標識碼:A

DOI:10.3969/j.issn.1003-6970.2015.12.012

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

0 引言

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

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

1 軟件漏洞

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

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

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

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

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

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

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

2 代碼漏洞分類

2.1 通用弱點枚舉CWE

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

跨站腳本攻擊

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

SQL注入攻擊

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

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

緩沖區溢出

緩沖區溢出是指當計算機向緩沖區內填充數據位數時超過了緩沖區本身的容量,使得溢出的數據覆蓋在合法數據上,理想的情況是程序檢查數據長度并不允許輸入超過緩沖區長度的字符,但是絕大多數程序都會假設數據長度總是與所分配的儲存空間相匹配,這就為緩沖區溢出埋下隱患。操作系統所使用的緩沖區又被稱為“堆棧”。在各個操作進程之間,指令會被臨時儲存在“堆棧”當中,“堆棧”也會出現緩沖區溢出。

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

跨站點偽造請求

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

不當的訪問控制授權

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

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

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

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

不當地將路徑名限制為受限的目錄(路徑穿透)

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

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

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

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

OS命令注入

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

缺少對敏感數據的加密

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

使用硬編碼的證書

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

使用不正確的長度值訪問緩沖區

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

PHP文件包含漏洞

文件包含漏洞即當程序員在包含文件的過程中引入了外部提交的數據參與包含的過程所產生的漏洞,這個漏洞是目前Web攻擊中最利用率最高的一個漏洞,攻擊者可以輕松獲取服務器的訪問權限(即拿到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的情況為遠程文件包含漏洞,相反為本地文件包含漏洞。

對數組索引檢查不當

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

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

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

通過錯誤消息透露信息

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

整型溢出和環繞

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

對緩沖區大小計算錯誤

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

缺少對重要功能的授權

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

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

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

對重要的資源賦值不當

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

分配資源卻不做限制和調節

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

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

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

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

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

競爭條件

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

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

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

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

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

注入

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

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

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

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

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

跨站腳本

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

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

不安全的直接對象引用

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

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

安全配置錯誤

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

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

敏感信息泄露

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

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

功能級訪問控制缺失

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

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

跨站請求偽造

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

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

使用含有已知漏洞的組件

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

一些含有漏洞的組件(如:框架庫)可以被自動化工具發現和利用。這使得威脅代理部分引入了“混亂”的角色,而不僅僅是攻擊者了。攻擊者通過掃描或手動分析識別問題組件,然后根據需要定制攻擊代碼并實施攻擊。在應用中使用組件越深入,實施攻擊的難度越大。事實上,大多數的應用都存在這些問題。因為大多數的開發團隊并不會把及時更新組件/庫作為他們的工作重心。在很多情況下,開發者都不了解他們所使用的全部組件,更不用說組件的版本了。組件的依賴性使情況更加糟糕。可能是由低到高全系列的漏洞,包括注入,破損的訪問控制,XSS等。受影響范圍也從最低的受損到主機被完全接管和數據的泄漏。考慮一下受影響的應用中,每個脆弱點對業務控制來說意味著什么。可能是非常細微的影響,也有可能意味著被完全攻破。

未驗證的重定向和轉發

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

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

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

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

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

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

3.1 非執行棧技術

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

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

3.2 非執行堆與數據技術

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

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

3.3 內存映射技術

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

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

3.4 安全共享庫技術

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

3.5 沙箱技術

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

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

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

3.6 程序解釋技術

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

程序解釋技術不需要對操作系統內核和應用程序代碼作任何改變,應用程序只要重新鏈接產生一個新的起動代碼就可以了,然后有這個起動代碼來調用動態優化的程序解釋框架。有了嚴謹的安全策略,幾乎所有已知的改變程序控制流程或修改危險函數的參數的攻擊都可以被檢測到并防范住。但是,通過對關鍵變量(如身份ID)的修改、覆蓋來改變程序邏輯流程的攻擊沒有好的辦法防范,除非對每一個讀寫指令都進行解釋,而這樣又會帶來不能接受的性能上的消耗。使用程序解釋技術的又一個優點是它能對動態生成的代碼執行安全檢測,例如JIT代碼。

3.7 二進制文件分析技術

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

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

4 軟件漏洞取證技術對比分析

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

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

5 結論

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

主站蜘蛛池模板: 国产国模一区二区三区四区| 欧美亚洲另类在线观看| 精品中文字幕一区在线| 亚洲中文字幕97久久精品少妇| 成年看免费观看视频拍拍| 超清无码一区二区三区| 国产人成网线在线播放va| 久久免费成人| 亚洲免费播放| 91啪在线| 国产91小视频在线观看| 欧美在线黄| 日韩人妻少妇一区二区| 亚洲高清资源| 国产H片无码不卡在线视频| 美女一区二区在线观看| 伊人色婷婷| 日本欧美成人免费| 国产男人天堂| 国内精自线i品一区202| 熟妇丰满人妻| 久久国产精品影院| 亚洲Av激情网五月天| 亚洲黄色片免费看| 欧美成人精品一区二区| 中国特黄美女一级视频| 欧美日韩一区二区在线播放| 欧美中文字幕在线视频| 国产91麻豆视频| 白丝美女办公室高潮喷水视频| 久久这里只精品国产99热8| …亚洲 欧洲 另类 春色| 97视频在线观看免费视频| 亚洲免费人成影院| 九九线精品视频在线观看| 国产精品亚欧美一区二区三区 | 国产情精品嫩草影院88av| 精品人妻系列无码专区久久| 国产三区二区| 日本亚洲最大的色成网站www| 国产菊爆视频在线观看| 强乱中文字幕在线播放不卡| 人妻无码中文字幕第一区| 麻豆精品在线视频| 婷婷午夜影院| 日韩国产欧美精品在线| 人妻夜夜爽天天爽| 97影院午夜在线观看视频| 亚洲欧洲日韩久久狠狠爱 | 国产亚洲精久久久久久久91| 色综合中文| 国产日韩av在线播放| 亚洲天堂免费在线视频| 国产成人精品优优av| 婷婷综合缴情亚洲五月伊| 亚洲美女一区二区三区| 亚洲福利视频一区二区| 国产第八页| 欧美成人手机在线视频| 亚洲天堂视频在线免费观看| 啪啪免费视频一区二区| 国产美女无遮挡免费视频网站| 日韩在线中文| 婷婷六月综合| 国产综合日韩另类一区二区| 国产精品福利社| 97在线视频免费观看| 99热这里只有精品在线播放| 欧美天天干| 国产成人无码久久久久毛片| 东京热高清无码精品| 在线永久免费观看的毛片| 亚洲成网777777国产精品| 日韩在线播放欧美字幕| 超清无码熟妇人妻AV在线绿巨人| 亚洲中文字幕在线观看| 欧美成人看片一区二区三区 | 日本精品影院| 伊人久久大香线蕉aⅴ色| 久一在线视频| 麻豆精品国产自产在线| 国产免费人成视频网|