基于统计的攻击防范

本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业用途。
msn: [email protected]
来源:http://yfydz.cublog.cn

1. 前言
 
需要进行统计才能判断的网络攻击分为flood和scan,通常需要统计在一定时间内连接数量,通过阈值来判断是否属于攻击。
 
2. scan
 
scan可包括ICMP scan/TCP scan/UDP scan。
scan的识别相对比较容易,因为既然要扫描,就必须有相同的源和目的地址,当然攻击者有可能为隐藏其扫描企图而发送一些其他地址的数据包,意图实现隐藏扫描包的目的。
扫描除了用标准包进行扫描外,还可以用非标准包扫描,如ACK、FIN扫描等,但此类扫描不符合TCP状态,属于非法状态包,很容易识别和防御,因此研究的重点还是标准状态包。
在linux/netfilter的POM中提供了psd匹配用来检测端口扫描,是保存了256个源IP的信息,对每个源IP统计其在一定时间内发起的到本机不同端口的连接数来判断是否是扫描。
 
3. flood
flood是DOS攻击中的最常用手段,通过向目标机发送大量数据而导致其网络阻塞或资源耗尽而不能提供正常服务;或者是“自杀”,自己发送大量的包阻塞住自己的网络,这种情况一般不是自愿的,如中了“冲击波”后的情况。
 
flood具体可分为:ping flood/ping echo-reply flood/icmp flood/syn flood/udp flood/net flood等,其中ping echo-reply flood比较容易防,因为那是状态非法的,其他各种flood都有可能是
合法包,不能通过状态检测进行识别。
 
flood的数据具体可分为以下情况:
相同源地址,相同目的地址:属于初级的flood,攻击机通常也陪葬了;
相同源地址,不同目的地址:属于自杀型攻击,通常是中毒了;
不同源地址,相同目的地址:属于DDOS;
不同源地址,不同目的地址:属于大范围的DDOS了;
 
为防御flood攻击,一般的方法是限制网络速率,如用linux/netfilter中的limit等匹配实现的功能,但这样的限制处理在防御了攻击数据的同时也丢掉了正常包,并不是一个很好的解决方法。
 
比较好的方法还是针对单个IP的连接进行处理,包括限制单个源IP地址连接数(率)和限制单个目的IP地址连接数(率),连接率识别是识别在一秒中内该IP建立起了多少新连接,这样限制一个IP的数据后不会影响其他IP的通信。但linux/netfilter中没有提供现成的处理机制,必须自己单独编写代码实现,可参考psd匹配的对单IP的统计处理方法。
 
4. 总结
 
对flood来说,简单的限制流量是可以防御的,但也丢掉了正常包,因此还是达到了DOS效果,比较好的处理方法还是要限制单个IP的连接数 (率)才不至于影响正常包;对于scan的识别,则必须是要对单个IP的连接进行统计才能识别出来。所以最基本的需求是要实现对单一IP的统计功能,通常通过动态分配的数据链表来实现。

猜你喜欢

转载自cxw06023273.iteye.com/blog/866867
今日推荐