构建企业级IDS(二)系统篇

本节我将从各个系统开始,一步一步说明如何构建企业级IDS。话不多说,现在就开始。熟话说的好,工欲善其事,必先利其器。所以,要想能够构建起企业级IDS,选好各个环节的系统就很有必要了。这就要求我们必须对选择的各个系统有一个深入的了解,清楚他们与同类的其他系统的异同,优劣,这样才能选出适合我们整个体系的系统。比如:消息队列使用在kafka,rabbitmq之间如何选择,如何取舍;缓冲系统在redis,memcache之间如何选择;最重要的开源IDS也有很多,bro,snort,suricata应该选谁呢?下面就来详细介绍一下这些系统。

1. 系统介绍

1.1开源IDS系统

suricata:Suricata是一个免费的开源,成熟,快速和强大的高性能网络威胁检测引擎。引擎能够实时入侵检测(IDS),内联入侵防御(IPS),网络安全监控(NSM)和离线pcap处理。使用强大而广泛的规则和签名语言检查网络流量,并为检测复杂威胁提供强大的Lua脚本支持。

bro:Bro是一种被动的开源网络流量分析器。它主要是一个安全监视器,可以检查链路上的所有流量,以查看可疑活动的迹象。然而,更一般地,Bro支持甚至在安全域之外的各种流量分析任务,包括性能测量和帮助解决问题。

snort:Snort(由SourceFire开发和维护)一直是开源入侵检测/防御系统(IDS / IPS)的实际标准。它的引擎结合了签名,协议和基于异常的检测的优点,并成为世界上应用最广泛的IDS / IPS。

1.2 开源消息中间件

rabbitmq:RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。

kafka:Kafka是LinkedIn开源的分布式发布-订阅消息系统,目前归属于Apache定级项目。Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输。0.8版本开始支持复制,不支持事务,对消息的重复、丢失、错误没有严格要求,适合产生大量数据的互联网服务的数据收集业务。

1.3 开源缓存系统

redis:是一个key-value存储系统(布式内缓存,高性能的key-value数据库)。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

memcache:是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。

1.4 开源高性能数据包处理库

pfring:pfring由Luca Deri发明的提高内核处理数据包效率,并兼顾应用程序的库。

2. 系统对比

2.1 开源IDS对比

项目 suricata snort bro
线程 支持多线程 单线程 单线程,但支持多个bro协同工作
是否支持签名规则 否(基于bro-script的策略引擎)
捕获引擎 AF_packet,pf_ring(Hight performance);pcap,NFLOG(standard) Libpcap,pf_ring Libpcap,pf_ring
是否支持数据包重组
特殊功能 警报和事件过滤,GPU加速功能,主机或子网提供速率限制和阈值,IP信誉 部署简单,,单个实例效率高 通过脚本支持更高的扩展性,支持集群模式
多个CPU 负载均衡
支持文件提取
支持IPS

在使用单核处理器的中等流量的情况下,Snort非常高效。基于体系结构,snort使用10%的CPU进行解析,使用10-20%进行规范化,使用70-80%的CPU进行有效负载检查和检测。在SANS执行的测试中,Snort提供了500Mbps的性能,其中1个CPU内核可用于1000个签名。对于4000个签名,它需要2.4 CPU,速率为400 Mbps。结果发现单个Snort实例比Suricata更有效,内存利用率降低50%。最新版本的Snort支持PF-RING和PCAP加速,为更高流量提供支持。

Suricata更专注于大规模网络。在某种程度上,它可以被视为大型网络的Snort的扩展。在每个CPU托管12个核心和125 GB RAM的45 CPU的情况下,网络吞吐量为20 Gbps。数据包丢失率仅为7%,而Snort的数据包丢失率为53%。Suricata支持PF-Ring,AF数据包,PCAP加速和NFLOG。它也适用于多线程。在snort中,对每个实例执行规范化,而对于Suricata和Bro,在多线程之前仅执行一次规范化。Suricata还支持GPU cuda加速模式匹配。还有大约4000种文件类型构建用于文件提取和日志记录,还提供MD5匹配。

如上所述,Bro是脚本驱动的IDS。Bro支持高吞吐量环境的群集。Bro提供了一种基于“工人”的架构来利用多个处理器。Bro的开发人员建议为每个正在分析的80 Mbps流量分配一个核心。它还具有允许与企业中的其他系统交互,发送电子邮件消息,页面呼叫人员或自动终止现有连接的功能。Bro还基于文件哈希提取和与publicaly哈希寄存器的使用匹配。值得注意的是,与Snort或Suricata相比,每个核心的处理量非常低。但是Bro已经建立了通过Bro集群将负载分散到多台机器上的能力,从而证明了更高的可扩展性。但有一些研究表明,分布式处理的开销会降低性能。因此,性能加速度适用于直到某个饱和点。

Snort是适度流量场景的完美解决方案,大约400 Mbps。在新版本中还有像PFRing这样的加速支持,旨在解决高吞吐量方案。但对于10Gbps或更高速率的高吞吐量系统,Suricata由于其对大型可扩展性的广泛支持而更好。使用20Gbps的ISP可以有效地使用Suricata。由于其极大的灵活性,Bro可被视为高通量研究环境。与Snort或Suricata中的规则集相比,其强大的脚本功能绝对具有更大的优势。

参考:
https://priyachalakkal.wordpress.com/2016/03/24/suricata-snort-bro/

https://www.sans.org/reading-room/whitepapers/intrusion/open-source-ids-high-performance-shootout-35772

https://www.bricata.com/resources/white-paper/bro-vs-snot-or-suricata/

https://zhuanlan.zhihu.com/p/34329072

猜你喜欢

转载自blog.csdn.net/yrx0619/article/details/81267236
今日推荐