摘 要
軟件系統規模以及復雜性的不斷增大,軟件安全問題層出不窮,其產生的原因往往是程序本身在代碼設計或實現過程中的錯誤或缺陷(稱為漏洞),普通軟件工程師的缺陷密度一般為 50-250 個缺陷/KLOC.在源碼級別對程序進行漏洞掃描和安全審計,可以在源頭上減少 10%-50% 安全漏洞的產生。但現存基于詞法分析的靜態漏洞掃描工具未充分考慮上下文,無法準確判別誤報漏洞代碼的固有特征,存在大量誤報信息,開發人員需要手動篩選正報漏洞,不僅增大維護成本,甚至導致部分開發人員棄用掃描工具。
為了降低目前漏洞掃描工具誤報率,本文依托于公司的眾包審核平臺,設計并實現了一個人機協同 Java 字節碼漏洞掃描系統。本文對靜態漏洞掃描工具以及常見誤報漏洞進行了分析,詳細研究了字節碼上下文提取、代碼特征提取以及機器學習分類模型,同時融合眾包專家審核,并結合實際場景中的漏洞掃描需求,實現該系統。首先,系統基于靜態漏洞掃描工具對項目進行漏洞掃描,并確保其完備性。其次,基于 Joana(Java Object-sensitive ANAlysis)程序切片工具對漏洞相關代碼進行上下文提取,并基于 N-gram 語言模型對代碼上下文進行特征提取。然后,利用基于完全匹配、隨機森林算法的雙層分類模型對掃描漏洞結果進行誤報過濾。最后,將漏洞結果送予眾包審核進行專家誤報漏洞過濾,并將審核結果存儲留作后續過濾模型的迭代訓練。并根據最終漏洞結果為用戶提供機器過濾以及專家審核融合的完備、低誤報漏洞掃描報告。本系統主要分為交互展示模塊、漏掃核心模塊以及迭代學習模塊,并使用 SpringBoot 框架、Pug模板引擎、微服務等技術與架構完成系統的實現。
本文實現的人機協同 Java 字節碼漏洞掃描系統提供低誤報漏洞掃描服務。
在 OWASP 數據集上實驗表明,本系統在 95.39% 召回率的情況下,其精準率可以達到 89.71%,與原版掃描工具相比,本系統將誤報率減少近 22%.本系統在確保低漏報率的基礎上有效地降低傳統靜態漏洞掃描工具的誤報率,從而節約維護成本,幫助開發者提高代碼整體質量。目前,本系統已在公司平臺上線,用于支撐公司靜態漏洞掃描服務。
關鍵詞:漏洞掃描,誤報過濾,眾包審核,人機協同
Abstract
With the increasing scale and complexity of software systems, software security problems emerge one after another. The causes are often errors or defects (called vulnerabilities) in the code design or implementation process of the program itself. The defect density of ordinary software engineers is generally 50-250 defects / KLOC. Vulnerability scanning and security audit are carried out at the source code level, It can reduce the generation of security vulnerabilities by 10% - 50% at the source. However, the existing static vulnerability scanning tools based on lexical analysis do not fully consider the context and can not accurately distinguish the inherent characteristics of false positive vulnerability codes. There is a large amount of false positive information. Developers need to manually screen positive vulnerabilities, which not only increases the maintenance cost, but also leads some developers to abandon the scanning tools.
In order to reduce the false positive rate of current vulnerability scanning tools, this paper designs and implements a man-machine cooperative Java bytecode vulnerability scanning system based on the company's crowdsourcing audit platform. This paper analyzes the static vulnerability scanning tool and common false positive vulnerabilities, studies the bytecode context extraction, code feature extraction and machine learning classification model in detail, integrates the audit of crowdsourcing experts, and realizes the system in combination with the vulnerability scanning requirements in the actual scene. Firstly, the system scans the vulnerability of the project based on the static vulnerability scanning tool and ensures its completeness. Secondly, the context of vulnerability related code is extracted based on Joana (Java object sensitive analysis) program slicing tool, and the feature of code context is extracted based on n-gram language model. Then, the double-layer classification model based on perfect matching and random forest algorithm is used to filter the false positives of the scanning vulnerability results. Finally, the vulnerability results are sent to the crowdsourcing audit for expert false alarm vulnerability filtering, and the audit results are stored for the iterative training of the subsequent filtering model. According to the final vulnerability results, it provides users with a complete and low false positive vulnerability scanning report of machine filtering and expert audit fusion. The system is mainly pided into interactive display module, missed scan core module and iterative learning module, and the implementation of the system is completed by using technologies and architectures such as springboot framework, Pug template engine and microservice.
The man-machine cooperative Java bytecode vulnerability scanning system implemented in this paper provides low false alarm vulnerability scanning service.
Experiments on OWASP data set show that the accuracy of the system can reach 89.71% with a recall rate of 95.39%. Compared with the original scanning tool, the system reduces the false alarm rate by nearly 22%. On the basis of ensuring a low false alarm rate, the system effectively reduces the false alarm rate of the traditional static vulnerability scanning tool, so as to save the maintenance cost and help developers improve the overall quality of the code. At present, the system has been launched on the company's platform to support the company's static vulnerability scanning service.
Keywords: vulnerability scanning, false positive filtering, crowdsourcing audit, man-machine collaboration
目錄
第一章 引言
1.1 研究背景與意義
隨著計算機技術的廣泛使用,軟件系統的復雜性和規模也在不斷增大,在給生活帶來極大便利的同時,也暴露出更多的安全問題 [1].近年來,軟件安全問題層出不窮,其產生的主要原因往往是程序本身在代碼設計或實現過程中存在錯誤或缺陷(稱為漏洞),惡意攻擊者通常會利用這些安全漏洞攻擊軟件系統,從而導致各類信息被竊、重要數據丟失、服務器性能下降,嚴重威脅被攻擊軟件系統和用戶的利益安全。360 互聯網安全中心 [2] 指出,軟件開發過程中通常會引入大量缺陷,普通軟件工程師的缺陷密度一般為 50-250 個缺陷/KLOC1.同時《2019 中大型政企機構網絡安全建設發展趨勢研究報告》 [3] 中指出源碼安全審計可以在系統開發階段發現潛在安全漏洞,可節約 5%-20% 后期安全維護費用,并且可減少 10%-50% 系統安全漏洞。因此在源碼級別對程序進行漏洞掃描和安全審計,可以在源頭上減少安全漏洞的產生,從而節約維護費用,有效減少惡意攻擊事件的發生,保證軟件安全性。
程序分析技術的迅速發展也推進了代碼漏洞掃描技術的進展,尤其是代碼漏洞靜態掃描技術。但是代碼漏洞靜態檢測方法在不執行程序的情況下進行漏洞掃描,難以在有限時間內判定抽象路徑的可達性 [4].為了不漏掉真實漏洞,即保證低漏報,大多靜態掃描工具使用基于模式匹配、數據流分析等技術,并采用過度近似策略,這些工具通常不能充分了解程序上下文,會受到無關信息的干擾 [5].以上原因導致現有漏洞掃描工具在盡可能檢測出漏洞的同時,會產生大量的誤報漏洞,即現有工具一般低漏報、高誤報。開發人員或安全工程師需要手動檢查以及修正這些漏洞,而大量誤報的存在增加了工程師篩選真正漏洞的成本,這也是導致部分開發者棄用漏洞掃描工具的原因之一 [6].因此,降低漏洞掃描工具的誤報率至關重要。
由于誤報漏洞的某些固有特征,如不可達漏洞代碼等,目前直接通過靜態漏洞掃描工具無法舍棄這種誤報,但在安全工程師或開發人員眼中卻一目了然。
如圖 1.1中的代碼片段,可能產生漏洞的位置為第 10 行,由于用戶可控的參數param 可能會賦值給 bar,但是第 6 行的條件判斷永遠為 true,因此第 9 行代碼永遠不會被執行,故該代碼不存在漏洞,但很多漏洞掃描工具會將其作為漏洞返回,此為誤報。
綜上所述,由于代碼的固有特征以及靜態掃描的本質缺陷,靜態漏洞掃描工具存在大量誤報結果,而純人工漏洞檢測需要手動檢測相關代碼,存在成本高、耗時長等缺點。因此設計一種人機協同的、有效降低漏洞掃描誤報率的服務是有意義且十分必要的。通過本系統,用戶提交漏洞掃描任務后,多種掃描工具將對項目進行漏洞掃描,以確保漏洞結果的完備性;通過基于特征提取與機器學習的誤報過濾模型失敗誤報漏洞,最后通過眾包專家審核人工核實是否正報,降低整體漏洞掃描的誤報率,進而減少開發人員或安全工程師審計代碼安全性的時間,節約項目開發與維護成本,幫助開發人員提高系統整體安全性。如何結合機器學習以及眾包審核等技術來實現上述系統即是本文研究與闡述的重點。
1.2 研究現狀
代碼漏洞掃描相關領域一直都是工業界與學術界的研究熱點,本節主要介紹漏洞掃描相關領域的國內外研究現狀。
1.2.1 漏洞掃描現狀
代碼漏洞掃描一般依賴于兩種程序分析技術:動態程序分析和靜態程序分析。其中,動態程序分析技術通過運行程序并觀察程序在運行過程中的相關行為來進行漏洞掃描 [7].基于動態程序分析技術的漏洞掃描可以準確發現程序在運行時可能會產生的漏洞,但其掃描成本較高,漏洞覆蓋率較低,無法有效掃描出漏洞。與之相反,靜態程序分析技術不需要執行程序,直接掃描代碼中可能存在的錯誤 [8].基于靜態程序分析技術的漏洞掃描通過分析程序代碼中不同的控制流程以及變量可能存在的不同值在程序運行前進行漏洞掃描,也正因如此,靜態掃描通常會產生大量的誤報信息。
常見靜態分析技術包括:詞法分析、語法分析、抽象語法樹分析、語義分析、控制流分析、數據流分析、污點分析 [9] 和無效代碼分析等。其中,詞法分析 [10] 基于模式匹配,對源碼字符流進行掃描,將之與預定義漏洞正則表達式匹配,從而判斷是否漏洞,這類分析技術實現較為簡單,但未考慮上下文,只能識別特定類型漏洞,會產生大量誤報。數據流與污點分析等主要借助數據流圖對代碼中的數據流向進行相關分析,這一類分析方法適合于數組越界、注入類等漏洞,但無法很好分析容器變量、控制流等信息,也會存在大量誤報。
市場上效果較好的主流 Java 靜態掃描工具主要有如下幾種:基于缺陷模式匹配的 PMD [11],它能檢測源代碼中如不必要對象創建、未使用字段等漏洞;基于缺陷模式匹配的 CheckStyle,它主要用來分析代碼編寫是否符合規定的編碼規則;基于缺陷模式匹配、數據流分析以及污點分析的 SpotBugs2和 Find-secbugs3插件,它們主要對 Java 字節碼進行相關漏洞掃描;商業工具 FortifySCA,它自定義統一的中間表示形式可以分析絕大多數主流編程語言編寫的代碼 [12].
其中,PMD 和 CheckStyle 主要關注代碼規范問題,SpotBugs 和 Find-sec-bugs 更注重分析安全問題,而 FortifySCA 是商業工具,價格較為昂貴。
以上工具主要存在誤報率高的問題 [13],增加了開發者或安全工程師手動篩選正報漏洞的成本,甚至導致開發人員棄用掃描工具。MITRE4組織發起 CWE(Common Weakness Enumeration)5項目對軟件系統的常見漏洞進行了分類整理,并為每種漏洞提供相關示例以及解決方案。這一標準可以為工程師提供統一標準參考,針對高誤報問題,學術界則提出了很多誤報過濾技術。
1.2.2 誤報過濾現狀
過高的誤報率會增加開發人員的開發維護成本,甚至導致開發人員棄用漏洞掃描工具。降低漏洞掃描工具誤報率的方法一般分為兩種:一是在掃描工具層面,改進工具本身的掃描機制,提高掃描工具的準確性;二是在掃描結果處理層面,對掃描工具產生的結果進行二次過濾。前者需要對工具本身使用的核心技術進行改進或替換,不利于后期迭代擴展,該方法的實現難度較大。后者在漏洞掃描工具的基礎上,通過構建誤報檢測模型對漏洞結果進行過濾,以區分誤報漏洞和正報漏洞,該方法基于代碼特征分析與機器學習中的分類模型,無需關注掃描工具底層原理,適用性較廣,故研究者較多。
Bharti 等人 [14] 通過結合程序切片、迭代上下文擴展(ICE)以及有界模型檢查的循環抽象(LABMC)來對程序中的大循環進行抽象,從而檢測出由于大循環造成的相關漏洞誤報,該方法局限于大循環里的誤報漏洞,對于其他位置的誤報并不能很好檢測出。Ibéria 等人 [15] 使用常見的分類模型如 ID3、KNN、樸素貝葉斯等對基于污點傳播掃描的漏洞進行誤報檢測,此分類模型效果較好,但只針對基于污點傳播掃描的漏洞,類型有所局限。JooWoo 等人 [16] 使用抽象語法樹表示代碼的結構性特征,并使用支持向量機模型(SVM)來進行分類模型的訓練,該方法忽略了代碼的語義信息。Koc 等人 [17] 提取誤報和正報代碼的字節碼指令集,并結合貝葉斯和長短時記憶模型在六種不同的漏洞類型上進行分類的訓練,精確度接近 80%,該方法實驗數據較少,無法保證真實環境下的效果,且實驗涉及漏洞較少,無法保證其他漏洞類型上的效果。Arzt 等人 [18]
提出一種基于符號執行方法來檢測安卓程序中的數據流誤報,通過檢測掃描出的漏洞代碼執行路徑,找出進入該執行路徑的相關條件,判斷這些條件是否能被滿足,從而消除邏輯上無法執行的路徑上產生的相關漏洞,該方法需要大量計算資源,在處理大規模程序時無法保證產生結果。
使用機器學習等技術的最大問題是能否在真實工程項目中獲得如實驗中足夠高的準確率。以上相關研究的實驗均是在相關機構公布的數據集或少數開源項目上進行,無法保證其在真實項目中的效果。因此,我們需要結合眾包審核技術來擴增大量真實的數據集,以此確保誤報過濾在真實項目中的效果。
1.2.3 眾包技術現狀
眾包技術可以在極大程度上解決誤報過濾模型前期訓練數據不足的問題。
眾包技術 [19] 是軟件測試領域的一個新興趨勢,眾包技術通過將任務直接發布至互聯網,并招募大量眾包工人參與完成任務,從而獲取大量真實的數據。其中定向眾包 [20] 是一種眾包工人分配方式,定向眾包通過眾包平臺將相關任務分配給指定的眾包工人,這些定向的眾包工人一般為某一領域的專家或某一組織的內部成員。因此,一般可以認為定向眾包工人能夠高效高質量地完成任務,即眾包審核后的結果是可靠的。
現有眾包技術一般用于眾包測試領域,即平臺發布測試任務,眾包工人完成任務并填寫相關測試報告,經被測產品方確認后給予眾包工人相應獎勵,如HackerOne、補天、漏洞盒子等現有企業級產品。本文結合漏洞掃描與眾包審核技術,將掃描后的漏洞分發給相關領域專家進行誤報漏洞審核,進一步降低系統整體的漏洞率;同時,眾包審核后產生的真實數據為誤報過濾模型的迭代訓練提供了數據支撐。
1.3 本文主要研究工作
針對當前代碼漏洞靜態掃描工具誤報率高,開發人員難以快速篩選正報結果從而導致掃描工具不可用或不易用的問題,本文深入研究現有代碼漏洞掃描工具的原理與優缺點,并結合眾包審核技術設計并構建了人機協同的低誤報 Java字節碼漏洞掃描系統。
本系統主要通過以下三個方面的設計來實現該目標:
首先系統關注于掃描工具的改造與集成。對比選取市場上主流漏洞掃描工具,并根據 CWE 標準為工具能掃描出的漏洞修改或補充相關描述信息。掃描工具在本身掃描機制實現中可能存在不合理的地方,從而直接導致部分誤報的產生,因此,本文深入研究工具的掃描機制以及相應漏洞列表,并結合部分誤報漏洞特征,在掃描工具層面手動屏蔽部分漏洞的掃描。此部分需對掃描工具本身進行相應改造與封裝,并按統一標準集成到系統中。
其次系統集中于如何訓練分類模型,實現對誤報漏洞的過濾。本文將采用代碼縮減技術與機器學習相結合的方法 [17] 實現誤報過濾模型的構建。漏洞相關代碼一般是少量的,本文基于掃描工具漏洞相關位置信息提取漏洞相關上下文,以消除無關代碼的干擾。然后,根據具體實驗效果,選取 N-gram 與隨機森林進行分類模型的訓練。
最后系統圍繞如何結合眾審進一步實現誤報過濾,同時促進誤報過濾模型的迭代訓練,實現人機協同的迭代漏洞掃描系統。根據機器掃描結果與眾審結果生成人機融合掃描報告,誤報更低可靠性更高。眾審結果不斷擴增真實數據集,促進誤報過濾模型的迭代訓練,使得系統整體誤報率更低。
綜合上述需求與設計,本系統使用 Spring Boot 框架開發,并使用 Docker 進行獨立部署,與其他服務松耦合。系統使用 HTTP 協議與其他服務進行數據傳輸,并向外提供 RESTful 接口,簡單標準易擴展。其中,封裝的掃描工具和過濾模型需按指定標準集成接入,方便工具和模型的快速迭代和統一管理。靜態報告采用 Pug 模板引擎進行編譯,可自動化渲染出圖文并茂的漏洞掃描報告。
1.4 本文組織結構
本文的組織結構如下:
第一章引言部分。本章首先介紹了項目背景以及本項目的研究意義,然后分析了國內外靜態漏洞掃描的研究現狀以及存在的不足,最后介紹了本文的主要研究工作和論文的組織結構。
的具體需求,選取適合本項目的相關技術方案及框架。主要包括掃描工具、程序切片技術、分類算法、微服務以及頁面渲染工具等。
第三章漏洞掃描系統的需求分析與設計。首先對系統進行了整體概述,然后結合用例圖、邏輯視圖等方式對系統進行了功能以及非功能性需求分析,最后介紹了交互展示模塊、漏掃核心模塊、迭代學習模塊三個模塊的概要設計。
第四章漏洞掃系統的具體實現。在第三章的基礎上,闡述了交互展示模塊、漏掃核心模塊以及迭代學習模塊的具體實現,并給出了相應的核心類圖、關鍵代碼以及界面截圖。
第五章漏洞掃描系統的測試與實驗評估。首先介紹了系統的測試環境,然后對整個系統進行了相關功能與性能測試,最后對本系統降低漏洞掃描誤報率效果進行了實驗驗證。
第六章總結與展望。對本文所做工作進行了總結,分析了研究工作中存在的不足,并對未來的進一步工作進行了展望。
第二章 相關技術綜述
2.1 常見漏洞類型
2.1.1 SQL 注入
2.1.2 路徑遍歷
2.1.3 弱加密
2.2 漏洞掃描相關工具
2.2.1 SpotBugs 工具
2.2.2 Find-sec-bugs 工具
2.2.3 程序切片技術
2.3 語言模型與分類算法
2.3.1 N-gram 模型
2.3.2 Random Forest 算法
2.4 系統核心技術棧
2.4.1 Docker 容器技術
2.4.2 微服務
2.4.3 Pug 模板引擎
2.5 本章小結
第三章 系統需求分析與概要設計
3.1 系統整體概述
3.2 系統需求分析
3.2.1 漏洞類型分析
3.2.2 功能性需求
3.2.3 非功能性需求
3.2.4 用例分析
3.3 系統總體設計
3.3.1 系統架構
3.3.2 4+1 視圖
3.3.3 持久化對象設計
3.4 系統各模塊設計
3.4.1 交互展示模塊設計
3.4.2 漏掃核心模塊設計
3.4.3 迭代學習模塊設計
3.5 本章小結
第四章 詳細設計與實現
4.1 交互展示模塊
4.1.1 任務管理與分發的實現
4.1.2 報告前端渲染實現
4.2 漏掃核心模塊
4.2.1 漏洞掃描工具集成
4.2.2 上下文提取實現
4.2.3 誤報過濾實現
4.2.4 轉眾包審核實現
4.3 迭代學習模塊
4.3.1 數據集與數據預處理
4.3.2 分類模型訓練的實現
4.3.3 模型相關參數評估
4.4 頁面展示
4.5 本章小結
第五章 系統測試與實驗分析
5.1 測試環境
5.2 功能與性能測試
5.2.1 功能測試
5.2.2 性能測試
5.2.3 健壯性測試
5.3 實驗分析
5.3.1 數據集
5.3.2 實驗流程
5.3.3 評估指標
5.3.4 結果分析
5.4 案例分析
5.5 本章小結
第六章 總結與展望
6.1 總結
軟件系統規模不斷增大,軟件安全問題也層出不窮,在源碼級別對程序進行漏洞掃描可以一定程度減少漏洞產生。多數靜態掃描工具基于詞法分析掃描漏洞,采用過度近似策略以保證結果的完備性,這導致其誤報率過高。針對這一問題,本文設計并實現人機協同 Java 字節碼漏洞掃描系統,通過機器誤報過濾以及人工眾包審核,有效降低漏洞掃描工具誤報率,為開發人員節約成本。
本文為實現上述目標,主要闡述了以下三個核心方面的設計與實現:
首先對比選取市場上主流漏洞掃描工具,并根據 CWE 標準為工具漏洞列表補充相關描述信息。最終選取開源工具 SpotBugs 和 Find-sec-bugs 插件作為 Java字節碼漏洞掃描核心工具,并將其改造封裝成符合系統接入標準的統一工具,主要實現 start、status 和 stop 三個原語操作。同時提供相應 Dockerfile 部署文件為后續 docker 化工作提供擴展。借助 Joana 程序后向切片工具提取漏洞相關上下文內容,作為漏洞描述擴充項之一。
其次利用 OWASP benchmark1.1 數據集進行初始誤報過濾分類模型的訓練與評估,其中 90% 數據為訓練集,10% 數據為測試數據集。分類主要針對對象為漏洞上下文信息,對漏洞上下文進行分詞、去除停用詞等預處理操作,再利用N-gram 提取三元特征,最后使用隨機森林作為分類器進行模型訓練。
最后,為進一步迭代改進誤報過濾模型,系統接入眾包審核服務,眾審專家對漏洞進行人工審核,并融合機器掃描過濾和人工審核報告。眾審結果可以提取為帶正誤報標簽的漏洞庫,為誤報過濾迭代訓練提供數據支撐。
本系統使用 Angular2 作為前端架構,Pug 模板引擎作為靜態報告生成框架,為用戶提供友好的交互方式。使用 Spring Boot 作為后端框架,并使用 Docker 進行獨立部署,提供輕量級微服務。同時使用 Redis 作為緩存以減少數據庫訪問壓力,MongoDB 作為數據庫存儲大量漏洞信息。系統與其他服務通過 HTTP 協議進行數據傳輸,并對外提供 RESTful 接口。
本文首先闡述了研究背景與意義,并介紹相關技術及工具。其次,通過框架圖、流程圖、用例圖等描述了系統概要設計和各模塊功能設計。然后,通過具體時序圖和關鍵代碼描述了系統詳細設計與實現方法。最后,對系統功能和性能進行測試,并通過實驗驗證系統可以有效降低漏洞掃描工具誤報率。
6.2 展望
本文設計并實現了一個人機協同 Java 字節碼漏洞掃描系統并已部署到線上服務器,此系統致力于為用戶提供低誤報低漏洞的漏洞掃描服務。為進一步提高系統效果,未來將針對以下幾個方式改進系統。
1. 擴展掃描器數量。目前本系統僅支持單掃描器,后續為系統改造并集成多個掃描器,掃描器接入均需符合統一接入標準。通過多個掃描器掃描結果融合,以確保結果完備性,從而降低漏報率。
2. 擴展漏洞特征。目前本系統使用 Joana 程序后向切片工具提取漏洞上下文,其在大型項目上存在時間隱患,后續需對其進一步優化。同時,系統目前使用 N-gram 語言模型提取上下文三元特征,后續將進一步擴展使用上下文的語義語法等特征。
3. 擴展誤報過濾模型。目前本系統使用隨機森林作為誤報過濾分類器,該分類模型在小量數據集上效果較好。后續隨著真實項目漏洞數據庫擴展,將嘗試使用深度學習等方法在大量數據集上訓練模型,選取效果優勝者作為系統過濾模型,從而提供系統準確率。
4. 適配漏洞類型。目前對于所有類型誤報過濾,本系統均使用隨機森林分類模型,該模型在各類型漏洞上過濾效果有明顯差異。后續將針對特定類型漏洞,使用特定分類算法進行模型訓練,將過濾模型與漏洞類型適配,進一步降低誤報率。
此外,隨著系統用戶量增長以及訪問需求增長,將采用分布式部署方式以滿足更高的并發性需求
參考文獻
[1] C. Banerjee, S. Pandey, Research on software security awareness: problems andprospects, ACM SIGSOFT Software Engineering Notes 35 (5) (2010) 1-5.
[2] 360 團隊, 360 代碼安全保障系統 v5.0 技術白皮書 (2015) 1-2.
[3] 中國測評 CSTC, 2019 中大型政企機構網絡安全建設發展趨勢研究報告(2019) 2-4.
[4] T. Ball, B. Cook, V. Levin, S. K. Rajamani, Slam and static driver verifier: Technology transfer of formal methods inside microsoft, in: International Conferenceon Integrated Formal Methods, Springer, 2004, pp. 1-20.
[5] O. Tripp, S. Guarnieri, M. Pistoia, A. Aravkin, Aletheia: Improving the usabilityof static security analysis, in: Proceedings of the 2014 ACM SIGSAC Conferenceon Computer and Communications Security, 2014, pp. 762-774.
[6] B. Johnson, Y. Song, E. Murphy-Hill, R. Bowdidge, Why don't software developers use static analysis tools to find bugs?, in: 2013 35th International Conferenceon Software Engineering (ICSE), IEEE, 2013, pp. 672-681.
[7] M. D. Ernst, Invited talk static and dynamic analysis: synergy and duality,in: C. Flanagan, A. Zeller (Eds.), Proceedings of the 2004 ACM SIGPLANSIGSOFT Workshop on Program Analysis For Software Tools and Engineering,PASTE'04, Washington, DC, USA, June 7-8, 2004, ACM, 2004, p. 35.
[8] P. Louridas, Static code analysis, IEEE Software 23 (4) (2006) 58-61.
[9] 肖鋒, 張玉清, 源碼審核技術中的詞法分析, 中國科學院研究生院學報 26 (03)(2009) 408-414.
[10] 周嚴, 基于污點分析的靜態漏洞檢測可擴展框架, Master's thesis, 南京大學(2017)。
[11] T. Copeland, PMD applied, Vol. 10, Centennial Books Arexandria, Va, USA,2005.
[12] 王斌, 基于 Fortify SCA 的隱通道分析技術的研究與實現, Master's thesis, 北京理工大學 (2016)。
[13] T. Kremenek, D. Engler, Z-ranking: Using statistical analysis to counter the impact of static analysis approximations, in: International Static Analysis Symposium, Springer, 2003, pp. 295-315.
[14] B. Chimdyalwar, P. Darke, A. Chavda, S. Vaghani, A. Chauhan, Eliminating staticanalysis false positives using loop abstraction and bounded model checking, in:International Symposium on Formal Methods, Springer, 2015, pp. 573-576.
[15] I. Medeiros, N. Neves, M. Correia, Detecting and removing web application vulnerabilities with static analysis and data mining, IEEE Transactions on Reliability65 (1) (2015) 54-69.
[16] J. Yoon, M. Jin, Y. Jung, Reducing false alarms from an industrial-strength staticanalyzer by SVM, in: Proceedings of 21st Asia-Pacific Software EngineeringConference, Vol. 2, IEEE, 2014, pp. 3-6.
[17] U. Koc, P. Saadatpanah, J. S. Foster, A. A. Porter, Learning a classifier for falsepositive error reports emitted by static code analysis tools, in: Proceedings of the1st ACM SIGPLAN International Workshop on Machine Learning and Programming Languages, 2017, pp. 35-42.
[18] S. Arzt, S. Rasthofer, R. Hahn, E. Bodden, Using targeted symbolic executionfor reducing false-positives in dataflow analysis, in: Proceedings of the 4th ACMSIGPLAN International Workshop on State of the Art in Program Analysis, 2015,pp. 1-6.
[19] 章曉芳, 馮洋, 眾包軟件測試技術研究進展, 軟件學報 29 (1) (2018) 69-88.
[20] T. D. LaToza, A. Van Der Hoek, Crowdsourcing in software engineering: Models,motivations, and challenges, IEEE software 33 (1) (2015) 74-80.
[21] Z. S. Alwan, M. F. Younis, Detection and prevention of sql injection attack: Asurvey, International Journal of Computer Science and Mobile Computing 6 (8)(2017) 5-17.
[22] S. Edwards, J. Spacco, D. Hovemeyer, Can industrial-strength static analysis beused to help students who are struggling to complete programming activities?, in:
Proceedings of the 52nd Hawaii International Conference on System Sciences,2019, pp. 1-10.
[23] K. Liu, D. Kim, T. F. Bissyandé, S. Yoo, Y. Le Traon, Mining fix patterns forfindbugs violations, IEEE Transactions on Software Engineering (2018) 1-1.
[24] E. H. Oskouei, O. Kal?ps?z, Comparing bug finding tools for java open sourcesoftware (2018)。
[25] 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.
[26] M. Weiser, Program slicing, IEEE Transactions on software engineering (4)(1984) 352-357.
[27] K. J. Ottenstein, L. M. Ottenstein, The program dependence graph in a softwaredevelopment environment, ACM Sigplan Notices 19 (5) (1984) 177-184.
[28] S. Horwitz, T. Reps, D. Binkley, Interprocedural slicing using dependence graphs,ACM Transactions on Programming Languages and Systems (TOPLAS) 12 (1)(1990) 26-60.
[29] J.-F. Bergeretti, B. A. Carré, Information-flow and data-flow analysis ofwhile-programs, ACM Transactions on Programming Languages and Systems(TOPLAS) 7 (1) (1985) 37-61.
[30] V. Berzins, Software Merging and Slicing, IEEE Computer Society Press, 1995.
[31] I. S. Chung, W. K. Lee, G. S. Yoon, Y. R. Kwon, Program slicing based on specification, in: Proceedings of the 2001 ACM symposium on Applied computing,2001, pp. 605-609.
[32] W. K. Lee, I. S. Chung, G. S. Yoon, Y. R. Kwon, Specification-based programslicing and its applications, Journal of Systems Architecture 47 (5) (2001) 427-443.
[33] K. Li, H. Xu, Y. Wang, D. Povey, S. Khudanpur, Recurrent neural network language model adaptation for conversational speech recognition., in: Interspeech,ISCA, 2018, pp. 3373-3377.
[34] L. Verwimp, J. Pelemans, P. Wambacq, et al., Character-word lstm language models, arXiv preprint arXiv:1704.02813.
[35] Y. Kim, Y. Jernite, D. Sontag, A. M. Rush, Character-aware neural language models, in: Thirtieth AAAI Conference on Artificial Intelligence, AAAI Press, 2016,pp. 2741-2749.
[36] J. Tanha, M. van Someren, H. Afsarmanesh, Semi-supervised self-training for decision tree classifiers, International Journal of Machine Learning and Cybernetics8 (1) (2017) 355-370.
[37] A. Mathur, G. M. Foody, Multiclass and binary svm classification: Implicationsfor training and classification users, IEEE Geoscience and remote sensing letters5 (2) (2008) 241-245.
[38] P. F. Brown, V. J. D. Pietra, P. V. de Souza, J. C. Lai, R. L. Mercer, Class-basedn-gram models of natural language, Computational Linguistics 18 (4) (1992) 467-479.
[39] T. Huang, Y. Nevmyvaka, A practical markov chain monte carlo approach to decision problems., in: FLAIRS Conference, AAAI Press, 2001, pp. 520-524.
[40] M. Pal, Random forest classifier for remote sensing classification, InternationalJournal of Remote Sensing 26 (1) (2005) 217-222.
[41] K. J. Lidl, Understanding docker, login Usenix Mag. 42 (4)。
[42] H. Kang, M. Le, S. Tao, Container and microservice driven design for cloud infrastructure devops, in: 2016 IEEE International Conference on Cloud Engineering(IC2E), IEEE, 2016, pp. 202-211.
[43] 張仁良, 軟件架構中的非功能需求, 微型電腦應用 1 (2009) 61-64.
[44] P. B. Kruchten, The 4+ 1 view model of architecture, IEEE software 12 (6) (1995)42-50.
[45] 孟祥雙, 前后端分離式 web 應用開發研究, 電子元器件與信息技術 3 (6)(2019) 40-43.
[46] E. Ayanoglu, Y. Aytas, D. Nahum, Mastering RabbitMQ, Packt Publishing Ltd,2016.
[47] P. Bertelsen, Semantics of java byte code (1997)。
[48] 佘青, 利用 apache jmeter 進行 web 性能測試的研究, Ph.D. thesis (2012)。
[49] M. Hossin, M. Sulaiman, A review on evaluation metrics for data classificationevaluations, International Journal of Data Mining & Knowledge ManagementProcess 5 (2) (2015) 1.
致 謝
在本篇畢業設計完成之際,我向所有在我畢設完成過程中指導和幫助過我的人致以最真摯的感謝。
首先,感謝我的指導老師陳振宇老師和房春榮老師,這一次論文寫作過程中離不開兩位老師的諄諄教誨。在選題之初,兩位老師幫我整理思路,并指明可行性方向。本次論文寫作期間恰好不幸遭遇新冠肺炎疫情,但在次期間,兩位老師多次通過會議線上跟蹤我們的項目以及論文進度,并不斷提出寶貴意見,不斷幫助我改進項目與論文,督促我及時完成項目與論文。在我遇到瓶頸與打擊時,房老師多次抽出時間和我進行溝通,鼓勵我振奮精神,并給予技術性支持。
再次感謝兩位老師!
其次,感謝我的實驗室"iSE 實驗室"以及實驗室里眾多兄弟姐妹,感謝實驗室為我提供良好的學習氛圍以及資源平臺,感謝實驗室成員協助我攻克不熟悉領域的難題,熱心為我提供技術性支持與幫助。
我要感謝母校南京大學,兩年的研究生生涯雖然短暫但卻充實,感謝母校為我提供良好的學習平臺,我將謹記"勵學敦行,誠樸雄偉"的校訓砥礪前行。
此外,我要感謝父母和家人對我的鼓勵與幫助,在疫情期間想盡辦法為我提供能專心完成項目以及論文的環境。
最后,我要感謝各位論文審稿老師和專家,向你們的專業與敬業致敬。我也將努力成為向你們那樣的人,無論未來在什么崗位上,都將認真對待。
(如您需要查看本篇畢業設計全文,請您聯系客服索。