《Fuzzing的藝術-麥香.pdf》由會員分享,可在線閱讀,更多相關《Fuzzing的藝術-麥香.pdf(30頁珍藏版)》請在三個皮匠報告上搜索。
1、Fuzzing的藝術如何一天發現數百個漏洞Ne0(陳永恒):佐治亞理工學院在讀博士,方向:系統/軟件安全學術研究發表在S&P,Usenix Security,CCS,AsiaCCS,Google新一代fuzzing框架fuzztest的主要設計者和開發者之一zr33(鐘銳):Palo Alto Networks Inc高級安全研究員,博士畢業于賓夕法尼亞州立大學多篇學術研究發表在S&P,Usenix Security,CCS,曾作為主要貢獻者參與Pwn2Own等漏洞比賽麥香:抖音電商安全專家r3kapig核心成員,前ctfer,主要研究方向覆蓋Web、區塊鏈、IoT等。About US編譯器/
2、解釋器應用廣泛1.網絡瀏覽器2.數據庫管理系統3.插件或擴展式軟件4.辦公軟件或文檔編輯器5.操作系統,虛擬機6.配置文件編排系統7.編譯器/解釋器攻擊面-瀏覽器來源:zdi攻擊面-數據庫來源:github攻擊面-插件來源:zjuns blog攻擊面-優化錯誤產生不正確的邏輯來源:github什么是Fuzzing(模糊測試)自動化軟件安全測試生成畸形樣本進行測試對崩潰等異常情況進行監控系統穩健性測試生成樣本進行高頻運行對系統性能變化進行監控漏洞樣本變異程序執行程序崩潰?種子否是新的反饋?是否基于變異的Fuzzing優點:利用反饋指導生成越來越好的樣本缺點:破壞樣本的結構性優點:生成符合特定結構
3、的樣本缺點:缺少反饋,盲目生成基于生成的Fuzzing生成規則:(a|b)+1.aabb2.abb3.aaaa漏洞樣本生成程序執行奔潰?否是Fuzz語言處理器的難點1.數量多,每種語言有自己的語法/語義2.對語法和語義都有比較高的要求目前主流方法及其優缺點通用型通用型(AFL,libfuzzer)通用性高,無需過多人工配置 樣本語法,語義正確率低,無法有效進行深入測試特定型特定型(Fuzzilli,Squirrel)樣本語義正確性高,深度測試 工程量大,對語言理解要求高PolyGlot:通用+高效前端:通用性把特定的語言樣本轉化成統一的表示形式(IR)后端:高效性使用通用的靜態語義模型指導樣本
4、變異用戶輸入:BNF+語義注釋PolyGlot:前端IR語言生成分析用戶提供的BNF語法和語義注釋,自動生成相應的IR語言翻譯器BNF+語義注釋PolyGlot前端IR語言翻譯器高級語言樣本IR語言翻譯器IR語言樣本目標高級語言樣本-IR語言樣本轉換將用戶提供的高級語言樣本轉化為對應的IR語言樣本語法變異語法變異:基于語法單元替換基于語法單元替換1:int a=1;2:if(a!=0)3:4:int d=123;5:return a+d;6:1:int a=1;2:if(a!=0)3:4:int k=w+123;5:return x+y;6:PolyGlot:后端語義修復語義修復:基于類型和作
5、用域的變量修復基于類型和作用域的變量修復1:int a=1;2:if(a!=0)3:4:int k=w+123;5:return x+y;6:語義錯誤:w,x,y 需要修復PolyGlot:后端語義修復語義修復:基于類型和作用域的變量修復基于類型和作用域的變量修復1:int a=1;2:if(a!=0)3:4:int k=FIXME+123;5:return FIXME+FIXME;6:語義錯誤:w,x,y 需要修復PolyGlot:后端語義修復語義修復:基于類型和作用域的變量修復基于類型和作用域的變量修復1.建立變量表建立變量表1:int a=1;2:if(a!=0)3:4:int k=FI
6、XME+123;5:return FIXME+FIXME;6:名字類型作用域aint2-6kint5-6變量表PolyGlot:后端語義修復語義修復:基于類型和作用域的變量修復基于類型和作用域的變量修復 2.生成表達式生成表達式1:int a=1;2:if(a!=0)3:4:int k=a+123;5:return FIXME+FIXME;6:名字類型作用域aint2-6kint5-6變量表PolyGlot:后端語義修復語義修復:基于類型和作用域的變量修復基于類型和作用域的變量修復 2.生成表達式生成表達式1:int a=1;2:if(a!=0)3:4:int k=a+123;5:return
7、 k+k*a;6:名字類型作用域aint2-6kint5-6變量表PolyGlot:后端PolyGlot:實現基于AFLplusplus custom mutatora.支持aflplusplus現有的各種功能與算法b.支持并行fuzzing模式支持antlr語法描述文件a.支持500+預定義語法b.可自定義語法描述支持語義種類a.作用域b.普通變量/結構體/函數定義c.類型轉化10分鐘從入門到出洞 1.確定需要測試的語言,收集語法文件和種子文件 a.語法文件:https:/ 3.編譯并插裝目標可執行文件a.下載目標repob.使用PolyGlot目錄下提供的AFLplusplus/clang
8、-fast(也可使用其他編譯代理)對目標源碼進行編譯10分鐘從入門到出洞 4.使用PolyGlot自帶的utils檢查種子文件的完整性a.是否有樣本不符合當前的語法b.當前語法的所有規則是否被樣本覆蓋c.優化種子文件直到沒有錯誤10分鐘從入門到出洞 5.創建配置文件,a.定義種子文件的路徑(必選)b.是否為弱類型語言,是否開啟語義修復等(可選)10分鐘從入門到出洞 6.設置AFL的環境變量,運行afl-fuzz。a.afl-fuzz的corpus(-i)可以和種子文件集相同也可以不同10分鐘從入門到出洞 7.收割10分鐘從入門到出洞 總結1.PolyGlot讓語言處理器fuzzing變得通用和高效a.一個小時不到就可以寫出一個高效的語言fuzzer2.還有很多語言處理器沒有被測試過a.我們只測了9種語言,20+處理器,全部出crash3.代碼開源在https:/ THANKS