研發(fā)階段的質(zhì)量與安全測試實戰(zhàn)-使用靜態(tài)分析技術(shù)找到“真正”的代碼質(zhì)量缺陷與安全漏洞-韓葆_第1頁
研發(fā)階段的質(zhì)量與安全測試實戰(zhàn)-使用靜態(tài)分析技術(shù)找到“真正”的代碼質(zhì)量缺陷與安全漏洞-韓葆_第2頁
研發(fā)階段的質(zhì)量與安全測試實戰(zhàn)-使用靜態(tài)分析技術(shù)找到“真正”的代碼質(zhì)量缺陷與安全漏洞-韓葆_第3頁
研發(fā)階段的質(zhì)量與安全測試實戰(zhàn)-使用靜態(tài)分析技術(shù)找到“真正”的代碼質(zhì)量缺陷與安全漏洞-韓葆_第4頁
研發(fā)階段的質(zhì)量與安全測試實戰(zhàn)-使用靜態(tài)分析技術(shù)找到“真正”的代碼質(zhì)量缺陷與安全漏洞-韓葆_第5頁
已閱讀5頁,還剩60頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

使用靜態(tài)分析技術(shù)找到“真正”的代碼質(zhì)量缺陷與安全漏洞韓葆(BobHan),SynopsysSoftwareIntegrityGroupBao.Han@2016-4-212016-4-21HeartBleedBug絕絕大部分缺陷在修復(fù)成本較低時被引入。大部分缺陷在成本較高時被發(fā)現(xiàn)和修復(fù)。代碼靜態(tài)分析?定義:在不執(zhí)行計算機程序的條件下,對源代碼進行分析,找出代碼缺陷?執(zhí)行方式:一般配合靜態(tài)程序分析工具進行?采用技術(shù):數(shù)據(jù)流分析、機器學(xué)習(xí)、語義精簡...?可檢測類型:死鎖,空指針,資源泄露,緩沖區(qū)溢出,安全漏洞,競態(tài)條件...?優(yōu)點:?能夠檢測所有的代碼級別的可執(zhí)行路徑組合,快速,準(zhǔn)確?直接面向源碼,分析多種問題?在研發(fā)階段開始找到并修復(fù)多種問題,節(jié)省大量時間/人力成本?注意:靜態(tài)分析不是萬能的,測試是持續(xù)的過程,非一勞永逸?編譯器警告:保證類型安全–最初級的靜態(tài)分析,檢測規(guī)則簡單?中間語言分析:檢測字節(jié)碼(ByteCode)的缺陷,將其重新映射到真實代碼中–在轉(zhuǎn)換與映射過程中易造成精度丟失?高誤報率:目前靜態(tài)分析產(chǎn)品的誤報率普遍在30%以上。?缺陷種類較少,找到的問題級別不高:多數(shù)為代碼規(guī)范或低級缺陷,非實–如命名規(guī)范、類定義規(guī)范,最佳實踐.....?易用性較低:基本上都是一次性的使用工具,無法與SDLC集成SCM:如SVN,CVS,Perforce,Git–BugTracking:如Bugzilla,Jira?基于MetaCompilation的靜態(tài)分析:?由斯坦福大學(xué)教授DawsonEngler提出,在深度理解代碼與程序語義的基礎(chǔ)上檢測缺陷?旨在查找“真正的代碼缺陷”?實現(xiàn)原理:?使用可擴展的metal語言定義正確性Checker?將程序的源碼使用狀態(tài)機進行抽象描述(StateMachineAbstraction)。?使用xgcc系統(tǒng)匹配Checker與抽象狀態(tài)機狀態(tài),找到問題所在的點。?可準(zhǔn)確檢測實際的Bug(內(nèi)存和指針問題、資源泄露、緩沖區(qū)溢出,數(shù)組越界,心臟出血漏洞...)?能夠檢測高達億行級別的代碼庫,避免“狀態(tài)爆炸”?使用模型檢驗與符號執(zhí)行技術(shù),誤報率降低至15%以下?算法已步入實際應(yīng)用?面向企業(yè)的Coverity軟件?面向開源代碼的CoveritySCANx1”需要在調(diào)用“do_something”后繼續(xù)執(zhí)行。?提出警告:if循環(huán)沒有包含所有語句Java語言被編譯成JVMbytecode-在運行時被轉(zhuǎn)換成本地可執(zhí)行代碼的分析選項一?分析byte-code:用戶編譯他們的軟件,然后分析編譯后的可執(zhí)行文件與調(diào)試信息,分析引擎聯(lián)系找到的缺陷與源代碼位置?某些開源工具的實現(xiàn)原理選項二:?獲取所有的Java編譯過程并執(zhí)行分析?Bytecode分析工作仍舊存在,但包含更多的內(nèi)容?獲取所有編譯過程?每當(dāng)“jevec(或其他相關(guān)AdI)”被調(diào)用后,編譯獲取系統(tǒng)記錄所有的編譯器選項,操作,源代碼與調(diào)用的庫文件?面向源代碼和庫文件可進行全面編譯后分析?找到的缺陷將被展示給研發(fā)人員修復(fù)12如何分析缺陷?2?過程間分析(Intra-proceduralanalyses)將考慮每一個合理的可執(zhí)行路徑133?某些使用智能靜態(tài)分析,例如:144雜的缺陷解釋出來很難?只找潛在的一次性缺陷是很難的155ControlFlowGraph1TaintedData?BC(Escaper)DETaintedData?BC(Escaper)DE(Sink)AdvanceddataflowTTaintedaAA(Source)?動態(tài)“fuzzing”?基于上下文分析CoverityOWASPtop10:JSP&ASPA564,917A2:失效認(rèn)證與會話管理259,321,384,798A3:跨站腳本攻擊(XSS)79,80,81,82,83,84,86,87A配置錯誤650A6:敏感信息泄露321A7:功能級訪問控制缺失425,862,863A8:跨站請求偽造352A含有已知漏洞的組件A10:未驗證的重定向和轉(zhuǎn)發(fā)938Web應(yīng)用安全缺陷(OWASPTop10)空指針引用–跨站腳本攻擊–Null檢查后引用空指針–SQL注入–直接引用返回的空指針–命令行注入–Null檢查前引用空指針–路徑遍歷…API使用錯誤資源泄露–無效迭代器使用–數(shù)據(jù)庫連接資源泄露–不可修改的集合錯誤–資源泄露–已釋放資源調(diào)用–Socket&Stream泄露性能缺陷并發(fā)數(shù)據(jù)訪問異常–低效率方法使用–變量非原子更新–在循環(huán)中連接字符串–雙重檢查鎖定–冗余同步–數(shù)據(jù)競態(tài)條件邏輯錯誤–Volatile非原子更新–不可達代碼–Servlet屬性無效鎖定–未使用變量–單例模式競態(tài)條件–常量表達式程序假死–非本地資源不當(dāng)使用–線程死鎖–整數(shù)溢出–死鎖–不當(dāng)分號類層次結(jié)構(gòu)不一致–父函數(shù)調(diào)用丟失–構(gòu)造函數(shù)中使用虛函數(shù)控制流缺陷–在Finally模塊中返回–Switch語句中break丟失錯誤處理缺陷–未驗證的返回值數(shù)據(jù)庫操作–不正確的實體哈希–Load函數(shù)返回值錯誤驗證–不完全持續(xù)周期–get()不當(dāng)使用代碼可維護性缺陷–調(diào)用已過期方法–顯式垃圾收集–非靜態(tài)方法中設(shè)置靜態(tài)變量–復(fù)制/粘貼錯誤–不可達代碼可疑代碼–參數(shù)次序錯誤–格式錯誤資源泄露–數(shù)據(jù)庫連接資源泄露–資源泄露–Socket&Stream泄露API使用錯誤–已釋放資源調(diào)用并發(fā)數(shù)據(jù)訪問異常–變量非原子更新–數(shù)據(jù)競態(tài)條件性能缺陷–低效率方法使用–在循環(huán)中連接字符串–冗余同步程序假死–線程死鎖–死循環(huán)可疑代碼–復(fù)制/粘貼錯誤–參數(shù)次序錯誤–格式錯誤類層次結(jié)構(gòu)不一致–調(diào)用base.close()或base.dispose()失敗–父函數(shù)調(diào)用丟失控制流缺陷–可疑的額外分號–不一致比較–不兼容的類型比較空指針引用–Null檢查后引用空指針–直接引用返回的空指針–Null檢查前引用空指針?biāo)阈g(shù)錯誤–錯誤移位操作–不正確的表達式–表達式計算過程中溢出n3Copy-pasteerrorinreal-worldcode3if(returns!=null){r.retvals=ScopeParser.parseTypedArgList(returns,returns.getText(),g.tool.errMgr);r.retvals.type=AttributeDict.DictType.RET;r.retvals.ast=returns;}if(locals!=null){r.locals=ScopeParser.parseTypedArgList(locals,locals.getText(),g.tool.errMgr);r.locals.type=AttributeDict.DictTYpe.LOCAL;r.locals.ast=returns;}2?Checker描述(metal語言)檢測代碼:?符號執(zhí)行?不執(zhí)行程序,用符號值表示程序變量的值,模擬程序執(zhí)行?可以分析代碼的所有/部分語義信息?避免狀態(tài)爆炸?模型檢驗資源泄露?內(nèi)存泄露未初始化變量?返回語句丟失?未初始化的指針\標(biāo)量\數(shù)組讀寫?類或結(jié)構(gòu)體中未初始化的數(shù)據(jù)成員并發(fā)缺陷?死鎖?阻塞調(diào)用誤用算術(shù)錯誤?負(fù)變量不當(dāng)使用?異常符號擴展?整數(shù)溢出?除零異常?內(nèi)存訪問溢出?字符串長度計算錯誤?緩沖區(qū)溢出?寫指針溢出?負(fù)數(shù)組索引寫入?內(nèi)存錯誤分配?錯誤的內(nèi)存釋放非法內(nèi)存訪問?溢出指針讀取?越界讀取?返回指針至本地變量?負(fù)數(shù)組索引讀取?已釋放指針讀\寫?不兼容的指針轉(zhuǎn)換控制流缺陷?邏輯\結(jié)構(gòu)死代碼?非本地資源不當(dāng)使用CCPart2程序假死不安全的數(shù)據(jù)處理?死循環(huán)?不可信的循環(huán)數(shù)據(jù)源?雙重鎖或解鎖丟失?使用非可信數(shù)據(jù)源讀寫數(shù)組/指針?負(fù)循環(huán)邊界值?使用非可信數(shù)據(jù)源格式化字符串?線程死鎖性能缺陷?持鎖過程中調(diào)用sleep()?值傳遞大參數(shù)空指針引用?使用大堆棧?Null檢查后引用空指針安全措施違反?直接引用返回的空指針?緩沖區(qū)溢出?Null檢查前引用空指針?固定長度緩沖區(qū)寫入錯誤處理缺陷?非安全函數(shù)調(diào)用?未驗證的返回值?非安全臨時文件使用?未獲取異常?檢查/使用時間不一致?負(fù)變量不當(dāng)使用?用戶空間指針不當(dāng)使用代碼維護性缺陷API錯誤使用?多返回語句?非安全chroot調(diào)用?無效變量?錯誤的迭代器使用異常代碼?printf()參數(shù)不匹配?復(fù)制/粘貼錯誤?格式錯誤類型類型Coverity未處理的缺陷(Null引用)79資源泄露86并發(fā)問題22重要的缺陷188CoveritCoverity22代碼規(guī)范,最佳實踐等9Bug總數(shù)196FindBugs7SharedDefects591類型資源泄露控制流缺陷,并發(fā)訪問等重要的缺陷代碼規(guī)范,最佳實踐等TotalBugsCoverityCoverity9Clang53SharedDefects001123需求挖掘設(shè)計驗證發(fā)布支持開發(fā)測試發(fā)布“瀑布式開發(fā)流程”需求挖掘設(shè)計驗證發(fā)布支持開發(fā)測試發(fā)布實施實施經(jīng)典的瀑布式開發(fā)流程:A門提供需求挖掘設(shè)計驗證發(fā)布支持開發(fā)測試發(fā)布“敏捷開發(fā)流程”需求挖掘設(shè)計驗證發(fā)布支持開發(fā)測試發(fā)布實施實施理想的敏捷開發(fā)流程:?將整個實施和驗證流程縮短成2-4周的“沖刺”(sprints)?開發(fā)好的功能只有在經(jīng)過全面驗證之后才被“接受”QA缺陷提交提交提交提交缺陷?Requirementsdefinition?Developfeatures?缺陷提交提交提交提交缺陷?Requirementsdefinition?Developfeatures?BusinessProcessModeling?Reviewdefects?Prioritizeactions修復(fù)?TrackprogressIDE測修復(fù)代碼檢測敏敏捷開發(fā)相關(guān)人員任務(wù)自動分配源代碼管源代碼管理夜間構(gòu)建缺陷跟蹤?這片代碼來自PuTTY–PuTTY是面向Win32和Unix平臺以及xterm終端仿真程序而免費實施的Telnet與SSHCVE005-0467{returnp;}CVE-2005-0467staticcharstaticchar*mkstr(char*s,{char*p=snewn(len+1memcpy(p,s,len);returnp;char**p,int*length){*p=NULL;if(pkt->length-pkt->savedpos<4)return;/*lengthvalueistakenfromuser-supplieddata*/*length=GET_32BIT(pkt->data+pkt->savedpos);pkt->savedpos+=4;llbepassediflengthngthpktsavedposlengthstructfxpstructfxp_handle*fxp_open_recv(structsftp_packet*pktistructsftp_request*req)*p=pkt->data+pkt->savedpos;pkt->savedpos+=*le

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論