什么是缓冲区溢出?

缓冲区溢出是一种异常现象,当软件向缓冲区中写入数据使缓冲区容量溢出时,会导致相邻存储器位置被覆盖。换句话说,过量的信息被传递到没有足够空间的容器中,而这些信息最终会替换相邻容器中的数据。

攻击者可以利用缓冲区溢出修改计算机的内存,以破坏或控制程序的执行。

什么是缓冲区?

缓冲区或数据缓冲区是一个物理内存存储区,用于在将数据从一个位置移到另一位置时临时存储数据。这些缓冲区通常位于 RAM 内存中。计算机经常使用缓冲区来帮助提高性能。

大多数现代硬盘驱动器都利用缓冲的优势来有效地访问数据,并且许多在线服务也使用缓冲区。例如,在线视频传送服务经常使用缓冲区以防止中断。流式传输视频时,视频播放器一次下载并存储 20% 的视频到缓冲区,然后从该缓冲区进行流式传输。这样,连接速度的小幅下降或快速的服务中断都不会影响视频流性能。

缓冲区旨在容纳特定数量的数据。除非利用缓冲区的程序具有内置指令以在将太多数据发送到缓冲区时丢弃数据,否则程序将覆盖缓冲区附近的内存中的数据。

如何利用缓冲区溢出进行攻击?

攻击者可以故意将精心制作的输入馈入程序,程序将尝试将该输入存储在不够大的缓冲区中,因此输入会覆盖连接到缓冲区空间的部分内存。如果程序的内存布局定义明确,则攻击者可以故意覆盖已知包含可执行代码的区域。然后,攻击者可以用自己的可执行代码替换这些代码,这可以大大改变程序的工作方式。

例如,如果内存中的被覆盖部分包含一个指针(指向内存中另一个位置的对象),则攻击者的代码可以用另一个指向漏洞利用有效载荷的指针来替换该代码。这样就可以将整个程序的控制权转移给攻击者的代码。

缓冲区溢出攻击的类型有哪些?

缓冲区溢出攻击有很多类型,它们采用不同的策略并针对不同的代码段。以下是一些最著名的类型。

  • 堆栈溢出攻击 - 这是最常见的缓冲区溢出攻击类型,涉及到调用堆栈*上的缓冲区溢出。
  • 堆溢出攻击 - 这种类型的攻击针对开放的内存池中称为堆*的数据。
  • 整数溢出攻击 - 在整数溢出中,算术运算得出对于要存储结果的整数类型而言太大的整数;这可能导致缓冲区溢出。
  • Unicode 溢出 - Unicode 溢出通过将 Unicode 字符插入需要 ASCII 字符的输入中来创建缓冲区溢出。(ASCII 和 unicode 是使计算机表达文本的编码标准。例如,字母“a”由 ASCII 中的数字 97 表达。虽然 ASCII 码仅用于表达西方语言中的字符,但 unicode 可以为地球上几乎所有书面语言创建字符。因为 unicode 中有更多可用的字符,所以许多 unicode 字符大于最大的 ASCII 字符。)

谁容易受到缓冲区溢出攻击?

C 和 C++ 这两种脆弱性较高的热门语言,因为它们不包含内置的保护措施以防止访问或覆盖内存中的数据。Windows、Mac OSX 和 Linux操作系统 都包含用这两种语言编写的代码。

Java、PERL 和 C# 等更现代的语言具有内置特性,可帮助减少缓冲区溢出的机会,但不能完全阻止缓冲区溢出。

如何防范缓冲区溢出攻击?

现代操作系统具有运行时保护,可帮助防护缓冲区溢出攻击。我们来探讨有助于防护漏洞利用风险的 2 种常见保护措施:

  • 地址空间随机化 - 随机重新排列进程的关键数据区的地址空间位置。缓冲区溢出攻击通常依赖于了解重要的可执行代码的确切位置,地址空间的随机化可以使这种了解几乎不可能。
  • 防止数据执行 - 标记内存的某些区域(可执行或不可执行),防止漏洞利用运行不可执行区域中的代码。

软件开发人员还可以通过使用内置保护的语言编写或在其代码中使用特殊的安全性程序,来预防缓冲区溢出漏洞。

尽管存在上述预防措施,但开发人员仍然发现了新的缓冲区溢出漏洞,有时是在遭遇成功的漏洞利用之后。发现新漏洞时,工程师需要修补受影响的软件,并确保该软件的用户可以获取补丁。

IT问答库http://wap.mobiletrain.org/qa/

网络安全攻防之缓冲区溢出攻击相关推荐

  1. 网络攻防之缓冲区溢出攻击

    什么是缓冲区溢出? 缓冲区溢出是一种异常现象,当软件向缓冲区中写入数据使缓冲区容量溢出时,会导致相邻存储器位置被覆盖.换句话说,过量的信息被传递到没有足够空间的容器中,而这些信息最终会替换相邻容器中的 ...

  2. 网络攻防实验之缓冲区溢出攻击

    这个实验是网络攻防课程实验中的一个,但是目前我还没有完全搞懂代码,以后有机会来补.也欢迎大佬指点 一.实验目的和要求 通过实验掌握缓冲区溢出的原理,通过使用缓冲区溢出攻击软件模拟入侵远程主机理解缓冲区 ...

  3. 网络安全——缓冲区溢出攻击

    1.缓冲区溢出概述 什么是缓冲区?它是指程序运行期间,在内存中分配的一个连续的区域,用于保存包括字符数组在内的各种数据类型.所谓溢出,其实就是所填充的数据超出了原有的缓冲区边界,并非法占据了另一段内存 ...

  4. 网络安全实验:CCProxy缓冲区溢出攻击

    CCProxy缓冲区溢出实验 一.实验环境说明 溢出对象:CCProxy(一款代理服务器软件,支持FTP和Telnet) 调试工具:CDB.WinDbg.OllyDBG.IDA Pro etc 实验环 ...

  5. 【网络攻防技术】实验四——缓冲区溢出攻击实验

    文章目录 一.实验题目 二.实验步骤 Task1: Get Familiar with the Shellcod Task2: Level-1 Attack Task 3: Level-2 Attac ...

  6. Linux下缓冲区溢出攻击的原理及对策

    前言 从逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数调用.当函数调用发生时,新的堆栈帧被压入堆栈:当函数返回时,相应的堆栈帧从堆栈中弹出.尽管堆栈帧结构的引入为在高级语言中实现 ...

  7. Win32的缓冲区溢出攻击(涉及用WinDbg分析 overflow函数的返回地址所在的地址与buffer首地址的距离 OFF_SET)

    Win32的缓冲区溢出攻击 一.学习过程 二.学习成果(求OFF_SET) 三.扩展阅读 一.学习过程 1.overflow函数的源代码 #include <stdio.h> #inclu ...

  8. Linux下防范缓冲区溢出攻击安全策略(转)

    缓冲区溢出攻击是目前黑客最常用的攻击手段之一,为了应对不断涌现的缓冲区溢出攻击,我们研究了在Linux系统下防范缓冲区溢出的方法,通过研究,总结了在Linux平台下防范缓冲区溢出攻击的安全策略,这些安 ...

  9. java存在溢出攻击吗_缓冲区溢出攻击

    缓冲区溢出漏洞(Buffer Overflow)是最早被发现也是最基础的软件安全漏洞技术类型之一.缓冲区溢出是一种非常普遍.非常危险的漏洞,在各种操作系统.应用软件中广泛存在.利用缓冲区溢出攻击,可以 ...

最新文章

  1. 微服务架构崛起 能否成为下一代云计算?
  2. 成功解决AttributeError: module ‘dask.array.numpy_compat‘ has no attribute ‘take_along_axis‘
  3. server长时间运行query,Ajax刷新被block
  4. 调用非.net系统的Webservice的探索 ( 三 ) -WCF
  5. 【干货】同步与互斥的失败例子
  6. java 中类型后面三个点的用法
  7. sicily 1156 ——虽然Wrong error(原因尚未查明),但温习了一下基础知识
  8. java 查找素数_在Java中查找和检查素数
  9. 爱我或者恨我,我就是我!
  10. 结对编程2-单元测试
  11. PR第三次培训笔记(视频效果 转场)
  12. Linux epoll模型详解
  13. 什么是软件项目管理中的WBS?
  14. android手机拍照软件,安卓手机拍照软件哪个好(五款手机拍摄软件深度横评)...
  15. Spring Cloud与Dubbo优缺点详解
  16. Spring Aop(入门篇)
  17. 阅读Disentangling and Unifying Graph Convolutions for Skeleton-Based Action Recognition(CVPR2020)
  18. 代码从svn到工作空间,Myeclipse中java项目转成Web项目
  19. 【不全】网络工程师术语表
  20. 第五期:写一篇高水平的工程类英文论文(SCI/EI)_图和表(Figure and Table)【论文写作】

热门文章

  1. 我想拿到Offer(一)
  2. IDEA端口被占用解决方案
  3. Junit测试工具使用
  4. vmware虚拟机桥接模式连不上网的罕见原因
  5. 使用Mini-ImageNet训练分类网络
  6. managedQuery和query的区别,
  7. MySQL实现JDBC-基础步骤
  8. Wireguard笔记(三) lan-to-lan子网穿透和多网段并存
  9. windows eclipse PHP开发环境的搭建=Eclipse+Apache+php
  10. http://localhost/打开错误原因之一,eclipse PHP Web Application没反应 解决方法