cve-2008-4609
1.背景
根据描述,是tcp协议栈的问题,在linux,windows等平台都存在。这实际是一种dos的方法,称为sockstress
2.Sockstress
SockStress攻击利用建立TCP/IP三次握手连接来实现拒绝服务攻击,而且与Syn-Flood不同它并非通过耗尽服务器的TCP连接数来让正常用户的正常请求无法响应,而是直接耗尽服务端的内存、CPU等资源让受害者宕机,属于非对称的资源消耗攻击
3.原理
1.首先,攻击者大量请求建立三次握手连接
2.成功建立ESTABLISHED之后,攻击者会将数据包中window的值置为0(window的意思代表client这边一次可以接受的数据大小,置为0之后表示client没有window来接受server发来的数据,然后server就会分配内存来维持TCP连接直到client有空闲的window与之通信),然而client(攻击者)不会维持连接,只会不断的请求TCP连接耗尽server(靶机)的资源
3.当server这端维持连接达到一定数量之后,内存、CPU甚至是SWAP分区都会被耗尽,系统命令不能正常执行
4.复现
攻击者(kali,192.168.96.135),靶机(win7,196.168.96.132)
Kali执行
Win7上开了phpstudy,默认80端口开放
攻击前:
攻击后
5.代码分析
作为攻击者,主要是构造第一次握手的数据包(syn)和第三次握手的数据包(synack)
相应函数分别如下
6.流量分析
大量建立连接(三次握手的前两次)
在kali向win7发的ack(三次握手的最后一次)包中置windows size为0
检测方案:
检测到特征:
1.同一地址同一时间段大量发起tcp请求
2.根据tcp报文格式,检测到窗口字段设置为0
附图:tcp报文格式