Snort入侵检测系统分析2015年12月6日Snort入侵检测系统分析简介Snort的一些源代码是从著名的TCPDUMP软件发展而来的。
snort是一个基于LIBPCA包的网络监控软件,可以作为一个十分有效的网络入侵监测系统。
它运行在一个“传感器”主机上,监听网络数据。
这台机器可能是一台简陋的运行FREEBSD系统的Pentium100 PC,并且至少有一个网卡。
Snort首先根据远端的IP地址建立目录,然后将检测到的包以TCPDUMP的二进制格式记录或者以自身的解码形式存储到这些目录中.这样一来,你就可以使用snort来监测或过滤你所需要的包.Snort是一个轻量级的入侵检测系统,它具有截取网络数据报文,进行网络数据实时分析、报警,以及日志的能力。
snort的报文截取代码是基于LIBPCA库的,继承了LIBPCA库的平台兼容性。
它能够进行协议分析,内容搜索/匹配,能够用来检测各种攻击和探测,例如:缓冲区溢出、隐秘端口扫描、CGI 攻击、SMB探测、OS指纹特征检测等等。
snort使用一种灵活的规则语言来描述网络数据报文,因此可以对新的攻击作出快速地翻译。
snort具有实时报警能力。
可以将报警信息写到syslog、指定的文件、UNIX套接字或者使用Winpopup消息。
snort具有良好的扩展能力。
它支持插件体系,可以通过其定义的接口,很方便地加入新的功能。
snort还能够记录网络数据,其日志文件可以是TCPDUMP格式,也可以是解码的ASCII格式。
简单的说,Snort是数据包的嗅探器,也是数据包记录器,还是NIDS。
提供数据包嗅探和记录功能只是Snort的部分功能,Snort 的特点就是其入侵检测功能—根据入侵规则匹配数据包中的内容。
Snort还是一个自由,简介,快速,易于扩展的入侵检测系统,已经被移植到了各种UNIX平台和winY2k上。
同时,它也是目前安全领域中,最活跃的开放源码工程之一。
体系结构Snort有5个主要部件:捕包程序库libpcap、包解码器、预处理程序、检索引擎、输出组件。
图1 Snort组件数据流程图捕包装置把包以原始状态捕获后送给解码器。
解码器是进入Snort的第一步,它将特殊协议元素翻译成内部数据结构。
它的目的是剥落包头。
利用TCP-IP 栈解码并且将包放入一个数据结构中。
在最初的捕包和解码完成后,有预处理程序处理流量。
许多插入式预处理程序对包进行检查或操作后将它们交给下一个组件——检索引擎。
检索引擎对每一个包的一个方面进行简单的检验以检测入侵。
最后一个组件是输出插件,它对可疑行为产生报警。
大规模的应用程序很少采用单机模式,Snort通常采用分布式体系对网络进行入侵检测。
最典型的安装方式是三层体系,即传感器层、服务器层、分析员控制台。
捕包程序库libpcap和包解码器运行在传感器上,负责对抓来的包进行解释并传递警报。
由于传感器必须放置在要监控入侵的网段,为了保证安全,通常只安装Snort和它在之上运行的支撑应用程序。
建议Linux或BSD等UNIX类型的操作系统。
传感器的两块网卡一块用作捕包接口不分配IP,一块用作管理接口分配IP。
捕包程序库libpcap运行在Libpcap平台上,由于Libpcap平台的独立性使得Snort可以被移植到任何地方,成为一个真正与平台无关的应用程序。
预处理程序预处理是Snort的一类插件。
它在检测引擎之前对数据进行处理,并且努力与不断变化的漏洞和攻击保持同步。
可以添加新的协议为Snort提供支持。
它既能对数据包操作以便检测引擎能正确分析包,又能检测特征检测所不能单独发现的可疑流量。
按功能可以分为三类:数据标准化,协议分析和非特征匹配检测。
数据标准化新的攻击方法和IDS躲避技术不断涌现,以至Snort的检测引擎要么不能检测,要么检测效率不高。
预处理程序可以将数据标准化以便检测引擎能正确对其分析。
多态病毒是为了躲避反病毒程序的特征匹配引擎而将病毒代码任意改造和变异。
同样的技术也被用于远程利用,shell代码具有多种形态。
Fnord预处理程序能检测出变异的NO-OP sled,从而避免了由于缓冲区溢出使处理器强制执行恶意代码导致的程序崩溃。
No-op sled能被许多IDS轻易地检测到,除非它在每次被使用时都做修改。
如果没有Fnord预处理,Snort将无法检测多态shell 代码。
协议分析由于检测引擎能分析的协议很少,所以用协议处理程序来协助检测。
ASNI_decode就能检测ASNI(Abstract Syntax Notation抽象语法标记)协议中的不一致性。
较高的协议比如SNMP、LDAP和SSL都依赖ASNI。
几乎所有起用SNMP的设备都受到缓冲区溢出或是拒绝服务(DoS)攻击的影响。
非特征匹配检测这类预处理程序利用不同特征匹配的方法来捕获恶意流量。
例如所谓的侦察攻击通常只是一个报警信号,无法确定是不是攻击。
信息收集尝试利用了不合规格的流量,但这些流量通常在性质上是无害的。
Portscan2和stream4就能发现这类流量和一些恶意黑客使用的躲避技术。
检测引擎检测引擎是Snort的一个主要部件,有两个主要功能:规则分析和特征检测。
检测引擎通过分析Snort规则来建立攻击特征。
Snort规则被载入到检测引擎并以树形数据结构分类。
规则按功能分为两个部分:规则头(规则树节点)和规则选项(选项树节点)。
规则头包含特征应用的条件信息。
树形结构通过最小化发现可疑行为的必要检测次数来提高效率。
恶意行为被发现后,Snort将入侵数据写入许多输出插件。
检测可疑净荷Snort特征能检测的不只限于包头数据,它也能检测藏在一个看似正常的包中的可疑净荷。
某些可疑净荷可能会引起Windows协议的缓冲区溢出并导致目标主机崩溃。
Snort还能捕获大范围的内容类型:任何来自最新的P2P文件共享工具的流量都带有导致远程缓冲区溢出的内容。
Snort能用来对任何你所担心的包净荷进行监控并报警。
通过特征检测可疑流量最有效的检测对系统或网络的攻击的方法是基于特征的检测。
基于特征的检测的基础是异常或恶意网络流量符合一种独特的模式,而正常或良性流量不符合。
对Snort来说,一个恶意流量特征可以被创建成一个规则以载入它的检测引擎,用于进行特征匹配。
Internet控制报文协议(Internet Control Message Protocol,ICMP)主要用于ping命令来检查某个IP地址是否有主机存在。
它被用于黑客常常使用的一个网络发现工具NMAP。
NMAP利用的ICMP ping 的特征将ICMP类型域设为8并且净荷数据为空。
这与在Windows 或UNIX操作系统下直接用ping命令不同。
根据这一点,就可以创建一条相关规则,如果网络中有匹配这一特征的流量就会引起报警。
需要强调的是:Snort不一定要运行在这一流量要到达的计算机上,它只需要处于同一个网段就能嗅探到该流量。
因此,Snort能检测出针对大量受保护主机的NMAP ping扫描。
检测具体协议元素Snort特征可以具体针对特殊协议的一个元素描述。
例如.ida扩展名是一个很少用到的微软ISS索引服务的组件,能远程导致严重的缓冲区溢出进而远程控制Web服务器,还能产生大量红色代码蠕虫,使得合法用户几乎从外部通过.ida 文件使用的索引服务。
Snort的这个特征规则是只搜索URL内容而不是整个净荷,因而更为高效。
用客户规则扩展覆盖面Snort支持的规则对所有网络是通用的,要想做好入侵检测工作,需要能针对具体网络指定特定的规则,Snort的一个特色就是能赋予程序员编写自己规则的能力。
启发式的可疑流量检测特征匹配虽然高效,但不能达到100%的准确率,因为有些有害流量没有可识别的特征。
统计包异常检测引擎(SPADE)模块就是通过启发式匹配对无可匹配特征的可疑流量进行检测。
SPADE观测网络并建立一张描述网络低流量的表。
这张表记载的数据包括包的类型和源地址、目的地址。
在表达到一定大小后,SPADE挑出的每一个包将被赋给一个数值,该数值的大小取决于它在表中出现的频率。
频率越低,则该数值越大。
当该数值达到某一匹配好的极限时就会产生报警。
这种方法对检测黑客的侦察行动是很有效的。
黑客常常缓慢地扫描端口,企图通过把自己的扫描数据淹没在大量的数据中来隐蔽自己。
但即使一个黑客使用多个源地址进行活动,也会被SPADE注意。
分布式拒绝服务攻击(DDoS)是多台受控主机向一台主机发送大量伪造的请求使得合法用户无法访问服务器,但它也能被SPADE检测到。
采集入侵数据想预知黑客会对网络进行哪些恶意行为几乎是不可能的,唯一的解决方案是将与恶意流量对应的所有净荷保存起来。
Snort可以将所有可能含有恶意的净荷记入日志。
评估威胁净荷包含的数据常常是反映攻击者意图的窗口。
净荷数据能协助确定一次攻击是否是人为操纵。
蠕虫病毒加大了这一任务的难度。
蠕虫可以具有复杂的攻击步骤,包括一张关于攻击手段和受害主机后门的详细清单。
常常与人类攻击者遵循相同的模式。
如果能够检查净荷数据,就有可能将他与蠕虫的已知行为比较,并弄清你面对的是哪种类型的威胁。
如果最终确定是人进行的攻击,就可以通过净荷数据来确定攻击者的技术水平,是脚本族还是黑客高手。
脚本族可以通过将攻击特征与常用工具的特征进行比较来识别。
利用输出插件进行报警Snort利用输出插件从检测引擎获取入侵数据,程序员可以根据需要自行配置。
输出插件的目的是将报警数据转存到另一种资源或文件中。
Snort输出以各种格式记入日志以便入侵数据能方便地为其他应用程序或工具使用。
输出插件有以下功能:聚集数据以一种工业标准格式从许多完全不同的安全装置聚集数据。
从而进行事件相关。
用统一格式和Barnyard程序记录日志传统的关系数据库输出插件是制约Snort处理带宽能力的因素之一,Barnyard能将二进制数据解析成与它相关的数据库插件能识别的格式,以完全独立于Snort的方式运行,而不影响Snort的捕包能力。
报警Snort有两种主要的报警方法:syslog和swatch报警、入侵数据库控制台ACID报警。
Swatch是一种简单且功能强大的工具。
它能积极地监控系统日志,当发生了事先配置的事件是就发出报警。
可采用传呼、email或声音等方式。
ACID是从数据库读取入侵数据并以友好的格式把它显示在浏览器中,供分析员处理。
它具有复杂查询功能。
还可以按逻辑功能对报警分组并关联到Internet上CVE标准漏洞库的对应记录上。
ACID还有一个绘图组件可以用来生成统计图表。
分层报警IDS领域的报警分为三类:无优先级报警、严格编码的优先级报警、可定制的优先级报警。
无优先级报警:不能按严重程度进行分类,通告会变得非常多,无法采用紧急时间自动通知机制。