安全第一 网络端口扫描技术介绍( 七 )


栈指纹
绝大部分安全漏洞与缺陷都与操作系统相关,因此远程操作系统探测是系统管理员关心的一个问题 。
远程操作系统探测不是一个新问题 。近年来,TCP/IP实现提供了主机操作系统信息服务 。FTP,TELNET,HTTP和DNS服务器就是很好的例子 。然而,实际上提供的信息都是不完整的,甚至有可能是错误的 。最初的扫描器,依靠检测不同操作系统对TCP/IP的不同实现来识别操作系统 。由于差别的有限性,现在只能最多只能识别出10余种操作系统 。
最近出现的两个扫描器,QueSO和NMAP,在指纹扫描中引入了新的技术 。QueSO第一个实现了使用分离的数据库于指纹 。NMAP包含了很多的操作系统探测技术,定义了一个模板数据结构来描述指纹 。由于新的指纹可以很容易地以模板的形式加入,NMAP指纹数据库是不断增长的,它能识别的操作系统也越来越多 。
这种使用扫描器判断远程操作系统的技术称为(TCP/IP)栈指纹技术 。
另外有一种技术称为活动探测 。活动探测把TCP的实现看作一个黑盒子 。通过研究TCP对探测的回应,就可以发现 TCP实现的特点 。TCP/IP 栈指纹技术是活动探测的一个变种,它适用于整个TCP/IP协议的实现和操作系统 。栈指纹使用好几种技术来探测TCP/IP协议栈和操作系统的细微区别 。这些信息用来创建一个指纹,然后跟已知的指纹进行比较,就可以判断出当前被扫描的操作系统 。
栈指纹扫描包含了相当多的技术 。下面是一个不太完整的清单:
1:FIN探测
2:BOGUS标记探测
3:TCP ISN 取样
4:TCP 初始窗口
5:ACK值
6:ICMP错误信息
7:ICMP信息
8:服务类型
9:TCP选项
二:全TCP连接和SYN扫描器
全TCP连接
全TCP连接是长期以来TCP端口扫描的基础 。扫描主机尝试(使用三次握手)与目的机指定端口建立建立正规的连接 。连接由系统调用connect()开始 。对于每一个监听端口,connect()会获得成功,否则返回-1,表示端口不可访问 。由于通常情况下,这不需要什么特权,所以几乎所有的用户(包括多用户环境下)都可以通过connect来实现这个技术 。
这种扫描方法很容易检测出来(在日志文件中会有大量密集的连接和错误记录) 。Courtney,GabrIEl和TCP Wrapper监测程序通常用来进行监测 。另外,TCP Wrapper可以对连接请求进行控制,所以它可以用来阻止来自不明主机的全连接扫描 。
TCP SYN扫描
在这种技术中,扫描主机向目标主机的选择端口发送SYN数据段 。如果应答是RST,那么说明端口是关闭的,按照设定就探听其它端口;如果应答中包含SYN和ACK,说明目标端口处于监听状态 。由于所有的扫描主机都需要知道这个信息,传送一个RST给目标机从而停止建立连接 。由于在SYN扫描时,全连接尚未建立,所以这种技术通常被称为半打开扫描 。SYN扫描的优点在于即使日志中对扫描有所记录,但是尝试进行连接的记录也要比全扫描少得多 。缺点是在大部分操作系统下,发送主机需要构造适用于这种扫描的IP包,通常情况下,构造SYN数据包需要超级用户或者授权用户访问专门的系统调用 。
三:秘密扫描与间接扫描
秘密扫描技术
由于这种技术不包含标准的TCP三次握手协议的任何部分,所以无法被记录下来,从而必SYN扫描隐蔽得多 。另外,FIN数据包能够通过只监测SYN包的包过滤器 。
秘密扫描技术使用FIN数据包来探听端口 。当一个FIN数据包到达一个关闭的端口,数据包会被丢掉,并且回返回一个RST数据包 。否则,当一个FIN数据包到达一个打开的端口,数据包只是简单的丢掉(不返回RST) 。

推荐阅读