20199318 2019-2020-2 《网络攻防实践》第六周作业

20199318 2019-2020-2 《网络攻防实践》第六周作业


1.知识点梳理与总结

1.1 防火墙的功能

  • 检查控制进出网络的网络流量
  • 防止脆弱或不安全的协议和服务
  • 防止内部网络信息的外协
  • 对网络存取和访问进行监控审计
  • 防火墙可以强化网络安全策略并集成其他安全防御机制

1.2 防火墙的不足

  • 来自网络内部的安全威胁
  • 通过非法外联的网络攻击
  • 计算机病毒传播
    由于技术瓶颈问题目前还无法有效防范的安全威胁:
  • 针对开放服务安全漏洞的渗透攻击
  • 针对网络客户端程序的渗透攻击
  • 基于隐蔽通道进行通信的特洛伊木马或僵尸网络

1.3 防火墙部署方法:

  • 包过滤路由器
  • 双宿主堡垒主机
  • 屏蔽主机
  • 屏蔽子网

1.4 Linux 开源防火墙:netfilter/iptables

  • 工作原理

         在netfilter/iptables防火墙系统中,netfilter组件位于Linux的内核空间中,实现了静态包过滤和状态报文检査(即动态包过滤)基本防火墙功能,此外也支持一个灵活可扩展的框架,支持NAT网络地址转换等其他额外功能,并提供了多层API接曰以支持第三方扩展,netfilter具备构建防火墙、NAT共享上网、利用NAT构建透明代理,以及构建QoS或策略路由器等安全功能。Iptables则是工作在Linux用户空间中的防火墙配置工具,通过命令行方式允许用户为netfilter配置各种防火墙过滤和管理规则。
    

  • Iptables为用户提供了配置netfilter规则的命令行接口,其命令语法为:
    $ iptables [-t table] command [match] [target]
    其中-t指定配置规则所在的表,缺省表包括filter、nat、mangle、raw等。command部分是iptables命令的最重要部分,它告诉iptables命令要做什么,例如,插入规则、将规则添加到链的末尾或删除规则。以下是最常用的一些命令。
    • -A或一append:该命令将一条规则附加到链的末尾。
    示例:$ iptebles -A INPUT-s 205.168.0.1 -j ACCEPT
    该示例命令将一条规则附加到INPUTS的末尾,确定来自源地址205.168.0.1的数据包可以被接受,进入本地协议栈。
    • -D或-delete:通过用-D指定要匹配的规则或者指定规则在链中的位置编号,该命令从链中删除该规则。
    • -P或--policy:该命令设置链的缺省目标操作,即策略.所有与链中任何规则都不匹配的信息包都将被强制使用此链的策略。
    示例:$ iptables -P INPUT DROP
    该命令将INPUT链的缺省目标操作指定为DROP.这意味着,将丢弃所有与INPUT链中任何规则都不匹配的数据包。
    •-N或--new-chainj用命令中所指定的名称创建一个新链。
    •-F或-flush,如果指定链名,该命令删除链中所有的规则,如果未指定链名,该命令删除所有链中所有的规则。此参数用于快速清除。
    示例:$ iptables -F FORWARD
    •-L或一list:列出指定链中所有的规则。
    示例:$ iptobles -L FORWARD

Match部分为规则匹配条件,指定数据包与规则匹配所应具有的特征,匹配条件分为两大类:通用匹配和特定协议匹配,通用匹配为可用于釆用任何协议的数据包进行的匹配条件,如必。进入网络接口/发出网络接口,-s/-d源和目的地址、-p协议类型、-m网络连接状态等,特定协议匹配为某种上层协议特定字段的匹配条件,如“--sport/--dport为TCP/UDP端口匹配设置条件等,在配置多个匹配条件是采用“与”关系,即同时满足后,才触发目标操作行为。
Target部分指定满足匹配条件之后的目标操作,即对与那些规则匹配的数据包执行的处理操作。netfilter/iptables除了允许用户定义的目标之外,还有许多缺省已定义的常用目标操作选项。

  • netfilter/iptables的NAT机制

(1) IP伪装
netfilter的NAT机制最通常使用的需求是IP伪装。在内部网络使用私有IP网段,如通过防火墙上绑定的一个外网IP地址共享上网的场景,就可以使用这种机制,使得内部网
络主机发出的数据包进行源IP地址伪装,使用防火墙外网IP地址,就像是从防火墙外网IP地址所发出的一样。具体配置规则为:
#iptables -t nat -A POSTROUTING -i ethl -o ethO -j MASQUERADE

(2)SNAT机制
SNAT用目标操作选项“jSNAT”描述,用«-to-sourcew来描述要转换的IP地址、或者一个范围的IP地址及端口(仅仅用于TCP和UDP)。例如:

# iptables -t nat -A POSTROUTING -o ethO -j SNAT —to 1.2.3.4

该条规则将通过路由发出的网络连接的源IP地址都修改为1.2.3.4。

# iptables -t nat -A POSTROUTING -o ethO -j SNAT -to 1.2.3.4-1.2.3.6

这条规则将通过路由发出的网络连接的源IP地址修改为1.2.3.4至1.2.3.6 IP网段中的一个 IP。

 # iptables -t nat -A POSTROUTING -p Cep -o ethO -j SNAT —to 1.2.3.4:1-1023 

这条规则将通过路由发出的TCP网络连接的源IP地址修改为1.2.34,且源端口设置为1〜1023范围内的一个。

(3)DNAT机制
DNAT在PREROUTING链中完成,对于本机的应用程序来说(包括routing.包过滤程序)都忽略目的地址的改变,认为到达真实的目的地址。需要用到“-i”选项。目的NAT用“-jDNAT”来表示,用“-to-destination”选项来描述IP地址、IP地址的范围或者端口。例如:

将目的地址转换为5.6.7.8。

# iptables -t nat -A PREROUTING -i ethl -j DNAT —to 5.6.7.8

将目的地址转换为5.6.7.8-5.6.7.10中的任意一个IP。

 # iptables -t nat -A PREROUTING -i ethl -j DNAT —to 5.6.7.8-5.6.7.10

将Web网络流量的目标地址和端口转换为5.6.7.8:8080。

 # iptables -t nat -A PREROUTING -p tcp --dport 80 -i ethl -j DNAT --to 5.6.7.8:8080

将本地发出的到1.2.3.4的数据包重定向至本地loopback。

 # iptables -t nat -A OUTPUT -d 1.2.3.4 -j DNAT —to 127.0.0.1

目标端口转发也是DNAT机制的一种特例,如要将到外网IP 1.2.3.4的8080端口网络流量转发至内部网络IP192.168.1.1的80端口,可以釆用如下的规则:

# iptables -A PREROUTING -t nat -p tcp -d 1.2.3.4 —dport 8080 -j DNAT —to 192.168.1.1:80

动手实践
实践任务:配置Linux操作系统平台上的iptables,或者Windows操作系统平台上的个人防火墙,完成如下功能,并进行测试:
(1)过滤ICMP数据包,使得主机不接收Ping包;
(2)只允许特定IP地址(如局域网中的Linux攻击机192.168.200.6),访问主机的某一网络服务(如FTP、HTTP、SMB),而其他的IP地址(如Windows攻击机192.168.200.2)无法访问。
答:(1)在Linux(ip:192.168.200.6)上配置个人防火墙.过滤ICMP数据包,使得主机不接受ping包,具体操作如下:
先使用windows主机对linux主机进行ping连接:

然后在linux主机上执行iptables -A INPUT -p icmp -j DROP命令,在INPUT链中添加将所以有ping连接产生的icmp数据包丢失的规则,此时再ping linux主机则ping连接失败:

除去刚才的过滤规则:

再次尝试ping linux主机:

(2)通过telnet命令对目标机192.168.200.125进行连接,源ip地址为192.168.200.6以及192.168.200.2:

然后用iptables -A INPUT -p icmp -j DROP将满足规则的数据报丢弃,此时telnet连接失败:


然后用指令iptables -A INPUT -p tcp -s 192.168.200.6 -j ACCEPT开启对源IP192.168.200.6对目标机的tcp服务,可以用iptables -L查看规则

192.168.200.6可以telnet目标IP,而192.168.200.10连接失败:


1.5 Snort的特性与基本架构

Snort软件的基本架构如图所示,主要由四个基本部分组成:
(1)数据包嗅探/解码器(sniffer);
(2)预处理器/插件(preprocessor);
(3)检测引擎/插件(detection engine);
(4)输出模块/插件(output modules);

Snort中四个主要部件以及处理过程描述如下。

  • 数据包嗅探/解码器。首先,利用libpcap从网卡或离线记录中捕获数据包,然后数据包经过解码器填入到链路层协议的包结构体中,以便对高层次的协议进行解码,如TCP/UDP 层。
  • 预处理器/插件。接着数据包被送到各种各样的预处理插件中,在检测引擎之前对数据包进行检査和操作.每个预处理插件检査数据包是否应该注意、报警或者修改某些东西。
  • 检测引擎/插件。随后,包被送至检测引擎,检测引擎首先通过各种规则文件中定义的匹配字符串特征来对每个包的信息进行快速的模式匹配检测,然后由各种检测插件对包提供额外的检测功能。规则中每个关键字选项对应于检测引擎插件,能够提供不同的检测功能。
  • 输出模块/插件。对之前各个部件产生的报警/日志信息,根据用户配置,调用相应的输出插件进行发送和记录。

动手实践:Snort

任务:使用Snort对给定pcap文件(第4章中的解码网络扫描任一个pcap文件)进行入侵检测,并对检测出的攻击进行说明。
在BT4 Linux攻击机或 Wndows Attacker攻击机上使用Snort,对给定的pcap文件进行入侵检测,获得报警日志。
执行snort -r /home/kali/listen.pcap -c /etc/snort/snort.conf -K ascii
-K ascii主要是为了指定输出log文件的编码为ASCII(默认为binary)
从结果可以看出,大部分为TCP包,少部分为ARP包:

报警数据有10条,均被日志记录:

数据流统计:

在缺省log目录/var/log/snort中可以用vim读取生成的alert文件,记录了报警数据10条的入侵检测信息:


2.实践作业

分析虚拟网络攻防环境中蜜罐网网关的防火墙和IDS/IPS配置规则,并撰写分析报告,说明蜜罐网网关是如何利用防火墙和入侵检测技术完成其攻击数据捕获和控制需求的。
具体分析配置规则与启动项文件包括:

  • 防火墙(netfilter+IPTables):/etc/init.d/rc.firewall

  • 入侵检测系统(Snort):/etc/init.d/hflow-snort与/etc/snort/snort.conf

  • 入侵防御系统(Snort_inline):/etc/init.d/hflow-snort_inline与/etc/snort_inline/snort_inline.conf
    分析内容:

  • 上述脚本是如何实现蜜网网关的数据捕获和数据控制机制?

  • 获取IPTables的实际规则列表、Snort和Snort.inline的实际执行参数。

  • 蜜网网关开机之后,防火墙、NIDS、NIPS是如何启动的?

  • Bonus:蜜网网关中的Snort规则是如何自动升级的?
    答:
    (1)上述脚本是如何实现蜜网网关的数据捕获和数据控制机制?

  • 首先说明防火墙和入侵检测技术的关系。iptables负责对数据accept、reject和drop,snort主要是预警作用,不能阻拦。所以就是用snort来监控,有违反规则的行为就发出预警信息,告诉iptables,从而iptables去阻断违反规则的连接。

  • 数据捕获和数据控制
    通常数据控制包括两个方面,一个是防火墙对数据的控制,还有一个是IPS对异常数据的限制。
    查看防火墙文件:vim /etc/init.d/rc.firewall

防火墙文件rc.firewall中create_chains()用于创建链,该函数分别创建了黑名单和白名单,防护名单以及防护日志删除,-N的意思表示根据用户指定的名字创建新链,其中黑名单就是阻止某些网络地址和用户进入主机,白名单就是用户设置的认为可以添加信任的网络用户以及网络地址,防护名单是IPS的文件列表,防护日志删除是一个表,用于记录/删除从围栏反弹的数据包。
关于数据捕获,无论是iptables还是snort,都能够通过记录日志的形式来捕获网络连接信息,包括源ip/端口,目的ip/端口,以及进行连接的协议等。

(2)获取IPTables的实际规则列表、Snort和Snort.inline的实际执行参数。

  • 通过指令iptables -t filter -L来查看规则列表,-t是指定规则表,-L表示列表。通过shift键+Fn键+上下键来翻页。可以看到一些规则如OUTPUT、INPUT、FORWARD都已经被关闭了。

  • snort实际执行参数
    执行命令vim /etc/init.d/snortd,snortd是snort启动的脚本文件,snort.conf是具体预警的规则设定,分析下图如,默认使用snort.conf规则,默认监听网卡为eth0,默认存储日志路径为/var/log/snort等等。


  • snort_inline实际执行参数
    执行命令vim /etc/init.d/hw-snort_inline打开snort_inline脚本

以及一些运行指令。其中的-Q,即QUEUE模式,是用于将snort_inline通过QUEUE将防护规则传给iptables。

(3)蜜网网关开机之后,防火墙、NIDS、NIPS是如何启动的?

  • 防火墙、NIDS、NIPS的启动
    通过指令chkconfig --list | grep [服务]来查询当前服务是不是开启的。
    chkconfig命令主要用于检查,设置系统的各种服务。若0-6全部为off,则不自动启动。
    可以看到防火墙和NIPS(snort_inline)是跟随系统启动的,并且开机自动配置刚才的脚本文件。NIDS不会自动启动。

(4)Bonus:蜜网网关中的Snort规则是如何自动升级的?

  • Snort规则如何自动升级
    在/etc目录下使用命令vim honeywall.conf打开honeywall配置文件,这个里面可以看到一些,如我们配置的IP地址、子网掩码等等。

可以看到snort规则,默认是不自动更新的。还可以看到Oinkmaster字样,这是个自动更新的软件。

在当前目录下打开oinkmaster.conf文件,可以看到更新文件


3.遇到的问题

  • 问题一:对与iptables和snort两种工具的使用还不太熟练
  • 问题一解决方法:参考网上的一些教程。

4.学习感悟、思考

本次实践主要学习了网络安全防范技术。实践的过程还是比较顺畅的,并没有遇到什么大的问题,但是iptables以及snort工具的使用还有待加强。

posted @ 2020-04-07 18:55  孙茂林  阅读(273)  评论(0编辑  收藏  举报