网络信息安全技术 2
13
下面是一个典型的缓冲区溢出例子:
void func(char *userdata) { char buf [256]; ... strcpy (buf, userdata) ; ... }
程序员是以要拷贝的数据肯定少于256字节为假设前 提, 并将数据直接存放到缓冲区中。然而,由于数据是 由用户提供的,数据的内容和大小就可以是任意的。 strcpy() 函数将会连续地从 *userdata 中拷贝数据到 buf 中,直至碰到一个 NULL 字符为止。任何大于 256 字节 的数据都会从这个缓冲区溢出。 14
15
3.2 缓冲区溢出攻击的防范措施
为了避免缓冲区溢出,程序员可以使用 strncpy() 函 数来拷贝数据,strncpy()函数只拷贝满足缓冲区大小的 数据。在上面的例子中,将strcpy (buf, userdata) 替换 成 strncpy (buf, userdata, 256), 而 strncpy (buf,
8
2.2 DDoS攻击的检测方法 DDoS攻击不仅仅是简单地发送海量信息,它还利用 了 网 络 协 议 的 缺 陷 来 增 强 攻 击 力 和 隐 蔽 性 。 首 先, DDoS 工具利用了 IP协议中可以伪装 IP源地址的缺陷, 利用原始IP包(raw IP packet)来发送信息,使得难以追 踪 攻 击 者 。 其 次 , DDoS 工 具 利 用 了 TCP、UDP 和 ICMP协议的缺陷,例如,利用TCP SYN报文建立半边 TCP 连接,利用 UDP 的无连接和无源地址认证特性来 发送海量信息等。 为了增强攻击力,DDoS工具还可通过发送单独的数 据包来探测网络协议的缺陷, 并利用这些缺陷进行网络 攻击。
在缓冲区溢出攻击中,攻击者将一个包含攻击代码 shellcode 的数据拷贝到缓冲区中,使缓冲区产生溢出 , shellcode的地址将覆盖所保存的指令地址。这样,当函 数返回时,程序将会重定向到攻击代码上执行,参见图 3.1。 缓冲区溢出攻击有多种方式,它们主要采用程序重 定向法来达到攻击的目的。
DDoS攻击时将会形成某些特征的异常网络流量。如 果在网络上中发现了这些异常网络流量,则说明该网 络可能正在受到DDoS攻击。下面是异常网络流量的主 要特征: (1) 异常的浪涌流量:如果一个网络系统的当前网络 流量大大超出平时的最大网络流量,则表明在网络流 量中包含着明显的海量攻击。 (2) 超长的数据包:在正常的 ICMP和 UDP 通信中, 其数据包都比较小。一般的 ICMP数据包为 64到 128 字 节,而 UDP 数据包不超过 10 个字节。超长的 ICMP 或 UDP 数据包说明可能携带有控制信息,如攻击目标主 机地址、攻击命令和其它参数等。
4
2.1 DDoS攻击的基本原理
从 DDoS 攻 击 机 理 来 看 , 攻 击 者 首 先 扫 描 和 寻 找 Internet中有安全漏洞的主机,然后将这些主机有效地 组织起来,构成一个强大的攻击网络(Attack Network, AN),然后利用这个攻击网络中的主机向目标系统发起 大规模的DoS攻击,耗尽目标系统的可用资源,使目标 系统过载而崩溃。 这个攻击网络由三类节点组成:攻击者 (Attacker, AK)、攻击控制者 (Attacker Master,AM) 和攻击代理 者(Attacker Agent,AA),参见图2.1。
第二章 网络信息安全威胁
一、网络安全威胁
ISO在定义OSI安全体系结构的同时,也指出了OSI
环境中所面临的各种安全威胁。在现实网络世界中,常
见的安全威胁或网络攻击主要有如下几种: (1) 网络监听:通过监听和分析网络数据包来获取有 关重要信息,如用户名和口令、重要数据等; (2) 信息欺骗:通过篡改、删除或重放数据包进行信
20
如果C掌握了A的ISN基值及其增加规律(例如每秒增 加 128000 ,每次连接增加 64000) ,也计算出 C 到 A 的 RTT平均值(RTT/2时间),则可立即转入IP欺骗攻击。 (3) C伪装B向A发送TCP SYN报文请求建立连接, 其源 IP 为 B,TCP 端口为 513 端口 (rlogin)。A 向 B 回送 TCP SYN+ACK 报文进行响应,由于 B 处于暂时瘫痪 状态,无法向A发送TCP ACK报文进行响应。 (4) C伪装成B向A发送TCP ACK报文,该报文中带 有C所预测的A的序列号ISN+1。如果序列号预测准确, 则这个TCP连接便建立起来,转入数据传送阶段。 由于这个连接是 A与B之间的连接,A向B发送数据, 而不是向C,C仍然无法看到A发送给B的数据。
5
ቤተ መጻሕፍቲ ባይዱ 攻击者
攻击网络
攻击控制者
攻击控制者
……
攻击控制者
攻击代 理者
……
攻击代 理者
攻击代 理者
……
攻击代 理者
攻击代 理者
……
攻击代 理者
被攻击目标
图2.1 攻击网络组成
6
DDoS攻击首先利用 Internet 中的脆弱主机构建一个 分布式攻击系统,然后通过这个分布式攻击系统对目标 系统实施DoS攻击,其过程如下: 1. AK使用漏洞扫描工具和其它方法在 Internet 中寻 找和发现脆弱主机,并且要达到一定的数量级; 2. AK基于攻击策略为脆弱主机分配适当角色(AM或 AA),建立起分布攻击视图; 3. AK根据分布攻击视图对脆弱主机进行攻击,获得 对脆弱主机的控制权限(如Root权限),然后在脆弱主机 上安装AM或AA程序; 4. 在所有脆弱主机上安装了 AM或AA程序后, 便建 立起一个分布式DDoS攻击系统;
9
构成DDoS攻击的基础是 Internet上存在大量有安全漏 洞的计算机系统。因此,管理员应当加强网络管理: 1. 经常使用安全漏洞扫描工具来检查本网络中的主 机是否存在着安全漏洞,并采取相应的弥补措施,以避 免主机被攻击者所利用。 2. 在网络边界的接入点上设置防火墙,对网络流量 进行过滤,以阻止任何伪造IP地址的数据包进入网络, 从源头上阻止DDoS攻击或削弱其攻击力。 3. 使用入侵检测系统 (IDS) 来检测进入网络的可疑 流量 , 并及时发出报警信号,提醒管理员采取应对措施 ,如切断连接或反向跟踪等。通常, IDS应当包含当前 最新攻击模式的特征描述,并不断地更新安全策略或规 10 则。
3
DDoS 攻击将 DoS攻击技术向前发展了一步, DoS攻 击采用单点结构,攻击力有限,呈现“孤岛效应”; DDoS攻击则采用分布式结构,攻击力强大,形成“规 模效应”。两者相比,DDoS攻击对网络系统的威胁要 大得多。 DDoS 攻击是一种渗透 (Penetration) 式攻击 , 通过发 送海量数据包来验证一个网络系统所能处理的最大网络 流量。事实上,在网络容量测试中采用了相类似的网络 渗透方法,其目的是确定一个网络系统能够处理多大的 网络流量,以此决定是否需要增加网络带宽。但是,这 类商用软件工具的源代码是不公开的。
19
假设B是A所信任的主机,所谓信任是指在A的 /etc/hosts.equiv 和 $HOME/.rhosts 文件中注册有 B 的 IP地址。如果C企图攻击A,则必须知道A信任B。下面 是C采用IP欺骗手法攻击A的基本过程。 (1) 假设C已经知道了A信任B,首先设法使B的网络 功能暂时瘫痪,以免 B 干扰攻击。可以通过 TCP SYN flood攻击来达到这一目的,即通过TCP SYN flood攻击 使B的网络功能暂时瘫痪。 (2) C设法探测A的当前ISN, 可以采用连续向25端口 发送TCP SYN报文请求来实现。25端口是SMTP服务, 不提供任何安全检查机制。同时,还要计算 C 到 A 的 RTT(round trip time)平均值。
11
(3) 异常的数据包内容:在有些DDoS数据包中, 只包 含英文字符 , 没有空格、标点符号和控制字符。例如 , TFN2K包采用BASE64代码封装, 只包含BASE64字符,并
且TFN2K包中含有重复的“AAAA…”字符串,这些字符
串是用来填充缓存区中加密程序未被填满的部分。 (4) 异常的通信端口: DDoS攻击工具大都使用特定 的高端口号来发送数据。如果发现TCP或UDP通信的目 的端口号大于1024,则该通信是非常可疑的,因为任何
范技术。
2
二、分布式拒绝服务攻击
2000年2月,美国著名的网站Yahoo!、eBay、Buy、 CNN 和 ZDNet 等相继遭到网络黑客大规模的分布式拒 绝服务 (Distributed Denial of Service,DDoS)攻击,导 致这些网站系统瘫痪,服务中断。这一事件在美国乃至 全球都引起了强烈震动。 DDoS攻击采用了与DoS攻击相同的攻击手法,通过 产 生 大 量 虚 假 的 数 据 包 来 耗 尽 目 标 系 统 的 资 源 ,如 CPU 周期、内存和磁盘空间、通信带宽等,使系统无 法处理正常的服务,直到过载而崩溃。
18
在建立远程连接时 , 服务程序是根据 $HOME/.rhosts 以及 /etc/hosts.equiv 文件进行安全检查的,并且只根据 信源IP地址来确认用户的身份,以确定是否接受用户的 RPC请求。 由于 RPC 连接是基于特定端口的 TCP 连接,而建立 TCP连接需要经历“三次握手”过程。每次建立TCP连 接时, TCP 都要为该连接产生一个初始序列号 (ISN)。 为了防止因 TCP 报文的延迟和重传带来的不安全因素 , TCP协议采用适当的算法来产生初始序列号,而不能随 便选取,并且不同的TCP实现系统可能采用不同的生成 算法。如果掌握了TCP初始序列号的分配方法及其随时 间变化的规律,则很容易实施IP欺骗攻击。
在使用这些函数时,应当采取预防措施。并且在不同 的操作系统上,这些函数的实现可能会不同,在编程 之前, 必须认真地阅读程序设计语言有关的技术说明。
17
四、 IP欺骗攻击