Snort预处理器之`sfPortscan`

文章目录

    • 1 sfPortscan 预处理器简介
    • 2 sfPortscan 预处理器支持的端口扫描类型
      • 2.1 Portscan
      • 2.2 Decoy Portscan
      • 2.3 Distributed Portscan
      • 2.4 Portsweep
      • 2.5 Filtered Portscan And Filtered Portsweep
    • 3 sfPortscan 预处理器的配置
    • 4 sfPortscan 警报输出
      • 4.1 Unified Output
      • 4.2 Log File Output
    • 5 sfPortscan 调优
    • 6 sfPortscan 报警

1 sfPortscan 预处理器简介

由 Sourcefire 开发的 sfPortscan 模块,旨在检测网络攻击的第一阶段:侦察(Reconnaissance)。在侦察阶段,攻击者确定主机支持何种类型的网络协议或服务。这个阶段是攻击主机事先不知道目标所支持的协议或服务的情况下,否则,这个阶段就没有必要了。

由于攻击者事先并不知道它的预定目标,因此攻击者发送的大多数查询将是拒绝(negative)的(意味着服务端口被关闭)。在合法的网络通信中,来自主机的拒绝响应是很少见的,而且在给定的时间内出现多次拒绝响应的情况更少见。我们检测端口扫描的主要目的是检测和跟踪这些拒绝响应。

目前使用的最常见的端口扫描工具之一是 Nmap。Nmap 包含许多当前的端口扫描技术。sfPortscan 被设计为能够检测 Nmap 产生的不同类型的扫描。

2 sfPortscan 预处理器支持的端口扫描类型

2.1 Portscan

sfPortscan 当前会对以下类型的 Nmap 扫描发出警告:

  • TCP Portscan
  • UDP Portscan
  • IP Portscan

这些警报是针对一对一端口扫描,这是传统类型的扫描,一台主机扫描另一台主机上的多个端口。

大多数请求都是被拒绝的,因为大多数主机提供的服务相对较少,意味着开放的端口较少。

2.2 Decoy Portscan

sfPortscan 亦会对下列类型的诱骗(decoy)端口扫描进行报警:

  • TCP Decoy Portscan
  • UDP Decoy Portscan
  • IP Decoy Portscan

诱骗端口扫描与上面描述的 Nmap 端口扫描非常相似,只是攻击者拥有一个混合了真实扫描地址的欺骗源地址。这种策略有助于隐藏攻击者的真实身份。

2.3 Distributed Portscan

sfPortscan 也可以针对下列类型的分布式端口扫描发出警报:

  • TCP Distributed Portscan
  • UDP Distributed Portscan
  • IP Distributed Portscan

这是多对一端口扫描。当多个主机查询一个主机以获取打开的服务时,就会发生分布式端口扫描。这是用来逃避 IDS 及混淆命令和控制主机。

注意: 拒绝查询将分布在扫描主机之间,因此我们通过被扫描主机跟踪这种类型的扫描。

2.4 Portsweep

sfPortscan 也可以针对以下类型的 Portsweep 发出警报:

  • TCP Portsweep
  • UDP Portsweep
  • IP Portsweep
  • ICMP Portsweep

这些警报是针对一对多端口扫描。一台主机扫描多台主机上的一个端口。这通常发生在出现新漏洞并且攻击者正在寻找特定服务时。

注意: portsweep 扫描的特性可能不会导致许多拒绝响应。例如,如果攻击者对端口80进行端口扫描,我们很可能不会看到很多拒绝响应。

2.5 Filtered Portscan And Filtered Portsweep

sfPortscan 对以下已过滤的 portcans 和 portsweeps 发出警报:

  • TCP Filtered Portscan
  • UDP Filtered Portscan
  • IP Filtered Portscan
  • TCP Filtered Decoy Portscan
  • UDP Filtered Decoy Portscan
  • IP Filtered Decoy Portscan
  • TCP Filtered Portsweep
  • UDP Filtered Portsweep
  • IP Filtered Portsweep
  • ICMP Filtered Portsweep
  • TCP Filtered Distributed Portscan
  • UDP Filtered Distributed Portscan
  • IP Filtered Distributed Portscan

“Filtered” 警报表明没有网络错误(ICMP不可达或TCP RSTs),或关闭端口上的响应被抑制。它还可以很好地指示警报是否只是一个非常活跃的合法主机。活动主机,如NATs,可以触发这些警报,因为它们可以在非常短的时间内发送许多连接尝试。在收到来自远程主机的响应之前,过滤后的警报可能会发出(go off)。

sfPortscan 仅在时间窗口内为每个有问题的主机对生成一个警报(下面有更多时间窗口的介绍)。在 TCP 扫描警报中, sfPortscan 还将显示所有已扫描的开放端口。 但是,在 TCP 扫描警报上,sfPortscan 仅在触发警报后才跟踪开放的端口。 开放端口事件不是单个警报,而是基于原始扫描警报的标签。

3 sfPortscan 预处理器的配置

sfPortscan 需要使用 Stream5 预处理器。在无连接协议,如ICMP和UDP,Stream 给 Portscan 指明方向。您应该在 snort.conf 中启用 Stream 预处理器。

可用于配置 portscan 模块的参数有:

  1. proto
    可用选项:

    • TCP
    • UDP
    • ICMP
    • ip proto
    • all
  2. scan_type
    可用选项:

    • portscan
    • portsweep
    • decoy portscan
    • distributed portscan
    • all
  3. sense_level
    可用选项:

    • low - “低” 警报仅在从目标主机发送的错误数据包上生成,并且由于错误响应的性质,此设置应该很少出现误报。但是,由于缺少错误响应,此设置将永远不会触发 “Filtered Scan” 警报。 此设置基于60秒的静态时间窗口,此后重置此窗口。
    • medium - “中级” 警报跟踪连接计数(connection counts),因此将生成 “Filtered Scan” 警报。 此设置在活动主机(NAT,代理,DNS缓存等)上可能会产生误报,因此用户可能需要使用 “Ignore” 选项来进行调优。
    • high - “高” 警报使用时间窗口连续跟踪网络上的主机,以评估该主机的端口扫描统计信息。 该设置会由于持续监控而捕获一些慢速扫描,但对活动主机非常敏感。 这绝对需要用户调优 sfPortscan。
  4. watch_ip
    定义需要监视主机的 ip、网络和端口。该列表是一个逗号分隔的 IP 地址列表,IP地址使用CIDR表示法。端口被指定在IP地址/CIDR之后,可以是单一的端口,也可以是一个破折号连接表示的范围,是可选的。如果使用此选项,不属于此范围的 ip 或网络将被忽略。

  5. ignore_scanners
    忽略来自指定地址的扫描警报。参数的格式与 watch_ip 相同。

  6. ignore_scanned
    忽略目的地为指定地址的扫描警报。参数的格式与 watch_ip 相同。

  7. logfile
    此选项将把端口扫描事件输出到指定的文件。如果文件不包含前导斜杠,则该文件将放在 Snort 配置目录中。

  8. include_midstream
    此选项将包括 Stream 模块在中途拾取的会话。这可能导致错误警报,尤其是在数据包丢失的高负载下。这就是为什么该选项默认关闭的原因。

  9. detect_ack_scans
    此选项将包括 Stream 模块在中途拾取的会话,这对于检测 ACK 扫描是必需的。 但是,这可能导致错误警报,尤其是在数据包丢失的高负载下。这就是为什么该选项默认关闭的原因。

  10. memcap { positive integer }
    为端口扫描检测分配的最大字节数。这个数字越高,可以跟踪的节点就越多。

  11. disabled
    任何策略都允许使用这个可选关键字来避免包处理。此选项禁用预处理器。当预处理器被禁用时,只有 memcap 选项在配置中指定时被应用。其他选项将被解析但不使用。任何有效的配置都可能添加了“禁用”。

格式:

preprocessor sfportscan: proto <protocols> \
	scan_type <portscan|portsweep|decoy_portscan|distributed_portscan|all> \
	sense_level <low|medium|high> \
	watch_ip <IP or IP/CIDR> \
	ignore_scanners <IP list> \
	ignore_scanned <IP list> \
	logfile <path and filename> \
	disabled

举例:

preprocessor flow: stats_interval 0 hash 2
preprocessor sfportscan:\
	proto { all } \
	scan_type { all } \
	sense_level { low }

4 sfPortscan 警报输出

4.1 Unified Output

为了获取与警报一起记录的所有 portcan 信息,snort 会生成一个伪数据包,并使用有效负载部分来存储额外的 portcan 信息,包括优先级计数,连接计数,IP计数,端口计数,IP范围和端口范围。 数据包的特征是:

Src/Dst MAC Addr == MACDAD
IP Protocol == 255
IP TTL == 0

除此之外,该包看起来像导致生成 portscan 警报的包的 IP 部分。这包括任何 IP 选项,等等。数据包的有效负载和有效负载大小等于记录的附加 portscan 信息的长度。大小一般在100-200字节左右。

开放端口警报不同于其他 portscan 警报,因为开放端口警报利用带标记的包输出系统。这意味着,如果使用了不打印标记包的输出系统,那么用户将看不到开放端口警报。开放端口信息存储在IP负载中,并包含已开放的端口。

sfPortscan 警报输出旨在与 Unified2 数据包日志记录一起使用,因此可以扩展喜欢的 Snort GUI,使用上述数据包特征显示 portscan 警报和 IP 有效负载中的其他信息。

4.2 Log File Output

日志文件输出以以下格式显示,后面将进一步解释:

Time: 09/08-15:07:31.603880
event_id: 2
192.168.169.3 -> 192.168.169.5 (portscan) TCP Filtered Portscan
Priority Count: 0
Connection Count: 200
IP Count: 2
Scanner IP Range: 192.168.169.3:192.168.169.4
Port/Proto Count: 200
Port/Proto Range: 20:47557

如果目标上有开放端口,则将附加一个或多个带标记的数据包:

Time: 09/08-15:07:31.603881
event_ref: 2
192.168.169.3 -> 192.168.169.5 (portscan) Open Port
Open Port: 38458

上述名词解释:

  1. Event id/Event ref
    These fields are used to link an alert with the corresponding Open Port tagged packet
    这些字段用于将警报与相应的带开放端口标记的包链接起来

  2. Priority Count
    优先级计数跟踪不良响应(resets, unreachables)。优先级计数越高,收到的不良响应就越多。

  3. Connection Count
    连接计数列出主机(src or dst)上活动的连接数。这对于基于连接的协议来说是准确的,对于其他协议来说是一个估计值。在此确定是否对端口扫描进行过滤。高连接计数和低优先级计数表明已过滤(没有收到来自目标的响应)。

  4. IP Count
    IP 计数跟踪与主机联系的最后一个IP,如果下一个IP不同,则增加计数。对于一对一扫描,这是一个小数目。对于活动主机,无论如何这个数字都会很高,并且一对一扫描可能会作为分布式扫描出现。

  5. Scanned/Scanner IP Range
    此字段根据警报类型而改变。Portsweep (一对多)扫描显示被扫描的IP范围。Portscans (一对一)显示扫描仪的 IP。

  6. Port Count
    端口计数跟踪最后一个已接触的端口,并在该端口更改时增加该数字。我们使用这个计数(连同IP计数)来确定一对一端口扫描和一对一诱骗端口扫描之间的区别。

5 sfPortscan 调优

在检测端口扫描时,最重要的方面是根据您的网络,调优检测引擎。下面是一些调优技巧:

  1. 使用 watch_ip, ignore_scanners, ignore_scanned 选项
    正确设置这些选项很重要。watch_ip 选项很容易理解。分析师应该将此选项设置为他们想要观察的 CIDR 区块和 ip 的列表。如果没有定义 watch_ip, sfPortscan 将监视所有网络流量。

    ignore_scanners 和 ignore_scanned 选项在清除网络上非常活跃的合法主机时起作用。一些最常见的例子是 NAT IPs、DNS 缓存服务器、syslog 服务器和 nfs 服务器。sfPortscan 可能不会为这些类型的主机生成误报,但是在第一次为这些 ip 调优sfPortscan 时要注意。根据主机生成的警报类型,分析人员需要知道忽略哪个警报。如果主机正在生成 portsweep 事件,则将其添加到 ignore_scanners 选项中。如果主机正在生成 portscan 警报(并且是正在被扫描的主机),则将其添加到 ignore_scanned 扫描选项中。

  2. Filtered scan alerts 更容易出现误报
    在确定误报时,警报类型非常重要。sfPortscan 生成的大部分误报可能都属于 filtered scan alert 类型。所以要对过滤过的端口扫描多加怀疑。很多时候,这只是表明主机在问题时间段内非常活跃。如果主机持续生成这些类型的警报,请将其添加到 ignore_scanners 或使用较低的灵敏度级别。

  3. 利用Priority Count, Connection Count, IP Count, Port Count, IP Range, and Port Range来确定误报

    Connection Count / IP Count:这个比率表示每个IP的平均连接数。对于portscans,这个比率应该很高,越高越好。对于portsweep,这个比率应该很低

    Port Count / IP Count:这个比率表示每个IP连接的端口的估计平均值。对于端口扫描,这个比率应该很高,并表明被扫描主机的端口连接的ip较少。对于portsweep,这个比率应该很低,表明扫描主机连接到很少的端口,但是在很多主机上。

    Connection Count / Port Count:这个比率表示每个端口的估计平均连接数。对于端口扫描,这个比率应该很低。这表示每个连接都连接到不同的端口。对于portsweep,这个比率应该很高。这表明同一端口有许多连接。

    Priority Count 不包含的原因是,优先级计数包含在连接计数中,上面的比较将其考虑在内。优先级计数在调优中发挥重要作用,因为优先级计数越高,它越有可能是真正的 portscan 或 portsweep (除非主机被防火墙保护)。

  4. 如果以上方法都失败,调低 sensitivity_level
    如果这些其他调优技术都不起作用,或者分析师没有时间进行调优,那么降低灵敏度级别。

    敏感性级别越高,您得到的保护就越好。但是 portscan 检测引擎生成的报警,能够给分析师提供有用的信息同样也很重要。低灵敏度级别仅根据错误响应生成警报。这些响应表明 portscan,由低灵敏度级别生成的警报是高度准确的,需要最少的调优。低灵敏度水平不能捕捉 filtered scans,因为这些更容易出现误报。

6 sfPortscan 报警

sfPortscan 使用 GID 122,可以生成如下报警:

SID Description
1 TCP Portscan
2 TCP Decoy Portscan
3 TCP Portsweep
4 TCP Distributed Portscan
5 TCP Filtered Portscan
6 TCP Filtered Decoy Portscan
7 TCP Filtered Portsweep
8 TCP Filtered Distributed Portscan
9 IP Protocol Scan
10 IP Decoy Protocol Scan
11 IP Protocol Sweep
12 IP Distributed Protocol Scan
13 IP Filtered Protocol Scan
14 IP Filtered Decoy Protocol Scan
15 IP Filtered Protocol Sweep
16 IP Filtered Distributed Protocol Scan
17 UDP Portscan
18 UDP Decoy Portscan
19 UDP Portsweep
20 UDP Distributed Portscan
21 UDP Filtered Portscan
22 UDP Filtered Decoy Portscan
23 UDP Filtered Portsweep
24 UDP Filtered Distributed Portscan
25 ICMP Sweep
26 ICMP Filtered Sweep
27 Open Port

你可能感兴趣的:(Snort)