端口扫描检查器

端口扫描检查器概述

类型

检查器(探测器)

使用方式

全局

实例类型

全局

所需其他检查器

已启用

false

端口扫描是一种通常被攻击者用作攻击前奏的网络侦察形式。在端口扫描中,攻击者发送旨在探测目标主机上的网络协议和服务的数据包。通过检查主机响应时发送的数据包,攻击者通常可以直接或通过推理确定主机上的哪些端口是开放的,以及哪种应用协议正在这些端口上运行。

端口扫描本身不算是攻击。网络上的合法用户可能会采用与攻击者类似的端口扫描技术。

port_scan 检查器可检测四种类型的端口扫描,并监控 TCP、UDP、ICMP 和 IP 协议上的连接尝试。通过检测活动模式, port_scan 检查器帮助确定哪些端口扫描可能是恶意的。

表 1. 端口扫描协议类型
协议 (Protocol) 说明
TCP 检测 TCP 探针,例如 SYN 扫描、ACK 扫描、TCP connect() 扫描和带异常标志组合(如 Xmas tree、FIN 和 NULL)的扫描。
UDP 检测 UDP 探针,如零字节 UDP 数据包。
ICMP 检测 ICMP 回应请求 (ping)。
IP 检测 IP 协议扫描。Snort 不会查找开放端口,而是搜索目标主机上支持的 IP 协议。

根据目标主机的数量、扫描主机的数量和扫描的端口数量,端口扫描通常分为四种类型。

表 2. 端口扫描类型
类型 说明
端口扫描

一对一端口扫描,在这种扫描中,攻击者使用一个或几个主机扫描单个目标主机上的多个端口。

一对一端口扫描具有如下特征:

  • 扫描主机的数量少

  • 扫描单个主机

  • 扫描的端口数量多

端口扫描选项检测 TCP、UDP 和 IP 端口扫描。

端口清扫

一对多端口清扫,在这种扫描中,攻击者使用一个或几个主机扫描多个目标主机上的单个端口。

端口扫描具有以下特征:

  • 扫描主机的数量少

  • 扫描的主机数量多

  • 扫描的唯一端口数量少

端口清扫检测 TCP、UDP、ICMP 和 IP 端口清扫。

诱骗端口扫描

一对一端口扫描,在这种攻击中,攻击者将伪造的源 IP 地址与真实的扫描 IP 地址混合在一起。

诱骗端口扫描具有如下特征:

  • 扫描主机的数量多

  • 一次扫描的端口数量少

  • 扫描的主机为一个(或数量少)

诱骗端口扫描选项检测 TCP、UDP 和 IP 协议端口扫描。

分布式端口扫描

多对一端口扫描,在这种攻击中,多个主机查询单个主机是否有开放端口。

分布式端口扫描具有如下特征:

  • 扫描主机的数量多

  • 一次扫描的端口数量多

  • 扫描的主机为一个(或数量少)

分布式端口扫描检测 TCP、UDP 和 IP 协议端口扫描。

端口扫描敏感度级别

port_scan 检查器提供三个默认扫描灵敏度级别。

  • default_low_port_scan

  • default_med_port_scan

  • default_high_port_scan

可以使用各种过滤器配置其他扫描灵敏度级别:

  • 扫描

  • 拒绝

  • nets

  • 端口

port_scan 检查器通过收集被探测主机的否定响应来了解探测。例如,当 web 客户端使用 TCP 连接到 web 服务器时,客户端可以假设 web 服务器监听 80 端口。但是,当攻击者探测服务器时,攻击者事先并不知道其是否提供 Web 服务。当 port_scan 检测器看到否定响应(ICMP 不可达或 TCP RST 数据包)时,它会将该响应记录为潜在的端口扫描。当目标主机位于设备(例如,过滤否定响应的防火墙或路由器)的另一端时,这个过程更难以执行。在这种情况下,port_scan 检测器可以根据选择的灵敏度级别生成已过滤端口扫描事件。

配置端口扫描检查器的最佳实践

要优化端口扫描检测,我们建议您调整 port_scan 检查器以匹配您的网络。

  • 确保仔细配置 watch_ip 参数。 watch_ip 参数可帮助 port_scan 检查器过滤网络中非常活跃的合法主机。最常见的示例包括 NAT IP、DNS 缓存服务器、系统日志服务器和 NFS 服务器。

  • port_scan 检查器可能生成的大多数误报都属于过滤后的扫描 警报 类型。 警报 类型可能会指示主机在特定时间段内过度活跃。如果主机持续生成过滤式扫描 警报 类型,请将主机添加到 ignore_scanners 列表或使用较低的扫描灵敏度级别。

  • 利用 Priority Count、Connection Count、IP Count、Port Count、IP 范围和 Port 范围确定误报。 确定误报的最简单方法是通过简单的比率估计。下面列出了需要估计的比率以及表示合法扫描和误报的相关值。

    • 连接计数/IP 计数 - 此比率表示每个 IP 的估计平均连接数。对于端口扫描,此比率应较高。对于端口扫描,此比率应较低。

    • 端口计数/IP 计数 - 此比率表示每个 IP 连接到的端口的估计平均值。对于端口扫描,此比率应较高,表示通过较少的 IP 连接到 的被扫描主机的端口。对于端口扫描,此比率应较低,表示扫描主机连接到的端口较少,但主机数量较多。

    • 连接计数/端口计数 - 此比率表示每个端口的估计平均连接数。对于端口扫描,此比率应较低。这表示每个连接都连接到不同的端口。对于端口扫描,此比率应较高。这表示有许多连接到同一端口。

    优先级计数越高,实际端口扫描或端口扫描的可能性越大(除非主机由防火墙管理)。

  • 如果无法检测端口扫描,可以降低扫描灵敏度级别。越高的扫描灵敏度级别越能获得最好的保护。低扫描灵敏度级别仅根据错误响应生成警报,而不会捕获过滤的扫描。低扫描灵敏度级别错误响应可指示端口扫描,而低灵敏度级别生成的警报非常准确,并且需要最少的调整。过滤后或高灵敏度级别的扫描容易出现误报。

端口扫描检查器参数

memcap

指定最大跟踪器内存(以字节为单位)。

类型: 整数

有效范围: 10249,007,199,254,740,992 (maxSZ)

默认值: 10,485,760

原型

指定要监控的协议。提供协议缩写字符串。要指定多个协议,请使用空格分隔各协议缩写。

类型: 字符串

有效值: tcpudpicmpipall

默认值: all

scan_types

指定要检查的端口扫描的类型。提供协议缩写字符串。要指定多个协议,请使用空格分隔各个协议字符串。

类型: 字符串

有效值: portscanportscandecay_portscandistributed_portscanall

默认值:all

watch_ip

指定 CIDR 块和 IP 的列表,以及要监控的可选端口。

如果未定义 watch_ipport_scan 检查器会检查所有网络流量。

类型: 字符串

有效值: CIDR 或 IP 地址、CIDR 或 IP 地址列表

默认值: None

alert_all

指定是否对已建立窗口内超过阈值的所有事件发出警报。如果 alert_all 设置为 false,则 port_scan 检查器仅对窗口内的第一个超过阈值的事件发出警报。

类型: boolean

有效值: truefalse

默认值: false

include_midstream

指定是否列出 CIDR 带可选端口。

类型: boolean

有效值: truefalse

默认值: false

tcp_decoy.rejects

指定给出否定响应的扫描尝试次数。

类型: 整数

有效范围: 065535

默认值: 15

tcp_decoy.ports

指定端口(或协议)较先前尝试被更改的次数。

类型: 整数

有效范围: 065535

默认值: 25

tcp_decoy.scan

指定扫描尝试的次数。

类型: 整数

有效范围: 065535

默认值: 100

tcp_decoy.nets

指定自先前尝试起已更改的地址次数。

类型: 整数

有效范围: 065535

默认值: 25

tcp_dist.rejects

指定给出否定响应的扫描尝试次数。

类型: 整数

有效范围: 065535

默认值: 15

tcp_dist.ports

指定端口(或协议)较先前尝试被更改的次数。

类型: 整数

有效范围: 065535

默认值: 25

tcp_dist.scans

指定扫描尝试的次数。

类型: 整数

有效范围: 065535

默认值:100

tcp_dist.nets

指定自先前尝试起已更改的地址次数。

类型: 整数

有效范围: 065535

默认值: 25

tcp_ports.rejects

指定给出否定响应的扫描尝试次数。

类型: 整数

有效范围: 065535

默认值: 15

tcp_ports.ports

指定端口(或协议)较先前尝试被更改的次数。

类型: 整数

有效范围: 065535

默认值: 25

tcp_ports.scans

指定扫描尝试的次数。

类型: 整数

有效范围: 065535

默认值: 100

tcp_ports.nets

指定自先前尝试起已更改的地址次数。

类型: 整数

有效范围: 065535

默认值: 25

tcp_sweep.rejects

指定给出否定响应的扫描尝试次数。

类型: 整数

有效范围: 065535

默认值: 15

tcp_swave.ports

指定端口(或协议)较先前尝试被更改的次数。

类型: 整数

有效范围: 065535

默认值: 25

tcp_swave.scans

指定扫描尝试的次数。

类型: 整数

有效范围: 065535

默认值: 100

tcp_sweep.nets

指定自先前尝试起已更改的地址次数。

类型: 整数

有效范围: 065535

默认值: 25

udp_decoy.rejects

指定给出否定响应的扫描尝试次数。

类型: 整数

有效范围: 065535

默认值: 15

udp_decoy.ports

指定端口(或协议)较先前尝试被更改的次数。

类型: 整数

有效范围: 065535

默认值: 25

udp_decoy.scans

指定扫描尝试的次数。

类型: 整数

有效范围: 065535

默认值: 100

udp_decoy.nets

指定自先前尝试起已更改的地址次数。

类型: 整数

有效范围: 065535

默认值: 25

udp_dist.rejects

指定给出否定响应的扫描尝试次数。

类型: 整数

有效范围: 065535

默认值: 15

udp_dist.ports

指定端口(或协议)较先前尝试被更改的次数。

类型: 整数

有效范围: 065535

默认值: 25

udp_dist.scans

指定扫描尝试的次数。

类型: 整数

有效范围: 065535

默认值: 100

udp_dist.nets

指定自先前尝试起已更改的地址次数。

类型: 整数

有效范围: 065535

默认值: 25

udp_ports.rejects

指定给出否定响应的扫描尝试次数。

类型: 整数

有效范围: 065535

默认值: 15

udp_ports.ports

指定端口(或协议)较先前尝试被更改的次数。

类型: 整数

有效范围: 065535

默认值:25

udp_ports.scans

指定扫描尝试的次数。

类型: 整数

有效范围: 065535

默认值: 100

udp_ports.nets

指定自先前尝试起已更改的地址次数。

类型: 整数

有效范围: 065535

默认值: 25

udp_swave.rejects

指定给出否定响应的扫描尝试次数。

类型: 整数

有效范围: 065535

默认值: 15

udp_sweep.ports

指定端口(或协议)较先前尝试被更改的次数。

类型: 整数

有效范围: 065535

默认值: 25

udp_sweep.scans

指定扫描尝试的次数。

类型: 整数

有效范围: 065535

默认值: 100

udp_sweep.nets

指定自先前尝试起已更改的地址次数。

类型: 整数

有效范围: 065535

默认值: 25

ip_decoy.rejects

指定给出否定响应的扫描尝试次数。

类型: 整数

有效范围: 065535

默认值: 15

ip_decoy.ports

指定端口(或协议)较先前尝试被更改的次数。

类型: 整数

有效范围: 065535

默认值: 25

ip_decoy.scans

指定扫描尝试的次数。

类型: 整数

有效范围: 065535

默认值: 100

ip_decoy.net

指定自先前尝试起已更改的地址次数。

类型: 整数

有效范围: 065535

默认值: 25

ip_dist.rejects

指定给出否定响应的扫描尝试次数。

类型: 整数

有效范围: 065535

默认值: 15

ip_dist.ports

指定端口(或协议)较先前尝试被更改的次数。

类型: 整数

有效范围: 065535

默认值: 25

ip_dist.scans

指定扫描尝试的次数。

类型: 整数

有效范围: 065535

默认值: 100

ip_dist.nets

指定自先前尝试起已更改的地址次数。

类型: 整数

有效范围: 065535

默认值: 25

ip_sweep.rejects

指定给出否定响应的扫描尝试次数。

类型: 整数

有效范围: 065535

默认值: 15

ip_sweep.ports

指定端口(或协议)较先前尝试被更改的次数。

类型: 整数

有效范围: 065535

默认值: 25

ip_sweep.scans

指定扫描尝试的次数。

类型: 整数

有效范围: 065535

默认值: 100

ip_sweep.nets

指定自先前尝试起已更改的地址次数。

类型: 整数

有效范围: 065535

默认值: 25

ip_proto.rejects

指定给出否定响应的扫描尝试次数。

类型: 整数

有效范围: 065535

默认值: 15

ip_proto.ports

指定端口(或协议)较先前尝试被更改的次数。

类型: 整数

有效范围: 065535

默认值: 25

ip_proto.scans

指定扫描尝试的次数。

类型: 整数

有效范围: 065535

默认值: 100

ip_proto.nets

指定自先前尝试起已更改的地址次数。

类型: 整数

有效范围: 065535

默认值: 25

icmp_sweep.rejects

指定给出否定响应的扫描尝试次数。

类型: 整数

有效范围: 065535

默认值: 15

icmp_sweep.ports

指定端口(或协议)较先前尝试被更改的次数。

类型: 整数

有效范围: 065535

默认值: 25

icmp_sweep.scans

指定扫描尝试的次数。

类型: 整数

有效范围: 065535

默认值: 100

icmp_sweep.nets

指定自先前尝试起已更改的地址次数。

类型: 整数

有效范围: 065535

默认值:25

tcp_window

指定传输控制协议 (TCP) 扫描的检测间隔。

类型: 整数

有效范围: 04,294,967,295(最大 32)

默认值: 0

udp_window

指定用户数据报协议 (UDP) 扫描的检测间隔。

类型: 整数

有效范围: 04,294,967,295(最大 32)

默认值: 0

ip_window

指定互联网协议 (IP) 扫描的检测间隔。

类型: 整数

有效范围: 04,294,967,295(最大 32)

默认值: 0

icmp_window

指定互联网控制消息协议 (ICMP) 扫描的检测间隔。

类型: 整数

有效范围: 04,294,967,295(最大 32)

默认值: 0

端口扫描检查器规则

启用 port_scan 检查器规则,以 生成事件并在内联部署中丢弃攻击性数据包

表 3. 端口扫描检查器规则

GID:SID

Rule Message

122:1

TCP 端口扫描

122:2

TCP 诱骗端口扫描

122:3

TCP 端口清扫

122:4

TCP 分布式端口扫描

122:5

TCP 过滤的端口扫描

122:6

TCP 过滤的诱骗端口扫描

122:7

TCP 过滤的端口清扫

122:8

TCP 过滤的分布式端口扫描

122:9

IP 协议扫描

122:10

IP 诱骗协议扫描

122:11

IP 协议清扫

122:12

IP 分布式协议扫描

122:13

IP 过滤的协议扫描

122:14

IP 过滤的诱骗协议扫描

122:15

IP 过滤的协议清扫

122:16

IP 过滤的分布式协议扫描

122:17

UDP 端口扫描

122:18

UDP 诱骗端口扫描

122:19

UDP 端口清扫

122:20

UDP 分布式端口扫描

122:21

UDP 过滤的端口扫描

122:22

UDP 过滤的诱骗端口扫描

122:23

UDP 过滤的端口清扫

122:24

UDP 过滤的分布式端口扫描

122:25

ICMP 清扫

122:26

ICMP 过滤的清扫

122:27

开放端口

端口扫描检查器入侵规则选项

port_scan 检查器没有任何入侵规则选项。