DDoS攻击新玩法之WebSocket - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

DDoS攻击新玩法之WebSocket

bt0sea web安全 2018-02-19 10:15:11
712773
收藏

导语:各大公司发现它们需要一种高效节能、简单易用的双向通信机制来保证数据的实时传输。在此背景下,基于HTML5规范的、有Web TCP之称的WebSocket应运而生。也就是我们一直说的web通讯的长连接。

0x01、WebSocket应用描述&安全业务需求

伴随着互联网技术的发展,实时交互的应用场景在互联网公司大规模使用,例如:

(1)多玩家App游戏,例如棋牌游戏

(2)Web导航中的地理位置获取

(3)即时聊天通讯

各大公司发现它们需要一种高效节能、简单易用的双向通信机制来保证数据的实时传输。在此背景下,基于HTML5规范的、有Web TCP之称的WebSocket应运而生。也就是我们一直说的web通讯的长连接。

WebSocket在建立连接后,WebSocket服务器和Client Agent都能主动的向对方发送或接收数据,就像Socket一样。

blob.png

在DDoS攻防领域目前很多游戏,包括棋牌类游戏,百万竞猜答题,都在使用WebSocket协议做通讯。服务器端是Apache Jetty or Tomcat等。传统WebSocket和WSS防护瓶颈,

(1)由于对Web层协议无法支持,主要是基于DDoS防火墙4层防御,看不到内部的通讯原理4层防火墙程序一旦配置不当,App游戏会出现卡顿和掉线情况。

(2)针对CC攻击,由于4层防火墙限制基于源和目的的限速会导致误杀,无法处理特别是NAT后IP请求频率,需要动态调整。

(3)由于客户App程序超时时间为变动值,有可能触发4层防护墙防护空连接检查策略

0x02、4/7层防火墙原理探究

为了更好的理解WebSocket防护原理,我们首先要研究一下高防产品4/7层防护系统是如何处理进入到防火墙集群的数据如何流转。哪些细节是涉及到针对使用WebSocket or WSS的App游戏。

数据流主要经过几个阶段,包括SYN、ACK、HTTP。所以从以上3个阶段分析一下。再此之前要先看一下DDoS整体处理流程。

DDoS防火墙处理大致流程:

blob.png

备注:由于各家防火墙防护机制不同,部分处理有差异

数据流进入DDoS防护引擎需要经过群组流控、全局白名单、全局ACL控制、全局黑名单、畸形包处理、然后进入到SYN防护流程、ACK防护流程、UDP防护流程、ICMP防护流程、还有其他协议的处理流程(SIP等)。

SYN处理流程:

blob.png

SYN处理流程经过:报文合法性检测,群组源IP带宽限制,空连接处理,连接数耗尽处理,3秒重传检测,最后进入防护SYN算法(达到pps阈值防护算法,同时设置限制反向探测阈值)

ACK防护流程:

blob.png

ACK防护流程:主要是包含几部分,第一部分是判断是不是http数据流,如果是进入URL-ACL处理部分和CC处理部分,如果不是则通过ACK用户设置pps判断进入ACK算法处理流程,同时如果选择带回探算法,需要设置探测截止pps,如果回源流量收钱的话,这是降低成本的方法。

CC防护策略:

blob.png

CC防护流程:首先处理用户自定义策略,比如:哪些主机IP、Referer、URL(支持正则)、User-agent、X_forwarded_for等黑白名单。然后确定CC策略是否开启,进入判断CC_QPS,判断如果单IP和总量超过用户设定的QPS阈值。然后进入对超出阈值的IP访问进行防机器人提交的方法,从轻到重的处罚,302跳转、JS跳转、弹验证等。

通过以上防护策略描述大家应该知道哪些配置影响websocket游戏长连接处理。

0x03、高防产品如何支持Web socket&WSS

这个问题涉及到你高防系统架构问题,如果你的高防防火墙是4/7处理后再转发到用户源站,还是前端防护墙只处理4层DDoS攻击,然后把7层处理放到7层转发系统之上。各有利弊,放到前面可以复用4层处理的数据,包括动态信任列表等,放到后面SLB升级灵活。

如果你的slb在nginx 或者tengine上修改的。

WebSocket使用 ws 或 wss 的统一资源标志符,根据高防产品共享Nginx代理方式,我们需要同时支持http和WebSocket转发。Nginx1.3版本以上就支持WebSocket了,但是要求http支持1.1版本。如果高防产品是自动化配置管理,那还需要升级自动化配置程序,WSS证书和https配置相同。

blob.png

server {
listen80;
server_namews.test
location / {
proxy_pass http://127.0.0.1:8001/;
proxy_redirectoff;
proxy_http_version1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
  }
}

针对WS协议的攻击目前还没有太牛的案例,所以使用传统CC防护算法可以满足需求,如果出现在一个连接中出现海量提交,可以在代码中加入特殊处理流程。


  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2022 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务