专栏首页信安之路【作者投稿】Slowhttptest攻击原理

【作者投稿】Slowhttptest攻击原理

Slowhttptest其实是一个DoS压力测试工具,它集成有三种慢速攻击模式(slowloris、slow http post、slow read attack),并且能导出日志报告,节约了部分写文档的时间,是一个特别好用且强大的工具,下面笔者将逐个分析它主要的攻击模式及防御方法。

0x01. Slowhttptest安装


Mac安装命令:

brew update && brew install slowhttptest

linux安装命令:

apt-get update && apt-get install slowhttptest

安装好Slowhttptest之后可以直接执行命令Slowhttptest检测是否成功安装

下面截图是笔者Mac上装的Slowhttptest。

大家也可以利用GitHub安装,有兴趣的可以自己研究,命令如下:

git clone https://github.com/shekyan/slowhttptest

0x02. Slowloris模式


Slowloris攻击原理:

1.Slowloris也称为slow headers,是通过耗尽server的并发连接池来达到攻击目的的一种DoS攻击方式,这和前面讲的Syn-Flood有点相似,不过Slowloris是应用层的攻击

2.正常情况下当client和server通信时,client发送的header请求头信息的结尾应该是"0d0a0d0a"。但是如果启用Slowloris这种模式则只会发送"0d0a",而HTTP协议默认在服务器接收到全部信息之后才会开始处理,如果始终没有接收到完整的request信息那么服务器会为其保留连接池并持续等待后续信息直到连接超时

3.通常配置不太好的的服务器的并发连接池数并不多,当攻击者连续不间断的建立连接并占满server的连接池资源之后,server就不能为正常用户提供服务,达到DoS攻击效果

如果对上述原理不太理解,笔者给大家描述一个生活中常见的场景:当大家在麦当劳点餐的时候,最前面点餐的那个人点了一个汉堡,然后他还准备点其他东西,但是又一直不说要啥,就一直霸站着收银台导致后面的客人无法点餐,如果德克士的每个收银台都被这样的客人霸占着,那么最后就会导致麦当劳无法做生意了,也就造成了DoS

Slowloris攻击实战

环境准备:

  1. Mac端的Slowhttptest
  2. 靶机metasploitable 2.0 IP=192.168.1.103

实战演示:

ulimit -n 1024 && slowhttptest -c 1000 -H -g -o /Users/apple1/Desktop/my_header_stats -i 10 -r 100 -t GET -u https://host.example.com/index.html -x 24 -p 3

参数解释:

[ ulimit -n 1024 ] 指定同一时间能并发打开的文件数为 1024; [ -c 1000 ] 指定测试过程中与目标建立的连接数为1000; [ -H ] 指定开始SlowLoris攻击模式并发送未完成的HTTP请求; [ -g -o my_header_stats ] 让Slowhttptest生成CSV和HTML的报告文件,并指定路径/文件名 ; [ -i 10 ] Specifies the interval between follow up data ; [ -r 100 ] 指定连接速率为100/s ; [ -t GET ] 通过GET方式连接 ; [ -u https://host.example.com/index.html ]指定URL; [ -x 24 ] 启用慢速读取测试; [ -p 3 ] 官方:在判断server被DoS之前,发送连接请求之后,等待HTTP response的时间间隔为3S || 笔者:client发送request请求3S内没接收到server的response就标志服务器被DoS

可以看到几秒钟web服务器的连接池就被占满无法访问,下面是生成的html报告

0x03. Slow Http Post模式


Slow Http Post攻击原理

1.Slow Http Post也称作Slow body,其本质也是通过耗尽服务器的连接池来达到攻击目的,而且攻击过程和上面提到的Slowloris差不多

2.在Post攻击中http header头是完整发送的,但是这里会利用header头里面的content-length字段,正常情况下content-length的长度就是所要发送的数据长度,但是攻击者可以定制client发送的content-length,于是如果攻击者发送一个content-length特别大的值,那么server就会等待后续没有传完的body内容

3.此时攻击者会延迟发送后续的body甚至是不发送,但是server端依旧会在等待并为其保留连接池并持续等待后续信息直到连接超时

4.问题来了,如果攻击者与服务器建立大量连接,而且都告诉server后续还要传输数据,那么server的连接池到达一定程度时就会被占满达到DoS攻击

如果对上述原理不太理解,笔者给大家描述一个生活中常见的场景:当大家在麦当劳点餐的时候,最前面点餐的那个人点了一个汉堡,于是开始付钱,先付了一毛,给收银员说等我找找钱放哪了再付剩下的钱,但是又一直找不到不给,就一直霸站着收银台导致后面的客人无法点餐,如果德克士的每个收银台都被这样的客人霸占着,那么最后就会导致麦当劳无法做生意了,也就造成了DoS

Slow Http Post攻击实战

ulimit -n 4096 && slowhttptest -c 3000 -B -g -o /Users/apple1/Desktop/my_body_stats -i 110 -r 100 -s 8192 -t GET -u http://host.example.com/loginform.html -x 10 -p 3

参数解释:

[ -B ] 启用Slow Http Post模式发送未完成的HTTP消息体; [ -s ] 指定content-length长度为8192;

下面是生成的报告

0x04. Slow Read attack模式


Slow Read attack攻击原理

1.正如名字所描述的那样,就是慢速读取server传输过来的数据,如果大家看过我的sockstress那篇文章可知client可以通过控制TCP的window size来控制传输速率

2.如果攻击者将window size置为一个特别小的值,但是却又请求一个特别大的资源,那么服务器就会与这个连接进行长时间通信,如果建立的连接数足够大就会塞满server的连接池

3.当server端缓冲区未发送的资源堆积过多时还会导致缓冲区溢出,也无法响应其他请求

4.正如漏斗一样,漏斗口很小,但是我们却一个劲的往里面装沙子,这样迟早把漏斗涨满

Slow Read attack攻击实战

ulimit -n 8000 && slowhttptest -c 8000 -X -r 100 -g -o /Users/apple1/Desktop/my_header_stats -w 512 -y 1024 -n 5 -z 32 -k 3 -u https://host.example.com/resources/index.html -p 3

**参数解释**

[ -X ] 指定使用Slow Read attack模式,缓慢读取HTTP响应请求; [ -w 512 -y 1024 ] 指定window size大小为512~1024 byte; [ -n 5 ] 指定读取数据的间隔为5S; [ -z 32 ] 指定每次从接收数据的缓冲区中读取数据的长度为5 byte; [ -k 3 ] 在同一连接中重复请求的次数为3次

这次服务器不仅被DoS了,而且因为缓冲区溢出导致CPU被大量占用,导致无法执行其它系统命令

0x05. 防御策略

1.将标题和消息体限制在最小的合理长度上。针对接受数据的每个资源,设置更严格的特定于URL的限制。

2.设置合理的连接超时时间

3.定义最小传入数据速率,并删除比该速率慢的连接

4.如果Web服务器从相同的IP接收到数千个连接,同一个用户代理在短时间内请求相同的资源,直接禁掉IP并且记录日志

具体的防御策略大家可以参考这篇文章:

http://blog.shekyan.com/2011/11/how-to-protect-against-slow-http-attacks.html

本文分享自微信公众号 - 信安之路(xazlsec)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-10-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 私有git仓库gitlab搭建教程

    最近比较无聊,想研究下gitlab,所以就尝试了一下centos7下面gitlab的搭建

    繁花云
  • Go代码审计:Gitea远程命令执行漏洞链

    这是一个非常漂亮的漏洞链,很久没见过了。我用docker来复现并学习这个漏洞,官方提供了docker镜像,vulhub也会上线这个环境。

    FB客服
  • 资源 | 被GitHub和微软伤了心?这有9个开源代码版本控制系统

    事实上,当前有很多GitHub的替代解决方案,能为你做分布式版本控制(DVCS)。下面就来看看有哪些替代工具。

    大数据文摘
  • 为Spring Cloud Config插上管理的翅膀

    在Spring Cloud的微服务架构方案中虽然提供了Spring Cloud Config来担任配置中心的角色,但是该项目的功能在配置的管理层面还是非常欠缺的...

    程序猿DD
  • Git 内部原理之 Git 对象哈希

    在上一篇文章中,将了数据对象、树对象和提交对象三种Git对象,每种对象会计算出一个hash值。那么,Git是如何计算出Git对象的hash值?本文的内容就是来解...

    用户1257393
  • 让git不再跟踪配置文件的变化

    liulun
  • 一个小时学会Git

    最近要与部门同事一起做技术分享,我选择了Git,因为Git 是一种在全球范围都广受欢迎的版本控制系统。在开发过程中,为了跟踪代码,文档,项目等信息中的变化,版本...

    张果
  • 魔方 NewLife.Cube

    魔方 是一个基于 ASP.NET MVC 的 用户权限管理平台,可作为各种信息管理系统的基础框架。

    大石头
  • 推荐一个实用的 .gitignore 文件

    常用的版本控制工具,不管是使用 git 还是 svn,我们都需要排除一些与程序代码无关的文件,如像 eclipse/ intellij idea 等 IDE 工...

    Java技术栈
  • Spring Cloud Config采用Git存储时两种常用的配置策略

    这种模式下不同的项目会对应到 https://github.com/dyc87112/config-repo.git仓库下的不同目录,如果项目中 spring....

    程序猿DD

扫码关注云+社区

领取腾讯云代金券