Nmap - 激烈与快速的结果

信息安全 防火墙 地图 港口 iptables
2021-08-29 22:01:47

我继承了一个小型网络,目前正在评估其安全性能。

我开始在那个小型网络中对主机进行端口扫描(我们称之为Weirdo),从我的角度来看,似乎该特定主机具有某种端口扫描检测器和/或扫描结果混淆器,并且iptables正在进行,因为结果来了从密集扫描回来的结果与快速扫描的结果大不相同

所以这里是快速扫描结果me@mypc:~# nmap -T4 -F 12.34.56.78

Starting Nmap 7.01 ( https://nmap.org ) at 2017-04-18 11:48 CEST
Nmap scan report for 12.34.56.78
Host is up (0.57s latency).
Not shown: 93 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
25/tcp   open  smtp
53/tcp   open  domain
80/tcp   open  http
3306/tcp open  mysql
8080/tcp open  http-proxy
8443/tcp open  https-alt

Nmap done: 1 IP address (1 host up) scanned in 4.15 seconds

这实际上显示了与从 Weirdo localhost 运行快速扫描相同的输出root@Weirdo:~# nmap -T4 -F localhost

但这是激烈的扫描me@mypc:~# nmap -T4 -A -v 12.34.56.78

1/tcp     open  tcpmux?
...(every port is shown as open, except a few)
49155/tcp open  unknown
...
9102/tcp  open  jetdirect?
... 
65389/tcp open  tcpwrapped
...
Completed SYN Stealth Scan at 11:49, 18.22s elapsed (1000 total ports) 
... 
Not shown: 120 closed ports

注意:...表示以不同的端口号重复上一行

所以基本上密集扫描发现更多的端口是开放的,但这是矛盾的,因为在 Weirdo localhost 上的密集扫描root@Weirdo:~# nmap -T4 -A -v localhost也给出了与快速扫描完全相同的开放端口列表。

当我查看traceroute时,我看到以下内容:

TRACEROUTE (using port 199/tcp)
HOP RTT     ADDRESS
1   1.52 ms 12.99.34.255
2   1.37 ms 12.99.0.3
3   1.09 ms 12.34.56.78

端口扫描两个ipme@mypc:~# nmap -sV -T4 -O -F --version-light 12.99.34.255 12.99.0.3我看到这12.99.34.255是一个可以通过浏览器访问的 Netgear Firewall FVS336Gv2(端口 80,因此是打开的)。

连续(1 秒后)快速扫描(密集扫描之后)确实会产生与密集扫描相同的输出。

等待几秒钟然后再次进行快速扫描后,它会产生与初始快速扫描相同的输出。

这个防火墙可能在密集扫描上玩花样吗?

另一个小补充:

Weirdo主机上,我检查了 iptables 防火墙并得到以下信息:

root@Weirdo:~# iptables -vL -t filter
Chain INPUT (policy DROP 25288 packets, 1768K bytes)
 pkts bytes target     prot opt in     out     source               destination         
 101K   54M ACCEPT     all  --  lo     any     anywhere             anywhere            
 189K   12M ACCEPT     all  --  eth1   any     anywhere             anywhere            
  285  9686 ACCEPT     icmp --  eth0   any     anywhere             anywhere             icmp echo-request
  297 30354 garbage    all  --  eth0   any     anywhere             anywhere             state INVALID
    0     0 garbage    tcp  --  eth0   any     anywhere             anywhere             tcpflags: FIN,SYN,RST,PSH,ACK,URG/NONE
    0     0 garbage    tcp  --  eth0   any     anywhere             anywhere             tcpflags: FIN,SYN/FIN,SYN
    0     0 garbage    tcp  --  eth0   any     anywhere             anywhere             tcpflags: SYN,RST/SYN,RST
    0     0 garbage    tcp  --  eth0   any     anywhere             anywhere             tcpflags: FIN,RST/FIN,RST
    0     0 garbage    tcp  --  eth0   any     anywhere             anywhere             tcpflags: FIN,ACK/FIN
    0     0 garbage    tcp  --  eth0   any     anywhere             anywhere             tcpflags: PSH,ACK/PSH
    0     0 garbage    tcp  --  eth0   any     anywhere             anywhere             tcpflags: ACK,URG/URG
1968K 2742M ACCEPT     all  --  eth0   any     anywhere             anywhere             state RELATED,ESTABLISHED
 9564  391K ACCEPT     tcp  --  eth0   any     anywhere             anywhere             tcp dpt:http
  463 27508 ACCEPT     tcp  --  eth0   any     anywhere             anywhere             tcp dpt:domain
   45  2392 ACCEPT     tcp  --  eth0   any     anywhere             anywhere             tcp dpt:8443
    0     0 ACCEPT     tcp  --  eth0   any     anywhere             anywhere             tcp dpt:9422
25288 1768K garbage    all  --  eth0   any     anywhere             anywhere            

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 1361K packets, 501M bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain garbage (9 references)
 pkts bytes target     prot opt in     out     source               destination 

这些过滤器是否在密集扫描中发挥作用?

有一个带有 target 的规则是什么意思garbage

1个回答

首先,让我们更正一些假设和术语,这将使我们更容易理解结果:

  • -F选项是“快速”扫描,因为它只扫描 100 个端口。它相当于--top-ports 100如果没有这个选项,Nmap 会扫描 1000 个 TCP 端口。
  • -A选项不是“强烈”,而是“所有功能”。它相当于-sV -sC -O --traceroute

因此,您已经运行了 100 个端口的端口扫描,并将其与具有 1000 个端口的版本检测和操作系统指纹识别的端口扫描进行比较。可以理解的是,您将在第二次扫描中获得更多结果。但是让我们假设您在第二次扫描中的字面意思是“每个端口都是打开的”。可能是什么原因,我们如何确定?

首先,如果在扫描之后运行,了解扫描是否产生-F不同的结果会很有趣我怀疑会的。这将表明某些东西(可能是防火墙)已经改变了数据包在扫描系统和目标之间的传递方式。以下是我在第二次扫描中看到的线索:-A

  • 更多开放端口
  • 身份不明的服务 ( tcpmux?) 和tcpwrapped服务
  • 列出的未在目标的本地主机扫描中的打开端口

iptables 本身还不够聪明,无法适应这样的行为,而且您的规则中也没有任何内容表明这一点。因此,干扰可能来自扫描仪和目标之间网络路径上的不同系统。如果您保存了 XML 输出(-oX-oA)或使用了选项(也由or--reason激活),那么您将能够看到有关Nmap 认为每个端口打开或关闭的原因的详细信息。其中最有趣的部分是-vv-dreason_ttl属性,记录接收到的 IP Time-To-Live 字段值,通常对于网络路径上的每个 IP 跃点递减一次。因此,对于 Linux 目标,响应从 TTL 64 开始,中间有 2 个跃点应该减少到 62。无论您在最准确的扫描版本(即-F大部分关闭端口扫描)中看到什么都是您的基线。如果您开始看到高于此值的值,则很可能意味着您和目标之间的某些东西正在发送响应而不是目标。示例(端口 27 是“假开放”):

港口国服务原因
25/tcp 打开 smtp syn-ack ttl 60
27/tcp 打开 nsw-fe syn-ack ttl 61
80/tcp 打开 http syn-ack ttl 60

避免这种情况可能会涉及减慢扫描速度以避免触发“端口扫描”警报阈值。规避这样的适应性措施是复杂的但是一旦你突破了门槛,你就可以做一些有趣的事情来制定防火墙规则。

如果你目前被这种方式“阻塞”了很多开放端口,但你仍然可以访问原始端口集后面的真实服务(ssh、smtp、http等),那么你可以尝试设置一个非常低的出站数据包中的 TTL 值。当路由器将 TTL 减为 0 时,它将发送 ICMP Time Expired 消息,导致端口被标记为filtered如果我们可以选择一个在防火墙之后目标之前过期的 TTL ,我们可以获得由防火墙引起的“开放”端口列表,以及一组可能允许通过的“过滤”端口。在您的示例中,根据 traceroute 输出,我将使用该--ttl 2选项,因为--ttl 3实际上会到达目标。所以扫描看起来像:nmap -sS --ttl 2 -Pn example.com. 使用-Pn通常不推荐,但在这种情况下是必要的,因为探针永远不会真正到达目标。提醒:如果您当前被防火墙阻止并且阻止不在每个端口上,但允许一些流量通过,则此扫描只会产生有用的输出:

港口国服务原因
25/tcp 过滤 smtp 时间超过 12.99.34.255 ttl 252
27/tcp 打开 nsw-fe syn-ack ttl 61
80/tcp 过滤的 http 时间超过 12.99.34.255 ttl 252

在这个输出中,端口 27 收到了一个欺骗的 syn-ack,看起来它来自目标,即使我们从我们那里知道我们--ttl 2的探测器永远不会到达目标。其他两个端口被允许通过,因为我们从它们过期时获得了超时消息。如果防火墙不允许传出超时消息,那么它们会显示为filteredno-response原因的。