[读书笔记]捉虫日记

(书生注:这本书站在捉虫人的角度看问题,可以带给编程人员新的认识和角度。
 

总结一下可以看出,作者发现的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的可靠性建立在内核本身的可靠性上

 

posted on 2013-08-22 18:48  you Richer  阅读(304)  评论(0编辑  收藏  举报