矛与盾的较量──网络***和防火墙详解

 矛与盾的较量──网络***和防火墙详解
刘志勇
原文2008年发表于《网管员世界》
 
题记
 
    接到这个稿约后,笔者感到战战兢兢,因为笔者很清楚,计算机安全就像一个快速进化的野兽,新的威胁不断出现,老的威胁变得过时(但看起来永远不会“死亡”)。而***者的手段比较隐秘,不大为外人所知晓,特别是穿越防火墙实施网络犯罪的活动。
    限于笔者的水平和经验所限,实在难以完美展现***真相的全部,因为企业的实际网络环境远比实验环境要复杂,而且防火墙的种类多种多样,既有硬件的,也有软件的,断然不是一篇短短的文章所能包容,但万法归宗,它们的原理是一样的。笔者斗胆写下这篇文章,只希望能起到抛砖引玉的作用,那笔者的目的也就达到了。
 
前言
 
    信息和网络安全技术历经十多年的发展,无论在广度,还是在深度上,都有了很大的进步,其中一个重要的研究趋势就是注重***结合,追求最大化的动态安全。网络的攻与防,即为矛与盾。然而,与此相关的信息安全方面的文章大多数却是从盾来入手的,也就是说从防御的角度来论述。
    作为网管员来说,他要学习信息安全知识的话,不仅需要了解防护方面的技术,也需要了解检测和相应环节的技术(就是矛)。无数实践表明,最大的不安全,恰恰就是自以为安全!因为,信息安全具有很强的对抗性,威胁时刻存在,各种各样的安全问题常会掩盖在表面的平静之下。
    有太多的古训,诸如“隐患险于明火”、“知己知彼,百战不殆”……对于今天的网络信息安全防御依然有借鉴意义。对于实施***的***手法的洞悉,对于自身脆弱性的意识,都是自身安全的前提。
    为帮助广大网管员了解网络***和防火墙的方方面面,本文作者将从***兼备的角度,尽可能将纷繁复杂、是似而非的***思路整理清晰,以飨广大网管员。
 
防火墙的基础知识
 
    防火墙是由楔和门两类功能部件构成,典型的防火墙包括一外一内两个楔和夹在中间的一个门。楔通常由路由器承担,而门通常由相当简化了操作系统的主机承担。换言之,楔强制内部网络和外部网络之间的通信通过门进行,门则执行安全措施并代理网络服务;门与内外楔之间分别链接一个独立的子网,其中,外楔和门之间的子 网可以有一个非军事区,这块可部署对外的网络服务如www、ftp、dns等等。内外楔应阻塞不希望穿越防火墙的所有网络服务的分组,
    目前有两类主导性的防火墙:应用代理和分组过滤网关,这同防火墙概念中的门和楔功能部件相对应,但实际上,完善的防火墙需要这两个部件的有机结合,而不是孤立的发挥作用。
    防火墙一般有两个以上的网卡,一个连到外部(router),另一个是连到内部网络。当打开主机网络转发功能时,两个网卡间的网络通讯能直接通过。当有防火墙时,他好比插在网卡之间,对所有的网络通讯进行控制,示意图如下:

 │ │---路由器-----网卡│防火墙│网卡│----------内部网络│ │

    防火墙主要通过一个访问控制表来判断的,它的形式一般是一连串的如下规则:

1 accept from+ 源地址,端口 to+ 目的地址,端口+ 采取的动作
2 deny ...........(deny是拒绝)
3 nat ............(nat是地址转换)

    防火墙在网络层(包括以下的链路层)接收到网络数据包后,就从上面的规则连表一条一条地匹配,如果符合就执行预先安排的动作,如丢弃包等。
 
  矛与盾的较量
 
    几千年前的孙子兵法就写道:不知彼而知己,一胜一负;不知彼,不知己,每战必殆。
    我们作为网络管理员,要做到能够检测并预防相应的***,就必须了解***者的手段,这样,我们才能有针对性的防范。
    我们知道,盗窃者在开始犯罪之前,必须完成三个基本的步骤:踩点、查点、行动。比如,有一个盗窃团伙决定抢银行的时候,他们会事先花大量时间去收集这家银行的信息,如武装押运车的路线和押送时间,摄像头的位置和范围,出纳员人数,逃跑路线一起其他任何有助于避免发生意外情况的信息。
    对于网络***者而言,也是一样的。他要***某个网络,事先也必须收集大量的信息──关于该机构的网络安全情况的各个方面的信息,如果不进行踩点就贸然***,这个行为简直就是愚蠢的,就好比径直走进银行开始要钱。
    只要想查,任何人都可以获取有关你的网络安全情况──其可用信息数量之多往往会超出你的想像!
    ***防火墙的第一步就是查找和判断防火墙。然后就是进行***防火墙。

  踩点之直接扫描查找防火墙
 
 
    有些防火墙会在简单的端口扫描下原形毕露──防火墙有特定端口在监听──你只需要知道哪些端口应该去扫描,比如,CheckPoint的Firewall- 1防火墙在256、257、258号的TCP端口监听,Microsoft Proxy Server 2.0防火墙在1080、1745号TCP端口监听……只要知道每个防火墙监听的缺省端口,就可以用端口扫描软件来对特定缺省端口进行扫描来查找防火墙, 如使用nmap[S1] 程序来扫描:

nmap -n -vv -P0 -p256,1080,1745 10.152.1.1-60.254

    因为大多数防火墙不会对ICMP应答,所以上述命令加上了-P0选项来禁止ICMP ping。其他端口扫描软件要视其说明文件来设置禁止ICMP ping。
    不过,如果该机构部署了***检测系统(IDS)的话,用这种方式对目标网络执行大范围的扫描,显然有些愚蠢和鲁莽,所以,水平比较高的***者不会这样明目张 胆的踩点,他们可能使用多种技巧以避免对方的注意,如对Ping探测分组、目标端口、目标地址和源端口进行随机顺序扫描,执行欺骗性源主机执行分布式源扫 描等等。
 
 
    要彻底防止***者对你的网络发起端口扫描这样的探测,很难。但可以通过将防火墙监听着的端口数缩减到正常运行必需的范围,这要查阅相应的用户手册,也就是在防火墙前面的路由器上阻塞这些端口,若这些路由器是ISP管理的话,就得同ISP联系以阻塞这些端口;如果路由器是自己管理的话,以Cisco路由器为例,可以使用ACL规则显式地阻塞刚才提到的端口:

access-list 101 deny tcp any any eq 256 log ! Block Firewall-1 scans
access-list 101 deny tcp any any eq 257 log ! Block Firewall-1 scans
access-list 101 deny tcp any any eq 258 log ! Block Firewall-1 scans
access-list 101 deny tcp any any eq 1080 log ! Block Socks scans
access-list 101 deny tcp any any eq 1745 log ! Block Winsock scans

    请参考所使用的路由器的文档,以达到阻塞针对这些特定端口的扫描。
 
踩点之路径追踪查找防火墙
 

    上面已经说过,对目标网络执行大范围的扫描是愚蠢和鲁莽的做法,高明的***者经常会采用Traceroute──路径追踪。
    我们知道,在网络中,信息的传送是通过网中许多段的传输介质和设备(路由器,交换机,服务器,网关等等)从一端到达另一端。每一个连接在Internet上的设备,如主机、路由器、接入服务器等一般情况下都会有一个独立的IP地址。通过Traceroute我们可以知道信息从你的计算机到互联网另一端的主机 是走的什么路径。当然每次数据包由某一同样的出发点到达某一同样的目的地走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。 Traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备Traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其IP地址。
    Traceroute在UNIX/Linux中为traceroute,而在Windows则为tracert。
    例如在Linux中:

lzy@Liuzhiyong:~$ sudo traceroute -I mail.sinopec.com
traceroute to mail.sinopec.com (10.1.28.4), 30 hops max, 40 byte packets
1  10.152.16.3 (10.152.16.3)  0.345 ms  0.338 ms *
2  10.152.1.1 (10.152.1.1) 5.801 ms 5.668 ms 5.106 ms
……
12  gw1.sinopec.com (10.0.202.1 ) 42.439 ms * *
13  10.1.28.4 (10.1.28.4)  106.813 ms * *

    我们从中可以推测,达到mail.sinopec.com前最后一跳(10.0.202.1)是防火墙的可能性非常大。但事实是否如此,还需要进一步判断。
    如果本地计算机到目标服务器之间的路由器对TTL已过期分组做出响应,那么刚才的例子是没有问题的,但如果路由器和防火墙设置成不返回ICMP TTL已过期分组,那么,做出上述的结论就不够科学,这时能做的就是运行traceroute,查看最后响应的是哪一跳,由此推断是否真正的防火墙,或者至少是路径上开始阻塞路径追踪分组的第一个路由器。例如:

1  10.152.16.3 (10.152.16.3)  0.345 ms  0.338 ms *
2  10.152.1.1 (10.152.1.1) 5.801 ms 5.668 ms 5.106 ms
……
17 atm6.lax2.sinopec.com (10.50.2.1) 205.006 ms 391.682 ms
18 atm8.lax2.sinopec.com (10.50.2.5) 226.669 ms 366.211 ms
19 client-gw.sinopec.com (10.50.3.250) 266.223 ms !X * *
……

    在上述例子中,我们可以看出,ICMP探测分组被阻塞到达目的地之前,client-gw.sinopec.com之后没有响应,就可以知道结论。
 
 
    知道了路径追踪是怎么回事后,自然就知道这个盾如何打造:限制尽可能多的防火墙和路由器对TTL已过期分组做出响应,但是,通常有一些路由器是由你的ISP 控制,你需要跟他们联系。将边界路由器配置成接受到TTL值为0或1的分组时,不响应以TTL EXPIRED的ICMP消息。当然,也可以在边界路由器上阻塞所有不必要的UDP分组。
    例如,在Cisco路由器上可以应用如下ACL规策:

access-list 101 deny icmp any any 11 0 ! ttl-exceeded
 
查点之攫取旗标查找防火墙
 
 
    旗标就是显示应用程序名和版本号,用来宣告自身的存在,防火墙也与此类似。攫取旗标的思路很有用,因为大多数防火墙并不像CheckPoint那样在缺省的端口监听,这时,攫取旗标就可以检测出防火墙。
    这里有一个例子:

C:\Documents and Settings\Administrator\nc[S2]  -v -n 10.152.4.12 21
(UNKNOWN) [10.152.4.12] 21 (?) open
220 Secure Gateway FTP server ready.

    看到什么了?嗯,再链接到23号端口看看:

C:\Documents and Settings\Administrator\nc -v -n 10.152.4.12 23
(UNKNOWN) [10.152.4.12] 21 (?) open
Eagle Secure Gateway.
Hostname:

    还不太肯定这是防火墙吗?那我们继续链接到25号端口看看:

C:\Documents and Settings\Administrator\nc -v -n 10.152.4.12 25
(UNKNOWN) [10.152.4.12] 21 (?) open
421 fw4.pfcc.sinopec.com.cn Sorry, the firewall does not provide mail service ti you.

    至此,获取的信息还不够多吗?由此可见,攫取旗标可以查找出代理性质的防火墙,很多流行的防火墙只要被连接就会声明自己的存在,甚至包括自己的类型和版本,这恰恰对***者提供了有价值的信息,依靠这些信息,***者就可以找到网上已公开的薄弱点或者常见的错误配置从而达到***目的。
 

    要防住这个“矛”,就是经常变更防火墙的旗标配置文件,但具体的修改方法要取决于所使用的防火墙产品,需要查阅产品说明书或者直接与厂家联系。通常旗标最好被修改为包含警告信息,而不是宣告程序名和版本号等信息。
    如果上述几支矛都不够锋利,无法穿透盾的话,***者就会使用更为锋利的矛。

查点之利用nmap判断防火墙

 
    限于笔者的水平及篇幅所限,这里只能简略的讲述,以使网管员有个简单的认识。
    nmap是发现防火墙信息的好工具,用nmap扫描时,能看出哪些端口打开着,哪些端口关闭着,还有哪些端口被阻塞着。
 
 
    因为nmap是将接受到的ICMP分组的有效负载与早先发送的阿嚏内测分组的内容相比较,然后确定这些信息是否关联,所以,要防住这个矛的盾,应该就是禁止防火墙前面的路由器响应以类型为3、代码为13的ICMP分组(详见RFC 1812,刚才提到的这个分组是ICMP Admin Prohibited Filter分组,通常是从某个分组过滤路由器发出的),在Cisco路由器可以这样做来达到阻止他们对IP不可抵达消息做出回应:

no ip unreachables

    另外,这个盾也可以防范hping[S3] ***的矛。hping是Salvatore Sanfilippo编写的工具,通过向一个目的端口发送TCP分组,并报告由它引回的分组进行工作。
    hping可以发现打开着的,被阻塞着的、被丢弃的或者被拒绝的分组,而这些分组,能部分或全部的提供了防火墙具体访问控制的情况。
 
***之IP欺骗***包过滤防火墙
 
 
    这种矛,说穿了就是修改数据包的源、目的地址和端口,模仿一些合法的数据包来骗过防火墙的检测。如:外部***者将他的数据报源地址改为内部网络地址,让防火墙看到的是合法地址,从而放行。
 
 
    包过滤防火墙是防火墙中最简单的一种,如果防火墙能结合接口,地址来匹配,这种矛就失去了它的锋芒。
 
***之******绕过包过滤防火墙
 
 
    如果***者预先攻破了防火墙后面的某个系统,或者欺骗了某个后端系统上的用户执行一个特洛伊***程序,这样,***者就很有效的绕过所设置的防火墙规则了。原因是,包过滤防火墙一般只过滤低端口(1-1024),而高端口他不可能过滤的(因为,一些服务要用到高端口,因此防火墙不能关闭高端口的),所以很多的***都在高端口打开等待。
 
 
    加强客户端用户的安全意识,这是老生常谈。对于防火墙而言,应按照自己的配置需求,禁止许多缺省允许的分组类型,小心应对这个防范措施,因为有可能禁止有权穿行的分组通过防火墙,具体做法应根据所使用的防火墙产品的说明书去实施。
 
***之ICMP、UDP隧道绕过防火墙
 
 
    这种矛的***思想与***的实现原理相似,***者将一些恶意的***数据包隐藏在一些协议分组的头部,从而穿透防火墙系统对内部网络进行***。这种矛,依赖于防火墙后面已有一个受害的系统。例如,许多简单地允许ICMP回射请求、ICMP回射应答和UDP分组通过的防火墙就容易受到ICMP和UDP协议隧道 的***。Jeremy Rauch和Mike Shiffman编写的loki和lokid[S4]  (***的客户端和服务端)是实施这种***的有效的工具。
    在实际行动中,***者首先必须设法在允许ICMP回射请求和回射应答分组穿行的防火墙后面的某一个系统上运行上lokid服务端,而***者就通过loki 客户端将希望远程执行的***命令(对应IP分组)嵌入在ICMP或UDP包头部,再发送给内部网络服务端lokid,由它执行其中的命令,并以同样的方式 返回结果。由于许多防火墙允许ICMP和UDP分组自由出入,因此***者的恶意数据就能附带在正常的分组,绕过防火墙的认证,顺利地到达***目标主机下面 的命令是用于启动lokid服务器程序:

lokid-p CI Cvl

    loki客户程序则如下启动:

loki Cd 172.29.11.191(***目标主机)-p CI Cv1 Ct3

    这样,lokid和loki就联合提供了一个穿透防火墙系统访问目标系统的一个后门。


    要防止利用ICMP和UDP隧道的***绕过防火墙,可以是完全禁止通过防火墙的ICMP访问,也可以是对ICMP分组提供小粒度的访问控制,对于 Cisco路由器而言,要禁止穿行不是来往于172.29.10.0子网(DMZ区域)的所有ICMP分组,你可以创建以下ACL规则:

access-list 101 permit icmp any 172.29.10.0 0.2255.255.255 8!echo
access-list 101 permit icmp any 172.29.10.0 0.2255.255.255 0!echo-reply
access-list 102 deny ip any any log ! deny and log all else

***之反弹式***
 
 
    现在防火墙的包过滤采用的是状态检测技术,一句话,状态检测就是从tcp连接的建立到终止都跟踪检测的技术。状态检测必须提到动态规则技术。在状态检测里,采用动态规则技术,原先高端口的问题就可以解决了。实现原理是:平时防火墙可以过滤内部网络的所有端口(1-65535),***者难于发现切入点,可是为了不影响正常的服务,防火墙一但检测到服务必须开放高端口时,就在内存动态地添加一条规则打开相关的高端口。等服务完成后,这条规则就又被防火墙删除。这样,既保障了安全,又不影响正常服务,速度也快。
    反弹式***是对付这种防火墙的最有效的方法。***者在防火墙后面的某个受害系统事先安装好反弹式***,定时地连接外部*** 者控制的主机,由于连接是从内部发起的,防火墙(任何的防火墙)都认为是一个合法的连接,从而实现了***。防火墙不能区分***的连接和合法的连接——这是目前防火墙的盲区。
 
 
    据笔者所知,目前还没有相应的盾来抵住这支矛。所以保证防火墙后面的系统,不被非法的安装反弹式***是至关重要的第一步,扼守住这一步,就不会让反弹式***来传统防火墙被***了。
 
结语
 
    实际上,要绕过配置得当的防火墙是非常困难的。但是,时下发现的薄弱点的根源在于,防火墙的错误配置和缺乏管理性监视,一旦***者通过踩点和查点寻找到并判断出目标网络的路由器和防火墙之间的通路以及防火墙的类型,那么带来的后果可能是毁灭性的。
    ******技术不会因为我们不去了解它而不复存在;***们也不会因为我们不去学习、不去掌握抗击技术和工具而放弃对手无寸铁的我们的***。我们作为网管员,切记不能像鸵鸟那样,我们要在知识的获取上与***比速度,如果能先于***者之前了解这些知识,那么我们的安全就会更有保障。
 
 
 [S1]namp是一种网络探测和安全扫描器。它可以让系统管理员或好奇个人扫描大型网络决定那些机器开启并且提供哪些服务。nmap支持大量的扫描技术例如:UDP, TCP connect(), TCP SYN (half open), ftp proxy (bounce attack), Reverse-ident, ICMP (ping sweep), FIN, ACK sweep,Xmas Tree, SYN sweep, and Null scan.更多细节看扫描类型节。nmap同时提供了大量的高级特性,例如:通过TCP/IP指纹进行远程操作系统检测, stealth scanning, dynamic delay and retransmission calculations, parallel scanning, detection of down hosts via parallel pings, decoy scanning, port filtering detection, fragmentation scanning, and flexible target and port specification.
 
 [S2]即netcat,它被誉为网络安全界的“瑞士军刀”,它是一个简单而有用的工具,透过使用TCP或UDP协议的网络连接去读写数据。它被设计成一个稳定的后门工具,能够直接由其它程序和脚本轻松驱动。同时,它也是一个功能强大的网络调试和探测工具,能够建立你需要的几乎所有类型的网络连接,还有几个很有意思的内置功能。
 
 [S3]hping是一个基于命令行的TCP/IP工具,它在UNIX上得到很好的应用,不过它并非仅仅一个ICMP请求/响应工具,它还支持TCP, UDP, ICMP, RAW-IP 协议,以及一个路由模型HPING一直被用作安全工具,可以用来测试网络及主机的安全,它有以下功能:1:防火墙探测、2:高级端口扫描、3:网络测试;(可以用不同的协议,TOS,数据包碎片来实现此功能)、4:手工MTU发掘、5:高级路由(在任何协议下都可一实现)、6:指纹判断、7:细微UPTIME猜测……HPING也可以被研究人员用来学习TCP/IP,在以下OS上它可以运行于LINUX,FREEBSD,NETBSD,OPENBSD,SOLARIS. 目前最新版本为HPING3。官方网站在www.hping.org。
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值