Nmap 之 TCP 空闲扫描 (-sI)
文章转载自:http://blog.chinaunix.net/uid-28811518-id-5601227.html
1998年,安全研究员Antirez在Bugtraq邮件列表上,提到了一个巧妙的端口扫描技术–空闲扫描。众所周知,它允许进行端口完全欺骗扫 描。使得攻击者能够不使用自己的IP向目标主机发送数据包。它的巧妙之处在于,利用不活跃的“僵尸主机”反弹给攻击者一个旁通信道,从而使得攻击者可以进 行端口扫描。入侵检测系统(Intrusion detection system)也就会把无辜的僵尸主机当成攻击者。除了异常隐蔽外,该种扫描还可以 用于发现基于IP的机器间的信任关系。
因为空闲扫描比目前任何一种扫描技术都要复杂,所以要理解它,你不必成为TCP/IP专家。总而言之可以概括为以下几个方面:
判断一个TCP端口是否开放,其中一种方法是向该端口发送SYN(会话建立)包。若端口开放,则目标主机会返回一个SYN/ACK(会话建立确认)包;若端口关闭,则目标主机会返回RST(重置)包。这就是前面所讨论的半开扫描基本概念。
机器收到SYN/ACK包后会返回一个RST包,而收到的RST包则会被忽略掉。
互联网上的每个IP数据包都有一个分段身份识别号(IP ID)。许多操作系统只是简单的把该识别号递增,因此分析最后一次的IPID就可以告诉攻击者已经发送了多少数据包。
结合这些特征,通过伪造你的身份,就可以扫描一个目标网络,而看起来就像无辜的僵尸主机在扫描。本质上,空闲扫描在扫描每个端口时都由以下三步组成:
探测僵尸主机的IP ID并记录。
向需要扫描的目标主机端口发送一个伪造成来自僵尸主机的SYN包。根据目标主机端口状态的不同,目标主机返回的数据包会使得僵尸主机的IP ID递增或否。
再次探测僵尸主机的IP ID。并对比第一步记录的IP ID就可以确定目标主机端口的状态。
每次扫描后,僵尸主机数据包的IP ID应该增加1或2。增加1说明僵尸主机没有发送任何数据包,只有攻击者探测时导致的加1。而未发送任何数据包 则说明目标端口是未打开的(目标主机向僵尸主机发送了RST包,该包会被忽略,或者什么也没发送)。增加2说明僵尸主机在两次探测之间发送了一个额外的数 据包。这个额外的数据包表明目标端口是开放的(即目标主机收到伪造的SYN包后向僵尸主机发送SYN/ACK包,僵尸主机向目标主机回复一个RST包)。 增加数大于2则说明我们选择的中间层不适合做僵尸主机。它可能含有不可预测的IP ID,或者说在进行空闲扫描时该端口有其他的通讯。空闲扫描利用的是空 闲的端口,如果该端口有其他的通讯,就会导致扫描程序误判目标主机的端口状态。建议选择打印机、考勤机或者不活跃的web服务器做僵尸主机
尽管被过滤的端口与关闭的端口有少许的不同,但是攻击者会得到相同的结果,即IPID都增加1。因此利用空闲扫描技术不能区分关闭的端口或被过滤掉 的端口。所以,当nmap收到增长为1的IPID后就会把该端口标记为closed|filtered(关闭的或者被过滤的)。