二.ICMP
TCP和UDP能承载数据,但ICMP仅包含控制信息。因此,ICMP信息不能真正用于入侵其它机器。Hacker们使用ICMP通常是为了扫描网络,发动DoS攻击,重定向网络交通。(这个观点似乎不正确,可参考shotgun关于木马的文章,译者注)
一些防火墙将ICMP类型错误标记成端口。要记住,ICMP不象TCP或UDP有端口,但它确实含有两个域:类型(type)和代码(code)。而且这些域的作用和端口也完全不同,也许正因为有两个域所以防火墙常错误地标记了他们。更多关于ICMP的知识请参考Infosec Lexicon entry on ICMP。
关于ICMP类型/代码的含义的官方说明请参 http://www.isi.edu/in-notes/iana/assignments/icmp-parameters。该文献描述官方含义,而本文描述Hacker的企图,详见下文。
类型 代码 名称 含义
0 * Echo replay 对ping的回应
3 * Destination Unreachable 主机或路由器返回信息:一些包未达到目的地
0 Net Unreachable 路由器配置错误或错误指定IP地址
1 Host Unreachable 最后一个路由器无法与主机进行ARP通讯
3 Port unreachable 服务器告诉客户端其试图联系的端口无进程侦听
4 Fragmentation Needed but DF set 重要:如果你在防火墙丢弃记录中发现这些包,你应该让他们通过否则你的客户端将发现TCP连接莫名其妙地断开
4 * Source Quench Internet阻塞
5 * Redirect 有人试图重定向你的默认路由器,可能Hacker试图对你进行“man-in-middle”的攻击,使你的机器通过他们的机器路由。
8 * Echo Request ping
9 * Router Advertisement hacker可能通过重定向你的默认的路由器DoS攻击你的Win9x 或Solaris。邻近的Hacker也可以发动man-in-the-middle的攻击
11 * Time Exceeded In Transit 因为超时包未达到目的地
0 TTL Exceeded 因为路由循环或由于运行traceroute,路由器将包丢弃
1 Fragment reassembly timeout 由于没有收到所有片断,主机将包丢弃
12 * Parameter Problem 发生某种不正常,可能遇到了攻击
(一) type=0 (Echo reply)
发送者在回应由你的地址发送的ping,可能是由于以下原因:
有人在ping那个人:防火墙后面有人在ping目标。
自动ping:许多程序为了不同目的使用ping,如测试联系对象是否在线,或测定反应时间。很可能是使用了类似VitalSign‘s Net.Medic的软件,它会发送不同大小的ping包以确定连接速度。
诱骗ping扫描:有人在利用你的IP地址进行ping扫描,所以你看到回应。
转变通讯信道:很多网络阻挡进入的ping(type=8),但是允许ping回应(type=0)。因此,Hacker已经开始利用ping回应穿透防火墙。例如,针对internet站点的DdoS攻击,其命令可能被嵌入ping回应中,然后洪水般的回应将发向这些站点而其它Internet连接将被忽略。
(二) Type=3 (Destination Unreachable)
在无法到达的包中含有的代码(code)很重要
记住这可以用于击败“SYN洪水攻击”。即如果正在和你通讯的主机受到“SYN洪水攻击”,只要你禁止ping(type=3)进入,你就无法连接该主机。
有些情况下,你会收到来自你从未听说的主机的ping(type=3)包,这通常意味着“诱骗扫描”。攻击者使用很多源地址向目标发送一个伪造的包,其中有一个是真正的地址。Hacker的理论是:受害者不会费力从许多假地址中搜寻真正的地址。
解决这个问题的最好办法是:检查你看到的模式是否与“诱骗扫描”一致。比如,在ICMP包中的TCP或UDP头部分寻找交互的端口。
1) Type = 3, Code = 0 (Destination Net Unreachable)
无路由器或主机:即一个路由器对主机或客户说,:“我根本不知道在网络中如何路由!包括你正连接的主机”。这意味着不是客户选错了IP地址就是某处的路由表配置错误。记住,当你把自己UNIX机器上的路由表搞乱后你就会看到“无路由器或主机”的信息。这常发生在配置点对点连接的时候。
2) Type = 3, Code = 3 (Destination Port Unreachable)
这是当客户端试图连击一个并不存在的UDP端口时服务器发送的包。例如,如果你向161端口发送SNMP包,但机器并不支持SNMP服务,你就会收到ICMP Destination Port Unreachable包。
解码的方案
解决这个问题的第一件事是:检查包中的端口。你可能需要一个嗅探器,因为防火墙通常不会记录这种信息。这种方法基于ICMP原始包头包含IP和UDP头。以下是复制的一个ICMP unreachable包:
00 00 BA 5E BA 11 00 60 97 07 C0 FF 08 00 45 00
00 38 6F DF 00 00 80 01 B4 12 0A 00 01 0B 0A 00
01 C9 03 03 C2 D2 00 00 00 00 45 00 00 47 07 F0
00 00 80 11 1B E3 0A 00 01 C9 0A 00 01 0B 08 A7
79 19 00 33 B8 36
其中字节03 03是ICMP的类型和代码。最后8个字节是原始UDP头,解码如下:
08A7 UDP源端口 port=2215,可能是临时分配的,并不是很重要。
7919 UDP目标端口 port=31001,很重要,可能原来用户想连接31001端口的服务。
0033 UDP长度 length=51,这是原始UDP数据的长度,可能很重要。
B836 UDP校验和 checksum=0xB836,可能不重要。
你为什么会看到这些?
“诱骗UDP扫描”:有人在扫描向你发送ICMP的机器。他们伪造源地址,其中之一是你的IP地址。他们实际上伪造了许多不同的源地址使受害者无法确定谁是攻击者。如果你在短时间内收到大量来自同一地址的这种包,很有可能是上述情况。检查UDP源端口,它总在变化的话,很可能是Scenario。
“陈旧DNS”:客户端会向服务器发送DNS请求,这将花很长时间解析。当你的DNS服务器回应的时候,客户端可能已经忘记你并关闭了用于接受你回应的UDP端口。如果发现UDP端口值是53,大概就发生了这种情况。这是怎么发生的?服务器可能在解析一个递归请求,但是它自己的包丢失了,所以它只能超时然后再试。当回到客户时,客户认为超时了。许多客户程序(尤其是Windows中的程序)自己做DNS解析。即它们自己建立SOCKET进行DNS解析。如果它们把要求交给操作系统,操作系统就会一直把端口开在那里。
“多重DNS回应”:另一种情况是客户收到对于一个请求的多重回应。收到一个回应,端口就关闭了,后序的回应无法达到。此外,一个Sun机器与同一个以太网中的多个NICs连接时,将为两个NICs分配相同的MAC地址,这样Sun机器每桢会收到两个拷贝,并发送多重回复。还有,一个编写的很糟糕的客户端程序(特别是那些吹嘘是多线程DNS解析但实际上线程不安全的程序)有时发送多重请求,收到第一个回应后关闭了Socket。但是,这也可能是DNS欺骗,攻击者既发送请求由发送回应,企图使解析缓存崩溃。
“NetBIOS解析”:
如果Windows机器接收到ICMP包,看看UDP目标端口是否是137。如果是,那就是windows机器企图执行gethostbyaddr()函数,它将将会同时使用DNS和NetBIOS解析IP地址。DNS请求被发送到某处的DNS服务器,但NetBIOS直接发往目标机器。如果目标机器不支持NetBIOS,目标机器将发送ICMP unreachable。
“Traceroute”:大多数Traceroute程序(Windows中的Tracert.exe除外)向关闭的端口发送UDP包。这引起一系列的背靠背的ICMP Port Unreachable包发回来。因此你看到防火墙显示这样ICMP包,可能是防火墙后面的人在运行Traceroute。你也会看到TTL增加。
3) Type = 3, Code = 4 (Fragmentation Needed and Don‘t Fragment was Set)
这是由于路由器打算发送标记有(DF, 不允许片断)的IP报文引起的。为什么?IP和TCP都将报文分成片断。TCP在管理片断方面比IP有效得多。因此,饯堆趋向于找到“Path MTU”(路由最大传输单元)。在这个过程将发送这种ICMP包。
假设ALICE和BOB交谈。他们在同一个以太网上(max frame size = 1500 bytes),但是中间有连接限制最大IP包为600 byte。这意味着所有发送的IP包都要由路由器切割成3个片断。因此在TCP层分割片断将更有效。TCP层将试图找到MTU(最大传输单元)。它将所有包设置DF位(Don‘t Fragment),一旦这种包碰到不能传输如此大的包的路由器时路由器将发回ICMP错误信息。由此,TCP层能确定如何正确分割片断。
你也许应该允许这些包通过防火墙。否则,当小的包可以通过达到目的地建立连接,而大包会莫名其妙的丢失断线。通常的结果是,人们只能看到Web页仅显示一半。
路由最大传输单元的发现越来越整合到通讯中。如IPsec需要用到这个功能。
(三) Type = 4 (Source Quench)
这种包可能是当网络通讯超过极限时由路由器或目的主机发送的。但是当今的许多系统不生成这些包。原因是现在相信简单包丢失是网络阻塞的最后信号(因为包丢失的原因就是阻塞)。
现在source quenches的规则是(RFC 1122):
路由器不许生成它们
主机可以生成它们
主机不能随便生成它们
防火墙应该丢弃它们
但是,主机遇到Source Quench仍然减慢通讯,因此这被用于DoS。防火墙应该过滤它们。如果怀疑发生DoS,包中的源地址是无意义的,因为IP地址肯定是虚构的。
已知某些SMTP服务器会发送Source Quench。
(四) Type = 8 (Echo aka PING)
这是ping请求包。有很多场合使用它们;它可能意味着某人扫描你机器的恶意企图,但它也可能是正常网络功能的一部分。参见Type = 0 (Echo Response)
很多网络管理扫描器会生成特定的ping包。包括ISS扫描器,WhatsUp监视器等。这在扫描器的有效载荷中可见。许多防火墙并不记录这些,因此你需要一些嗅探器捕捉它们或使用入侵检测系统(IDS)标记它们。
记住,阻挡ping进入并不意味着Hacker不能扫描你的网络。有许多方法可以代替。例如,TCP ACK扫描越来越流行。它们通常能穿透防火墙而引起目标系统不正常的反应。
发送到广播地址(如x.x.x.0或x.x.x.255)的ping可能在你的网络中用于smurf放大。
(五) Type = 11 (Time Exceeded In Transit)
这一般不会是Hacker或Cracker的攻击
1) Type = 11, Code = 0 (TTL Exceeded In Transit)
这可能有许多事情引起。如果有人从你的站点traceroute到Internet,你会看到许多来自路由器的TTL增加的包。这就是traceroute的工作原理:强迫路由器生成TTL增加的信息来发现路由器。
防火墙管理员看到这种情况的原因是Internet上发生路由循环。路由器Flapping(持续变换路由器)是一个常见的问题,常会导致循环。这意味着当一个IP包朝目的地前进时,这个包被一个路由器错误引导至一个它曾经通过的路由器。如果路由器在包经过的时候把TTL域减一,这个包只好循环运动。实际上当TTL值为0时它被丢弃。
造成这种情况的另一个原因是距离。许多机器(Windows)的默认TTL值是127或更低。路由器也常常会把TTL值减去大于1的值,以便反应诸如电话拨号或跨洋连接的慢速连接。因此,可能由于初始TTL值太小,而使站点无法到达。此外,一些Hacker/Cracker也会使用这种办法使站点无法到达。
2) Type = 11, Code = 1 (Fragment Reassembly Time Exceeded)
当发送分割成片断的IP报文时,发送者并不接收所有片断。通常,大多数TCP/IP通讯甚至不分割片断。你看到这种情况必定是采用了分割片断而且你和目的地之间有阻塞。
(六) Type = 12 (Parameter Problem)
这可能意味着一种进攻。有许多足印技术会生成这种包。
防火墙问答
Version 0.4.1, June 20, 2000
http://www.robertgraham.com/pubs/firewall-seen.html
Copyright 1998-2000 by Robert Graham (mailto:firewall-seen1@robertgraham.com.
All rights reserved. This document may only
be reproduced (whole or in part) for non-commercial purposes. All reproductions must contain
this copyright notice and must not be altered,
except by permission of the author.
3. IP地址
3.1 什么是源路由包?
源路由(source routed )是IP头的可选项,它允许发送者不考虑一些或所有的路由器的路由决定。但通常由源地址和目的地址之间地路由器决定IP包如何路由。
有一些网络管理使用这种包,比如测试是否两个计算机可否通讯。A点的网络管理员可以通过C点发送一个包给B点,这就能知道B点和C点是否能通讯。
同样的方法可以用于逃避防火墙,推翻信任关系,与使用私有地址(10.x.x.x, 192.168.x.x, 172.[16-31].x.x)的机器通讯。
假如你是Internet上的一个hacker/cracker,你想和防火墙后面的一个使用10.x.x.x地址的机器通讯。因为Internet上的路由器不知道子网的确切位置,你的包将被丢弃。但是,你可以放松IP包中的源路由选项并告诉Internet上的路由器将包发送至防火墙。因为防火墙跨于私有网络和Internet之间,所以它知道如何正确传递IP包。因此,你可以通过将所有包发送至防火墙,与受害者建立会话。
这也可用于IP欺骗。你假装是一个路由器(就像上面的防火墙)而且其它地方的某人正在通过你发送IP包。因此,随机选择一个Internet上的机器(ALICE)作为被欺骗者,从ALICE向受害者(BOB)发送数据包。这样BOB会认为数据包来自于ALICE,但实际上它们是你发出来的。利用从你机器上发出的源路由包,伪造所有IP包(好像从ALICE发出的一样),你就可以自由的访问受害者的网络了。
越来越多的Internet核心路由器开始禁止源路由包。不管怎么说,他们减慢路由速度,同时也是巨大的安全隐患。实际上也不需要它们。管理员应该做同样的事禁止所有的源路由包:包括防火墙,路由器,甚至终端用户以防他们接受内向源路由包。
参见Microsoft Knowledge Base article Q217336 for setting
the "DisableIPSourceRouting" on WinNT SP5 systems
3.2 我看见在reject log中有255.255.255.255的IP地址
近来这样的很多,因为越来越多的人开始使用DSL或cable-modem。不像点对点连接(T1,帧中继),这些告诉技术将你至于ATM VLAN(一个单广播域)。实际上,许多cable-modem用户每天收到很多兆数据仅仅因为这种广播。
你必须记住这种包必须是“局部”的。通常路由器将不转发IP地址为255.255.255.255包。因为这些原因,这种IP地址被称为“局域广播地址”:这种包不会传播到局域网段(或虚拟网段)以外。
这些包事干什么的?
不妨查看一下本文头部的端口列表。如果不在端口列表中,你只好用一个嗅探器捕捉这些包,分析它们的内容了。
例如,在随机端口运行的一个常用服务是CORBA IIOP包。许多服务运行于535端口,但常常重新配置到广播网址的其它端口。如果你看到嗅探器捕捉到的包(HEX),你将在内容中看到IIOP字样。
其它情况下没什么值得注意的。实际上通过这种包你可以找到可以攻击的对象。但Hacker通常不会攻击拓扑结构中的网络邻居(因为容易被察觉),所以这种情况大部分是意外,而非恶意。
需要注意的是:在今天的ATM网络中,广播的源地址可能都不和你在同一个洲,他们可能在几千英里以外。“局域”指的是拓扑结构而非距离。
3.3 我如何追踪这些IP地址的来源呢?
记住IP地址可以被伪造,因此IP地址的来源可能是无效的。越来越多的情况是,攻击来自于一个“肉鸡”。当你找到IP源地址的话,机器的主人可能很感激你的。我的意思是:礼貌点,专业点。
许多公司建立了类似abuse@example.com的信箱。这个Email地址不但可以用于报告Email滥用也可用于报告网络滥用。当你发现IP地址的来源以后,你可以向这个信箱发送一份包含攻击证据的邮件。
注册数据库
过去所有IP地址都由Internic保存。一个由这些数据建立的数据库位http://ipindex.dragonstar.net/。现在一共有3个官方的注册中心:北美,亚洲和欧洲。不幸的是,你必须分别查询这些独立的数据库。但是,如果你从北美注册中心开始,它会告诉你这个IP地址属于哪个数据库。注意返回的信息是不完全的。因此不要将愤怒发送给你查到的人,因为只有30%的机会达到正确的人手中。
traceroute
运行traceroute通常最少会发现IP地址拥有者的ISP。对实际IP地址的反向DNS查询很容易被欺骗,但对那个机器路由至少可以发现入侵者使用谁的机器。
常见的IP地址
现在许多攻击来自于cable-modem用户(24.x.x.x)。可能这些机器已经被远程控制软件控制。hackers/crackers频繁使用拨号帐户,因为他们不用担心帐户被禁用。但很少有用户中止使用cable-modem帐号。
另一种可能的IP地址是“私有地址”:10.x.x.x, 192.x.x.x, 172.16.x.x, 172.31.x.x。
像127.x.x.x的地址意味着“本机”,不应该在Internet上看到。
像192.0.2.x的地址被用于例子。
3.4 我在防火墙的Internet一侧看到来自私有地址(10.x.x.x 等)的包
私有地址指10.x.x.x, 192.168.x.x, 和 172.16.x.x-172.31.x.x.
我见过3种这样的情况
traceroutes
越来越多的Internet上的核心路由器被分配了这样的IP地址。没有必要让路由器在Internet上可见。转发的功能实际上独立于接受和发送。当路由器丢弃包并发回ICMP TTL Exceeded信息时,它会使用私有地址。注意:一些路由器既有私有地址又有非私有地址,另一些只有私有地址。
cable-modem, DSL
许多cable-modem和DSL 连接位于ATM上的虚拟LANs. 你将会看见来自网络邻居的广播包使用私有地址。
hackers
很上情况下, 你看到的时一个Hacker,他伪造了私有地址。
3.4 我能从“来自于一个半有效源地址的扫描”看出什么?
你会经常看见来自于“有点”有效IP地址的扫描。我的意思是说这些人只是扫描而非攻击。例如搜索引擎在索引,这种不能算攻击吧。
双击
向人们发送echos,将他们从定向于最近的广告服务器。
http://www.cyveillance.com/response1.html
扫描站点寻找非分活动,例如版权问题。
3.6 我看到源地址为0.0.0.0 ?
如果端口也是0, 可能是有人在用指纹技术确定你的操作系统。
3.7 什么是直接广播,它有什么作用?
通常意味着有人扫描子网
Hacker在寻找Smurf放大器
3.8 我看见奇怪的IP地址:169.254.x.x?
当DHCP失败以后,来自于自动分配IP地址的草稿文件:
一旦DHCP客户确定必须自动分配IP地址,它就自己选择一个IP地址。选择IP地址的算法依赖于隐式说明。地址必须是192.254、16,它被注册为LINKLOCAL.net的IANA。这仅发生于通常DHCP过程失败的情况下。
在Microsoft Win98 和Apple MacOS 8.5中有新的解决方案。
参 http://www.performancecomputing.com/columns/daemons/9907.shtml
文章转载地址:http://www.cnpaf.net/Class/hack/0512182034508757925.htm