当前位置: 首页 > 工具软件 > frag > 使用案例 >

Snort预处理器之`Frag3`

常俊侠
2023-12-01

1 预处理器简介

在 Snort 的1.5版本中引入了预处理程序。

它们允许用户和程序员相当容易地将模块化插件放到 Snort 中,从而扩展 Snort 的功能。预处理器代码在调用检测引擎之前运行,但在数据包被解码之后运行。可以使用这种机制以带外的方式修改或分析数据包。

使用 preprocessor 关键字加载和配置预处理程序。Snort 配置文件中的预处理器指令的格式为:

preprocessor <name>: <options>

2 Frag3 预处理器简介

frag3 预处理器是用于 Snort 的基于目标的 IP 碎片整理模块。Frag3 的设计目标如下:

  1. 快速执行,较少复杂的数据管理。
  2. 基于目标的主机建模反规避(anti-evasion)技术。

Frag3 在内部使用 sfxhash 数据结构和链表进行数据处理,这使得它在任何环境中都具有更可预测和更确定的性能,这有助于我们管理严重碎片化的环境。

基于目标的分析是基于网络的入侵检测中一个相对较新的概念。基于目标的系统的思想是对网络上的实际目标进行建模,而不仅仅是对协议进行建模并在其中寻找攻击。当为不同的操作系统编写IP堆栈时,通常是由阅读 RFC 然后将对 RFC 概述的解释写到代码中的人员实现的。不幸的是,RFC 定义了可能出现的某些边缘条件的方式存在歧义,并且当这种情况发生时,不同的人会以不同的方式实现其IP堆栈的某些方面。对于 IDS 来说,这是一个大问题。

在攻击者可以确定在特定目标上使用哪种样式的IP碎片整理的环境中,攻击者可以尝试对数据包进行分段,以便目标以特定方式将它们重新组合在一起,当任何被动系统试图模拟主机流量时,必须猜测目标操作系统将以何种方式处理重叠并重传。就像我要说的,如果攻击者比 IDS 具有更多有关网络目标的信息,则有可能逃避IDS。这就是基于目标的IDS的思想来源。有关此问题及其对IDS的影响的更多详细信息,请访问 http://www.snort.org/docs/idspaper/ 上的著名 Ptacek&Newsham 论文。

基于目标的 IDS 背后的基本思想是,我们将有关网络上主机的信息告诉给 IDS,以便它可以根据有关单个目标 IP 堆栈操作方式的信息来避免 Ptacek&Newsham 风格的逃逸攻击。 Vern Paxson 和 Umesh Shankar 在2003年就此主题发表了一篇出色的论文,详细介绍了网络上的主机映射,并确定了其各种IP堆栈实现如何处理IP碎片整理和 TCP 流重组中出现的问题类型。可以在 http://www.icir.org/vern/papers/activemap-oak03.pdf 上进行查看。

我们还可以向 IDS 提供拓扑信息,以避免基于 TTL 的逃逸和其他各种问题,但这是另一天的话题。一旦获得了这些信息,我们就可以开始针对这些复杂的建模问题真正改变游戏规则。

Frag3 的实现是为了展示和原型化 Snort 中基于目标的模块,以测试这一想法。

3 Frag3 预处理器配置

激活 frag3 至少需要两个预处理器指令,一个全局配置指令和一个引擎实例化指令。可以在 Snort 启动时定义任意数量的引擎,它们有各自不同的配置,但只有一个全局配置。

3.1 全局配置

格式:

Preprocessor name: frag3_global

可用选项:

  • 全局配置选项用逗号分隔。
  • max_frags <number>:同时跟踪的最大碎片数量,默认是8192
  • memcap <bytes>:自保留的内存容量,默认是4MB
  • prealloc_memcap <bytes>:备用内存管理模式,使用基于内存上限的预分配片段节点(在某些情况下更快)
  • prealloc_frags <number>:备用内存管理模式,使用基于静态数的预分配片段节点(在某些情况下更快)
  • disabled:任何策略都允许使用此可选关键字,以避免数据包处理。此选项禁用此配置的预处理器,但不禁用多个配置的其他实例。在基本配置中使用 disable 关键字可为选项 memcap,prealloc_memcap 和 prealloc_frags 指定值,而无需预处理器检查用于基本配置的流量。其他选项已解析但未使用。任何有效的配置都可能添加了“disabled”。

3.2 引擎配置

格式:

Preprocessor name: frag3_engine

可用选项:

  • 引擎配置选项是空格分隔的。
  • timeout <seconds>:对于片段超时,引擎中超过这个时间段的片段将被自动删除。默认值是60秒。
  • min_ttl <value>:片段包的最小可接受的TTL值。默认值为1。此选项的可接受范围为1 - 255。
  • detect_anomalies:支持检测片段异常。
  • bind_to <ip_list>:指定此引擎绑定的IP列表。此引擎将仅对IP列表中包含的目标地址的数据包运行。默认值为“all”。
  • overlap_limit <number>:限制每个数据包的重叠片段的数量。默认值为“0”(无限制)。这个配置选项接受等于或大于零的值。这是一个可选参数。detect_anomalies 选项必须配置,这个选项才能生效。
  • min_fragment_length <number>:定义有效的最小碎片大小(有效负载大小)。小于或等于此限制的片段被认为是恶意的,如果还配置了 detect_anomalies,则会引发事件。默认值为“0”(禁用检查)。这个配置选项接受等于或大于零的值。这是一个可选参数。detect_anomalies 选项必须配置,这个选项才能生效。
  • policy <type>:选择基于目标的碎片整理模式。可用的类型有first、last、bsd、bsd-right、linux、windows和solaris。默认类型是bsd。

Paxson Active Mapping 论文介绍了术语 frag3 用于描述策略类型。它已扩展为解决真正的 “first” 策略与 Windows 和 Solaris 平台如何处理碎片流量之间的差异。

任何开发更多映射并想添加到这个列表的人请随时给我们发送电子邮件。

已知的映射如下:

PlatformType
AIX 2BSD
AIX 4.3 8.9.3BSD
Cisco IOSLast
FreeBSDBSD
HP JetDirect (printer)BSD-right
HP-UX B.10.20BSD
HP-UX 11.00First
IRIX 4.0.5FBSD
IRIX 6.2BSD
IRIX 6.3BSD
IRIX64 6.4BSD
Linux 2.2.10linux
Linux 2.2.14-5.0linux
Linux 2.2.16-3linux
Linux 2.2.19-6.2.10smplinux
Linux 2.4.7-10linux
Linux 2.4.9-31SGI 1.0.2smplinux
Linux 2.4 (RedHat 7.1-7.3)linux
MacOS (version unknown)First
NCD Thin ClientsBSD
OpenBSD (version unknown)linux
OpenBSD (version unknown)linux
OpenVMS 7.1BSD
OS/2 (version unknown)BSD
OSF1 V3.0BSD
OSF1 V3.2BSD
OSF1 V4.0,5.0,5.1BSD
SunOS 4.1.4BSD
SunOS 5.5.1,5.6,5.7,5.8First
Solaris 9, Solaris 10Solaris
Tru64 Unix V5.0A,V5.1BSD
Vax/VMSBSD
Windows (95/98/NT4/W2K/XP)Windows

举例:

Example configuration (Basic)

preprocessor frag3_global
preprocessor frag3_engine
Example configuration (Advanced)

preprocessor frag3_global: prealloc_frags 8192 
preprocessor frag3_engine: policy linux bind_to 192.168.1.0/24
preprocessor frag3_engine: policy first bind_to [10.1.47.0/24,172.16.8.0/24]
preprocessor frag3_engine: policy last detect_anomalies

注意,在高级示例中,三个引擎指定在 linux 上运行,分别分配了 first 和 last 策略。前两个引擎绑定到特定的IP地址范围,最后一个应用到所有其他流量,不属于前两个引擎地址要求的包自动落入第三个引擎。

3.3 Frag3 警报输出

Frag3 能够检测八种不同类型的异常。它的事件输出是基于包的,因此可以使用 Snort的 所有输出模式。在 doc/signatures 目录中读取文件名以123开头的文档—以获取关于不同事件类型的信息。

Frag3 使用 GID 123 生成以下警报:

SIDDescription
1分段数据包上的IP选项(IP Options on fragmented packet)
2Teardrop attack
3短分片,可能的DoS攻击(Short fragment, possible DoS attempt)
4Fragment packet ends after defragmented packet
5零字节碎片(Zero-byte fragment)
6坏的分片大小,包大小是负的(Bad fragment size, packet size is negative)
7坏的片段大小,包大小超过65536(Bad fragment size, packet size is greater than 65536)
8分片重叠(Fragmentation overlap)
9IPv6 BSD mbufs remote kernel buffer overflow
10Bogus fragmentation packet. Possible BSD attack
11TTL值小于 snort.conf 中配置的最小值,不用于重新组装(TTL value less than configured minimum, not using for reassembly)
12重叠分片的数量超过了配置的限制(Number of overlapping fragments exceed configured limit)
13分片小于 snort.conf 中配置的最小分片大小 min_fragment_length(Fragments smaller than configured min_fragment_length)
 类似资料: