1. 异常包
TCP/UDP:端口值为0的包;校验和错误的包
TCP标志位异常包:SYN只能单独存在或只能和ACK共存,和其他标志共存就是异常包;没有标志或标志全置的包;有ACK标志但 Acknowledgment Number为0的包;有SYN标志但Sequence Number为0的包;有URG标志但Urgent Pointer为0,或没有URG标志但Urgent Pointer不为0的包;RST和除ACK标志之外的其他标志共存的包;
这种攻击标志很明显,防御也很容易,可以做到100%检测并阻断;
2. LAND攻击
TCP层的攻击了,不过在网络层就可以防护;攻击方发送源地址和目的地址相同的TCP SYN包,对老的某些操作系统就会发SYNACK包给自身,建立空连接,最终消耗尽自身资源,现在的操作系统已经不会那么傻了,这种攻击也可以做到100%检测并阻断;
3. Flood攻击
syn flood:是TCP协议的最大弱点了,对syn flood攻击的分析在另一篇文章中详细说明了,理论上是无法真正防御的,只能进行一定程度的缓解;
UDP flood:就是发送大量UDP包阻塞目的机通信,由于UDP是非连接协议,因此只能通过统计的方法来判断,很难通过状态检测来发现,只能通过流量限制和统计的方法缓解;对于有些协议,服务器部分的计算量会远大于客户端的计算量,如DNS,野蛮模式的IKE等,这些情况下flood攻击更容易形成DOS。
4. 端口扫描
端口扫描往往是网络入侵的前奏,通过端口扫描,可以了解目标 机器上打开哪些服务,有的服务是本来就是公开的,但可能有些端口是管理不善误打开的或专门打开作为特殊控制使用但不想公开的,通过端口扫描可以找到这些端 口,而且根据目标机返回包的信息,甚至可以进一步确定目标机的操作系统类型,从而展开下一步的入侵。
4.1 TCP扫描
按照RFC,当试图连接一个没有打开的TCP端口时,服务器会返回RST包;连接打开的TCP端口时,服务器会返回SYNACK包
合法连接扫描:
connect扫描:如果是打开的端口,攻击机调用connect函数完成三次握手后再主动断开;关闭的端口会连接识别
SYN扫描:攻击机只发送SYN包,如果打开的端口服务器会返回SYNACK,攻击机可能会再发送RST断开;关闭的端口返回RST;
异常包扫描:
FIN扫描:攻击机发送FIN标志包,Windows系统不论端口是否打开都回复RST;但UNIX系统端口关闭时会回复RST,打开时会忽略该包;可以用来区别Windows和UNIX系统;
ACK扫描:攻击机发送ACK标志包,目标系统虽然都会返回RST包,但两种RST包有差异;
对于合法连接扫描,如果SYN包确实正确的话,是可以通过防火墙的,防火墙只能根据一定的统计信息来判断,在服务器上可以通过netstat查看连接状态来判断是否有来自同一地址的TIME_WAIT或SYN_RECV状态来判断。
对于异常包扫描,如果没有安装防火墙,确实会得到相当好的扫描结果,在服务器上也看不到相应的连接状态;但如果安装了防火墙的话,由于这些包都不是合法连接的包,通过状态检测的方法很容易识别出来(注意:对于标准的Linux内核所带防火墙netfilter的TCP状态检测的实现,ACK和 FIN扫描是可以通过的,需要修改才能防御)。
4.2 UDP扫描
当试图连接一个没有打开的UDP端口时,大部分类型的服务器可能会返回一个ICMP的端口不可达包,但也可能无任何回应,由系统具体实现决定;对于打开的端口,服务器可能会有包返回,如DNS,但也可能没有任何响应。
[Ok3w_NextPage]UDP扫描是可以越过防火墙的状态检测的,由于UDP是非连接的,防火墙会把UDP扫描包作为连接的第一个包而允许通过,所以防火墙只能通过统计的方式来判断是否有UDP扫描。
5. TCP紧急指针攻击
Winnuke:对老的Windows系统,对TCP139端口发送带URG标志的包,会造成系统的崩溃,特征明显,防火墙可以100%防御,但也可能误伤;
6. TCP选项攻击
相对IP选项,TCP选项利用率要高很多,很多正常包中都要用到,TCP选项攻击包括:
1) 非法类型选项:正常的选项类型值为0、1、2、3、8、11、23、13,其他类型的出现是可疑的(类型4,5,6,7虽然定义了但被类型8取代,正常情况下也是不用的);
2) 时间戳:用于搜集目的机的信息;
3) 选项长度不匹配:选项中的长度和TCP头中说明的TCP头长度计算出的选项长度不一致;
4) 选项长度为0:非0、1类型的选项长度为0,是非法的;
5) 选项缺失,一般SYN包中都要有MSS选项,没有的话反而不正常。