黑客攻击技术精品PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
不管哪种类型的缓冲区溢出攻击,所产生的后果都相同:利用它们以某 种方式破坏进程的内存空间,进而控制程序执行流程。缓冲区溢出攻击的最终 目标都是从漏洞中收集任何有用的信息以控制进程的执行。
Fra Baidu bibliotek
5.4 缓冲区溢出攻击
5.4.2 缓冲区溢出攻击原理分析
1.基于栈的缓冲区溢出 2.基于堆的缓冲区溢出 3.基于BSS的缓冲区溢出
按照溢出位置可将缓冲区溢出分为栈溢出、堆溢出和BSS段溢出。 2)按攻击者欲达到的目标分类,可以分为在程序的地址空间里植入适当
的代码、通过适当的初始化寄存器和存储器从而控制程序转移到攻击者安排的 地址空间去执行。
3)按攻击目标分类可以分为攻击栈中的返回地址、攻击栈中保存的旧框 架指针、攻击堆或BSS段中的局部变量或参数、攻击堆或BSS段中的长跳转缓 冲区。
stackover(argv[1]); } else {
printf("Usage:%s \n",argv[0]); } }
5.4 缓冲区溢出攻击
5.4.1 何谓缓冲区溢出
2.内存分配
运行一个编译好的程序时,计算机会在内存中开辟一 段连续的内存块即缓冲区。缓冲区通常分为3个区域,从 内存的低地址向高地址,分别是代码段、数据段(初始化 数据段、未初始化数据段)和堆栈(堆段、栈段),它们 在内存中的位置如图所示。
…
…
函数返回地址Ret 栈基址指针EBP
缓冲区
NNNN(sledge) shellcode
NNNN(sledge) shellcode
RARARARA
程序 跳转
… 溢出前
RARARARA 植入代码
… 溢出后
5.4 缓冲区溢出攻击
5.4.3 缓冲区溢出攻击代码的构造
(1)shellcode shellcode是实施攻击所要植入的攻击代码的核心部分,其功能是为攻击者提供主
非执行的缓冲区是指通过使被攻击程序的数据地址空间不 可执行,使得攻击者不可能执行缓冲区中被植入的攻击程序代 码。 2.强制编写正确的代码
编写正确、安全的代码是避免缓冲区溢出攻击的根本途径。 程序开发人员在所有拷贝数据的地方进行数据长度和有效性检 查. 3.利用编译器的边界检查实现对缓冲区的保护. 4.对程序中的缓冲区溢出漏洞进行静态/动态分析.
5.4 缓冲区溢出攻击
缓冲区溢出攻击是否成功,关键在于植入代码。植入
代码一般由shellcode、填充数据(用N表示) 、返回地址 (用RA 表示)三个部分按照一定方式构造而成。一段典型 的缓冲区溢出攻击植入代码如图所示,其中,RA是用于 覆盖存在漏洞的函数返回地址,将程序跳转到shellcode 处继续执行;N为一段没有实际用途的空指令,常称为 seledge。
在植入的攻击代码中必须存在一段返回地址RA,以便将程序跳转到指定的位置继 续运行。返回地址是指Shellcode的入口地址。如果希望目标主机改变原来的程序执行 流程,转向执行Shellcode,就必须设法用Shellcode的入口地址覆盖某个跳转指令。
5.4 缓冲区溢出攻击
5.4.4 缓冲区溢出攻击的防范 1.采用非执行的缓冲区
1.虚假的链接与虚假的页面
攻击者通过改写Web页中的URL地址,伪造网 页等,使之指向攻击者的Web服务器而不是真正的 Web服务器。假设,攻击者所处的Web服务器是, 攻击者通过在所有链接前增加来改写URL。
#include <stdio.h> #include <string.h> void stackover (char* ptr) {
char buffer[8]; strcpy(buffer,ptr); printf("String=%s\n",buffer); } main(int argc,char* argv[]) { if(argc == 2) {
5.4 缓冲区溢出攻击
5.4.3 缓冲区溢出攻击代码的构造
无论是哪一种溢出攻击,前提条件都必须存在一个有漏洞的缓冲 区,通过溢出该缓冲区,改写其相邻区域的数据。例如,改写诸如函 数返回地址、指针、函数指针或者长跳转缓冲区,这样才可以使程序 流程发生改变。 1. 缓冲区溢出攻击代码结构
攻击者对系统发起攻击,其目的是要获取系统权限。利用缓冲区 溢出漏洞时,通常的做法是将函数的返回地址指向一段构造好的代码, 常称其为shellcode。运行shellcode 后,就可以得到系统的一个 shell。如果存在漏洞的程序是以root权限运行的,则攻击者就能得到 具有root权限的shell,从而完全控制目标主机系统。
5.5 欺骗攻击及其防御
网络欺骗型攻击主要有Web欺骗、ARP欺 骗等手段,除此之外还有IP地址欺骗、TCP 欺骗(在TCP数据包中使用伪造的IP地址)、 DNS欺骗(伪造主机域名)、电子邮件欺 骗、源路由欺骗、以及口令欺骗等多种欺 骗手段。
5.5 欺骗攻击及其防御
5.5.1 Web欺骗攻击
Web欺骗能够成功的关键是在受害者与其它 Web服务器之间设立攻击者的Web服务器,这种 攻击在安全问题中称为“来自中间的攻击”。
黑客攻击技术
5.4 缓冲区溢出攻击
5.4.1 何谓缓冲区溢出
缓冲区是程序运行期间,在内存中分配的一个连续的 存储空间,用于存放各种类型的数据。
所谓缓冲区溢出是指向固定长度的缓冲区写入超出预 先分配长度的内容,造成缓冲区数据溢出,而覆盖了缓冲 区相邻的内存空间。
5.4 缓冲区溢出攻击
一个典型的具有缓冲区溢出的C++语言程序 代码示例如下:
栈(Stack) 堆(Heap)
内存高地址 0xFFFFFFFF
未初始化数据段(BSS)
初始化数据段(Data) 代码段(Code)
内存低地址 0x00000000
5.4 缓冲区溢出攻击
5.4.1 何谓缓冲区溢出
3.缓冲区溢出攻击分类 1)缓冲区溢出攻击的方式与缓冲区属于哪个内存区域密不可分,因此,
机系统的一个shell。 (2)填充数据
编写的shellcode能否得到执行,关键是让覆盖了的函数地址指向shellcode在堆 栈中的入口地址。由于攻击者不能够准确的估计出shellcode在其堆栈中的位置,为了 提高shellcode的命中率,往往需要在shellcode的前面安排一段填充数据(seledge) 用于占位。 (3)定位shellcode的返回地址
Fra Baidu bibliotek
5.4 缓冲区溢出攻击
5.4.2 缓冲区溢出攻击原理分析
1.基于栈的缓冲区溢出 2.基于堆的缓冲区溢出 3.基于BSS的缓冲区溢出
按照溢出位置可将缓冲区溢出分为栈溢出、堆溢出和BSS段溢出。 2)按攻击者欲达到的目标分类,可以分为在程序的地址空间里植入适当
的代码、通过适当的初始化寄存器和存储器从而控制程序转移到攻击者安排的 地址空间去执行。
3)按攻击目标分类可以分为攻击栈中的返回地址、攻击栈中保存的旧框 架指针、攻击堆或BSS段中的局部变量或参数、攻击堆或BSS段中的长跳转缓 冲区。
stackover(argv[1]); } else {
printf("Usage:%s \n",argv[0]); } }
5.4 缓冲区溢出攻击
5.4.1 何谓缓冲区溢出
2.内存分配
运行一个编译好的程序时,计算机会在内存中开辟一 段连续的内存块即缓冲区。缓冲区通常分为3个区域,从 内存的低地址向高地址,分别是代码段、数据段(初始化 数据段、未初始化数据段)和堆栈(堆段、栈段),它们 在内存中的位置如图所示。
…
…
函数返回地址Ret 栈基址指针EBP
缓冲区
NNNN(sledge) shellcode
NNNN(sledge) shellcode
RARARARA
程序 跳转
… 溢出前
RARARARA 植入代码
… 溢出后
5.4 缓冲区溢出攻击
5.4.3 缓冲区溢出攻击代码的构造
(1)shellcode shellcode是实施攻击所要植入的攻击代码的核心部分,其功能是为攻击者提供主
非执行的缓冲区是指通过使被攻击程序的数据地址空间不 可执行,使得攻击者不可能执行缓冲区中被植入的攻击程序代 码。 2.强制编写正确的代码
编写正确、安全的代码是避免缓冲区溢出攻击的根本途径。 程序开发人员在所有拷贝数据的地方进行数据长度和有效性检 查. 3.利用编译器的边界检查实现对缓冲区的保护. 4.对程序中的缓冲区溢出漏洞进行静态/动态分析.
5.4 缓冲区溢出攻击
缓冲区溢出攻击是否成功,关键在于植入代码。植入
代码一般由shellcode、填充数据(用N表示) 、返回地址 (用RA 表示)三个部分按照一定方式构造而成。一段典型 的缓冲区溢出攻击植入代码如图所示,其中,RA是用于 覆盖存在漏洞的函数返回地址,将程序跳转到shellcode 处继续执行;N为一段没有实际用途的空指令,常称为 seledge。
在植入的攻击代码中必须存在一段返回地址RA,以便将程序跳转到指定的位置继 续运行。返回地址是指Shellcode的入口地址。如果希望目标主机改变原来的程序执行 流程,转向执行Shellcode,就必须设法用Shellcode的入口地址覆盖某个跳转指令。
5.4 缓冲区溢出攻击
5.4.4 缓冲区溢出攻击的防范 1.采用非执行的缓冲区
1.虚假的链接与虚假的页面
攻击者通过改写Web页中的URL地址,伪造网 页等,使之指向攻击者的Web服务器而不是真正的 Web服务器。假设,攻击者所处的Web服务器是, 攻击者通过在所有链接前增加来改写URL。
#include <stdio.h> #include <string.h> void stackover (char* ptr) {
char buffer[8]; strcpy(buffer,ptr); printf("String=%s\n",buffer); } main(int argc,char* argv[]) { if(argc == 2) {
5.4 缓冲区溢出攻击
5.4.3 缓冲区溢出攻击代码的构造
无论是哪一种溢出攻击,前提条件都必须存在一个有漏洞的缓冲 区,通过溢出该缓冲区,改写其相邻区域的数据。例如,改写诸如函 数返回地址、指针、函数指针或者长跳转缓冲区,这样才可以使程序 流程发生改变。 1. 缓冲区溢出攻击代码结构
攻击者对系统发起攻击,其目的是要获取系统权限。利用缓冲区 溢出漏洞时,通常的做法是将函数的返回地址指向一段构造好的代码, 常称其为shellcode。运行shellcode 后,就可以得到系统的一个 shell。如果存在漏洞的程序是以root权限运行的,则攻击者就能得到 具有root权限的shell,从而完全控制目标主机系统。
5.5 欺骗攻击及其防御
网络欺骗型攻击主要有Web欺骗、ARP欺 骗等手段,除此之外还有IP地址欺骗、TCP 欺骗(在TCP数据包中使用伪造的IP地址)、 DNS欺骗(伪造主机域名)、电子邮件欺 骗、源路由欺骗、以及口令欺骗等多种欺 骗手段。
5.5 欺骗攻击及其防御
5.5.1 Web欺骗攻击
Web欺骗能够成功的关键是在受害者与其它 Web服务器之间设立攻击者的Web服务器,这种 攻击在安全问题中称为“来自中间的攻击”。
黑客攻击技术
5.4 缓冲区溢出攻击
5.4.1 何谓缓冲区溢出
缓冲区是程序运行期间,在内存中分配的一个连续的 存储空间,用于存放各种类型的数据。
所谓缓冲区溢出是指向固定长度的缓冲区写入超出预 先分配长度的内容,造成缓冲区数据溢出,而覆盖了缓冲 区相邻的内存空间。
5.4 缓冲区溢出攻击
一个典型的具有缓冲区溢出的C++语言程序 代码示例如下:
栈(Stack) 堆(Heap)
内存高地址 0xFFFFFFFF
未初始化数据段(BSS)
初始化数据段(Data) 代码段(Code)
内存低地址 0x00000000
5.4 缓冲区溢出攻击
5.4.1 何谓缓冲区溢出
3.缓冲区溢出攻击分类 1)缓冲区溢出攻击的方式与缓冲区属于哪个内存区域密不可分,因此,
机系统的一个shell。 (2)填充数据
编写的shellcode能否得到执行,关键是让覆盖了的函数地址指向shellcode在堆 栈中的入口地址。由于攻击者不能够准确的估计出shellcode在其堆栈中的位置,为了 提高shellcode的命中率,往往需要在shellcode的前面安排一段填充数据(seledge) 用于占位。 (3)定位shellcode的返回地址