本篇主要給大家科普Double fetch漏洞通用挖掘技術。
什么是Double fetch?
Double fetch類型漏洞產生于多線程數據訪問時,并且沒有做必要的安全同步措施。多線程時,對同一數據一個線程讀一個線程寫,可能引起數據訪問異常,而這個異常如果能被利用,這就是一個漏洞。
典型的情況,一個數據ring3應用訪問,ring0也能訪問,如果沒有同步安全措施,可能會引起系統崩潰。
Double Fetch原理(圖片來自網絡,如有侵權,聯系秒刪)
技術探討一
Google公司開源的bochspwn。
Bochspwn是在boch源碼基礎上修改,能夠捕捉double fetch漏洞。
Bochspwn主要用到bx_instr_lin_access這個boch的api。
看下boch文檔的介紹,這個回調是當模擬器有線性內存訪問時會觸發。
Boch中原api實現:
Bochspwn中bx_instr_lin_acess的實現,當ring0層代碼訪問ring3數據時,對應的指令會被bochspwn記錄下來。
技術探討二
利用intel pt技術特性挖掘。
按intel pt官方文檔介紹,intel pt可以在硬件層記錄程序的執行流程。
Pt可以對內核地址,多進程追蹤 。pt不需要對系統打補丁,就可以對內核及應用進行動態分析。利用這一特性,找double fetch這類漏洞應該是可行的。
總結
以上探討兩種double fetch漏洞挖掘技術,pt是基于硬件,速度更優于模擬器。
本篇更傾向科普,同時也感謝開源給我們帶來的技術進步,感謝前輩們的技術分享。