IP欺骗技术

IP 欺骗的技术比较复杂,不是简单地照猫画老虎就能掌握,但作为常规攻击手段,有必要理解其原理,至少有利于自己的安全防范,易守难攻嘛。  

假设 B 上的客户运行 rlogin A 上的 rlogind 通信:  

1. B
发送带有 SYN 标志的数据段通知 A 需要建立 TCP 连接。并将 TCP 报头中的 sequence number 设置成自己本次连接的初始值 ISN  

2. A
回传给 B 一个带有 SYS+ACK 标志的数据段,告之自己的 ISN ,并确认 B 发送来的第一个数据段,将 acknowledge number 设置成 B ISN+1  

3. B
确认收到的 A 的数据段,将 acknowledge number 设置成 A ISN+1  

B ---- SYN ----> A 
B <---- SYN+ACK A 
B ---- ACK ----> A 

TCP
使用的 sequence number 是一个 32 位的计数器,从 0-4294967295 TCP 为每一个连接选择一个初始序号 ISN ,为了防止因为延迟、重传等扰乱三次握手, ISN 不能随便选取,不同系统有不同算法。理解 TCP 如何分配 ISN 以及 ISN 随时间变化的规律,对于成功地进行 IP 欺骗攻击很重要。  

基于远程过程调用 RPC 的命令,比如 rlogin rcp rsh 等等,根据 /etc/hosts.equiv 以及 $HOME/.rhosts 文件进行安全校验,其实质是仅仅根据信源 IP 地址进行用户身份确认,以便允许或拒绝用户 RPC 。关于上述两个文件请 man ,不喜欢看英文就去 Unix 版看看我以前灌过的一瓢水。  

IP
欺骗攻击的描述:  

1.
假设 Z 企图攻击 A ,而 A 信任 B ,所谓信任指 /etc/hosts.equiv $HOME/.rhosts 中有相关设置。注意,如何才能知道 A 信任 B 呢?没有什么确切的办法。我的建议就是平时注意搜集蛛丝  
马迹,厚积薄发。一次成功的攻击其实主要不是因为技术上的高明,而是因为信息搜集的广泛翔实。动用了自以为很有成就感的技术,却不比人家酒桌上的巧妙提问,攻击只以成功为终极目标,不在乎手段。  

2.
假设 Z 已经知道了被信任的 B ,应该想办法使 B 的网络功能暂时瘫痪,以免对攻击造成干扰。著名的 SYN flood 常常是一次 IP 欺骗攻击的前奏。请看一个并发服务器的框架:  

int initsockid, newsockid; 
if ((initsockid = socket(...)) <0) { 
error("can't create socket"); 

if (bind(initsockid, ...) <0) { 
error("bind error"); 

if (listen(initsockid, 5) <0) { 
error("listen error"); 

for (;;) { 
newsockid = accept(initsockid, ...); /*
阻塞 */ 
if (newsockid <0) { 
error("accept error"); 

if (fork() == 0) { /*
子进程 */ 
close(initsockid); 
do(newsockid); /*
处理客户方请求 */ 
exit(0); 

close(newsockid); 


listen
函数中第二个参数是 5 ,意思是在 initsockid 上允许的最大连接请求数目。如果某个时刻 initsockid 上的连接请求数目已经达到 5 ,后续到达 initsockid 的连接请求将被 TCP 丢弃。注意一旦连接通过三次握手建立完成, accept 调用已经处理这个连接,则 TCP 连接请求队列空出一个位置。所以这个 5 不是指 initsockid 上只能接受 5 个连接请求。 SYN flood 正是一种 Denial of Service ,导致 B 的网络功能暂 碧被尽 ?nbsp;

Z
B 发送多个带有 SYN 标志的数据段请求连接,注意将信源 IP 地址换成一个不存在的主机 X B 向子虚乌有的 X 发送 SYN+ACK 数据段,但没有任何来自 X ACK 出现。 B IP 层会报告 B TCP 层, X 不可达,但 B TCP 层对此不予理睬,认为只是暂时的。于是 B 在这个 initsockid 上再也不能接收正常的连接请求。  

Z(X) ---- SYN ----> B 
Z(X) ---- SYN ----> B 
Z(X) ---- SYN ----> B 
Z(X) ---- SYN ----> B 
Z(X) ---- SYN ----> B 
...... 
X <---- SYN+ACK B 
X <---- SYN+ACK B 
X <---- SYN+ACK B 
X <---- SYN+ACK B 
X <---- SYN+ACK B 
...... 

作者认为这样就使得 B 网络功能暂时瘫痪,可我觉得好象不对头。因为 B 虽然在 initsockid 上无法接收 TCP 连接请求,但可以在 another initsockid 上接收,这种 SYN flood 应该只对特定的  
服务 ( 端口 ) ,不应该影响到全局。当然如果不断地发送连接请求,就和用 ping 发洪水包一个道理,使得 B TCP/IP 忙于处理负载增大。至于 SYN flood ,回头有机会我单独灌一瓢有关 DoS 的。如何使 B 的网络功能暂 碧被居 很多办法,根据具体情况而定,不再赘述。  

3. Z
必须确定 A 当前的 ISN 。首先连向 25 端口 (SMTP 是没有安全校验机制的 ) ,与 1 中类似,不过这次需要记录 A ISN ,以及 Z A 的大致的 RTT(round trip time) 。这个步骤要重复多次以便求出  
RTT
的平均值。现在 Z 知道了 A ISN 基值和增加规律 ( 比如每秒增加 128000 ,每次连接增加 64000) ,也知道了从 Z A 需要 RTT/2 的时间。必须立即进入攻击,否则在这之间有其他主机与 A 连接,  
ISN
将比预料的多出 64000  

4. Z
A 发送带有 SYN 标志的数据段请求连接,只是信源 IP 改成了 B ,注意是针对 TCP513 端口 (rlogin) A B 回送 SYN+ACK 数据段, B 已经无法响应 ( 凭什么?按照作者在 2 中所说,估计还达不到这个效果,因为 Z 必然要模仿 B 发起 connect 调用, connect 调用会完成全相关,自动指定本地 socket 地址和端口,可事实上 B 很可能并没有这样一个端口等待接收数据。除非 Z 模仿 B 发起  
连接请求时打破常规,主动在客户端调用 bind 函数,明确完成全相关,这样必然知道 A 会向 B 的某个端口回送,在 2 中也针对这个端口攻击 B 。可是如果这样,完全不用攻击 B bind 的时候  
指定一个 B 上根本不存在的端口即可。我也是想了又想,还没来得及看看老外的源代码,不妥之处有待商榷。总之,觉得作者好象在蒙我们,他自己也没有实践成功过吧。 ) B TCP 层只是  
简单地丢弃 A 的回送数据段。  

5. Z
暂停一小会儿,让 A 有足够时间发送 SYN+ACK ,因为 Z 看不到这个包。然后 Z 再次伪装成 B A 发送 ACK ,此时发送的数据段带有 Z 预测的 A ISN+1 。如果预测准确,连接建立,数据传送开始。问题在于即使连接建立, A 仍然会向 B 发送数据,而不是 Z Z 仍然无法看到 A 发往 B 的数据段, Z 必须蒙着头按照 rlogin 协议标准假冒 B A 发送类似 "cat + + >> ~/.rhosts" 这样的命令,于是攻击完成。如果预测不准确, A 将发送一个带有 RST 标志的数据段异常终止连接, Z 只有从头再来。  

Z(B) ---- SYN ----> A 
B <---- SYN+ACK A 
Z(B) ---- ACK ----> A 
Z(B) ---- PSH ----> A 
...... 

6. IP
欺骗攻击利用了 RPC 服务器仅仅依赖于信源 IP 地址进行安全校验的特性,建议阅读 rlogind 的源代码。攻击最困难的地方在于预测 A ISN 。作者认为攻击难度虽然大,但成功的可能性  
也很大,不是很理解,似乎有点矛盾。考虑这种情况,入侵者控制了一台由 A B 之间的路由器,假设 Z 就是这台路由器,那么 A 回送到 B 的数据段,现在 Z 是可以看到的,显然攻击难度  
骤然下降了许多。否则 Z 必须精确地预见可能从 A 发往 B 的信息,以及 A 期待来自 B 的什么应答信息,这要求攻击者对协议本身相当熟悉。同时需要明白,这种攻击根本不可能在交互状态下完  
成,必须写程序完成。当然在准备阶段可以用 netxray 之类的工具进行协议分析。  

7.
如果 Z 不是路由器,能否考虑组合使用 ICMP 重定向以及 ARP 欺骗等技术?没有仔细分析过,只是随便猜测而已。并且与 A B Z 之间具体的网络拓扑有密切关系,在某些情况下显然大幅度  
降低了攻击难度。注意 IP 欺骗攻击理论上是从广域网上发起的,不局限于局域网,这也正是这种攻击的魅力所在。利用 IP 欺骗攻击得到一个 A 上的 shell ,对于许多高级入侵者,得到目标主  
机的 shell ,离 root 权限就不远了,最容易想到的当然是接下来进行 buffer overflow 攻击。  

8.
也许有人要问,为什么 Z 不能直接把自己的 IP 设置成 B 的?这个问题很不好回答,要具体分析网络拓扑,当然也存在 ARP 冲突、出不了网关等问题。那么在 IP 欺骗攻击过程中是否存在 ARP 冲突问题。回想我前面贴过的 ARP 欺骗攻击,如果 B ARP Cache 没有受到影响,就不会出现 ARP 冲突。如果 Z A 发送数据段时,企图
 
博客网版权所有

你可能感兴趣的:(职场,休闲,IP欺骗技术)