
第 10期 王 业 君等 :缓 冲 区溢 出攻 击 原理 与 防范 的研究 ·101·
缓 冲 区溢 出攻 击 原 理 与 防 范 的研 究
王业 君 ,倪惜珍 ,文伟平 ,蒋建春
(中国科 学 院 软件 研 究所 信 息安 全技 术 工程研 究 中心 ,北 京 100080)
摘 要 :缓冲区溢 出攻击是网络攻击事件中最常用的一种攻击方式,成为系统和 网络安全 中亟待解决的重要 问
题。在分析缓冲区溢出攻击原理的基础上 ,说 明了攻击的成 因,然后描述了目前常见的攻击类型 ,最后给 出了现
有 的 防范措施 ,进 而提 出了一种 新的 通过 对编译 器及 相 关 系统 级 函数 进 行修 改 来解 决该 问题 的方案 。
关键 词 :缓 冲 区溢 出攻 击 ;系统安 全 ;边 界检 查
中 图法分 类号 :TP393.08 文 献标识 码 :A 文章编 号 :1001—3695(2005)10—0101—04
Research on Principle and Defense of Buffer Overflow Attacks
WANG Ye-jun,NI Xi—zhen,WEN Wei—ping,JIANG Jian—chun
(Engineering Research Centerfor Information Security Technology,Ira ̄titute ofsoftware,Chinese Academy ofSciences,Belting 100080,China)
Abstract: The buffer overfl OW attacks have been the most common foFin in the network attacks and become a predominant
problem in the system and network security area.After the principle of the buffer overflow attack is explained,this paper ana—
lyzes the causes leading to the attacks,Then the usual attack types the attackers often exploit are presented.Last,the com mon
measures to defend these attacks and my own idea about the solution of this problem by modifying the compiler and the relevant
functions of the system are given.
Key words: Buffer Overfl ow Attack; System Security; Edge Checking
1 引言
自从缓 冲区溢出漏洞被发现 以来 ,缓 冲区溢出攻击一直 是
网络攻 击事 件中用得最多的一种攻击方式 ,成为系统和 网络 安
全 中亟待解决 的重要 问题 。早在 1988年 ,美 国康 奈尔 大学 计
算机科学系研究生莫 里斯 就利用 UNIX Fingered不 限输入长 度
等漏洞感染 了互 联 网 中的数万 台机 器… ;2003年 8月席 卷 全
球 的“冲击 波(Worm.MSBlast)”[2 J和 2004年 5月 出现 的“震荡
波 (Worm .Sasser)”[31分别利用了 Windows系统 RPC DCOM 和
I.SASS服务 的缓 冲区溢出漏洞进行攻击 。
在 1CAT 2003-9—12号公 布的 10大 漏洞排名 中位居 榜首 的
仍是缓冲 区溢 出漏洞 ;从 CERT公布的到 去年为止的统计数
据(图 1)中可 以看 出 ,无论是在绝对数量上 还是相对 比例 上缓
冲区溢 出攻击的 问题正在扩大 。
50
40
30
20
lO
0
的 建 议 数
图 1 CERT近 五 年 发 出 的 建议 统 计
由于缓 冲区溢出攻击危害 的严重性 ,使它至今仍是 人们 研
究 的重要课题 ,文章在总结 当前 已有研 究成果 的基础上提 出了
收稿 日期 :2004.09—26;修 返 日期 :2004—10—28
基金 项 目: 国 家 自然 科 学 基 金 资 助 项 目 (60083007);国 家
“973”计划资助项 目(G1999035810)
解决该问题 的方 案。
2 攻 击原 理及 危 害
要对缓 冲区溢出攻击的原理有个 清楚认识 ,就必须先对可
执 行文件执行时 的内存 结构 有个 总体 了解 。一般程 序从 逻辑
上 可分为两大部分 :代码 区和数 据区 。数据 区从逻辑 上可划分
为静态数据 、堆栈和堆三部 分 ,它们 之 间的 区别依赖 于各部 分
对 应内存分配 的时间和方式以及数据存储 的位置 。总体来说 ,
Windows平 台下程序 的内存结构如 图 2所示 ,Linux或 UNIX平
台下程序的 内存结构 如图 3所示 。
低 端 内存
图 2 Windows F程 序
在 内 存 中 的 结 构
高 端 内 存
低端内 存
图 3 UNIX下 程 序在
内存 中 的 结构
通 常所说的缓 冲区溢出指的就是 “堆栈 和堆 ”这 两部分 空
间 中产生 了溢出 。
正如微 软给 缓 冲区溢 出所 下定 义 中所说 的,缓 冲 区溢
出是 因为人 们向程序 中提 交 的数据超 出 了数据接 收 区所能 容
纳 的最 大长度 ,从 而使 提交的数据超过相 应的边界而进入 了其
他 区域 。如果 是人为蓄意 提交超 长数 据且 对系统 正常 运行 造
成 了不 良影 响 ,那 么我们 就说发生 了缓 冲区溢出攻击 。
缓 冲区溢 出攻击通常会带 来以下后果 :① 过长 的字符 串覆
盖 了相邻 的存储单 元而造 成程序 异常 ,严 重 的会 造成 死机 、系
统或进程重启等 ;②可 让攻击者 执行 恶意 代码或 特定 指令 ,甚
至获得超级权 限等 ,从 而引发其他的攻击 。
维普资讯 http://www.cqvip.com