构建基于Suricata+Splunk的IDS入侵检测系统
ssooking Lv5

一.什么是IDS和IPS

IDS(Intrusion Detection Systems)

入侵检测系统,是一种网络安全设备或应用软件,可以依照一定的安全策略,对网络、系统的运行状况进行监视,尽可能发现各种攻击企图、攻击行为或者攻击结果,并发出安全警报。

IPS(Intrusion Prevention System)

入侵防御系统,除了具有IDS的监控检测功能之外,可以深度感知检测数据流量,对恶意报文进行丢弃,以阻止这些异常的或是具有伤害性的网络行为。IPS入侵防御系统,是在IDS入侵检测系统的基础上,增加了事件处理以及安全防护功能,能够主动对安全事件进行响应。

NSM

网络安全监控系统,用于收集、检测和分析网络安全数据,通常IDS是其组成部分之一。

二.IDS/IPS的功能及分类

IDS根据两种方法进行分类:按照数据来源按照入侵检测策略

1、按照数据来源分类

  • 基于网络的入侵检测系统(NIDS)
  • 基于主机的入侵监测系统(HIDS)
  • 分布式入侵检测系统(DIDS)

2、按照入侵检测策略分类

  • 滥用检测
  • 异常检测
  • 完整性分析

IPS从功能上具有以下几个组成部分:

  • 数据采集:采集和捕获流量数据
  • 入侵检测:分析流量和日志数据,发现安全异常行为并发出警报,常见的有Snort、Suricata、Bro
  • 结果展示:用于分析IDS警报并进行友好展示,常见的IDS警报分析工具有Snorby、Sguil、Base等
  • 安全防御:主动响应安全事件,采取丢弃数据包等等措施来阻止异常网络行为,比如与iptables联用

三.IDS检测方法

IDS根据入侵检测的行为分为:异常检测误用检测

1、异常检测方法

  • 统计异常检测方法
  • 特征选择异常检测方法
  • 基于贝叶斯推理异常检测方法
  • 基于贝叶斯网络异常检测方法
  • 基于模式预测异常检测方法

2、误用检测方法

  • 基于条件的概率误用检测方法
  • 基于专家系统误用检测方法
  • 基于状态迁移分析误用检测方法
  • 基于键盘监控误用检测方法
  • 基于模型误用检测方法

四.构建基于Suricata+Splunk的IDS

Suricata

随着越来越多的服务器将网卡升级到10GB/40GB以太网,对线路上的硬件进行计算密集型的入侵检测越来越困难。suircata是一款支持IDS和IPS的多线程入侵检测系统,与传统snort相比,suricata的多线程和模块化设计上使其在效率和性能上超过了原有snort,它将 CPU 密集型的深度包检测工作并行地分配给多个并发任务来完成。这样的并行检测可以充分利用多核硬件的优势来提升入侵检测系统的吞吐量,在数据包的深度检测上效果优越。并且suricata可以兼容现有的Snort规则签名,还增加了对ipv6的支持,已经逐渐成为传统snort入侵检测系统的代替方案。

参数 Snort Suricata
安装方式 源码安装、安装包安装 源码安装
协议 TCP,UDP,ICMP,IP TCP,UDP,ICMP,IP,HTTP,FTP,TLS(SSL),SMB,DNS
规则 Snort规则,EmergingThreats规则 Snort规则,EmergingThreats规则,VRT::Snort 规则
线程 单线程 多线程
IPS支持 与iptables等联用实现 支持自动处理
IPv6支持 少数支持 全面支持
抓包方式 libpcap PF_RING, cua,netmap,af-packet
帮助资料 官网及网络上大量资料 Suricata wiki

Splunk

splunk是一款数据分析系统。它在快速收集、搜索、分析、实时获取数据方面的能力较为突出,效率高,能够处理PB级数据,并且它支持对数据源进行实时监控。支持自定义过滤规则。splunk使用简单,通过用户图形界面进行各种统计分析操作, 能够对数据进行可视化展示,形象直观。

本实验中利用splunk实时监控IDS的警报日志文件fast.log

1.安装Suricata

wiki参考文档

1.安装suricata依赖

1
2
3
4
apt-get -y install libpcre3 libpcre3-dbg libpcre3-dev \
build-essential autoconf automake libtool libpcap-dev libnet1-dev \
libyaml-0-2 libyaml-dev zlib1g zlib1g-dev libmagic-dev libcap-ng-dev \
libjansson-dev pkg-config

安装libhtp库

1
2
3
4
5
git clone  https://github.com/OISF/libhtp.git
cd libhtp/
./autogen.sh
./configure
make && sudo make install

2.下载suricata

去官网下载suricata并解压

3.编译suricata

默认模式下,Suricata以IDS模式运行,编译命令:

1
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var

如果需要 Suricata 同时运行 IDS 和 IPS,需要安装额外依赖并使用如下命令进行编译

1
2
sudo apt-get -y install libnetfilter-queue-dev libnetfilter-queue1 libnfnetlink-dev libnfnetlink0  
./configure --enable-nfqueue --prefix=/usr --sysconfdir=/etc --localstatedir=/var

4.安装suricata

1
2
3
4
make && sudo make install
sudo make install-conf # 安装默认配置
sudo make install-rules # 安装默认规则
sudo ldconfig # 让系统共享动态链接库

2.配置并使用Suricata监控安全事件

(1) 编辑配置文件

如果我们安装时使用下面的命令,会进行默认配置,我们只需要修改相关配置文件中的参数即可。如果已经使用了默认配置,请直接跳到步骤4。

1
2
sudo make install-conf  # 安装默认配置  
sudo make install-rules # 安装默认规则

如果没有安装默认配置和规则,我们需要手动进行配置。参考步骤1、2、3。

(2) 创建Suricata配置目录和日志目录

1
2
sudo mkdir /var/log/suricata
sudo mkdir /etc/suricata
把规则文件拷贝到Suricata配置目录下
1
2
3
wget http://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz
tar zxvf emerging.rules.tar.gz
sudo cp -R rules/ /etc/suricata/
把Suricata安装源文件中的suricata.yaml、classification.config、reference.config文件拷贝到Suricata的配置目录下
1
2
cd suricata
sudo cp suricata.yaml classification.config reference.config /etc/suricata/
编辑配置文件

suricata的配置文件路径是: /etc/suricata/suricata.yaml

1
sudo vim /etc/suricata/suricata.yaml

我们需要注意一下几个关键参数

HOME_NET: 它指定了Suricata 监控的本地网络,根据自己的网络情况进行修改

1
HOME_NET: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]"

EXTERNAL_NET 变量的 !$HOME_NET 代表除本地网络之外的其他网络。

**default-log-dir**:日志文件存储路径,默认是/var/log/suricata。

**outputs**:outputs选项下有很多可以输出的配置选项,包括警告、检测的数据包、产生的结果等,可以根据自己的需求进行配置。

  • fast.log:默认的警告输出文件。
  • unified2.alert:数据包输出文件,将整个数据包以二进制的方式存储到文件中。
  • http.log:HTTP日志,包含了http请求、HOST字段、URI字段和User-Agent字段。
  • Syslog:这个选项决定了是否将suricata的警告输出到syslog文件中。
  • Drop.log:当suricata工作在IPS模式下的时候,可以使用drop操作规则,这些drop掉的数据包信息就会存储在drop.log文件中

max-pending-packets: 设置suricata能同时处理的数据包数量,最少为1,最大值取决于内存的大小,更大的内存可以设置更大的值并拥有更好的性能,默认值是1024。

**default-packet-size**:对处理的每个数据包的大小进行限制。默认值是1514,也是TCP数据包的最大长度(当数据超过这个长度便会使用TCP报文重组技术)。

(3) 编辑测试规则

针对suricata的安全规则的配置,可以参考suricata配置文档

修改/etc/suricata/suricata.yaml文件,设置我们的测试规则文件my.rules

1
2
3
default-rule-path: /etc/suricata/rules
rule-files:
- my.rules

然后我们去/etc/suricata/rules目录下创建我们的自定义规则文件my.rules

在该文件中,我们写下自己的测试规则

1
2
3
alert icmp $HOME_NET any -> $EXTERNAL_NET any (msg:"TEST :ICMP PING"; itype:8; sid:20000; rev:3;)
alert tcp any any -> any 80 (msg:"http test";)
alert http any any -> any any (msg:"Filemagic jgp(1)"; flow:established; filemagic:"JPEG image data"; filestore; sid:10; rev:1;)

(4) 运行suricata进行测试

Suricata有不同的运行模式,我们可以使用如下命令查看

1
sudo suricata --list-runmodes

启动Suricata之前,强烈建议先关闭网卡的LRO/GRO功能(即网卡收包时将同一流的小包合并成大包)。这会导致Suricata处理时很容易出现丢包问题,传输速度慢。解决方法,关闭LRO/GRO功能,命令:

1
2
3
ethtool -k eth0 #查看LRO/GRO当前是否打开
ethtool -K eth0 lro off #关闭LRO
ethtool -K eth0 gro off #关闭GRO

如果看到下列警示信息,可以忽视。它说明你的网卡不支持LRO。

1
Cannot change large-receive-offload

然后我们启动suricata

1
sudo suricata -c /etc/suricata/suricata.yaml -i eth0

此时,suricata会开始监听我们的流量,如果触发了规则,会在默认日志路径/var/log/suricata/下产生警报文件fast.log

3.使用Suricata监控网络攻击

模拟网络攻击:mysql暴力破解

IDS检测规则

1
alert tcp $EXTERNAL_NET any -> $HOME_NET 3306 (msg:"MySQL Login Attack"; sid:11619; gid:3; rev:6; classtype:attempted-admin; reference:cve,2006-1518; metadata: engine shared, soid 3|11619, service mysql;)

此规则可以检测出尝试枚举mysql管理员密码的暴力破解攻击。

4.使用Splunk分析展示IDS警报

下载splunklight版

安装web环境:php+apache2

1
sudo apt-get install php7.0 libapache2-mod-php7.0 apache2

运行splunk服务

1
2
cd splunk\bin\
./splunk start

然后访问本机8080端口即可。我们可以动态监控警报文件/var/log/suricata/fast.log

  • Post title:构建基于Suricata+Splunk的IDS入侵检测系统
  • Post author:ssooking
  • Create time:2017-12-23 11:54:00
  • Post link:https://ssooking.github.io/2017/12/构建基于suricata-splunk的ids入侵检测系统/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.