一般的访问控制主要在防火墙中进行设置,制定一些安全策略:如内部局域网的资源不允许外部网上的用户使用;不设防区(又称非军事区)可以为内部或外部局域网,其中的资源允许外部网的用户有限度地使用;可以使外部用户访问非军事区(DMZ区)的WEB服务器等等。
深入分析研究防火墙技术,利用防火墙配置和实现的漏洞,可以对它实施攻击。通常情况下,有效的攻击都是从相关的子网进行的,因为这些网址得到了防火墙的信赖,虽说成功与否尚取决于机遇等其他因素,但对攻击者而言很值得一试。
突破防火墙系统最常用的方法是IP地址欺骗,它同时也是其他一系列攻击方法的基础。之所以使用这个方法,是因为IP自身的缺点。IP协议依据IP头中的目的地址项来发送IP数据包。如果目的地址是本地网络内的地址,该IP包就被直接发送到目的地。如果目的地址不在本地网络内,该IP包就会被发送到网关,再由网关决定将其发送到何处。这是IP路由IP包的方法。
IP路由IP包时对IP头中提供的IP源地址不做任何检查,并且认为IP头中的IP源地址即为发送该包的机器的IP地址。当接收到该包的目的主机要与源主机进行通讯时,它以接收到的IP包的IP头中IP源地址作为其发送的IP包的目的地址,来与源主机进行数据通讯。IP的这种数据通讯方式虽然非常简单和高效,但它同时也是IP的一个安全隐患,很多网络安全事故都是因为IP这个的缺点而引发的。
黑客或入侵者利用伪造的IP发送地址产生虚假的数据分组,乔装成来自内部站的分组过滤器,这种类型的攻击是非常危险的。关于涉及到的分组真正是内部的还是外部的分组被包装得看起来象内部的种种迹象都已丧失殆尽。只要系统发现发送地址在其自己的范围之内,则它就把该分组按内部通信对待并让其通过。
通常主机A与主机B的TCP连接(中间有或无防火墙)是通过主机A向主机B提出请求建立起来的,而其间A和B的确认仅仅根据由主机A产生并经主机B验证的初始序列号ISN。具体分三个步骤:
主机A产生它的ISN,传送给主机B,请求建立连接;B接收到来自A的带有SYN标志的ISN后,将自己本身的ISN连同应答信息ACK一同返回给A;A再将B传送来ISN及应答信息ACK返回给B。至此,正常情况,主机A与B的TCP连接就建立起来了。
B ---- SYN ----> A
B <---- SYN+ACK ---- A
B ---- ACK ----> A
假设C企图攻击A,因为A和B是相互信任的,如果C已经知道了被A信任的B,那么就要相办法使得B的网络功能瘫痪,防止别的东西干扰自己的攻击。在这里普遍使用的是SYN flood。攻击者向被攻击主机发送许多TCP- SYN包。这些TCP-SYN包的源地址并不是攻击者所在主机的IP地址,而是攻击者自己填入的IP地址。当被攻击主机接收到攻击者发送来的TCP-SYN包后,会为一个TCP连接分配一定的资源,并且会以接收到的数据包中的源地址(即攻击者自己伪造的IP地址)为目的地址向目的主机发送TCP-(SYN+ACK)应答包。
由于攻击者自己伪造的IP地址一定是精心选择的不存在的地址,所以被攻击主机永远也不可能收到它发送出去的TCP-(SYN+ACK)包的应答包,因而被攻击主机的TCP状态机会处于等待状态。如果被攻击主机的TCP状态机有超时控制的话,直到超时,为该连接分配的资源才会被回收。因此如果攻击者向被攻击主机发送足够多的TCP-SYN包,并且足够快,被攻击主机的TCP模块肯定会因为无法为新的TCP连接分配到系统资源而处于服务拒绝状态。并且即使被攻击主机所在网络的管理员监听到了攻击者的数据包也无法依据IP头的源地址信息判定攻击者是谁。
当B的网络功能暂时瘫痪,现在C必须想方设法确定A当前的ISN。首先连向25端口,因为SMTP是没有安全校验机制的,与前面类似,不过这次需要记录A的ISN,以及C到A的大致的RTT(round trip time)。这个步骤要重复多次以便求出RTT的平均值。一旦C知道了A的ISN基值和增加规律,就可以计算出从C到A需要RTT/2 的时间。然后立即进入攻击,否则在这之间有其他主机与A连接,ISN将比预料的多。
C向A发送带有SYN标志的数据段请求连接,只是信源IP改成了B。A向B回送SYN+ACK数据段,B已经无法响应,B的TCP层只是简单地丢弃A的回送数据段。这个时候C需要暂停一小会儿,让A有足够时间发送SYN+ACK,因为C看不到这个包。然后C再次伪装成B向A发送ACK,此时发送的数据段带有Z预测的A的ISN+1。如果预测准确,连接建立,数据传送开始。
问题在于即使连接建立,A仍然会向B发送数据,而不是C,C仍然无法看到A发往B的数据段,C必须蒙着头按照协议标准假冒B向A发送命令,于是攻击完成。如果预测不准确,A将发送一个带有RST标志的数据段异常终止连接,C只有从头再来。随着不断地纠正预测的ISN,攻击者最终会与目标主机建立一个会晤。通过这种方式,攻击者以合法用户的身份登录到目标主机而不需进一步的确认。如果反复试验使得目标主机能够接收对网络的ROOT登录,那么就可以完全控制整个网络。
C(B) ---- SYN ----> A
B <---- SYN+ACK ---- A
C(B) ---- ACK ----> A
C(B) ---- PSH ----> A
IP欺骗攻击利用了RPC服务器仅仅依赖于信源IP地址进行安全校验的特性,攻击最困难的地方在于预测A的ISN。攻击难度比较大,但成功的可能性也很大。C必须精确地预见可能从A发往B的信息,以及A期待来自B的什么应答信息,这要求攻击者对协议本身相当熟悉。同时需要明白,这种攻击根本不可能在交互状态下完成,必须写程序完成。当然在准备阶段可以用netxray之类的工具进行协议分析。
虽然IP欺骗攻击有着相当难度,但我们应该清醒地意识到,这种攻击非常广泛,入侵往往由这里开始。预防这种攻击还是比较容易的。IP本身的缺陷造成的安全隐患目前是无法从根本上消除的。我们只能采取一些弥补措施来使其造成的危害减少到最小的程度。防御这种攻击的最理想的方法是:每一个连接局域网的网关或路由器在决定是否允许外部的IP数据包进入局域网之前,先对来自外部的IP数据包进行检验。如果该IP包的IP源地址是其要进入的局域网内的IP地址,该IP包就被网关或路由器拒绝,不允许进入该局域网。
这种方法虽然能够很好的解决问题,但是考虑到一些以太网卡接收它们自己发出的数据包,并且在实际应用中局域网与局域网之间也常常需要有相互的信任关系以共享资源,这种方案不具备较好的实际价值。另外一种防御这种攻击的较为理想的方法是当IP数据包出局域网时检验其IP源地址。即每一个连接局域网的网关或路由器在决定是否允许本局域网内部的IP数据包发出局域网之前,先对来自该IP数据包的IP源地址进行检验。
如果该IP包的IP源地址不是其所在局域网内部的IP地址,该IP包就被网关或路由器拒绝,不允许该包离开局域网。这样一来,攻击者至少需要使用其所在局域网内的IP地址才能通过连接该局域网的网关或路由器。如果攻击者要进行攻击,根据其发出的IP数据包的IP源地址就会很容易找到谁实施了攻击。因此建议每一个ISP或局域网的网关路由器都对出去的IP数据包进行IP源地址的检验和过滤。如果每一个网关路由器都做到了这一点,IP源地址欺骗将基本上无法奏效。在当前并不是每一网关及路由器都能做到这一点的情况下,网络系统员只能将自己管理的网络至于尽可能严密的监视之下,以防备可能到来的攻击。