Snort:为您的企业规划 IDS
Snort 通常被称为轻量级入侵检测系统。Snort 被标记为轻量级,因为它主要为小型网络段设计。由于其基于规则的架构,Snort 非常灵活。Snort 的设计者使其非常容易插入和扩展规则,因为新的安全威胁被检测到。本文将详细介绍 Snort 的安装、架构、规则以及如何运行它。
Snort 由 Martin Roesch 编写,可以从 www.Snort.org 下载,方法是选择左侧面板上的“下载”链接。截至撰写本文时,Snort 的最新版本是 1.7。Snort 网站将为您提供下载一些常见平台的二进制文件以及源代码的功能。但是在您下载并尝试安装/编译 Snort 之前,您将需要 libpcap 版本 0.5 或更高版本。libpcap 的最新版本是 0.6.2。它允许独立于系统的数据包捕获和分析。Libpcap 在一些 BSD 平台上可用。您可以从 www.tcpdump.org 下载最新版本的 libpcap。
Snort 的安装非常简单。与安装任何典型的 UNIX 工具一样,它涉及运行 ./configure,然后运行 make。我总是喜欢查看配置选项。键入 ./configure -help 将显示可用的选项。键入 make install 将安装所有 Snort 文件。但是,您仍然没有准备好运行 Snort。在运行 Snort 之前,您必须构建其规则文件。但在我们继续编写规则文件之前,让我们回顾一下 Snort 架构。
Snort 架构由三个主要组件组成。图 1 显示了这些组件的简化表示。它们描述如下:
数据包解码器:Snort 数据包解码器支持以太网、SLIP 和 PPP 介质。数据包解码器执行所有工作,以便以便捷的方式为检测引擎准备数据。
检测引擎:检测引擎是 Snort 的核心。它本质上负责根据运行时加载的 Snort 规则分析每个数据包。检测引擎将 Snort 规则分为所谓的链头和链选项。诸如源/目标 IP 地址和端口之类的常见属性标识链头。链选项由诸如 TCP 标志、ICMP 代码类型、特定类型的内容、有效负载大小等细节定义。检测引擎根据 Snort 规则文件中定义的规则递归地分析每个数据包。与解码的数据包匹配的第一个规则会触发规则定义中指定的操作。不匹配任何 Snort 规则集的数据包将被简单地丢弃。检测引擎的关键组件是插件模块,例如端口扫描模块。插件模块通过增加分析能力来增强 Snort 的功能。
记录器/警报器:日志记录和警报是两个独立的子组件。日志记录允许您以人类可读或 tcpdump 格式记录数据包解码器收集的信息。您可以配置警报发送到 syslog、平面文件、UNIX 套接字或数据库。可选地,您可以在测试或渗透研究期间完全关闭警报。默认情况下,所有日志都写入 /var/log/Snort 文件夹,所有警报都写入 /var/log/Snort/alerts 文件。
Snort 规则文件是一个 ASCII 文件,可以使用您喜欢的编辑器创建。规则文件的内容包括以下部分:
变量定义:这些定义了可以在创建 Snort 规则中重用的变量。
Snort 规则:这些是启用入侵检测的实际规则。这些应与整体入侵检测策略保持一致。Snort 规则将在本节稍后定义。
预处理器:这些与插件同义,并且有助于扩展 Snort 的功能。例如,端口扫描模块允许 Snort 检测端口扫描。
包含文件:这些允许您包含其他 Snort 规则文件。
输出模块:这些允许 Snort 管理员指定日志记录和警报的输出。当调用 Snort 的警报或日志记录子系统时,将运行输出模块。
Snort 规则由两个逻辑部分组成:规则头和选项。Snort 规则必须在单行上指定。此外,Snort 规则必须包含 IP 地址,因为不执行主机名查找。图 2 显示了 Snort 规则头和选项的详细信息。
对 Snort 规则细节感兴趣的读者可以参考 Snort 页面上的“编写 Snort 规则”链接。此外,Snort 发行版提供了一个 RULES.SAMPLE 文件,该文件记录非常完善。此文件显示了您可以用来构建您的环境的 Snort 规则文件的 Snort 规则。在编写 Snort 规则之前,建议您记录您的 NIDS 策略。这涉及识别您希望记录、忽略或在检测到时发出警报的活动。下面记录了一个非常简单的策略,其对应的规则文件在列表 1 中显示。
记录来自不属于我们网络的任何主机的以下活动:Telnet 尝试、FTP 流量和 finger 尝试。对以下内容发出警报:来自不属于我们网络的任何主机的端口扫描尝试活动到 /var/log/snort/pscan_alerts 文件,所有 PHF 请求以及所有 DNS 版本查询。通过(忽略)以下内容:端口 1024 以上的所有 UDP 端口访问,源自我们网络的所有 Web 浏览流量以及到 NIDS 的所有 ssh 流量。
Snort 可以作为数据包嗅探器、数据包记录器和 NIDS 运行。当 Snort 作为数据包嗅探器运行时,TCP/UDP/ICMP 标头信息和应用程序数据将转储到标准输出
# Snort -vd
作为数据包记录器,Snort 将应用程序和协议标头信息记录到 /var/log/today.log
# Snort -dev -l /var/log/today.log
作为 NIDS,Snort 侦听 le0 接口,并使用 /etc/Snort.rules 作为其配置文件,并在守护程序模式下运行 Snort
# Snort -D -i le0 -c /etc/Snort.rules
Snort 不会按照 Snort 规则文件中出现的顺序评估规则。默认情况下,Snort 规则文件中指定的所有操作都按照警报、通过和日志的顺序评估。如果您希望将此顺序更改为通过、警报、日志,请使用 -o 命令行标志。-A 选项指定警报模式。这里有四个选择:full、fast、none 和 unsock。full、fast 和 none 选项相当明显。unsock 选项为 Snort 提供了写入 UNIX 套接字的能力,其中侦听该套接字的程序可以处理警报。这些选项的详细信息在 Snort 手册页中提供。使用 Snort 警报模式,您将能够指定您希望在警报消息中查看的详细程度。
请务必验证您的 snort 配置。为了验证,我们必须重新审视 IDS 策略。提供了一些验证 IDS 的经验法则。根据 IDS 策略,您可以启动特定的测试并观察日志和警报。对于上面列出的我们的策略,我们可以启动 Telnet、FTP 和 finger。您可以使用扫描器等工具。公开可用的扫描器,例如 nmap,是不错的选择。来自 Network Associates 的 Cybercop 和来自 Internet Security Systems 的 ISS 扫描器等商业扫描器可以帮助您自动化该过程。Netcat,可从 www.atstake.com/researchtools/ 获得,是另一个很棒的实用程序。最后,您可以使用为脚本小子编写的几个脚本来对您自己的基础设施发起攻击。但是,请谨慎行事,因为运行这些脚本意味着您信任这些脚本。列表 2 显示了一些示例警报。它显示了三种常见的攻击:IIS Unicode 攻击、SYN/FIN 扫描和端口扫描。
首先是复杂的黑客,然后是脚本小子和分布式拒绝服务 (DOS) 攻击。今天的 IT 基础设施和业务资产 постоянно 受到未经授权访问的威胁。防火墙是 1990 年代早期抵御企业资产攻击的主要机制。现代安全架构越来越多地包括 IDS。Snort 为商业 IDS 提供了一种非常经济高效的替代方案。
一旦编译和安装,Snort 可以作为嗅探器、数据包记录器和基于网络的 IDS 运行。Snort 易于配置,并为警报和日志记录提供多个输出模块。Snort 社区开发的插件模块进一步增强了 Snort 的能力。如果您能够启动并运行 Snort,请观看您的日志和警报,以深入了解 Snort 捕获的流量类型!
Nalneesh Gaur 是德克萨斯州达拉斯市 Digital Island 的技术解决方案工程师。他与财富 500 强公司合作,为他们提供内容交付和网络托管领域的解决方案。