20189221 2018-2019-2 《密碼與安全新技術專題》第六週做業

20189221 2018-2019-2 《密碼與安全新技術專題》第六週做業

課程:《密碼與安全新技術專題》html

班級: 201892
姓名: 郭開世
學號:20189221
上課教師:謝四江
上課日期:2019年5月7日
必修/選修: 選修java

1.本次講座的學習總結

講座主題:漏洞挖掘及攻防技術

1.1 背景及意義

  • 安全漏洞定義:python

    指信息系統在設計、實現或者運行管理過程當中存在的缺陷或不足,從而使攻擊者可以在未受權的狀況下利用這些缺陷破壞系統的安全策略。程序員

  • 安全漏洞事件:
    • openssl (心臟出血);
    • bash:緣由是未檢查輸入邊界;
    • 脫褲門:主要包括天涯、CSDN、人人、多玩、cnbeta、QQ關係數據庫、攜程;
    • 棱鏡門;

1.2 常見漏洞挖掘技術

  • 手工測試——最古老:web

    手工測試是由測試人員手工分析和測試被測目標,發現漏洞的過程,是最原始的漏洞挖掘方法。算法

    • 優勢:能發揮人的主觀能動性
    • 缺點:人無規律可循、不可大規模
  • 補丁對比:sql

    一種經過對比補丁之間的差別來挖掘漏洞的技術。shell

    • 優勢:發現速度快
    • 缺點:已知漏洞

    補丁技術是實際漏洞挖掘中運用得十分廣泛,對於定位漏洞的具體位置、尋找漏洞解決方式具備十分積極的現實意義。數據庫

  • 程序分析編程

    • 靜態:在不運行程序的條件下,經過一系列分析的技術對代碼進行掃描。
    • 動態:在運行計算機程序的條件下,驗證代碼是否知足規範性、安全性等指標的一種代碼分析技術。
    • 優勢:覆蓋率100%,自動化程度高
    • 缺點:容易有漏報和誤報
    • 數據流分析:Fortify SCA、Coverity Prevent、FindBugs等
    • 污點分析:Pixy、TAJ(基於WALA)
    • 符號執行:Clang、KLEE
    • 模型檢測:BLAST、MAGIC、MOPS
  • 二進制審覈

    二進制審覈是源代碼不可得,經過逆向獲取二進制代碼,在二進制代碼層次上進行安全評估

    • 優勢:覆蓋率高,自動化程度高
    • 缺點:逆向致使信息丟失,可能會引入邏輯錯誤。
  • 模糊測試

    模糊測試是經過向被測目標輸入大量的畸形數據並檢測異常來發現漏洞。

    • 優勢:無須源碼、誤報低、自動化程度高
    • 缺點:覆蓋率低

1.3 漏洞挖掘示例

  • 路由器
    • 當遠程向路由器的161端口發送大量畸形SNMP Get/Set請求報文時,Cisco路由器和華爲路由器的進程Agent出現CPU使用率異常,分別爲98%和100%。
    • 當遠程發送SNMP空數據包時,Cisco路由器和華爲路由器的CPU使用率出現異常,但遠小於100%,發生「輕度拒絕服務」。
    • 當遠程發送一個畸形ASN.1/BER編碼(超長字符串)的SNMP數據包時,wireshark捕獲並解析數據包,致使wireshark 1.4等多個版本棧溢出,致使空指針引用並崩潰。
    • 當向SNMP協議端口(161)遠程發送一個使用「\x」等字符構造的畸形UDP數據包,科來網絡分析系統7.2.1及之前版本均會因邊界條件檢查不嚴致使崩潰。
  • NFC漏洞挖掘

    • 目標選擇:NFC手機系統和應用!

      從數據能夠看出,NFC手機逐漸開始流行和推廣。

      NFC(Near Field Communication)技術是一種近距離的雙向高頻無線通訊技術,可以在移動終端、智能標籤(Tag)等設備間進行非接觸式數據交換。

      NFC技術具備通訊距離短、一次只和一臺設備鏈接(1V1)、硬件安全模塊加密等特色,具備較好的保密性和安全性。

    結果:

1.4 攻防實例

  • 被動防護
    • 路由器

      • 過濾特殊字符,eg. 科來網絡分析系統對\x的處理;
      • 限制特定端口的傳輸速率;
      • 阻塞SNMP請求的端口;
      • 折中:編寫ACL
    • NFC

      • 協議解析:檢查長度字段、數值範圍、格式化字符串、特殊字符等;
      • 設計缺陷:修改設計邏輯,例如,藍牙、wifi、屏幕亮度等;
      • 被動防護:滯後性
  • 主動防護
    • 針對路由器和軟件
    • 成熟產品
    • 入侵檢測(Snort/OSSEC HIDS/BASE/Sguil……)
    • 防火牆
    • 殺毒軟件

2.學習中遇到的問題及解決

問題1:模糊測試

問題1解決:

模糊測試是一種介於徹底的手工滲透測試與徹底的自動化測試之間的安全性測試類型。它充分利用了機器的能力:隨機生成和發送數據;同時,也嘗試將安全專家在安全性方面的經驗引入進來。

從執行過程來講,模糊測試的執行過程很是簡單:

  • 測試工具經過隨機或是半隨機的方式生成大量數據;
  • 測試工具將生成的數據發送給被測試的系統(輸入);
  • 測試工具檢測被測系統的狀態(如是否可以響應,響應是否正確等);
  • 根據被測系統的狀態判斷是否存在潛在的安全漏洞。

模糊測試的框架有:

  • antiparser

    antiparser框架以python語言編寫,是一個專門幫助模糊測試器建立隨機數據的API。該工具能夠跨平臺,僅僅要求有python解釋器就行。

    你能夠在這個網站獲得該框架的源碼和一些文檔:http://antiparser.sourceforge.net/

    說明:

    該框架很簡單,且缺乏一些自動化功能,文檔較少。總的來講,他不適合作一些複雜的工做。

  • Dfuz

    該框架是Diego Bauche用C開發的,常常更新。該框架已經發現了不少漏洞。Dfuz是開源的,能夠下載。可是該框架的源代碼採用了一種嚴格的開原許可,未獲得做者的容許不可使用複製該框架的源代碼。

    網站:http://www.genexx.org/dfuz/

    說明:

    該框架學習曲線比較平坦,開發效率比較高,Dfuz要求開發者徹底使用框架的腳本語言來進行編程,無法利用成熟的語言發揮更大的威力。不過總的來講仍是能夠的。

  • SPIKE

    最普遍使用最知名的一個框架。使用C語言編寫,提供了一系列容許快速和高效的開發網絡協議模糊測試器的API。在SPIKE中,數據結構被分解表示成塊,也叫SPIKE,這個塊同時包含二進制數據和塊大小。

    說明:

    SPIKE只有零星的文檔,一些仍是廢棄的,可是咱們能夠找到不少工做樣例。SPIKE缺少對windows的支持。最大的貢獻就是基於塊的模糊測試方法。不少其餘的模糊測試框架也採用了這樣的方法。

  • Peach

    python編寫的,是一個開源的框架。

    Peach體系結構容許研究者聚焦於一個個的特定的協議的子組件,而後組合起來建立完整的模糊測試器。這種方法可能不如基於塊的開發速度,可是對代碼的複用的支持比其餘模糊測試工具好。

    說明:

    Peach處於活躍開發中,可是文檔少,學習起來比較困難。

  • 通用目的模糊測試器(GPF)

    GPF能夠產生無數個測試,無數個變異。(其餘的根據規則不會是無數個),該框架主要的有點是能夠用很低的成本創建並運行一個模糊測試器,經過GPF的多種模式對外提供功能。

  • Autodafe

    這個框架能夠簡單的描述成下一帶的SPIKE,該框架可以對網絡協議和文件格式進行模糊測試。他最吸引人的就是調試組件。

問題2:NFC相關

問題2解決:

  • NFC主要應用於:

    • 一、啓動服務,將NFC用於「開啓」另外一種服務(例如爲數據傳輸開啓另外一條通訊連接);
    • 二、點到點,NFC能夠用於實現兩個裝置之間的通訊;
    • 三、付款和票務,將NFC搭建在新興的智能票務和電子付款基礎設施之上。

    所以能夠在支付,身份識別,讀Tag, 簽到等多種場景下用到NFC,不只僅只有公交卡的應用。

  • NFC卡和其餘卡的區別?

    • NFC是在RFID的基礎上發展而來,NFC從本質上與RFID沒有太大區別,都是基於地理位置相近的兩個物體之間的信號傳輸。
    • 但NFC與RFID仍是有區別的,NFC技術增長了點對點通訊功能,能夠快速創建藍牙設備之間的P2P(點對點)無線通訊,NFC設備彼此尋找對方並創建通訊鏈接。P2P通訊的雙方設備是對等的,而RFID通訊的雙方設備是主從關係。
    • ID卡它是身份識別卡的總稱, ID 卡分接觸型和非接觸型(RF類型), 非接觸類的無線RF類的又可稱 RFID 卡, RFID 卡又有遠距離的和近距離的。NFC 卡也就是近場卡,屬於近距離卡。

3.本次講座的學習感悟、思考等

真正進行漏洞挖掘須要具有的知識

從事漏洞挖掘工做須要具有的知識是極其普遍的,而且隨着時間在不斷改變,也取決於你所研究的對象(web程序、桌面程序、嵌入式等等)。不過,萬變不離其宗,所須要掌握的知識領域卻總能夠認爲是肯定的,我認爲大體能夠分爲如下四個方面:

  1. 程序正向開發技術。這是一個開發者須要掌握的能力,包括編程語言、系統內部設計、設計模式、協議、框架等。擁有豐富編程經驗與開發能力的人在漏洞挖掘過程當中每每比那些只對安全相關領域有所瞭解的人員對目標應用能有更深刻的理解,從而有更高的產出。

  2. 攻防一體的理念。這些知識涵蓋了從基本的安全原則到不斷變換的漏洞形態及漏洞緩解措施。攻擊和防護結合的理念,可以有效幫助研究者既可以發現漏洞,同時也可以快速給出有效的漏洞緩解措施和規避方法。

  3. 有效使用工具。可以高效的使用工具可以快速將思路轉化爲實踐,這須要經過花時間去學習如何配置和使用工具,將其應用於本身的任務並構建本身的工做流程來不斷積累經驗。更進一步,須要深刻掌握所使用工具的原理,以及如何對其進行二次開發,以使得其可以更加高效的應用於當前的工做實際。事實上,我認爲面向過程的學習方法每每比面向工具的學習方法更加高效以及有價值,當本身發現一個在使用一個工具遇到瓶頸時,先不要退縮,嘗試去改造它,或者經過本身動手實踐去完成可以適應當前工做的工具,這每每可以幫助快速積累大量實踐經驗。幫助咱們之後更加高效的去實踐漏洞挖掘工做。

  4. 對目標應用的理解。最後,也是最重要的,做爲一個漏洞挖掘人員,對本身研究的應用程序在安全性方面必需要比這個程序的開發者或維護者有更深的理解。這樣你才能儘量的發現這個程序中的漏洞並修復它。

要學的還有不少,須日日精進,務求學有所成。

4.漏洞挖掘研究現狀

A study on software vulnerability prediction model

做者:P. K. Shamal; K. Rahamathulla; Ali Akbar

投稿:2017 International Conference on Wireless Communications, Signal Processing and Networking (WiSPNET)

年份:2017

主題:本文介紹了兩種類型的軟件漏洞模型用於預測軟件中的漏洞組件。

許多軟件系統,特別是Web應用程序在其生命週期中報告了漏洞問 所以,開發安全軟件是軟件工程的關鍵部分。軟件是程序和相關數據的集合。所以,因爲資源有限,沒法對全部軟件組件進行詳細的漏洞檢查。開發人員只需將檢查重點放在易受攻擊性上。所以,須要一種機制來檢測軟件中的易受攻擊的文件。該解決方案是一種軟件漏洞預測模型。軟件漏洞預測模型將軟件組件(如模塊,文件等)分爲兩類; 脆弱而乾淨。所以,開發人員須要將他們的漏洞檢查僅關注於易受攻擊的類中的文件。

軟件漏洞預測模型基於機器學習。分類器通過訓練,具備已知的漏洞及其功能。

基於軟件度量的預測模型中,不一樣的軟件度量被用做軟件漏洞的指示符。在基於文本分析的方法中,軟件的源代碼用做預測模型的輸入。源代碼轉換爲令牌和頻率。

基於軟件度量的預測模型

軟件度量經過數值表示軟件的特徵。例如,軟件的大小由代碼行(LOC)或軟件中定義的函數總數表示。在基於軟件度量的軟件度量預測模型中,這些軟件度量被用做特徵並被映射到相應軟件組件的漏洞狀態。許多軟件度量標準是做爲軟件開發生命週期各個階段的一部分建立的。所以,這些指標用於構建軟件漏洞預測模型。

軟件漏洞預測模型:

軟件度量標準:

基於軟件度量的文本挖掘預測模型

這是一種基於機器學習的方法,用於預測軟件應用程序的哪些組件具備安全威脅。

在此方法中,完成源代碼的文本分析。每一個組件都表示爲源代碼中的一組術語,即令牌,它在源代碼中的出現次數。這些令牌及其計數用於構建預測模型。例如,Android應用程序包含許多Java文件做爲軟件組件。每一個java文件都轉換爲一個標記集合和文件中每一個標記的計數。用於將源代碼轉換爲標記的方法使用分隔符。分隔符中包含數學和邏輯運算符,空格,Java標點字符。

令牌轉化:

結合軟件度量和文本挖掘方法預測漏洞文件的新方法

第一階段六個基礎分類器產生輸出,在第二階段由做曲家組合這些輸出。存在不一樣的分類方案,針對不一樣的數據集和不一樣的方法給出不一樣的結果。所以,將這兩種方法,軟件度量和文本挖掘與不一樣的機器學習技術相結合。在這項工做中,做者爲每種方法使用三個分類器,並使用組合器來組合這些分類器的輸出。隨機森林被用做做曲家。

簡單組合預測模型:

Research of Industrial Control System Device Firmware Vulnerability Mining Technology Based on Taint Analysis

做者:Yi Li; Xiaoman Liu; Huirong Tian; Cheng Luo

投稿:2018 IEEE 9th International Conference on Software Engineering and Service Science (ICSESS)

年份:2018

主題:一種挖掘工業控制系統固件漏洞的新方法

這篇論文我的認爲比較有實用性

針對固件漏洞挖掘研究和基於模糊測試的傳統漏洞挖掘方法研究效率低下的問題,提出了一種挖掘工業控制系統固件漏洞的新方法。該方法基於污點分析技術,能夠針對可能觸發漏洞的變量構建測試用例,從而減小無效測試用例的數量,提升測試效率。實驗結果代表,該方法能夠減小約23%的測試用例,能夠有效提升測試效率。

隨着工業信息化的發展,愈來愈多的傳統網絡技術應用於工業控制系統。一方面,這改善了工業生產,另外一方面,它在ICS以前引入了許多安全問題。雖然工業企業在Stuxnet事件和烏克蘭電力系統襲擊事件後廣泛提升了對ICS安全保護的關注程度,但近年來,與ICS相關的安全事件仍然無休止地出現。一家名爲Business Advantage的市場研究諮詢公司去年與來自21個國家的359家公司一塊兒對卡巴斯基實驗室進行了採訪,結果顯示其中54%的公司在一年內至少在其ICS中發生過一次安全事故。在這些公司面臨的安全威脅中。大多數這些威脅利用ICS軟件或硬件中的漏洞來實現其攻擊目的。所以,及時發現和修復ICS中的漏洞成爲ICS安全保護的重要手段之一。而自2016年以來,一個重要的安全趨勢是終端設備暴露的安全問題日益嚴重,已成爲攻擊者的重要推進力。控制大量終端設備以在目標系統上執行加密貨幣挖掘或DDoS攻擊的狀況已經暴露。所以,如何探索ICS中可能存在的漏洞,切斷攻擊者的潛在攻擊路徑,進而防止工業控制設備成爲攻擊者的工具,已成爲研究的熱點。

污點分析

污點分析(也稱爲信息流跟蹤技術)是一種實用的信息流分析技術,它經過在系統中標記敏感數據而後跟蹤過程當中標記數據的傳播來檢測系統安全問題[8]。

污點分析能夠抽象爲三元組(源,匯,消毒劑),其中,源是污點的來源,這意味着不受信任或機密的數據被指示到系統中。接收器是接收點,表示直接生成安全敏感操做(違反數據完整性)或私有數據泄漏到外部(這違反了數據機密性)。消毒劑是無害的過程,這意味着數據傳輸再也不經過數據加密或去除危險來損害軟件系統的信息安全。污點分析是分析程序中污點源引入的數據是否能夠直接傳輸到匯點而不會進行無害處理。若是不是,則系統在信息流方面是安全的; 不然,表示系統存在安全問題,如隱私數據泄露或危險數據操做。

污點分析過程:

漏洞挖掘狀態機中檢測到的程序段中每一個變量的狀態轉換圖:

污點跟蹤算法

污點跟蹤算法是循環過程。分析檢測到的程序段的每一個指令以肯定它是否涉及污染變量的擴散以及它是不是敏感指令。詳細步驟解釋以下:

  1. 爲檢測到的程序段中的每一個變量創建狀態機,並將初始狀態設置爲正常狀態。
  2. 從被檢測程序段的第一條指令開始,分析當前運行位置的指令,取指令,判斷其類型,指令功能,指令源操做數和指令目標操做數,爲下一步判斷作準備。而後轉到步驟3。
  3. 判斷該指令是否具備數據寫入功能,或者是根據步驟2得到的指令功能和類型的跳轉指令。若是不是,則前進一步,返回步驟2.若是該指令具備數據寫入功能而不是跳轉請執行步驟4.不然,請執行步驟5。
  4. 獲取操做數,並判斷目標操做數是否存在受污染數據的傳播。也就是說,根據上述狀態模型的定義判斷目標操做數是否與受污染源相關。若是是,請將變量設置爲污染狀態,而後轉到步驟6.不然,前進並返回步驟3。
  5. 若是指令是跳轉指令,則判斷跳轉參數是否與受污染的數據有關。若是參數是從污染變量派生的,則前進一步而後轉到步驟2.不然,跳轉到目標指令並轉到步驟2。
  6. 根據上述敏感指令的定義判斷步驟4中的指令。若是是這樣,請將與操做數關聯的變量設置爲不安全狀態。同時,找到污點源並將相關字段的權重增長1.若是該指令是檢測到的程序段的最後一條指令,則轉到步驟7.不然,前進並轉到步驟2。
  7. 將全部變量設置爲正常狀態和污染狀態爲安全狀態。

污點跟蹤算法過程:

在相同數量的漏洞下,不一樣plc固件挖掘所需的測試用例數量的比較:

做爲近年來研究的新方向,工業控制系統的安全性受到普遍關注。ICS的安全事件時有發生,而且開放漏洞的數量不斷增長。但最近工業控制系統漏洞挖掘研究工做主要集中在控制協議和控制軟件上,對工業控制設備固件漏洞挖掘的關注較少,大多數現有方法是經過隨機構建測試用例來實現的,這種方法較差。挖掘效率,於是業界迫切須要一種工業控制設備固件的挖掘方法。本文提出了一種工業控制設備固件漏洞挖掘方法。此方法使用污點分析方法過濾可能在檢測到的程序段中易受攻擊的變量,並針對這些變量構建測試用例,以減小無效測試用例的數量並提升測試效率。實驗結果代表,該方法能夠平均節省大約四分之一的測試用例,而且能夠在挖掘相同數量的漏洞時顯着提升漏洞挖掘的效率。在將來的工做中,能夠進一步優化生成漏洞測試用例的方法,以提升漏洞挖掘的效率。實驗結果代表,該方法能夠平均節省大約四分之一的測試用例,而且能夠在挖掘相同數量的漏洞時顯着提升漏洞挖掘的效率。在將來的工做中,能夠進一步優化生成漏洞測試用例的方法,以提升漏洞挖掘的效率。實驗結果代表,該方法能夠平均節省大約四分之一的測試用例,而且能夠在挖掘相同數量的漏洞時顯着提升漏洞挖掘的效率。在將來的工做中,能夠進一步優化生成漏洞測試用例的方法,以提升漏洞挖掘的效率。

A Mining Approach to Obtain the Software VulnerabilityCharacteristics

做者:Xiang Li; Jinfu Chen; Zhechao Lin; Lin Zhang; Zibin Wang; Minmin Zhou; Wanggen Xie

投稿:2017 Fifth International Conference on Advanced Cloud and Big Data (CBD)

年份:2017

主題:一種分析和獲取基於軟件漏洞的數據挖掘技術的基本特徵的漏洞挖掘算法

做者首先使用數據挖掘技術和常見漏洞數據庫提取和預處理軟件漏洞。做者使用通用漏洞和暴露(CVE)數據庫,通用弱點枚舉(CWE)數據庫,國家漏洞數據庫(NVD)數據集來評估所提出的技術。實證結果代表,所提出的漏洞挖掘算法在漏洞挖掘過程當中有顯着的改進。

通常漏洞挖掘框架

得到基本特徵:一種新方法

  1. 涉及使用punct []函數從項目中刪除標點符號和特殊字符(例如@ &%* /:?#。,!$)。
  2. 在這個階段,刪除了數據庫中常常出現的全部停用詞,例如(例如,此,,或,,am,it,on,at,how,with,that)。做者處理了空格,數字以及大小寫,由於全部這些元素都不會影響漏洞挖掘過程的結果。
  3. 做者爲三個漏洞數據庫分配了術語權重,以肯定軟件漏洞文本指示符在數據庫中出現的頻率。

在針對每種狀況應用加權方案(tfidj)以後,基於每一個文本指示符在數據庫中的頻率爲每一個文本指示符分配統計相關性評分函數,而且將最高得分做爲在挖掘階段中使用的最終指標。計算的術語總數計算爲搜索數和t項的比率。

軟件漏洞特徵的挖掘算法

在本研究中,做者提出了一種漏洞挖掘算法,利用CWE,CVE和NVD數據庫中存在的軟件漏洞信息挖掘並獲取軟件漏洞的本質特徵。該研究結果代表,與手動方法相比,用於提取軟件漏洞基本特徵的漏洞挖掘算法有顯着改進。做者分析的最重要發現是,做者觀察到,在全部三個項目中,召回率約爲70%,精確度約爲60%。這代表漏洞挖掘算法在檢測基本和非必要漏洞方面有顯着改進。這意味着本研究採用的方法能夠有效地應用於提取和獲取軟件漏洞的基本特徵。雖然做者使用了三個以不一樣格式存儲軟件漏洞的漏洞數據庫,但做者的方法沒有考慮用於存儲這些漏洞的其餘功能。未來,做者計劃經過添加其餘功能擴展研究範圍,並挖掘從各類數據庫中提取的基本漏洞之間的關聯。這意味着本研究採用的方法能夠有效地應用於提取和獲取軟件漏洞的基本特徵。雖然做者使用了三個以不一樣格式存儲軟件漏洞的漏洞數據庫,但做者的方法沒有考慮用於存儲這些漏洞的其餘功能。未來,做者計劃經過添加其餘功能擴展研究範圍,並挖掘從各類數據庫中提取的基本漏洞之間的關聯。這意味着本研究採用的方法能夠有效地應用於提取和獲取軟件漏洞的基本特徵。雖然做者使用了三個以不一樣格式存儲軟件漏洞的漏洞數據庫,但做者的方法沒有考慮用於存儲這些漏洞的其餘功能。未來,做者計劃經過添加其餘功能擴展研究範圍,並挖掘從各類數據庫中提取的基本漏洞之間的關聯。

Data mining for web vulnerability detection: A critical review

做者:Duha A. Al-Darras; Ja'far Alqatawna

投稿:2017 8th International Conference on Information Technology (ICIT)

年份:2017

主題:本文分析瞭如何使用數據挖掘技術來提升漏洞檢測的質量。

本首先討論Web應用程序漏洞以及靜態檢測方法及其侷限性。而後,本文探索數據挖掘技術及其改進漏洞檢測的潛力,回顧和討論了在文獻中使用這些技術的結果。

Web漏洞

賽門鐵克公司2015年安全報告統計數據顯示,78%的網站至少有一個漏洞,其中15%的漏洞是關鍵漏洞[1]。2016年White-Hat報告的統計數據顯示,每一個站點的平均漏洞數量爲23個,其中13個是嚴重漏洞。此外,它代表漏洞能夠在很長一段時間內保持開放狀態。嚴重漏洞的平均年齡爲300天[5]。這些結果代表Web應用程序仍包含許多漏洞.

數據挖掘與用於檢測代碼中的漏洞的模式匹配

最經常使用的漏洞檢測方法之一是模式匹配。有兩種類型能夠檢測註冊的模式是漏洞,積極的安全模型和消極的安全模型。積極的安全模型註冊了許多非易受攻擊的Web代碼模式,當新模式與任何已註冊的模式不匹配時,它被歸類爲易受攻擊的。相反,當新模式與任何已註冊模式不匹配時,負安全模型會註冊許多惡意Web代碼模式,它被歸類爲非易受攻擊。此模式僅限於預先註冊的模式,這意味着它對惡意Web代碼的更改不靈活。另外一種方法使用數據挖掘算法來檢測漏洞。該方法包含兩個主要階段:學習階段和分類階段。在學習階段,提取特徵並定義規則。在分類階段,分類器根據特徵向量將給定代碼分類爲易受攻擊或不易受攻擊。使用機器學習算法的一個優勢是它能夠利用更普遍的漏洞檢測。

數據挖掘和靜態分析

程序員常用靜態分析技術來自動搜索和刪除應用程序源代碼中的漏洞。開發靜態分析工具須要明確編碼如何檢測每一個漏洞的知識,這是一個複雜的過程。

Machine Learning in Vulnerability Databases

做者:Zhechao Lin; Xiang Li; Xiaohui Kuang

投稿:2017 10th International Symposium on Computational Intelligence and Design (ISCID)

年份:2017

主題:機器學習在漏洞數據庫中的應用

經過分析現有的開源漏洞數據庫,本文做者提取相關屬性並構建屬性列表,而後利用機器學習技術挖掘屬性列表,但願發現一些新穎,有趣,對研究者有價值的知識。本文做者僅在本文中的漏洞數據庫中挖掘關聯規則。經過這些關聯規則,本文做者能夠發現一些共同存在的漏洞屬性,這能夠進一步推斷出漏洞的規律。

當前領域中衆所周知的開源漏洞數據庫是美國國家漏洞數據庫(NVD),其中包含全部CVE信息。CVE是用於安全信息共享的關鍵字,可幫助用戶在單獨的漏洞數據庫和漏洞評估工具中共享數據。每一個CVE由CVE編號(即CVE的名稱),一些常見漏洞評分系統(CVSS)度量標準和參數組成,其中包含有關漏洞類型,嚴重性等的信息。此外,NVD還包含Common Weakness Enumeration(CWE)。CWE將弱點劃分爲不一樣的類別,例如跨站點腳本或操做系統命令注入,CWE有超過1,000個不一樣的條目。

中國,有一個國家漏洞數據庫:中國國家信息安全漏洞數據庫(CNNVD)。CNNVD是中國信息技術安全評估中心的成員。旨在發現,傳播和修復漏洞。CNNVD創建了一個全面的多層次數據收集渠道。它包含補丁,受影響的產品,安全事件和其餘相關數據。

數據庫的來源

在本文中,做者使用Common Weakness Enumeration(CWE)數據庫[6]做爲數據庫的來源,CWE定義了軟件設計和實現的共同弱點,並將弱點分類爲類別。大約1000種弱點描述了從軟件設計到實現的安全弱點。

與CVE相似,每一個CWE都有一個惟一的ID,不一樣的CWE對應不一樣的ID。CVE還包含CWE ID,代表能夠在CWE中找到CVE中大量漏洞的緣由。從CWE的角度來看,這是因爲CWE中的一個或多個弱點,它在CVE中造成了漏洞。所以,CWE的重要性是顯而易見的。

出於不一樣的目的,CWE設計了兩種觀點:發展和研究。開發視圖根據軟件開發常常遇到的概念來組織弱點。研究視圖是爲了促進弱點研究而產生的,它包含弱點與脆弱性弱點的做用之間的相互依賴關係。如下是從CWE數據庫中的弱點中選擇的部分屬性值

數據預處理

選擇目標數據庫後,挖掘工做沒法當即啓動,由於目標數據庫的數據格式不適用於數據挖掘工具,所以須要將原始數據格式轉換爲適合挖掘工具的格式。此外,目標數據庫包含大量數據,這不是咱們所關心的,所以有必要消除數據庫中的無關數據。最後,數據庫中的一些數據不是標準化的,若是直接用於挖掘,很難得到高質量的結果,所以有必要對這些非標準數據進行標準化。簡而言之,須要高質量的數據來得到高質量的採礦結果。本文中的數據預處理包括如下過程:

  • 數據恢復:數據庫能夠從CWE網站[6]下載,數據格式爲xml。
  • 數據提取:獲取CWE數據庫信息後,分析弱點中包含的信息,並根據文件格式和編寫規範提取所需的屬性。
  • 數據清理:某些弱點可能在結果數據庫中缺乏某些屬性值,所以須要將缺省數據添加到缺乏的屬性值。另外,對於相同的屬性值,不一樣的弱點可能有不一樣的表達式,在CWE中,最多見的是同一個詞,一個開頭是大寫,另外一個不是,因此咱們須要修改相似的不一致數據。最後,CWE中存在屬性值錯誤,例如應該用於描述「語言名稱」的屬性值,該屬性值用於描述須要修改此類數據的「語言類」。
  • 數據轉換:這是數據格式的轉換,由於數據挖掘工具備其特定的格式要求,所以有必要將原始xml格式轉換爲相應的數據格式。
  • 數據縮減:包括降維和數據壓縮。降維基於數據提取,並進一步刪除不相關的屬性。數據壓縮是爲了消除一些沒必要要的數據項。

構建特徵空間

除了諸如「引入時間」和「適用平臺」之類的結構化數據以外,還存在一些沒有諸如「描述」之類的結構的信息。咱們可使用scikit-learn工具[8]的Countvectorizer模塊來提取經常使用單詞和n-gram。

n-gram是在文檔中同時出現的字段元組。每一個CWE描述能夠造成文檔,而且全部文檔造成語料庫。

每一個CWE描述均可以進行矢量化,而且根據哪一個描述包含n-gram,能夠將其轉換爲一組特徵事件,這是利用文檔中的信息的最簡單方法。更高級的方法是使用天然語言處理算法。

咱們在本文中沒有處理這部分非結構化信息,這是將來的工做。

實驗結果

  1. 每一個實驗的過程基本相同,首先使用數據預處理工具CWE_exact提取所需的屬性值,並將其轉換爲數據挖掘格式,而後在Weka中使用FP-growth算法,將CWE_exact生成的文件挖掘到得到關聯規則。

    使用FP-growth算法基於兩個緣由:FP-growth比Apriori快,而FP-growth消耗更少的內存。

  2. 根據不一樣弱點之間的層次關係,將全部弱點抽象爲最高級別的11種類型,並在此級別的粒度下,探討CWE類型與內部屬性之間的關係。

「語言名稱」和「引入時間」之間的關聯規則:

「引入時間」和「後果範圍」之間的關聯規則:

弱點類型與「引入時間」之間的關聯規則:

弱點類型與「後果範圍」之間的關聯規則;

漏洞挖掘學習總結

在以前查閱資料學習時,看到了一個頗有意思的形容:

從某個角度來說,能夠將漏洞挖掘工做比做玩迷宮遊戲,不一樣的是,這個迷宮與平時所見的遊戲中的迷宮略有不一樣:

1. 沒法當即看到它總體的外觀

2. 隨着漏洞挖掘工做的深刻,這個迷宮的形狀逐漸擴大

3. 攻擊者將會擁有多個起點及終點,可是沒法肯定這些點具體在哪裏

4. 最終這個迷宮可能永遠也沒法100%的完整,可是卻可以弄清楚A點至B點的一條完整路徑

具體一點的描述,能夠將漏洞挖掘工做歸結爲三個步驟:

1. 枚舉程序入口點(例如:與程序交互的接口)

2. 思考可能出現的不安全狀態(即漏洞)

3. 設法使用識別的入口點到達不安全狀態

便是說,在這個過程當中,迷宮是研究的應用程序,地圖是堆程序的理解程度,起點是的入口點(交互接口),終點爲程序的不安全狀態。

所謂入口點,既能夠是UI界面上直觀可見的交互接口,也能夠是很是模糊與透明的交互接口(例如IPC),如下是部分安全研究員較爲感興趣的關注點:

1. 應用程序中比較古老的代碼段,而且這一部分隨着時間的推移並無太大的變化。

2. 應用程序中用於鏈接由不一樣開發團隊或者開發者開發的程序模塊的接口部分

3. 應用程序中那些調試和測試的部分代碼,這部分代碼本應在造成Release版本時去除,但因爲某些緣由不當心遺留在程序中。

4. C-S模式(帶客戶端和服務端)的應用中客戶端及服務端調用API的差別部分(例如網頁表單中的hide屬性字段)

5. 不受終端用戶直接影響的內部請求(如IPC)

認爲從攻擊面上來劃分能夠講漏洞分爲兩大類,通用漏洞(General)和上下文漏洞(contextual)。通用型漏洞是指在對應用的業務邏輯不是很是熟悉的狀況下可以找出的漏洞,例如一些RCE(遠程代碼執行)、SQLi(sql注入)、XSS(跨站)等。上下文漏洞是指須要在對應用的業務邏輯、認證方式等很是熟悉的狀況下才能找到的漏洞,例如權限繞過等。

在漏洞挖掘的過程當中,首先會根據經驗優先考慮研究測試那些

首先假設攻擊者的目標web應用是一個單頁面應用(single-page-application SPA),攻擊者已經得到合法驗證去訪問這個應用,可是攻擊者沒有任何關於服務端的源代碼或者二進制文件。在這種狀況下,當攻擊者枚舉入口點時,能夠經過探尋該應用的不一樣功能來進一步瞭解其業務邏輯及功能,能夠經過抓包分析看HTTP請求內容,也能夠分析客戶端的網頁代碼獲取須要提交表單的列表,可是最終的限制仍是攻擊者沒法具體知悉客戶端和服務端調用的API之間的區別,不過經過以上方法,攻擊者能夠找到一些入口點,

接着就是操做這些入口點,以試圖達到攻擊者預期的不安全狀態。因爲漏洞的形態不少,攻擊者一般須要構建一個適用於該測試應用程序的業務功能漏洞的測試集,以求達到最高效的尋找漏洞。若是不那樣作的話,攻擊者就將會在一些無用的測試集上花費大量時間,而且看不到任何效果(舉個例子,當後臺的數據庫爲Postgresql時,攻擊者用xp_cmdshell去測試,測試再屢次都無濟於事)。因此在構造測試集時,需對應用程序的邏輯有較深的理解。

參考資料

相關文章
相關標籤/搜索