计算机网络安全与管理实验(8)

2019-02-17 18:06

两种基本姿态:拒绝一切和允许一切。前者是默认阻断所有的应用,然后根据需要把那些认 为是安全的、必要的服务添加到允许条目中;后者则先许可所有的应用,然后把那些认为是 不安全的、不希望开放的服务添加到拒绝条目中。这两种策略相比,前者保证了安全第一但 不便实际应用,常常给用户但来很多意想不到的麻烦;后者优先考虑了易用性,但网络管理 员却容易身陷不断的被动响应中。实验中我们采用允许一切的缺省策略。

包过滤路由器对所接收的每个数据包做出允许还是拒绝的判断,它审查每个IP 分组的

头标,并与包过滤规则按顺序进行匹配(所以设置的顺序上颇有讲究)。IP 头标中包括源IP 地址、目的IP 地址、净荷协议(TCP、UDP、ICMP 等);如果净荷是TCP/UDP 报文,还可以

审查其源和目的端口(尤其是目的端口),如果是ICMP 报文,还可查看其消息类型。简单地 说,包过滤路由器接收到的报文会有三种去向: ", 如果匹配到某一规则,并且该规则允许数据包通过,那么该报文才会被接收,或者由防 火墙根据其路由表最长网络前缀匹配的结果进行转发。 ", 如果匹配到某一规则,并且规则要求拒绝该数据包,那么该数据包就会被丢弃。此时防 火墙还可以被配置为是否向源端发送ICMP 差错报文等指示信息。在是否和如何发送指 示信息这一点上也存在安全策略的考虑,有时还颇有讲究。 ", 如果数据包未匹配到任何规则,则根据防火墙缺省配置(例如,允许一切)决定接收(含 转发)或是丢弃。

网络管理员不但要进行依赖于服务的过滤(例如,不理睬来自外部的ping 请求,不向 某个不友好的IP 提供socks 代理,向特定的一些网段开放ftp 服务,只向内部网提供用于 网络测试的服务项目如chargen 等),还应作更多考虑,例如,那些进行独立于服务的过滤。 实验中我们将考虑防范源IP 地址欺骗攻击(Source IP Address Spoofing Attack)。

典型的IP spoof 是入侵者从外部网发送假装成来自内部主机的数据包,即源IP 伪造为内部 网络地址。入侵者希望借助伪造的源IP 地址来实施诸如TCP 湮没等DOS 攻击,或是渗透到 一个只设置了源地址安全功能的系统;在这样的系统中,来自内部信任主机的数据包将被接 受,而来自其它主机的数据包全部被丢弃。为防范源IP 地址欺骗攻击,应加入如下的过滤 规则:丢弃所有来自路由器外部网络接口,且源IP 为内部地址的数据包。

在Linux 2.4 中,ipchains 可以查看TCP 包中状态位之一的SYN 比特。通过设置SYN

包过滤规则,可以实现允许己方向对方发起连接,但拒绝对方向己方发起连接的策略。这一 点可以用来阻止拥有正式IP 地址的内部网用户向外界擅自提供ftp 等网络服务。Linux 2.4 中iptables的防火墙功能比Linux 2.2 的ipchains 要强大得多(而且逻辑结构也合理得多), 例如,可以查看所有六个TCP 状态比特(URG、ACK、PSH、RST、SYN、FIN)。 包过滤路由器的优点比较明显,实际部署的防火墙系统多数也只需要采用包过滤路由

器。除花费时间规划过滤规则和配置路由器外,这样的防火墙实现起来基本不再需要开销。 在流量适中且过滤规则较少时,路由器线路性能几乎不受影响。此外,包过滤路由器对内外 网络的用户及通信程序而言是透明的,既不必对用户进行特殊培训,也无需在各主机上安装 特定客户端软件,所有的工作只需网络管理员在防火墙上设置完成。

包过滤防火墙也有一些缺点。制定过滤规则比较复杂,网络管理员需要对各种Internet

服务、报文格式、甚至每个字段的意义有深入的了解。如果需要支持复杂的策略,过滤规则 集合就会变得非常庞大和复杂,因而难于理解和维护;当然,路由器的性能也会随之下降。 此外,包过滤路由器能够允许或拒绝一些网络服务,但是无法理解特定服务中的上下文环境, 或者说它不可能去分析网络数据代表的具体含义。拥有一个配置得当的包过滤路由器只能给

36

网络提供最基本最必要的保护。如果希望拥有更高程度的安全,可以考虑部署入侵检测系统 (Intrusion Detection System)等专门的网络安全工具。

包过滤防火墙首先是一个路由器,在我们的实验中它是一台安装了至少两块网卡的PC

机,运行Linux 2.4 操作系统。作为一个路由器,其基本职能是连接两个网络并按(静态的) 路由表行使IP 分组的转发。本实验中只涉及IPv4 。执行cat

/proc/sys/net/ipv4/ip_forward,观看结果并解释。配置IPv4 路由器的一个比较妥当的做 法是在/etc/sysctl.conf 文件中指定net.ipv4.ip_forward=1,它对应的就是内核变量 /proc/sys/net/ipv4/ip_forward 的值。

3.2 配置包过滤防火墙

Linux 2.4 系统中作为防火墙实现的Iptables 其配置相当复杂。完整的技术文档可以 从http://www.netfilter.org/documentation/index.html 获得。本实验中只以一些最简单 最基础的例子来讲解其用法。考虑一个连接两个以太网的简单的防火墙,连接到Internet 的网卡为eth0,地址是192.138.64.179/255.255.255.0,连接到Intranet 的网卡是eth1, 地址是192.168.11.0/255.255.255.0。我们来看以下指令: ", iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j DROP

选项-A 表示append,即在上一条规则或策略的末尾添加新的规则。INPUT 是过滤表 (filter)的一条内在的规则链,它匹配所有发往防火墙系统自身的网络分组。相应地, 经过该系统(例如系统同时也作为一个路由器运行)的那些分组就不受INPUT 链影响。 在执行iptables -F 后,所有规则被删除,规则链被清空,此时执行以上操作就相当于 在INPUT 链中添加第一条规则。-i 指定输入网络接口,这里是外网卡eth0。-s 指定需 要匹配的源地址,我们这里看到的是内部地址簇192.168.0.0/16,/16 表示网络前缀长 度为16 位即B 类地址。由于这是内部地址,正常情况下不可能作为源地址出现在eth0 接收的分组中,故我们认为:来自Internet 的源地址为192.168.0.0/16 的发给防火墙 本身的所有分组都是非法的。-j 就表明处理手段,这里的DROP 表明是丢弃,或者说就 当什么都没收到一般。缺省情况下防火墙采取允许一切的策略,添加了这条规则后,防 火墙就能滤除掉具有非法源地址的网络分组,通常这些分组都是欺骗包。 ", iptables -A INPUT -i eth0 -s 172.16.0.0/12 -j DROP

由于INPUT 链中已经存有一条规则了,此时再执行以上操作就相当于在INPUT 链中添加第二条规则。假如用-I 参数执行的话,那么iptables 就会把新的规则插入到链的开头。 选项-I 表示insert,它的作用就在于当前规则将以最优先的顺序进行匹配。建议初学 者使用-A 参数逐条顺序添加安全规则,这样的防火墙配置可读性会比较好些,也不容 易发生“后写的规则使先写的规则变得无效”的问题。我们这里看到的源地址簇

172.16.0.0/12 其实还是内部地址。按照RFC 的规定,正常情况下172.16.0.0/12 不可 能作为源地址出现在Internet 中,故我们也以丢弃的办法处理之,就当根本没有收到 过这些包。 ", iptables -A INPUT -i eth0 -s 127.0.0.0/8 -j DROP

有了前面的基础,这句话就非常好理解了,只不过现在处理的是回环地址而已。 ", iptables -A INPUT -i eth0 -s 192.138.64.179 -j DROP

丢弃来自Internet,源IP 被设置成防火墙本身IP 的非法分组。 ", iptables -A INPUT -i eth0 -s 192.138.64.255 -j DROP

丢弃来自Internet,源IP 被设置成子网广播IP 的非法分组。 ", iptables -A INPUT -i eth0 -p tcp -m tcp --dport 79 -j DROP

37

这里引入了传输层协议处理。-p 表示protocol,这里是tcp,为此,iptables 要启用 相应的协议处理模块,-m tcp 就表示启用tcp 模块。如果是处理udp 协议,则应匹配 udp 模块,相应的参数就是-p udp -m udp。当然,-m 后面的模块还有其他可能,一个 比较复杂的例子是-m state,本实验不涉及。参数--dport 则指定了目的端口。TCP 79 号端口是finger 操作,丢弃Internet 对防火墙的finger 请求可以防止一些敏感信息 的泄露。这条指令同时也表明,这台防火墙很可能提供有finger 服务,并且只向内部 网提供。实际操作的时候,finger 是作为xinetd 的一项服务条目而存在,故真正运行 的进程是xinetd,它监听TCP 79 号端口并在连接情况下激活finger-server 来提供 finger 服务。我们这个时候可以从Internet 和Internat 分别进行finger 操作,观察 情况有何不同。

3.3 IPv4 网络地址转换NAT

IP 分组在网络上传输时,从其源地址到达目的地址,中间可能要经过很多节点和网络.

这些节点通常不会改变分组内容(IP 头标中的TTL 域除外),它们仅仅负责把分组转发到下 一节点。但是,如果一个节点执行NAT 操作(它可以是一台品牌路由器,也可以是一台运行 Linux 系统的PC 路由器),它就有可能会修改IP 分组的源或目的地址。通常这个执行NAT 的节点会维护关于修改该分组的相关上下文信息,以便当相应的应答包从另一个方向到达 时,它知道如何反向修改这个应答包,以对会话双方都保持透明操作。

实际当中比较典型的例子是,一个小型局域网内的所有PC 机使用的都是内部地址(或 称为保留地址),但它们可以用局域网网关的IP 地址接入到Internet,这就是因为网关上 完成了网络地址转换的缘故。显然,NAT 对节省IPv4 地址空间有重大意义,并已经对延缓 IPv4 地址耗尽时日起了显著作用。

NAT 可以划分为以下两种类型:源网络地址转换(Source NAT,缩写为SNAT)和目的网 络地址转换(Destination NAT,缩写为DNAT)。源NAT 是指改变连接发起者的源地址,在 寻路之后进行;IP 伪装(masquerade)即属于NAT 而且是SNAT 的一个特例。目的NAT 是指

改变连接发起者所请求的目的地址,在寻路之前完成;例如,端口重定向(或称端口转发、 端口转接)就属于目的NAT,而且重定向后的端口号可以与定向前相同,也可以不同。 IP 伪装由于保护了使用保留地址的内部主机(它们对外不可见),所以网关实际上就是 起到了防火墙隔离内外网络的作用。端口重定向则和IP 伪装一样,也具有加强网络安全的 功效,此时的网关相当于图3 中所示的防火墙,而真正提供网络服务的就可以是堡垒主机。 例如,将对网关的http 访问重定向到内部网的主机192.168.0.1(也可以是使用全局IP 地 址的主机),而将对网关的telnet 和ssh 访问重定向到内部主机192.168.0.2(而且定向后 的端口可以改变,不必是这些周知服务的默认端口如21 和22)。网关本身不提供任何服务, 它仅仅需完成特定连接(既指基于TCP,也指基于UDP 的socket 连接)的转接,换句话说, 网关自身并不开放这些端口(例如,并不对httpd、telnetd、sshd 的端口进行侦听),因此 这有益于网关自身的安全保障。

位于网关之后但可被外部访问到的主机可能是堡垒主机,也可能是非军事区。堡垒主机 可以使用外部地址,也可以使用内部地址;但非军事区大多都设计为一个使用外部地址的 IP 子网。在刚才介绍的端口重定向例子中,由于被定向主机的IP 地址分别是192.168.0.1 和192.168.0.2,那么它们很可能是堡垒主机而不会位于非军事区内。 我们回到3.1 节中的例子来看一个网络地址转换的配置指令: ", iptables -t nat -A POSTROUTING -s 192.168.11.0/24 -o eth0 -j SNAT --to-source

38

192.138.64.179

注意上面是一个长行而不能按两行输入。-t nat 表明现在处理的是地址转换表,缺省 情况下是对过滤表进行操作即相当于-t filter,正如3.1 节所示那样可以省略。-A

POSTROUTING 就是刚才提到的“寻路之后进行”,这条规则将以append 方式添加到 POSTROUTING 规则链的末尾。与-i 对应,-o 表示输出接口,这里是eth0。-o eth0 也 就表明分组通过了防火墙并即将发送到Internet 上。--to-source 则表明将源地址转 换为防火墙外网卡eth0 的全局IP 地址192.138.64.179。 ", iptables -t nat -A PREROUTING -d 192.138.64.179 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.11.80

注意这条指令也必须敲在一行上。这是一个目的网络地址转换,具体的说是端口重定向, 故我们使用的是PREROUTING 链。它将所有对192.138.64.179 的http 访问转接到内部 的堡垒主机192.168.11.80 上去。一个同样比较好处理的例子是telnet 转接。ftp 转 接是一个比较难处理的情况,本实验中不讨论。完成了以上两个操作后,在堡垒主机 192.168.11.80 上启动http 服务器。从Internet 访问http://192.138.64.179 并观察 结果如何。 ", iptables -t nat -I PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP ", iptables -t nat -I PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP ", iptables -t nat -I PREROUTING -i eth0 -s 127.0.0.0/8 -j DROP

4 实验要求

构建两个网络192.138.64.179/255.255.255.0 及192.168.11.0/255.255.255.0,分别 充当Internet 和Intranet。配置一台双网卡PC 机并连接到以上两个网络,用iptables 配 置防火墙和堡垒主机(参照图3),并从内外网络进行测试,观察现象并进行分析。

5 思考题

1. 分析实验内容3.3 末尾未加解释的三条过滤规则,指出它们与3.2 节中开头的三条过滤 规则为什么作用完全不一样。说明为什么需要使用-I 选项而不宜使用-A 选项。

2. 在实验内容3.3 中,假如从Intranet 访问http://192.138.64.179,会出现什么效果? 给出理论分析,并尽可能做实验检验你的想法。

39

实验6 缓冲区溢出

1 实验目的

学习缓冲区溢出的基本概念,以及缓冲区溢出的原理过程。

掌握预防和防御缓冲区溢出的方法,并且在实际编程中严格遵循安全原则。

必须再次重申的是:本实验课程中涉及到了一些黑客攻击与破坏的技术、方法以及工具, 我们介绍这些内容,是为了让大家能够利用这些知识建立更安全的网络,而不是用来攻击他 人。

2 实验原理

缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。 利用缓冲区溢出攻击,可以导致程序运行失败、系统当机、重新启动等后果。更为严重的是, 可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。从安全角度 来说,缓冲区溢出将导致安全受到三个方面的攻击:对可用性的拒绝服务攻击,对信息完整 性的攻击和对信息机密性的攻击。

最早的缓冲区溢出攻击发生在1988 年11 月2 日,康奈尔大学的一位研究生Robert Morris 制造了“Morris Worm”,此蠕虫程序在fingerd 中利用缓冲区溢出感染了因特网中的数万台 机器,使得各地的服务器管理员都对此极为头痛。在这之后,美国国家计算机安全中心举行 了一系列的会议来探讨如何防止类似事件再次发生,以及如何对其作出响应。很快,DARPA (高级防御研究计划管理局)为软件工程协会提供资金,要求建立一个专门接收安全事件报 告并迅速作出反应的机构,这一机构就是CERT/CC(Computer Emergency Response

Team/Coordination Center)。仅2000 年缓冲区溢出就占CERT/CC 报告的所有重大安全性错 误的百分之五十以上。

本节将分析缓冲区溢出的原理;研究各种类型的缓冲区溢出漏洞和攻击手段;最后,还 将着重研究各种防御手段,用来消除这些漏洞所造成的影响。在实验部分,我们所考虑的环 境是Linux 操作系统,编程语言是C 语言。

2.1 缓冲区溢出的原理

通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈, 使程序转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的根本原因是程序中缺少错 误检测。例如下面程序: void function(char *str) { char buffer[16]; strcpy(buffer,str); }

上面的strcpy()将直接吧str 中的内容copy 到buffer 中。这样只要str 的长度大于16,就

1若是您在阅读过程中发现任何疏漏或者错误,请尽快联系:hupeng@mail.ustc.edu.cn

会造成buffer 的溢出,使程序运行出错。存在象strcpy 这样的问题的标准函数还有strcat(), sprintf(),vsprintf(),gets(),scanf()等。

40


计算机网络安全与管理实验(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:其年级上册第四单元教案 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: