当前位置:嗨网首页>书籍在线阅读

11-小心拒绝服务攻击

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

38.10 小心拒绝服务攻击

随着基于Internet服务的增长,系统相应受到远程拒绝服务(DoS)的攻击的可能性也在增长。这些攻击通过向服务器发送能导致其崩溃的错误数据或使用虚假请求给服务器增加过量的负载使得系统无法向合法用户提供正常的服务。

本地的拒绝服务攻击也是有可能的。最知名的例子是当用户运行一个简单的fork炸弹(一个重复执行fork的程序,因此会消耗系统中的所有进程槽)。但引起本地拒绝服务的源头更加容易确定,因此一般来讲可以通过合适的物理和密码安全措施来避免。

处理错误的请求是比较直观的——服务器应该严格地像上面描述的那样检查其输入以避免缓冲区溢出。

超负荷攻击更加难以处理。由于服务器无法控制远程客户端的行为以及它们提交请求的速率,因此这样的攻击几乎无法防止。(服务器甚至无法确定攻击的真正源头,因为网络包的源IP地址是可以伪造的。此外,分布式攻击可能会募集不知情的中间主机向目标系统发起攻击。)不过,仍然可以采取各种措施把超负荷攻击的风险和损失降到最小。

  • 服务器应该执行负载控制,当负载超过预先设定的限制之后就丢弃请求。这可能会导致丢弃合法的请求,但能够防止服务器和主机机器的负载过大。资源限制和磁盘限额的使用也有助于限制过量的负载。(更多有关磁盘限额的信息可参考http://sourceforge.net/projects/linuxquota/。)
  • 服务器应该为与客户端的通信设置超时时间,这样如果客户端不响应(可能是故意的),那么服务器也不会永远地等待客户端。
  • 在发生超负荷时,服务器应该记录下合适的信息以便系统管理员得知这个问题。(但日志记录应该也是有限制的,这样日志记录本身不会给系统增加过量的负载。)
  • 服务器程序在碰到预期之外的负载时不应该崩溃。如应该严格进行边界检查以确保过多的请求不会造成数据结构溢出。
  • 设计的数据结构应该能够避免算法复杂度攻击。如二叉树应该是平衡的,并且在常规负载下应该能提供可接受的性能。但攻击者可能会构造一组会导致树不平衡(在最坏的情况下等价于一个链表)的输入,从而降低性能。[Crosby & Wallach, 2003]详细描述了此类攻击的性质并讨论了能够用来避免此类攻击的数据结构技术。