缓冲区溢出漏洞课件_第1页
缓冲区溢出漏洞课件_第2页
缓冲区溢出漏洞课件_第3页
缓冲区溢出漏洞课件_第4页
缓冲区溢出漏洞课件_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

网络监测技术

缓冲区溢出漏洞攻击网络监测技术

缓冲区溢出漏洞攻击1软件安全概述美国国家标准技术研究院提到:软件安全漏洞是导致系统安全策略违背的本质原因安全漏洞在软件中大规模存在大多数成功攻击利用已公布未修补的软件安全漏洞或不安全配置软件漏洞:缓冲区溢出格式化字符串漏洞竞争条件漏洞整数溢出XSS跨站脚本SQL注入最简单的栈溢出,更难控制的堆溢出、内核溢出,对抗DEP(数据执行保护)和对抗ASLR(地址空间布局随机化)的攻击软件代码与内存空间上演着精彩的对弈软件安全概述美国国家标准技术研究院提到:软件安全漏洞是导致系2软件安全概述软件自诞生,就和BUG形影不离能被攻击者利用并导致危害的BUG就是软件安全漏洞(安全漏洞范围更广)安全漏洞的三个基本元素:系统的脆弱性或缺陷攻击者对缺陷的可访问性攻击者对缺陷的可利用性软件安全漏洞:在软件需求、开发和配置过程中引入的缺陷,执行会违反安全策略,具有三个基本元素CERT公布2006-08年,每年公开漏洞7K-8K个实际每年新公开漏洞上万个,大量漏洞把持在国家情报部门、软件厂商、安全公司和黑客团体手中软件安全概述软件自诞生,就和BUG形影不离3软件安全概述软件功能强大,扩展到生活方方面面,软件安全对经济和社会生活影响巨大软件安全漏洞造成的经济损失1988年莫里斯蠕虫造成损失9600万美元2001年红色代码蠕虫,造成损失26亿美元2003年冲击波、Mydoom等蠕虫,带来数十亿,甚至数百亿美元的损失这些蠕虫利用服务器软件中的漏洞传播软件安全概述软件功能强大,扩展到生活方方面面,软件安全对经济4软件安全概述软件安全漏洞对生命威胁1988两伊战争期间,美国防空导弹击落伊朗客机,290人遇难,美国的解释是雷达跟踪软件的含糊和令人

误解的输出显示鱼鹰V-22倾斜旋翼直升机试飞时,一条水压线爆裂,软件错误认为备

份系统没有工作,导致飞机坠毁,4人遇难2010年英国科学家以身试法,全球

首个被计算机病毒感染的人类,证明体内的医疗器材(心脏起搏器)有感染病毒的风险软件安全概述软件安全漏洞对生命威胁5软件安全概述安全领域多年研究,软件安全问题反而越来越严重,为什么软件普遍存在漏洞?软件安全“困境三要素”复杂性源代码行数:WindowsNT3.1(3百万)——WindowsXP(4千万)——WindowsServer2003(5千万)软件规模越来越大,越来越复杂,BUG也会越来越多,预计每千行代码约存在5-50个BUG

大多数BUG不会造成安全问题,但一个足以致命软件安全概述安全领域多年研究,软件安全问题反而越来越严重,为6软件安全概述软件安全“困境三要素”可扩展性为了支持更好的用户感受,软件提供扩展渠道,软件的可扩展性机制促进现代软件的蓬勃发展;操作系统通过动态装载设备驱动和模块,浏览器通过脚本语言、控件和动态装载库支持更好的扩展性;很难组织攻击者和恶意代码以不可预测的扩展方式入侵软件和系统,厂商不重视分析可扩展软件的安全性要比分析不能更改软件的安全性困难得多软件安全概述软件安全“困境三要素”7软件安全概述软件安全“困境三要素”连通性

接入互联网的计算机数量快速增加,高连通性使小小软件缺陷造成巨大的影响(蠕虫)高度连通性也使得网络攻击能够引发现实世界的故障,电话网、电力网事故(电影:鹰眼)连通性使得不需人为干预的自动化攻击成为可能,大大改变了威胁环境,威胁传播范围更大更迅速在一个普遍依赖软件的高连通性网络中,一旦软件中的安全漏洞被恶意利用,后果将不仅是计算机短期无法工作,对正常生活也会造成重要影响软件安全概述软件安全“困境三要素”8软件安全概述软件安全漏洞类型CVE标准目录中,将安全漏洞分37类2001-04年,缓冲区溢出漏洞保持第一位2005开始,Web安全问题快速升温,XSS、SQL注入、PHP远程文件包含等占据前三其他普遍流行的安全漏洞:目录遍历、信息泄露、畸形输入导致的拒绝服务、符合链接问题、格式化字符串、密码学缺陷…软件安全概述软件安全漏洞类型9软件安全概述软件安全漏洞从技术上主要分类:内存安全违规类内存访问时引入的安全缺陷,如缓冲区溢出、Use-after-Free、Doublefree等不安全指针问题;主要出现在C/C++编写的软件中,支持任意的内存分配与回收,任意指针计算、转换,未保护内存;Java等则通过禁用指针计算与转换,实施内存垃圾跟踪与收集等机制,保证内存安全;

缓冲区溢出是最基础的内存安全问题软件安全概述软件安全漏洞从技术上主要分类:10软件安全概述软件安全漏洞从技术上主要分类:输入验证类程序在对用户输入进行数据验证存在错误,没有保证输入数据的正确性、合法性和安全性,导致可能被恶意攻击与利用;可细分为:格式化字符串、SQL注入、代码注入、远程文件包含、目录遍历、XSS、HTTPHeader注入、HTTP响应分割错误等

针对目前流行的Web应用程序的输入验证类漏洞,近年来已经成为攻击者最普遍利用的目标

例:字符串格式化漏洞:C语言特定字符串处理函数printf()涉及将未过滤的用户输入作为该函数的格式字符串参数,恶意用户利用%s、%x等格式化选项,打印内存某些地址的数据内容;利用%n格式化选项,将任意构造的数据写入任意栈内存位置,从而控制程序逻辑,控制系统。

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

软件安全概述软件安全漏洞从技术上主要分类:13软件安全概述软件安全漏洞远不止上述几种类型新的安全漏洞形式也在进一步挖掘大家认为应该披露安全漏洞这些危险信息吗?保密和包庇阴暗最终只会害了我们自己透明无论对我们个人、社会,都是有帮助的(政治不也是一样吗?)软件安全概述软件安全漏洞远不止上述几种类型14缓冲区溢出概述缓冲区溢出是最早被发现,也是最基础的安全软件漏洞类型(特别是栈溢出)缓冲区溢出基本概念本质:内存安全违规类漏洞,计算机程序向特定缓冲区内填充数据时,超出了缓冲区本身的容量,导致外溢数据覆盖了相邻内存空间的合法数据,从而改变程序执行流程破坏系统运行完整性原因:程序本身没有检查数据长度与所分配的存储空间是否匹配多见于C/C++中的memcpy()、strcpy()等内存与字符串复制函数的引用位置,这些函数不检查内存越界问题根本原因:现代计算机基础构架——冯诺依曼体系的安全缺陷,即程序的数据和指令都在同一内存中进行存储缓冲区溢出概述缓冲区溢出是最早被发现,也是最基础的安全软件漏15缓冲区溢出概述缓冲区溢出攻击技术的发展80年代初,国外黑客就意识到程序中存在缓冲区溢出问题,1988年莫里斯蠕虫利用的是fingerd服务中存在的缓冲区溢出漏洞进行传播的1996年,黑客One在经典文章SmashingtheStackforfunandProfit中,详细描述Linux系统的栈结构,及如何利用缓冲区溢出获得远程Shell;90年代末20世纪初,缓冲区溢出深入人心,是最为流行的攻击技术Windows内存分布和系统调用机制不同于类Unix系统,但这难不倒睿智的黑客,1998年死牛崇拜黑客团队以MicrosoftNetmeeting服务中缓冲区溢出漏洞为例,详细介绍如何利用Windows平台的栈溢出漏洞1999年,Spyrit提出使用系统核心DLL中的JMPESP等指令完成指令跳转和控制的想法,推动该平台栈溢出漏洞的利用;同年Conover对基于堆的缓冲区溢出攻击技术进行深入总结和整理这些研究也促进了21世纪初Windows平台蠕虫大规模爆发缓冲区溢出概述缓冲区溢出攻击技术的发展16缓冲区溢出概述黑客对技术锲而不舍的钻研精神不应该因此被贬低,正因为他们的不断找茬和曝光,促使软件厂商更注重软件的安全性近年来缓冲区溢出在软件漏洞中比重有所下降,但绝对数量仍在增长直到现在,缓冲区溢出漏洞与攻击并未被根除,仍在一些实际网络攻击事件和恶意代码中见到其踪迹缓冲区溢出概述黑客对技术锲而不舍的钻研精神不应该因此被贬低,17缓冲区溢出背景知识掌握计算机程序的底层运行机理熟悉编程语言、汇编语言、操作系统等基础知识编译器与调试器C/C++编写的源码,需要通过编译器(生成目标文件,二进制代码)和连接器生成最终的可执行程序调试器提供程序断点管理、执行控制、信息查看Windows平台下VC++集成开发环境,自带调试与反汇编功能类Unix平台下,GDB是常用的调试器缓冲区溢出背景知识掌握计算机程序的底层运行机理18缓冲区溢出背景知识汇编语言基础知识汇编语言(特别是IA32构架下)是理解软件安全漏洞机理的底层基础因为无法得到所分析软件的源代码,只能阅读理解反汇编得到的汇编代码渗透攻击代码中包含机器指令形式存在的Shellcode,理解和编写也需要汇编语言知识调试渗透代码对软件安全漏洞的利用过程,在调试器中一般只能在汇编代码层次上分析缓冲区溢出背景知识汇编语言基础知识19缓冲区溢出背景知识汇编语言基础知识首先熟悉常用的寄存器及其功能通用、段、控制、其他四类寄存器通用寄存器,主要用于算术运算,保存数据、地址、偏移量等;特别注意的是esp:栈指针寄存器,栈溢出攻击时关键的操控对象段寄存器一般用作段基址寄存器,16位控制寄存器控制处理器的执行流程;其中最关键是eip:指令指针,保存了下一条即将执行的机器指令的地址,成为各种攻击控制程序执行流程的关键攻击目标对象其他寄存器中值得关注的是“扩展标志”eflags寄存器,不同标志位组成,保存指令执行后的状态和控制指令执行流程的标志信息缓冲区溢出背景知识汇编语言基础知识20缓冲区溢出背景知识进程内存管理了解进程内存管理机制是深入理解软件安全漏洞及攻击机理所必须掌握的内容Linux:程序执行时,系统在内存中创建一个虚拟的内存地址空间,32位机4GB;3GB以下用户态空间,3-4GB为内核态空间;.text为程序指令,只读;.data段主要包含静态初始化数据;.bss则包含未初始化的数据;加载完成后,系统为程序初始化栈和堆

缓冲区溢出背景知识进程内存管理21缓冲区溢出背景知识Linux进程内存管理栈(Stack)——LIFO,环境变量env、运行参数argv、运行参数数量argc放置在栈底,然后是主函数及调用栈中各个函数的临时保存信息;堆(Heap)——FIFO,保存程序动态分配的数据和变量;程序执行,安装逻辑执行.text中的指令,并在栈和堆中保存和读取数据程序无法正确区分程序和数据,可通过修改内存空间,影响程序执行逻辑,将恶意数据作为指令提交给处理器缓冲区溢出背景知识Linux进程内存管理22缓冲区溢出背景知识Windows进程内存管理空间布局与Linux系统有差异2-4GB为内核态地址空间,映射内核代码和一些核心DLL0-2GB为用户态地址空间,高地址段映射大量应用程序共用的DLL,1GB位置装载一些应用程序本身使用的DLL可执行代码区,静态内存空间保存全局变量、静态变量,堆存储动态数据,多线程有多个栈和堆缓冲区溢出背景知识Windows进程内存管理23缓冲区溢出背景知识了解函数调用过程栈结构和函数调用过程的底层细节,是理解栈溢出攻击的重要基础栈溢出攻击针对函数调用过程中返回地址对栈中的存储返回地址的位置进行缓冲区溢出改写返回地址使程序跳转到攻击者指定的位置执行恶意代码缓冲区溢出背景知识了解函数调用过程24缓冲区溢出背景知识函数调用过程栈,LIFO,用于实现程序中的函数或过程调用,保存函数的调用参数、返回地址、调用者栈基址、函数局部变量等最关键是返回地址,即函数调用结束后执行的下一条指令地址返回地址在可读写的栈中保存,与攻击者可操纵的局部变量缓冲区相邻,有可乘之机(如果没有严格边界检查的话)ebp、esp(寄存器栈底和栈顶地址)push、pop(指令,将数据压入栈,弹出栈)缓冲区溢出背景知识函数调用过程25缓冲区溢出背景知识缓冲区溢出例子最简单的溢出例子voidreturn_input(void){ chararray[30];

gets(array); printf(“%s\n”,array);}intmain(void){ return_input(); return0;}程序运行后,输入超过30个字符,造成缓冲区溢出,一旦覆盖上方的EBP和RET缓冲区溢出背景知识缓冲区溢出例子26缓冲区溢出背景知识缓冲区溢出的利用缓冲区溢出两个要素:程序中存在缺乏边界安全保护的缓冲区操作;缓冲区操作必须是用户输入可控制的上述例子造成结果?黑客不会满足于此,期望获得系统访问权黑客的三个挑战如何找出缓冲区溢出要覆盖和修改的敏感位置?将敏感位置的值修改成什么?执行什么指令代码达到攻击的目标?(Shellcode)缓冲区溢出背景知识缓冲区溢出的利用27缓冲区溢出背景知识栈溢出攻击的简单例子charshellcode[]=“\x31\xd2\x52\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62”“\x69\x89\xe3\x52\x53\x89\xe1\x8d\0x42\x0b\xcd\x80”charlarge_string[128];intmain(intargc,char**argv){ charbuffer[96]; inti; long*long_ptr=(long*)large_string; for(i=0;i<32;i++) *(long_ptr+i)=(int)buffer; for(i=0;i<(int)strlen(shellcode);i++) large_string[i]=shellcode[i];

strcpy(buffer,large_string); return0;}缓冲区溢出背景知识栈溢出攻击的简单例子28缓冲区溢出背景知识上例中,三个挑战问题是怎么解决的?如何找出缓冲区溢出要覆盖和修改的敏感位置?将敏感位置的值修改成什么?执行什么指令代码达到攻击的目标?(Shellcode)前面的例子非常简单,用于说明实际攻击过程要复杂得多缓冲区溢出背景知识上例中,三个挑战问题是怎么解决的?29渗透测试软件渗透测试,安全管理重要一环渗透测试软件COREImpactImmunityCANVAS商业软件,价格昂贵Metasploit开源的渗透攻击测试软件MetasploitHDMoore于2003年组织开发04年公布,当年进入安全社区流行软件5强渗透测试软件渗透测试,安全管理重要一环30渗透测试软件Metasploit软件结构开发框架和组件模块的可扩展模型Ruby编写的MSF为基础,为渗透测试组件开发与测试提供平台模块组件是实施渗透攻击的代码利用安全漏洞的Exploits模块

扫描、查点等辅助任务的Auxiliary模型在目标系统植入并运行的Shellcode攻击负载Payloads模块对攻击负载进行编码以躲避检测的Encoders模块,等等渗透测试软件Metasploit软件结构利用安全漏洞的E31渗透测试软件Metasploit提供多种用户接口Metasploit提供API接口和插件支持,支持第三方在MSF基础上开发扩展模块2010年底,3.5.1版,集成了635个渗透攻击模块,314个辅助攻击模块;215种不同攻击负载渗透测试软件Metasploit提供多种用户接口32渗透测试软件Metasploit的安装与熟悉渗透测试软件Metasploit的安装与熟悉33总结总结34网络监测技术

缓冲区溢出漏洞攻击网络监测技术

缓冲区溢出漏洞攻击35软件安全概述美国国家标准技术研究院提到:软件安全漏洞是导致系统安全策略违背的本质原因安全漏洞在软件中大规模存在大多数成功攻击利用已公布未修补的软件安全漏洞或不安全配置软件漏洞:缓冲区溢出格式化字符串漏洞竞争条件漏洞整数溢出XSS跨站脚本SQL注入最简单的栈溢出,更难控制的堆溢出、内核溢出,对抗DEP(数据执行保护)和对抗ASLR(地址空间布局随机化)的攻击软件代码与内存空间上演着精彩的对弈软件安全概述美国国家标准技术研究院提到:软件安全漏洞是导致系36软件安全概述软件自诞生,就和BUG形影不离能被攻击者利用并导致危害的BUG就是软件安全漏洞(安全漏洞范围更广)安全漏洞的三个基本元素:系统的脆弱性或缺陷攻击者对缺陷的可访问性攻击者对缺陷的可利用性软件安全漏洞:在软件需求、开发和配置过程中引入的缺陷,执行会违反安全策略,具有三个基本元素CERT公布2006-08年,每年公开漏洞7K-8K个实际每年新公开漏洞上万个,大量漏洞把持在国家情报部门、软件厂商、安全公司和黑客团体手中软件安全概述软件自诞生,就和BUG形影不离37软件安全概述软件功能强大,扩展到生活方方面面,软件安全对经济和社会生活影响巨大软件安全漏洞造成的经济损失1988年莫里斯蠕虫造成损失9600万美元2001年红色代码蠕虫,造成损失26亿美元2003年冲击波、Mydoom等蠕虫,带来数十亿,甚至数百亿美元的损失这些蠕虫利用服务器软件中的漏洞传播软件安全概述软件功能强大,扩展到生活方方面面,软件安全对经济38软件安全概述软件安全漏洞对生命威胁1988两伊战争期间,美国防空导弹击落伊朗客机,290人遇难,美国的解释是雷达跟踪软件的含糊和令人

误解的输出显示鱼鹰V-22倾斜旋翼直升机试飞时,一条水压线爆裂,软件错误认为备

份系统没有工作,导致飞机坠毁,4人遇难2010年英国科学家以身试法,全球

首个被计算机病毒感染的人类,证明体内的医疗器材(心脏起搏器)有感染病毒的风险软件安全概述软件安全漏洞对生命威胁39软件安全概述安全领域多年研究,软件安全问题反而越来越严重,为什么软件普遍存在漏洞?软件安全“困境三要素”复杂性源代码行数:WindowsNT3.1(3百万)——WindowsXP(4千万)——WindowsServer2003(5千万)软件规模越来越大,越来越复杂,BUG也会越来越多,预计每千行代码约存在5-50个BUG

大多数BUG不会造成安全问题,但一个足以致命软件安全概述安全领域多年研究,软件安全问题反而越来越严重,为40软件安全概述软件安全“困境三要素”可扩展性为了支持更好的用户感受,软件提供扩展渠道,软件的可扩展性机制促进现代软件的蓬勃发展;操作系统通过动态装载设备驱动和模块,浏览器通过脚本语言、控件和动态装载库支持更好的扩展性;很难组织攻击者和恶意代码以不可预测的扩展方式入侵软件和系统,厂商不重视分析可扩展软件的安全性要比分析不能更改软件的安全性困难得多软件安全概述软件安全“困境三要素”41软件安全概述软件安全“困境三要素”连通性

接入互联网的计算机数量快速增加,高连通性使小小软件缺陷造成巨大的影响(蠕虫)高度连通性也使得网络攻击能够引发现实世界的故障,电话网、电力网事故(电影:鹰眼)连通性使得不需人为干预的自动化攻击成为可能,大大改变了威胁环境,威胁传播范围更大更迅速在一个普遍依赖软件的高连通性网络中,一旦软件中的安全漏洞被恶意利用,后果将不仅是计算机短期无法工作,对正常生活也会造成重要影响软件安全概述软件安全“困境三要素”42软件安全概述软件安全漏洞类型CVE标准目录中,将安全漏洞分37类2001-04年,缓冲区溢出漏洞保持第一位2005开始,Web安全问题快速升温,XSS、SQL注入、PHP远程文件包含等占据前三其他普遍流行的安全漏洞:目录遍历、信息泄露、畸形输入导致的拒绝服务、符合链接问题、格式化字符串、密码学缺陷…软件安全概述软件安全漏洞类型43软件安全概述软件安全漏洞从技术上主要分类:内存安全违规类内存访问时引入的安全缺陷,如缓冲区溢出、Use-after-Free、Doublefree等不安全指针问题;主要出现在C/C++编写的软件中,支持任意的内存分配与回收,任意指针计算、转换,未保护内存;Java等则通过禁用指针计算与转换,实施内存垃圾跟踪与收集等机制,保证内存安全;

缓冲区溢出是最基础的内存安全问题软件安全概述软件安全漏洞从技术上主要分类:44软件安全概述软件安全漏洞从技术上主要分类:输入验证类程序在对用户输入进行数据验证存在错误,没有保证输入数据的正确性、合法性和安全性,导致可能被恶意攻击与利用;可细分为:格式化字符串、SQL注入、代码注入、远程文件包含、目录遍历、XSS、HTTPHeader注入、HTTP响应分割错误等

针对目前流行的Web应用程序的输入验证类漏洞,近年来已经成为攻击者最普遍利用的目标

例:字符串格式化漏洞:C语言特定字符串处理函数printf()涉及将未过滤的用户输入作为该函数的格式字符串参数,恶意用户利用%s、%x等格式化选项,打印内存某些地址的数据内容;利用%n格式化选项,将任意构造的数据写入任意栈内存位置,从而控制程序逻辑,控制系统。

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

软件安全概述软件安全漏洞从技术上主要分类:47软件安全概述软件安全漏洞远不止上述几种类型新的安全漏洞形式也在进一步挖掘大家认为应该披露安全漏洞这些危险信息吗?保密和包庇阴暗最终只会害了我们自己透明无论对我们个人、社会,都是有帮助的(政治不也是一样吗?)软件安全概述软件安全漏洞远不止上述几种类型48缓冲区溢出概述缓冲区溢出是最早被发现,也是最基础的安全软件漏洞类型(特别是栈溢出)缓冲区溢出基本概念本质:内存安全违规类漏洞,计算机程序向特定缓冲区内填充数据时,超出了缓冲区本身的容量,导致外溢数据覆盖了相邻内存空间的合法数据,从而改变程序执行流程破坏系统运行完整性原因:程序本身没有检查数据长度与所分配的存储空间是否匹配多见于C/C++中的memcpy()、strcpy()等内存与字符串复制函数的引用位置,这些函数不检查内存越界问题根本原因:现代计算机基础构架——冯诺依曼体系的安全缺陷,即程序的数据和指令都在同一内存中进行存储缓冲区溢出概述缓冲区溢出是最早被发现,也是最基础的安全软件漏49缓冲区溢出概述缓冲区溢出攻击技术的发展80年代初,国外黑客就意识到程序中存在缓冲区溢出问题,1988年莫里斯蠕虫利用的是fingerd服务中存在的缓冲区溢出漏洞进行传播的1996年,黑客One在经典文章SmashingtheStackforfunandProfit中,详细描述Linux系统的栈结构,及如何利用缓冲区溢出获得远程Shell;90年代末20世纪初,缓冲区溢出深入人心,是最为流行的攻击技术Windows内存分布和系统调用机制不同于类Unix系统,但这难不倒睿智的黑客,1998年死牛崇拜黑客团队以MicrosoftNetmeeting服务中缓冲区溢出漏洞为例,详细介绍如何利用Windows平台的栈溢出漏洞1999年,Spyrit提出使用系统核心DLL中的JMPESP等指令完成指令跳转和控制的想法,推动该平台栈溢出漏洞的利用;同年Conover对基于堆的缓冲区溢出攻击技术进行深入总结和整理这些研究也促进了21世纪初Windows平台蠕虫大规模爆发缓冲区溢出概述缓冲区溢出攻击技术的发展50缓冲区溢出概述黑客对技术锲而不舍的钻研精神不应该因此被贬低,正因为他们的不断找茬和曝光,促使软件厂商更注重软件的安全性近年来缓冲区溢出在软件漏洞中比重有所下降,但绝对数量仍在增长直到现在,缓冲区溢出漏洞与攻击并未被根除,仍在一些实际网络攻击事件和恶意代码中见到其踪迹缓冲区溢出概述黑客对技术锲而不舍的钻研精神不应该因此被贬低,51缓冲区溢出背景知识掌握计算机程序的底层运行机理熟悉编程语言、汇编语言、操作系统等基础知识编译器与调试器C/C++编写的源码,需要通过编译器(生成目标文件,二进制代码)和连接器生成最终的可执行程序调试器提供程序断点管理、执行控制、信息查看Windows平台下VC++集成开发环境,自带调试与反汇编功能类Unix平台下,GDB是常用的调试器缓冲区溢出背景知识掌握计算机程序的底层运行机理52缓冲区溢出背景知识汇编语言基础知识汇编语言(特别是IA32构架下)是理解软件安全漏洞机理的底层基础因为无法得到所分析软件的源代码,只能阅读理解反汇编得到的汇编代码渗透攻击代码中包含机器指令形式存在的Shellcode,理解和编写也需要汇编语言知识调试渗透代码对软件安全漏洞的利用过程,在调试器中一般只能在汇编代码层次上分析缓冲区溢出背景知识汇编语言基础知识53缓冲区溢出背景知识汇编语言基础知识首先熟悉常用的寄存器及其功能通用、段、控制、其他四类寄存器通用寄存器,主要用于算术运算,保存数据、地址、偏移量等;特别注意的是esp:栈指针寄存器,栈溢出攻击时关键的操控对象段寄存器一般用作段基址寄存器,16位控制寄存器控制处理器的执行流程;其中最关键是eip:指令指针,保存了下一条即将执行的机器指令的地址,成为各种攻击控制程序执行流程的关键攻击目标对象其他寄存器中值得关注的是“扩展标志”eflags寄存器,不同标志位组成,保存指令执行后的状态和控制指令执行流程的标志信息缓冲区溢出背景知识汇编语言基础知识54缓冲区溢出背景知识进程内存管理了解进程内存管理机制是深入理解软件安全漏洞及攻击机理所必须掌握的内容Linux:程序执行时,系统在内存中创建一个虚拟的内存地址空间,32位机4GB;3GB以下用户态空间,3-4GB为内核态空间;.text为程序指令,只读;.data段主要包含静态初始化数据;.bss则包含未初始化的数据;加载完成后,系统为程序初始化栈和堆

缓冲区溢出背景知识进程内存管理55缓冲区溢出背景知识Linux进程内存管理栈(Stack)——LIFO,环境变量env、运行参数argv、运行参数数量argc放置在栈底,然后是主函数及调用栈中各个函数的临时保存信息;堆(Heap)——FIFO,保存程序动态分配的数据和变量;程序执行,安装逻辑执行.text中的指令,并在栈和堆中保存和读取数据程序无法正确区分程序和数据,可通过修改内存空间,影响程序执行逻辑,将恶意数据作为指令提交给处理器缓冲区溢出背景知识Linux进程内存管理56缓冲区溢出背景知识Windows进程内存管理空间布局与Linux系统有差异2-4GB为内核态地址空间,映射内核代码和一些核心DLL0-2GB为用户态地址空间,高地址段映射大量应用程序共用的DLL,1GB位置装载一些应用程序本身使用的DLL可执行代码区,静态内存空间保存全局变量、静态变量,堆存储动态数据,多线程有多个栈和堆缓冲区溢出背景知识Windows进程内存管理57缓冲区溢出背景知识了解函数调用过程栈结构和函数调用过程的底层细节,是理解栈溢出攻击的重要基础栈溢出攻击针对函数调用过程中返回地址对栈中的存储返回地址的位置进行缓冲区溢出改写返回地址使程序跳转到攻击者指定的位置执行恶意代码缓冲区溢出背景知识了解函数调用过程58缓冲区溢出背景知识函数调用过程栈,LIFO,用于实现程序中的函数或过程调用,保存函数的调用参数、返回地址、调用者栈基址、函数局部变量等最关键是返回地址,即函数调用结束后执行的下一条指令地址返回地址在可读写的栈中保存,与攻击者可操纵的局部变量缓冲区相邻,有可乘之机(如果没有严格边界检查的话)ebp、esp(寄存器栈底和栈顶地址)push、pop(指令,将数据压入栈,弹出栈)缓冲区溢出背景知识函数调用过程59缓冲区溢出背景知识缓冲区溢出例子最简单的溢出例子voidreturn_input(void){ chararray[30];

gets(array); printf(“%s\n”,arra

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论