入侵(Instruction)是个 广义的概念,不仅包括被发起攻击的人取得超出合法权限的系统的控制权,也包括搜集漏洞信息,造成拒绝访问(Denial of service)等对计算机系统造成危害的行为。
通过被动地监测网络上传输的原始流量,对获取的网络数据进行处理,从中提取有用的信息,再通过与已知攻击特征相匹配或与正常网络行为原型相比较来识别攻击事件。此类检测系统不依赖操作系统作为检测资源,可应用于不同的操作系统平台;配置简单,不需要任何特殊的审计和登录机制;可检测协议攻击、特定环境的攻击等多种攻击。但它只能监视经过本网段的活动,无法得到主机系统的实时状态,精确度较差。大部分入侵检测工具都是基于网络的入侵检测系统.
基于网络的入侵检测(NIDS)以所检测网段的所有流量作为其数据源,在以太网环境下,它通过将网卡设置为混杂模式来抓取所监测网段内的混合数据包。一般来说入侵检测系统担负着保护整个网段的任务。在交换环境下,为了抓取所需的数据,NIDS的放置需要精心的设计。NIDS通过对三类特征进行匹配,从而发现可能的入侵检测行为,这三类特征分别是:串特征、端口特征和数据包头特征。串特征是指在数据正文中出现的可能意味着某种攻击的字符串。例如一个数据包的正文中包含字符串“cat”++>/.rhosts”, 那么如果这条命令执行成功, 将导致执行该命令的主机不需身份认证就被使用,这是非常危险的事情。端口特征是指某个连接连向的目的端口,通过查看这个值,也可以发现一些可能的入侵,例如一些木马程序就是通过一些特定的端口拉接收外部的控制信息的。数据包头特征是指数据头中的码位的一些非常危险的非法组合,其中最为著名的是winnuke,它通过目标机NetBIOS使用的139端口发送设置了紧急指针位的(Urgent Pointer)、表明有带外数据(out of band)的TCP数据包,从而使一些安装Window操作系统的机器出现蓝屏死机。
NIDS的一个实例-Snort:
Snort是一个基于libcap的数据包嗅探器并可以作为一个轻量级的网络入侵检测系统。谓的轻量级是指在检测时尽可能低地影响网络的正常操作,一个优秀的轻量级的NIDS应该具备跨系统平台操作,对系统影响最小的特征并且管理员能够在短时间内通过修改配置进行实时的安全响应,更为重要的是成为整个安全结构的重要成员。Snort集成了多种告警机制来提供实时告警功能,包括syslog、用户指定文件、UNIXSocket。通过SMBClient(smbclient是可存取SMB/CIFS服务器的用户端程序。)使用winPopup对window客户端告警。而且Snort是开源的,可以通过Snort对小型网络自建入侵检测系统。
Snort的结构组成
Snort的体系结构体现了追求性能、简单、可扩展性的设计思想。它主要有三个子系统组成:抓包和解析子系统、检测引擎、日志和报警子系统,如下图:
|
|
||||
抓包和解析子系统的功能为捕获网络的传输数据并按照TCP/IP 协议的不同 层次将数据包进 行解析。 Snort 利用libpcap库函数进行采集数据, 该库函数可以为应用程序提供直接从链路层捕获数据包的接口函数并可以设置数据包的过滤器来捕获指定的数据。 网络数据采集和解析机制是整个NIDS 实现的基础, 其中最关键的是要保证高速和低丢包率,这不仅仅取决于软件的效率还同硬件的处理能力相关。 对于解析机制来说, 能够处理数据包的类型的多样性也同 样 非 常 重 要, 目 前,Snort 可以处理以太网、令牌环以及 SLIP 等多种链路类型的包。
检测引擎(the detect engine)是一个 NIDS 实现的核心, 准确性和快速性是衡量其性能的 重要指标, 前者主要取决于对入侵行为特征码的提炼的精确性和规则撰写的简洁实用性, 由于网络入侵检测系统自身角色的被动性———只能被动的检测流经本网络的数据, 而不能主动发送数据包去探测, 所以只有将入侵行为的特征码归结为协议的不同字段的特征值, 通过检测该特征值来决定入侵行为是否发生。后者主要取决于引擎的组织结构,是否能够快速地进行规则匹配。Snort维护一个两维的检测规则链表。 其逻辑结构如上图左所示。在链头里存储了一些公共特征,如源、目的 IP, 源、目的端口, 在附加链表中存储了除公共特征外的一些额外特征, 在检测过程中, 数据包按两个方向进行匹配, 先进行链头的匹配, 若与某个链头匹配成功, 再与该链头下的附加链表进行匹配,若匹配,则触发该条规则所对应行为(通过、记录或是报警)。
日志及报警子系统。入侵检测系统的输出结果系统的必要特征是实时性和多样性, 前者指能够在检测到入侵行为的同时及时记录和报警, 后者是指能够根据需求选择多种方式进行记录和报警。Snort 提供了三种日志和五种报警选项。它可以以数据包的解码格式(形如 TCPDUMP 的输出格式),易于用户查看的格式(即按照协议格式记录)及基于 IP 的目录结构格式(即以IP地址作为目录名)进行记录。 警告信息可以发往系统日志, 或以两种不同的格式(完全模式和快速模式)写入一个文本文件, 或发送给一个使用 samba 客户端的程序, 报警信息还可以写入数据库或者完全取消报警(例如当网络进行测试时)。
Snort 的规则
Snort 的规则写起来虽然非常简单, 但却非常实用, 能发现大量危险的或者可疑的网络流量。当一个数据包匹配了特定的规则后 ,Snort 可以有三种响应方式:通过、记录或者报警,其意义是非常明显的。一条基本的Snort 规则包括响应方式、协议、方向、端口、IP地址等信息, 如log tcp any any ->10.1.1.0/ 24 79, 这条规则表示,Snort 将把所有连向内部C类地址10.1.1,端口79的TCP包记录下来。当然, Snort还提供了很多可选域, 从而能写出很复杂的检测规则, 同时还有一些选项来提高匹配的效率。
预处理程序从 Snort 版本1.5开始引入,其代码在检测引擎被调用之前先被运行,为检测做铺垫, 从而提高检测的准确性和速度。而且预处理机制采用插件形式,用户和程序员能够将模块化的插件方便地融入Snort之中。目前最新版本的 Snort 的预处理程序模块有HTTP Decode(用于处理 HTTPURI 字符串,将串中的数据转化为可读的 ASCII 字串,用于检 测HTTP 的数据信息对付隐蔽的 WebURL扫描器和恶意的入者)PortscanDetector(向标准记录设备中记录从一个源 IP 地址来的端口扫描的开始和结束),Frag2(使得无法通过 IP小分片来躲避检测),Stream4(提供 TCP 流的重组和状态分析)等, 从而大大增强了 Snort 的检测能力。
NIDS的优势:
(1)检测范围是整个网段,而不仅仅是被保护的主机。采用集中式管理的分布工作方式,能远程监控。
(2)实时监测和应答。
(3)隐蔽性好。不需要在每个主机上安装,不易被发现。
(4)不需要任何特殊的审计和登录机制,只要配置网接口就可以了。
不会影响其他数据源。
(5)操作系统独立。NIDS系统单独架设,不占用其他计算机系统的任何资源。
(6)NIDS不会成为系统中的关键路径,所以系统发生故障不会影响正常业务的运行。
NIDS的局限:
(1)网络的局限。只能检测经过本网段的活动,且精确度较差。在交换式网络环境下会出现检测范围的局限且难以配置,防入侵欺骗的能力也比较差。无法知道主机内的安全情况。
(2)检测方法局限。难以审查处理加密的数据流的内容,对主机上执行的命令也难以检测。对重放攻击无能为力。
参考文献:
[1]刘春颂,杨寿保,杜滨[J].计算机应用.基于网络的入侵检测系统及其实现.2003,2:29-31