0x01 入侵检测技术

现如今,一台普通的计算机是以安装防火墙的方式来进行访问规则的设置达到防御目的,而对于企业网络来说,这是远远不够的。当入侵者成功地越过防火墙之后,就等于突破了网络安全的第一道防线,这时候如果没有相应的入侵检测系统,将任由入侵者攻击网络。因此,如何通过设计检测系统来提高网络安全就是当今一个研究热点。

那么什么是入侵检测呢?接下来介绍几个基本概念。

IDS(旁路部署)

IDS是英文“Intrusion Detection Systems”的缩写,即“入侵检测系统”。它依照一定的安全策略,通过软、硬件,对网络、系统的运行状况进行监视,尽可能发现各种攻击企图、攻击行为或者攻击结果,以保证网络系统资源的机密性、完整性和可用性。做一个形象的比喻:假如防火墙是一幢大楼的门锁,那么IDS就是这幢大楼里的监视系统。一旦小偷爬窗进入大楼,或内部人员有越界行为,只有实时监视系统才能发现情况并发出警告。
与防火墙不同的是,IDS入侵检测系统是一个旁路监听设备,没有也不需要跨接在任何链路上,无须网络流量流经它便可以工作。因此,对IDS的部署的唯一要求是:IDS应当挂接在所有所关注的流量都必须流经的链路上。在这里,“所关注流量”指的是来自高危网络区域的访问流量和需要进行统计、监视的网络报文。
IDS在交换式网络中的位置一般选择为:尽可能靠近攻击源、尽可能靠近受保护资源。如:

  1. 服务器区域的交换机上;
  2. Internet接入路由器之后的第一台交换机上;
  3. 重点保护网段的局域网交换机上;

IPS(串行部署)

IPS系统是电脑网络安全设施,是对防病毒软件和防火墙的补充。它是一部能够监视网络或网络设备的网络资料传输行为的计算机网络安全设备,能够即时的中断、调整或隔离一些不正常或是具有伤害性的网络资料传输行为。
对于部署在数据转发路径上的IPS,可以根据预先设定的安全策略,对流经的每个报文进行深度检测(协议分析跟踪、特征匹配、流量统计分析、事件关联分析等),如果一旦发现隐藏于其中网络攻击,可以根据该攻击的威胁级别立即采取抵御措施,这些措施包括(按照处理力度):向管理中心告警;丢弃该报文;切断此次应用会话;切断此次TCP连接。
办公网中,需要在以下区域部署IPS:

  1. 办公网与外部网络的连接部位(入口/出口);
  2. 重要服务器集群前端;
  3. 办公网内部接入层;
  4. 至于其它区域,可以根据实际情况与重要程度,酌情部署;

二者有什么区别呢?

A、IPS对于初始者来说,是位于防火墙和网络设备之间的设备。这样,如果检测到攻击,IPS会在这种攻击扩散到网络的其它地方之前阻止这个恶意的通信。而IDS只是存在于你的网络之外起到报警的作用,而不是在你的网络前面起到防御的作用。

B、IPS具有检测已知和未知攻击并具有成功防止攻击的能力而IDS没有

C、IDS的局限性是不能反击网络攻击,因为IDS传感器基于数据包嗅探技术,只能眼睁睁地看着网络信息流过。IPS可执行IDS相同的分析,因为他们可以插入网内,装在网络组件之间,而且他们可以阻止恶意活动

0x02 IDS的分类

按入侵检测的手段,IDS的入侵检测模型可分为基于网络和基于主机两种。

  • 基于主机的 IDS 基于主机的入侵检测,不能够在攻击发生的时候及时捕捉到攻击信息,因为这类模型检测的对象是系统的日志以及审计记录等,这种数据并不具备实时性,这些信息的生成发生在入侵之后,所以不能够主动获取到攻击前或者攻击时的信息,本质上这类IDS管理系统更像防护软件。
  • 基于网络的 IDS NIDS一般部署在系统防火墙之后,作为防火墙被突破后下一道安全防护措施。它的原理是对数据包的分析,通过分析结果判断是否存在网络攻击等行为。

本文主要分析NIDS,并采用操作系统:ubuntu 18.04

0x03 入侵检测平台的搭建(Do it)

安装 LAMP

1.安装 Apache2

apt install -y apache2

2.安装 MySQL

apt install -y mysql-server libmysqlclient-dev mysql-client autoconf libtool

3.安装 PHP5 及插件

sudo add-repository ppa:ondrej/php
sudo apt-get update -y
sudo apt-get install -y libapache2-mod-php5.6 php5.6 php5.6-common php5.6-gd php5.6-cli php5.6-xml php5.6-mysql
sudo apt-get install -y php-pear libphp-adodb

4.测试 php

vim /var/www/html/info.php

<?php
phpinfo();
?>

5.浏览 http://IP/info.php ,显示 phpinfo 页面,说明 PHP 正常工作
phpinfo页面

安装 snort

1.安装 DAQ(数据采集)

#安装 Flex 依赖
sudo apt-get install -y flex
#安装 Bison 依赖
sudo apt-get install -y bison
#安装 libpcap-dev (version >= 1.0.0)
sudo apt-get install -y libpcap-dev

#解压编译
tar -zxvf daq-2.0.7.tar.gz
cd daq-2.0.7/
./configure 
make
make install

DAQ 源码包下载
官方:https://www.snort.org/downloads/snort/daq-2.0.7.tar.gz
本站:https://resource.if010.com/ids/daq-2.0.7.tar.gz

2.安装 Snort,解压编译

#安装依赖库
sudo apt-get install -y libpcre3-dev
sudo apt-get install -y libdumbnet-dev
sudo apt-get install -y liblua5.2-dev
sudo apt-get install -y libnghttp2-dev

#解压编译
tar -zxvf snort-2.9.16.tar.gz
./configure --enable-sourcefire --disable-open-appid
make
make install

Snort 源码包下载
官方:https://www.snort.org/downloads/snort/snort-2.9.16.tar.gz
本站:https://resource.if010.com/ids/snort-2.9.16.tar.gz

3、测试 Snort 是否安装成功snort -V

   ,,_     -*> Snort! <*-
  o"  )~   Version 2.9.16 GRE (Build 118) 
   ''''    By Martin Roesch & The Snort Team: http://www.snort.org/contact#team
           Copyright (C) 2014-2020 Cisco and/or its affiliates. All rights reserved.
           Copyright (C) 1998-2013 Sourcefire, Inc., et al.
           Using libpcap version 1.8.1
           Using PCRE version: 8.43 2019-02-23
           Using ZLIB version: 1.2.11

4.配置用户和目录

#创建用户和组
sudo groupadd snort
sudo useradd snort -r -s /sbin/nologin -c SNORT_IDS -g snort

#创建 Snort 目录
sudo mkdir /etc/snort
sudo mkdir /etc/snort/rules
sudo mkdir /etc/snort/rules/iplists
sudo mkdir /etc/snort/preproc_rules
sudo mkdir /usr/local/lib/snort_dynamicrules
sudo mkdir /etc/snort/so_rules

#创建存储规则的文件
sudo touch /etc/snort/rules/iplists/black_list.rules
sudo touch /etc/snort/rules/iplists/white_list.rules
sudo touch /etc/snort/rules/local.rules

#创建日志目录
sudo mkdir /var/log/snort
sudo mkdir /var/log/snort/archived_logs

#修改文件权限
sudo chmod -R 5775 /etc/snort
sudo chmod -R 5775 /var/log/snort
sudo chmod -R 5775 /var/log/snort/archived_logs
sudo chmod -R 5775 /etc/snort/so_rules
sudo chmod -R 5775 /usr/local/lib/snort_dynamicrules

#修改文件宿主
sudo chown -R snort:snort /etc/snort
sudo chown -R snort:snort /var/log/snort
sudo chown -R snort:snort /usr/local/lib/snort_dynamicrules
 
#拷贝辅助配置文件
cd snort-2.9.16/etc/
sudo cp *.conf* /etc/snort
sudo cp *.map /etc/snort
sudo cp *.dtd /etc/snort

cd snort-2.9.16/src/dynamic-preprocessors/build/usr/local/lib/snort_dynamicpreprocessor/
sudo cp * /usr/local/lib/snort_dynamicpreprocessor/

5.修改配置文件

vim /etc/snort/snort.conf

# Setup the network addresses you are protecting
# 修改为本机的内部网络
ipvar HOME_NET 192.168.0.0/24

# Path to your rules files (this can be a relative path)
# Note for Windows users:  You are advised to make this an absolute path,
# such as:  c:\snort\rules
# 设置配置文件路径
var RULE_PATH /etc/snort/rules
var SO_RULE_PATH /etc/snort/so_rules
var PREPROC_RULE_PATH /etc/snort/preproc_rules

# If you are using reputation preprocessor set these
# Currently there is a bug with relative paths, they are relative to where snort is
# not relative to snort.conf like the above variables
# This is completely inconsistent with how other vars work, BUG 89986
# Set the absolute path appropriately
# 设置配置文件路径
var WHITE_LIST_PATH /etc/snort/rules/iplists
var BLACK_LIST_PATH /etc/snort/rules/iplists

# unified2 
# Recommended for most installs
# output unified2: filename merged.log, limit 128, nostamp, mpls_event_types, vlan_event_types
# 添加内容
output unified2: filename snort.u2, limit 128

# site specific rules
# 启用local.rules文件,其后面的所有 include 规则均注释
include $RULE_PATH/local.rules

6.添加规则(可以下载官方的或是别人的,如果有技术,你也可以自己定义)

#解压规则包并移动
tar -zxvf community-rules.tar.gz
cp community-rules/* /etc/snort/rules/

#在规则中添加一条对 ICMP包 检测的规则,以便测试
sudo vim /etc/snort/rules/local.rules
alert icmp any any -> $HOME_NET any (msg:"ICMP Test detected !!!"; classtype:icmp-event; sid:10000001; rev:001; GID:1;)

#设置 sid 对应信息,添加 sid-msg 文件
sudo touch /etc/snort/sid-msg.map
sudo vim /etc/snort/sid-msg.map 
1 || 10000001 || 001 |icmp-event || 0 || ICMP Test detected || url,tools.ietf.org/html/rfc792

检查规则: snort -T -c /etc/snort/snort.conf

检查结果

Rules 规则下载
官方:https://www.snort.org/downloads/community/community-rules.tar.gz
本站:https://resource.if010.com/ids/community-rules.tar.gz

安装 Barnyard2 (作为外部代理将 snort 报警输出到 Barnyard2)

1.安装 Barnyard2,解压编译

#解压并编译
tar zxvf barnyard2-2-1.13.tar.gz 
cd barnyard2-2-1.13/
autoreconf -fvi -I ./
./configure --with-mysql --with-mysql-libraries=/usr/lib/x86_64-linux-gnu
make
make install

Barnyard2 源码下载
官方:https://github.com/firnsy/barnyard2/archive/v2-1.13/barnyard2-2-1.13.tar.gz
本站:https://resource.if010.com/ids/barnyard2-2-1.13.tar.gz

2.测试barnyard2 -V

  ______   -*> Barnyard2 <*-
 / ,,_  \  Version 2.1.13 (Build 327)
 |o"  )~|  By Ian Firns (SecurixLive): http://www.securixlive.com/
 + '''' +  (C) Copyright 2008-2013 Ian Firns <firnsy@securixlive.com>
  1. 设置配置文件

    sudo cp barnyard2-2-1.13/etc/barnyard2.conf /etc/snort/
    sudo mkdir /var/log/barnyard2
    sudo chown snort.snort /var/log/barnyard2
    sudo touch /var/log/snort/barnyard2.waldo
    sudo chown snort.snort /var/log/snort/barnyard2.waldo

4.配置数据库

mysql -u root
mysql> create database snort;
mysql> use snort;
mysql> source /opt/barnyard2-2-1.13/schemas/create_mysql;
mysql> create user 'snort'@'localhost' identified by '123456';
mysql> grant create,insert,select,delete,update on snort.* to 'snort'@'localhost';
mysql> exit

5.添加数据库配置

#在末尾处添加数据库配置
vim /etc/snort/barnyard2.conf
output database: log, mysql, user=snort password=123456 dbname=snort host=localhost sensor name=sensor01

#修改 barnyard2.conf 的权限,防止被修改
sudo chmod 644 /etc/snort/barnyard2.conf

安装 Base (数据库信息可视化)

1.安装 ADOdb

#解压并移动
sudo tar zxvf adodb-5.20.14.tar.gz -C /var/www/html
sudo mv /var/www/html/adodb5 /var/www/html/adodb

ADOdb 源码下载:https://resource.if010.com/ids/adodb-5.20.14.tar.gz

2.安装 Base

#解压并移动
sudo tar zxvf base-1.4.5.tar.gz -C /var/www/html
sudo mv /var/www/html/base-1.4.5 /var/www/html/base

Base 源码下载:https://resource.if010.com/ids/base-1.4.5.tar.gz

3.配置并重新启动Apache

#修改 /etc/php/5.6/apache2/php.ini

; Common Values:
;   E_ALL (Show all errors, warnings and notices including coding standards.)
;   E_ALL & ~E_NOTICE  (Show all errors, except for notices)
;   E_ALL & ~E_NOTICE & ~E_STRICT  (Show all errors, except for notices and coding standards warnings.)
;   E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR  (Show only errors)
; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
; Development Value: E_ALL
; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT
; http://php.net/error-reporting
error_reporting = E_ALL & ~E_NOTICE

#重启 apache2 使配置生效
sudo /etc/init.d/apache2 restart

#设置目录权限
chown -R root:root /var/www/html
chmod 755 /var/www/html/adodb

4.打开 http://IP/base/setup/index.php 安装 Base
安装 Base 界面

设置页面中,最好每一项都为绿色,表示通过。这里显示 Web 服务器对 BASE 的安装目录不可写。按照提示,可以在设置完成后创建 base_conf.php。
点击 Continue,跟着导引一步步完成设置。

第 1 步:选择语言 simplified_chinese ,填写 ADOdb 所在目录 /var/www/html/adodb 。
第 2 步:填入数据库的信息,按之前配置的信息填即可(Archive 数据库的信息可以不填)。
第 3 步:填入管理账号:snort,密码:123456。
第 4 步:创建数据表。
第 5 步:提示将显示的信息复制到 /var/www/html/base/base_conf.php 中。

完成设置后,显示如下页面,代表 BASE 安装成功,可以看到 MySQL 中的数据。

Base 界面

0x04 平台演示

1.关闭防火墙并查看防火墙状态

root@IDS_Test:~# ufw disable
Firewall stopped and disabled on system startup

root@IDS_Test:~# ufw status
Status: inactive

2.运行snort对于主机网卡进行监听 (可以使用 nohup 放后台运行)

sudo snort -q -u snort -g snort -c /etc/snort/snort.conf -i ens3

3.开启barnyard2外部代理将snort中的报警输出到Barnyard2,并设置 barnyard2.waldo为书签

sudo barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort -f snort.u2 -w /var/log/snort/barnyard2.waldo -g snort -u snort

4.用攻击机ping IDS所在的主机IP

5.可以看到终端中已经显示出ping命令的告警信息
告警信息

6.这时访问入侵检测平台IDS,它已经将我们的ping命令的alert信息显示在平台的可视化窗口
可视化窗口详情

最后修改:2022 年 04 月 26 日
-