编程安全漏洞与防护全解析
1. 栈保护与堆溢出
1.1 栈保护信息
如需获取更多关于 StackGuard 的信息,可访问网站 www.immunix.com 。该网站售卖基于 RedHat 且使用 StackGuard 编译的完整 Linux 发行版。
1.2 堆溢出原理
由于栈空间通常有限,程序往往仅在栈上存储少量数据,而大部分实际数据存储依赖于堆。使用堆时,程序需管理堆的使用情况,不同操作系统解决此问题的方式略有差异,通常会在堆上存储小块信息,用于表明当前内存块的大小及使用状态。
正常运行时,堆的结构如下:
| 堆结构 | 详细信息 |
| — | — |
| 第一堆块 | 包含使用状态、块大小、用户数据、下一块位置等信息 |
| 下一堆块 | 同样包含使用状态、块大小、用户数据、下一块位置等信息 |
若黑客向堆中写入超出程序预期的数据,会导致堆上的特殊区域损坏。与栈溢出不同,黑客虽不能直接控制程序的执行位置,但可利用各平台的内存分配细节,向指定位置写入少量数据,即“任意位置写入一个字”漏洞。
1.3 标准堆溢出流程
- 程序启动时,堆进行初始化。
- 登录过程中,恶意黑客使堆结构溢出。
- 程序需要更多内存,在堆上分配新块。由于堆结构溢出,程序会将数字 1(表示“真”)写入程序中用于判断黑客是否通过认证的位置。
- 黑客成功登录。
1.4 堆溢出防护
堆溢出是现代 C/C++ 程序中最危险的溢出类
超级会员免费看
订阅专栏 解锁全文
1237

被折叠的 条评论
为什么被折叠?



