操作系统——缓冲区溢出

一、缓冲区溢出介绍

1988年,世界上第一个缓冲区溢出攻击–Morris蠕虫在互联网上泛滥,短短一夜的时间全世界6000多台网络服务器瘫痪或半瘫痪,不计其数的数据和资料被毁。造成一场损失近亿美元的空前大劫难!

那么,缓冲区溢出到底是怎么一回事呢?

缓冲区溢出就好比一个杯子倒太多的水,洒出来,这叫溢出。它是一种非常普遍、非常危险的漏洞,最常出现在C/C++编写的程序中。

早期,人们还不那么重视安全的时候,往往会使用像strcpy这类不安全函数,这种函数对用户的输入不作任何检查,总之,来自不拒,那么,分配的内存空间是有限的,如果输入超长的字符串,必然会导致溢出。

在这里插入图片描述

讲了这么多,小伙伴会不会有点晕吗?其实,缓冲区溢出很容易理解的。下面我们看一个具体的例子:

#include<stdio.h>#include<string.h>int main(){char str[8];char input[256];gets(input);strcpy(str,input);return 0;}

这段代码存在一个经典的缓冲区溢出漏洞strcpy,为str变量分配了8个字节的空间,输入小于等于8个字符,那没问题:

在这里插入图片描述

但是当我们输入超长的数据时,问题出现了

在这里插入图片描述

2、缓冲区溢出带来的危害

上面是我们自己写的程序,存在漏洞这没什么大惊小怪并不会造成什么恶劣的影响。但是,如果问题出现在我们常用的一些软件,比如操作系统,浏览器,QQ,那后果不堪想象。

缓冲区溢出中,最为危险的是堆栈溢出,因为入侵者可以利用堆栈溢出,在函数返回时改变返回程序的地址,让其跳转到任意地址,带来的危害一种是程序崩溃导致拒绝服务,另外一种就是跳转并且执行一段恶意代码,比如得到系统权限,然后为所欲为。

利用缓冲区溢出攻击,可以导致程序运行失败、系统宕机、重新启动等后果。更为严重的是,它可被利用来执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。

有可能小伙伴你会对病毒/蠕虫没有概念,那我们来举一个简单的例子吧。平时玩电脑的时候,你正在听歌,突然间收到未知的“朋友”发给你的一个m3u音频文件,并引导你进行电击——“这首歌很好听呢,你也听听”。

凑巧的是,你电脑刚好了就装了VUPlayer.exe 这个播放器,不多想,就打开这个音乐想听听看,奇怪的是,软件闪了一下就退出了,你以为是文件损坏了了吧。其实,这个时候,你已经被黑了,没错!这就是那个播放器。

在这里插入图片描述

很普通的播放器,但是它存在致命缓冲区溢出漏洞。我们构造10000个A的m3u文件,然后用调试器附加VUPlayer.exe,打开文件:

在这里插入图片描述

我们看到下面的内存全部被字符A覆盖了,其实就是使用了不安全的lstrcpyA函数导致溢出,这个是栈溢出,还有一种是堆溢出,但本质是一样的。

证明有溢出漏洞之后,往往需要进一步分析写利用代码,不同的人目的不竟相同,类似我的很多安全爱好者之时弹弹计算器(在桌面上不停地弹出计算器工具),可是黑市上的人就会攻击你的系统,盗取机密文件等等。当然,这只是一个简单的实验。

3、目前常见的保护措施

缓冲区攻击的日渐泛滥,微软并未任其张扬,陆陆续续推出了各种保存措施。其中重要的有GS,SafeSeh,ASLR,DEP等,接下来我们针对这些措施进行原理分析:

①.GS保护原理:

通过VC++编译器在函数前后添加额外的处理代码,前部分用于由伪随机数生成的cookie并放入.data节段,当本地变量初始化,就会向栈中插入cookie,它位于局部变量和返回地址之间在缓冲区溢出利用时,如果将恶意代码从局部变量覆盖到返回地址,那么自然就会覆写cookie,当检测到与原始cookie不同时,就会触发异常,最后终止进程。

②.SafeSeh保护

为了防止SEH节点被攻击者恶意利用,微软在.net编译器中加入/sdeseh编译选项引入SafeSEH技术。编译器在编译时将PE文件所有合法的异常处理例程的地址解析出来制成一张表,放在PE文件的数据块(LQAJ)一C0N—FIG)中,并使用shareuser内存中的一个随机数加密,用于匹配检查。

如果该PE文件不支持safesEH,则表的地址为0。当PE文件被系统加载后,表中的内容被加密保存到ntdl1.dll模块的某个数据区。在PE文件运行期间,如果发生异常需要调用异常处理例程,系统会逐个检查该例程在表中是否有记录:如果没有则说明该例程非法,进而不执行该异常例程。

③.ASLR保护

ASLR(地址空间布局随机化)技术的主要功能是通过对系统关键地址的随机化,防止攻击者在堆栈溢出后利用固定的地址定位到恶意代码并加以运行。

④.DEP保护

数据执行保护 (DEP) 是一套软硬件技术,能够在内存上执行额外检查以防止在不可运行的内存区域上执行代码

这些保护机制的出现,一度使得攻击难度大大增加,但攻击者们也不是吃素的,他们也在研究绕过这些保护的办法。所谓千里之堤溃于蚁穴,对于上面的保护,攻击者只要找到了它们的一个弱点,便可以突破所有防线,实现攻击。攻击与防护,不断在对抗,可以预见,在未来一段时间,这种游戏还将持续上演。

但是,现在的漏洞门槛比十年前高了N倍,笔者在实际中也常常遇到有漏洞却不能利用的情况。但是也不要灰心,老的技术被淘汰,新的技术又会出来,本属正常,但像缓冲区溢出这种经典的东西,无论什么时候,都值得我们学习。

注:

本文来自:https://zhuanlan.zhihu.com/p/21924662

溢出实例见:
https://www.cnblogs.com/clover-toeic/p/3737011.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313576.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从壹开始学习 NetCore 新篇章 ║ Blog.Core 开发社之招募计划书

宫哈喽大家好&#xff0c;国庆马上就要来了&#xff0c;在新的第四季度来临之际&#xff0c;祝大家年末能顺顺利利&#xff0c;解决所有的难题。大家可能从我的标题里也能看的出来&#xff0c;老张又要耍花样&#xff0c;搞事情了&#xff0c;近来随着 netcore 3.0 的正式推出&…

操作系统——内存管理——分段和分页

一、 物理地址和逻辑地址 物理地址&#xff1a;加载到内存地址寄存器中的地址&#xff0c;内存单元的真正地址。在前端总线上传输的内存地址都是物理内存地址&#xff0c;编号从0开始一直到可用物理内存的最高端。这些数字被北桥(Nortbridge chip)映射到实际的内存条上。物理地…

Kubernetes攻略之新手上路

在公有云、私有云和混合云的环境中&#xff0c;Kubernetes已经成为规模化部署容器应用的事实标准。最大的公有云平台AWS、谷歌云、Azure、IBM云和Oracle云目前都提供Kubernetes的管理服务&#xff08;Managed Services&#xff09;。各大互联网公司也开始将服务部署到Kubernete…

操作系统——深入理解虚拟内存机制

本文来自&#xff1a;https://www.jianshu.com/p/13e337312651 概述 现代操作系统了提供了一种对主存的抽象概念&#xff0c;叫做虚拟内存。它为每个进程提供了一个非常大的&#xff0c;一致的和私有的地址空间。虚拟内存提供了以下的三个关键能力&#xff1a; 它为所有进程提…

dotNET Core 中怎样操作 AD?

做企业应用开发难免会跟 AD 打交道&#xff0c;在之前的 dotNET FrameWork 时代&#xff0c;通常使用 System.DirectoryServices 的相关类来操作 AD &#xff0c;在 dotNET Core 中没有这个命名空间&#xff0c;在张善友大佬的推荐下&#xff0c;知道了 Novell.Directory.Ldap。…

操作系统——页面置换算法

一、页面置换算法简介 操作系统将内存按照页的进行管理&#xff0c;在需要的时候才把进程相应的部分调入内存。当产生缺页中断时&#xff0c;需要选择一个页面写入。如果要换出的页面在内存中被修改过&#xff0c;变成了“脏”页面&#xff0c;那就需要先写会到磁盘。页面置换…

在树莓派4上安装 .NET Core 3.0 运行时及 SDK

点击上方蓝字关注“汪宇杰博客”导语我最近买了个树莓派4&#xff0c;4GB内存高富帅配置&#xff0c;并安装了官方操作系统Raspbian。今天我成功运行了一个ASP.NET Core 3.0 应用程序。我们来看看怎么弄的吧~ARM32 还是 ARM64?需要说明的是&#xff0c;目前无法在树莓派 4 上运…

.NET生成漂亮桌面背景

前言一天&#xff0c;我朋友指着某某付费软件对我说&#xff0c;这个东西不错&#xff0c;每天生成一张桌面背景&#xff0c;还能学英语&#xff08;放置名人名言和翻译&#xff09;&#xff01;我说&#xff0c;这东西搞不好我也能做&#xff0c;然后朋友说&#xff0c;“如果…

Mysql 执行流程

mysql执行一个查询的过程&#xff0c;到底做了些什么&#xff1a; 客户端发送一条查询给服务器&#xff1b;服务器先检查查询缓存&#xff0c;如果命中了缓存&#xff0c;则立刻返回存储在缓存中的结果。否则进入下一阶段。服务器段进行SQL解析、预处理&#xff0c;在优化器生成…

Autofac的AOP面向切面编程研究

我的理解是 把系统性的编程工作封装起来 》我给这个取个名字叫 “Aspect”&#xff0c;然后通过AOP技术把它切进我们的业务逻辑代码 》 “业务“这样的好处&#xff1a;“Aspect” 和 “业务” 相互独立&#xff0c;既可以让“业务” 用到了 “Aspect” 又让2者互相独立不耦合&…

计算机网络原理梳理丨清晰认识 TCP/IP 协议,图解秒懂!

作者&#xff1a;MobMsg&#xff0c;资深全端工程师一枚&#xff0c;架构师社区合伙人&#xff01;TCP/IP 协议族Internet 的核心协议就是 TCP/IP&#xff0c;广泛应用于局域网和广域网&#xff0c;目前已有20年发展史&#xff0c;是现用国际通行标准。TCP/IP 是个协议族&#…

MySQL 覆盖索引、最左前缀原则、索引下推

1、覆盖索引 1.1 概念 索引是高效找到行的一个方法&#xff0c;当能通过检索索引就可以读取想要的数据&#xff0c;那就不需要再到数据表中读取行了。如果一个索引包含了&#xff08;或覆盖了&#xff09;满足查询语句中字段与条件的数据就叫做覆盖索引。 1.2 判断标准 使用…

Entity Framework Core生成的存储过程在MySQL中需要进行处理及PMC中的常用命令

在使用Entity Framework Core生成MySQL数据库脚本&#xff0c;对于生成的存储过程&#xff0c;在执行的过程中出现错误&#xff0c;需要在存储过程前面添加delimiter //附&#xff1a;可以使用Visual Studio中的程序包管理器控制台执行Entity Framework Core中的迁移命令。PMC …

Exceptionless 5.0.0本地Docker快速部署介绍

在之前我有专门写两篇文章介绍过Exceptionless这款开源日志项目的使用和部署&#xff0c;但是当时是基于4.1.0版本&#xff08;2017年的release&#xff09;&#xff0c;时隔两年多Exceptionless也推出了5.0.0版本。&#xff08;1&#xff09;&#xff08;2&#xff09;01—关于…

数据库事务及隔离级别

一、事务的基本要素&#xff08;ACID&#xff09; 1、原子性&#xff08;Atomicity&#xff09;&#xff1a;事务开始后所有操作&#xff0c;要么全部做完&#xff0c;要么全部不做&#xff0c;不可能停滞在中间环节。事务执行过程中出错&#xff0c;会回滚到事务开始前的状态…

定了!10 月 8 日!Jupyter Notebook 原生支持将正式来到 VS Code!

北京时间 2019 年 9 月 21 日&#xff0c;在 PyCon China 2019 大会上&#xff0c;前不久&#xff0c;我们已经可以尽管如此&#xff0c;还是有许多童鞋来询问这个功能何时能正式发布。现在&#xff0c;我们可以在 VS Code Python 插件的 Release Plan 看到正式的发布时间已经确…

图解MySQL 内连接、左连接、右连接

一、准备工作 用两个表&#xff08;a_table、b_table&#xff09;&#xff0c;关联字段a_table.a_id和b_table.b_id来演示一下MySQL的内连接、外连接&#xff08; 左(外)连接、右(外)连接、全(外)连接&#xff09;。 MySQL版本&#xff1a;Server version: 5.6.31 MySQL Comm…

微软想将新版Edge浏览器引入Linux

继推出 WSL2、将 exFAT 技术添加至 Linux 内核&#xff0c;和宣布第一届微软 Linux 大会后&#xff0c;微软再次瞄准了 Linux。这次 Linux 用户将很可能迎来新版 Edge 浏览器。微软网络技术程序经理 Sean Larson 在 Twitter 上发布了一条消息&#xff0c;表示 Edge 开发团队正在…

一套代码同时支持.NET Framework和.NET Core

在.NET Core的迁移过程中&#xff0c;我们将原有的.NET Framework代码迁移到.NET Core。如果线上只有一个小型的应用还好&#xff0c;迁移升级完成后&#xff0c;只需要维护.NET Core这个版本的代码。但是&#xff0c;如果是一个大型分布式应用&#xff0c;几百台Server&#x…

从壹开始 [Admin] 之五 ║ 实现『按钮』级别权限配置

正文一、前情回顾哈喽大家好&#xff0c;在这个欢庆的日子里&#xff0c;老张祝大家工作都能蒸蒸日上&#xff01;今天正好也是社团成立的第一天&#xff0c;我也是希望今天能是个纪念日&#xff0c;沾沾这个大喜庆&#xff01;放假这两天&#xff0c;倒是学到了很多东西&#…