亚洲免费成人网,99久久er这里只有精品17,欧美一级毛片兔费播放,亚洲国产精品久久日

  • 歡迎使用超級蜘蛛查,網站外鏈優化,收藏快捷鍵 CTRL + D

漏洞是如何产生的,漏洞是如何挖掘出来的


大家都知道黑客發起攻擊、入侵等行為都需要挖掘其網絡、系統、程序的"漏洞",然后利用其"漏洞"來完成目標實施,那么"漏洞是如何產生的"?又是如何被挖掘出來被利用的呢?

今天就以本篇文章內容給大家詳細闡述一下"漏洞的定義、趨勢、產生、分類、以及漏洞的挖掘和分析技術詳解"!

漏洞是如何產生的,漏洞是如何挖掘出來的

一、漏洞的基本理解

我們經常聽到漏洞這個概念,可什么是安全漏洞?

官方定義:漏洞是在硬件、軟件、協議的具體實現或系統安全策略上存在的缺陷,從而可以使攻擊者能夠在未授權的下訪問或破壞系統。

基本理解:漏洞是硬件、軟件、協議在生命周期的各個階段(設計、實現、運維等過程)中產生的某類問題,這些問題會對系統的安全(機密性、完整性、可用性)產生影響。

有人經常理解為BUG就是漏洞,其實它們兩者之間還是有很大區別的,漏洞與Bug并不等同,他們之間的關系基本可以描述為:大部分的Bug影響功能性,并不涉及安全性,也就不構成漏洞;大部分的漏洞來源于Bug,但并不是全部,它們之間只是有一個很大的交集。

漏洞是如何產生的,漏洞是如何挖掘出來的

二、漏洞的趨勢

近幾年來漏洞數量依然處在上升趨勢,不僅如此,新漏洞從公布到被利用的時間越來越短,黑客對發布的漏洞信息進行分析研究,往往在極短時間內就能成功利用這些漏洞。除了利用已知漏洞,黑客們也善于挖掘并利用一些尚未公布的漏洞,發起病毒攻擊,或出售漏洞資料,滿足經濟目的。因此漏洞的研究值得感興趣的小伙伴們深度研究,國家信息安全漏洞共享平臺(CNVD),對漏洞研究有成果的會員會給予相應獎勵。

漏洞是如何產生的,漏洞是如何挖掘出來的


三、漏洞產生的主要原因

漏洞是在硬件、軟件、協議的具體實現或系統安全策略上存在的缺陷,從而可以使攻擊者能夠在未授權的情況下訪問或破壞系統。即某個程序(包括操作系統)在設計時未考慮周全,當程序遇到一個看似合理,但實際無法處理的問題時,引發的不可預見的錯誤

它不是安裝的時候的結果 也不是永久后的結果而是編程人員的人為因素,在程序編寫過程,為實現不可告人的目的,在程序代碼的隱蔽處保留后門,受編程人員的能力、經驗和當時安全技術所限,在程序中難免會有不足之處,輕則影響程序效率,重則導致非授權用戶的權限提升。

漏洞是如何產生的,漏洞是如何挖掘出來的


以軟件漏洞來舉例的產生的主要來源如下:

1、緩沖區溢出(buffer overflows)

緩沖區溢出是軟件安全漏洞的主要來源。所謂緩沖區溢出,指的就是代碼寫入的數據超過了緩沖區的邊界,比如向大小10KB的緩沖區寫如12KB的數據,那么這個緩沖就溢出了。當然,前向溢出也算溢出,也就是寫入的數據寫入到了緩沖區的起始邊界之前。

緩沖區溢出是一種比較常見的編碼錯誤,特別是在字符串處理過程中。緩沖區造成的危害也是比較多樣的。比較輕微的就是程序直接崩潰,除了用戶體驗也沒什么大損失;比較嚴重的就是錯誤的寫入覆蓋了其他敏感數據,造成數據的丟失;最嚴重的莫過于執行惡意代碼,因為數據寫入越界,惡意代碼可以將原先正常的函數修改為自己的代碼,從而獲得整個軟件的執行權。

緩沖區溢出根據溢出的內存類型分為:

棧溢出()

棧內的數據溢出。

堆溢出(heap overflow)

堆內的數據溢出,

根據溢出的類型可分為overflow及underflow

overflow,寫入的數據超過了緩沖的邊界

underflow, 緩沖中有用數據的大小小于緩沖區長度,這有可能造成臟數據的問題

2、未驗證輸入(Unvalidated Input)

一款應用往往需要接收各種各樣的輸入,針對一款iOS應用,主要的輸入有讀取文件,讀取用戶輸入,讀取網絡傳輸數據,或通過URL被啟動(URL Schema)。各種類型的輸入都有可能是非法的,甚至是惡意的,所以針對所有類型的輸入,應用都要進行檢驗,確保輸入的數據是符合程序要求的,合理的,合法的數據。

非法輸入可能造成的危害主要有:

輸入的數據大于接收緩沖,會造成緩沖溢出

格式化字符串注入,對這些字符串進行處理時,如果不小心會造成程序的崩潰,或某些敏感數據被篡改

URLSchema中的命令為惡意命令,執行了惡意的命令

代碼注入,輸入的URL或命令中帶有腳本、代碼等惡意片段

3、競爭條件(Race Condtions)

如果一個任務的完成需要幾個特定的子任務以特定的順序完成來完成,那么這個任務就是存在競爭條件這個漏洞的。黑客可以通過修改事件完成的順序來改變應用的行為。

競爭條件類型的漏洞主要有以下兩種:

Time of Check Versus Time of Use (TOCTOU)

應用運行的過程中,在某個操作之前,比如寫文件,都會檢查一下文件是否存在,在檢查與真正的寫入之間的間隔就是一個可以被利用的Race Condition,惡意軟件可以將用戶檢查的文件替換成自己的文件,這樣數據就泄露了。

Signal Handling

處理信號的過程中,是隨時可以被另一個信號的處理打斷的,如果在處理一個信號的過程中另一個信號到來,那么這個過程會被馬上中斷,這樣,系統就會處于一種未知的狀態。

4、進程間通信(Interprocess Communication)

進程間通信采用的方法很多,共享內存,管道,油槽等,由于通信管道兩端的應用的不同,那么,有可能存在這鐘管道被惡意利用的肯能性,也就是說,進程間通信也是軟件漏洞的一個來源,當與另一個應用通信的時候,要默認此應用是不安全的,要對通信的內容進行安全方面的驗證。

5、不安全的文件操作(Insecure File Operation)

應用對文件進行處理時,若果沒有進行進行有效的驗證,那么有可能處理的文件已經是被惡意軟件修改過的,是不安全的。所以,進行有效的驗證是安全處理文件的重要保證。不安全文件操作類型有以幾種:

讀取或寫入一個位于其他應用也擁有讀寫權限路徑下的文件。

對文件信息,例如權限等信息沒有進行有效驗證便進行處理。

對文件操作的返回結果沒有進行有效利用

假定一個擁有本地文件名的文件就是真正的本地文件。

6、權限控制問題(Access Control)

很多情況下,權限控制是安全機制保證的核心,同時也是漏洞的主要來源。每個應用都有與其匹配的權限,應用申請的權限應該物盡其用,不能申請超過自身需求的權限,而很多的軟件漏洞就是因為應用申請了超過自身需求的權限,比如root權限,然后被惡意軟件利用,也就有了對整個系統執行所有操作的權限。

很多情況下,對權限的申請進行驗證是明智的選擇,例如輸入用戶名及密碼來提升權限。注意,在采用驗證機制時,最好使用系統內置的權限驗證方法,而不是自己取實現,這里需要額外提一下,權限控制是操作系統級別的,當硬件設備被控制時,各種權限的控制也就顯得無力,這種情況下,數據的加密保護就顯現出了其價值。

7、社會工程(Social Engineering)

用戶往往是安全保證機制中那薄弱的一環。即使提供再強大的安全保全機制,如果用戶安全意識薄弱,同樣會出現問題。很簡單的例子,比如用戶將密碼設置的非常復雜,服務器端數據庫的安全保證也很周全,黑客完全無法通過技術手段竊取用戶密碼,可黑客一個偽裝客服的電話就完全有可能將用戶的密碼從用戶的口中騙取到。這就是所謂的"社會工程". 在界面,使用習慣上教育,引導用戶進行安全的操作,也是軟件設計的重中之重。

四、漏洞的基本分類

按照漏洞的形成原因,漏洞大體上可以分為程序邏輯結構漏洞、程序設計錯誤漏洞、開放式協議造成的漏洞和人為因素造成的漏洞。

按照漏洞被人掌握的情況,漏洞又可以分為已知漏洞、未知漏洞和0day等幾種類型。

1、 程序邏輯結構漏洞

這種類型的漏洞有可能是編程人員在編寫程序時,因為程序的邏輯設計不合理或者錯誤而造成的程序邏輯漏洞。這種類型的漏洞最典型的要數微軟的Windows 2000用戶登錄的中文輸入法漏洞。非授權人員可以通過登錄界面的輸入法的幫助文件繞過Windows的用戶名和密碼驗證而取的計算機的最高權限。

這種類型的漏洞也有可能是合法的程序用途被黑客利用去做不正當的用途。這種類型的漏洞最典型的就是后面案例中提到的Winrar的自解壓功能,程序設計者的本意是為了方便用戶的使用,使得沒有安裝Winrar的用戶也可以解壓經過這種方式壓縮的文件。但是這種功能被黑客用到了不正當的用途上。

這種漏洞用一個比喻可能更容易理解。打一個比方來說,你開了一扇門,在門上開了一個狗洞,專門為了狗方便出入。正常情況下,人應該用鑰匙打開鎖才能進來。可是有個家伙他發現利用某個竅門人也可以從狗洞進出,那么這個從狗洞進出的方法就可以看著是一個安全漏洞。

2、 程序設計錯誤漏洞

還有一種類型的漏洞是編程人員在編寫程序時由于技術上的疏忽造成的漏洞。這種類型的漏洞最典型的是緩沖區溢出漏洞,它也是被黑客利用得最多的一種類型的漏洞。

3、開放式協議造成的漏洞

目前,國際互聯網的通信采用的是具有開放性的TCP/IP協議。因為TCP/IP協議的最初設計者在設計該通信協議時,只考慮到了協議的實用性,而沒有考慮到協議的安全性,所以在TCP/IP協議中存在著很多漏洞。比如說,利用TCP/IP協議的開放和透明性嗅探網絡數據包,竊取數據包里面的用戶口令和密碼信息;TCP協議三次握手的潛在缺陷所導致的DDOS拒絕服務攻擊等。

4、 人為因素造成的漏洞

一個系統如果本身設計得很完善,安全性也很高,但管理人員安全意識淡薄,同樣的會給系統留下漏洞。譬如說,系統本身非常完備安全,但系統登錄所需要的管理 員帳戶或口令,可是因為設置過于得簡單而被黑客猜解出來了,那么其他的環節再安全也沒有絲毫意義;再或者雖然管理員設置了很復雜的密碼,可是他把密碼寫在 一張紙上,并隨手扔到廢紙簍里,那么也同樣有可能造成密碼泄露而導致系統被黑客入侵。

5、 已知漏洞

已知漏洞是指已經被人們發現,并被人們廣為傳播的公開漏洞。這種類型的特點是漏洞形成的原因和利用方法已經被眾多的安全組織、黑客和黑客組織所掌握。安全 組織或廠商按照公布的漏洞形成原因和利用方法,在他們的安全防護產品中或安全服務項目加入針對相應類型漏洞的防護方法。黑客和黑客組織利用公布的漏洞形成 原因,寫出專門的具有針對性的漏洞利用程序文件,并能繞過安全防護軟件。比如說針對某個IE瀏覽器版本的IE漏洞利用文件,或者他們干脆利用一些漏洞公布站點上提供的漏洞利用程序文件并不加任何修改地去攻擊互聯網上的計算機。

產生漏洞的軟件的開發商則會針對被公開的漏洞的信息,修補他們開發的程序以供他們的用戶修補已經存在漏洞的軟件。

6、未知漏洞

未知的漏洞則是指那些已經存在但還沒有被人發現的漏洞,這種類型漏洞的特征是雖然它們沒有被發現,但它們在客觀上已經存在了,它們帶給計算機網絡安全的是隱蔽的威脅。如果它們哪一天被黑客有意或無意的找出來后就會對計算機網絡安全構成巨大的威脅。

所以軟件開發商、安全組織、黑客和黑客組織都在努力的發現漏洞,可以說誰先發現了漏洞,誰就可以掌握主動權。如果是軟件開發商和安全組織先發現了漏洞,他們就可以在安全防護上取得主動權;如果是黑客或黑客組織先發現了漏洞,他們就可以在攻擊上取得主動權。

7、 0day漏洞

所謂0day漏 洞是指已經被發掘出來,但還沒有大范圍傳播開的漏洞,也就是說,這種類型的漏洞有可能掌握在極少數人的手里。黑客有可能在這種類型的漏洞的信息還沒有大范 圍的傳播開的時候,利用這段時間差攻擊他們想要攻擊的目標機器,因為絕大多數用戶還沒有獲取到相關的漏洞信息,也無從防御,黑客要想得手還是很容易的

五、漏洞挖掘分析技術

由于種種原因,漏洞的存在不可避免,一旦某些較嚴重的漏洞被攻擊者發現,就有可能被其利用,在未授權的情況下訪問或破壞計算機系統。先于攻擊者發現并及時修補漏洞可有效減少來自網絡的威脅。因此主動發掘并分析系統安全漏洞,對網絡攻防戰具有重要的意義。漏洞的研究主要分為漏洞挖掘與漏洞分析兩部分。漏洞挖掘技術是指對未知漏洞的探索,綜合應用各種技術和工具,盡可能地找出軟件中的潛在漏洞;漏洞分析技術是指對已發現漏洞的細節進行深入分析,為漏洞利用、補救等處理措施作鋪墊。

1、 現有漏洞挖掘技術分類

根據分析對象的不同,漏洞挖掘技術可以分為基于源碼的漏洞挖掘技術和基于目標代碼的漏洞挖掘技術兩大類。基于源碼的漏洞挖掘的前提是必須能獲取源代碼,對于一些開源項目,通過分析其公布的源代碼,就可能找到存在的漏洞。

例如對Linux系統的漏洞挖掘就可采用這種方法。但大多數的商業軟件其源碼很難獲得,不能從源碼的角度進行漏洞挖掘,只能采用基于目標代碼的漏洞挖掘技術。對目標碼進行分析涉及編譯器、指令系統、可執行文件格式等多方面的知識,難度較大。

基于目標代碼的漏洞挖掘首先將要分析的二進制目標代碼反匯編,得到匯編代碼;然后對匯編代碼進行切片,即對某些上下文關聯密切、有意義的代碼進行匯聚,降低其復雜性;最后通過分析功能模塊,來判斷是否存在漏洞。漏洞挖掘技術從逆向分析的軟件測試角度,又可分為白箱分析、黑箱分析和灰箱分析三類

2、常見的漏洞挖掘分析技術

漏洞挖掘是一個多種漏洞挖掘分析技術相互結合、共同使用和優勢互補的過程。目前漏洞挖掘分析技術有多種,主要包括手工測試技術(manual testing)、Fuzzing技術、比對和二進制比對技術(Diff and BinDiff)、靜態分析技術(static analysis)、動態分析技術(runtime analysis)等。

2.1.人工分析

人工分析是一種灰盒分析技術。針對被分析目標程序,手工構造特殊輸入條件,觀察輸出、目標狀態變化等,獲得漏洞的分析技術。輸入包括有效的和無效的輸入,輸出包括正常輸出和非正常輸出。非正常輸出是漏洞出現的前提,或者就是目標程序的漏洞。非正常目標狀態的變化也是發現漏洞的預兆,是深入挖掘的方向。人工分析高度依賴于分析人員的經驗和技巧。人工分析多用于有人機交互界面的目標程序,Web漏洞挖掘中多使用人工分析的方法。

2.2.Fuzzing技術

Fuzzing技術是一種基于缺陷注入的自動軟件測試技術,它利用黑盒分析技術方法,使用大量半有效的數據作為應用程序的輸入,以程序是否出現異常為標志,來發現應用程序中可能存在的安全漏洞。半有效數據是指被測目標程序的必要標識部分和大部分數據是有效的,有意構造的數據部分是無效的,應用程序在處理該數據時就有可能發生錯誤,可能導致應用程序的崩潰或者觸發相應的安全漏洞。根據分析目標的特點,Fuzzing可以分為三類:

1).動態Web頁面Fuzzing,針對ASP、PHP、Java、Perl等編寫的網頁程序,也包括使用這類技術構建的B/S架構應用程序,典型應用軟件為HTTP Fuzz;

2).文件格式Fuzzing,針對各種文檔格式,典型應用軟件為PDF Fuzz;

3).協議Fuzzing,針對網絡協議,典型應用軟件為針對微軟RPC(遠程過程調用)的Fuzz。Fuzzer軟件輸入的構造方法與黑盒測試軟件的構造相似,邊界值、字符串、文件頭、文件尾的附加字符串等均可以作為基本的構造條件。

Fuzzer軟件可以用于檢測多種安全漏洞,包括緩沖區溢出漏洞、整型溢出漏洞、格式化字符串和特殊字符漏洞、競爭條件和死鎖漏洞、SQL注入跨站腳本、RPC漏洞攻擊、文件系統攻擊、信息泄露等。與其它技術相比,Fuzzing技術具有思想簡單,容易理解、從發現漏洞到漏洞重現容易、不存在誤報的優點。

同時它也存在黑盒分析的全部缺點,而且具有不通用、構造測試周期長等問題。常用的Fuzzer軟件包括SPIKE Proxy、Peach Fuzzer Framework、Acunetix Web Vulnerability Scanner的HTTP Fuzzer、OWASP JBroFuzz、WebScarab等。

2.3.補丁比對技術

補丁比對技術主要用于黑客或競爭對手找出軟件發布者已修正但未尚公開的漏洞,是黑客利用漏洞前經常使用的技術手段。

安全公告或補丁發布說明書中一般不指明漏洞的準確位置和原因,黑客很難僅根據該聲明利用漏洞。黑客可以通過比較打補丁前后的二進制文件,確定漏洞的位置,再結合其他漏洞挖掘技術,即可了解漏洞的細節,最后可以得到漏洞利用的攻擊代碼。簡單的比較方法有二進制字節和字符串比較、對目標程序逆向工程后的比較兩種。

第一種方法適用于補丁前后有少量變化的比較,常用的于字符串變化、邊界值變化等導致漏洞的分析。

第二種方法適用于程序可被反編譯,且可根據反編譯找到函數參數變化導致漏洞的分析。這兩種方法都不適合文件修改較多的情況。復雜的比較方法有Tobb Sabin提出的基于指令相似性的圖形化比較和Halvar Flake提出的結構化二進制比較,可以發現文件中一些非結構化的變化,如緩沖區大小的改變,且以圖形化的方式進行顯示。

常用的補丁比對工具有Beyond Compare、IDACompare、Binary Diffing Suite(EBDS)、BinDiff、NIPC Binary Differ(NBD)。此外大量的高級文字編輯工具也有相似的功能,如Ultra Edit、HexEdit等。這些補丁比對工具軟件基于字符串比較或二進制比較技術。

2.4.靜態分析技術

靜態分析技術是對被分析目標的源程序進行分析檢測,發現程序中存在的安全漏洞或隱患,是一種典型的白盒分析技術。它的方法主要包括靜態字符串搜索、上下文搜索。

靜態分析過程主要是找到不正確的函數調用及返回狀態,特別是可能未進行邊界檢查或邊界檢查不正確的函數調用,可能造成緩沖區溢出的函數、外部調用函數、共享內存函數以及函數指針等。對開放源代碼的程序,通過檢測程序中不符合安全規則的文件結構、命名規則、函數、堆棧指針可以發現程序中存在的安全缺陷。

被分析目標沒有附帶源程序時,就需要對程序進行逆向工程,獲取類似于源代碼的逆向工程代碼,然后再進行搜索。使用與源代碼相似的方法,也可以發現程序中的漏洞,這類靜態分析方法叫做反匯編掃描。

由于采用了底層的匯編語言進行漏洞分析,在理論上可以發現所有計算機可運行的漏洞,對于不公開源代碼的程序來說往往是最有效的發現安全漏洞的辦法。但這種方法也存在很大的局限性,不斷擴充的特征庫或詞典將造成檢測的結果集大、誤報率高;同時此方法重點是分析代碼的"特征",而不關心程序的功能,不會有針對功能及程序結構的分析檢查。

2.5.動態分析技術

動態分析技術起源于軟件調試技術,是用調試器作為動態分析工具,但不同于軟件調試技術的是它往往處理的是沒有源代碼的被分析程序,或是被逆向工程過的被分析程序。動態分析需要在調試器中運行目標程序,通過觀察執行過程中程序的運行狀態、內存使用狀況以及寄存器的值等以發現漏洞。

一般分析過程分為代碼流分析和數據流分析。代碼流分析主要是通過設置斷點動態跟蹤目標程序代碼流,以檢測有缺陷的函數調用及其參數。數據流分析是通過構造特殊數據觸發潛在錯誤。比較特殊的,在動態分析過程中可以采用動態代碼替換技術,破壞程序運行流程、替換函數入口、函數參數,相當于構造半有效數據,從而找到隱藏在系統中的缺陷。常見的動態分析工具有SoftIce、OllyDbg、WinDbg等。

六、漏洞挖掘分析實例

1、使用Acunetix Web Vulnerability Scanner軟件進行漏洞挖掘:

漏洞是如何產生的,漏洞是如何挖掘出來的


該軟件提供了一些預定義好的Fuzz運算參數庫,可以便于初學者上手,也可以方便分析者使用。過程如下:

1)定義HTTP請求(Request),即定義所需訪問的網頁URL;

2)定義運算參數(Add generator),即定義可能產生漏洞的字符串表達式,如:查找$password、$passwd、$token;

3)插入運算參數(Insert into request),即將定義好的多條運算參數綁定為一條搜索策略;4)定義成功觸發特征(Fuzzer Filters),將運算參數與HTTP請求綁定;

5)掃描(Start);

6)等待軟件返回匹配的項,這些項就是可能的漏洞。經過以上步驟,一個網頁中可能存在的漏洞就被發現了。

2、使用補丁比對技術找到漏洞的例子:

微軟發布的MS08-067的補丁,該問題被列為嚴重。該安全更新解決了服務器服務中一個秘密報告的漏洞。如果用戶在受影響的系統上收到特制的RPC請求,則該漏洞可能允許遠程執行代碼。漏洞挖掘過程為例說明補丁對比技術的應用。首先保留一份原始文件,然后安裝新的補丁程序,提取出相同和新加入的文件后,就可以使用軟件進行對比。

漏洞是如何產生的,漏洞是如何挖掘出來的


經過對比后發現被修改的3個函數

對比軟件列出了三個函數名稱,分別為0.25、0.67和0.94并列出補丁前后的相似程度。通過對比結果,可以針對性構造參數,觀察補丁前后的行為,最終發現在給出的這三個函數中,有兩個是和漏洞直接相關的。

本文鏈接:http://www.sztqnet.com/article/780.html

超級蜘蛛工具

  • 網站鏈接HTTP狀態批量檢測_在線批量檢測網站鏈接狀態_超級蜘蛛查
  • 百度關鍵詞排名查詢_網站關鍵詞排名批量查詢_超級蜘蛛查
  • 百度收錄查詢_在線百度收錄批量查詢_超級蜘蛛查
  • 域名IP地址批量查詢_在線批量查詢網站IP地址_超級蜘蛛查
  • 超級外鏈發布工具_在線免費批量發布SEO外鏈_超級蜘蛛查
  • 網頁蜘蛛模擬抓取測試工具_超級蜘蛛工具_超級蜘蛛查