入侵检测与防御——kali+CentOS 7+apache2+php5.4+mariadb
本文为入侵检测与防御课程的期末实验报告。希望自己的实验可以为后续学者做参考。
一、基础实验环境搭建
1.实验环境介绍
主机IP:192.168.3.17 kali2022.1

目标机IP:192.168.3.22 CentOS 7

其他:apache2+php5.4+mariadb

二、攻击方案设计与实施
2.1 syn flood洪水攻击
Syn Flood攻击是网络攻击的一种手段, 又称为SYN洪水、SYN洪泛,是一种典型的DoS(Denial of Service,拒绝服务)攻击(阻断服务攻击),效果就是服务器TCP连接资源耗尽,停止响应正常的TCP连接请求。
- hping3 -c 1000 -S -p 80 --flood --rand-source 192.168.3.22


被攻击后,被攻击终端CPU使用率上升,通过抓包能发现,攻击者向被攻击的主机发送大量伪造的TCP连接请求。被攻击方主机服务器的资源耗尽(CPU 满负荷或内存不足) 的攻击方式。
2.2 Smurf 攻击
攻击者尝试使用互联网控制消息协议 (ICMP) 数据包向目标服务器发起洪水攻击。攻击者使用目标设备的欺骗性 IP 地址向一个或多个计算机网络发出请求,计算机网络将响应目标服务器,因此会放大初始攻击流量并可能使目标不堪重负,使其无法访问。
- hping3 --icmp --icmptype 8 --icmpcode 0 192.168.3.255 -a 192.168.3.22 --flood



2.3 UDP 洪水攻击
UDP 洪水是一种拒绝服务攻击,攻击者将大量用户数据报协议 (UDP) 数据包发送到目标服务器,旨在让该设备的处理和响应能力无力承担。由于 UDP 洪水攻击,保护目标服务器的防火墙也可能不堪重负,导致对正常流量拒绝服务。


三、基于snort搭建IDS
3.1准备软件环境
https://sourceforge.net/projects/adodb/
https://sourceforge.net/projects/secureideas/
https://sourceforge.net/projects/libdnet/
https://www.snort.org/downloads
https://github.com/firnsy/barnyard2/
安装目录如下:

3.2安装相关依赖包
- yum install -y epel-release

-
yum install -y gcc gcc-c++ flex bison zlib-devel zlib-static libpcap pcre-devel pcre-static libpcap-devel tcpdump git libtool luajit luajit-devel openssl openssl-devel net-tools

3.3安装libdnet
- tar -zxvf libdnet-1.11.tar.gz
- cd /usr/local/src/libdnet-1.11/
- ./configure
- make && make install


3.4安装daq
- tar zxvf daq-2.0.7.tar.gz
- cd daq-2.0.7
- aclocal
- autoconf
- automake
- ./configure
- make && make install


3.5安装snort2.9.20
- tar zxvf snort-2.9.20.tar.gz
- cd snort-2.9.20
- ./configure --enable-sourcefire
- make && make install


3.6添加用户和组

3.7配置snort
- mkdir /etc/snort/
- cd /etc/snort/
- tar zxvf /usr/local/src/snortrules-snapshot-29200.tar.gz -C .

- cp /etc/snort/etc/sid-msg.map /etc/snort
- cp /usr/local/src/snort-2.9.20/etc/* .

- 查看/etc/snort 目录

- touch /etc/snort/rules/white_list.rules
- touch /etc/snort/rules/black_list.rules

- vi /etc/snort/snort.conf




完成snort.conf配置,保存退出。
3.8测试snort
测试snort分为两部分内容:snort程序启动测试和snort报警测试。
- 添加测试规则 vi /etc/snort/rules/local.rules
- alert icmp any any -> $HOME_NET any (msg:"ICMP Packet Detected";sid:1000003;rev:1;)

- 输入测试命令
snort -T -i ens33 -u snort -g snort -c /etc/snort/snort.conf

显示Snort successfully validated the configuration!后程序自动退出。
- snort报警测试
打开两个终端分别输入下面的命令启动snort
- snort -i ens33 -c /etc/snort/snort.conf -A fast

- 在另一个终端先观察

在没收到ICMP包时,系统不会报警。
开始ping Snort服务器

收到报警

snort报警测试成功。
在启动snort的终端上,输入Ctrl+C退出程序。
3.9安装配置数据库
- yum install –y mariadb-server mariadb-devel

开机启动数据库 systemctl enable mariadb.service
启动数据库 systemctl start mariadb

- 为数据库管理员root赋予密码/usr/bin/mysqladmin -u root password '123456'

为了得到数据库的模板我们需要解压barnyard2-2-1.13.tar.gz文件
- cd /usr/local/src
- tar zxvf barnyard2-2-1.13.tar.gz

- 创建Snort数据库并设定读取权限。登录数据库。
- CREATE DATABASE snort; //新建数据库snort
USE snort; - CREATE USER 'snort'@'localhost' IDENTIFIED BY '123456';
新建用户snort,访问本机数据库的密码是123456 - GRANT CREATE,SELECT,UPDATE,INSERT,DELETE ON snort.* TO snort@localhost IDENTIFIED BY '123456';
赋予名为“snort”的数据库权限,授权用户snort对数据库的操作权限. - SET PASSWORD FOR 'snort'@'localhost'=PASSWORD('123456');
为用户snort设置访问密码 - SOURCE /usr/local/src/barnyard2-2-1.13/schemas/create_mysql;
通过引入文件create_mysql来创建数据库结构
FLUSH PRIVILEGES; - 下面来查看数据库snort的表


3.10安装和配置Barnyard2
- cd /usr/local/src/barnyard2-2-1.13/
- ./autogen.sh

- ./configure --with-mysql --with-mysql-libraries=/usr/lib64/mysql

- make && make install

3.11配置barnyard2
- mkdir /var/log/barnyard2
- chown snort:snort /var/log/barnyard2
- touch /var/log/snort/barnyard2.waldo
- chown snort:snort /var/log/snort/barnyard2.waldo
- cp /usr/local/src/barnyard2-2-1.13/etc/barnyard2.conf /etc/snort

- vi /etc/snort/barnyard2.conf



配置完成,保存退出。
3.12测试banyard2
- barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort -f snort.log -w /var/log/snort/barnyard2.waldo -g snort -u snort -T


3.13安装BASE
- yum install -y httpd php php-mysql php-gd

- tar zxvf adodb-5.22.3.tar.gz -C /var/www/html/
- mv adodb5 /var/www/html/adodb
- tar zxvf base-1.4.5.tar.gz -C /var/www/html/
- mv /var/www/html/base-1.4.5/ /var/www/html/base


- vi /etc/php.ini

- chown -R apache:apache /var/www/html/
- 重启服务设置防火墙
- systemctl restart mariadb #重启MariaDB
- systemctl enable httpd.service #开机启动Http服务
- systemctl restart httpd.service 重启http
- firewall-cmd --zone=public --add-port=80/tcp

- 检查PHP环境

- 临时关闭SELinux
setenforce 0 - 设置BASE


四、验证IDS功能
4.1 snort+barnyard2测试
- 测试启动snort
- snort -q -u snort -g snort -c /etc/snort/snort.conf -i ens33 -D
- 启动barnyard2
- barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort/ -f snort.log -w /var/log/snort/barnyard2.waldo

- 观察/var/log/snort目录

- 没有ping包之前的状态。
在其他机器上ping Snort服务器。再次观察snort目录

- 观察数据库中的报警记录条数

- 这样snort.log.时间戳在存储数据包的同时,将报警存入数据库。
由此证明实验成功。
4.2 泛洪攻击检测
- Snort 规则:
- alert tcp any any -> $HOME_NET any (msg:"synflood";flags:S; threshold:type both,track by_dst,count3,seconds 10;classtype:misc-attack; sid:10000003; rev:001; GID:1; )

- Snort -A console -c /etc/snort/snort.conf -q -i ens33


五、总结
snort作为一个开源代码的入侵检测工具,在入侵检测系统开发的过程中有着重要的借鉴意义,其主要有初始化工作,解析命令行,读入规则库,生成用于检测的三维规则链表,然后循环检测。
本次实验通过对snort环境的搭建和测试,增强了自己在网络安全方面的知识并且提高了自己的技术能力。在搭建环境的过程中,尝试过snort在kali、ubuntun、centOS7、centOS6这几种系统下的实现。几乎每个平台下的搭建都有着不同的错误和困难。例如kali2022中对mysql的停用造成数据库安装接问题;centOS 7中php版本较低导致页面空白显示等等。面对这些不断出现的问题也之只能是遇见什么解决什么。也在一定程度上提高了自己的动手能力。虽然实验至此算是勉强完成,但是在搭建的过程中,我对新的snort3及其可视化工具也产生的浓厚的兴趣,将继续学习搭建更新更全面的环境。同时也将继续探索snort的其他用法。
更多推荐

所有评论(0)