20199313 2019-2020-2 《网络攻防实践》第六周作业
20199313 2019-2020-2 《网络攻防实践》第六周作业
本博客属于课程:《网络攻防实践》
本次作业:《第六周作业》
我在这个课程的目标:掌握知识与技能,增强能力和本领,提高悟性和水平。
一、防火墙
1.iptables和netfilter
iptables其实并不是防火墙本体,它其实是防火墙的客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的“安全框架”中,这个“安全框架”才是真正的防火墙,这个框架的名字叫做netfilter。
netfilter位于内核空间之中,是防火墙真正的安全框架,对比之下,iptables则类似linux的bash一样,是一个命令行工具,位于用户控件,我们用这个工具操作真正的安全框架netfilter。
netfilter和iptables共同组成了Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是一款免费软件,但是其功能足以媲美昂贵的商业防火墙。在Linux操作系统核心内部的netfilter作为一个数据包处理模块,它具有很多功能,如:
- 封包过滤
- 封包重定向
- 网络地址组转换(NAT)
- 数据包内容修改
总体上,在用户界面下iptables就成为了人们所树熟知的Linux防火墙。
关于iptables有一篇文章写得很好,在此不过多赘述,详情参照:iptables详解
2.UFW
现如今,我们打开我们的ubantu虚拟机,我们会发现我们所直接面对的并非书本上写到的iptables,而是一个明儿UFW的防火墙,那么UFW又是什么呢?
刚才我们提到了iptables和netfilter到关系,当数据包到达您的计算机时,将根据通过iptables提供给它的规则,将其移交给netfilter子系统进行接受,处理或拒绝。因此,iptables是管理防火墙所需的全部(如果您熟悉的话)。但是,有许多前端可以简化任务。
UFW又是什么呢?
UFW(非复杂防火墙)是iptables的前端,是Ubuntu默认防火墙的配置工具。特别适合于基于主机的防火墙。ufw的开发旨在简化iptables防火墙的配置,它提供了一种用户友好的方式来创建基于IPv4或IPv6主机的防火墙。默认情况下,UFW被禁用。UFW是专为Ubuntu开发的(但在其他发行版中可用),并且也可以从终端进行配置。
Gufw是UFW的图形前端,建议初学者使用。
UFW在Ubuntu 8.04 LTS(Hardy Heron)中引入,默认情况下在8.04 LTS之后的所有Ubuntu安装中都可以使用。
调控
- 启用UFW
要使用默认规则集打开UFW:
sudo ufw enable
要检查UFW的状态:
sudo ufw status verbose
输出应如下所示:
youruser@yourcomputer:~$ sudo ufw status verbose [sudo] password for youruser: Status: active Logging: on (low) Default: deny (incoming), allow (outgoing) New profiles: skip youruser@yourcomputer:~$
请注意,默认情况下,拒绝将应用于传入。有一些例外,可以在此命令的输出中找到:
sudo ufw show raw
您还可以读取/ etc / ufw中的rules文件(名称以.rules结尾的文件)。
- 禁用UFW
要禁用ufw,请使用:
sudo ufw disable
3.过滤ping
我们在默认情况下,UFW允许ping请求,保留(icmp)ping请求可以诊断网络问题,反而使用隐秘的安全性对于现代解密器脚本可能几乎没有实际好处。
为了禁用ping(icmp)请求,您需要编辑/etc/ufw/before.rules文件中的以下几行,将ACCEPT改为DROP:
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-input -p icmp --icmp-type source-quench -j ACCEPT
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
有好几类类似上面的代码,但是他们都是有区分的,我们需要修改的是Output分类下单代码:
Input: 就是复接入本机地址的数据,说白了就是设置别人可以访问我的那些端口的链。举一个例子:本机开启了ftp服务,有一个客户端连接下载制ftp资料,那么这个连接在Input链可以进行控制。
Output:就是从本机出去的数据,就是允许本机出去的端口。例如我可以在Output链设置我可以访问那些地址和那些端口。
Forward:是转发链。如果你的机器处于网zhidao关地址,那么你可以代理内部网络的机器上Internet的参数就在这里设置
修改过UFW的参数后,使用命令sudo ufw reload
重启防火墙以重新加载设置参数(切勿忘记)。此时我们再ping虚拟机就已经不通了。
4.端口和IP过滤
我们只需要在bash上进行操作即可,不用像上面那样修改规则文件。
允许特定端口和IP访问的语句:
sudo ufw allow from <target> to <destination> port <port number> proto <protocol name>
通过特定的端口禁止特定IP访问的语句:
sudo ufw deny from <ip address> to <protocol> port <port number>
在正常情况下我们可以通过23号端口通过telnet访问ubantu
但我们可以通过防火墙设置,仅允许特定IP访问特定端口(下图1)。
我们使用命令将默认模式设置为deny(拒绝)sudo ufw default deny
,则我们的攻击机使用telnet访问靶机时,请求会被防火墙过滤掉,攻击机收不到反馈,就会一直处于等待状态直到超时(下图2)。
我们设置允许kali虚拟机的IP地址访问23号端口,sudo ufw allow from 192.168.220.4 to any port 23
(每次设定规则都别忘了重启防火墙来更新规则列表 sudo ufw reload
)然后我们就发现kali虚拟机又可以登录了。
同样我们也可以在允许语句的sudo ufw allow from <target> to <destination> port <port number> proto <protocol name>
例如我们仅开放23号端口的UDP,telnet依然无法访问,但如果我们仅开放了TCP协议,则telnet可以成功访问。
二、Snort
1.基于特征的入侵检测技术
从技术上,入侵检测也可分为两类:一种基于特征(误用检测)(signature-based),另一种基于异常情况(anomaly-based)。
对于基于标识的检测技术来说,首先要定义违背安全策略的事件的特征,如网络数据包的某些头信息。检测主要判别这类特征是否在所收集到的数据中出现。
而基于异常的检测技术则是先定义一组系统“正常”情况的数值,如CPU利用率、内存利用率、文件校验和等(这类数据可以人为定义,也可以通过观察系统、并用统计的办法得出),然后将系统运行时的数值与所定义的“正常”情况比较,得出是否有被攻击的迹象。这种检测方式的核心在于如何定义所谓的“正常”情况。
2.Snort简介
snort有三种工作模式:嗅探器、数据包记录器、网络入侵检测系统。嗅探器模式仅仅是从网络上读取数据包并作为连续不断的流显示在终端上。数据包记录器模式把数据包记录到硬盘上。网路入侵检测模式是最复杂的,而且是可配置的。我们可以让snort分析网络数据流以匹配用户定义的一些规则,并根据检测结果采取一定的动作。
大多数snort规则都写在一个单行上,或者在多行之间的行尾用/分隔。Snort规则被分成两个逻辑部分:规则头和规则选项。规则头包含规则的动作,协议,源和目标ip地址与网络掩码,以及源和目标端口信息;规则选项部分包含报警消息内容和要检查的包的具体部分。
以一个规则范例来介绍:
alert tcp any any -> 192.168.220.0/24 111 (content:"|00 01 86 a5|"; msg: "mountd access"😉
第一个括号前的部分是规则头(rule header),alert tcp any any表示:警报条件-任意源IP从任意端口发往192.168.220.0/24子网的111端口的tcp报文
包含的括号内的部分是规则选项(rule options),content:"|00 01 86 a5|"表示匹配的字符串为00 01 86 a5。msg: "mountd access"则表示报警信息为mountd access
规则选项部分中冒号前的单词称为选项关键字(option keywords)。
注意,不是所有规则都必须包含规则选项部分,选项部分只是为了使对要收集或报警,或丢弃的包的定义更加严格。组成一个规则的所有元素对于指定的要采取的行动都必须是真的。当多个元素放在一起时,可以认为它们组成了一个逻辑与(AND)语句。同时,snort规则库文件中的不同规则可以认为组成了一个大的逻辑或(OR)语句,详见snort指令集
3.snort实践
我们来分析第四周的listen.pcap文件,使用命令和第四周雷同:snort -r listen.pcap -c /etc/snort/snort.conf -K ascii
可以看出,全部数据包都来自TCP,再去alert警报记录中看一下警报信息,使用命令cat /var/log/snort/alert
就可以看到警报信息基本来自172.31.4.178的各个端口,且来包来源都与SNMP网络管理协议有关
分析蜜罐网关的机制
1.防火墙和IP控制表要素
vi /etc/init.d/rc.firewall
命令可以打开蜜罐网关的防火墙和IP控制表的配置文件(最好用vim编辑器来看,由于这个蜜罐网关的操作系统太过于古老,用cat来观看则不能上下翻页)
首先,打开这个配置文件后我们看到的大多是一些系统函数,例如读取模组函数load_modules()、添加模组函数ad_modules()、创建IPD函数creat_pidfile()、删除IPD函数delete_pidfile()、清空IP控制表函数flush()等等系统函数,
影响比较大的一些函数例如create_chains()函数中久可一添加黑名单、白名单、受保护的文件列表(fence list)等,同时在这个函数中,还拥有区分数据包类型(tcp、udp、ICMP、other)的功能
在这个文件中,也有我们上述防火墙的过滤设置功能,可以过滤接收、拒绝特定的IP、端口、协议的报文,功能十分强大。
关于iptable过滤规则,我只能看文件中的描述,而不能直接调取iptables -t filter -L
命令来看,如下图(具体原因待我研究一下):
我去ubantu上又试了一下,命令没有问题,可能是蜜罐网关装的有问题,回头再装一下,在ubantu上调取过滤表如下:
后面还有一部分就不过多罗列了。
snort入侵检测要素
snort的实际参数:
** 在bash用命令打开snort的脚本文件vi /etc/init.d/snortd
,看到默认监听网卡eth0,默认不开启-A模式,使用默认目录的config文件,使用二进制模式保存log文件等设定。**
** 使用命令打开snort——inline防御系统的脚本文件vim /etc/init.d/hw-snort_inline可以看到很多snort运行调控时候我们用到的一些参数,如显示当前状况status(),启停函数等基本系统函数。**
** 使用命令打开snort——inline防御系统vim /etc/snort_inline/snort_inline.conf的配置文件,其中定义了很多端口,如http80端口、oracle1521端口等等,还引入了许多端口扫描和过滤的规则,其主要作用是进行基础配置。**
蜜罐网关开机之后,防火墙、NIDS、NIPS是如何启动的?
** 很显然我们的iptables和snort是开机自动启动的,但是顺序在操作系统启动之后,而NIDS则是需要手动启动。**
** 我们看到了honeywall启动的各种基础配置,例如开机自启动、广播IP等,在图二中我们看到了自更新设定为no,也就snort是不会自动更新的。**