慢速 HTTP 拒绝服务: 分析、利用和缓解
慢速 HTTP 攻击Slow HTTP DoS Attack基于这样一个事实,即 HTTP 协议在设计上要求服务器在处置惩罚请求之前完全接收请求。假如 HTTP 请求未完成,大概传输速率很低,服务器就会一直占用资源等候其他数据。假如服务器占用过多资源,大概会导致目标主机拒绝服务。因为我们将制止其他用户通过协议连接或创建会话。对任何一个允许HTTP访问的服务器,攻击者先在客户端上向该服务器创建一个content-length比较大的连接,然后通过该连接以非常低的速度(例如,1秒~10秒发一个字节)向服务器发包,并维持该连接不停开。假如攻击者在客户端上不停创建这样的连接,服务器上可用的连接将慢慢被占满,从而导致服务器拒绝用户正常的访问申请。
简而言之,攻击者向网络服务器发送正当的 HTTP 请求头。在这些报文头中,正确指定了报文主体的大小。但是,信息主体的发送速度却非常慢。这种速度可以慢到每两分钟一个字节,但还不足以导致客户端-服务器传输超时,从而导致会话关闭。由于信息是正常处置惩罚的,目标服务器会积极服从规则,因此服务器的速度会随之大大降低。当攻击者同时发起数百甚至数千次 "慢速 HTTP "攻击时,服务器资源险些在几秒钟内就会被消耗殆尽,导致正当客户端连接无法访问。这类攻击很轻易实行,因为使用最小带宽的单台呆板可以在很短的时间内(最多 65539 次)创建数千个连接,产生数千个未完成的 HTTP 请求。
可骇的是,这些攻击很难与正常流量区分开来。由于它们不需要应用层的大量资源,因此可以从一台计算机启动,这使得它们非常轻易启动且难以缓解。传统的速度检测技能无法制止此类攻击。也许一种方法是更新服务器的可用性,服务器上的可用连接越多(nginx 的 max_clients = worker_processes * worker_connections),攻击压垮该服务器的大概性就越小。不幸的是,在很多情况下,攻击者会简单地扩大攻击规模,试图尽大概多地超载。这些攻击大概就像耗时较长的正当请求,因此很难使用传统的反 DoS 工具进行检测和制止。我给你留了一个纸条,通过这种攻击的页面:
工作原理
分析 HTTP GET 请求有助于更好地解释慢速 HTTP DoS 攻击怎样以及为何大概发生。
一个简单的请求如下所示:
特别值得留意的是上述 GET 请求中的 [CRLF]。回车换行(CRLF)是一个不可打印字符,用于表示一行的结束。与文本编辑器类似,HTTP 请求会在行尾包含一个 [CRLF] 字符以开始新行,并包含两个 [CRLF] 字符(即 [CRLF] [CRLF])以指示空行。
HTTP 协议将空行定义为标头的结束。慢速 HTTP DoS 攻击就是利用了这一点,不发送尾部空行来完成报头。
更糟的是,入侵检测体系(IDS)通常检测不到慢速 HTTP DoS 攻击,因为这种攻击不包含恶意代码请求。在 IDS(入侵检测体系)看来,HTTP 请求是正当的,并会将其转达给网络服务器,而不会察觉到攻击。
开发
在对技能进行微调时,一个紧张的信息是确定服务器上保持连接状态的最长时间(秒),这将使我们能够优化作为攻击者的资源。
一个 Python 脚本就能完成这项工作():
在第一次尝试中,我们的窗口大小是 75 秒,第 8 条调试信息告诉我们服务器关闭了连接,因此这不是我们的值,作为攻击者,我们将浪费 1 秒钟来启动另一个新连接。因此,我们用 74 秒进行了测试,成功地保持了会话的活力。
工具https://github.com/shekyan/slowhttptest
docker pull shekyan/slowhttptest
根据这些测试,我们的命令将如下所示:
slowhttptest -c 65539 -H -g -o report.csv -i 10 -r 200 -t GET -u https://targethost.com:443 -x 74 -p 3 -l 1800
-c 65539 // 同时启动的最大连接数
-h // slowloris 模式 - 慢速 http
-g // 生成 CSV 和 HTML 格式的统计数据
-o report.csv // 自定义输出文件的路径和/或名称,假如指定了 -g 则有效
-i 10 // 每次会话发送信息的隔断时间(以秒为单位),这意味着 HTTP 会话打开后,将等候 10 秒发送信息,以此类推。
-r 200 // 连接比率,每次启动 200 个连接,它们是累积的,根据攻击服务器的处置惩罚速度,5 秒后我们将有 1000 个及时连接。
-t GET // 在攻击中使用的 HTTP 方法
-u https://targethost.com:443 // 目标 URL,与在浏览器中输入的格式相同
-x 74 // 会话的最长持续时间,该值从第一次保持存活测试中获得
-3 // 请求探针,用于监控服务器在攻击期间是否正常相应,3 秒被设定为最长等候时间,假如在规定秒数后服务器没有相应,则认为服务器被 DoSed。
-l 1800 // 指定以秒为单位的攻击持续时间(本例中为 30 分钟)
请求探针的相应时间凌驾 3 秒,因此被视为 DoSed。
因此,我们将访问该网站,检查它是否如脚本所示在运行:
事实上,我们已经耗尽了服务器的资源,因此它不再接受正当连接,以至于主机注册的 DNS 服务显示路由希望顺利,直到它到达服务器并产生 HTTP 522 错误。522 代码代表连接超时,是在验证网络服务器和 DNS 之间的 TCP 连接是否相互同意时产生的。
更多
今天先到这儿,盼望对云原生,技能领导力, 企业管理,体系架构设计与评估,团队管理, 项目管理, 产物管管,团队建设 有参考作用 , 您大概感兴趣的文章:
领导人怎样带领好团队
构建创业公司突击小团队
国际化情况下体系架构演化
微服务架构设计
视频直播平台的体系架构演化
微服务与Docker介绍
Docker与CI持续集成/CD
互联网电商购物车架构演变案例
互联网业务场景下消息队列架构
互联网高效研发团队管理演进之一
消息体系架构设计演进
互联网电商搜索架构演化之一
企业信息化与软件工程的迷思
企业项目化管理介绍
软件项目成功之要素
人际沟透风格介绍一
精益IT组织与分享式领导
学习型组织与企业
企业创新文化与品级观念
组织目标与个人目标
初创公司人才招聘与管理
人才公司情况与企业文化
企业文化、团队文化与知识共享
高效能的团队建设
项目管理沟通计划
构建高效的研发与主动化运维
某大型电商云平台实践
互联网数据库架构设计思绪
IT基础架构规划方案一(网络体系规划)
餐饮行业解决方案之客户分析流程
餐饮行业解决方案之采购战略订定与实行流程
餐饮行业解决方案之业务设计流程
供应链需求调研CheckList
企业应用之性能及时度量体系演变 如有想了解更多软件设计与架构, 体系IT,企业信息化, 团队管理 资讯,请关注我的微信订阅号:
作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,接待转载,但未经作者同意必须保存此段声明,且在文章页面明显位置给出原文连接,否则保存追究法律责任的权利。 该文章也同时发布在我的独立博客中-Petter Liu Blog。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |