缓冲区溢出攻击的工作原理及防范策略
- 格式:pdf
- 大小:1.34 MB
- 文档页数:3
第三讲缓冲区溢出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 回车。
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/。
但如果攻击者用的是尚未发布补丁的攻击程序呢?所以打补丁是有效,但不是惟一的方法。
下面就来看看如何手动设置,对溢出攻击进行防御。
简述缓冲区溢出攻击的原理以及防范方法
一、缓冲区溢出攻击原理
缓冲区溢出攻击(Buffer Overflow Attack)是一种非法异常的程序运行行为,它发生的目的是让受害者的程序运行出现崩溃,从而获得机器控制权限,可以获取机器中存有的敏感资料,并进行恶意操作,如发送垃圾邮件,拒绝服务攻击(DoS attack),远程控制等行为破坏网络安全。
缓冲区溢出攻击的基本原理,就是恶意程序使用某种方法,将程序缓冲区中存放的数据或者信息溢出,超出缓冲区的容量,而这种溢出的数据又存放了受害者程序控制机器的恶意命令,从而给受害者程序植入恶意代码,使恶意程序获得了机器的控制权限,进而达到攻击系统的目的。
二、防范方法
1、使用受检程序,受检程序是一种编译技术,通过对程序源代码进行类型检查、安全检查等操作,来把漏洞修复好,从而起到防止缓冲区溢出攻击的作用。
2、使用数据流分析技术,它是一种动态分析技术,可以识别出恶意代码并阻止其危害,对程序运行的漏洞进行检查,从而防止攻击者利用缓冲区溢出攻击系统。
3、实行严格的安全审计制度,对程序源码、程序诊断、数据加密技术等进行严格的审计,确保程序运行的安全性,以及防止攻击者利用缓冲区溢出攻击系统。
4、采用虚拟化技术,虚拟化技术可以在不同的安全层次上对程序进行控制,对程序运行的过程进行审查,从而防止攻击者使用缓冲区溢出攻击系统。
5、对网络环境进行安全审计,包括电脑中存在的安全漏洞,系统的安全配置,网络设备的稳定性以及系统的社会工程学攻击等,从而确保网络环境能够不被缓冲区溢出攻击所侵袭。
缓冲区溢出-原理和简单利用-概述说明以及解释1.引言概述部分是文章的开篇,旨在引入读者对于缓冲区溢出问题的背景和概念。
下面是概述部分的内容:1.1 概述在计算机科学和网络安全领域中,缓冲区溢出(Buffer Overflow)是一种常见的安全漏洞,它可能导致系统崩溃、数据泄露、远程命令执行等严重后果。
本文将介绍缓冲区溢出的原理和简单利用方法。
缓冲区溢出指的是当向一个缓冲区写入数据时,超出了该缓冲区所能容纳的大小,导致溢出的数据覆盖到相邻的内存区域。
这种溢出可能会覆盖控制流程信息,改变程序执行路径,从而使攻击者能够执行恶意代码。
缓冲区溢出是一种经典的安全漏洞,其发现最早可以追溯到20世纪70年代。
尽管多年来在软件和系统的开发过程中进行了一系列的改进和加固,但仍然存在很多软件和系统容易受到缓冲区溢出攻击的漏洞存在。
正因如此,了解缓冲区溢出的原理和简单利用方法对于计算机科学和网络安全从业人员来说是至关重要的。
本文的主要目的是帮助读者理解缓冲区溢出的原理,并介绍常见的利用方法。
在深入研究和了解缓冲区溢出的背景之后,读者将能够更好地理解和应对这种常见的安全威胁。
接下来的章节将分别介绍缓冲区溢出的原理,并提供一些简单的利用方法作为案例。
最后,我们将总结本文的内容,并进一步讨论缓冲区溢出的意义和应对措施。
通过阅读本文,我们希望读者能够加深对于缓冲区溢出问题的理解,提高对于软件和系统安全的意识,并能够采取相应的措施来预防和应对这种安全漏洞。
让我们一起深入探索缓冲区溢出的原理和简单利用方法吧!文章结构是指文章整体组织的安排和框架。
一个良好的文章结构可以帮助读者更好地理解和吸收文章内容。
本文主要讨论缓冲区溢出的原理和简单利用方法,因此文章结构如下:1. 引言1.1 概述引入缓冲区溢出的基本概念和定义,解释缓冲区溢出在计算机领域的重要性和普遍存在的问题。
1.2 文章结构介绍本文的文章结构以及各个部分的内容安排,方便读者了解整个文章的组织。
服 务
病毒黑客
图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
服 务
病毒黑客
出攻击的几率会越来越小。