一.什么是IDS和IPS?

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

IPS(Intrusion Prevention System):入侵防御系统,除了具有IDS的监控检测功能之外,可以深度感知检测数据流量,对恶意报文进行丢弃,以阻止这些异常的或是具有伤害性的网络行为。

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

IPS入侵防御系统,是在IDS入侵检测系统的基础上,增加了事件处理以及安全防护功能,能够主动对安全事件进行响应。

二.IDS/IPS的功能及分类

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

按照数据来源分类

  • 基于网络的入侵检测系统(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

suricatawiki参考文档

1.安装suricata依赖

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库

git clone  https://github.com/OISF/libhtp.git
cd libhtp/
./autogen.sh
./configure
make && sudo make install

2.下载suricata

去官网下载suricata并解压

3.编译suricata

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

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

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

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

4.安装suricata

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

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

编辑配置文件

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

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

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

创建Suricata配置目录和日志目录
sudo mkdir /var/log/suricata
sudo mkdir /etc/suricata
把规则文件拷贝到Suricata配置目录下
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的配置目录下
cd suricata
sudo cp suricata.yaml classification.config reference.config /etc/suricata/
编辑配置文件

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

sudo vim /etc/suricata/suricata.yaml

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

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

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报文重组技术)。

编辑测试规则

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

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

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

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

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

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;)

运行suricata进行测试

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

sudo suricata --list-runmodes

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

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

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

Cannot change large-receive-offload

然后我们启动suricata

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

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

使用Suricata监控网络攻击

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

IDS检测规则

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管理员密码的暴力破解攻击。

使用Splunk分析展示IDS警报

下载splunklight版

安装web环境:php+apache2

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

运行splunk服务

cd splunk\bin\
./splunk start

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

构建基于Suricata+Splunk的IDS入侵检测系统的更多相关文章

  1. IDS入侵检测系统

    目录 IDS入侵检测系统 入侵检测系统的作用 入侵检测系统功能 入侵检测系统的分类 入侵检测系统的架构 入侵检测工作过程 数据检测技术 误用检测 异常检测 IDS的部署 基于网络的IDS 基于主机的I ...

  2. [IDS]CentOS6.6下搭建基于snort+barnyard2+base的入侵检测系统,超详细!!!

    最详细的CentOS6.6下搭建基于snort+barnyard2+base的入侵检测系统免责声明一.如果因为使用本文档照成损失(系统崩溃.数据丢失等),作者不承担任何责任.二.本文档只是个人使用本文 ...

  3. Graylog2进阶 打造基于Nginx日志的Web入侵检测分析系统

    对于大多数互联网公司,基于日志分析的WEB入侵检测分析是不可或缺的. 那么今天我就给大家讲一讲如何用graylog的extractor来实现这一功能. 首先要找一些能够识别的带有攻击行为的关键字作为匹 ...

  4. 搭建开源入侵检测系统Snort并实现与防火墙联动

    Snort作为一款优秀的开源主机入侵检测系统,在windows和Linux平台上均可安装运行.BT5作为曾经的一款经典的渗透神器,基于 Ubuntu,里面已经预装很多的应用,比如Mysql.Apach ...

  5. 开源入侵检测系统OSSEC搭建之一:服务端安装

    OSSEC是一款开源的多平台的入侵检测系统,可以运行于Windows, Linux, OpenBSD/FreeBSD, 以及 MacOS等操作系统中.主要功能有日志分析.完整性检查.rootkit检测 ...

  6. Snort 入侵检测系统

    Snort 入侵检测系统 一.实验目的 1.掌握snort IDS工作原理 2.应用snort 三种方式工作 二.实验环境 系统环境:Windows环境, kali环境 三.实验原理 1.snort ...

  7. 开源入侵检测系统OSSEC搭建之二:客户端安装

    上一篇文章中已经将OSSEC服务端的安装以及客户端的Key导出操作做了解说,接下来在另一台虚拟机中安装客户端,与安装服务端类似同样需要安装ossec,步骤如下. 一.下载ossec-hids-2.8. ...

  8. 机器学习在入侵检测方面的应用 - 基于ADFA-LD训练集训练入侵检测判别模型

    1. ADFA-LD数据集简介 ADFA-LD数据集是澳大利亚国防学院对外发布的一套主机级入侵检测数据集合,包括Linux和Windows,是一个包含了入侵事件的系统调用syscall序列的数据集(以 ...

  9. SNORT入侵检测系统

    SNORT入侵检测系统 YxWa · 2015/10/09 10:38 0x00 一条简单的规则 alert tcp 202.110.8.1 any -> 122.111.90.8 80 (ms ...

随机推荐

  1. 测试中,重现偶发的BUG问题。

    1.严格按用例执行: 2.如果是作随机测试时,把测试步骤的点进行速记; 3.偶发BUG一般都是严重的,保留现场,让开发人员一起分析留下的现场(如数据的变化,界面窗口的变化等,找出问题的引子,那怕是千丝 ...

  2. Android:ViewGroup和View的Touch事件

    Android中ViewGroup和View中的Touch事件传递机制分析 关键字:GroupView:View:Touch事件 基础知识: onInterceptTouchEvent():在View ...

  3. 华容道 [NOIP 2013]

    Describltion 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少需要多少时间. 小 ...

  4. MyBatis 作用域(Scope)和生命周期

    SqlSessionFactoryBuilder SqlSessionFactoryBuilder的作用是创建SqlSessionFactory.一旦创建了SqlSessionFactory,就不再需 ...

  5. phpmailer发送邮件

    phpmailer发送邮件 PHP内置的mail函数使用起来不够方便,另外受其他语言的影响,博主更偏好面向对象的包管理模式,因此phpmailer成为了我用PHP发送邮件的首选,这里分享给大家. 库导 ...

  6. 深入理解JVM(1)——JVM内存模型

    Java虚拟机的内存空间分为五个部分,分别是: 程序计数器: Java虚拟机栈 本地方法栈 堆 方法区 接下来对这五部分分别进行详细的介绍 1.程序计数器: a)什么是程序计数器:程序计数器是内存中的 ...

  7. linux 下通过xhost进入图形界面,经常会出现报错“unable to open display”

    linux 下通过xhost进入图形界面,经常会出现报错“unable to  open display” linux下的操作步骤如下: [root@localhost ~]# vncserver N ...

  8. HTTP协议内容1

    一.请求协议(浏览器---àserver) 格式: (1)    请求首行 ://请求方式 请求路径 协议和版本 例如:GET /index.html HTTP/1.1 (2)    请求头信息:// ...

  9. JAVA自学笔记21

    JAVA自学笔记21 1.转换流 由于字节流操作中文不是非常方便,因此java提供了转换流 字符流=字节流+编码表 1)编码表 由字符及其对应的数值组成的一张表 图解: 2)String类的编码和解码 ...

  10. Unity中的定时器与延时器

    JavaScript中的定时器与延时器,分别是 setInterval.setTimeout,对应的清理函数是:clearInterval.clearTimeout. 而在Unity中,则分别是:In ...