什么是堆栈溢出

堆栈溢出是指,堆栈(Stack)是一种抽象数据结构,是一组相同数据类型的组合,所有的操作均在堆栈顶端进行,具有“后进先出”的特性,即最后一个放入堆栈中的物体总是被最先拿出来。水满则溢,堆栈是有一定容量限制的,当超出了该容量限制,就会发生溢出。

一、什么是堆栈溢出

堆栈(Stack)是一种抽象数据结构,是一组相同数据类型的组合,所有的操作均在堆栈顶端进行,具有“后进先出”的特性,即最后一个放入堆栈中的物体总是被最先拿出来。堆栈中两个最重要的是PUSH(进栈)和POP(出栈), PUSH操作在堆栈的顶部加入一 个元素,POP操作相反, 在堆栈顶部移去一个元素, 并将堆栈的大小减一。水满则溢,堆栈是有一定容量限制的,当超出了该容量限制,就会发生溢出。

二、溢出危害

从小处看,堆栈溢出会改变临近堆栈的空间中的内容,从而导致程序运行异常,发生故障;从大处看,堆栈溢出和计算机网络安全密切相关。堆栈溢出攻击是计算机被攻击的最为常见的一种形式,远程网络的攻击绝大多数是针对堆栈溢出的漏洞,这种攻击可以使得一个匿名的Internet用户有机会获得一台主机的部分或全部控制权。

1、一般后果

堆栈溢出时会访问不存在的RAM空间,造成代码跑飞,这时无法得到溢出时的上下文数据,也无法对后续的程序修改提供有用信息。

2、安全威胁

堆栈溢出常见的攻击类型有:修改函数的返回地址,使其指向攻击代码,当函数调用结束时程序跳转到攻击者设定的地址而不是原先的地址,修改函数指针,长跳转缓冲区来找到一个可供溢出的缓冲区。

攻击者通过缓冲区溢出来重写存储在返回地址内的值从而达到控制程序的执行流程的目的。程序函数就像是一个大程序中的小程序。它是相对独立的,对传给它的数据做相应的处理然后将处理的结果返回给主函数。因为数据在一个函数内进行处理,因此它用栈作为数据的临时存储区域。当一个程序调用函数时,它将所有的数据压栈,包括返回地址,如图所示。当函数被调用时,指令指针指向的就是函数的返回地址。这一点很重要,因为当被调用函数执行结束以后,主程序要回到被调用函数的返回地址处,接着执行下一条指令。返回地址存储在RET中,当被调用函数执行结束,该返回地址传递给指令指针,以便主函数能够回到函数调用之前的地址继续执行。如果攻击者能够使缓冲区溢出并且重写存储在RET中的值,将恶意代码的地址赋值给RET,那么指令指针将指向恶意代码,从而执行恶意代码。

堆是程序中动态分配的内存空间,因为程序在执行前所需要的内存数量是未知的,因此堆内存在程序需要时进行动态分配,不需要时进行动态释放。堆和栈的主要区别在于,堆没有像栈那样的返回地址,这使得在栈溢出中用于控制程序执行流程的相关技术不可用。堆溢出可能导致重写数据或者指向其他函数的指针。这样,攻击者可以重写这些指针使其指向恶意代码,而不是指向原来的内存区域。

利用堆栈溢出攻击计算机的最典型的例子是1988年利用fingerd漏洞进行攻击的蠕虫病毒。

延伸阅读

防范措施

通常的代码要设置堆栈缓冲区,较好能检测堆栈运行形况,设置堆栈溢出检测算法。对于递归引起的堆栈溢出,可以采用循环处理。

针对堆栈溢出可能造成的计算机安全问题,通常有以下这些防范措施:

(1) 强制按照正确的规则写代码

(2) 通过操作系统使得缓冲区不可执行,从而阻止攻击者植入攻击代码。但由于攻击者并不一定要通过植入代码来实现攻击,同时linux在信号传递和GCC的在线重用都使用了可执行堆栈的属性,因此该方法依然有一定弱点。

(3) 利用编译器的边界检查来实现缓冲区的保护。该方法使得缓冲区溢出不可能出现,完全消除了缓冲区溢出的威胁,但代价较大,如性能速度变慢。

(4) 程序指针完整性检查,该方法能阻止绝大多数缓冲区溢出攻击。该方法就是说在程序使用指针之前,检查指针的内容是否发生了变化。

文章标题:什么是堆栈溢出,发布者:E.Z,转载请注明出处:https://worktile.com/kb/p/49450

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
E.ZE.Z认证作者
上一篇 2023年4月16日 下午4:48
下一篇 2023年4月16日

相关推荐

  • aarch和arm的有什么区别

    摘要:在讨论计算机架构中,AARCH和ARM是两个频繁出现的术语。AARCH代表ARM架构,系列设计哲学的总称,目前主要有AARCH32和AARCH64;而ARM是一家英国公司,以授权其处理器架构和设计给其他公司著名,这些设计基于ARM架构实现。本文主要探讨AARCH与ARM的区别,涉及核心观点包括…

    2023年11月13日
    1.3K00
  • 怎样在SSH下远程使用IDE编译和调试

    在 SSH 下远程使用 IDE 编译和调试步骤如下:1、新建项目;2、配置ssh环境;3、设置远程机器的地址和用户名;4、输入远程机器的密码;5、设置新建项目界面 Remote project location,绑定容器里的项目位置等。新建项目是指File – New Project  …

    2023年2月7日
    52800
  • Saas是什么

    SaaS,是Software-as-a-Service的缩写名称,意思为软件及服务,即通过网络提供软件服务。SaaS是基于互联网提供软件服务的软件应用模式。简单说就是在线系统模式,即软件服务商提供的软件在线服务。 一、Saas是什么 SaaS(Software-as-a-service)的意思是软件…

    2023年4月23日
    28500
  • redis 分布式锁有什么缺陷

    redis 分布式锁的缺陷:1、客户端长时间阻塞导致锁失效问题;2、redis服务器时钟漂移问题;3、单点实例安全问题。客户端长时间阻塞导致锁失效问题是指,某个客户端得到了锁,因为某些原因导致长时间阻塞,然后业务程序还没执行完锁就过期了。 一、redis 分布式锁的缺陷 1、客户端长时间阻塞导致锁失…

    2023年1月8日
    3.1K00
  • oa离职在哪里

    OA离职流程涉及多个环节:1、提交离职申请、2、部门主管审批、3、交接工作、4、人力资源部审批、5、财务结算、6、企业文化建设。 其中,提交离职申请为第一个也是至关重要的一步。员工需要明确自己的离职意愿,通常会通过公司内部的在线办公自动化(OA)系统提交离职申请。该环节是整个离职流程的启动点,也是确…

    2024年1月11日
    20600
  • 常见的办公软件系统有哪些

    常见的办公软件有:1.Word;2.Excel;3.PowerPoint;4.Access;5.OneNote;6.WPS Office;7.Xmind;8.Photoshop;9.腾讯文档;10.福昕PDF阅读器。Word被认为是Office的主要程序,在其主页面可以对文字进行编辑和处理,以整理出…

    2023年4月18日
    81400
  • 华为的愿景

    华为的愿景有过升级,过去,华为的愿景是:丰富人们的沟通和生活。2018年,华为紧跟时代步伐,把公司的使命愿景升级为:把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界。 一、华为的愿景 华为的愿景有过升级,过去,华为的愿景是:丰富人们的沟通和生活。2004年4月28日任正非在“广东学习…

    2023年3月24日
    3.9K01
  • okr有什么工具

    okr工具有:1、BetterWorks;2、周目;3、WorkBoard;4、Perdoo;5、Ally;6、Gtmhub。BetterWorks 是一款提供实时反馈和目标设定的OKR工具。它可以帮助员工更好地理解自己的工作目标,同时也能够让团队领导及时地对员工的表现进行评估。 1、BetterW…

    2023年7月11日
    46100
  • DevOps与多云和混合云环境的区别

    DevOps、多云和混合云环境是当下IT架构和软件开发中的热门话题,但它们服务于不同的目的和业务需求。主要区别包括:1、目的和应用场景;2、操作和管理模式;3、数据和应用程序流动性;4、依赖和复杂性;5、成本和投资回报。DevOps主要关注软件开发周期的优化,而多云和混合云环境则侧重于灵活、可扩展的…

    2023年9月13日
    25600
  • 为什么需要 SSL 证书

    网站需要 SSL 证书来确保用户数据的安全,验证网站的所有权,防止攻击者创建虚假网站版本,以及将信任传达给用户。如果网站要求用户登录、输入个人详细信息(例如其信用卡号)或查看机密信息(例如,健康福利或财务信息),则必须对数据保密。 SSL 证书有助于保持在线互动的私密性,并向用户保证该网站是真实可靠…

    2022年10月17日
    38000

发表回复

登录后才能评论
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部