入侵检测学习 Snort [一]

2018 年 9 月 17 日 黑白之道


0x01 关于Snort


业界相对比较出名年头也比较久的一款基于网络的开源入侵检测工具


不过,比较适合中小型网络 [在流量不是非常大的情况下还是很不错的选择],规则配置灵活,实战适用性相对较好


只是,实在不知道为什么要弄一头猪做logo,这文化差异大的有点儿着实让人无法理解 :)


0x02 理解snort的最基本的工作流程


内网中的数据 -> 数据嗅探[让内网中其它机器上的数据流过自己] -> 进行各种预处理[防止数据逃逸] -> 规则检测引擎 -> 处理报警/日志

                                                                  |                            |

                                                          匹配规则库  存到数据库或者写到日志文件中


0x03 模块具体作用简介


数据包嗅探,让其它机器上的指定数据包都经过自己,以便snort分析数据,同样,用的也是libpcap库,包括在其它很多linux平台嗅探工具你都能看到它的身影


预处理,包重组预处理器,主要是为了防止攻击包被拆分逃避Snort的检测,另一个是协议编码预处理器,主要负责把数据包协议解码成一个统一的格式,再丢给检测模块,最后一个是协议异常检测预处器


规则匹配检测,也就是当预处理把数据包丢过来以后,规则引擎会将这些数据包逐个和规则库进行匹配,一旦发现数据包内容与某条规则匹配,就丢给报警模块去处理


报警/日志模块,规则引擎将数据丢给报警模块以后,报警模块会根据snort事先定义好的规则动作(alert,log...)对其进行不同的处理(写到数据库或日志文件中)



0x04 Snrot 大致目录结构


/etc/snort/

├── attribute_table.dtd

├── barnyard2.conf 将报警事先插到数据库中,里面主要定义了一些日志文件位置和数据库连接信息

├── classification.config

├── etc

├── file_magic.conf

├── gen-msg.map

├── Makefile

├── Makefile.am

├── Makefile.in

├── preproc_rules

├── reference.config

├── rules snort规则库目录

├── snort.conf snort的主配置文件,关于snort工具本身的配置全在这里

├── so_rules

├── threshold.conf

└── unicode.map


0x05 环境准备,主要是所需的各类源码包及必要的依赖包


centos6.9 x_64

adodb519.tar.gz

barnyard2-1.9.tar.gz

base-1.4.5.tar.gz

daq-2.0.4.tar.gz

idsctl.zip

libdnet-1.12.tgz

libpcap-1.0.0.tar.gz

snort-2.9.7.0.tar.gz

snortrules-snapshot-2970.tar.gz


0x06 将要检测的内网卡[检测指定内网段]设为静态ip


# vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth3

HWADDR=00:0c:29:9b:51:ef

TYPE=Ethernet

UUID=effae4e2-c6e6-4bf8-b9bd-f16ebc38b733

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=none

USERCTL=no

PEERDNS=yes

IPV6INIT=no

IPADDR=192.168.1.177

NETMASK=255.255.255.0

DNS2=8.8.8.8

GATEWAY=192.168.1.1

DNS1=114.114.114.114


0x07 先yum一个简易的lamp环境,主要是为了后期在前端展示报警事件方便,所以在这里就直接提前yum一个


# yum install -y epel-release

# yum install -y gcc gcc-c++ flex bison zlib* libxml2 libpcap* pcre* tcpdump git libtool curl man make wget tree

# yum install -y mysql-server mysql-devel php-mysql php-adodb php-pear php-gd libtool php-imap php-ldap php-mbstring php-odbc php-pear php-xml php-pecl-apc httpd php php-mcrypt mcrypt libmcrypt libmcrypt-devel

# chkconfig --level 235 mysqld on

# chkconfig --level 2345 httpd on

# vi /etc/httpd/conf/httpd.conf

ServerName localhost:80

# /etc/init.d/mysqld start

# /etc/init.d/httpd start


0x08 编译安装Snort


# tar xf libdnet-1.12.tgz

# cd libdnet-1.12

# ./configure && make && make install


# tar xf libpcap-1.0.0.tar.gz

# cd libpcap-1.0.0

# ./configure && make && make install


# tar xf daq-2.0.4.tar.gz

# cd daq-2.0.4

# ./configure && make && make install


# tar xf snort-2.9.7.0.tar.gz

# cd snort-2.9.7.0

# ./configure && make && make install


# mkdir /etc/snort

# cp /root/snort-2.9.7.0/etc/* /etc/snort/

# ls /etc/snort/ && cd /etc/snort/

# tar xf /root/snortrules-snapshot-2970.tar.gz

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

# groupadd -g 5600 snort

# useradd snort -u 5600 -d /var/log/snort -s /sbin/nologin -c SNORT_IDS -g snort

# chown -R snort.snort /etc/snort/

# chown -R snort.snort /var/log/snort/

# vi /etc/snort/snort.conf

var RULE_PATH /etc/snort/rules

var SO_RULE_PATH /etc/snort/so_rules

var PREPROC_RULE_PATH /etc/snort/preproc_rules

var WHITE_LIST_PATH /etc/snort/rules

var BLACK_LIST_PATH /etc/snort/rules

config logdir:/var/log/snort

output unified2: filename snort.log, limit 128

# ln -s /usr/local/bin/snort /usr/bin/snort

# mkdir -p /usr/local/lib/snort_dynamicrules

# chown -R snort.snort /usr/local/lib/snort_dynamicrules/

# chmod -R 755 /usr/local/lib/snort_dynamicrules/


0x09 配置snort,尽量让snort以一个普通用户权限起来


0x10 先随便先添加一条规则,做下简单测试,规则的意思也很明显,对任意机器间来往的icmp进行报警


# vi /etc/snort/rules/local.rules

alert icmp any any -> $HOME_NET any (msg:"Ping test";sid:1000003;rev:1;)


0x11 编译安装 barnyard2,顺带把表结构都导进去,等会儿要往里面插各种snort数据


# tar xf barnyard2-1.9.tar.gz -C /usr/local/src/

# mysqladmin -u root password "admin"

# mysql -uroot -p

mysql> create database snort;

mysql> use snort;

mysql> create user 'snort'@'localhost' identified by 'admin';

mysql> grant create,select,update,insert,delete on snort.* to snort@localhost identified by 'admin';

mysql> set password for snort@localhost=password('admin');

mysql> source /usr/local/src/barnyard2-1.9/schemas/create_mysql;

mysql> show tables;

mysql> flush privileges;


# cd /usr/local/src/barnyard2-1.9/

# ./configure --with-mysql --with-mysql-libraries=/usr/lib64/mysql/ && make && make install

# mkdir /var/log/barnyard2

# touch /var/log/snort/barnyard2.waldo

# chown -R snort.snort /var/log/snort/barnyard2.waldo

# cp /usr/local/src/barnyard2-1.9/etc/barnyard2.conf /etc/snort/

# vi /etc/snort/barnyard2.conf 

 config logdir: /var/log/barnyard2

 config hostname:  localhost

 config interface: eth3

 config waldo_file: /var/log/snort/barnyard2.waldo

output database: log, mysql, user=snort password=admin dbname=snort host=localhost


0x12 启动snort,观察报警事件到底有没有被记录到数据库中


# unzip idsctl.zip

# ./idsctl

# ./idsctl start

# snort -q -u snort -g snort -c /etc/snort/snort.conf -i eth3 -D

# ping 192.168.1.1    随便ping,只是为了让snort捕获icmp

# mysql -u snort -p -D snort -e "select count(*) from event"

# ll /var/log/snort/


0x13 安装展示前端


# pear upgrade pear

# pear channel-update pear.php.net

# pear install Image_Graph-alpha Image_Canvas-alpha Image_Color Numbers_Roman

# tar xf adodb519.tar.gz -C /var/www/html/

# mv /var/www/html/adodb5/ /var/www/html/adodb

# tar xf 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

error_reporting = E_ALL & ~E_NOTICE

# chown -R apache.apache /var/www/html/

# chmod -R 755 /var/www/html/

# pkill snort

# /etc/init.d/mysqld restart

# /etc/init.d/httpd restart


0x14 访问前端页面进行简单配置,观察报警事件有没有被取出来,最后,实际部署成功的效果图如下


http://192.168.1.177/base/base_main.php



0x15 本次的重点只是先把平台搞起来再说,后期的重点,还是会在下面这些点上,每个点涉及到的具体的东西可能又非常的多,不是简短几句话就能说明白的,长路漫漫,还是一点一点的稳扎稳打吧


根据自己的实际需求熟练编写Snort规则

捕捉内网各种常规端口扫描特征,主要是针对各种常见的端口扫描工具标志,如,nmap,zmap,masscan,supersan...

捕捉内网各类基础服务爆破特征,主要是针对hydra,medusa...

捕捉内网web各种高危入侵特征[sql注入,xss劫持,表单爆破...]

捕捉内网各类常规嗅探行为,如,最典型的arp...

借助snort识别内网中的各类meterpreter的shell

感知内网中的各种常规脱裤行为,如,pgsql,oracle,mysql,mssql...

识别内网中的常规DDOS流量并灵活与iptables进行联动

捕捉各类常规非加密tcp远控数据特征

尝试识别捕捉各种常规流量重放攻击

深入学习理解各类入侵检测对抗手段

....


0x16 小结:


平台部署确实比较简单,基本也不存在什么技术含量,最终,关键还是看我们能不能用工具实际的干活,再牛逼的工具,不能很好的用起来,也只是摆设,这也可能是后期要重点慢慢啃的地方,还是那句话,实战为主,后期我们还会着重介绍另一款入侵检测系统,Suricata,个人觉得这个会更好,至于为什么更好,待续…


文章出处:klion's blog

原文链接:https://klionsec.github.io/2017/09/22/snortpentest/

你可能喜欢

Security Onion - 用于入侵检测Linux版

Samhain - 基于主机的入侵检测系统

Linux入侵检测基础

登录查看更多
1

相关内容

[ICML2020]层次间消息传递的分子图学习
专知会员服务
33+阅读 · 2020年6月27日
领域知识图谱构建,115页2019著作带你学习KGC(附下载)
专知会员服务
82+阅读 · 2020年1月9日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
人脸检测库:libfacedetection
Python程序员
15+阅读 · 2019年3月22日
基于Web页面验证码机制漏洞的检测
FreeBuf
7+阅读 · 2019年3月15日
用PyTorch做物体检测和追踪
AI研习社
12+阅读 · 2019年1月6日
【质量检测】机器视觉表面缺陷检测综述
产业智能官
30+阅读 · 2018年9月24日
Python | 50行代码实现人脸检测
计算机与网络安全
3+阅读 · 2018年1月23日
深度学习人脸检测和识别系统 DFace | 软件推介
开源中国
7+阅读 · 2017年12月9日
干货|用机器学习检测异常点击流
全球人工智能
6+阅读 · 2017年7月30日
简单车牌检测
计算机视觉战队
6+阅读 · 2017年6月23日
Clustered Object Detection in Aerial Images
Arxiv
5+阅读 · 2019年8月27日
Arxiv
4+阅读 · 2018年10月5日
Arxiv
12+阅读 · 2018年9月5日
Arxiv
7+阅读 · 2018年3月19日
Arxiv
6+阅读 · 2018年1月14日
VIP会员
相关VIP内容
[ICML2020]层次间消息传递的分子图学习
专知会员服务
33+阅读 · 2020年6月27日
领域知识图谱构建,115页2019著作带你学习KGC(附下载)
专知会员服务
82+阅读 · 2020年1月9日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
相关资讯
人脸检测库:libfacedetection
Python程序员
15+阅读 · 2019年3月22日
基于Web页面验证码机制漏洞的检测
FreeBuf
7+阅读 · 2019年3月15日
用PyTorch做物体检测和追踪
AI研习社
12+阅读 · 2019年1月6日
【质量检测】机器视觉表面缺陷检测综述
产业智能官
30+阅读 · 2018年9月24日
Python | 50行代码实现人脸检测
计算机与网络安全
3+阅读 · 2018年1月23日
深度学习人脸检测和识别系统 DFace | 软件推介
开源中国
7+阅读 · 2017年12月9日
干货|用机器学习检测异常点击流
全球人工智能
6+阅读 · 2017年7月30日
简单车牌检测
计算机视觉战队
6+阅读 · 2017年6月23日
相关论文
Top
微信扫码咨询专知VIP会员