一、SYN Flooding
1.1 简介
鼎鼎大名的SYN flooding攻击相信信安爱好者都很熟知。它发生在TCP三次握手之间,攻击者向服务器发送很多的SYN请求而收到SYN+ACK后不恢复ACK从而占用服务器资源使其丧失正常服务能力。
若目标机器未开启防护措施(echo 0 > tcp_syncookies),我们使用netwox 76命令就可以发起攻击了:
netwox 76 -i 目标IP -p 端口
1.2 防范措施
通过限制相同IP发起的连接数量看似可以解决这个问题,但其实是不行的。因为伪造IP是一件很简单的事,攻击者更可以通过僵尸网络发起攻击。
接下来我们看看另一种方法,叫做syncache。通常一个四元组可以锁定一个连接(源、目的IP及端口),因此我们可以仅储存该必要信息,而不是直接分配TCB(Transmission Control Block)。收到ACK时再检查SYNCache,若找到了对应项则建立连接。
最后介绍一种现在用的最多的方案,叫做SYNCookies,这种方案思路与上面一种类似,不过更加有效,这种方案在ACK到达之前不分配任何资源。接下来重点介绍这种非常巧妙的方法:
1.3 SYNCookies
我们都知道,TCB第二次握手是服务器发送SYN+ACK包,其中SYN的seq是由服务器自己构建,而客户端需要回复seq+1的ACK包才能完成连接。利用这种机制,我们可以仅通过ACK包的seq序列号来判断我们发送的SYN+ACK的序列号,因此我们便可以想办法将我们的信息“储存”在序列号中,而非我们的内存中,这便是SYNCookies的原理。
在收到SYN包后,服务器不为其创建TCB,而回复ACK+SYN,而其序列号是我们精心创建的:
其中t是一个缓慢递增的时间戳(通常是time()逻辑上右移6个位置,这给出了64秒的分辨率)
m为服务器在SYN队列条目中存储的最大段大小(MSS)值
s是通过服务器IP地址和端口号、客户端IP地址和端口号以及值t计算的加密哈希函数的结果。返回值s必须是24位值。
那么这么设置有什么作用呢?我们收到未建立连接的ACK包后,检查其SEQ位,将其减1并拆拆分。通过前五位,我们可以得知时间,判断其有没有过期;通过中3位,可以重建SYN队列条目;通过重新计算s可以确认是否是个有效的SYN Cookie。
问题:
1.慢
2.MSS只有三位,只能表示八个值
3.丢弃其余的TCP选项
4.客户端发送的连接ACK数据包丢失,服务器不会重新发送SYN+ACK
二、nmap
2.1 nmap简介
nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。它是网络管理员必用的软件之一,以及用以评估网络系统安全。
2.2 各种参数介绍
2.2.1 nmap 目标IP(最不建议使用的,也称为 tcp connect -sT)
在这种默认不加参数的情况下,nmap会尝试与目标机器建立TCP连接,若目标端口开放,则顺利建立连接,nmap发送RST释放连接;若端口关闭,则服务器收到SYN包后回复RST直接断开连接。若SYN包被过滤则无法收到回复。
(以上两种nmap方法,若目标防火墙过滤了就无可奈何了,接下介绍另外几种)
2.2.3 sudo nmap -sA
针对端口被过滤的情况,我们有另一种测试目标是否被过滤的方法,-sA。即向目标直接发送ACK,服务器莫名其妙收到ACK后会很客气的回复一个RST。但如果目标端口被过滤了我们就收不到RST了。
2.2.4 sudo nmap -sF/-sX/-sN(判断目标端口是否被关闭)
其中FIN扫描是设置TCP FIN位;Xmas扫描是设置FIN、PSH以及URG位,NULL扫描是不设置任何标志位。
主要是对这些数据包,如果是开放的端口,那么不会产生任何的响应;如果是关闭的端口,会生成一个RST回复。当然,如果端口被过滤,也不会有任何响应。所以,这些扫描并不能判断开放端口,它只能返回open|filtered;或者是closed。
(-sA可以判断目标端口是否被过滤,-sF可以判断目标端口是open|filtered,因此两者综合就可以判断目标主机的端口情况了,如下图)
2.2.5 sudo nmap -f 目标端口
使用微小碎片,将TCP头部拆成几个碎片,使其更加隐蔽与难以被过滤
2.2.6 nmap idle 扫描
这是一种更加隐蔽的扫描方式,攻击者可以不用向目标发送数据包就完成扫描工作。
其要点就是利用一台短时间内没有数据流的zombie主机。
流程:
观察以上流程,在这种扫描形式下,有一点很重要:寻找这样的Zombie主机,并且确保在探测期间,IPID不会因为其他原因而增加。
优点:非常隐蔽,可能还能利用zombie主机与服务器的信任关系绕过一些过滤机制。
缺点:无法判断关闭/过滤情况。且收zombie的使用情况影响。
2.2.7 sudo nmap -sV IP(版本扫描)
版本扫描顾名思义,就是针对软件版本的扫描,这种扫描需要发送大量的数据包,并且需要与自己内部的指纹库进行比较,从而判断。
参考:https://zhuanlan.zhihu.com/p/59750145