gaooxinn的个人博客分享 http://blog.sciencenet.cn/u/gaooxinn

博文

浅浅聊聊“缓冲区溢出”这个事儿

已有 3150 次阅读 2013-6-6 21:57 |个人分类:信息安全|系统分类:科研笔记|关键词:学者| 缓冲区溢出

最近读《黑客大曝光》这本书,明显感到知识储备不够。但是,总在书中看到一个名词——缓冲区溢出。似乎这个词令很多信息安全专家谈虎色变,看来她在黑客技术史上绝对占有一席之地。那么,到底什么是“缓冲区溢出”?我来谈谈我的看法。

我们都知道,任何程序在执行的过程中,一定会反复性的向内存中读写数据。每个变量此刻的值都存在内存中。那么,不禁要问,内存如何分辨不同变量的数值,如何保证我们的内存不会张冠李戴?

其实,这内存就好像是洗澡堂的更衣室。即内存中的每个存储区都可以看作是一个更衣柜,每个柜子都有一个唯一与之对应的门牌号。我们洗澡时,交完钱,老板都会给我们一个手牌,上边有个号码。我们洗澡前、洗澡后都会按照手牌号找到自己的更衣柜,脱衣、穿衣,基本不会错。同理,内存的使用也是这个道理,当某个变量的数据要写入内存时,系统首先会给这个变量分配一个地址(就是手牌号),然后将数据存入相应的存储区块(更衣柜)。相应的,读取该变量数据时,也是根据该变量的地址(手牌号)找到对应的存储区块(更衣柜),完成数据的读取。

缓冲区其实就是内存的一个存储区,在这里,我们可以将缓冲区也看做一个“更衣柜”,我们在程序中定义变量后,系统就会立刻为我们分配好一个更衣柜。正常情况下,我们脱衣à入柜à……à出柜à穿衣,就OK了,万事大吉,没有问题。

但是,如果有一天,有个“大哥”级的人物,把春夏秋冬的衣服都穿在身上来洗澡。脱衣,入柜。。。——装不下,使劲塞,塞不下,怎么办?这位大哥真的很生猛,直接在更衣柜的侧壁上掏了个洞,把自己装不下的衣物一股脑塞了进去。但是,隔壁衣柜的主人可糟了秧。隔壁衣柜里原有的很多衣服都被挤了出来,掉到了地上。这就叫做“溢出”!

通过上述例子,我们可以理解。如果我的存储区块最多存16位数据,但是你一次进来了32位数据,必定放不下,放不下怎么办?计算机可不想人们这么虚伪的谦虚,他就是那位生猛的“大哥”——放不下就挤到相邻的区块里去。我才不管你原先放的是什么数据,反正你的主人也看不见!

造成“溢出”的原因我们谈完了,但是,为什么“溢出”这么可怕呢?

问题就出在这些被挤出的“衣物”,我们都能想到,你洗完澡,到更衣室一看,你的underwear散落一地,简直是斯文扫地,情何以堪嘛。

同理,那些被“挤出”的数据到底是什么?是否重要?是否私密?——无法预测。这种不确定性,就太可怕了。万一这些数据是操作系统层面的关键数据,一旦丢失,轻则死机,重则系统崩溃。最严重的是,很多骇客利用这种程序漏洞,专门利用“溢出”来盗取计算机的最高控制权限,不知不觉,你的电脑就成了一颗“傀儡”电脑。被人黑了,都不会知道!

如何避免缓冲区溢出:

1 规范编程

2 给变量、堆栈设置合适的宽度

3 严格检查代码,严防死守

4 应用一些安全性比较好的编译器,VC,TC等等。

哎,这些都是书上说的,我也不太懂。只有等到碰到了,才会深有体会吧。。。。

上网去喽!

 

 



https://m.sciencenet.cn/blog-947101-697202.html

上一篇:一种对节点交换机间通信进行加密的混合密码系统的设计
下一篇:别在“垃圾堆”里育人

2 武夷山 张忆文

该博文允许注册用户评论 请点击登录 评论 (4 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-6-1 21:55

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部