缓冲区溢出攻击的工作原理及防范策略

合集下载

第7章缓冲区溢出攻击及防御技术ppt课件

第7章缓冲区溢出攻击及防御技术ppt课件

2024/3/29
网络入侵与防范技术
7
篮球比赛是根据运动队在规定的比赛 时间里 得分多 少来决 定胜负 的,因 此,篮 球比赛 的计时 计分系 统是一 种得分 类型的 系统
7.1 缓冲区溢出概述
隐蔽性:
第三,由于漏洞存在于防火墙内部的主机上,攻击者可 以在防火墙内部堂而皇之地取得本来不被允许或没有权 限的控制权;
2024/3/29
网络入侵与防范技术
1
篮球比赛是根据运动队在规定的比赛 时间里 得分多 少来决 定胜负 的,因 此,篮 球比赛 的计时 计分系 统是一 种得分 类型的 系统
7.1 缓冲区溢出概述
什么是缓冲区?它是包含相同数据类型实例的一个 连续的计算机内存块。是程序运行期间在内存中分 配的一个连续的区域,用于保存包括字符数组在内 的各种数据类型。
Windows系统中缓冲区溢出的事例更是层出不穷。 2001年“红色代码”蠕虫利用微软IIS Web Server中
的缓冲区溢出漏洞使300 000多台计算机受到攻击; 2003年1月,Slammer蠕虫爆发,利用的是微软SQL
Server 2000中的缺陷; 2004年5月爆发的“振荡波”利用了Windows系统的活
产生碎片不同 对堆来说,频繁的new/delete或者malloc/free势必会造成 内存空间的不连续,造成大量的碎片,使程序效率降低。 对栈而言,则不存在碎片问题,因为栈是先进后出的队列, 永远不可能有一个内存块从栈中间弹出。
生长方向不同 堆是向着内存地址增加的方向增长的,从内存的低地址向高 地址方向增长。 栈的生长方向与之相反,是向着内存地址减小的方向增长, 由内存的高地址向低地址方向增长。
1999年w00w00安全小组的Matt Conover写了基于 堆缓冲区溢出专著,对堆溢出的机理进行了探索。

缓冲区溢出原因及解决

缓冲区溢出原因及解决

第三讲缓冲区溢出n1 缓冲区溢出问题简介n2 几种典型的缓冲区溢出n3 防范措施缓冲区溢出1 缓冲区溢出问题简介缓冲区溢出是一种常见的漏洞.据统计,通过缓冲区溢出进行的攻击占所有系统攻击总数的80%以上.这种错误的状态发生在写入内存的数据超过了分配给缓冲区的大小的时候,就像一个杯子只能盛一定量的水,如果放到杯子中的水太多,多余的水就会一出到别的地方。

由于缓冲区溢出,相邻的内存地址空间被覆盖,造成软件出错或崩溃。

如果没有采取限制措施,可以使用精心设计的输入数据使缓冲区溢出,从而导致安全问题。

缓冲区溢出缓冲区溢出问题的历史很长一段时间以来,缓冲区溢出都是一个众所周知的安全问题, C程序的缓冲区溢出问题早在70年代初就被认为是C语言数据完整性模型的一个可能的后果。

这是因为在初始化、拷贝或移动数据时,C语言并不自动地支持内在的数组边界检查。

虽然这提高了语言的执行效率,但其带来的影响及后果却是深远和严重的。

•1988年Robert T. Morris的finger蠕虫程序.这种缓冲区溢出的问题使得Internet几乎限于停滞,许多系统管理员都将他们的网络断开,来处理所遇到的问题. •1989年Spafford提交了一份关于运行在VAX机上的BSD版UNIX的fingerd的缓冲区溢出程序的技术细节的分析报告,引起了部分安全人士对这个研究领域的重视•1996年出现了真正有教育意义的第一篇文章, Aleph One在Underground发表的论文详细描述了Linux系统中栈的结构和如何利用基于栈的缓冲区溢出。

缓冲区溢出Aleph One的贡献还在于给出了如何写开一个shell的Exploit的方法,并给这段代码赋予shellcode的名称,而这个称呼沿用至今,我们现在对这样的方法耳熟能详--编译一段使用系统调用的简单的C程序,通过调试器抽取汇编代码,并根据需要修改这段汇编代码。

•1997年Smith综合以前的文章,提供了如何在各种Unix变种中写缓冲区溢出Exploit更详细的指导原则。

网络攻击与防御-课程设计

网络攻击与防御-课程设计

甘肃政法学院本科课程设计(设计)题目缓冲区溢出攻击的原理分析及防范计算机科学院院(系) 计算机科学与技术专业09 级计本一班学号************姓名李磊指导教师武光利成绩完成时间年月缓冲区溢出攻击的原理分析及防范【摘要】:利用缓冲区溢出漏洞进行攻击自诞生以来始终是网络攻击常用的手段,对信息安全危害极大。

如何检测缓冲区溢出成为研究的一个热点,并涌现出了各种各样的方案。

本次课程设计的目的旨在分析攻击的原理及防范措施。

关键字::缓冲区溢出;漏洞;攻击;权限Abstract:Utilization of buffer overflow attacks since the birth is always the network attack means used for information security, great harm. How to detect buffer overflow has become a research hotspot, and emerged in a variety of programmes. The purpose of the curriculum design is aimed at the analysis of the attack principle and prevention measures.Key words:Buffer overflow;Loophole;Attack;Jurisdiction目录第一章引言 (1)第二章系统漏洞 (1)2.1漏洞的概念 (1)2.2漏洞的分类 (2)2.2.1 系统配置不当 (2)2.2.2 口令失窃 (2)2.2.3 嗅探未加密通讯数据 (3)2.2.4 设计存在的缺陷 (3)2.2.5 软件编写存在bug (3)第三章本地缓冲区溢出的原理及实现 (4)3.1缓冲区的概念 (4)3.2缓冲区溢出攻击原理 (5)3.3缓冲区溢出实现方式 (6)3.3.1利用跳转指令实现溢出 (6)3.3.2定位参数地址实现溢出 (8)3.3.3溢出实现用户权限提升 (14)第四章基于缓冲区溢出的防御方法 (15)4.1关闭不需要的特权程序 (16)4.2关闭或修改系统的某些版本信息 (16)4.3使堆栈向高地址方向增长 (17)4.4及时给程序漏洞打补丁 (17)4.5提供高级的用户帮助 (17)第五章总结 (18)参考文献 (19)缓冲区溢出攻击的原理分析及防范第一章引言目前我国互联网已经进入宽带时期,网络用户和网络资源持续增长。

缓冲区溢出攻击实验报告

缓冲区溢出攻击实验报告

缓冲区溢出攻击实验报告班级:10网工三班学生姓名:谢昊天学号:1215134046实验目的和要求:1、掌握缓冲区溢出的原理;2、了解缓冲区溢出常见的攻击方法和攻击工具;实验内容与分析设计:1、利用RPC漏洞建立超级用户利用工具scanms.exe文件检测RPC漏洞,利用工具软件attack.exe对172.18.25.109进行攻击。

攻击的结果将在对方计算机上建立一个具有管理员权限的用户,并终止了对方的RPC服务。

2、利用IIS溢出进行攻击利用软件Snake IIS溢出工具可以让对方的IIS溢出,还可以捆绑执行的命令和在对方计算机上开辟端口。

3、利用WebDav远程溢出使用工具软件nc.exe和webdavx3.exe远程溢出。

实验步骤与调试过程:1.RPC漏洞出。

首先调用RPC(Remote Procedure Call)。

当系统启动的时候,自动加载RPC服务。

可以在服务列表中看到系统的RPC服务。

利用RPC漏洞建立超级用户。

首先,把scanms.exe文件拷贝到C盘跟目录下,检查地址段172.18.25.109到172.18.25.11。

点击开始>运行>在运行中输入cmd>确定。

进入DOs模式、在C盘根目录下输入scanms.exe 172.18.25.109-172.18.25.110,回车。

检查漏洞。

2.检查缓冲区溢出漏洞。

利用工具软件attack.exe对172.18.25.109进行攻击。

在进入DOC 模式、在C盘根目录下输入acctack.exe 172.18.25.109,回车。

3,利用软件Snake IIS溢出工具可以让对方的IIS溢出。

进入IIS溢出工具软件的主界面.IP:172.18.25.109 PORT:80 监听端口为813单击IDQ溢出。

出现攻击成功地提示对话框。

4.利用工具软件nc.exe连接到该端口。

进入DOs模式,在C盘根目录下输入nc.exe -vv 172.18.25.109 813 回车。

缓冲区溢出黑客攻击及防范技术的研究

缓冲区溢出黑客攻击及防范技术的研究
摘 要: 从缓 冲区溢 出的原理 出发 , 细的阐述 了缓冲 区溢出的黑客攻击方法及如何防范黑客 攻击的技术 , 详 确保 网络运行 的安全和可靠 , 在计 算机 网络安全 管理 中具有较好的 实用价值。
关键词: 黑客 ; 网络 攻 击 ; 冲 区 溢 出 ; 范 缓 防
1 概 述
试 探 性 攻 击 , 后 执 行 类 似 “xes ) 执行 代 码 来 获得 具 有 r t 限 的 然 ee(h 的 o 权 o
的就是使不进行边界检查或者有其他弱点的缓 冲区溢 出, 这样就扰乱了 程序正常的执行顺序 。通过使一个缓 冲区镒 出, 攻击者可以用暴力的方 法改写相邻的程序空间而直接跳过 了系统的检查 。 总之 , 冲区溢 出是一种在各种操作 系统 、 用软件 中广泛存在危 缓 应 险的漏洞 , 冲区溢出攻 击可以导致程序运行失败 、 缓 系统崩溃等后果 。 更 31 缓 冲 区溢 出 . 为 严 重 的是 , 以利 用 它执 行 非 授 权指 令 , 至 可 以 取 得 系统 特 权 , 而 可 甚 进 堆 栈 溢 出 ( 称 缓 冲 区溢 出 )攻击 是 最 常 用 的 黑 客攻 击技 术 之 一 。 进 行 各 种 非 法 操作 。第 一 个 缓 冲 区攻 击 — — Mo s 虫 , 生 在 十 多 年 又 m 蠕 发 它 0 0多 台 网络 服 务 器 瘫 痪 。 U I 自身 以及 其 上 层 的许 多应 用 程 序都 是用 C语 言编 写 的 , NX C语 言 不 前 , 曾造 成 了全 世 界 6 0 检查 缓 冲 区 的边 界 。 在某 些 情 况 下 , 如果 用 户 输 入 的 数据 长度 超 过 应 用 4 缓 冲 区 溢 出攻 击 的 防 范 程 序 给定 的 缓 冲 区 , 会 覆 盖 其 他 数 据 区 , 称 作 “ 栈 溢 出或 缓 冲 溢 就 这 堆 传统安全工具如防火墙对缓冲区溢出攻击无 能为力 , 因为攻击者传 出” 。 输 的数 据 分 组 并 无异 常 特 征 , 有 任 何 欺 骗 。 另外 可 以用 来 实施 缓 冲 区 没 般情 况 下 , 盖 其 他 数 据 区 的数 据 是 没 有 意 义 的 , 多 造 成应 用 溢出攻击的字符串非常多样化 , 覆 最 无法与正常数据有效地进行区分。缓 冲 程序错误 。 但是 , 如果输入的数据是经过黑客精心设计的 , 覆盖堆栈的数 区溢 出攻击不是一种窃密和欺骗的手段 , 而是从计算机系统的最低层发 据恰恰是黑客的入侵程序代码, 黑客就获取了程序的控制权。如果该程 起攻击 , 因此身份验证和访 问权限等安全策略对于缓冲区溢出攻击形 同 序恰好是以 ro运行 的, ot 黑客就 获得 了 ro 权 限, ot 然后就 可以编译黑 客 虚设 。通常采用 以下防范措施 。 程序 、 留下入侵后 门, 实施进一步攻击。 按照这种原理实现的黑客入侵就 1 编写攻击防范的代码。缓冲区溢 出根源在于程序, 由编程错误 ) 是 叫做“ 堆栈溢出攻击” 。 引 起 的 。 防止 利 用缓 冲 区溢 出 发 起地 攻 击 , 键 在 于 程序 开发 者 在 开 发 关 3 缓 冲 区溢 出攻 击 的原 理 . 2 程序时仔细检查溢出情况 , 不允许数据溢出缓冲区。 ) 2 非执行的缓冲区。 当正 常 的使 用 者操 作 程 序 的 时候 , 进 行 的操 作 一 般 不 会 超 出程 序 使被攻击程序的数据段地址空间不可执行 , 所 从而使 得攻击者不可能执行 的运行范围, 而黑客却利用缓冲长度界限 向程序输入超过其常规长度的 被植入 的攻击程序输入缓冲区的代码 , 这种技术被称为非执行的缓冲区 内容 , 造成缓 冲区的溢 出从 析破坏程序 的堆栈 , 使程序运行 出现特殊 的 技 术 。 ) 组 边 界 检查 。数组 边 界 检 查 完 全 不会 有 缓 冲 区溢 出 的产 生和 3数 问题转 而执行其他指令 , 以达到攻击的 目的。造成缓冲区溢出的原因是 攻击。 只要数组不能被溢出 , 溢出攻击也就无从谈起 。 为了实现数组边界 程序没有仔细检查用户输入的参数 , 属于程序开发过程考虑不周 到的结 检查 , 应检查所有数组操作范围 , 还可 以用一些优化技术来减少检查的 果。 次数。4 程序指针完整性检查。程序指针完整性检查指 的是在程序指针 ) 通 过 制造 缓 冲区 溢 出使 程 序 运 行 一 个用 户 sel hl ,再 通 过 sel 行 被 引 用之 前 检 测 到 它 的变 化 。 因 此 , h l执 即使 一 个 攻 击 者 成 功地 改变 了程 序 其他 命 令 。如果 该 程 序属 于 ro 且有 si 限 的话 。 击 者 就 获得 了一 的 指 针 , 于 系统 事 先 检 测 到 了 指 针 的 变 化 , 此 这 个 指 针 将 不 会 被 使 ot ud权 攻 由 因 个 有 ro权 限 的 sel可以 对 系统 进 行 任 意操 作 了 。 ot hl , 用 。这 种 方 法 不 能解 决 所 有 的缓 冲 区溢 出 问题 , 是 在 性 能 上 有 很 大 的 但 缓冲区溢出攻击之所以成为一种常见网络安全攻击手段 , 其原因在 优 势 , 且 兼 容性 也 很 好 。 而 于缓冲区溢 出漏洞普遍并且易于实现。 而缓冲区溢 出成为远程攻击的主 此外 , 用户需要经常登录操作系统和应用程序提供商 的网站 , 跟踪 要手段原 因在于缓 冲区溢出漏洞给予了攻击者想要的一切 , 如植入并且 公 布 的 系 统 漏洞 , 时 下 载补 丁程 序 , 补 系统 漏 洞 。 及 弥 执 行攻 击 代 码 。 植 入 的 攻 击代 码 以一定 的权 限 运 行有 缓 冲区 溢 出 漏洞 被 总 结 的程序从而得 到被攻击主机的控制权 。 冲区溢 出是一种常见 的网络攻击方法 ,它易于攻击 而且危害性大 , 在 19 年 Ln o 98 icl 验 室 用来 评 估 入 侵 检 测 的 五 种远 程 攻 击 中 , n实 有 给系统的安全带来了巨大的危险。因此 , 如何及时有效地检测出计算机 两种是缓冲区溢 出。而在 19 98年 C R E T的 l 3份建议 中, 9份是与缓 网络系统入侵行为 , 有 已成为网络安全信息管理的一项重要量工作。 冲 区溢 出 有关 的 。 19 , 少 有半 数 的建 议 是 和缓 冲 区有 关 的 。在 在 99年 至 参 考 文 献 B grq的调 查 中 ,有 分 之 二 的 被 调 查 者 认 为缓 冲 区溢 出漏 洞 是 一 个 []赵 有 恩 , 守 军. 冲 区 溢 出攻 击 的 分析 及 防 范 『BOL.t :w . ut a 1 周 缓 E / J t / ww hp/

c语言缓冲区溢出原理

c语言缓冲区溢出原理

c语言缓冲区溢出原理摘要:1.缓冲区溢出概念2.C语言中可能导致缓冲区溢出的原因3.缓冲区溢出的防范方法4.总结正文:正文:缓冲区溢出是计算机科学中的一种常见错误,它在编程中可能导致严重的安全问题。

本文将解释缓冲区溢出的概念,探讨其原因、危害以及如何预防。

一、什么是缓冲区溢出缓冲区溢出是指程序中的缓冲区无法容纳输入的数据,从而覆盖了其他内存区域。

这种情况通常发生在程序没有正确处理输入数据长度的情况下,导致数据超过了缓冲区的容量。

二、缓冲区溢出的原因1.字符串操作函数:在C语言中,一些字符串操作函数(如gets、strcpy 等)没有对输入数据长度进行限制,可能导致缓冲区溢出。

2.动态内存分配:在使用动态内存分配函数(如malloc)分配内存时,如果未正确初始化或超量分配,可能导致缓冲区溢出。

3.函数调用:在调用函数时,如果传入的参数长度超过预期,可能导致缓冲区溢出。

三、缓冲区溢出的危害1.程序崩溃:缓冲区溢出可能导致程序崩溃,因为覆盖的内存区域可能包含程序的重要数据或代码。

2.数据损坏:缓冲区溢出可能导致数据损坏,因为覆盖的内存区域可能包含程序处理数据的正确结果。

3.安全漏洞:缓冲区溢出可能被恶意利用,攻击者可以通过注入恶意数据来覆盖内存中的安全关键数据,如密码、加密密钥等。

四、如何预防缓冲区溢出1.检查输入数据长度:在对输入数据进行处理之前,应检查数据长度,确保不会超过缓冲区容量。

2.使用安全的字符串操作函数:尽量使用带有长度限制的字符串处理函数,如strncpy、strncat等。

3.初始化缓冲区:在使用动态内存分配时,应初始化缓冲区,并确保分配的内存空间足够大。

4.使用边界检查:在编写程序时,对输入数据进行边界检查,确保数据长度符合预期。

“溢出攻击”的讲解和防护

“溢出攻击”的讲解和防护

“溢出攻击”的讲解和防护随着网络普及,大量公开的Shellcode(“溢出”代码)与溢出攻击原理都能在各大安全网站中找到,也由此衍生了一系列安全隐患,很多稍微了解网络安全知识的人都可以利用现成的攻击软件轻易发动溢出攻击获得服务器权限。

1.什么是“溢出攻击”?“溢出攻击”就像是将很多沙子倒入装满水的容器时,水就会溢出来一样。

目前,大多溢出攻击都是针对缓冲区的溢出。

当缓冲区溢出时,过剩的信息对电脑内存中原有内容进行完全替换,如未进行备份,你的内容就永远丢失了。

现在网上公布的攻击程序不仅具有破坏文件的功能,一般还会得到系统权限的CMDSHELL(管理命令行),那它又是如何实现的呢?“溢出攻击”在对缓冲区中的文件进行替换的同时,还会执行一些非法程序,从而得到命令行下的管理员权限,之后攻击者再通过命令行建立管理员账号,对电脑进行控制。

2.“溢出攻击”的实现一般入侵者在网上了解或发现了可以进行溢出攻击的漏洞后,使用缺陷扫描器(如全面扫描的X-SCAN、针对单一漏洞扫描的IIS WEBDAV等工具)找到并确认存在远程溢出漏洞的电脑,接着便使用利用攻击代码编程成功的Exploit(攻击程序)发送Shellcode攻击,确认远程溢出成功后使用NC或TELNET等程序连接被溢出主机的端口从而得到CMDSHELL。

比如前段时间危害特别大的MS05039溢出漏洞,就是先利用MS05039Scan来扫描有漏洞的电脑(见图1),然后打开两个命令提示符窗口,一个用来得到CMDSHELL的NC(见图2),一个执行溢出攻击程序(见图3),当执行攻击程序后,就得到了系统权限的CMDSHELL(见图4)。

图1图2图3图43.如何对溢出攻击进行防护?说到防护,首先定时更新有效补丁,微软个官方补丁发布下载地址是/china/。

但如果攻击者用的是尚未发布补丁的攻击程序呢?所以打补丁是有效,但不是惟一的方法。

下面就来看看如何手动设置,对溢出攻击进行防御。

缓冲区溢出攻击的原理分析与防范

缓冲区溢出攻击的原理分析与防范

3、缓冲区溢出的防御方法
3.1、写正确的代码的方法 3.2、通过操作系统使得缓冲区不可执行,从而阻止攻击者植入攻击代码 3.3、利用编译器的数组边界检查来实现缓冲区的保护 3.4、在程序指针失效前进行完整性检查
4、总结与展望
4.1全文总结
4.2 展望
5、参考文献
本课题的研究意义
随着信息与网络技术的发展,以及这些技术在军事领域 的不断渗透,计算机网络已成为连接未来信息化战场的枢纽。 对计算机的攻击,能够获得大量宝贵的情报以及达到其它武 器系统所不能及的效果。因此对以计算机为基础的网络攻击 与防护就自然成为军事领域密切关注的问题。近年来,缓冲 区溢出漏洞的广泛性和破坏性受到国内外信息安全研究领域 的极切关注。从1988年CERT(计算机紧急响应小组)成立以来, 统计到的安全威胁事件每年以指数增长。缓冲区溢出攻击作 为网络攻击一种主要形式占所有系统攻击总数的80%以上[1]。 这种缓冲区溢出漏洞可以发生在不同的操作系统以及不同的 应用程序上。 缓冲区溢出攻击是黑客攻击的主要手段,给网络信息安全 带来了越来越大的危害。已有的防御手段研究相对滞后,目 前国内外的研究大多集中在某个具体漏洞的利用与防范上, 缺乏全面的研究。并且现有的缓冲区溢出防御手段也存在诸 多不足之处。论文主要是对缓冲区溢出攻击的原理分析与防 范进行深入研究。 论文首先介绍了缓冲区和堆栈的基本概念,研究并总结了 缓冲区溢出的原理和过程,并介绍了一些常用的攻击方法。 在此基础上,论文研究并总结了目前防御缓冲区溢出攻击的 一些常用方法,主要从主客观两方面来讨论。主观方面,主 要是要提高程序员编写代码的质量,形成良好的编程风格; 客观方面,主要是从系统和软件做一些相关的检查和优化。
缓冲区溢出影响及危害
• 在几乎所有计算机语言中,不管是新的语言还是旧的 语言,使缓冲区溢出的任何尝试通常都会被该语言本身自 动检测并阻止(比如通过引发一个异常或根据需要给缓冲 区添加更多空间),但是有两种语言不是这样:C和C++ 语言。C\C++语言由于其针灵活应用的特性,通常允许让 额外的数据乱写到其余内存的任何位置,而这种情况可能 被利用从而导致意想不到的结果。而且,用C\C++编写正 确的代码来始终如一地处理缓冲区溢出则更为困难;很容 易就会意外地导致缓冲区溢出。更重要的一点就是C\C++ 的应用非常广泛,例如,Red Hat Linux 7.1中86%的代码 行都是用C或C++编写的。因此,大量的代码对这个问题 都是脆弱的,出现缓冲区溢出也就是常见的事情。 缓冲区溢出漏洞很容易被蠕虫病毒利用造成了很大的 危害,如2001年7月19日,CodeRed蠕虫爆发,造成的损 失估计超过20亿美元[2],2001年9月18日,Nimda蠕虫被 发现,造成的损失更大,超过26亿美元,2002年Slapper 蠕虫出现,2003年1月25日Slammer蠕虫爆发,2004年5 月1日,“震荡波”被发现,这几个病毒对网络安全造成 的破坏之大是前所未有的。而以上病毒都利用了缓冲区溢 出漏洞。

简述缓冲区溢出攻击的原理以及防范方法

简述缓冲区溢出攻击的原理以及防范方法

简述缓冲区溢出攻击的原理以及防范方法
一、缓冲区溢出攻击原理
缓冲区溢出攻击(Buffer Overflow Attack)是一种非法异常的程序运行行为,它发生的目的是让受害者的程序运行出现崩溃,从而获得机器控制权限,可以获取机器中存有的敏感资料,并进行恶意操作,如发送垃圾邮件,拒绝服务攻击(DoS attack),远程控制等行为破坏网络安全。

缓冲区溢出攻击的基本原理,就是恶意程序使用某种方法,将程序缓冲区中存放的数据或者信息溢出,超出缓冲区的容量,而这种溢出的数据又存放了受害者程序控制机器的恶意命令,从而给受害者程序植入恶意代码,使恶意程序获得了机器的控制权限,进而达到攻击系统的目的。

二、防范方法
1、使用受检程序,受检程序是一种编译技术,通过对程序源代码进行类型检查、安全检查等操作,来把漏洞修复好,从而起到防止缓冲区溢出攻击的作用。

2、使用数据流分析技术,它是一种动态分析技术,可以识别出恶意代码并阻止其危害,对程序运行的漏洞进行检查,从而防止攻击者利用缓冲区溢出攻击系统。

3、实行严格的安全审计制度,对程序源码、程序诊断、数据加密技术等进行严格的审计,确保程序运行的安全性,以及防止攻击者利用缓冲区溢出攻击系统。

4、采用虚拟化技术,虚拟化技术可以在不同的安全层次上对程序进行控制,对程序运行的过程进行审查,从而防止攻击者使用缓冲区溢出攻击系统。

5、对网络环境进行安全审计,包括电脑中存在的安全漏洞,系统的安全配置,网络设备的稳定性以及系统的社会工程学攻击等,从而确保网络环境能够不被缓冲区溢出攻击所侵袭。

缓冲区溢出-原理和简单利用-概述说明以及解释

缓冲区溢出-原理和简单利用-概述说明以及解释

缓冲区溢出-原理和简单利用-概述说明以及解释1.引言概述部分是文章的开篇,旨在引入读者对于缓冲区溢出问题的背景和概念。

下面是概述部分的内容:1.1 概述在计算机科学和网络安全领域中,缓冲区溢出(Buffer Overflow)是一种常见的安全漏洞,它可能导致系统崩溃、数据泄露、远程命令执行等严重后果。

本文将介绍缓冲区溢出的原理和简单利用方法。

缓冲区溢出指的是当向一个缓冲区写入数据时,超出了该缓冲区所能容纳的大小,导致溢出的数据覆盖到相邻的内存区域。

这种溢出可能会覆盖控制流程信息,改变程序执行路径,从而使攻击者能够执行恶意代码。

缓冲区溢出是一种经典的安全漏洞,其发现最早可以追溯到20世纪70年代。

尽管多年来在软件和系统的开发过程中进行了一系列的改进和加固,但仍然存在很多软件和系统容易受到缓冲区溢出攻击的漏洞存在。

正因如此,了解缓冲区溢出的原理和简单利用方法对于计算机科学和网络安全从业人员来说是至关重要的。

本文的主要目的是帮助读者理解缓冲区溢出的原理,并介绍常见的利用方法。

在深入研究和了解缓冲区溢出的背景之后,读者将能够更好地理解和应对这种常见的安全威胁。

接下来的章节将分别介绍缓冲区溢出的原理,并提供一些简单的利用方法作为案例。

最后,我们将总结本文的内容,并进一步讨论缓冲区溢出的意义和应对措施。

通过阅读本文,我们希望读者能够加深对于缓冲区溢出问题的理解,提高对于软件和系统安全的意识,并能够采取相应的措施来预防和应对这种安全漏洞。

让我们一起深入探索缓冲区溢出的原理和简单利用方法吧!文章结构是指文章整体组织的安排和框架。

一个良好的文章结构可以帮助读者更好地理解和吸收文章内容。

本文主要讨论缓冲区溢出的原理和简单利用方法,因此文章结构如下:1. 引言1.1 概述引入缓冲区溢出的基本概念和定义,解释缓冲区溢出在计算机领域的重要性和普遍存在的问题。

1.2 文章结构介绍本文的文章结构以及各个部分的内容安排,方便读者了解整个文章的组织。

缓冲区溢出原理及防范

缓冲区溢出原理及防范

摘要:正文:大纲:1.引言;随着网络安全技术的飞速发展,缓冲区溢出漏洞已经成为当前最具安全威胁的漏洞之一,缓冲区溢出攻击也成为一种非常有效而常见的攻击方法。

如Internet上的第1例蠕虫(Morris)攻击,就是利用了fingerd的缓冲区溢出漏洞。

SANS评选出的2005年威胁最大的20个漏洞中,有8个跟缓冲区溢出有关。

根据CNCERT最近几周的计算机安全漏洞的统计数据,与缓冲区溢出有关的安全事件占了很大的比例。

这些都充分说明了研究缓冲区溢出的重要性。

本文主要介绍了windows下的缓冲区溢出的相关知识。

2.漏洞原因和原理;2.1 产生原因;当向一个已分配了确定存储空间的缓冲区内复制多于该缓冲区处理能力的数据时,就会发生缓冲区溢出,溢出包括堆溢出和堆栈溢出。

它与程序在内存中的分布有关,而它产生的直接原因是由于C/C++程序中的一些函数调用时,没有进行边界检查,如C函数库中的strcpy(),strcat(),sprintf(),gets()等都是不安全的。

由上面的分析可知要产生缓冲区溢出,需要有几个条件: 1) 程序编译时在堆栈上分配了固定大小的缓冲区,并且在对缓冲区进行访问时没有提供边界检查。

这条在C/C ++语言中就满足,而对于有边界检查的语言,如Pascal 等,就没有这样的溢出问题。

2) 程序调用了没有进行边界检查的函数来访问(写操作) 缓冲区,这些函数没有对访问的缓冲区的大小进行判断。

由于在C语言中,字符串以0字节来标识结尾,其中没有字符串的长度信息,所以几个没有判断字符串长度的字符串拷贝函数就是容易出现问题的函数。

这些函数有: strcat()、strcpy()、sprintf()等。

3) 即使程序使用了上面所说的问题函数也不一定会出现溢出漏洞,漏洞发生的最后一个条件是程序员由于粗心,未检查用户输入数据的长度就将其直接复制到缓冲区中去。

虽然这看起来是一件小事,很容易杜绝。

可惜的是正因为有大量粗心的程序员的存在,使得溢出漏洞变得非常的普遍。

缓冲区溢出攻击原理及防范_XXX

缓冲区溢出攻击原理及防范_XXX

缓冲区溢出攻击原理及防范作者姓名:XXX 班级:计算机网络XXX学号:2200951XXX 指导教师:XXX教授摘要缓冲区简单来说是一块连续的计算机内存区域,可以保存相同数据类型的多个实例, 缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量溢出的数据覆盖在合法数据上,理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐患.操作系统所使用的缓冲区又被称为"堆栈". 在各个操作进程之间,指令会被临时储存在"堆栈"当中,"堆栈"也会出现缓冲区溢出。

缓冲区溢出是最常见的安全漏洞,针对缓冲区溢出的漏洞进行攻击,是很常见的攻击手段,可以使本地用户获得超级用户权限,也可以使外部攻击者通过网络直接进入系统。

本文详细分析了缓冲区溢出的基本原理,描述了利用缓冲区溢出漏洞进行攻击的基本方式,并通过对一段实例程序的溢出和构建攻击语句直观的演示了缓冲区溢出的形成过程及其攻击原理,最后提出了防范缓冲区溢出的有效措施。

关键词:缓冲区溢出堆栈漏洞AbstractSimply ,buffer is a continuous computer memory area, can keep the same data types of multiple instances, buffer overflow is when computer to the buffer filled with data f igures within the capacity of the buffer itself more than the data covered in legal spill data, the ideal situation is not allowed to check the data length program more than the length of the input buffer characters, but most of the program will be always with the assumption that data length distribution of storage space match, this is the buffer overf low buried hidden trouble. Operating system used by buffer is known as the "stack". I n between each operation process, the instructions will be temporarily stored in the "st ack" of "stack" also can appear buffer overflow. Buffer overrun is the most common s ecurity flaws in the buffer overflow vulnerability to attack, it is very common attack method, can make local users get super user permissions, also can make the external a ttackers through the network directly into the system.This paper analyzes the basic principle of buffer overflow, describes the use of buf fer overrun vulnerabilities to attack the basic way of, and through the example of a pr ogram and the construction of overflow attack statement intuitive demonstrates buffer overflow the forming process and the principle of attack, finally puts forward the cou ntermeasures of buffer overflow effective measures.Keywords:buffer overflow Stack shellcod目录摘要 (1)Abstract (2)绪论 (1)第一章缓冲区溢出基本原理 (2)1.1 栈缓冲区溢出 (2)1.2 HEAP/BSS缓冲区溢出 (4)1.2.1重要性 (4)1.2.2相关概念介绍 (4)1.2.3Heap/BSS溢出攻击 (5)第二章缓冲区溢出攻击 (8)2.1 shellcode基础 (9)2.2 可注入shellcode的编写 (11)2.3 远程缓冲区溢出威胁 (15)第三章缓冲区溢出攻击防御 (17)3.1 给有漏洞的程序打补丁 (17)3.2 编写安全的代码 (17)3.3 静态分析 (17)3.4 动态测试 (17)3.5软件开发过程中的防范策略 (18)3.6 缓冲区溢出攻击的抵御 (23)第四章缓冲区溢出攻击与防御实例设计 (25)4.1 缓冲区溢出攻击实例 (25)总结与展望 (27)致谢 (28)参考文献 (29)绪论随着计算机技术、现代通信技术和网络技术的发展,尤其是Internet的广泛使用,计算机网络与人们的工作和生活的联系越来越密切、越来越深入,同时也使网络系统的安全问题日益复杂和突出。

缓冲区溢出攻击与防范实验

缓冲区溢出攻击与防范实验

实验十二缓冲区溢出攻击与防范实验1.实验目的通过实验掌握缓冲区溢出的原理;通过使用缓冲区溢出攻击软件模拟入侵远程主机;理解缓冲区溢出危险性;理解防范和避免缓冲区溢出攻击的措施。

2.预备知识2.1缓冲区溢出攻击简介缓冲区溢出攻击之所以成为一种常见的攻击手段,其原因在于缓冲区溢出漏洞太普通了,并且易于实现。

而且,缓冲区溢出所以成为远程攻击的主要手段,其原因在于缓冲区溢出漏洞给予了攻击者所想要的一切:植入并且执行攻击代码。

被植入的攻击代码以一定的权限运行有缓冲区溢出漏洞的程序,从而得到被攻击主机的控制权。

下面简单介绍缓冲区溢出的基本原理和预防办法。

(1)缓冲区概念缓冲区是内存中存放数据的地方。

在程序试图将数据放到机器内存中的某一个位置的时候,因为没有足够的空间就会发生缓冲区溢出。

而人为的溢出则是有一定企图的,攻击者写一个超过缓冲区长度的字符串,植入到缓冲区,然后再向一个有限空间的缓冲区中植入超长的字符串,这时可能会出现两个结果:一是过长的字符串覆盖了相邻的存储单元,引起程序运行失败,严重的可导致系统崩溃;另一个结果就是利用这种漏洞可以执行任意指令,甚至可以取得系统root特级权限。

缓冲区是程序运行的时候机器内存中的一个连续块,它保存了给定类型的数据,随着动态分配变量会出现问题。

大多时为了不占用太多的内存,一个有动态分配变量的程序在程序运行时才决定给它们分配多少内存。

如果程序在动态分配缓冲区放入超长的数据,它就会溢出了。

一个缓冲区溢出程序使用这个溢出的数据将汇编语言代码放到机器的内存里,通常是产生root权限的地方。

仅仅单个的缓冲区溢出并不是问题的根本所在。

但如果溢出送到能够以root权限运行命令的区域,一旦运行这些命令,那可就等于把机器拱手相让了。

造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。

缓冲区是一块用于存放数据的临时内存空间,它的长度事先已经被程序或操作系统定义好。

缓冲区类似于一个杯子,写入的数据类似于倒入的水。

网络安全技术原理与实践 第六章 缓冲区溢出攻击

网络安全技术原理与实践  第六章 缓冲区溢出攻击

6.2 缓冲区溢出攻击方式
目前的缓冲区溢出攻击,可以按照以下方法进行分类: (1)按照溢出位置分类:栈溢出、堆溢出和BSS段溢出。 (2)按照攻击者欲达到的目标分类:在程序的地址空间里植 入适当的代码以及通过适当地初始化寄存器和存储器从而控 制程序转移到攻击者安排的地址空间去执行。 (3)按照攻击目标分类:攻击栈中的返回地址、攻击栈中保 存的旧框架指针、攻击堆或BSS段中的局部变量或参数、攻 击堆或BSS段中的长跳转缓冲区。
缓冲区溢出攻击示意图
6.3 缓冲区溢出攻击步骤
6.3.1 获取漏洞信息
缓冲区溢出漏洞信息的 获取,主要有两种途径, 一是自己挖掘,二是从漏 洞公告中获得。当前,公 布漏洞信息的权威机构主 要有 公共漏洞公告 (Common Vulnerabilities and Exposures,CVE)和计 算机应急响应小组 (Computer Emergency Response Team,CERT)中 获取漏洞信息,如图所示。
6.2.3 流程跳转技术
缓冲区溢出的一个非常关键的步骤就是要实现进程执行流程 跳转,这也正是缓冲区溢出攻击的首要目的。只有实现了流程的 跳转,才能在被攻击的主机上执行所植入的代码,实现控制被攻 击主机的目的。要实现执行流程跳转,攻击者可以通过缓冲区溢 出漏洞修改有关执行流程的管理信息,如返回地址。
6.4 缓冲区溢出攻击的防范方法
目前有三种基本的方法保护缓冲区免受缓冲区溢出的攻击和影: 强制写正确的代码的方法 基于探测方法的防御 对缓冲区溢出漏洞检测研究主要分为如下的三类: 1)基于源代码的静态检测技术 2)基于目标代码的检浏技术 3)基于源代码的动态检测技术 基于操作系统底层的防御 1)库函数的保护 2)操作系统内核补丁保护 (a)NOEXEC技术 (b)ASLR(Address Space Layout Randomization,地址空间结构 随机化)

缓冲区溢出

缓冲区溢出

缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。

利用缓冲区溢出攻击,可以导致程序运行失败、系统宕机、重新启动等后果。

更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。

简介缓冲区溢出攻击有多种英文名称:buffer overflow,buffer overrun,smash the stack,trash the stack,scribble the stack, mangle the stack, memory leak,overrun screw;它们指的都是同一种攻击手段。

第一个缓冲区溢出攻击--Morris蠕虫,发生在二十年前,它曾造成了全世界6000多台网络服务器瘫痪。

概念缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量溢出的数据覆盖在合法数据上,理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐患.操作系统所使用的缓冲区又被称为"堆栈". 在各个操作进程之间,指令会被临时储存在"堆栈"当中,"堆栈"也会出现缓冲区溢出。

危害在当前网络与分布式系统安全中,被广泛利用的50%以上都是缓冲区溢出,其中最著名的例子是1988年利用fingerd漏洞的蠕虫。

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

缓冲区攻击缓冲区溢出的原理通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,造成程序崩溃或使程序转而执行其它指令,以达到攻击的目的。

造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。

缓冲区溢出攻击的分析及防范策略

缓冲区溢出攻击的分析及防范策略

缓冲区溢出攻击的分析及防范策略【摘要】缓冲区溢出攻击是一种常见的攻击手段,通过利用程序中的缓冲区溢出漏洞,攻击者可以在程序内存中写入恶意代码并执行。

这种攻击方式具有很高的危害性,可能导致系统崩溃、信息泄露甚至远程控制。

本文对缓冲区溢出攻击的原理进行了分析,并介绍了常见的攻击方法。

还提出了防范缓冲区溢出攻击的措施,包括编程语言中的防范措施、操作系统和网络安全设备中的防范措施等。

结论部分强调了缓冲区溢出攻击的风险不可忽视,建议综合使用多种防范策略以及加强安全意识培训和定期安全漏洞检测来有效防范这种攻击手段。

通过本文的介绍,读者可以更加深入地了解缓冲区溢出攻击,并掌握防范措施。

【关键词】关键词:缓冲区溢出攻击、危害、常见攻击方法、防范策略、原理分析、编程语言、操作系统、网络安全设备、风险、多种防范策略、安全意识培训、安全漏洞检测。

1. 引言1.1 什么是缓冲区溢出攻击缓冲区溢出攻击是指攻击者利用软件缓冲区溢出的漏洞,将大量数据输入超出缓冲区尺寸的内容,从而覆盖程序正常的运行空间,改变程序的执行路径,插入恶意代码或者执行恶意操作。

缓冲区溢出攻击是一种常见的计算机安全威胁,由于许多程序在设计上没有考虑到缓冲区的大小和输入数据的合法性,导致了这一漏洞的存在。

攻击者可以通过缓冲区溢出攻击来实现对系统的控制、数据泄露、拒绝服务等恶意目的。

了解缓冲区溢出攻击的原理对于加强计算机系统的安全防范至关重要。

通过加强对软件漏洞的修补、限制程序对输入数据的处理等措施,可以有效防范缓冲区溢出攻击带来的安全风险。

1.2 缓冲区溢出攻击的危害缓冲区溢出攻击是一种常见的网络安全威胁,其危害十分严重。

当程序接收到超出其预留空间的数据输入时,缓冲区溢出就会发生。

攻击者可以利用这一漏洞来执行恶意代码,篡改数据或者拒绝服务。

具体来说,缓冲区溢出攻击可能导致以下几种危害:1. 执行任意代码:通过向程序输入超出缓冲区界限的数据,攻击者可以利用溢出的内存空间来执行恶意代码。

安全测试中的缓冲区溢出攻击与防御

安全测试中的缓冲区溢出攻击与防御

安全测试中的缓冲区溢出攻击与防御在安全测试领域中,缓冲区溢出攻击是一种常见而危险的攻击方式。

本文将对缓冲区溢出攻击的原理、危害以及常见的防御措施进行探讨。

1. 缓冲区溢出攻击的原理缓冲区溢出攻击主要利用程序中的缺陷,通过向程序输入超过其缓冲区容量的数据来覆盖除缓冲区外的内存空间,从而控制程序的执行流程。

攻击者通常通过溢出的数据来注入恶意代码或修改栈中的返回地址,使程序转向攻击者设计的恶意代码,从而实现攻击目的。

2. 缓冲区溢出攻击的危害缓冲区溢出攻击可能导致以下危害:- 执行任意代码:攻击者通过溢出的数据注入恶意代码,并在程序执行时执行该代码,从而获取系统权限或进一步渗透目标系统。

- 拒绝服务:溢出攻击可能导致目标系统崩溃或无法继续正常运行,造成服务不可用的情况,给系统造成严重影响。

- 信息泄露:攻击者通过溢出泄露系统中的重要信息,如密码、敏感数据等,进一步危害系统和用户安全。

3. 缓冲区溢出攻击的防御措施为了防范缓冲区溢出攻击,以下是一些常见的防御措施:- 输入验证:对输入数据进行严格校验,限制其长度和特殊字符,并使用安全的输入函数进行数据传递,以防止溢出发生。

- 内存分配和使用:合理规划内存分配,使用强类型语言,避免使用不安全的函数和操作。

及时释放不再使用的内存,防止被滥用。

- 栈保护技术:通过使用栈保护技术,如栈溢出保护(Stack Overflow Protection,SOP)、Cannonical Address Space (CAS)等,检测和阻止栈溢出攻击。

- ASLR和DEP:地址空间布局随机化(Address Space Layout Randomization,ASLR)和数据执行保护(Data Execution Prevention,DEP)可以增加攻击者获取目标地址和执行恶意代码的难度,有效防御缓冲区溢出攻击。

4. 实例分析举一个实际的案例来说明缓冲区溢出攻击与防御的重要性。

缓冲区溢出攻击及防范策略

缓冲区溢出攻击及防范策略
产生 , 如该 例 中所示 .
t R :
P E M 肌 m

图 2
编译并 执行 该 程 序 , 在 对话 框 中输 入 “ P X I ”
并 回车 , 就会输 出“ He l l o P XI ” , 重 新 执行 程 序 并
在对 话 框 中 输 入 “ a b c d e f g a b c d e f g a b c d e f g ” 并 回 车, 就 会 产生 图 1的结果 , 此 时就 发生 了缓 冲 区溢
g a b c d e f g ” 已经 远远 超过 了 5 个 字 符 的长度 , 每一 个字 符 占一 个 内存 单 元 , 由于 存 放 n a me的 堆 只 定 义 了 5个 字符 即 5个 内存 单 元 , 远 不 够 用 于存
放用户输 入 的“ a b c d e f g a b c d e f g a b c d e f g ” , 只好 向
1 匿 数 据 段 D S l 栩 抬 化 数 暑 段 \ 横
代码段
系统D L L
部 分数 据作 为返 回地 址 , C P U 试 图执 行该 位 置 处 的地址 , 结 果 出现错误 , 于 是就 有可 能 出现 图 l所
示 的系统提 示 , 这就 是一 次缓 冲 区( 堆栈 ) 的溢 出. 缓 冲 区 内的数据 及数 据 的长度 是用 户输 人 的 数 据决 定 的 , 而 一 般 情 况 下 程 序都 不会 检 查 输 入 数据 的长 度 , 当输 入 的数 据 过 长 不但 占据 缓 冲 区 还 占据 了边 界 外 的 空 间 , 此 时缓 冲 区溢 出就 随 之
2 0 1 4年 第 2期
彭 小利 , 侯

缓冲区溢出漏洞原理

缓冲区溢出漏洞原理

缓冲区溢出是一种常见的安全漏洞,攻击者利用缓冲区溢出使程序崩溃或执行恶意代码。

以下是缓冲区溢出漏洞的原理和攻击步骤:1. 缓冲区溢出:缓冲区是一种存储数据的地方,当输入的数据长度超过缓冲区的长度时,就会发生缓冲区溢出。

攻击者通常会利用缓冲区溢出漏洞来向程序写入任意数据,包括恶意代码。

2. 栈溢出:栈溢出是缓冲区溢出的一个特殊情况,当程序在堆栈上分配内存时,如果输入的数据长度超过堆栈的大小,就会发生栈溢出。

栈溢出通常发生在函数调用或跳转时,当函数调用时,栈指针会指向函数的返回地址和参数列表,如果输入的数据长度超过堆栈的大小,就会覆盖函数的返回地址和参数列表,使程序崩溃或执行恶意代码。

3. 堆溢出:堆溢出是缓冲区溢出的另一个特殊情况,当程序在堆上分配内存时,如果输入的数据长度超过堆的大小,就会发生堆溢出。

堆溢出通常发生在动态分配内存时,当程序动态分配内存时,堆指针会指向一个空闲的内存块,如果输入的数据长度超过堆的大小,就会覆盖堆指针,使程序崩溃或执行恶意代码。

4. 溢出攻击:攻击者通常会利用缓冲区溢出漏洞来向程序写入任意数据,包括恶意代码。

攻击者可能会通过Web攻击、命令执行攻击、DLL注入攻击等手段来实现。

5. 命令执行攻击:命令执行攻击是攻击者利用缓冲区溢出漏洞来执行恶意命令的攻击。

攻击者通常会利用命令执行漏洞来向程序写入任意命令,包括系统命令和恶意代码。

6. 注入攻击:注入攻击是攻击者利用缓冲区溢出漏洞来注入恶意代码的攻击。

攻击者通常会利用SQL注入、XML注入等手段来实现。

7. 代码执行攻击:代码执行攻击是攻击者利用缓冲区溢出漏洞来执行恶意代码的攻击。

攻击者通常会利用Shellshock、Code Red等漏洞来实现。

总之,缓冲区溢出漏洞是一种常见的安全漏洞,攻击者可以利用它来执行恶意代码或使程序崩溃。

程序员应该加强代码的安全性,避免缓冲区溢出漏洞的发生。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

服 务
病毒黑客
图1 计算机程序内存存放示意图
为了搞清楚“黑客”基于缓冲区
溢出漏洞攻击的工作原理,我们先来
分析一下计算机程序在内存中的存储
和运行方式,计算机程序在内存中
通常分为[1]程序段、数据段和堆栈
部分,其具体存放策略如图
示,程序段存放的是可执行的二进制
机器代码或者只读数据,这个段的内
容只允许读或者执行操作,不允许写
服 务病毒黑客
操作如下:首先把参数‘c’,’b’,’a’压入堆栈;然后保存指令寄存器(I P)中的内容,作为返回地址(R E T);第三个放入堆栈的是基址寄存器(F P);接着把当前的栈指针(S P)拷贝到F P,作为新的基地址;最后为函数变量留出一定空间,把
S P减去适当的数值,使其指向局部变量的位置;执行完上述函数调用操作后,程序转到函数中继续执行,此时堆栈中的数据如图2所示。

图2 堆栈工作原理示意图
函数执行完毕后,执行出栈操作,其中最主要的是将r e t送到I P中[3],正常执行此操作会使程序返回到函数调用指令的下一条指令,继续程序的正常执行,不会产生缓冲区的溢出,那么什么情况下会产生缓冲区的溢出呢?让我们来分析一下面的程序。

Buffer_overflow.c
void function(char *str)
{ char buffer[16]; 
strcpy(buffer,str);
}
void main()
{ char large_str [512];
int i;
for( i = 0; i < 512; i++) 
large_str [i] = \'A\'; 
function(large_str); 
}
在程序Buffer_overflow.c执行过程中,当调用函数function时,函数将字符串*str不经过边界检查,直接拷贝到内存区域buffer[16]。

此时堆栈结果如图3所示:首先将参数*str
压入堆栈,占用512字节的内存,接
着将返回地址将指令寄存器IP中的返
回地址ret入栈,然后将基址指针FP
入栈,最后分配16字节的函数局部变
量存储空间,随后程序转入function
执行,当执行完strcpy(buffer,str)指
令后,溢出产生了,程序执行的结果
是从buffer开始的512个字节都将被
*str的内容\'A\'覆盖,包括基址指
针SFP和程序返回地址ret,甚至部
分*str的内容。

\'A\'的十六进值为
0x41,所以函数的返回地址ret变成
了0x41414141, 这超出了程序的地址
空间,引起段错误,而且导致函数执
行完毕后不能返回到调用它的主程序。

由此可见,缓冲区溢出允许我们改变
一个函数的返回地址。

通过这种方式,
可以改变程序的执行顺序。

通过精心
设计,黑客可以利用覆盖缓冲区数据
的方式将病毒、木马程序或者入侵程
序代码殖入被攻击的计算机,并更改
返回地址值以指向它们已殖入的恶意
代码,对系统发起攻击,获取系统的
控制权。

溢出是病毒编写者和特洛伊
木马编写者偏爱使用的一种攻击方法。

攻击者或者病毒善于在系统当中发现
容易产生缓冲区溢出之处,运行特别
程序,获得优先级,指示计算机破坏
文件,改变数据,泄露敏感信息,产
生后门访问点,感染或者攻击其他计
算机。

图3 堆栈溢出原理示意图
3 基于缓冲区溢出攻击的防
范策略
通过缓冲区溢出攻击原理分析可
以看出,底层系统自动保护措施的缺
陷和程序员程序设计所犯的错误是攻
击赖以发生的根源,所以对于缓冲区
溢出攻击的防范应该从弥补底层系统
缺陷和完善程序设计两方面入手,要
让程序员不犯错误通常是很难的,因
此缓冲区溢出攻击的防范措施应该主
要依赖于对底层系统缺陷的弥补,譬
如对于操作系统的缺陷,可以通过及
时地下载安装操作系统补丁程序予以
解决。

除此之外,还常采用以下几类
防范策略[4]:
(1)基于探测方法(c a n a r y)的
防御。

基于探测方法(c a n a r y)的
防御主要包括I m m u n i x使用的
StackGuard方法、OpenBSD 使用
的ProPolice方法和 Microsoft 的
/GS 选项方法。

StackGuard方法是通过修改 C
编译器(g c c),以便将一个“探测
值”插入到返回地址r e t的前面,在
任何函数返回之前,它执行检查以确
保探测值没有改变。

如果攻击者改写
返回地址,探测仪的值就会改变,系
统内就会发出警告并相应地中止程序
的执行。

这是一种行之有效的方法,
不过这种方法无法防止缓冲区溢出改
写其他值(攻击者仍然可以利用这些
值来攻击系统)。

人们也曾研究扩展
这种方法来保护其他值(比如堆上的
值)。

ProPolice
方法又称为ssp,是
StackGuard 的方法的一种变化形式。

像 StackGuard 一样,ssp 使用一
个修改过的编译器在函数调用中插入
一个探测仪以检测堆栈溢出。

然而,
84算机安全 2008.3
服 务
病毒黑客
出攻击的几率会越来越小。

相关文档
最新文档