ICMP USAGE IN SCANNING(翻译,仅供学习)
4.0先进的主机探测在ICMP协议中的应用
我们将把精力集中在触发的几种ICMP错误报文的类型上,该报文从一个目标IP地址(主机)返回。
我们将通过损坏查询中的某个字段的值,来促使对象产生一个ICMP错误报文。
为了产生几种不同的ICMP错误报文我们有几个字段的值以供选择。通过在目标IP地址上查询主机中所有不被接受的条件,来促使下面的OS内核传出一个ICMP 错误报文。仅有一个例外,所有的错误条件将总是触发一个ICMP错误报文。探测一个过滤设备是否正在强制它的过滤准则从网络运输中传送到我们的目标IP地址,将导致我们使用先进的主机探测方法。目标主机自己能够强制过滤(例如,主机基于防火墙),或者它可以通过网络设备完成,或通过另一个安全设备。
我们还可以利用先进的主机探测方法去探测保护网络上的一个过滤设备强制的ACLs。
4.1 控制ICMP参数问题错误报文
一个ICMP参数问题错误报文是在一个路由器或主机处理数据报且找到一个关于IP 首部参数的问题时被发送的,该参数没有明确地被另一个ICMP错误报文所掩藏,当判断该错误引起数据报被丢弃时,ICMP参数问题错误报文才被发送.为了利用这种方法我们需要分析IP 首部并决定字段的值是什么,该值可能在引发一个ICMP参数问题错误报文从目标IP地址(主机)返回的查询中被损坏.
我们需要记住可能被损坏的字段目录,需要选择仅有的字段,该字段没有任何其他的ICMP错误报文与之关联.
这将强制目标IP地址发回一个ICMP参数问题错误报文且显示它的IP地址.我们能够接收两种类型的ICMP参数问题错误报文:
编码0——这个指示字段将指示在引起问题的源IP首部中的精确的字节,或编码2——是在IP数据报的首部长度或总的信息包长度的值似乎不太精确时被发送.
RFC1812要求路由器 在处理一个信息包时对以下的字段都有效.29:检验和—— 一个路由器必须核实任何接收到的IP 检验和且必须丢弃报文包括作废的检验和.
根据RFC1122,一个主机应该在处理信息包30时,对以下字段的有效性进行核实.
30:译本号——如果不是4,一个主机必须将IP信息包丢弃.
检验和—— 一个主机应该对任何一个所接收到的数据报和每一个丢弃的有坏检验和的数据报进行核实.
发送一个这样的IP数据报是可能的.该数据报带有损坏的IP 首部字段值且在探测器的途中没有被丢弃,仍然被发送。
不同路由器执行不同的关于IP首部字段值(RFC1812的不同执行和解释)的检查应该被记录。
当一个路由器由于坏的IP首部字段值而停止IP信息包,并发送一个ICMP参数问题错误报文时,它鉴别该路由器产品且根据一个字段校准错误的IP 首部字段值是可能的,该字段不能被特殊的路由器产品所核实.
一个路由器可能比主机的一个IP首部字段值要宽大.这可能导致该路由器是IP 数据报传送的一个传达手段且该主机是目的地和更多数据报上的处理被完成的地方.
这个约束允许我们用大量的字段;其中一些对于我们的信息包到达它的目的地是至关重要的,在这不再列出了.
条件略述略去了这种方法对于限制字段数量的用法.事实上它是关于首部长度,总的数据报长度和IP选项字段值的。
自从我们在信息包的IP首部的一部分中定位字段值以后,我们能够传送任何一个关于触发IP数据报的协议。用从网络上随机存取探测主机这种方法是非常有利的,因为一个主机应该产生这样的错误报文来应付略述的情况。这样如果它们是探测器的对象,路由器也必须产生ICMP参数问题错误报文。对于这种方法的downside是探测。侵扰探测系统应该警惕侵袭网络运输中的异常性。要来的携带错误IP首部字段值的信息包或作为响应离开网络的ICMP参数问题错误报文通常不能看到。我们能够利用这种类型的的主机探测方法掠过整个网络范围的机构并返回结果。该结果将对所有从网络上随机存取探测的主机(和网络设备)绘制地图。
一个过滤设备是当前的吗?
如果正在保护目标主机,我们能够容易地探测到它的存在。我们正在利用的查询,要求我们的对象得出一个ICMP参数问题错误报文并返回,如果我们接收不到返回的答复,它将指示我们可疑的某物正在接近。或者IP地址不能用或者过滤设备正在过滤通信量。即使过滤设备正在保护目标网络,我们仍能设法发送这些伪信息包,这次我们将用更多的逻辑性。我们将使用一个优先协议和端口,过滤设备ACL的配置很可能允许通过。我们可以使用例如TCP with ports 21,25,80; UDP port 53.这将工作,因为对于今天市场上的大部分防火墙来说,如果一些字段的值是正确的,则无效。总的IP 数据报长度字段值就是一个很好的例子。如果防火墙能够匹配它基于查询参数的规则,且它的规则基础允许查询,与查询被允许相比,一个错误报文将被延长到31。这里给出一个例子,利用isic的有效书写,通过Miike Frantzen32.isc随便发送产生的信息包到目标计算机上。它的主要用途是着重检验IP堆栈,找到防火墙上的漏洞,检验探测系统和防火墙的执行。使用者能够指定信息包多久成为碎片,持有IP 选项,TCP 选项,紧急指示器,等等。
下一个例子中已经从一个Linuxbased machine to a Microsoft Windows
NT WRKS 4 SP4 based machine (the -p option with isic)上发送了20个信息包。该数据报没有成为碎片,错误的IP版本号也没有被发送。唯一被发送到IP首部的神秘的东西是随意的IP 首部长度值,它已经延长了ICMP参数问题代码2错误报文,此时1已经被准备。
31:我个人认为防火墙/过滤设备应该检验那些用来得出ICMP参数问题错误报文和不接受这种运输的字段的有效性。
[root@stan packetshaping]# ./isic -s 192.168.5.5 -d 192.168.5.15 -p 20 -F 0 -V 0 -I 100 Compiled against Libnet 1.0 Installing Signal Handlers. Seeding with 2015 No Maximum traffic limiter Bad IP Version = 0% Odd IP Header Length = 100% Frag'd Pcnt = 0%
Wrote 20 packets in 0.03s @ 637.94 pkts/s
The tcpdump trace:
12:11:05.843480 eth0 > kenny.sys-security.com > cartman.sys- security.com: ip-proto-110 226 [tos 0xe6,ECT] (ttl 110, id 119, optlen=24[|ip])
12:11:05.843961 eth0 P cartman.sys-security.com > kenny.sys- security.com: icmp: parameter problem - octet 21 Offending pkt: kenny.sys-security.com > cartman.sys-security.com: ip-proto-110 226 [tos 0xe6,ECT] (ttl 110, id 119, optlen=24[|ip]) (ttl 128, id 37776)
IP选项字段值的一个不正确的用法是几乎总触发一个ICMP 参数问题错误报文。
4.1.1 ACL探测
我们能够利用这个主机探测方法去探测一个被强迫的ACL配置成为一个在保护网络上的过滤设备。
用这种类型查询,任何一个协议都能深入到offending信息包里面。对于整个IP 范围的目标网络上可利用的协议的结合和消息的类型(UDP和TCP端口,关于ICMP 的类型和代码),我们可以利用。我们需要精确地损坏这个offending信息包。如果我们发送一个错误的IP首部长度值,与今天市场上大部分的防火墙相比,当它们检查它时将停止查询。它们将不能匹配以查询为基础的规则。这是因为防火墙所寻找的一些参数不能被匹配,或者它们的所在地超出了IP首部的界限。我们可以使用UDP和TCP指定目的端口和源端口,或者用例如ICMP的类型和代码字段。(如果给出一个比较长的错误值)。
所以IP首部长度是没有问题的,可以留下两个IP 首部字段值:
总长度
IP选项
今天市场上的一些防火墙将停止任何一个有携带IP选项值的信息包。原因是一些防火墙不能灵敏的解析IP选项。
我们仅仅留下了总长度字段值。在这个字段中,应该发送的损坏值,将要引发主机发回一个ICMP参数问题错误报文。它要求防火墙能够存取信息,该信息需要去匹配信息包和它的规则基础。这就意味着一个损坏的总长度字段值仅仅能在所用的优先协议的数据部分运行。如果我们要求信息包比它实际的要小,则与所有的事件相比,什么事都没有发生。例如我们获得一个ICMP Echo要求查询,没有任何数据携带它,它仍被看作是合理的运输(这是一些工具见效的情形,就象nmap 和 hping2)。我们只能发送一整个的IP 数据报字段值,这要求我们的信息包比实际的要大一些。主机将试图从它不在的那个范围夺取数据,同时将发出一个ICMP参数问题代码2错误报文返回到正在查询的 IP地址。它将通过防火墙(如果ACL允许的话),找到主机,并产生错误报文返回到正在查询的IP地址上。如果我们探察整个IP范围的目标网络,用所有可能的联合协议和服务(端口/类型和代码),它将绘制目标网络布局的地图,且允许我们去确定该ACL过滤设备在目标网络上是相知的。
4.1.1.1 ACL探测—用ICMP作为优先协议的一个例子
当在offending 信息包内部深入的协议是ICMP时,我们将用所有可能的联合的IP地址和ICMP疑问报文类型来询问目标网络。如果我们从目标网络IP范围内的某个IP地址接收到一个回复,它将指示我们有一个主机可以从因特网中得到,用ICMP 查询报文的某个类型,该报文深入到offending 信息包内部。它指出这ICMP疑问报文类型被允许通过ACL规则到达某个IP地址,且从查询IP地址到因特网上ICMP参数问题错误报文允许被发送。我们可能有几种原因而不能接收到从目标IP地址返回的错误报文:过滤设备确认“总长度”字段值与所接收信息包的实际的字节数不符;过滤设备正在过滤我们所使用的ICMP报文的类型;过滤设备阻塞ICMP参数问题错误报文从保护网络到目标因特网的传送。
4.1.1.2 ACL探测—用TCP/UDP作为优先协议的一个例子
当在offending内部深入的协议是UDP或TCP时,我们将用所有可能联合的IP地址和TCP/UDP端口查询目标网络。如果我们接收到了一个从目标网络IP范围内的某个IP地址的回复,它将指示我们有一个在因特网上的主机是可到达的,用TCP/UDP 协议使用的端口(这个端口被用作探测器),深入到offending 信息包内部(我们得这消息返回在ICMP错误报文中),它将指出对于某个IP地址,TCP/UDP协议使用的端口允许通过ACL规则,且从查询IP地址到因特网上ICMP参数问题错误报文允许被发送。我们可能有几种原因而不能接收到从目标IP地址返回的错误报文。过滤设备确认“总长度”字段值与所接收信息包的实际的字节数不符;过滤设备正在过滤我们所使用的ICMP报文的类型;过滤设备阻塞ICMP参数问题错误报文从保护网络到目标因特网的传送。
在这种情形下,过滤设备可能正在阻塞特殊的主机,该主机正在探测传出的ICMP参数问题数据报。
计算测量:阻塞传出的ICMP参数问题错误报文,该报文来自于因特网防火墙与路由器边界上的一个保护网络的目标主机。检查你的过滤设备产品,它的字段在处理数据报时,IP首部是否真正有效。
4.2 IP携带不能用的字段值
下面的主机探测方法是建立在一些损坏的IP首部字段值的基础上的,且传入值,该值将引发ICMP目的文件不能到达从探测IP地址返回
的某个类型的错误报文。这是简单的,因为我们要使用的值不能被用在目标主机上。
什么字段才可以使用这种方法?
端口是非活动的,此时,目的主机传出一个不能达到目的地的报文。
4.2.1.1 协议字段 例33
4.2.1.1使用不能用的 协议的值
如果我们使用一个值,该值不能描绘正在目标机器上使用的有效协议字段,目标机器将得出一个ICMP目的文件,该文件不能到达协议的错误报文将向我们返回。
33记录了一些主机,该主机可能不发送ICMP协议达不到的错误报文。
通过发送工艺的信息包,这种在IP地址范围内的一个目标网络。