- 1、本文档共49页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
内存漏洞详解(一)栈漏洞
中国科学院 信息工程研究所
陈李维
主要内容
内存漏洞基础知识
内存漏洞详细介绍
缓冲区溢出漏洞
堆漏洞
内存信息泄露漏洞
其他内存漏洞
总结
主要内容
内存漏洞基础知识
内存漏洞详细介绍
缓冲区溢出漏洞
堆漏洞
内存信息泄露漏洞
其他内存漏洞
总结
冯诺依曼体系结构的特点
计算机硬件由运算器、控制器、存储器、输入设备和输出设备五大部分组成。
计算机处理的数据和指令一律用二进制数表示;
指令和数据不加区别混合存储在同一个存储器中;
顺序执行程序的每一条指令;
程序运行简单模型
一个程序是如何在计算机系统上运行的?
硬件
处理器每次从内存中读取一条指令,按照指令内容执行,然后取下一条指令执行,一直循环运行。
软件
程序经过编译器编译链接,最后变成了由指令和数据组成的可执行二进制文件。
处理器读取二进制文件中的指令和数据,运行程序。
计算机系统的运行,就是一条一条的指令在处理器上的执行。
程序运行简单模型
一个程序是如何在计算机系统上运行的?
程序运行简单模型
一个程序是如何在计算机系统上运行的?
程序运行简单模型
硬件
处理器
指令处理模块(取指,译码,执行,提交,写回)
寄存器堆
通用寄存器,用于暂存少量当前待处理的数据。
特殊寄存器,如指令寄存器和栈寄存器等。用于保存一些特殊的数据,如指令指针。
内存(硬盘)
存储所有指令和数据。
程序运行简单模型
软件:程序+数据,指令+数据
程序,即可执行二进制文件,保存在内存中
指令
程序内含数据
中间数据,程序运行过程中生成的中间数据,保存在内存中
静态数据
动态数据
输入数据,先存入内存,再进行处理
系统内部文件
系统外部输入数据(用户输入,网络数据等)
程序运行简单模型
指令来源:系统内部程序,系统外部输入(如安装程序、脚本等)
数据来源:系统内部程序和文件,系统外部输入,程序动态生成
基本假设
假设场景
假设计算机系统是正常的。也就是说,计算机系统没有后门,计算机系统硬件是正确的,计算机在最开始是正常的,用户对计算机的操作也是正确的。
假设计算机系统上的软件存在漏洞,攻击者也知道这些漏洞,并且能够利用这些漏洞进行攻击。
研究目标
基于以上假设条件,研究如何设计更加安全的计算机系统,能够尽可能的防御针对软件漏洞的攻击。
实际情况
通常我们认为最初始的计算机是可信的,系统内部程序和系统内部数据文件都是可信的,但是其中不可避免会存在一些漏洞。
随着外部数据的输入,计算机变得不可信。
外部可执行文件输入变成系统内部程序(病毒,木马,SQL注入,恶意脚本注入等)
外部数据输入,控制计算机系统的运行。
运行时攻击
从程序运行角度,软件控制硬件运行,系统运行=指令+数据。
运行时攻击:为了让系统执行攻击者预期的操作,攻击者需要控制系统的运行。
控制硬件:不考虑。
控制输入(指令+数据):病毒木马,流氓软件,SQL注入,恶意脚本等等,也不考虑。
控制输入(数据):利用内存漏洞进行攻击。
利用输入数据进行攻击
只利用输入数据进行攻击的根本原理:
在计算机系统中(冯诺依曼结构),指令和数据没有本质的区别。系统无法区分哪些是指令,哪些是数据。
内存:所有的指令和数据都保存在内存中。也就是说,只要控制了内存,就能实现任何操作,也就控制了整个计算机系统。
内存漏洞
内存漏洞:由于软件设计或实现的错误,导致攻击者能够构造特定的输入数据,非法修改或读取内存中的数据,从而实现攻击者预期的攻击操作。
内存漏洞不包括SQL注入等能够直接向内存中注入指令的软件漏洞。
32位环境下典型内存布局
简化的内存空间布局
代码段:存储指令(Text,Code)
数据段:存储程序中内含的数据(静态)
初始化数据段(Data)
未初始化数据段(BSS)
堆栈段:存储程序运行过程中产生的中间数据(动态)
栈(Stack)
堆(Heap)
栈
栈(Stack),是一块连续的内存空间
先入后出
生长方向与内存的生长方向正好相反, 从高地址向低地址生长
栈用于保存程序运行的中间数据
函数的参数
函数返回地址
一些通用寄存器(EDI,ESI…)的值
当前正在执行的函数的局部变量
堆
堆(Heap),也是位于数据段之上的一段内存区域。
堆允许程序在运行时动态的申请一块内存空间,用于存放用户自定义的数据。
堆的使用比栈更加灵活。
栈和堆的比较
栈:
由系统自动分配,先进后出
存放函数的参数、局部变量的值等
向低地址扩展,是一段连续的内存空间
方便快捷,自由度低
堆:
需要程序员自己管理,链表结构,顺序随意
存放程序员自定义的数据
向高地址扩展,存放区域可能不连续
灵活可控,自由度高
小结
介绍程序运行基本模型,并且从中引出内存漏洞,让大家理解内存漏洞的内涵。
简单介绍了内存布局,栈和堆的概念。
主要内容
内存漏洞基
您可能关注的文档
- 渗井降水及土方开挖专项施工方案.doc
- 物理创新实验: 液体压强大小与液体密度的关系.doc
- 胎漏、胎动不安中医护理.doc
- 压力换算公式(液气体积转换公式).doc
- 胸腔闭式引流术后的并发症及处理.doc
- 五清通体口服液简介.doc
- 液体流动时的压力损失.doc
- 自闭症儿童手工课教案.doc
- 容器充气时间计算公式quan.doc
- 高效过滤器检漏测试步骤.doc
- 五个管好的意识形态工作总结.docx
- 在学校党员大会上的讲话:今年国际教育发展的四个主题.docx
- 在区廉政谈话会上的讲话.docx
- 学习贯彻2024年中央经济工作会议精神 打好政策“组合拳”保持经济稳定增长.pptx
- (7篇)学习贯彻中央经济工作会议精神研讨发言心得体会汇编.docx
- 关于“时代新人”视阈下高职思政课教学实践探究报告.docx
- (2025.01.05)关于城市营商环境现状与优化路径探索报告.docx
- 教育工作会议主题发言材料和讲话材料汇编(6篇).docx
- 镇党委副书记兼派出所所长关于2024年度民主生活会个人对照查摆剖析材料.docx
- 县委常委班子2024年度民主生活会对照检查.docx
文档评论(0)