首页
社区
课程
招聘
[原创]浅浅聊聊“缓冲区溢出”这个事儿
发表于: 2013-10-29 00:28 3531

[原创]浅浅聊聊“缓冲区溢出”这个事儿

2013-10-29 00:28
3531

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

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

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

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

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

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

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

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

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

如何避免缓冲区溢出:

1 规范编程

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

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

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

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

上网去喽!
(本文是我的博文,为了早点升级成为初级会员,便拿来垒砖了。。。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 5
支持
分享
最新回复 (2)
雪    币: 215
活跃值: (90)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
溢出技术十年前很流行,现在估计很少也很难利用了,以后估计会绝迹。现在都是些use after free之类,而且仅限于有脚本的ie,以后的黑客技术估计只能用一些配置错误,过滤不严的漏洞了。
2013-10-29 12:07
0
雪    币: 13
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼主受教了
2013-10-30 22:18
0
游客
登录 | 注册 方可回帖
返回
//