缓冲区溢出漏洞分析课件.ppt

上传人:小飞机 文档编号:1592046 上传时间:2022-12-09 格式:PPT 页数:34 大小:1.15MB
返回 下载 相关 举报
缓冲区溢出漏洞分析课件.ppt_第1页
第1页 / 共34页
缓冲区溢出漏洞分析课件.ppt_第2页
第2页 / 共34页
缓冲区溢出漏洞分析课件.ppt_第3页
第3页 / 共34页
缓冲区溢出漏洞分析课件.ppt_第4页
第4页 / 共34页
缓冲区溢出漏洞分析课件.ppt_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《缓冲区溢出漏洞分析课件.ppt》由会员分享,可在线阅读,更多相关《缓冲区溢出漏洞分析课件.ppt(34页珍藏版)》请在三一办公上搜索。

1、网络监测技术缓冲区溢出漏洞攻击,软件安全概述,美国国家标准技术研究院提到:软件安全漏洞是导致系统安全策略违背的本质原因安全漏洞在软件中大规模存在大多数成功攻击利用已公布未修补的软件安全漏洞或不安全配置软件漏洞:缓冲区溢出格式化字符串漏洞竞争条件漏洞整数溢出XSS跨站脚本SQL注入最简单的栈溢出,更难控制的堆溢出、内核溢出,对抗DEP(数据执行保护)和对抗ASLR(地址空间布局随机化)的攻击软件代码与内存空间上演着精彩的对弈,软件安全概述,软件自诞生,就和BUG形影不离能被攻击者利用并导致危害的BUG就是软件安全漏洞(安全漏洞范围更广)安全漏洞的三个基本元素:系统的脆弱性或缺陷攻击者对缺陷的可访

2、问性攻击者对缺陷的可利用性软件安全漏洞:在软件需求、开发和配置过程中引入的缺陷,执行会违反安全策略,具有三个基本元素CERT公布2006-08年,每年公开漏洞7K-8K个实际每年新公开漏洞上万个,大量漏洞把持在国家情报部门、软件厂商、安全公司和黑客团体手中,软件安全概述,软件功能强大,扩展到生活方方面面,软件安全对经济和社会生活影响巨大软件安全漏洞造成的经济损失1988年莫里斯蠕虫造成损失9600万美元2001年红色代码蠕虫,造成损失26亿美元2003年冲击波、Mydoom等 蠕虫,带来数十亿,甚至数 百亿美元的损失这些蠕虫利用服务器软件 中的漏洞传播,软件安全概述,软件安全漏洞对生命威胁19

3、88两伊战争期间,美国防空导弹 击落伊朗客机,290人遇难,美国的 解释是雷达跟踪软件的含糊和令人 误解的输出显示鱼鹰V-22倾斜旋翼直升机试飞时, 一条水压线爆裂,软件错误认为备 份系统没有工作,导致飞机坠毁, 4人遇难2010年英国科学家以身试法,全球 首个被计算机病毒感染的人类,证 明体内的医疗器材(心脏起搏器) 有感染病毒的风险,软件安全概述,安全领域多年研究,软件安全问题反而越来越严重,为什么软件普遍存在漏洞?软件安全“困境三要素”复杂性 源代码行数:Windows NT 3.1(3百万)Windows XP(4千万)Windows Server 2003(5千万) 软件规模越来越大

4、,越来越复杂,BUG也会越来越多,预计每千行代码约存在5-50个BUG 大多数BUG不会造成安全问题,但一个足以致命,软件安全概述,软件安全“困境三要素”可扩展性 为了支持更好的用户感受,软件提供扩展渠道,软件的可扩展性机制促进现代软件的蓬勃发展; 操作系统通过动态装载设备驱动和模块,浏览器通过脚本语言、控件和动态装载库支持更好的扩展性; 很难组织攻击者和恶意代码以不可预测的扩展方式入侵软件和系统,厂商不重视 分析可扩展软件的安全性要比分析不能更改软件的安全性困难得多,软件安全概述,软件安全“困境三要素”连通性 接入互联网的计算机数量快速增加,高连通性使小小软件缺陷造成巨大的影响(蠕虫) 高度

5、连通性也使得网络攻击能够引发现实世界的故障,电话网、电力网事故(电影:鹰眼) 连通性使得不需人为干预的自动化攻击成为可能,大大改变了威胁环境,威胁传播范围更大更迅速 在一个普遍依赖软件的高连通性网络中,一旦软件中的安全漏洞被恶意利用,后果将不仅是计算机短期无法工作,对正常生活也会造成重要影响,软件安全概述,软件安全漏洞类型CVE标准目录中,将安全漏洞分37类2001-04年,缓冲区溢出漏洞保持第一位2005开始,Web安全问题快速升温,XSS、SQL注入、PHP远程文件包含等占据前三其他普遍流行的安全漏洞:目录遍历、信息泄露、畸形输入导致的拒绝服务、符合链接问题、格式化字符串、密码学缺陷,软件

6、安全概述,软件安全漏洞从技术上主要分类:内存安全违规类 内存访问时引入的安全缺陷,如缓冲区溢出、Use-after-Free、Double free等不安全指针问题; 主要出现在C/C+编写的软件中,支持任意的内存分配与回收,任意指针计算、转换,未保护内存;Java等则通过禁用指针计算与转换,实施内存垃圾跟踪与收集等机制,保证内存安全; 缓冲区溢出是最基础的内存安全问题,软件安全概述,软件安全漏洞从技术上主要分类:输入验证类 程序在对用户输入进行数据验证存在错误,没有保证输入数据的正确性、合法性和安全性,导致可能被恶意攻击与利用; 可细分为:格式化字符串、SQL注入、代码注入、远程文件包含、目

7、录遍历、XSS、HTTP Header注入、HTTP响应分割错误等 针对目前流行的Web应用程序的输入验证类漏洞,近年来已经成为攻击者最普遍利用的目标 例:字符串格式化漏洞:C语言特定字符串处理函数printf()涉及将未过滤的用户输入作为该函数的格式字符串参数,恶意用户利用%s、%x等格式化选项,打印内存某些地址的数据内容;利用%n格式化选项,将任意构造的数据写入任意栈内存位置,从而控制程序逻辑,控制系统。,软件安全概述,软件安全漏洞从技术上主要分类:竞争条件类 涉及多进程或多线程处理的程序中,输出或结果无法预测,依赖于其他进程事件发生的次序或时间 TOCTTOU,检查时刻与使用时刻条件状态

8、不一致,导致攻击者可利用的漏洞,软件安全概述,软件安全漏洞从技术上主要分类:权限混淆与提升类 程序由于自身编程疏忽或被第三方欺骗,滥用其特权,或赋予第三方不该给予的权限 权限提升漏洞通常发生在一些拥有特权的应用程序中,由于安全缺陷,使得获取特权的安全检查被绕过,或被攻破 FTP反弹攻击利用FTP协议的缺陷,绕过FTP服务器的权限限制,让FTP作为中间代理,使用PORT命令向其他主机的端口请求访问,用于隐蔽的端口扫描 “越狱”由于iPhone和iPad流行被大众了解与接受,原指破解类Unix系统中jail机制,移动设备为自身利益,只允许访问特定来源的软件资源,黑客与厂商之间开始了一轮轮越狱与反越

9、狱斗争,软件安全概述,软件安全漏洞远不止上述几种类型新的安全漏洞形式也在进一步挖掘大家认为应该披露安全漏洞这些危险信息吗?保密和包庇阴暗最终只会害了我们自己透明无论对我们个人、社会,都是有帮助的(政治不也是一样吗?),缓冲区溢出概述,缓冲区溢出是最早被发现,也是最基础的安全软件漏洞类型(特别是栈溢出)缓冲区溢出基本概念本质:内存安全违规类漏洞,计算机程序向特定缓冲区内填充数据时,超出了缓冲区本身的容量,导致外溢数据覆盖了相邻内存空间的合法数据,从而改变程序执行流程破坏系统运行完整性原因:程序本身没有检查数据长度与所分配的存储空间是否匹配多见于C/C+中的memcpy()、strcpy()等内存

10、与字符串复制函数的引用位置,这些函数不检查内存越界问题根本原因:现代计算机基础构架冯诺依曼体系的安全缺陷,即程序的数据和指令都在同一内存中进行存储,缓冲区溢出概述,缓冲区溢出攻击技术的发展80年代初,国外黑客就意识到程序中存在缓冲区溢出问题,1988年莫里斯蠕虫利用的是fingerd服务中存在的缓冲区溢出漏洞进行传播的1996年,黑客One在经典文章Smashing the Stack for fun and Profit中,详细描述Linux系统的栈结构,及如何利用缓冲区溢出获得远程Shell;90年代末20世纪初,缓冲区溢出深入人心,是最为流行的攻击技术Windows内存分布和系统调用机制

11、不同于类Unix系统,但这难不倒睿智的黑客,1998年死牛崇拜黑客团队以Microsoft Netmeeting服务中缓冲区溢出漏洞为例,详细介绍如何利用Windows平台的栈溢出漏洞1999年,Spyrit提出使用系统核心DLL中的JMP ESP等指令完成指令跳转和控制的想法,推动该平台栈溢出漏洞的利用;同年Conover对基于堆的缓冲区溢出攻击技术进行深入总结和整理这些研究也促进了21世纪初Windows平台蠕虫大规模爆发,缓冲区溢出概述,黑客对技术锲而不舍的钻研精神不应该因此被贬低,正因为他们的不断找茬和曝光,促使软件厂商更注重软件的安全性近年来缓冲区溢出在软件漏洞中比重有所下降,但绝对

12、数量仍在增长直到现在,缓冲区溢出漏洞与攻击并未被根除,仍在一些实际网络攻击事件和恶意代码中见到其踪迹,缓冲区溢出背景知识,掌握计算机程序的底层运行机理熟悉编程语言、汇编语言、操作系统等基础知识编译器与调试器C/C+编写的源码,需要通过编译器(生成目标文件,二进制代码)和连接器生成最终的可执行程序调试器提供程序断点管理、执行控制、信息查看Windows平台下VC+集成开发环境,自带调试与反汇编功能类Unix平台下,GDB是常用的调试器,缓冲区溢出背景知识,汇编语言基础知识汇编语言(特别是IA32构架下)是理解软件安全漏洞机理的底层基础因为无法得到所分析软件的源代码,只能阅读理解反汇编得到的汇编代

13、码渗透攻击代码中包含机器指令形式存在的Shellcode,理解和编写也需要汇编语言知识调试渗透代码对软件安全漏洞的利用过程,在调试器中一般只能在汇编代码层次上分析,缓冲区溢出背景知识,汇编语言基础知识首先熟悉常用的寄存器及其功能通用、段、控制、其他四类寄存器通用寄存器,主要用于算术运算,保存数据、地址、偏移量等;特别注意的是esp:栈指针寄存器,栈溢出攻击时关键的操控对象段寄存器一般用作段基址寄存器,16位控制寄存器控制处理器的执行流程;其中最关键是eip:指令指针,保存了下一条即将执行的机器指令的地址,成为各种攻击控制程序执行流程的关键攻击目标对象其他寄存器中值得关注的是“扩展标志”efla

14、gs寄存器,不同标志位组成,保存指令执行后的状态和控制指令执行流程的标志信息,缓冲区溢出背景知识,进程内存管理了解进程内存管理机制是深入理解软件安全漏洞及攻击机理所必须掌握的内容Linux: 程序执行时,系统在内存中创建一个虚 拟的内存地址空间,32位机4GB; 3GB以下用户态空间,3-4GB为内核态 空间; .text为程序指令,只读; .data段主要包含静态初始化数据; .bss则包含未初始化的数据; 加载完成后,系统为程序初始化栈和堆,缓冲区溢出背景知识,Linux进程内存管理栈(Stack)LIFO,环境变量env、运行参数argv、运行参数数量argc放置在栈底,然后是主函数及调

15、用栈中各个函数的临时保存信息;堆(Heap)FIFO,保存程序动态分配的数据和变量;程序执行,安装逻辑执行.text中的指令,并在栈和堆中保存和读取数据程序无法正确区分程序和数据,可通过修改内存空间,影响程序执行逻辑,将恶意数据作为指令提交给处理器,缓冲区溢出背景知识,Windows进程内存管理空间布局与Linux系统有差异2-4GB为内核态地址空间,映射内核 代码和一些核心DLL0-2GB为用户态地址空间,高地址段 映射大量应用程序共用的DLL,1GB 位置装载一些应用程序本身使用的DLL可执行代码区,静态内存空间保存全局变量、静态变量,堆存储动态数据,多线程有多个栈和堆,缓冲区溢出背景知识

16、,了解函数调用过程栈结构和函数调用过程的底层细节,是理解栈溢出攻击的重要基础栈溢出攻击针对函数调用过程中返回地址对栈中的存储返回地址的位置进行缓冲区溢出改写返回地址使程序跳转到攻击者指定的位置执行恶意代码,缓冲区溢出背景知识,函数调用过程栈,LIFO,用于实现程序中的函数或过程调用,保存函数的调用参数、返回地址、调用者栈基址、函数局部变量等最关键是返回地址,即函数调用结束后执行的下一条指令地址返回地址在可读写的栈中保存,与攻击者可操纵的局部变量缓冲区相邻,有可乘之机(如果没有严格边界检查的话)ebp、esp(寄存器栈底和栈顶地址)push、pop(指令,将数据压入栈,弹出栈),缓冲区溢出背景知

17、识,缓冲区溢出例子最简单的溢出例子void return_input(void)char array30;gets(array);printf(“%sn”,array);int main (void)return_input();return 0;程序运行后,输入超过30个字符,造成缓冲区溢出,一旦覆盖上方的EBP和RET,缓冲区溢出背景知识,缓冲区溢出的利用缓冲区溢出两个要素:程序中存在缺乏边界安全保护的缓冲区操作;缓冲区操作必须是用户输入可控制的上述例子造成结果?黑客不会满足于此,期望获得系统访问权黑客的三个挑战如何找出缓冲区溢出要覆盖和修改的敏感位置?将敏感位置的值修改成什么?执行什么指

18、令代码达到攻击的目标?(Shellcode),缓冲区溢出背景知识,栈溢出攻击的简单例子char shellcode=“x31xd2x52x68x6ex2fx73x68 x68x2fx2fx62” “x69x89xe3x52x53x89xe1 x8d0 x42x0bxcdx80”char large_string128;int main(int argc, char *argv)char buffer96;int i;long *long_ptr=(long *) large_string;for(i=0;i32;i+)*(long_ptr+i)=(int) buffer;for(i=0;i(i

19、nt)strlen(shellcode);i+)large_stringi=shellcodei;strcpy(buffer, large_string);return 0;,缓冲区溢出背景知识,上例中,三个挑战问题是怎么解决的?如何找出缓冲区溢出要覆盖和修改的敏感位置?将敏感位置的值修改成什么?执行什么指令代码达到攻击的目标?(Shellcode)前面的例子非常简单,用于说明实际攻击过程要复杂得多,渗透测试软件,渗透测试,安全管理重要一环渗透测试软件CORE ImpactImmunity CANVAS 商业软件,价格昂贵Metasploit 开源的渗透攻击测试软件MetasploitHD M

20、oore于2003年组织开发04年公布,当年进入安全社区流行软件5强,渗透测试软件,Metasploit软件结构开发框架和组件模块的可扩展模型Ruby编写的MSF为基础,为渗透测试组件开发与测试提供平台模块组件是实施渗透攻击的代码,利用安全漏洞的Exploits模块 扫描、查点等辅助任务的Auxiliary模型 在目标系统植入并运行的Shellcode攻击负载Payloads模块 对攻击负载进行编码以躲避检测的Encoders模块,等等,渗透测试软件,Metasploit提供多种用户接口Metasploit提供API接口和插件支持,支持第三方在MSF基础上开发扩展模块2010年底,3.5.1版,集成了635个渗透攻击模块,314个辅助攻击模块;215种不同攻击负载,渗透测试软件,Metasploit的安装与熟悉,总结,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号