前言:这篇东西基本是为写网络服务软件的朋友所写,也是我自己开发网络服务软件中的一点心得,当然不是网络服务软件开发者,也可以看一下,看看我们使用的软件,是何等的不堪一击。
现在大家使用的网络服务软件,象httpd,ftpd,http proxy,socks proxy,流媒体服务,游戏服务器等网络服务软件,其实在安全上是做差的,我并不是指溢出等情况,我是指一般恶意的远程拒绝服务的攻击(这里也 并不指那些发虚拟IP的syn攻击),这里我所指的攻击,只是一般的open/close的攻击。open/close攻击其实就是用软件不断向网络服务的端口进行连接,当连接上后,又断开,然后循环地进行这个流程。这种攻击的软件会生成很多的连接去攻击(根据msdn,一个进程在默认使用1M堆栈去创建一个线程的情况 下,如果系统资源足够,最大可以创建2028个线程)。可以想象到,这种攻击软件可以使用最大 2028个线程进进行攻击,这种攻击去95%以上网络服务器软件有效,这种攻击的效果就是大量 占用服务器软件处理连接的时间,从而达到令服务器软件无法处理到正常的连接,而这种攻击又会引发 运行那个服务器软件的系统的各种资源使用的升高(CPU,内存,各种句柄等)。经过测试,一台超过2 Ghz的系统,当有超过2000个连接不停地进行这种open/close的攻击时,CPU最高时会使用超过70%,更 多的连接,会令CPU的使用率达到100%,而且在攻击期间,正常的连接,几乎无法连接上服务,因为 远程服务正在忙着处理过多的,同时涌入的连接,而将正常连接丢弃或无法正常处理。基于这么简单的 攻击,就可以造成这样大的影响,所以是有必要给网络服务软件加上个“防火墙”。
现时的网络服务软件的编写模式,基本可以看是是两种模式。多线程模式和非多线程模式。多线程模式 基本就是给每一个连接创建一个新的线程去处理这个连接的请求,而非多线程模式,基本上就是只使用 单个或几个线程,利用各种消息机制(系统的消息机制,事件机制或I/O机制)去处理所有连接的请求。 而对于上面所说的攻击,多线程模式受到的影响更大,这是由于多线程模式的服务器软件,要不停的 创建线程(创建新线程是非常花系统资源的),就算使用线程池,由于受多线程模式的限制(上面所说 的一个进程在资源足够的默认的情况下,最多可以创建2028个线程),如果攻击的连接到达或大于2028 时,多线程模式的网络服务软件基本上是处于“停止接受新的连接”状态了,因为无法为新连接创建一 个新的线程了,这时拒绝服务是完全成功了。而在市场上可以下载到的网络服务器软件中,多线程模式的占了85%以上。
对于防止这种攻击的机制,其它就很简单,就是封住了攻击者的IP,让它无法连接到服务软件打开端口进 行这类攻击,这就是主题所说的给软件加上个“防火墙“了。
如何给软件加上个”防火墙“呢?难道要自己写一个吗?可能性之一,除些外,还有其它的的选择的。
注:由于网络服务器软件基本99%以上都是运行在NT系统中的,所以以下的方法不将WIN9x和ME包括在内。
1。使用系统本身的机制进行限制 A.IPSEC IPSEC机制和防火墙也有类似,也是在驱动层过滤掉各类的包,但可惜的是,微软并没有给IPSEC公开过 API,所以要调用IPSEC去对付攻击者,只能调用微软的rootkit的工具,将攻击者的IP写入IPSEC的规则中去,让系统去对付攻击者。 优点:可以很有效地对付这类攻击 缺点:如果攻击的IP比较多时,需要写入很多规则,而且由于管理员做过安全限制,服务性软件并不能将规则成功写入。
B.系统本身的filter driver win 2k或以上系统,微软都带有个filter driver,而且这个是有提供API的,只要对软件做个防护机制,当攻击 连接到达一个上限时,就将这个IP加入到系统的filter driver所不允许的列表中去。 优点:对此类攻击一样有效 缺点:win 2k pro好象没有这个驱动存在,而且在一些系统也有可能被管理员删除,可能会令防护失败。
2。自己写个filter driver作为防火墙 并不是太困难,而且可以实现更多的防护功能,最好的一个选择,虽然以防火墙来说,这种模式是最差劲的,但对于抵抗这种攻击,已经足够了。
有人会说直接装个防火墙就行了,当然这也是一种解决方法,但是服务器有可能并不是一天24小时有人值守的,而且因为服务器软件是对外开放的,防火墙并不能预防这种攻击,只能是遭到攻击后,管理员 知道是这么回事,才可以将攻击IP加入到防火墙中去。这样做不是太不智能和太麻烦了吗? 也会有人说加入这些功能到网络服务软件,也防不了虚假IP的syn攻击。莫说是这样攻击的防护模式,就算是商业性的专业防火墙软件,有哪个能防止这种攻击呢?而且在IPV6的来到前,很多ISP也开始在路由 中做设置,不让自己的客户向外发送虚假的syn包了。对于在比较有效的硬件防火墙后的系统,就不受这 种syn攻击影响,但硬件防火墙后的系统中运行的网络服务软件,却一样可以受到这种open/close的攻击 所影响。
有什么错漏,请指出。有什么更好的方法或思路,也请指教。 【转自世纪安全网 http://www.21safe.com】
|