總結一下能夠看出,做者發現的bug都是特別簡單的case。
多數都是用戶輸入數據檢查不足/類型轉換問題/測試用例分支不足等,
致使的溢出/空指針訪問/非法地址訪問等。)
第1章 捉蟲
第2章 回到90年代
[漏洞]
未驗證用戶數據,致使棧緩衝區溢出
[利用手段]
控制用戶數據(長度與內容)使其覆蓋EIP
第3章 突破區域限制
[漏洞]
返回值(出力值)有兩個且有可能返回狀態不一致(覆蓋測試不充分),致使空指針解引用
[利用手段]
(非特權用戶)在零頁內存空間中填充設計好的數據,控制解引指針指向結構體的函數指針地址,並在該函數執行時獲取控制權
第4章 空指針萬歲
[漏洞]
用戶數據的不當類型轉換致使可能跳過內存分配處理,致使程序試圖在空地址(NULL)的必定偏移位置(一樣受用戶數據影響控制)寫入用戶數據
[利用手段]
控制用戶數據使其跳過內存分配處理並在指定位置(下一個調用的庫函數地址,GOT)寫入控制數據
第5章 瀏覽即遭劫持
[漏洞]
ActiveX控件提供的可調用接口存在缺陷,沒有對用戶數據進行驗證,在過長的狀況下會致使棧緩衝區溢出
[利用手段]
控制用戶數據覆蓋楨棧返回地址(EIP)(上一層調用函數執行處)
第6章 一個內核統治一切
[漏洞]
應用程序裝載的驅動程序能夠接受任意非特權用戶發送的請求,並根據用戶數據覆寫內存中的數據
[利用手段]
控制用戶數據發送給驅動程序,使其覆蓋指定位置(函數指針地址)的值,從而在應用程序執行時(經過驅動程序)控制EIP
第7章 比4.4BSD還老的BUG
[漏洞]
內核響應(非受權)用戶的IOCTL請求時,對用戶數據檢查不充分(類型轉換可能產生的負數狀況)致使非法地址的訪問
[利用手段]
控制用戶數據,使其執行指定地址的函數指針(須事先將執行代碼地址裝載入內核內存空間)來控制EIP
第8章 鈴音大屠殺
[漏洞]
(猜測)對用戶數據缺少驗證致使memcpy時棧緩衝區溢出
[利用手段]
控制用戶數據覆蓋函數調用楨棧返回位置從而控制pc
附錄A 捉蟲提示
[常見的漏洞]
[一種利用手段]
- GOT(Global Offset Table)地址覆寫
附錄B 調試
[經常使用調試手段]
- mdb
- WinDbg
- VMWare + WinDbg經過管道調試Windows內核
- gdb
- Linux + gdb遠程調試Mac OS X內核
附錄C 緩解技術
[常見緩解方法]
- 地址空間佈局隨機化(ASLR)
- 安全cookie(/GS),棧緩衝區溢出保護(SSP),Stack Canaries
- 數據執行保護(DEP),不可執行內存保護(NX)
- RELRO能夠保護進程的數據段及GOT入口地址
- Solaris Zone的可靠性創建在內核自己的可靠性上