第十四章 软件漏洞
软件漏洞
? 拒绝服务
– DoS基本原理
– 利用软件实现的缺陷攻击
– 利用协议的漏洞攻击
– 进行资源比拼
软件漏洞
? 缓冲区溢出
– 关于堆栈的基础知识
– BufferOverflow的机理
– ShellCode的编写
– 实战中的缓冲区溢出
– 缓冲区溢出示例
– C++程序的缓冲区溢出攻击
– windows远程堆栈溢出
软件漏洞
? 格式化字串
– 基础知识简介
– `格式化串漏洞原理
– wu-ftp 6.0格式化串漏洞
? 其他常见漏洞
– 内存漏洞
– 内存 /交换区漏洞
– 符号连接
– 竞争条件漏洞
– Rhost,xhost漏洞
拒绝服务
? DoS( DenialofService)拒绝服务攻击广义
上可以指任何导致你的服务器不能正常提
供服务的攻击。
? 一个用户占有过多自愿而不给其他用户保
留共享资源(耗尽自愿,超负荷攻击),
就是拒绝服务攻击。
利用软件实现的缺陷攻击
? OOB攻击(常用工具 winnuke),teardrop
攻击(常用工具 teardrop.cboink.cbonk.c),
land攻击,IGMP碎片包攻击,jolt攻击,
Cisco2600路由器 IOSversion12.0(10)远程
拒绝服务攻击等等,这些攻击都是利用了
被攻击软件的实现上的缺陷完成 DoS攻击的。
利用协议的漏洞攻击
? 如果说上面那种漏洞危害的时间不是很长,
那么这种攻击的生存能力却非常强。为了
能够在网络上进行互通、互联,所有的软
件实现都必须遵循既有的协议,而如果这
种协议存在漏洞的话,所有遵循此协议的
软件都会受到影响。
进行资源比拼
? 这种攻击方式属于无赖打法,凭借着手中
的资源丰富,发送大量的垃圾数据侵占完
对方的资源,导致 DoS。
软件漏洞
? 缓冲区溢出
– 关于堆栈的基础知识
– BufferOverflow的机理
– ShellCode的编写
– 实战中的缓冲区溢出
– 缓冲区溢出示例
– C++程序的缓冲区溢出攻击
– windows远程堆栈溢出
关于堆栈的基础知识
? 一个应用程序在运行
时,它在内存中的映
像可以分为三个部分,
代码段,数据段和堆
栈段 (参见图 1)。
? 详细介绍堆栈段
堆栈
数据段
代码 段
栈 底
栈 顶
内存 高端
内存 低 端
BufferOverflow的机理
? 我们可以通过 Buffer Overflow来改变在堆栈
中存放的过程返回地址,从而改变整个程
序的流程,使它转向任何我们想要它去的
地方,
ShellCode的编写
实战中的缓冲区溢出
缓冲区溢出示例
? main()函数将第 1个命令行参数作为字符串
传入函数 xj()中,xj()函数的功能是将该字
符串复制到局部变量分配的字节中,并打
印出来,在 xj()函数调用 strcpy()前未对
input的长度进行检查,可能发生缓冲区溢
出。实验的目的是让其发生缓冲区溢出,
并最终改变程序的执行流程,执行攻击代
码 ——程序中的 attack()函数。
C++程序的缓冲区溢出攻击
? 对于大多数情况,C语言的缓冲区溢出技术
术对于 C++语言也是适用的,但 C++的面
向对象的特性也导致了新的缓冲区溢出技
术。
– - 构造我们自己的 VTABLE,其中的指针入口
将指向我们期望运行的代码(如 shellcode)。
– - 使缓冲区溢出,并覆盖 VPTR,使其指向我
们的 VTABLE。
windows远程堆栈溢出
? 由于在 windows中,像对 gets (array)这样
的函数缺乏对 array数组的边界检查,我们
可以给程序一个很长的串,从而覆盖堆栈
中的返回地址。我们可以在这个串中精心
设计,从而使程序转到我们的 shellcode中,
使 windows不知不觉地开一个 telnetd服务器,
我们就可以远程入侵该系统。
软件漏洞
? 格式化字串
– 基础知识简介
– `格式化串漏洞原理
– wu-ftp 6.0格式化串漏洞
? 其他常见漏洞
– 内存漏洞
– 内存 /交换区漏洞
– 符号连接
– 竞争条件漏洞
– Rhost,xhost漏洞
基础知识简介
? 普通的缓冲区溢出就是利用了堆栈生长方
向和数据存储方向相反的特点,用后存入
的数据覆盖先前压栈的数据,一般是覆盖
返回地址,从而改变程序的流程,这样子
函数返回时就跳到了黑客指定的地址,就
可以按照黑客意愿做任何事情了。
格式化串漏洞原理
? 所谓格式化串,就是在 *printf()系列函数中
按照一定的格式对数据进行输出,可以输
出到标准输出,即 printf(),也可以输出到
文件句柄,字符串等,对应的函数有 fprintf,
sprintf,snprintf,vprintf,vfprintf,
vsprintf,vsnprintf等。
格式化串漏洞原理
? 可以被黑客利用的 *printf()系列函数的三个
特性,
– (1)参数个数不固定造成访问越界数据
– (2)利用 %n格式符写入跳转地址
– (3)利用附加格式符控制跳转地址的值
wu-ftp 6.0格式化串漏洞
? ( 1)对 wu-ftp 6.0格式化串漏洞的分析
– wu-ftp(Washington University ftp server)是一
个非常流行的 unix/linux系统 ftp服务器,它的
6.0版本存在格式化串漏洞。由于在大多数
Linux系统中它是默认安装的,所以相当多的网
站都受这个漏洞的影响,针对它的攻击也是非
常普遍的。
? ( 2) wu-ftp漏洞的利用
软件漏洞
? 格式化字串
– 基础知识简介
– `格式化串漏洞原理
– wu-ftp 6.0格式化串漏洞
? 其他常见漏洞
– 内存漏洞
– 内存 /交换区漏洞
– 符号连接
– 竞争条件漏洞
– Rhost,xhost漏洞
内存漏洞
? 一个对象被装入并且分配了内存,而在对
象被关闭时却没有释放分配的内存,这样,
内存漏洞就产生了。在开发工具中也会有
内存漏洞,这是我们无法控制的,但是我
们必须注意我们自己的代码所造成的内存
漏洞。
内存 /交换区漏洞
? 说明内存交换区漏洞,可以举例说明如何获取
Shadow口令文件。该方法利用了 Solaris操作系统
中 FTPD的一个 BUG,使得用户可以获得该机的口
令文件。
– 1.通过 ftp正常登录到目的主机上
– 2.输入如下命令序列,
– ftp>userrootwrongpasswd
– ftp>quotepasv
– 3.这时,ftpd会报错退出,同时会在当前目录下生成一
个 core,口令文件就包含在这个 core中。
符号连接
? 在 unix系统中,可以有别名,使用 ln –s进行,
例如,
? ln –s /etc/passwd /tmp/aa
? 其中 /tmp/aa等于 /etc/passwd的别名,对 aa
的操作,就是对 /etc/passwd的操作。符号
连接的 bug就是利用系统进程写文件
/tmp/aa,造成对 /etc/passwd的修改。
竞争条件漏洞
? 漏洞的产生在于程序处理文件等实体时在
时序和同步方面存在问题,这处理的过程
中可能存在一个机会窗口使攻击者能够施
以外来的影响。
Rhost,xhost漏洞
? 在 Linux 系统中,系统是通过查看
/etc/hosts.equiv 及 $HOME/.rhosts文件来
控制可以使用, r”命令的节点和用户。所以,
这两个文件的正确设置是安全使用, r”命令
的基本保障。
? 黑客在侵入某个 Linux 系统后,通常做的一
件事就是修改在主目录下的 ".rhosts"文件,
以便为自己日后再次进入系统留下后路。
Rhost,xhost漏洞
? 还要特别注意,,rhosts”文件中不能涉及一些特殊
帐户(例如 news,bbs 等等),一些黑客就是通
过这条途径进入用户帐户而有不留下自己的来龙
去脉。
? 可以看出,".rhosts"为外部侵入留下了潜在的危
险,用户在自己设置时要格外小心。如果不是特
别需要,建议在 ".rhosts"文件中不要设外部入口。
同样的,对于系统管理员,如果不是特别需要,
建议在 /etc/hosts.equiv 中不设入口。
作业
? 软件限制,必须有特定的 U盘才能运行