使用WireShark分析SYNFlooding攻击
本文内容:
- 拒绝服务攻击的相关理论;
- 使用Hping发起SYN flooding攻击;
- Wireshark的流量图功能;
- SYN flooding攻击解决方案。
9.1拒绝服务攻击的相关理论
服务器所面临的最大威胁当数拒绝服务攻击,拒绝服务攻击其实是一类攻击的合称。所有这种类型的攻击的目的都是相同的,那就是要是使受攻击的服务器系统瘫痪或服务失效,从而使合法用户无法得到相应的资源。虽然服务器的功能多种多样,但是这些差异都是表现在应用层,无论它们使用的是什么应用程序,但是最终都会使用到传输层的协议。而传输层常用的协议只有TCP和UDP两种。因此攻击者只需要研究这两个协议的缺陷,就几乎可以实现对所有类型服务器的攻击。
目前已经出现了很多种类型的拒绝服务攻击方式,我们只挑选其中最为典型的两种SYN flooding攻击和UDP flooding攻击进行讲解。其中SYN flooding攻击是针对TCP协议的,它的主要目的是占用目标上所有可用的连接请求。而UDP flooding攻击则是针对UDP协议的,主要目的是耗尽目标所在网络的带宽。
9.1.1 TCP连接的建立方式
TCP协议在进行通信之前需要先建立连接,例如一个客户机和一个服务器之间在发送实际的数据之前,会互相向对方发送控制数据包。这个过程使得客户机和服务器都进入连接状态,然后就可以进行数据交换了,我们称其为3次握手。握手过程一旦完成,客户机和服务器之间就建立好了一个连接,因此我们在描述TCP协议时会说这是一个面向连接的协议。
一般我们用到的是这个字段,标志位,一般我们叫做SYN数据包,
与SYN相关的还有个字段,序列号,WireShark默认为三次握手的相对值,因此我们把它调回原来的样子,方便分析
编辑——首选项
protocols——TCP,去掉相对值的选项
可以看到序列号真实值很大,是个随机数,因为不希望他人猜出来
查看第二个数据包SYN,ACK数据包,因为它syn和ack字段都为1,因此叫它SYN,ACK数据包
而这里的ack序列号为951057940,是上一个ack数据包序列号加1得来的。
9.1.2 SYN flooding攻击
这种攻击最早出现于1996年,当时大量的网站服务器都遭受到了这种SYN flooding攻击。这种攻击利用了TCP连接的3次握手,但是这个握手过程是建立在理想状态下的而在实际状态下当服务器收到了来自客户端发送的SYN请求之后,会发出一个SYN-ACK回应,是连接进入到了半开状态,但是这个回应很有可能会因为网络问题无法达到客户端。所以此时需要给这个半开的连接设置一个计时器,如果计时完成了还没有收到客户端的ACK回应,就会重新发送SYN-ACK消息,直到超过一定次数之后才会释放连接。服务器需要为每一个半开连接分配一定的系统资源,所以当出现数量众多的半开连接时,服务器就会因为资源耗尽,进而停止对所有连接请求的响应。
9.2使用Hping3发起攻击
这次我们采用Kali Linux 2中自带的hping3来进行一次拒绝服务攻击。这是一款用于生成和解析TCP/IP协议数据包的开源工具,之前推出过hping和hping2两个版本,目前最新的版本是hping3,利用这款工具我们可以快速定制数据包的各个部分, hping3也是一个命令式的工具,其中的各种功能要依靠设置参数来实现。启动hping3的方式就是在Kali Linux2中启动一个终端,然后输入"hping3 "即可:
root@kali:-# hping3
hping3>
好了,现在我们就利用刚刚介绍过的hping3参数来构造一次基于TCP协议的拒绝服务攻击。在Kali Linux 2中打开一个终端,然后在终端中输入:
hping3 -q -n --rand-source -S -p 80 --flood 目标IP
这时攻击就开始了,在这个过程中可以随时使用Ctrl+C组合键来结束这次攻击。
几秒钟就抓了几十万个数据包,而且ip地址全是伪造的
9.3 Wireshark的流量图功能
查看流量图
左下角,的限制显示过滤器,勾上后会显示使用显示过滤器过滤后的包
以下为正常的tcp流
syn泛洪攻击的流,可以看到没有应答的包
9.4解决方案
- (1)丢弃第一个SYN数据包
- (2)反向探测
- (3)代理模式
WireShark支持插件显示ip地址地理位置
在编辑——首选项中设置ip协议,打上勾,支持地址转换功能
下载插件:
下载第三方库云盘地址:https://pan.baidu.com/s/1UV_G-47gv1B7yhSXuM5Bbw 提取码:lxu8
官方下载地址: https://dev.maxmind.com/geoip/geoip2/geolite2/
- 打开个人配置的文件夹
2. 新建个文件夹,把下载好的解压放进去
- 编辑——首选项——Name Resolution——MaxMind database directories——Edit,MaxMind DB 文件格式是使用高效的二进制搜索树将IPv4和IPv6地址映射到数据记录的数据库格式。
- 把刚刚新建的文件夹地址写上
完成
设置就是这么简单,但是这里没有看到很多人想要的经纬度信息,这是因为在wireshark更新后,它支持的第三方库文件的后缀就变成了.mmdb格式,这种格式GeoIP并没有放出有经纬度信息的,记得好像是因为License的问题。当然如果有需要使用经纬度信息,那么就去安装wireshark3.0以下的版本吧。
Wireshark3以下用的第三方数据库文件的格式是.dat的