总结一下能够看出,做者发现的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的可靠性创建在内核自己的可靠性上