DDOS 科普与防御
没有ddos演示,自己一把梭 ddos tools进行防御功能的有效性验证。
参考资料:all about ddos attacks: Become a DDos Guru
要小心“自我加冕的原创”,99%都是水货。你会发现叔很少“原创”,基本上会告诉你“数据源”或“底层思维”。
关于恐龙名词的定义,AI 一把梭即可: 拒绝服务攻击(DoS);分布式拒绝服务攻击(DDoS)
- ICMP 泛洪
DOS:单一IP指向目标同一个端口
DDOS:多个源IP
主动扫描:指向目标多个端口
ICMP Flood(DoS),ICMP泛洪:即ping ,发送大量的ICMP echo 请求数据包(可从RFC协议文档或AI中一把梭得到 echo 请求的协议字段与值)
Smurf Attack(DDoS):即蓝精灵的DDOS ping 攻击,攻击者机器-> c2服务器 ->僵尸网络->受害者机器。即已蓝精灵攻击行动来命名该DDOS攻击,贵攻击组织对此次蓝精灵行动负全责。
综上:即,DoS本质上是调试某个协议比如ICMP的不同协议字段的值进行尝试。比如大量的 ICMP type 8即,发送大量的 ICMP echo 请求。这是举一反三的基本理解力。即,DoS的流量形式五花八门,你可以自己总结归纳并已“原创”性的命名方式(比如都命名为银狐),对此次防御活动进行负责。
针对ICMP Flood(DoS)与 Smurf Attack(DDoS) 的防御:防御思路,不响应不转发相关ICMP echo请求流量即可;现代防火墙大多数已默认进行该攻击的防御了
- IP分片泛洪
IP Fragmentation Attack (DoS):数据包分割成更小的碎片,最大传输单元(MTU)小于原始数据包大小,接收主机会重组这些碎片。即,发送一个快递把快递分成三部分发最后再还原。
该DoS本质上即在寻找RFC IP协议包中的字段寻找分片或不分片的字段与值最后进行发送与验证从而进行开发出来的攻击思路。
即你RFC或者AI一把梭找到即可:即在协议字段flag处,设置如图所示的钵钵鸡值


wireshark DoS流量取证过滤器语法:ip.flags == 0x01

防御思路:它要分片就不让它分呗。设置DF flag,如果你能控制IP请求包的话;最常见的方法是检测传入数据包是否违反分片规则(比如使用路由器或安全代理不让它分呗,设置是否违反分片规则)
TCP Teardrop Attack,ICMP 和 UDP 的分片攻击也是同上的原理。
- TCP 三次握手 SYN 洪
攻击思路:即只大量SYN预握手呗,不管你是不是应答就是硬握呗。那么检测手段就是看你是不是硬握却没有应答呗。
wireshark DoS流量取证过滤器语法:tcp.flags.syn == 1 and tcp.flags.ack == 0
防御思路:增加预握手的缓冲队列;回收最旧的半开TCP连接;SYN cookies功能;在防火墙或代理上设置速率控制
进行cookie验证(Reset expect与cookie验证同理,无非就是通过RST包进行类似cookie验证,通过后再发给服务器;Reset Send同理 ):cookie验证, Reset expect,Reset Send都是增加了验证再转发的机制。之所以存在这三种方式是由于存在不同优缺点,我们不需要也不想知道。

- TCP ACK 洪(包括所有flags字段全部同理)
攻击思路:即直接发送大量 ACK 包(三次握手正常流程是 SYN -- SYN,ACK -- ACK),不走正常流程,一开始就直接发ACK呗。思路在于理论与实际产品落地的反差,看看请求包违反RFC规定之后防火墙又是否按照RFC理论处理还是按照贵司厂家自己处理?
wireshark DoS流量取证过滤器语法:tcp.flags.ack == 1 或者 tcp.analysis.duplicate_ack
防御思路:它不走三次握手直接发ACK即不搭理它呗。即观察服务器是否搭理发送的大量ACK包即可,服务器是否响应出站的ACK 和 SYN-ACK包。
TCP 协议其他flags字段与上同理,而且还会发生组合。可以随便组合,甚至所有flags全部为0。比如 XMAS 攻击就是把TCP协议里的所有字段(FIN,SYN,RST,ACK,URG)都设置成1:观察入站流量组织非法flags字段即可。
- TCP Connection Flood 连接洪
说白了就是直接进行TCP连接,走完三次握手。威胁狩猎就不局限于什么工具,只要任何工具能够发现TCP对话连接数的异常即可(你学的是底层思维,而不是wireshark具体怎么发现TCP DDOS的垃圾面试题,这个没用。就好像你要熟悉JAVA,PHP等搞得好像代码审计要熟悉这个似的,那你学到的自然都是垃圾。。)
wireshark DoS流量取证过滤器语法:statistics -- conversations
防御思路:速率控制;IP黑名单
- TCP Teardrop attack 泪滴攻击
路由器会检查这个片段偏移量的地方,攻击思路是故意改这里的值,利用该错误导致处理数据包的系统或应用程序发生致命崩溃。

防御思路:人工审计;IDS/IPS签名 TCP 异常(丢弃格式错误的数据包来防御泪滴攻击);所有现代设备都默认保护这种攻击。
基于基线对比,你可以快速发现正常和异常的偏移量是怎么个事儿,无需任何实战,现遇现查即可。
- UDP Flood
底层思维:发生一个请求,看它是否工作,然后发一堆这个请求,看它是否不堪重负
在正常情况下,服务器在特定端口上收到 UDP 数据包时,将通过以下两个步骤进行响应:
1.服务器首先检查是否有任何当前侦听指定端口请求的程序正在运行。
2.如果该端口上没有程序正在接收数据包,则服务器将以 ICMP (ping) 数据包作为响应,以告知发送方目标不可达。
综上:服务器收到UDP包后就要开始“工作”,攻击思路就是大量UDP包进行淹没
防御思路:wireshark过滤目标端口比如80 443(基线对比就会发现);限制ICMP响应速率;检查入站峰值,限制高容量攻击;需要配置速率控制的CDN;在了解攻击者的情况下最后才能考虑TTL过滤
UDP Fragmantaton 攻击与上述类似,只是检测方式不同,比如缺少目标端口
- HTTP flood(包括GET和POST)
HTTP请求与响应提一嘴:比如发送一个请求,服务器响应首页内容。攻击思路就是发送一堆请求,看它是否不堪重负或服务降级变卡
wireshark DoS流量取证过滤器语法:http.request.method == GET 或 http.request.method == POST
防御思路:统计与归纳出谁在发送一堆请求,比如HTTP头URI固定请求,比如 user-agent,比如异常HTTP请求无host头
如果攻击者更聪明则要考虑防御机制:HTTP Response challenges
当我们遇到challenges这个词时,就要知道它通常代表着存在一些认证与会话的环节了。
验证TCP cookie ,发送HTTP cookie,302重定向;验证http cookie ,添加到HTTP认证表,发送302重定向,最后再开始HTTP 请求。
是什么东西在HTTP请求之前先进行所谓的什么TCP cookie或http cookie认证?比如人机验证码。
在HTTP POST DOS攻击期间,challenges如下:
post请求中发送的数据将丢失;302重定向方法(部分浏览器收到302会将post转为get请求);JavaScript重定向导致大多数浏览器弹窗要求用户重新传输。
以上包括所有的Web攻击都不适用于HTTPS,防止HTTPS的唯一方法是使用传输层的方法
- Slow HTTP
服务器只能接受有限数量的同时连接。一旦达到阈值,它就无法再接受新连接,导致无法使用。生成大量连接以使服务器饱和,类似经典的拒绝服务攻击。然而,还有更微妙且资源消耗更小的方法:慢速HTTP攻击。
本质在于:通过非常慢的速度发送或接收数据,建立与服务器连接并保持连接,占用资源而不触发超时。
减慢头部发送速度:只要连接保持活跃,数据传输速度非常缓慢。例如,如果服务器在5秒无活动后断开连接,每4.5秒发送一个字符。
永远不要终止请求:为了防止服务器处理请求,绝不要发送最后的双重回车换行。相反,你会无限添加虚拟头部。由于HTTP规范允许未知头部,你只需发明新的头部即可。
两种攻击方式:Slow HTTP Headers 或 Slow POST(表单字段)

检查方式你可以通过以上的攻击思路得到:比如获取web服务器的超时时间,apache默认300秒;比如谁在非常缓慢的发送请求;限制连接次数;检查本身不简单,需要区分出这种攻击流量,然后直接限制就行了。
参考资料:https://blog.qualys.com/vulnerabilities-threat-research/2011/11/02/how-to-protect-against-slow-http-attacks
- DNS flood attack & DNS Amplification attack DNS洪与放大攻击
DNS flood attack 就是直接淹没DNS解析器,使得受害者无法使用DNS解析器(内网跑子域名你不限速,请问你是怎么想的?)
DNS放大攻击:攻击者利用僵尸网络伪造请求到开放的DNS解析器上,DNS解析器响应大量DNS响应包到受害者机器上
检测:监控53传入的DNS流量,超出阈值时报警
tcpdump -A -n dst port 53 and not host <local IPaddress>
防御思路:禁止未请求的DNS响应;丢弃快速重传;丢弃异常DNS查询和响应;建立基线用于对比恶意DNS查询;强制DNS客户端证明其未被伪造(强制TCP传输或重传);使用ACL,地理定位ACL和IP声誉系统;DNS challenge 解决方案
- memcached ddos attack
攻击者向易受攻击的 Memcached 服务器(加速网站和网络的数据库缓存系统)发送 HTTP GET 请求。易受攻击的服务器会以高倍率向目标发送UDP数据包。无认证机制,容易被滥用(不安全的Memcached配置导致的漏洞)。产生的流量巨大(Gbps或Tbps),没用CDN解决方案无法应对。
- NTP Flood, Chargen Flood, RTP Flood, SSDP(UPnP) Flood
NTP检测:源端口不是123立即丢弃;源端口是123则监控流量
Chargen检测:故障诊断的旧协议,如今变成了攻击向量,限制端口19阻止入站流量即可
RTP检测:出现于SIP(VoIP)中,监控端口5060和5061
SSDP(UPnP)检测:监控端口1900的入站流量;出现在即插即用设备,比如使用网络发现智能电视等
- SSL Floods
攻击者建立TLS会话,终止并反复循环这个过程;TLS对服务器成本开销大,会耗尽服务器资源
wireshark DoS流量取证过滤器语法:tcp.port == 443
检测:跟踪SSL会话数量,按分钟设置阈值;通常在负载均衡器(或CDN或反代或前置机)处终止SSL,而不是在服务器上
- 防御
需要防火墙设备的丢弃和允许规则;速率控制规则;负载均衡器(负载均衡器完成SSL配置,用另一个证书加密负载均衡器到服务器之间的流量)和路由器配置(ACL控制与速率控制);使用CDN(比如Cloudflare),CDN的保护有不同的保护协议与价格分类,不是全能的,比如基于DNS的流量保护只保护web和DNS流量,可能不会隐藏你的服务器源IP

浙公网安备 33010602011771号