计算机安全实验:地址空间布局随机化与内存分配策略

需积分: 44 16 下载量 3 浏览量 更新于2024-08-10 收藏 1.61MB PDF 举报
"这篇文档主要介绍了EXEC系统调用的工作原理以及MALLOC库调用在内存管理中的应用,并给出了一个简单的C程序示例。此外,还提到了网络安全相关的教学实验,包括各种漏洞和攻击实验,以及安全机制的设计与实现实验。" 在计算机系统中,EXEC系统调用是一个关键的组成部分,它允许程序替换当前进程的执行映像,从而执行新的程序。在标题提及的"EXEC系统调用-必看!开关电源常用安规要求一览表"中,我们重点关注EXEC调用的过程: 1. **许可检查**:EXEC调用首先会确认目标文件是否具有执行权限。 2. **获取段和大小**:获取程序的代码段、数据段等信息,了解其内存需求。 3. **参数和环境获取**:准备程序运行所需的参数和环境变量。 4. **内存分配与释放**:分配新的内存空间以容纳新的程序,并释放旧的内存。 5. **复制栈**:将当前进程的栈复制到新分配的内存中。 6. **复制数据**:将程序的数据(包括代码和静态数据)复制到新的内存位置。 7. **处理权限位**:处理setuid和setgid权限,这可能会影响程序的执行权限。 8. **修正进程列表**:更新进程列表以反映新的程序状态。 9. **告知内核**:通知内核进程现在可以执行新程序。 在安全方面,文档提到栈的地址随机化,这通常是在第4或第5步进行,以增加栈溢出攻击的难度。malloc()是动态内存分配的库函数,它用于从堆中分配内存。malloc()通过brk()调用来扩展数据段。在实验任务中,学生被鼓励使用rand()和random()函数对栈和堆的地址进行随机化,以增强程序的安全性。 此外,该文档还提到了一个由杜文亮博士等人开发的计算机安全教育实验机制——SEED,它包括了一系列的实验,覆盖了缓冲区溢出、返回导向编程(Return-to-libc攻击)、格式化字符串漏洞、竞争条件、Chroot沙盒、TCP/IP攻击、DNS欺骗、跨站脚本攻击等多个网络安全主题。这些实验旨在帮助学生理解和防御各种网络攻击,并涉及权限管理、加密、地址空间布局随机化等安全机制的设计与实现。 实验的分类依据其复杂度,从小型实验(需要2小时课堂时间或一周作业时间)到大型综合实验(适合作为期末项目,需要4至6周时间)。这些实验为学习者提供了深入实践和探索计算机安全的机会,有助于提升网络安全意识和技能。