网络资产中主机发现方案分析

date: 2019-02-15 11:24:25
tags:
- 网络资产
- 主机存活探测

0x00 介绍

网络资产梳理中,最重要的一项是主机发现。主机发现就是通过一些技术手段,来侦察网络中一些主机是否存活。主机发现又分为主动发现和被动发现两大类。

  • 主动发现:主动进行侦察探测,如端口探测
  • 被动发现:被动接收一些信息来进行判断,如流量监听

主动发现单个主机存活的手段有

  • ping
  • 端口扫描

当然不是所有的存活主机都可以通过主动手段发现。存在一种极端情形,如果一个存活主机没有开放任务端口/服务,同时又禁止了ICMP应答,同时启用iptables防火墙所有的端口都不接收连接,这种情况下以上的两种手段都是无法发现

0x01 ping

简单来说,如果能ping通的话,这个主机就是存活的。但否命题是不成立的,如果ping不通一个主机的话,并不能说明这个主机就是不存活的。主机管理上有一些手段,可以禁止ICMP应答。如下命令可以关闭ICMP应答,则此主机不能被ping通,但它是存活的。

sysctl net.ipv4.icmp_echo_ignore_all=1

0x02 端口扫描

相对ping而言,端口扫描更可靠和全面。端口扫描,就是对目标的一些端口发起TCP连接,或者类似TCP连接的动作,通过判断目标的响应,来判断目标是否存活。
就单个端口而言,判定的逻辑如下表

响应情况 主机是否存活
连接成功 主机存活
timed out 不能判定是否存活
Connection refused 主机存活
No route to host 部分情况可判定不存活

如果想通过端口扫描发现主机时,想提高主机发现的效果,则需要提高端口扫描的数量。甚至是扫描全部的可能端口(1-65535)。

No route to host情况

这种提示是指找不到主机路由。一般来说,可以直接判断主机不存活的,实际测试中发现了在虚拟机中存在一些异常。

虚拟机方案 不存活端口的响应
KVM/virt-manager 异常No route to host
VirtualBox 异常No route to host
VMware 正常

所以此响应不能作为主机是否存活的充分条件。

timed out情况

timed out是指在发起TCP连接时,连接超时了。这种情况下,一般是目标启用了防火墙。正常情况下,如果一个主机存活,而且端口未开放时,连接时,对方会响应Connection refused。如下在Linux操作系统中,下面的命令会对81端口添加过滤规则,所有的连接尝试都会被DROP掉,造成连接方TCP连接超时。

iptables -t filter -A INPUT -p tcp --dport 81 -j DROP

这种情况下,如果出现在一个局域网内,一般也可以判断这个主机是存活的。因为如果不存活,会响应No route to host,提示找不到路由。但在测试中也会出现异常,一个主机不存活,但进行端口连接时也超时了。
所以这种情况下不能给出主机是否存活的判断。

0x03 总结

根据前面分析的结果,设计了一个合理的主机发现方案如下。

  1. 对主机进行ping扫描,留下不能ping通的主机
  2. 对不能ping通的主机进行1到3个端口扫描
  3. 如果响应中有Connect refused/connected,判定主机存活,余下的主机进行第4步判断。
  4. 对于timeout和No route to host的,加大端口扫描范围,端口数量超出限制时,或者有连接成功的端口时,停止扫描。

第4步中,主机的发现效果和扫描的最大端口数量相关,可能需要用户设置期望的值。
当然,实践中发现,上述结果只适用于没被WAF防护的主机。如果是经过了WAF,WAF可能会接收所有的端口连接,这样通过端口判定存活就不适用了,而是应该连续探测一定范围的连续端口,如果都能连接成功,就说明遇到防护设备了。

你可能感兴趣的:(网络安全,linux,web安全)