【参加讨论】3、拒绝服务攻击的发展
由于我们防范手段的加强,拒绝服务攻击手法也在不断的发展。
tribe flood network (tfn) 和tfn2k引入了一个新概念:分布式。这些程序可以使得分散在互连网各处的机器共同完成对一台主机攻击的操作,从而使主机看起来好象是遭到了不同位置的许多主机的攻击。这些分散的机器由几台主控制机操作进行多种类型的攻击,如udp flood, syn flood等。
操作系统和网络设备的缺陷在不断地被发现并被黑客所利用来进行恶意的攻击。如果我们清楚的认识到了这一点,我们应当使用下面的两步来尽量阻止网络攻击保护我们的网络:
a)尽可能的修正已经发现的问题和系统漏洞。
b)识别,跟踪或禁止这些令人讨厌的机器或网络对我们的访问。
我们先来讨论一下b),在b)中我们面临的主要问题是如何识别那些恶意攻击的主机,特别是使用拒绝服务攻击的机器。因为这些机器隐藏了他们自己的地址,而冒用被攻击者的地址。攻击者使用了数以千记的恶意伪造包来使我们的主机受到攻击。"tfn2k"的原理就象上面讲的这么简单,而他只不过又提供了一个形象的界面。假如您遭到了分布式的拒绝服务攻击,实在是很难处理。
解决此类问题的一些专业手段----包过滤及其他的路由设置
有一些简单的手法来防止拒绝服务式的攻击。最为常用的一种当然是时刻关注安全信息以期待最好的方法出现。管理员应当订阅安全信息报告,实时的关注所有安全问题的发展。:)
第二步是应用包过滤的技术,主要是过滤对外开放的端口。这些手段主要是防止假冒地址的攻击,使得外部机器无法假冒内部机器的地址来对内部机器发动攻击。
我们可以使用cisco ios来检查路由器的详细设置,当然,它也不仅限于cisco的设备,但由于现在cisco设备在网络中占有了越来越多的市场份额(83%),所以我们还是以它为例子,假如还有人有其他的例子,我们也非常高兴你能提出您的宝贵信息。
登陆到将要配置的路由器上,在配置访问控制列表之前先初始化一遍:
c3600(config)#access-list 100 permit ip 207.22.212.0 0.0.0.255 any
c3600(config)#access-list 100 deny ip any any
然后我们假设在路由器的s0口上进行acl的设置,我们进入s0口,并进入配置状态:
c3600(config)#int ser 0
c3600(config-if)#ip access-group 100 out
通过显示access-list来确认访问权限已经生效:
c3600#sho access-lists 100
extended ip access list 100
permit ip 207.22.212.0 0.0.0.255 any (5 matches)
deny ip any any (25202 matches)
对于应该使用向内的包过滤还是使用向外的包过滤一直存在着争论。rfc 2267建议在全球范围的互连网上使用向内过滤的机制,但是这样会带来很多的麻烦,在中等级别的路由器上使用访问控制列表不会带来太大的麻烦,但是已经满载的骨干路由器上会受到明显的威胁。
另一方面,isp如果使用向外的包过滤措施会把过载的流量转移到一些不太忙的设备上。 isp也不关心消费者是否在他们的边界路由器上使用这种技术。当然,这种过滤技术也并不是万无一失的,这依赖于管理人员采用的过滤机制。
我们经常会听到设备销售或集成商这样的推脱之词,他们总是说使用acl会导致路由器和网络性能的下降。acl确实会降低路由器的性能并加重cpu的负载,但这是微乎其微的。我们曾经在cisco 2600 和3600系列路由器上作过实验:
以下是不使用和使用acl时的对照表:
test speed w/o acl (mbps) w/ acl (mbps) w/o acl (total time) w/ acl (total time) % change
cisco 2600 100mbps -> 100 mbps file transfers 36.17 mbps 35.46 mbps 88.5 90.2 2.50%
cisco 3600 10mbps -> 10mbps file transfers 7.95 mbps 8.0mbps 397 395 0.30%
使用的路由器配置如下:
2 cisco 3640 (64mb ram, r4700 processor, ios v12.0.5t)
2 cisco 2600 (128mb ram, mpc860 processor, ios v12.0.5t)
由表我们可以看出,在使用acl前后对路由器性能的影响并不是很大。
4、使用dns来跟踪匿名攻击
也许大家仍旧保存着侥幸心理,认为这些互连网上给我们带来无数麻烦dos漏洞或许随着路由器包过滤,网络协议升级到ipv6或者随时的远程响应等手段变得越来越不重要。但从一个具有责任感的网管的观点来看,我们的目标并不是仅仅阻止拒绝服务攻击,而是要追究到攻击的发起原因及操作者。
当网络中有人使用假冒了源地址的工具(如tfn2k)时,我们虽然没有现成的工具来确认它的合法性,但我们可以通过使用dns来对其进行分析:
假如攻击者选定了目标www.technotronic.com,他必须首先发送一个dns请求来解析这个域名,通常那些攻击工具工具会自己执行这一步,调用gethostbyname()函数或者相应的应用程序接口,也就是说,在攻击事件发生前的dns请求会提供给我们一个相关列表,我们可以利用它来定位攻击者。
使用现成工具或者手工读取dns请求日志,来读取dns可疑的请求列表都是切实可行的,然而,它有三个主要的缺点:
1) 攻击者一般会以本地的dns为出发点来对地址进行解析查询,因此我们查到的dns请求的发起者有可能不是攻击者本身,而是他所请求的本地dns服务器。尽管这样,如果攻击者隐藏在一个拥有本地dns的组织内,我们就可以把该组织作为查询的起点。
2) 攻击者有可能已经知道攻击目标的ip地址,或者通过其他手段(host, ping)知道了目标的ip地址,亦或是攻击者在查询到ip地址后很长一段时间才开始攻击,这样我们就无法从dns请求的时间段上来判断攻击者(或他们的本地服务器)。
3) dns对不同的域名都有一个却省的存活时间,因此攻击者可以使用存储在dns缓存中的信息来解析域名。为了更好做出详细的解析记录,您可以把dns却省的ttl时间缩小,但这样会导致dns更多的去查询所以会加重网络带宽的使用。
在许多情况下,只要您拥有足够的磁盘空间,记录所有的dns请求并不是一种有害的做法。在bind8.2中做记录的话,可以在named.conf中假如下面的几行:
logging {
channel requestlog { file "dns.log"; };
category queries { requestlog; };
};