荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: ainny (为你等待), 信区: Hacker
标  题: 多种Linux系统2.2.x内核IP伪装存在安全漏洞(
发信站: BBS 荔园晨风站 (Sun Apr  2 18:07:44 2000), 转信

发信人: cloudsky (小四), 信区: Security
标  题: 多种Linux系统2.2.x内核IP伪装存在安全漏洞(isbase)
发信站: 武汉白云黄鹤站 (Fri Mar 31 17:13:30 2000), 站内信件

发布日期: 2000-3-31
更新日期: 2000-3-31
受影响的系统:  Debian Linux 2.2pre potato
Debian Linux 2.2
Debian Linux 2.1
Linux kernel 2.2.14
Linux kernel 2.2.12
Linux kernel 2.2.10
RedHat Linux 6.2i386
RedHat Linux 6.1 sparc
RedHat Linux 6.1 i386
RedHat Linux 6.1 alpha
RedHat Linux 6.0 sparc
RedHat Linux 6.0 i386
RedHat Linux 6.0 alpha
描述:
--------------------------------------------------------------------------------



Linux系统2.2.x内核的IP伪装实现中存在严重安全漏洞。在相关的核
心代码中对连接情况缺乏认真的检查。攻击者可以重写核心中UDP伪装
表项,使攻击者的UDP包可以被路由进内部机器。


当一个内部IP要访问外部网络的DNS服务器时,当发送的UDP包经过IP
伪装网关时,内核会添加一个表项来记录这个连接。比如从内部主机A
的1035端口连往外部主机C的53端口的一个UDP包,内核将这个包的源地
址替换成伪装网关(B)的IP,源端口设置成网关上为此连接分配的一个
端口,缺省是从61000端口到65096端口,因此理论上可以核心同时处
理4096个TCP/UDP伪装连接。

Host A:1035 -> GW B:63767 -> Host C:53


当外部网络发送一个UDP包到伪装网关时,Linux IP伪装只根据目标
端口来决定是否应该将这个UDP包转发到内部网络。如果目标端口在
已经建立的伪装连接表中有对应表项,它就会将此包中的源ip和源端
口更新相应表项的远程主机ip和端口。攻击者只要判断伪装网关的的
端口就可能用自己的ip和端口来重写伪装连接表。伪装网关用来为伪
装连接服务的端口范围通常是从61000到65096,因此外部攻击者很容易
判断哪些端口已经被用来建立连接。攻击者可以向伪装网关的这些端
判断哪些端口已经被用来建立连接。攻击者可以向伪装网关的这些端
口发送UDP检测包,然后检查端口的ICMP应答包的IP ID。每个主机每
发一个包,它的TCP/IP栈中的IP ID会递增一。因此对于用于ip伪装的
端口所发会的ICMP应答中将会有内部主机的IP ID.这个ID通常会与网
关主机的当前IP ID相差很多,通常都在1000以上。下面的例子就显示
了利用弱点进行攻击的过程:

主机 A 是内部主机 (192.168.1.100)
主机 B 是伪装网关 (192.168.1.1 / 10.0.0.1)
主机 C 是一台外部DNS服务器 (10.0.0.25)
主机 X 是外部攻击者的IP (10.10.187.13)

进行检测之前,在伪装网关上执行命令:ipchains -L -M -n 来显示
当前伪装连接表的情况:

> UDP 03:39.21 192.168.1.100 10.0.0.25 1035 (63767) -> 53

目前是从192.168.1.100的1035端口发往10.0.0.25的53端口的连接,伪
装端口是63767

[ 从攻击者的机器上进行tcpdump得到的结果]

(为了更容易的看清楚问题,这里我们设置所有检测用的包的源端口为12345 )
判断哪些端口已经被用来建立连接。攻击者可以向伪装网关的这些端
口发送UDP检测包,然后检查端口的ICMP应答包的IP ID。每个主机每
发一个包,它的TCP/IP栈中的IP ID会递增一。因此对于用于ip伪装的
端口所发会的ICMP应答中将会有内部主机的IP ID.这个ID通常会与网
关主机的当前IP ID相差很多,通常都在1000以上。下面的例子就显示
了利用弱点进行攻击的过程:

主机 A 是内部主机 (192.168.1.100)
主机 B 是伪装网关 (192.168.1.1 / 10.0.0.1)
主机 C 是一台外部DNS服务器 (10.0.0.25)
主机 X 是外部攻击者的IP (10.10.187.13)

进行检测之前,在伪装网关上执行命令:ipchains -L -M -n 来显示
当前伪装连接表的情况:

> UDP 03:39.21 192.168.1.100 10.0.0.25 1035 (63767) -> 53

目前是从192.168.1.100的1035端口发往10.0.0.25的53端口的连接,伪
装端口是63767

[ 从攻击者的机器上进行tcpdump得到的结果]

(为了更容易的看清楚问题,这里我们设置所有检测用的包的源端口为12345 )
(为了更容易的看清楚问题,这里我们设置所有检测用的包的源端口为12345 )

[ 我们的检测将从61000端口开始,我们略掉了前面的一些结果 ]

10.0.0.1 > 10.10.187.13: icmp: 10.0.0.1 udp port 63762 unreachable [tos 0xd8] (t
l 245, id 13135)
10.10.187.13.12345 > 10.0.0.1.63763: udp 0 (DF) [tos 0x18] (ttl 254, id 23069)
10.0.0.1 > 10.10.187.13: icmp: 10.0.0.1 udp port 63763 unreachable [tos 0xd8] (t
l 245, id 13136)
10.10.187.13.12345 > 10.0.0.1.63764: udp 0 (DF) [tos 0x18] (ttl 254, id 23070)
10.0.0.1 > 10.10.187.13: icmp: 10.0.0.1 udp port 63764 unreachable [tos 0xd8] (t
l 245, id 13137)
10.10.187.13.12345 > 10.0.0.1.63765: udp 0 (DF) [tos 0x18] (ttl 254, id 23071)
10.0.0.1 > 10.10.187.13: icmp: 10.0.0.1 udp port 63765 unreachable [tos 0xd8] (t
l 245, id 13138)
10.10.187.13.12345 > 10.0.0.1.63766: udp 0 (DF) [tos 0x18] (ttl 254, id 23074)
10.0.0.1 > 10.10.187.13: icmp: 10.0.0.1 udp port 63766 unreachable [tos 0xd8] (t
l 245, id 13139)
10.10.187.13.12345 > 10.0.0.1.63767: udp 0 (DF) [tos 0x18] (ttl 254, id 23083)

10.0.0.1 > 10.10.187.13: icmp: 10.0.0.1 udp port 63767 unreachable [tos 0xd8] (t
l 244, id 17205)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^
上面这个包的ID是17205,它与13139相差已经超过4000了,这就是说,我们发现了一个经过?
装的连接。!!!


10.10.187.13.12345 > 10.0.0.1.63768: udp 0 (DF) [tos 0x18] (ttl 254, id 23084)
10.0.0.1 > 10.10.187.13: icmp: 10.0.0.1 udp port 63768 unreachable [tos 0xd8] (t
l 245, id 13140)
10.10.187.13.12345 > 10.0.0.1.63769: udp 0 (DF) [tos 0x18] (ttl 254, id 23088)
10.0.0.1 > 10.10.187.13: icmp: 10.0.0.1 udp port 63769 unreachable [tos 0xd8] (t
l 245, id 13141)
10.10.187.13.12345 > 10.0.0.1.63770: udp 0 (DF) [tos 0x18] (ttl 254, id 23090)
10.0.0.1 > 10.10.187.13: icmp: 10.0.0.1 udp port 63770 unreachable [tos 0xd8] (t
l 245, id 13142)
10.10.187.13.12345 > 10.0.0.1.63771: udp 0 (DF) [tos 0x18] (ttl 254, id 23091)
10.0.0.1 > 10.10.187.13: icmp: 10.0.0.1 udp port 63771 unreachable [tos 0xd8] (t
l 245, id 13143)
10.10.187.13.12345 > 10.0.0.1.63771: udp 0 (DF) [tos 0x18] (ttl 254, id 23092)
10.0.0.1 > 10.10.187.13: icmp: 10.0.0.1 udp port 63772 unreachable [tos 0xd8] (t
l 245, id 13144)

[ 我们的检测到65096端口结束,我们省略了一些结果 ]
[ 我们的检测到65096端口结束,我们省略了一些结果 ]

现在我们再来检查一下伪装网关的伪装连接表的情况:
ipchains -L -M -n
> UDP 04:35.12 192.168.1.100 10.10.187.13 1035 (63767) -> 12345

可以看到,现在远程主机已经换成了攻击者的ip:10.10.187.13,目标端
口也换成了攻击者检测用的源端口:12345

现在攻击者就可以从12345源端口发送UDP数据给内部主机的1035端口了。

<* 来源:H D Moore <hdm@secureaustin.com> *>


--------------------------------------------------------------------------------
建议:

对于访问外部DNS的问题,一个可能的解决办法是在伪装网关上设置一
个缓存域名服务器,然后禁止UDP包的伪装。

--
            我问飘逝的风:来迟了?
            风感慨:是的,他们已经宣战。
可以看到,现在远程主机已经换成了攻击者的ip:10.10.187.13,目标端
            我问苏醒的大地:还有希望么?
            大地揉了揉眼睛:还有,还有无数代的少年。
            我问长空中的英魂:你们相信?
            英魂带着笑意离去:相信,希望还在。

※ 来源:.武汉白云黄鹤站 bbs.whnet.edu.cn.[FROM: 203.207.226.124]

--
☆ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: bbs@192.168.28.106]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店