欧美国产伦久久久久久久

<acronym id="cqmsy"></acronym>
<acronym id="cqmsy"><center id="cqmsy"></center></acronym>

24小時論文定制熱線

咨詢電話

熱門畢設:土木工程工程造價橋梁工程計算機javaasp機械機械手夾具單片機工廠供電采礦工程
您當前的位置:論文定制 > 畢業設計論文 >
快速導航
畢業論文定制
關于我們
我們是一家專業提供高質量代做畢業設計的網站。2002年成立至今為眾多客戶提供大量畢業設計、論文定制等服務,贏得眾多客戶好評,因為專注,所以專業。寫作老師大部分由全國211/958等高校的博士及碩士生設計,執筆,目前已為5000余位客戶解決了論文寫作的難題。 秉承以用戶為中心,為用戶創造價值的理念,我站擁有無縫對接的售后服務體系,代做畢業設計完成后有專業的老師進行一對一修改與完善,對有答辯需求的同學進行一對一的輔導,為你順利畢業保駕護航
代做畢業設計
常見問題

基于機器學習的Java靜態漏洞掃描系統的設計與實現

添加時間:2021/07/09 來源:未知 作者:樂楓
本系統旨在將學術研究成果應用于工業界實際項目中,面向 Web 開發常用的 Java 語言,利用污點分析、程序切片和 BLSTM 為開發或安全工程師提供更準確的代碼掃描服務,進而減輕用戶工作量,保證軟件開發進度和質量。
以下為本篇論文正文:

摘 要

  隨著軟件系統應用領域不斷擴大,對于軟件和信息系統的攻擊日益增多,人們對軟件安全的要求不斷提升。為此,在軟件開發和測試過程中,工程師使用靜態代碼分析系統對軟件代碼進行安全性掃描,并評估分析報告,只有通過安全性評估的軟件才可以部署至線上運行。然而,傳統代碼分析是保守的,為不遺漏安全風險,系統往往會拋出大量誤報,這些誤報增加了安全工程師工作量,進而對軟件開發進度產生影響。隨著機器學習領域的發展,學術界已將機器學習算法運用于代碼分析以發現漏洞或降低誤報,然而這些工作只適用于小規模程序,對于在大規模應用還存在著種種問題。

  本系統旨在將學術研究成果應用于工業界實際項目中,面向 Web 開發常用的 Java 語言,利用污點分析、程序切片和 BLSTM 為開發或安全工程師提供更準確的代碼掃描服務,進而減輕用戶工作量,保證軟件開發進度和質量。在污點分析方面,本系統利用 Find Security Bugs 的大量規則,保證低漏報的同時,對該工具的輸出進行改進,使之反饋更詳細的污點傳播路徑,增強報告可解釋性;接著,本系統利用程序切片技術,對每一個漏洞實例進行代碼切片,為了保證切片效率和穩定性,本文針對實際 Jar 包對切片器進行優化并提出分段切片思想,對于一個漏洞報告,將其對應的污點傳播路徑分解為小的污染流片段集合,再對每一個片段進行后向程序切片;最后,系統通過 BLSTM 模型,對預處理后的漏洞切片集合做預測,根據切片的預測結果推導漏洞實例本身是否為誤報。

  本系統目前已代替傳統污點傳播分析引擎在線上部署,同時實驗結果表明,本系統可以在可接受的掃描時間下,取得更加準確的掃描結果。在效率上,本系統優化傳統切片,每個項目的整體掃描時間不超過 1 小時,在準確性上,本系統誤報預測精確率達 90.53 %,即相對于單純的污點傳播,本系統在遺漏少量真實漏洞的前提下,排除 25.44 % 誤報,大大減輕安全運營人員的代碼審計工作量,從而在整體上加快軟件開發過程。

  關鍵詞:靜態代碼分析,污點分析,程序切片,BLSTM

Abstract

  As the application area of software systems continues to expand, attacks on software and information systems are increasing. So nowadays people pay more and moreattention to software security. During software development and testing, engineersoften scan software codes with static code analysis systems. Only software that haspassed the security testing can be deployed online. While traditional static code analysis is often conservative. In order not to miss any security risks, they often give alarge number of false positives. These false positives not only increase the workloadof security engineers, but also delay the progress of software development. With thedevelopment of machine learning, researchers have applied machine learning on codeanalysis to discover vulnerabilities or reduce false positives. However, their works areonly applicable to small?scale programs.

  This system aims to apply academic research to the real world. For one of themost common languages in Web development, Java, this system utilizes taint analysis, program slicing, and BLSTM to provide more accurate code analysis services fordevelopment or security engineers. In terms of taint analysis, the system uses a largenumber of rules in Find Security Bugs to ensure low false negatives. In addition, itcan give taint propagation paths to make the report more readable. Then, the systemslices each vulnerability instance. In order to ensure slicing efficiency and stability,this system optimizes the slicer for the actual Jar package and proposes an idea called??segmented slicing. For a taint vulnerability, its taint paths are pided into small setof taint flow fragments, then the system uses backward program slicing to slice eachtaint flow. Finally, the system uses the BLSTM model to predict vulnerability's slicing set which has been pre?processed, and infer whether the vulnerability instance is falsepositive based on the slice prediction and taint flow logic.

  This system has replaced the traditional taint analysis engine online. The experimental results show that the system can obtain more accurate scanning results within anacceptable scanning time. In terms of efficiency, the system optimizes traditional slicing to ensure that the scan time of each project does not exceed 1 hour. For accuracy,the system's precision rate reaches 90.53%. In other words, compared to Find SecurityBugs, the system has eliminated 25.44% false positives, which greatly reduced the codeaudit work.

  Keywords: SCA, Taint Analysis, Program Slicing,BLSTM

Java靜態漏洞掃描系統

目錄

  第一章 引言

  1.1 項目背景和意義

  隨著網絡技術和應用飛速發展,信息系統安全正面臨著前所未有的挑戰。網絡化和互聯互通性已經成為當前軟件和信息系統發展的大勢所趨,互聯網導致系統攻擊面增大,使系統面臨的安全威脅空前增加。另一方面,隨著軟件和信息系統的業務不斷豐富,復雜性也不斷提高,這不僅使漏洞利用方式不斷增加,而且使漏洞檢測難度不斷提高,盡管開發者已經投入了大量精力進行安全編程,但是軟件漏洞仍然存在,并將繼續成為一個重大問題 [1].根據國際通用漏洞發布組織 MITRE 統計,在 1999 年,僅有 1600 個通用漏洞(CVE,Common Vulnerabilitiesand Exposures)被發現;到了 2014 年,新發現的 CVE 數量已接近 10000 個 [2];而至今(2020 年 1 月 26 日),該數字已經上升到了 129695 個 1.同時,根據國家互聯網應急中心(CNCERT/CC,National Computer Network Emergency ResponseTechnical Team/Coordination Center of China)的報告 2顯示,僅 2019 年上半年,國家信息安全漏洞共享平臺(CNVD)就收錄了通用型安全漏洞 5859 個,其中Web 漏洞占比 24.9%,位居第二。

  從以往發生的安全事件來看,針對 Web 漏洞的攻擊可導致的后果極為嚴重,一個網站系統只要有一處脆弱點,攻擊者將會使用一切手段對該網站發起攻擊,篡改網頁內容,竊取服務器數據甚至在服務器中執行惡意代碼,造成更嚴重的后果。

  源代碼安全是保證軟件安全的基礎。對于源代碼進行安全掃描,可以在源頭處杜絕安全問題,根據 2019 年中國軟件評測中心的《2019 大中型政企機構網絡安全建設發展趨勢研究報告》顯示,進行源碼掃描能有效減少 10%?50% 安全漏洞,降低軟件安全建設和運維成本。因此,源碼安全日益受到中大型政企機構的重視,在此方面投入也不斷提高,其中,構建一款具有高準確率的靜態代碼分析(SCA,static code analysis)系統顯得尤為重要 [3].

  由于軟件數量和規模擴大,人們總希望能夠通過自動化技術發現代碼中的漏洞,從開源工具到商業工具,從工程實踐到學術領域,目前已有許多關于代碼靜態掃描系統的應用和研究 [1, 3-15].然而目前靜態代碼分析系統仍存在或多或少的問題,在工業界,SCA 使用基于模式匹配、數據流分析等技術,往往希望不漏掉真實漏洞--不產生漏報,但是它們產生了大量誤報 [3, 16, 17].過高的誤報使人工審核任務加重,讓安全工程師將大量精力浪費在無害代碼上 [5].在實際生產中,安全工程師為了權衡誤報與漏報,必須不斷地設計更加精巧的掃描規則,再一次加重了安全工程師負擔 [1, 18],并對安全工程師個人經驗有很高的要求。學術界對提高 SCA 的準確性進行了更深入的研究,引入了諸如符號執行,機器學習等技術,但是受限于計算能力,它們往往只能應對小規模代碼項目,如何讓學術界成果應用到工業界,使其適應大規模程序,是安全工程師亟待考慮的問題。

  本文旨在設計一款基于污點傳播和機器學習的 Java 靜態代碼掃描系統,通過污點傳播、程序切片和雙向長短記憶網絡(BLSTM, Bidirectional Long ShortTerm Memory)技術,提供準確的安全掃描服務。具體來說,用戶輸入一個已編譯好的 Jar 包后,該系統以污點分析為基礎,先產生一個初步的漏洞結果。由于污點分析存在過污染、無法識別清潔函數問題,該結果存在大量誤報,接著系統根據初步結果進行分解,將其劃分為多個子污染流,對每個污染流進行后向程序切片,并用 BLSTM 算法模型預測切片是否能夠向下傳播污點,從而推導每個漏洞實例是否可利用,并將疑似誤報的漏洞威脅等級降低,以此讓安全工程師或軟件開發人員將更多注意力放在更可能為漏洞的結果上。同時,用戶可以對漏洞進行標注,通過模型周期性的迭代學習,預測準確率將不斷提高。系統對于污點分析得到的傳播路徑進行拆解,通過限制調用圖和去依賴切片技術,解決了學術工具只能應對小規模程序的問題,填補了學術界和工業界的鴻溝,而基于學術界前沿工作,本系統相對于傳統掃描工具結果更準確。

  1.2 研究現狀

  本系統旨在利用傳統方法配合機器學習對 Java 軟件源代碼進行靜態安全掃描,因此本節將詳細介紹工業界傳統靜態代碼分析系統應用現狀和學術界基于機器學習的靜態安全掃描研究現狀。

  1.2.1 傳統靜態代碼分析

  系統應用現狀在項目上線前對項目代碼進行靜態掃描已經成為軟件開發中的最佳實踐,在實際操作中,各個企業會根據實際情況使用第三方或自研靜態掃描產品。本小節就目前常用掃描產品和靜態掃描技術進行介紹。

  目前靜態安全掃描產品使用的技術主要有詞法分析技術、數據流分析技術和形式化分析技術。詞法分析技術主要是對代碼中敏感函數進行匹配,從而發現安全性漏洞,這一類分析技術產生時間較早,實現也較為簡單,但是由于其不考慮程序上下文,存在大量誤報,在實際情況中使用較少。

  數據流分析技術模擬程序中敏感數據流動從而發現安全漏洞,其衍生出的污點分析方法是目前實際使用的主要檢測方法,這一類分析方法適合于數組越界,注入類漏洞,因為這些漏洞特征表現為特定變量在某一程序點上狀態滿足或不滿足某一規則,通過對數據的跟蹤恰好可以識別這些特征。由于其能覆蓋的漏洞種類較多,本系統選擇以該技術為預測的基礎,然而隨著目前程序規模不斷擴大,新型程序設計思想和語法不斷出現,加之漏洞成因愈發復雜,即使是這類分析技術目前也存在大量誤報,例如污點分析無法很好的處理容器變量、控制流、清潔函數等,企業中的安全運營人員必須通過手工設計精巧的污點傳播規則,限制開發者所用的清潔函數,或是以手工添加函數摘要的方式添加清潔函數等方式降低誤報,然而這些方式并不能完全解決污點分析的弊端,仍有誤報不斷產生,安全工程師需要花大量時間處理誤報。

  形式化分析技術往往用于一些可以用數學邏輯表達的安全漏洞,如 C/C++語言中指針變量二次釋放,緩沖區溢出等問題,這一類技術將漏洞存在性問題變為數學邏輯上的約束求解和邏輯推導問題,由于目前程序規模較大,該技術面臨著求解規?臻g大,無法推導等問題,此外該技術針對的漏洞類型較少,將問題轉變為數學模型需要大量人力成本。

  目前商業 SCA 主要有 Fortify SCA 3、LGTM 4,Infer 5等。Fortify 為老牌安全掃描工具,其主要結合詞法分析,數據流分析、配置分析等掃描技術,但就像前文所說,其默認規則存在大量誤報;LGTM 為較為新型的安全掃描器,是Google、微軟所使用的安全掃描器之一,其創新點在于其通過定義 QL 語法編寫掃描器規則,將掃描邏輯和規則邏輯分離,使安全工程師能夠較快地編寫規則;Infer 為 Facebook 所使用的安全掃描器之一,也是少數使用形式化分析技術實現的掃描器,其使用分離邏輯和雙向假說推理的思想,解決了傳統形式化分析求解規模過大的問題,但其檢測能力目前只限于資源泄露,空指針漏洞,不能用于其他類型(如常見的 OWASP TOP 10)的漏洞檢測。

  1.2.2 基于機器學習的靜態安全掃描研究現狀

  為解決傳統掃描器高誤報、需要花大量人力定義規則等問題,隨著機器學習領域的不斷發展,學術界也一直在探索機器學習在靜態安全掃描上的應用。

  研究初期,研究者們提出了一些半智能化的掃描方案 [3, 19, 20],這些方案主要由人工定義代碼特征(如:語句長度,關鍵 API 調用位置等),并使用傳統的機器學習算法進行分類。這一類工作的人工標記思路與本系統類似,然而由于其仍需要手工設計特征、泛化能力較弱等原因,并沒有得到大面積推廣。

  隨著研究工作不斷深入,部分研究者提出通過相似度識別漏洞 [4, 21],它的主要思想是如果一個待測代碼片段 A 與已有代碼片段 B 在某漏洞特征上具有高相似度,并且已知代碼 B 為漏洞代碼,那么代碼 A 就很可能也為漏洞代碼。在特征工程上,研究者們分別將代碼特征抽象為詞向量 [21]、樹和圖 [22],以此比較相似性。李珍等學者提出 VulPecker [4] 從六個維度定義多個代碼特征并且設計多種相似度算法,他們認為不同類型漏洞適用于不同特征和相似算法,并且一個優秀的相似度算法可以將含漏洞和安全代碼進行區分,因此設計相似度算法選擇器,通過已有漏洞代碼庫(NVD)和補丁信息訓練相似度算法選擇器,得到 < 漏洞類型, 算法 > 對應關系,當有新的被測代碼輸入時,通過各類漏洞的相似度算法識別代碼是否有這些漏洞。這類工作的優勢在于不需要大量標記數據集即可進行掃描,但是大多數工作仍需要手工設計特征,并且代碼識別精度較低,因此并沒有得到大規模使用。

  還有部分研究者使用深度學習直接提取代碼特征,將識別漏洞代碼問題轉化為分類問題 [1, 9, 14].李珍等學者提出的 VulDeePecker [1] 是這一方向的代表工作之一,該工具首先抽取與安全 API 相關的程序代碼(文中稱其為 gadgets,它們類似于對調用安全 API 位置的后向切片),再將其代碼轉化為向量,結合標記后使用 BLSTM 學習,當輸入待測代碼后,將其做相同的向量化操作,再由BLSTM 預測其是否為漏洞,經過試驗,該工具在數據集上具有較高準確率,并且在 3 款實際軟件中發現了 4 個未知漏洞,但是該工具只能預測 C/C++ 程序的漏洞,并且在切片時沒有考慮控制流信息;Koc 等人提出使用機器學習降低污點傳播誤報率的方法 [14],他們在文中總結了污點傳播的誤報模式,并且提出使用對方法體進行程序切片和 LSTM 預測降低誤報率的想法,經過試驗,他們認為該方法能夠有效降低誤報;在 2019 年,Koc 等人對先前工作展開進一步實證研究 [9],對比手工設計特征、詞袋結合隨機森林、程序切片結合 BLSTM 和程序切片結合圖神經網絡(GNN)的預測效果,實驗證明,BLSTM 組預測效果普遍優于其他組,并且,在切片后對切片進行泛化處理可以大大提高預測效果。Koc等人工作是本系統的主要參考,對于函數體,本系統也是用類似的切片技術和預測技術,然而,他們工作中提到程序切片只適用于小規模程序的問題,因此他們工具只能對于漏洞的最后一個函數體(污點傳播匯聚點)進行切片,由于污點是否能夠傳播并不等價于污點是否能夠在匯聚點傳播,因此無法用于實際使用,本系統創新性的提了分解污點傳播過程和限制調用圖切片方法,解除這一限制,即本系統可以對污染傳播全流程進行切片和預測,保證預測結果準確性。

  1.3 本文主要研究工作

  為解決傳統掃描工具檢測誤報率高的問題,本系統實現一款基于污點分析、程序切片和 BLSTM 的靜態代碼掃描系統。該系統面向 Java 語言,以開發者編譯后得到的 Jar 包為輸入,提供準確的漏洞掃描報告,從而減輕安全工程師工作量,加快軟件開發效率。本文主要研究工作如下。

  本文首先分析目前常用程序安全分析技術的原理和優缺點,選擇靜態污點分析作為系統的基礎分析方法,然后根據學術界前沿研究成果,選擇基于 Joana的后向程序切片和 BLSTM 作為誤報預測方法,最后分析用戶需求設計系統架構,將系統分為污點分析模塊,程序切片模塊,數據預處理模塊和誤報預測模塊,以 C/S 架構向用戶提供服務。

  在污點分析模塊,本系統以 Find Security Bugs 工具6的污點分析為基礎,改進其分析流程,對用戶提交的 Jar 包集合進行污點分析,輸出污點分析報告,與原始 Find Security Bugs 不同,本系統在報告中不僅報告代碼中潛在漏洞項、代碼位置之外,還額外向用戶展示可能被利用的污點傳播路徑,路徑由污點傳播樹表示,一方面讓用戶更清晰地了解漏洞發生原理,快速判斷誤報,另一方面為程序切片提供依據。

  在程序切片模塊,系統基于 Joana 實現了一套適用于實際應用程序的切片器,完成無依賴切片、限制調用圖規模切片和異構 Jar 包的切片。具體來說,對于上一模塊報告中的污點傳播樹,系統對其相關函數拆分,得到污染流,對污染流進行限制規模切片,進一步縮小切片規模,為系統穩定運行和準確預測提供保障。

  定義 1.1 (污點傳播樹)。 污點傳播樹是反映污點傳播的樹形數據結構,樹中根節點為調用入口函數的調用者函數,樹中其他節點為函數調用信息或返回語句信息,由于同一層節點存在順序,由孩子兄弟表示法表示。

  定義 1.2 (污點傳播流)。 污點傳播流用于指導切片的一種數據結構,實際為函數摘要至關鍵點行號的二元組。

  在預處理模塊,系統參考 Koc 等學者工作 [9] 和實際應用的切片內容,提出一套適用于實際應用代碼的泛化和向量化方案,保證預測模型快速收斂和用戶對準確性的要求。

  在誤報預測模塊,系統基于 Pytorch 實現經典的 BLSTM 神經網絡三層架構,通過該模型預測污染流是否能夠傳播污點,若一棵傳播樹中存在一處傳播流無法傳播污點,那么該傳播樹表示的傳播路徑被標記為不可利用,當一個漏洞實例的所有傳播樹不可利用時,系統推導得到該漏洞實例為誤報,經過試驗,該模型可以準確預測誤報。同時系統基于 Django、Celery 和 MySQL 等技術實現后臺服務,用戶可以根據需要定制模型各項參數并定時觸發模型訓練流程。

  綜上,本系統將學術界前沿技術成功運用到實際生產中,首次提出對污點分析結果拆分,將漏洞預測任務轉化為污點傳播樹中子污染流是否安全的預測任務;改進后向切片器,通過限制調用圖的方式保證切片過程在絕大多數污染流上能夠順利進行,從而保證系統在各類規模程序上都能提供準確的漏洞掃描報告。

  1.4 本文組織結構

  本文共分為五個章節,組織結構如下:

  第一章,引言部分,介紹本系統背景和意義,分析當前關于靜態安全掃描的研究現狀以及介紹本文主要研究工作。

  第二章,介紹相關技術,介紹目前較常見的漏洞挖掘技術,對比相關技術優缺點,說明本系統的技術方案,并對系統中使用的核心技術如污點分析,程序切片和 BLSTM 算法進行介紹。

  第三章,Java 靜態安全掃描系統的需求分析和設計,首先介紹系統整體概述,分析系統功能性和非功能性的需求,接著說明系統總體設計,再分模塊從類圖和流程兩方面分別說明模塊設計。

  第四章,Java 靜態安全掃描系統實現和測試,對于各個模塊的實現細節結合漏洞實例代碼進行詳細說明,接著介紹系統的功能測試、健壯性和性能測試,對系統預測效果進行評估,最后展現系統運行效果。

  第五章,總結和展望,對本系統和論文的工作進行總結,并提出本系統的不足和未來工作方向。

  第二章 相關技術綜述

  2.1 漏洞挖掘技術

  2.1.1 基于代碼分析的漏洞挖掘技術

  2.1.1.1 詞法分析技術

  2.1.1.2 數據流和控制流分析技術

  2.1.1.3 形式化方法分析技術

  2.1.1.4 符號執行技術

  2.1.2 基于模糊測試的漏洞挖掘技術

  2.2 污點分析

  2.2.1 污點分析原理

  2.2.1.1 污點分析三要素

  2.2.1.2 污點分析過程

  2.2.2 污點分析的優勢和不足

  2.2.3 Java 污點分析工具選型

  2.3 程序切片技術

  2.3.1 程序切片定義

  2.3.2 程序切片技術

  2.3.3 后向程序切片的優勢與不足

  2.4 BLSTM 算法

  2.4.1 LSTM 原理介紹

  2.4.2 雙向讀取--BLSTM

  2.4.3 BLSTM 的優勢

  2.5 Django 框架

  2.5.1 Django 框架簡介

  2.5.2 Django 框架優勢

  2.6 本章小結

  第三章 Java 靜態安全掃描系統需求分析與設計

  3.1 系統整體概述

  3.2 系統需求分析

  3.2.1 功能性需求

  3.2.2 非功能性需求

  3.2.3 系統用例描述

  3.3 系統總體設計

  3.4 污點分析模塊設計

  3.4.1 流程設計

  3.4.2 污點傳播圖類圖設計

  3.4.3 污點傳播樹和漏洞報告類圖設計

  3.4.4 污點分析器類圖設計

  3.5 程序切片模塊設計

  3.5.1 流程設計

  3.5.2 類圖設計

  3.6 數據預處理模塊設計

  3.6.1 流程設計

  3.6.2 類圖設計

  3.7 誤報預測模塊設計

  3.7.1 架構設計

  3.7.2 類圖設計

  3.7.3 流程設計

  3.8 數據庫設計

  3.9 本章小結

  第四章 Java 靜態安全掃描系統實現和測試

  4.1 一個 XSS 漏洞實例

  4.2 污點分析模塊的實現

  4.2.1 記錄污點傳播信息實現

  4.2.2 構造污點傳播圖實現

  4.2.3 構造污點傳播樹并生成注解的實現

  4.3 程序切片模塊的實現

  4.3.1 切片控制模塊實現

  4.3.1.1 切片控制代碼

  4.3.1.2 過濾漏洞實例

  4.3.1.3 分解污點傳播樹

  4.3.2 后向切片的實現

  4.3.2.1 基于 Joana 的后向切片

  4.3.2.2 SDG 的生成配置類

  4.4 數據處理模塊的實現

  4.4.1 泛化處理

  4.4.2 建立單詞表與向量化

  4.5 誤報預測模塊的實現

  4.5.1 誤報預測控制

  4.5.2 誤報預測時序圖

  4.5.3 漏洞標記時序圖

  4.5.4 批訓練過程

  4.6 系統測試與運行展示

  4.6.1 測試目標

  4.6.2 功能測試

  4.6.3 健壯性和性能測試

  4.6.4 系統效果評估

  4.6.4.1 參數設置

  4.6.4.2 評估方法和度量

  4.6.4.3 評估數據集

  4.6.4.4 實驗結果

  4.6.5 系統運行展示

  4.7 本章小結

第五章 總結與展望

  5.1 總結

  為了解決應用安全問題,本文設計了一套基于污點分析、程序切片和 BLSTM的靜態安全掃描系統,旨在從源頭處遏制程序漏洞。相較于傳統的污點分析類代碼掃描系統,本系統對污點傳播樹進一步分析,通過程序切片和先前標記進行學習,能夠有效地排除誤報,保證掃描結果準確性,大大降低了系統使用時的人力成本。本文主要工作如下:

  1. 本文對開源污點傳播工具 Find Security Bugs 進行改造,使之能在報告中展示污點傳播樹,友好地向用戶展示可能的漏洞利用過程。

  2. 系統對污點傳播樹進行拆分,將污點傳播流和子傳播流作為切片單位進行程序切片,系統優化了 Joana 切片過程,使之能夠在缺失依賴、異構 Jar 包的情況下切片,并通過限制調用圖限制程序切片范圍,結合污點傳播樹的拆分,解決了目前切片資源消耗大導致掃描任務無法及時結束的問題。

  3. 系統根據實際情況對切片后的 SSA 進行泛化處理,進一步保證預測模型的泛化能力。

  4. 系統通過對漏洞的各個污點傳播樹的傳播流及其子污染流進行預測,從而預測漏洞是否為誤報。系統采用 BLSTM 模型,該模型在學術界已被多項工作證明在漏洞預測領域有較為顯著的效果。用戶在系統界面中能夠得知漏洞預測結果,若為誤報,系統能夠清晰給出判斷依據,即污點在哪一段傳播流中無法繼續傳播,一定程度上彌補了深度學習可解釋性差的問題。

  安全工程師能夠輕松地對漏洞、傳播樹和傳播流進行標記,并發起新的學習任務,不斷提高預測模型的準確率。

  系統被設計為有良好的可拓展性,對于污點分析結果翻譯、切片器和預測器,系統都對其高度抽象為接口,方便后期根據實際需要對系統中各個模塊所用技術進行更換。

  經過測試和實驗,結果表明本系統具有較高的健壯性,在 Maven 倉庫中前100 流行度的項目中系統掃描成功率為 100 %,此外,本系統具有較高準確性,在 OWASP 數據集中,本系統預測模塊能夠準確預測安全污點傳播流,相較于Find Security Bugs,本系統在 OWASP 數據集上提高了約 20 % 的準確率,減少了 25.44 % 的誤報。

  5.2 展望

  本系統是將深度學習應用于漏洞掃描領域的一次成功探索,實現了傳統檢測技術與深度學習相結合,對 Java 代碼進行更準確的安全掃描任務,然而在未來,系統在以下方面還有較大的改進空間:

  1. 系統目前只針對 Java 語言,在未來可以將其方法推廣到其他語言的項目。

  2. 系統只能適用于能用污點分析方法分析的漏洞類型,在未來可以將切片和預測方法推廣到其他基礎分析的誤報排除中。

  3. 系統并不能發現更多漏報,在未來可以使用類似的切片技術和預測方法,結合其他經典漏洞挖掘技術,在消除漏報方面做進一步提升。

  4. 系統在特征表示時,目前實際上是將切片轉化為單詞序列,再將單詞序列進行向量化處理,在未來可以參考程序圖特征表示的前沿工作,將切片表示成信息更豐富的特征,進一步提高預測準確性。

  5. 目前由于數據量有限,對于所有污點漏洞均使用一個模型進行預測,待數據量進一步擴大時,可以將針對每一種漏洞單獨訓練模型。

  參考文獻

  [1] Z. Li, D. Zou, S. Xu, X. Ou, H. Jin, S. Wang, Z. Deng, Y. Zhong, VulDeePecker:A Deep Learning?Based System for Vulnerability Detection, in: Proceedings ofthe 2018 Network and Distributed System Security Symposium, Internet Society,Reston, VA, 2018.

  [2] 劉劍, 蘇璞睿, 楊珉, 和亮, 張源, 朱雪陽, 林惠民, 軟件與網絡安全研究綜述,軟件學報 29 (1) (2018) 42-68.

  [3] O. Tripp, S. Guarnieri, M. Pistoia, A. Aravkin, ALETHEIA:Improving the Usability of Static Security Analysis, in: Proceedings of the 2014 ACM SIGSACConference on Computer and Communications Security, ACM Press, New York,New York, USA, 2014, pp. 762-774.

  [4] Z. Li, D. Zou, S. Xu, H. Jin, H. Qi, J. Hu, VulPecker: An automated vulnerabilitydetection system based on code similarity analysis, in: Proceedings of the 32ndAnnual Conference on Computer Security Applications, 2016, pp. 201-213.

  [5] X. Du, B. Chen, Y. Li, J. Guo, Y. Zhou, Y. Liu, Y. Jiang, LEOPARD: Identifying Vulnerable Code for Vulnerability Assessment Through Program Metrics, in:Proceedings of the 2019 IEEE/ACM 41st International Conference on SoftwareEngineering, IEEE, 2019, pp. 60-71.

  [6] C. Cadar, V. Ganesh, P. M. Pawlowski, D. L. Dill, D. R. Engler, EXE: Automatically Generating Inputs of Death, ACM Transactions on Information and SystemSecurity 12 (2) (2008) 1-38.

  [7] D. Hovemeyer, W. Pugh, Finding bugs is easy, Companion to the 19th annual ACM SIGPLAN conference on Object?oriented programming systems, languages, and applications 39 (12) (2004) 92-106.

  [8] O. Tripp, M. Pistoia, S. J. Fink, M. Sridharan, O. Weisman, TAJ: effective taintanalysis of web applications, Proceedings of the 2009 ACM SIGPLAN conferenceon Programming language design and implementation 44 (6) (2009) 87-97.

  [9] U. Koc, S. Wei, J. S. Foster, M. Carpuat, A. A. Porter, An Empirical Assessmentof Machine Learning Approaches for Triaging Reports of a Java Static AnalysisTool, Proceedings of the 12th IEEE Conference on Software Testing, Validationand Verification (2019) 288-299.

  [10] K. Sen, D. Marinov, G. Agha, CUTE: a concolic unit testing engine for C, Proceedings of the 10th European software engineering conference held jointly with13th ACM SIGSOFT international symposium on Foundations of software engineering 30 (5) (2005) 263.

  [11] Y. Xie, A. Aiken, Saturn: A scalable framework for error detection using Booleansatisfiability, ACM Transactions on Programming Languages and Systems 29 (3)(2007) 16.

  [12] C. Cadar, D. Dunbar, D. Engler, Klee: Unassisted and automatic generation ofhigh?coverage tests for complex systems programs, in: Proceedings of the 8thUSENIX Symposium on Operating Systems Design and Implementation, OSDI2008, Vol. 8, 2019, pp. 209-224.

  [13] C. Flanagan, K. R. M. Leino, M. Lillibridge, G. Nelson, J. B. Saxe, R. Stata, Extended static checking for Java, in: Proceedings of the 2002 ACM SIGPLAN Conference on Programming Language Design and Implementation, Vol. 48, ACMPress, New York, New York, USA, 2002, pp. 234-245.

  [14] U. Koc, P. Saadatpanah, J. S. Foster, A. A. Porter, Learning a classifier for falsepositive error reports emitted by static code analysis tools, Proceedings of the 1stACM SIGPLAN International Workshop on Machine Learning and ProgrammingLanguages, co?located with PLDI 2017 (2017) 35-42.

  [15] N. Jovanovic, C. Kruegel, E. Kirda, Pixy: a static analysis tool for detecting Webapplication vulnerabilities, in: Proceedings of the 2006 IEEE Symposium on Security and Privacy, IEEE, 2006, pp. 258-263.

  [16] Y. Kim, J. Lee, H. Han, K.?M. Choe, Filtering false alarms of buffer overflowanalysis using SMT solvers, Information and Software Technology 52 (2) (2010)210-219.

  [17] B. Johnson, Y. Song, E. Murphy?Hill, R. Bowdidge, Why don't software developers use static analysis tools to find bugs?, in: Proceedings of the 35th InternationalConference on Software Engineering, IEEE, 2013, pp. 672-681.

  [18] F. Yamaguchi, A. Maier, H. Gascon, K. Rieck, Automatic Inference of SearchPatterns for Taint?Style Vulnerabilities, in: Proceedings of the 2015 IEEE Symposium on Security and Privacy, IEEE, 2015, pp. 797-812.

  [19] T. Kremenek, D. Engler, Z?Ranking: Using Statistical Analysis to Counter the Impact of Static Analysis Approximations, in: Proceedings of the 10th InternationalConference on Static Analysis, San Diego, CA, USA, 2003, pp. 295-315.

  [20] U. Yuksel, H. Sozer, Automated Classification of Static Code Analysis Alerts:A Case Study, in: Proceedings of the 2013 IEEE International Conference onSoftware Maintenance, IEEE, 2013, pp. 532-535.

  [21] S. Kim, S. Woo, H. Lee, H. Oh, VUDDY: A Scalable Approach for VulnerableCode Clone Discovery, in: Proceedings of the 2017 IEEE Symposium on Securityand Privacy, IEEE, 2017, pp. 595-614.

  [22] N. H. Pham, T. T. Nguyen, H. A. Nguyen, T. N. Nguyen, Detection of recurringsoftware vulnerabilities, in: Proceedings of the 2010 IEEE/ACM internationalconference on Automated software engineering, ACM Press, New York, NewYork, USA, 2010, pp. 447-456.

  [23] 梅宏, 王千祥, 張路, 王戟, 軟件分析技術進展, 計算機學報 32 (9) (2009) 1697-1710.

  [24] G. A. Kildall, A unified approach to global program optimization, in: Proceedingsof the 1st annual ACM SIGACT?SIGPLAN symposium on Principles of programming languages, ACM Press, New York, New York, USA, 1973, pp. 194-206.

  [25] B. Shastry, F. Yamaguchi, K. Rieck, J.?P. Seifert, Towards Vulnerability DiscoveryUsing Staged Program Analysis, in: Detection of Intrusions and Malware, andVulnerability Assessment, Springer, Cham, 2016, pp. 78-97.

  [26] J. M. Schumann, Automated Theorem Proving in Software Engineering, SpringerBerlin Heidelberg, Berlin, Heidelberg, 2001.

  [27] C. Calcagno, D. Distefano, P. O'Hearn, H. Yang, Compositional shape analysisby means of bi?abduction, in: Proceedings of the 36th annual ACM SIGPLANSIGACT symposium on Principles of programming languages, Vol. 58, ACMPress, Savannah, GA, USA, 2009, pp. 289-300.

  [28] C. Cadar, K. Sen, Symbolic Execution for Software Testing: Three Decades Later,Communications of the ACM 56 (2) (2013) 82-90.

  [29] P. Godefroid, N. Klarlund, K. Sen, DART: directed automated random testing, in:Proceedings of the 2005 ACM SIGPLAN conference on Programming languagedesign and implementation, Vol. 40, ACM Press, New York, New York, USA,2005, pp. 213-223.

  [30] H. Liang, X. Pei, X. Jia, W. Shen, J. Zhang, Fuzzing: State of the Art, IEEETransactions on Reliability 67 (3) (2018) 1199-1218.

  [31] V. J. M. Manes, H. S. Han, C. Han, sang kil Cha, M. Egele, E. J. Schwartz, M. Woo,The Art, Science, and Engineering of Fuzzing: A Survey, IEEE Transactions onSoftware Engineering (2019) 1-1.

  [32] 鄒權臣, 張濤, 吳潤浦, 馬金鑫, 李美聰, 陳晨, 侯長玉, 從自動化到智能化: 軟件漏洞挖掘技術進展, 清華大學學報 (自然科學版) 58 (12) (2018) 1079-1094.

  [33] N. Stephens, J. Grosen, C. Salls, A. Dutcher, R. Wang, J. Corbetta, Y. Shoshitaishvili, C. Kruegel, G. Vigna, Driller: Augmenting Fuzzing Through SelectiveSymbolic Execution, in: Proceedings of the 2016 Network and Distributed System Security Symposium, Internet Society, Reston, VA, 2016.

  [34] S. Rawat, V. Jain, A. Kumar, L. Cojocar, C. Giuffrida, H. Bos, VUzzer:Application?aware Evolutionary Fuzzing, in: Proceedings of the 2017 Networkand Distributed System Security Symposium, Internet Society, Reston, VA, 2017.

  [35] H. Han, D. Oh, S. K. Cha, CodeAlchemist: Semantics?Aware Code Generation toFind Vulnerabilities in JavaScript Engines, in: Proceedings of the 2019 Networkand Distributed System Security Symposium, No. February, Internet Society, Reston, VA, 2019.

  [36] 王蕾, 李豐, 李煉, 馮曉兵, 污點分析技術的原理和實踐應用, 軟件學報 28 (4)(2017) 860-882.

  [37] M. Weiser, Program Slicing, IEEE Transactions on Software Engineering SE?10 (4) (1984) 352-357.

  [38] B. Xu, J. Qian, X. Zhang, Z. Wu, L. Chen, A brief survey of program slicing,ACM SIGSOFT Software Engineering Notes 30 (2) (2005) 1-36.

  [39] K. J. Ottenstein, L. M. Ottenstein, The program dependence graph in a software development environment, Proceedings of the first ACM SIGSOFT/SIGPLAN software engineering symposium on Practical software development environments 19 (5) (1984) 177-184.

  [40] S. Horwitz, T. Reps, D. Binkley, Interprocedural slicing using dependence graphs,ACM Transactions on Programming Languages and Systems (TOPLAS) 12 (1)(1990) 26-60.

  [41] J. Su, Z. Tan, D. Xiong, R. Ji, X. Shi, Y. Liu, Lattice?Based Recurrent NeuralNetwork Encoders for Neural Machine Translation, in: Proceedings of the 31stAAAI Conference on Artificial Intelligence, AAAI'17, AAAI Press, 2017, pp.3302-3308.

  [42] B. Hanin, Which Neural Net Architectures Give Rise to Exploding and VanishingGradients?, in: Proceedings of the 32nd International Conference on Neural Information Processing Systems, NIPS'18, Curran Associates Inc., Red Hook, NY,USA, 2018, pp. 580-589.

  [43] S. Hochreiter, J. Schmidhuber, Long Short?Term Memory, Neural Computation9 (8) (1997) 1735-1780.

  [44] A. Hindle, E. T. Barr, Z. Su, M. Gabel, P. Devanbu, On the naturalness of software,in: Proceedings of the 34th International Conference on Software Engineering,IEEE, 2012, pp. 837-847.

  [45] E. C. R. Shin, D. Song, R. Moazzezi, Recognizing Functions in Binaries withNeural Networks, in: Proceedings of the 24th USENIX Conference on SecuritySymposium, SEC'15, USENIX Association, USA, 2015, pp. 611-626.

  [46] M. White, C. Vendome, M. Linares?Vasquez, D. Poshyvanyk, Toward DeepLearning Software Repositories, in: Proceedings of the 12th Working Conferenceon Mining Software Repositories, IEEE, 2015, pp. 334-345.

  [47] P. Kruchten, The 4+1 View Model of architecture, IEEE Software 12 (6) (1995)42-50.

  [48] Y. You, Z. Zhang, C.?J. Hsieh, J. Demmel, K. Keutzer, ImageNet Training in Minutes, in: Proceedings of the 47th International Conference on Parallel Processing,ACM Press, New York, New York, USA, 2018, pp. 1-10.

  [49] E. Hoffer, I. Hubara, D. Soudry, Train Longer, Generalize Better: Closing theGeneralization Gap in Large Batch Training of Neural Networks, in: Proceedingsof the 31st International Conference on Neural Information Processing Systems,Curran Associates Inc., Red Hook, NY, USA, 2017, pp. 1729-1739.

  [50] Y. You, J. Hseu, C. Ying, J. Demmel, K. Keutzer, C.?J. Hsieh, Large?batch trainingfor LSTM and beyond, in: Proceedings of the 2019 International Conference forHigh Performance Computing, Networking, Storage and Analysis, ACM, NewYork, NY, USA, 2019, pp. 1-16.

致 謝

  首先感謝陳振宇老師,感謝您兩年以來對我的諄諄指導,不僅在學術上給我創造了很多機會,更重要的是教會我如何做人,讓我如今能以一個研究生的身份走入社會。即使是在疫情嚴重時期,您也不斷地犧牲個人時間通過線上會議和微信了解我們的畢設進展,提出寶貴意見,保證了本文的專業性和技術深度。

  感謝房春榮老師,在本項目的設計、實驗安排等方面提出的寶貴建議和意見。同時感謝實驗室黃勇老師在技術上的幫助和指導,是您的嚴格要求保證了本系統的健壯性。

  感謝張雙江、李灝宇等師兄為本文的行文安排和格式上提供的幫助。感謝同為安全組的蔣燕和史洋洋同學,讓我在科研的道路上不再孤單,感謝你們在平時研究和畢業設計過程中對我的幫助,在進展不順利的時候給我安慰并與我一起出謀劃策。

  感謝 Koc 教授,是你們團隊在學術上的工作為本文提供了理論支持,感謝WALA 開發者 Manu,Joana 開發者 Simon,感謝你們的建議和意見讓本文無依賴切片成為現實。

  感謝暑期實習時與我一起工作的同事們,是你們讓我了解到了真實安全運營時面臨的問題,啟發了本文的工作。

  感謝父母,謝謝你們在我完成畢設期間對我的理解和支持,給我了一個舒適的工作環境,保證了畢設的順利完成。

(如您需要查看本篇畢業設計全文,請您聯系客服索。

相關內容
相關標簽:Java畢業設計
好優論文定制中心主要為您提供代做畢業設計及各專業畢業論文寫作輔導服務。 網站地圖
所有論文、資料均源于網上的共享資源以及一些期刊雜志,所有論文僅免費供網友間相互學習交流之用,請特別注意勿做其他非法用途。
如有侵犯您的版權或其他有損您利益的行為,請聯系指出,論文定制中心會立即進行改正或刪除有關內容!
欧美国产伦久久久久久久
<acronym id="cqmsy"></acronym>
<acronym id="cqmsy"><center id="cqmsy"></center></acronym>