当前位置: 代码迷 >> 综合 >> Snort预处理器之`AppId Preprocessor`
  详细解决方案

Snort预处理器之`AppId Preprocessor`

热度:20   发布时间:2024-02-12 21:53:26.0

文章目录

    • 1 AppId 预处理器简介
    • 2 AppId 预处理的依赖
    • 3 AppId 预处理器的配置
    • 4 AppId 预处理器的规则选项
    • 5 应用程序规则事件
    • 6 应用程序使用情况统计
    • 7 开放式检测器软件包(ODP)安装
    • 8 用户创建的应用程序检测器

1 AppId 预处理器简介

随着网络的复杂性和网络流量的增长,网络管理员在管理网络时需要应用程序识别。管理员可能只允许与业务相关,低带宽或处理某些主题的应用程序。

AppId 预处理器添加应用程序级别视图来管理网络。它通过添加以下特性来实现这一点:

  • 网络控制:通过为 Snort 规则编写人员提供一组应用程序标识符(AppId),预处理器提供了简化的单点应用程序识别。
  • 网络使用意识:预处理器输出统计信息,以显示网络上每个应用程序使用的网络带宽。管理员可以监视带宽使用情况,并可以决定阻止浪费资源的应用程序。
  • 自定义应用程序:预处理器使管理员能够创建自己的应用程序检测器来检测新应用程序。检测器使用 Lua 编写,并使用定义明确的 C-Lua API 与 Snort 交互。

2 AppId 预处理的依赖

为了预处理器的正常运行:

  • 必须启用流会话跟踪,即 stream5。必须在 stream5 中启用 TCP 或 UDP。预处理器需要一个会话跟踪器来保存它的数据。
  • 必须启用协议感知刷新(PAF)。
  • 应该启用 IP 碎片整理,即应该启用并配置 frag3 预处理器。
  • HTTP 预处理器必须被启用和配置。处理器不需要任何特定于 AppId 的配置。预处理器提供解析后的 HTTP 头用于应用程序判断。如果没有 HTTP 预处理程序,AppId 预处理程序将只能识别非 HTTP 应用程序。
  • LuaJIT 版本2.0.2必须安装在编译和运行 snort 的主机上。LuaJIT 的新版本没有进行兼容性测试。

3 AppId 预处理器的配置

默认情况下是启用 AppId 动态预处理器(从snort-2.9.12)。通过编译 Snort 时,在 ./configure 中包含 --disable-open-appid 选项,可以在构建期间禁用该预处理器。

配置的格式为(默认配置):

preprocessor appid

选项的语法:

Option Argument Required Default
app_detector_dir <directory> NO app_detector_dir { /usr/local/etc/appid }
app_stats_filename <filename> NO NULL
app_stats_period <time in seconds> NO 300 seconds
app_stats_rollover_size <disk size in bytes> NO 20 MB
app_stats_rollover_time <time in seconds> NO 1 day
memcap <memory limit bytes> NO 256 MB
debug <"yes"> NO disabled
dump_ports No NO disabled

选项的解释:

  • app_detector_dir

    指定通过ODP(开放检测器软件包)软件包安装思科提供的检测器和应用程序配置文件的基本路径。该软件包包含 Lua 检测器和一些应用程序元数据。客户编写的检测器存储在同一基本路径下的 custom 子目录中。

    语法:app_detector_dir <directory name>

    举例:app_detector_dir /usr/local/cisco/apps

  • app_stats_filename

    文件名。如果缺少此配置,则会禁用应用程序统计信息。

    语法:app_stats_filename <filename>

    举例:app_stats_filename appStats.log

  • app_stats_period

    桶(bucket)大小(以秒为单位)。默认5分钟。

    语法:app_stats_period <time in seconds>

    举例:app_stats_period 15

  • app_stats_rollover_size

    将导致文件翻转的文件大小。默认20 MB。

    语法:app_stats_rollover_size <file size in bytes>

    举例:app_stats_rollover_size 2000000

  • app_stats_rollover_time

    将导致文件翻转的创建时长。默认1天。

    语法:app_stats_rollover_time <time in seconds>

    举例:app_stats_rollover_time 3600

  • memcap

    AppId内部结构使用的内存上限。默认32 mb

    语法:memcap <memory in bytes>

    举例:memcap 100000000

  • dump_ports

    打印端口上的检测器和活动的检测器的信息。用于故障排除。

    语法:dump_ports <"yes"|"no">

    举例:dump_ports "yes"

  • debug

    用于一些旧检测器的调试。

    语法:debug

    举例:debug

4 AppId 预处理器的规则选项

AppId 预处理器添加了1个新规则选项,如下所示:

appid

这个规则选项必须启用预处理器才能工作。

  • appid

    rule 选项允许用户以简单的方式为特定的应用程序定制规则。该选项最多可以接受10个应用程序名称,名称之间由空格、制表符或逗号分隔。规则中的应用程序名称是您将在 appMapping.data 文件的最后一栏中看到的名称。如果规则中的 appId 之一与会话中的 appId 匹配,则该规则被视为匹配。

    对于客户端数据包,会话中的 payloadAppId 与规则中的所有 AppId 匹配。之后,将 miscAppId,clientAppId 和 serviceAppId 匹配。由于警报事件包含一个 AppId,因此仅报告第一个匹配项。如果没有 appId 选项的规则匹配,则将报告最特定的appId(按有效负载,杂项,客户端,服务器的顺序)。

    服务器端数据包遵循同样的逻辑,但有一个例外。更改匹配顺序,使s erviceAppId 高于 clientAppId。

    语法:appid:<list of application names>

    举例:

    appid: http;
    appid: ftp, ftp-data;
    appid: cnn.com, zappos;
    

5 应用程序规则事件

定义了一个新的事件类型,以便仅以 Unified2 格式在 Snort Alerts 中记录应用程序名称。这些事件仅包含一个应用程序名称。可以使用appid事件类型关键字为 unified2 输出启用事件。

例如,以下配置将使用应用程序名称将警报记录在 my.alert 文件中。

output alert\_unified2: filename my.alert, appid\_event\_types

u2spewfoo,u2openappid,u2streamer 工具可用于以新格式打印警报。每个事件将在事件结束时显示其他应用程序名称。

举例:

#> u2spewfoo outputs the following event format
(Event)sensor id: 0 event id: 6 event second: 1292962302 event microsecond: 227323sig id: 18763 gen id: 1 revision: 4 classification: 0priority: 0 ip source: 98.27.88.56 ip destination: 10.4.10.79src port: 80 dest port: 54767 protocol: 6 impact\_flag: 0 blocked: 0mpls label: 0 vland id: 0 policy id: 0 appid: zappos

6 应用程序使用情况统计

AppId 预处理器以 unified2 格式定期在 snort 日志目录中打印应用程序网络使用情况。文件名、统计时间间隔和文件翻转由appId 预处理器配置控制。可以使用 u2spewfoo、u2openappid、u2streamer 工具打印这些文件的内容。u2openappid 工具的输出示例如下所示:

statTime="1292962290",appName="firefox",txBytes="9395",rxBytes="77021"
statTime="1292962290",appName="google\_analytic",txBytes="2024",rxBytes="928"
statTime="1292962290",appName="http",txBytes="28954",rxBytes="238000"
statTime="1292962290",appName="zappos",txBytes="26930",rxBytes="237072"

7 开放式检测器软件包(ODP)安装

Snort 团队的应用检测器将以单独的包中(称为“ Open Detector Package”)交付。 ODP是一个包含以下工件的软件包:

  • Lua 语言的应用程序检测器。
  • 端口检测器,它是仅端口应用程序检测器,采用YAML格式的元数据。
  • 包含应用程序元数据的 appMapping.data 文件。此文件不应被修改。第一列包含应用程序标识符,第二列包含应用程序名称。其他列包含内部信息。
  • Lua 库文件 DetectorCommon.lua,flowTrackerModule.lua 和 hostServiceTrackerModule.lua

用户可以在其选择的任何目录中安装ODP软件包,并在 appId 预处理程序配置的 app_detector_dir 选项中配置此目录。安装 ODP 不会修改用户创建的检测器所在的任何名为 custom 的子目录。

当安装,ODP将创建以下子目录:

odp/port 	//Cisco port-only detectors
odp/lua 	//Cisco Lua detectors
odp/libs 	//Cisco Lua modules

8 用户创建的应用程序检测器

用户可以通过使用 Lua 语言编写检测器来创建新的应用程序。用户还可以将 Snort 团队提供的检测器复制到自定义子目录中,并自定义检测器。将在 Snort 网站上发布一份详细介绍 API 使用情况的文档。

用户必须组织他们的 Lua 检测器和库通过创建下面的目录结构,在ODP安装目录下。

custom/port 	//port-only detectors
custom/lua 		//Lua detectors
custom/libs 	//Lua modules