XX大学XX学院

《网络攻击与防御》

实验报告

实验报告撰写要求

实验操作是教学过程中理论联系实际的重要环节,而实验报告的撰写又是知识系统化的吸收和升华过程,因此,实验报告应该体现完整性、规范性、正确性、有效性。现将实验报告撰写的有关内容说明如下:

1、 实验报告模板为电子版。

2、 下载统一的实验报告模板,学生自行完成撰写和打印。报告的首页包含本次实验的一般信息:

  组 号:例如:2-5 表示第二班第5组。

  实验日期:例如:05-10-06 表示本次实验日期。(年-月-日)……

  实验编号:例如:No.1 表示第一个实验。

  实验时间:例如:2学时 表示本次实验所用的时间。

实验报告正文部分,从六个方面(目的、内容、步骤等)反映本次实验的要点、要求以及完成过程等情况。模板已为实验报告正文设定统一格式,学生只需在相应项内填充即可。续页不再需要包含首页中的实验一般信息。

3、 实验报告正文部分具体要求如下:

一、实验目的

本次实验所涉及并要求掌握的知识点。

通过该实验可以加深理解Snort的系统架构以及工作原理,掌握Snort与Iptables联动的实现方法。

二、实验环境

实验所使用的设备名称及规格,网络管理工具简介、版本等。

服务器:snort-host( Centos6.5),IP地址: 10.1.1.12

Snort版本: 2.9.7.6(最新) Guardian版本:1.7(最新)

操作主机:host(WinXp), IP地址: 随机

测试主机:test(WinXp), IP地址: 随机

下载路径:http://tools.hetianlab.com/tools/X-Scan-v3.3-cn.rar

下载路径:http://tools.hetianlab.com/tools/Xshell.rar

图1 snort实验环境

三、实验内容与实验要求

实验内容、原理分析及具体实验要求。

实验内容、原理分析及具体实验要求。

  1. Snort简述

    Snort是一个强大的轻量级网络入侵检测系统,它能够检测到各种不同的攻击方式,对攻击进行实时报警。此外,Snort具有很好的扩展性和可移植性,并且这个软件遵循GPL,这意味着只要遵守GPL的任何组织和个人均可以自由使用这个软件。

    Snort具有实时流量分析和日志IP网络数据包的能力,能够快速地检测网络攻击,及时地发出报警。Snort的报警机制很丰富,例如:Syslog、用户指定的文件、一个Unix套接字,还有使用samba协议向Windows客户端发出WinPoup消息。利用XML插件,Snort可以使用SNML把日志存放到一个文件或者实时报警。Snort能够进行协议分析、内容的搜索/匹配。目前Snort能够分析的协议有TCP、UDP、ICMP,将来可能支持ARP、OSPF、IPX、RIP等协议,它能够检测多种方式的攻击和探测,例如:缓冲区溢出、CGI攻击、端口暴力破解、SMB探测以及web应用程序的攻击现在也已经有简单规则的支持。Snort自带的检测攻击的规则数量有限,但Snort支持用户自定义规则的加载,这对有能力的大型企业而言是个不错的IDS选择。

    Snort体系架构

    1.Snort工作原理与应用场景

    Snort是一个基于模式匹配的的网络入侵检测系统,实际上目前现在市场上的大多商业入侵检测系统都是基于模式匹配的,即将恶意行为和恶意代码预定成入侵规则特征库,然后将实际数据源于规则库的特征码进行匹配,以判断其中是否包含了入侵行为。

    IDS的应用场景一般如下图所示:

图2 IDS使用场景

Snort的大致处理流程如下图所示:

图3 snort处理网络数据包内部流程

2. Snort的主体架构

Snort系统总体上是由规则集及Snort可执行程序两大部分组成。

1)Snort规则集

Snort规则集是Snort的攻击特征库,每条规则是一条攻击标识,Snort通过它来识别攻击行为。

2)Snort可执行程序

可执行程序由4个重要的子系统构成:

数据包捕获和解码子系统、检测引擎、日志/报警子系统、预处理器。

Snort的总体结构:

图4 snort内部结构

3. Snort的插件机制

1)预处理插件

预处理插件在规则匹配之前运行,完成的功能主要为:

(1)模拟tcp、ip堆栈功能的插件,如IP碎片重组、TCP流重组插件;

(2)各种解码插件:http解码插件、unicode解码插件、rpc解码插件、Telnet解码插件等;

(3) 规则匹配无法进行攻击检测时所用的插件:端口扫描插件、spade异常入侵检测插件、bo检测插件等

2)处理插件

处理插件在规则匹配阶段的parse rule options中被调用,辅助完成基于规则的匹配库。每个规则处理函数通常对应规则选项中的一个关键字,实现对这个关键字的解释。其主要功能为:

(1)检查协议各字段,如TCPflag、ICMPtype、Fragbits、RPC、Dsize等;

(2)辅助功能,例如关闭连接、会话记录、攻击响应等

3)输出插件

输出插件在规则匹配过程中和匹配过程结束后调用,以便记录日志和告警。

4.总体流程

Snort的入侵检测流程分成两大步:

第一步是规则的解析流程,包括从规则文件中读取规则和在内存中组织规则。其过程为:

(1)读取规则文件;

(2)依次读取每条规则;

(3)解析规则;

(4)在内存中对规则进行组织,建立规则语法树;

第二步是使用这些规则进行匹配的入侵流程。其过程为对从网络上捕获的每一条数据报文和在第一步建立的规则树进行匹配,若发现存在一条规则匹配该报文,就表示检测到一个攻击,然后安装规则规定的行为进行处理;若搜索完所有的规则都没有找到匹配的规则,则视此报文正常。

Snort与Iptables的联动

  1. 概述

    为什么要让Snort与Iptables联动呢?根据前面的介绍我们已经了解了Snort的工作方式与原理,聪明的你一定发现了Snort最致命的密码——不能阻断攻击!Snort的主要作用是对整个网络起到预警作用,从它的旁路部署模式也可以看出,它并不能阻断网络里的攻击行为。谁能阻断攻击呢?——Iptable。可为什么不采用Iptables呢?因为Iptables的规则过于固定,并且Iptables并不能识别网络里的攻击行为。那能不能综合一下它们二者的优点互补对方的缺点,而达到检测到攻击即切断攻击连接这样的效果呢。答案是可以!
  2. 实现方式和实现原理

    通过前面的知识我们了解到,Snort有个插件机制提供了预处理插件和处理插件等方式。而这种插件在Snort里是支持自定义开发并加载的。因此第一种实现方式就是自定义开发插件,当检测到规则匹配时则调用远程或对应主机的防火墙,将有入侵行为的ip和端口,建立对应的一条Iptables规则丢弃这个连接、端口的数据包或将此ip的所有包都丢弃。

    相对于Snort的插件方式,第二种的实现方式非常简单且易于实现,很适合本次实验。这种方式就是利用一个简单的脚本实时读取告警日志,将记录到的Ip和端口,创建对应的一条Iptables规则,加入到远程或对应主机的防火墙规则中,也就是实现了同第一种方式相同的功能,虽然后者在处理速度上没有第一种方式及时,但整体防护能力上并未有太大什么区别。

    实现方式总结如下:

    (1).利用Snort的扩展功能,自定义开发集成插件(目前有snortsam)。

    (2).利用Snort的告警日志,自定义开发脚本。(本次实验所采用,脚本为guardian)

    实现原理大致流程图:

图5 两种实现方式流程

四、实验过程与分析

根据具体实验,记录、整理相应命令、运行结果等,包括截图和文字说明。

详细记录在实验过程中发生的故障和问题,并进行故障分析,说明故障排除的过程及方法。

  1. Snort安装与配置

    SSH登录centos6.5主机

    用户名:root

    password:123456

① 下载Xshell并接入服务器,具体操作如下图所示:

图6 下载xshell,接入服务器

2.接入服务器:

IP地址: 10.1.1.12

用户名:root

password:123456

3.安装相关环境

命令:

cd /usr/local/src/

wget http://tools.hetianlab.com/tools/snort+IPtables.tar.gz

tar zxvf snort+IPtables.tar.gz

具体操作截图如下:

图7 安装环境

由于接下来的操作步骤较多,不再给出截图,只展示操作代码:

安装libdnet

cd /usr/local/src/snort+IPtables

tar zxvf libdnet-1.12.tgz

cd libdnet-1.12

./configure --with-pic

make && make install

cd /usr/local/lib/

ldconfig -v /usr/local/lib

安装DAQ

cd /usr/local/src/snort+IPtables

tar zxvf daq-2.0.6.tar.gz

cd daq-2.0.6

./configure

make && make install

cd /usr/local/lib/

ldconfig -v /usr/local/lib

安装snort

cd /usr/local/src/snort+IPtables/

tar zxvf snort-2.9.7.6.tar.gz

cd snort-2.9.7.6

./configure -enable-sourcefire

make && make install

cd /usr/local/lib/

ldconfig -v /usr/local/lib

Snort配置

创建snort系统必要的文件夹,导入规则库,建立黑名单和白名单文件

mkdir /etc/snort

mkdir /var/log/snort

cd /etc/snort

cp /usr/local/src/snort+IPtables/snort-2.9.7.6/etc/* .

tar zxvf /usr/local/src/snort+IPtables/snortrules-snapshot-2976.tar.gz

cp ./etc/* .

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

为snort添加一个用户和组

groupadd -g 40000 snort

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

cd /etc/snort

chown -R snort.snort *

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

vi /etc/snort/snort.conf

ipvar HOME_NET 10.1.1.0/24

ipvar EXTERNAL_NET any

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

preprocessor sfportscan: proto { all } memcap { 10000000 } sense_level { low }

include $PREPROC_RULE_PATH/preprocessor.rules

include $PREPROC_RULE_PATH/decoder.rules

include $PREPROC_RULE_PATH/sensitive-data.rules

为snort的文件在另一个位置创建一个同步链接

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

修改snort及daq等相关目录和文件权限

cd /usr/local/src/snort+IPtables

chown -R snort.snort daq-2.0.6

chmod -R 700 daq-2.0.6

chown -R snort.snort snort-2.9.7.6

chmod -R 700 snort-2.9.7.6

cd /usr/local/src/

chown -R snort.snort snort_dynamicsrc

chmod -R 700 snort_dynamicsrc

cd /var/log

chown -R snort.snort snort

chmod -R 700 snort

cd /usr/local/bin

chown -R snort.snort daq-modules-config

chmod -R 700 daq-modules-config

chown -R snort.snort u2*

chmod -R 700 u2*

cd /etc

chown -R snort.snort snort

chmod -R 700 snort

配置动态规则

mkdir -p /usr/local/lib/snort_dynamicrules

cp /etc/snort/so_rules/precompiled/RHEL-6-0/x86-64/2.9/.so /usr/local/lib/snort_dynamicrules

导出动态规则文件

snort -c /etc/snort/snort.conf --dump-dynamic-rules=/etc/snort/so_rules

设定告警文件权限

touch /var/log/snort/alert

cd /var/log/snort

chown snort.snort alert

chmod 700 alert

snort -T -c /etc/snort/snort.conf -i eth0

启动snort

snort -c /etc/snort/snort.conf -i eth0

停止snort

ps -ef |grep snort

kill -9 pid号 即可结束进程

详细截图展示如下:

图8 snort环境配置

  1. 安装配置guardian

    安装配置

    cd /usr/local/src/snort+IPtables

    tar zxvf guardian-1.7.tar.gz

    cd guardian-1.7

    touch /etc/snort/guardian.ignore

    touch /etc/snort/guardian.target

    touch /var/log/snort/guardian.log

    cp guardian.pl /usr/local/bin/

    cp scripts/iptables_block.sh /usr/local/bin/guardian_block.sh

    cp scripts/iptables_unblock.sh /usr/local/bin/guardian_unblock.sh

    cp guardian.conf /etc/snort

    编辑guardian配置文件

    vi /etc/snort/guardian.conf

    Interface eth0

    LogFile /var/log/snort/guardian.log

    AlertFile /var/log/snort/alert //alert文件的位置

    IgnoreFile /etc/snort/guardian.ignore //白名单

    targetFile /etc/snort/guardian.target //黑名单

    TimeLimit 120 //阻断时间,以秒为单位

    guardian启动:

    /usr/bin/perl /usr/local/bin/guardian.pl -c /etc/snort/guardian.conf

    启动成功会出现如下示例:

Guardian 停止

ps -ef|grep guardian

kill -9 pid号即可杀死该进程

3. 联机测试

Snort与本地iptables联动

测试规则是否加载生效

vi /etc/snort/rules/local.rules

添加下面两条规则

alert tcp $HOME_NET any -> $EXTERNAL_NET any (msg:"OUT"; sid:5000005)

alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"IN"; sid:5000006)

规则说明:

告警外网和内网之间的所有tcp流量,用来测试你的snort.conf配置是否有问题

启动snort,查看alert是否有日志

snort -c /etc/snort/snort.conf -i eth0

cd /var/log/snort

tail -f alert

如果可以看到日志,则表明snort.conf配置没有问题,可以继续下面的测试,否则请检查snort.conf的配置,以及snort目录和文件权限设置。

联动测试

如果之前的测试没有问题,请将/etc/snort/rules/local.rules你所添加的两条规则删除或注释掉。

vi /etc/snort/rules/local.rules

alert tcp $HOME_NET any -> $EXTERNAL_NET any (msg:"OUT"; sid:5000005)

alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"IN"; sid:5000006)

登录另一台windows 测试主机(注意:如果用本机扫描很有可能导致snort主机无法登陆),打开浏览器,登录http://tools.hetianlab.com/tools/X-Scan-v3.3-cn.rar下载x-scan并解压,双击文件夹,使用x-scan设置参数。设置参数截图示意如下:

图9 x-scan参数设置

点击“扫描参数”按钮,将指定IP范围设置成你的snort主机ip地址,在“全局设置”的“扫描模块”中选中“全选”,“插件设置”的“SNMP相关设置”、“NETBIOS相关设置”、“漏洞检测脚本设置”均选择全部选中。

点击开始按钮,开始扫描

图10 扫描过程

观察alert是否有告警日志

cd /var/log/snort

tail -f alert



图11 检测告警日志

发现告警日志,启动guardian与iptables联动

/usr/bin/perl /usr/local/bin/guardian.pl -c /etc/snort/guardian.conf

在snort主机上执行,iptables -L即可看到新加入的规则。至此,单台防火墙联动已经成功实现。

五、实验结果总结

对实验结果进行分析,完成思考题目,总结实验的心得体会,并提出实验的改进意见。

实验结果分析:

本实验利用snort告警脚本,开发guardian脚本,实现Snort和Iptables联动,使得使用者可以识别网络中的攻击,同时使用这种方式也可以有效阻断网络攻击对于使用者的影响。

思考题:

1、 请查阅相关资料了解snortsam插件,分析并简述snortsam与guardian的优缺点。

Snort:不能阻断攻击。Snort主要起预警作用,不能阻断攻击。

Iptables:因为Iptables的规则过于固定,Iptables不能识别网络中的攻击。

2、你认为snortsam和guardian的这种联动方式有哪些弊端?

第一种实现方式使用自定义插件的方法,当检测到特定行为时调用对应的防火墙,将有入侵行为的ip和端口,建立对应的一条Iptables规则丢弃这个连接、端口的数据包或将此ip的所有包都丢弃。

相对于Snort的插件方式,第二种的实现方式非常简单且易于实现,这种方式就是利用一个简单的脚本实时读取告警日志,将记录到的Ip和端口,创建对应的一条Iptables规则,加入到远程或对应主机的防火墙规则中,后者在处理速度上不如前者,但是防护效果基本相当。

心得体会:

本次实验使得我对于snort的架构和工作原理有了基本的了解,同时也掌握了snort和iptables联动的方法。从这个实验中学习到了比课本上更加实际更加深入的知识,对于了解信息安全有重要的意义。

改进意见:

哈工大 信息安全 实验 Snort与单台防火墙联动实验的更多相关文章

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

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

  2. 哈工大 信息安全实验 XSS跨站脚本攻击原理与实践

    XX大学XX学院 <网络攻击与防御> 实验报告 实验报告撰写要求 实验操作是教学过程中理论联系实际的重要环节,而实验报告的撰写又是知识系统化的吸收和升华过程,因此,实验报告应该体现完整性. ...

  3. 实验 snort安装配置与规则编写

    1 实验目的 在linux或windows任意一个平台下完成snort的安装,使snort工作在NIDS模式下,并编写符合相关情景要求的snort规则. 2 实验环境 物理机:windows 8.1 ...

  4. 单台机器安装zookeeper

    先给一堆学习文档,方便以后查看 官网文档地址大全: OverView(概述) http://zookeeper.apache.org/doc/r3.4.6/zookeeperOver.html Get ...

  5. iptables--简单的防火墙

    iptables--简单的防火墙 如果你执行iptables --list你将看到防火墙上的可用规则.下例说明当前系统没有定义防火墙,你可以看到,它显示了默认的filter表,以及表内默认的input ...

  6. 详解eNSP下的单臂路由模拟实验配置

    不同VLAN之间的通信可以通过两种方式:单臂路由和三层交换机.其中,单臂路由是通过路由子接口,交换机的某个端口以trunk的方式与路由器的某个端口相连,同时路由器的链接端口配置子接口,配置子接口承载的 ...

  7. Memcached解决单台服务器故障问题

    <beitmemcached> <add key="name1" value="server1:port" /> <add key ...

  8. 不要将缓存服务器与Tomcat放在单台机器上,否则出现竞争内存问题

    缓存分为本地缓存和远程分布式缓存,本地缓存访问速度更快但缓存数据量有限,同时存在与应用程序争用内存的情况. 1.不要将缓存服务器与Tomcat放在单台机器上,否则出现竞争内存问题 2.不要将缓存服务器 ...

  9. weblogic11g 安装集群 —— win2003 系统、单台主机

    weblogic11g 安装集群 —— win2003 系统.单台主机 注意:此为weblogic11g  在win2003系统下(一台主机)的安装集群,linux.hpux.aix及多个主机下原理一 ...

随机推荐

  1. CSS之 sass、less、stylus 预处理器的使用方式

    更详细区别参考文档:https://blog.csdn.net/pedrojuliet/article/details/72887490 使用变量: sass:  使用 $ 符号定义变量,如: $ba ...

  2. Linux 安装和 连接xshell

    一.介绍和安装 /*一.linux:? 为什么要学习它. 常见的操作系统? 1.windows, linux,mac 使用命令行进行操作 Windows cmd Linux 和Mac 中的命令行是 s ...

  3. X000010

    P1829 [国家集训队]Crash的数字表格 / JZPTAB 题意:求 \({\rm S}(n,m)=\sum\limits_{i=1}^n\sum\limits_{j=1}^m{\rm lcm} ...

  4. 为什么C语言Scanf函数对字符串不要加 取地址运算符&

    原文1:http://www.360doc.com/content/16/0515/11/19455598_559288667.shtml 原文2:https://zhidao.baidu.com/q ...

  5. 电脑预装Office2016打开Word时点击保存弹出“word无法启动转换器RECOVR32.CNV”对话框问题的修复方法

    感谢大佬:https://blog.csdn.net/qq_41969790/article/details/85161701 1.问题描述:电脑预装的Office2016,家庭和学生版正版.每次打开 ...

  6. 在zabbix中实现发送带有图片的邮件和微信告警

    1 python实现在4.2版本zabbix发送带有图片的报警邮件 我们通常收到的报警,都是文字,是把动作中的消息内容当成了正文参数传给脚本,然后邮件或者微信进行接收,往往只能看到当前值,无法直观的获 ...

  7. CSS快速入门(四)

    目录 CSS快速入门(四) 浮动 float属性 clear属性 浮动解决的问题及其影响 解决父标签塌陷的方法 浮动案例 定位 什么是脱离文档流 定位的两种方法 position定位 static定位 ...

  8. 【Gym100837F】Controlled Tournament(状压Dp 搜索剪枝)

    题目链接 大意 现有\(N\)个人要打比赛,知道任意两个人间打比赛的胜负关系. 要求在 深度最小 的情况下,根为\(M\)的 竞赛树 的个数. 满足\(1\le M\le N\le 16\) 思路 虑 ...

  9. 带你十天轻松搞定 Go 微服务系列(九、链路追踪)

    序言 我们通过一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下: 环境搭建 服务拆分 用户服务 产品服务 订单服务 支付服务 RPC 服务 Auth 验证 ...

  10. Java执行cmd命令、bat脚本、linux命令,shell脚本等

    1.Windows下执行cmd命令 如复制 D:\tmp\my.txt 到D:\tmp\my_by_only_cmd.txt 现文件如图示: 执行代码: private static void run ...