《网络攻防技术(第2版)》 —2.3.2 端口扫描
786
2022-05-30
2.3.3 系统类型扫描
除了目标主机开放的端口外,攻击者可能还想清楚地判断目标的操作系统类型和版本、应用程序的版本等。这样做有两个目的:首先,绝大多数安全漏洞都是针对特定系统和版本的,判断出目标的系统类型和版本信息有助于更加准确地进行漏洞利用;其次,了解目标的系统类型和版本信息也会给攻击者实施社会工程提供更多信息,使其诡计更加容易得逞。社会工程中最重要的一点就是得到攻击目标相关人员的信任,攻击者掌握的信息越多,就越容易做到这一点。
判断目标主机的系统类型和版本信息有一整套成熟的方法。可以说,除非安全人员或是主机使用者刻意并且有效地对主机进行伪装,否则攻击者想知道这些信息并不是什么难事。
1. 利用端口扫描的结果
操作系统往往提供一些自身特有的功能,而这些功能又很可能打开一些特定的端口。比如,Windows打开137、139、445等端口,Linux系统打开512、513、514、2049端口。因此,根据端口扫描的结果,攻击者就可以对目标主机的操作系统做出大致的判断。至于具体的系统版本信息,则需要配合其他一些信息加以确定,比如下面将要介绍的Banner和协议栈指纹。
各种应用程序通常也工作在特定的端口,比如QQ在8000端口进行监听,SQL Server工作在1521端口,Oracle工作在2030端口,Web代理服务器在8080端口提供服务等。因
此,通过端口扫描的结果,也可以大致确定目标系统中运行的服务类型。
2. 利用Banner
所谓Banner(旗标)是指服务程序接收到客户端的正常连接后所给出的欢迎信息。事实上,很多服务程序都有这样的旗标信息。当连接到一个FTP服务器时,FTP服务程序会在连接成功后返回旗标。当连接到一个Web服务器时,Web服务程序也会返回旗标。举例来说,当我们连接到微软IIS 5.0所提供的FTP服务时,通常会得到如下信息:
220 *** Microsoft FTP service (version 5.0)
再如,RhinoSoft公司开发的运行在Windows平台下的FTP服务程序Serv-U的旗标如下:
Serv-U FTP Server v3.0 for WinSock ready...
公司开发的商业软件如此,自由软件也不能免俗。ProFTPD是一个在UNIX平台或类UNIX平台(如Linux、FreeBSD等)上的免费FTP服务器程序,它有类似如下所示的旗标:
ProFTPD 1.2.0pre4 Server (ProFTPD)
利用这样的旗标,攻击者可以轻易地判断出服务程序的类型和版本,并进一步判断出目标的操作系统平台。或者,在旗标中就包含了对所运行操作系统的描述。其他的服务,比如HTTP(Hypertext Transfer Protocol,超文本传输协议)、Telnet也有类似的现象。图2-6展示了某大学FTP服务器的旗标信息。
3. TCP/IP协议栈指纹
使用TCP/IP协议栈指纹进行操作系统识别是判断目标操作系统最为准确的一种方式。所谓的TCP/IP协议栈指纹,是指不同的操作系统在实现TCP/IP协议栈时,由于各种原因而导致的细节上的差异。
图2-6 某大学FTP服务器的旗标信息
不同的操作系统在实现TCP/IP协议栈的时候,并不是完全按照RFC定义的标准来实现的。比如前面曾经提到过的TCP FIN扫描,在收到TCP FIN数据包时,不同的操作系统会有不同的处理方式。甚至在RFC中也没有对所有的问题给予精确的定义。多数UNIX操作系统在收到FIN包时,关闭的端口会以RST包响应,开放的端口则什么也不做。各种版本的Windows则不论端口是否打开,对于带有FIN标志的数据包,都会回复一个带有RST标志的数据包。对于端口扫描来说,这是不利的一面,因为这会导致结果未必正确。但对于操作系统判断来说,这倒是一个非常有意思的现象。事实上,也正是对这种现象的深入研究,才出现了更新颖、更准确的识别目标主机操作系统的方法—TCP/IP协议栈指纹法。
如果把TCP/IP协议栈上的某个实现差异叫作TCP/IP协议栈的一个指纹特征的话,那么,目前所发掘出来并可能用来进行操作系统识别的指纹特征已经有很多。根据这些特征所处的数据包中的位置不同,可以把它们分为“TCP指纹”和“IP、ICMP指纹”。
(1)TCP指纹
①FIN探测:给一个开放的端口发送FIN包,有些操作系统有回应,有些则没有回应。
②BOGUS(伪造)标记位探测:对于非正常数据包的反应,比如,发送一个包含未定义TCP标记的数据包,不同的操作系统的反应是不一样的。
③SYN洪泛测试:如果发送太多的伪造SYN包,一些操作系统会停止建立新的连接,许多操作系统只能处理8个包。
④TCP ISN 取样:寻找初始序列号之间的规律,不同操作系统的ISN递增规律是不一样的。
⑤TCP 初始化“窗口”:不同的操作系统所使用的窗口值不同。
⑥ACK值:在正常情况下,ACK值一般是确定的,但回复FIN|URG|PSH数据包时,不同的系统会有不同的反应,有些系统会发送回确认的TCP分组的序列号,有些会发回序列号加1。
⑥TCP选项(RFC793和更新的RFC1323):选项是可选的,当操作系统支持这种选项时,它会在回复包中设置,根据目标操作系统所支持的选项类型,可以判断其操作系统类型。
(2)IP、ICMP指纹
①ICMP错误信息查询:如Destination Unreachable的发送频率,发送一批UDP包给高端关闭的端口,然后计算返回的不可达错误消息数目,不同系统返回数据包的频率不同。
②ICMP信息引用: ICMP回复数据包携带请求包开头若干字节的数据,不同的系统返回的数据包所携带的字节数不同。通常情况下,携带的数据为请求包IP头加上8字节的数据,但是个别系统送回的数据更多一些。
③ 服务类型(ToS)和TTL:比如ICMP回应消息中,ToS域的值对某些系统是特定的。
④ 碎片处理:在分片重叠的情况下,不同系统的处理方式会有所不同,有些系统用后到的新数据覆盖先到的旧数据,有些系统反之。
⑤DF标记位(Don’t Fragment Bit):某些操作系统会设置IP头的DF位来改善性能。
关于这些协议栈指纹技术的具体细节可以参考Nmap自带的技术文档。需要注意的是,由于操作系统自身不断更新补丁,文档中所描述的协议栈指纹可能不再有效,并且随着技术的不断发展,更多的协议栈指纹会被发现。图2-7展示了Nmap的系统类型探测结果。
图2-7 Nmap系统类型探测结果
为了更好地隐藏攻击者的位置和扫描行为,可以采用以下措施加强扫描的隐蔽性。
1)包特征的随机化:包特征包括IP头中的TTL字段,TCP头中的源端口、目的端口等字段。在正常的通信中,某主机收到的数据包一般是杂乱无章的,为了将扫描行为伪装成正常通信,可以将这些包特征随机化。
2)慢速扫描:许多入侵检测系统会统计某个IP地址在一段时间内的连接次数。当其频率超出设定的范围时,NIDS(Network Intrusion Detection System,网络入侵检测系统)就会告警。为了躲避这类检测,谨慎的攻击者会用很慢的速度来扫描对方主机。
3)分片扫描:将扫描数据包进行IP分片可以有效通过包过滤防火墙,并且不留下日志记录。
4)源地址欺骗:攻击者为了使自己的真实IP地址不被发现,在进行扫描时伪造大量含有虚假源IP地址的数据包同时发给扫描目标。因此,目标主机无法从这么多IP地址中判断真正的攻击者IP地址。
5)使用跳板主机:攻击者通过已经获取控制权的主机对目标主机进行扫描,可以有效隐蔽自己的真实IP地址。
6)分布式扫描:也称合作扫描,即一组攻击者共同对一台目标主机或某个网络进行扫描。他们之间可以进行扫描分工,例如,每个人扫描某几个端口和某几台主机,这样每个攻击者发起的扫描数较小,因此难以被发现。
通用安全
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。