一文讲述NAT服务与防火墙技术
防火墙,其实就是用于实现Linux下访问控制的功能的,它分为硬件和软件防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略、规则,以达到让它对出入网络的IP、数据进行检测。
随着网路越来越普及,网路安全已经成为一个急迫且重要的课题。关于网路安全,以及骇客们透过网路对于某些特定目标进行的各种攻击,近几年已经渐渐受到重视。本文就阻绝服务攻击(Denial of Service, DoS)来讨论其原理、攻击手法和所造成的伤害,并针对其中最为严重的ICMP DoS攻击,提出进一步的防御方法。
一、简介
DoS攻击的出现最初是在1996~97年之间,此时美国的资讯杂志上已流传着简单的DoS攻击工具[1];97~98年间美国网路危机处理中心(CERT Coordination Center, CERT®/CC)陆续公布出现不同手法的DoS攻击事件[2-6]。但是一直到去年年初(2000年2月),在Yahoo、Amazon等知名站台相继被骇客以分散式阻绝服务攻击(Distributed Denialof Service, DDos)的手法进行攻击,进而阻断其对客户的服务,以致使公司损失上千万之后,DoS攻击的严重性才真正浮上台面,成为网路安全讨论中的重点议题。
我们将在接下来的内容中说明目前已知的DoS攻击种类,并且针对其中的ICMP DoS攻击,论述其详细成因,以及防御的方法。
二、阻绝服务攻击手法介绍
DoS攻击的手法目前主要分为四大类,包括TCP DoS攻击、UDP Flood DoS攻击、DDoS攻击,以及ICMP DoS攻击等等。以下将会分项论述各种DoS攻击手法。
TCP DoS攻击
TCP DoS攻击,主要是由于攻击主机发送大量的或不正常的TCP网路封包,造成被攻击的目标主机当机、重新启动,或是目标网段的交通壅塞,以致于该主机无法继续进行某项服务。主要有三种攻击途径:
Land攻击:利用特殊的TCP封包传送至目标主机,使其因无法判别而当机或被迫重新启动。当封包的来源和目的主机的IP位址和埠号都相同的时候(经过伪造spoofed的封包),则会造成主机的损毁,或是当机[3]。Land攻击是利用TCP通讯协定中,定义规则与作业系统之间漏洞所造成的攻击手法,而由于与作业系统相关,许多新版本的OS(或经过修补patch后)都已经免疫于此种攻击手法(见附图1)。
Teardrop攻击:在IP层中定义的封包分割和重组的规则为:「分割后的封包的大小必须小于传输介面(interface)的MTU(maximum transfer unit,最大传送单位),并且符合以8 byte为单位的倍数。」Teardrop攻击就是利用这种分割重组间的漏洞而产生的攻击方式。正常的TCP封包片段应该是一个个以互相接续的方式传入目标主机,再由主机的IP层将其重组回原资料段。但如果有经过刻意制造的不正常封包序列(如封包大小改变等),则有可能会造成某些作业系统的当机或暂停服务[3]。
TCP SYN攻击:此种攻击主要是利用TCP连结时的三向交握讯息(three way handshake)来造成的。当攻击者恶意地送出许多TCP SYN封包给被攻击端,而没有后续连结的封包传出时,被攻击端的SYN queue会因为储存太多正在等待连结的资讯而超过其容许量,因而导致暂停服务。这就是TCP SYN攻击手法,相关资料与防御方法可参考[5,7-8]。
UDP Flood DoS攻击
UDP Flood Dos攻击又称为Fraggle攻击,它是透过UDP protocol送出假造来源的UDP broadcast封包至目标网路,以产生放大的资料流,目标埠号(port)通常为7(echo,回应服务);当目的网域中的众多主机回应之后,便可以造成网路的壅塞。即使某些IP位址没有回应,但产生的ICMP封包(type 3, Destination Unreachable)仍然可以达到DoS攻击的效果[9]。
DDoS攻击
DDoS就是2000年年初时全球知名网站攻击事件的主角。它是利用许多分散在世界各处的DoS agent(攻击代理人,或称执行者),在某一时刻点对特定目标主机以前述各种攻击手法的混和方式,将大量封包传入目标网域,以阻绝被攻击者的服务功能。其手法特别之处是必须先选定一定数目的主机,入侵并植入其DDoS agent程式,并在攻击发起时远端操控它们的行为;至于攻击原理,则和上述几种攻击相同。目前较为常见的DDoS tool有几种,包括TFN、trin00、以及TFN2K等等,相关资讯及防御方法请见[4,10-11]。
ICMP DoS攻击
ICMP(Internet Control Message Protocol)是TCP/IP通讯协定中定义封包的一种,主要功能是用来在网路上传递一些简单的控制讯号。ICMP DoS攻击主要有以下两种手法:
1.Ping of Death:在大部分的作业系统中都会提供”Ping”这个常见的系统指令;其功能为测试自身主机与某特定目标间连线是否畅通,这是典型的ICMP应用。它的工作原理是利用发出ICMP type 8的Echo Request给对方主机,当对方收到这个request封包后,IP层会发出一个中断(interrupt)讯号给作业系统,请系统回送一个type 0的Echo Reply。当原系统接收了这个回应之后,同样的IP层会中断作业系统,并由作业系统将此回应讯息传达给每一个曾经在系统中发出ICMP Echo Request的行程(process)[注1]。
除了Echo Request/Reply之外,ICMP还有其他种类的控制讯息[12],不过DoS主要采用这两个讯息来进行攻击,当然这跟它们本身的用途特殊有关。ICMP Echo Request/Reply的封包格式包括Option Data这一部分(附图2),虽然其内容可有可无,但是当Echo Request包含此部分资料时,接收端必须将这些资料原封不动的包含在Echo Reply中回送给发送端。
由于Option Data的大小并非固定,因此形成了有心人士用来破坏系统的安全漏洞。在TCP/IP的定义中,虽然没有明定封包的大小,但是小于65535 bytes的封包才算合法。只要刻意地将Echo Request的Option Data塞入大量资料,便可以造出超过65535 bytes的TCP/IP封包。当它送入被攻击端的电脑时,由于作业系统本身无法处理这种变形封包,因此会造成当机的状况。由于这是OS中对于ICMP处理的漏洞,因此部分的新版OS都已经针对这个问题作了修复(附图1)。
2.Smurf攻击:这是目前为止最为可怕的一种的DoS攻击,因为它可以在极短的时间内造成非常庞大的资料流,不但造成攻击目标的暂停服务,并且会使目标所在的网段壅塞,造成网路交通瘫痪。”Smurf”一词是从美国早期的电视卡通中得来的,国内引进后改名为「蓝色小精灵」,内容描述一群住在森林中的小精灵对抗坏巫师的故事。虽然听起来名字很可爱,但是却与DoS攻击中的可怕之处不谋而合(每一个封包size不大,但是数量庞大的封包从各处同时涌入目标主机,造成瘫痪)。
Smurf的攻击手法如下:透过前面已经介绍过的Ping工作原理,让它继续扮演这种类型攻击的要角。在TCP/IP对网路定址的定义中,有一个位址是用来代表此网段上的全部电脑的,这就是我们所称的广播(broadcast)位址,定义为「将子网路的bit全部设成1」。举例来说,对于192.168.1.0这个网域,其广播位址即为192.168.1.255。当封包目标IP为这个地址时,该封包会透过实体网路介面的广播网卡编号(以Ethernet为例,卡号为FF:FF:FF:FF:FF:FF)传送出去,而所有连接此网路的网路卡都会将此封包接收进主机中,对此封包进行回应或处理。Smurf攻击就是利用这一点来进行的[6,13-14]。
首先,攻击者会先假冒目标主机(受害者)之名向中介者(router)发出broadcast的ICMP Echo Request封包(利用IP spoofed)。因为是目的地是广播位址,中介者在收到之后会对该区域网段内的所有电脑发出此ICMP封包,而所有的电脑在接收到此讯息之后,依照前述”Ping”的动作,会对来源主机(亦即被假冒的攻击目标)送出ICMP Echo Reply回应。如此一来,所有的ICMP封包在极短的时间内涌入目标主机内,不但造成网路壅塞,更会使目标主机因为无法反应如此多的系统interrupt而导致当机、暂停服务。除此之外,如果一连串的ICMP broadcast封包流(packet flood)被送进目标网域内的话,将会造成网路交通长时间的极度壅塞,使该网域上的电脑(包括中介者router)都成为攻击的受害者。
Smurf攻击的可怕之处,就是在于利用体积很小的网路封包(难以被网管人员察觉)瞬间创造出击大量的封包流。举例来说,假设目标网域中有100台电脑,攻击者只需要送出20K bps的ICMP封包流,即可瞬间产生高达20 Mbps的资料量灌入目标主机;即使目标主机是用T1连结网路,平均的传输频宽(bandwidth)也只有1.544 Mbps[9],因此Smurf攻击可以轻易地耗尽这样的频宽资源。除此之外,由于此种攻击手法走的是ICMP通讯协定,简单的控制讯息又常为大众所忽略,也因此成为安全上的一大漏洞。由于此种攻击的严重性,本文后续部分即针对它现有的防御手法及漏洞作进一步讨论,并提出不同的解决方法。
三、现有对ICMP Dos攻击的防御
ICMP DoS攻击是目前最为恐怖,危险程度最高的一种DoS攻击,因此我们特别在此章针对它现有的防御方法作一介绍,讨论其适用及例外状况,并在下章提出进一步的解决方案。
如前所述,因为最近的新版作业系统都已经对Ping of Death做了漏洞修补,或可将其伤害控制在一定的范围中,因此相对的危害不并算大。本节重点为讨论另一种较为严重而难以防范的Smurf攻击。
Smurf攻击最初是于1998年1月为Craig A. Huegen发表的[13],之后美国网路危机处理中心陆续的公布相关的报导,并提出了一些因应对策的建议[6,15]。主要的解决方法都是基于Huegen所提出的几个对策[13],我们将在下面讨论其作法。
1.关闭 broadcast功能:
最主要的防范方法是将区域网路内的router的广播功能关闭。由于Smurf攻击中的重点就是「将小量的ICMP封包透过router的广播功能,传送给在网段上的每一台电脑」,因此router在这场攻击中扮演着举足轻重的放大器(amplifier)角色。当攻击者送出的broadcast ICMP Echo Request封包进到目标网域中时,网路层(IP layer)的广播位址(以前面的例子来说,192.168.1.255)必须要能够转换成实体层(Physical layer)的广播网卡编号(Mac address,以Ethernet网路卡来说,是FF:FF:FF:FF:FF:FF),才能够真正被所有主机的网路卡接收,而这个转换者,就是我们的放大器—router。所以,如果将router的广播功能关掉,便可以阻止此种broadcast封包的扩散,阻挡Smurf攻击以及其UDP变形—Fraggle攻击的肆虐。至于如何让router关闭广播功能,请参阅[6,13]的详细说明。
2.实行封包过滤( packet filtering) :
在router的广播功能必须打开的状况之下,又该如何防止外界恶意的Smurf攻击呢?由于典型的Smurf攻击手法是「从外部网路传送假造来源IP的ICMP封包」,因此另一种防御方法是,在内部网路对外联系的窗口,如router(或防火墙,如果有建立的话),实行封包过滤功能,阻挡外界不正常的ICMP封包(如来源IP为内部网路)进入;如Cisco router可以利用编辑存取名单(access list)的方式来完成[6]。
3.关闭 ICMP Echo Reply功能:
Huegen所提的最终解决方案是对Smurf攻击的回应封包来源做处理,亦即关闭在此网路上的每台主机对于ICMP Echo Request的回应。虽然这是很基本的防御措施,但这样做有两个缺点,一是会将正常的Echo Request Reply功能给挡掉,使得”Ping”指令无法使用,有可能会对网路系统的测试与管理,产生一些限制。某些较新的系统可以让使用者设定挡掉广播的Echo Request封包(如IBM AIX4.0,Solaris2.2.5以上版本等[13]),可以让系统的弹性较大一点。
四、进一步的解决方案:
在我们要提出新的解决方案之前,先来论述一下现有的防御方法有什么漏洞,或例外的状况。
依据Huegen的推论,认为在现今的应用软体或网路程式之中鲜少有使用到广播功能的,因此建议将其关闭。但是实际上,网路管理时便常需要借助广播功能。最基本的应用就是对网域内的所有电脑发出广播的Echo Request封包,借此来判断网路内各台主机是否存活(避免对每一台主机分别发出Ping指令)。另外,在以win32网路平台为主的作业环境内(如以WinNT做为网路伺服器,并且在没有WINS server的情况下),区域网路的连结可能会需要用到UDP的广播功能[ 13],基于这些因素,前一章所提的第一种防御方法「关闭router的广播功能」便有其限制。
除此之外,第二种方法「实行封包过滤」只适用于典型的Smurf攻击,亦即ICMP broadcast封包是由外界传入的。当遭受到来自网域内部的攻击时,这种防御方法却没有阻挡能力,如攻击者从远端操控网域内部已被种下木马的电脑进行攻击,或着纯粹是内部员工恶意的伤害行为。至于最后一种方法所造成的限制和不便,更是无庸置疑的。
即时网路监控以及动态封包过滤
因此,如果想要兼顾系统功能,又要免于遭受ICMP DoS攻击的侵害,从网路即时监控与动态封包过滤来着手较为可行。利用网路监控程式,随时监控区域网路中的封包数量,并配合动态封包过滤,以便达到防御DoS攻击的目的。
首先,我们可以利用现有的网路监控软体(如Microsoft Win2000的网路监视器、3rdparty的网路管理软体或防火墙等),或自行开发相关程式(如利用libpcap开发),即时监控网路上ICMP封包的数量。接着再配合封包过滤程式将网路流量依照重要性区分为数种状态:依据平时的封包流量与使用频宽来动态地建立安全流量等级,当封包流量不大于正常等级的25 %时为安全状态,程式可以让ICMP封包通过,并对Echo Request封包予以回应;一旦监测到同时存在于网路上的ICMP封包大过于正常等级的25 %时,便立即进入警戒状态。此时过滤程式便会立即丢弃(discard)接续而来的ICMP封包,不再予以回应;同时立即会对网路管理者发出通告,报告可能遭受DoS攻击的讯息,此时网路管理者便得以根据此通告的内容来采取适度的应对措施。当封包流量不再大于正常等级的25 %时,系统便会再度进入安全状态。值得注意的是,25%的预设警戒标准并非一成不变,网路管理者可以依据网路流量的相关统计量来作适度的调整。如此,便能够有效的防止ICMP的DoS攻击的发生,或降低伤害的程度,同时又兼顾系统使用的功能性。同样的防御方法亦可以用于控制不同的通讯协定(如TCP、UDP等),以抵挡其他种类的DoS攻击。
五、结论
ICMP DoS攻击的最可怕之处,是在于它利用正常网路使用中的合法功能,而将其应用到非法的途径上,这也是它最难以防范之处。本文即针对此种攻击手法做了详尽的说明与介绍,并进一步提出即时网路监控以及动态封包过滤这种可行的解决方案。虽然DoS攻击只不过是众多骇客攻击手法中的一种,但也正因为如此,网路安全这个议题的重要性将会随着网路的蓬勃发展而日益重要,实在需要所有相关的网路使用者一同关切与重视。
[注1].目前有新型的木马,便是利用ICMP的漏洞来传资料,以达到躲避防护软体侦测的情况下,与操控者连结。
附图1. OS防御各种DoS攻击的能力
附图1. OS防御各种DoS攻击的能力,取自[1],其中!!-无防御能力,!-可限制其伤害范围,x-可防御,?-情况不明。
更多相关知识尽在云的知识库,小伙伴们可以看《python如何进行ddos攻击?》来了解DDoS的知识。