dyccsxg 2011-01-10
本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业用途。
来源:http://yfydz.cublog.cn
0.声明
本文仅仅是从技术角度分析如何实现NetScreen防火墙,即如果要把本人的一台Linux机器变成NetScreen防火墙估计要作那些工作,所有观点均为个人观点,不代表任何组织或团体,只谈技术,不带任何吹捧、攻击或贬低,欢迎大家一起讨论,有错误请指正,但对文章中如有不明白的名词和概念请问google而不要问我。
1. 参考资料: http://www.juniper.net/techpubs/software/screenos/screenos5.1.0/translated/ CE_v4_SC.pdf 第4卷:攻击检测和防御机制 2. 前言 本卷是防火墙的核心功能,用户购买防火墙的级别目的就是用来防御攻击的。防御攻击是防火墙核心技术之一,但现在除了对SYN Flood没有本质防御手段外(见我的另一篇关于syn flood的文章的分析),其他各种IP、TCP层的攻击只要特征明显都是很容易防御的,在Linux上也很容易实现(见我的其他几篇网络攻击的文章的分析)。另外状态检测已经是当前防火墙的一个通用技术,本身就能防御各种状态非法包。 3. Linux下的防御实现 Linux内核中的网络控制参数、netfilter等已经提供了比较多的防御控制,如碎片重组选项、TCP FLAG等。但对于IP、TCP层面的攻击,实际上单独写个netfilter的扩展模块则更方便,记得在早期的绿盟月刊里有过一篇讲如何写 netfilter模块来实现IDS的,一般在PREROUTING链里就进行处理了。 4. NetScreen的网络保护选项 4.1 侦查威慑 IP地址扫描:对扫描的检测都只能用统计的方法来实现,NS是同一IP地址在5ms内发10个ICMP包就认为是扫描,不过没说是否能识别是请求包还是响应包,否则多台机器一起ping一台机器时会把该机的回应当成攻击了,而实际它是受害者;在Linux下实现就是统计来自同一IP的ICMP包进行统计,具体时间间隔可以根据sk_buff包中的timestamp字段来判断,可以精确到微秒级别,不过这种统计可能会很耗内存,必须设计好算法以便可以及时释放只要; 端口扫描:NS是同一IP地址在5ms内发10个SYN包到相同IP的不同端口就认为是扫描;Linux下的实现同上,把统计ICMP(1)改为统计TCP(6)的SYN包; 操作系统探查:主要检测一些异常的TCP标准组合,这个很容易实现; 逃避技术:实际NS所描述的这些攻击在严格的状态检测下都能识别出来,不过Linux内核的原始的TCP跟踪表需要修改,使变得更严格一些; 4.2 拒绝服务攻击防御 4.2.1 防火墙DoS攻击 会话表泛滥:NS采用的方法一是限制单个IP的连接数,这对于防御内部网络内的冲击波之类的病毒很有效,但防御外网的就难了,在DDOS下每个 IP的连接很小,但IP数很大,防火墙内存肯定顶不住,linux实现起来就是对每个IP增加连接数参数,在建立新连接前判断该IP的连接是否已经到限值了;二是修改TCP会话时间,Linux下都是现成的; SYN-ACK-ACK代理泛滥:主要是针对SYN代理的攻击了,NS也是靠单IP连接数限制,linux实现方法同上; 4.2.2 网络DoS攻击 SYN泛滥:syn flood本质是无法防御的,所有措施只是一种缓解,NS的防护方式一是SYN包数率限制,netfilter自己就可以提供;二是SYN包速率超过限制后使用SYN代理,SYN代理Linux下没有现成的,得自己作; ICMP泛滥:基本就是包速限制了; UDP泛滥:也是包数限制; Land攻击:源目的相同的包就扔,很容易识别判断; 4.2.3 与操作系统相关的DoS攻击 Ping of Death:属于碎片类攻击,重组再转发就可以防 Teardrop攻击:属于碎片类攻击,重组再转发就可以防 WinNuke:TCP139端口的URG标识包,很容易识别判断; 4.3 可疑数据包属性 ICMP碎片:拒绝ICMP碎片包 大型ICMP数据包:拒绝IP总长超过1024字节的ICMP包 有害IP选项:拒绝有些特殊的IP选项类型 未知协议:1~137合法,其他非法 IP数据包碎片:拒绝IP碎片包 SYN碎片:拒绝SYN碎片,其实TCP有碎片都是异常的 4.4 内容监控和过滤 碎片重组:这是指内容级别的重组,如果不是通过代理方式的话,属于难度比较大的功能,NS的重组用来执行URL,FTP下载上载等的检测; 防病毒扫描:NS中集成了防病毒扫描,检测HTTP、FTP、SMTP、POP3、IMAP协议中的病毒,其实难的是病毒库,有了的话扫描就是模式匹配过程;不过不知道是否对压缩、编码(非加密)的数据也能扫描; URL过滤:这个是很常见的功能了,就是解析HTTP请求包取URL再来模式检查,不过NS还支持与WebSense连动,这个得先了解一下协议过程才行; 4.5 深入检查 感觉就是IPS功能,把IDS中比较明确的异常模式捆到防火墙,防火墙发现这些模式时就进行处理,在Linux下实现时可以参考snort中关于应用协议的规则定义,把那些模式加载进防火墙进行匹配检查。实现的一个技术重点是如何定义每种异常所需要检测的最关键数据部分,这样在检测时只检查这个最关键的数据部分,以提高检测速度,否则全部内容都进行检测的话速度实在太慢,防火墙也就根本不可用。NS的优势就是可以使用正则表达式进行硬件级别的内容检测,这样速度比软件要快得多。 状态式签名:也就是区分攻击模式会出现在哪些地方了,不是所有地方会出现的都是攻击; 协议异常:判断数据是否和RFC规定的协议格式匹配; 精确封锁HTTP组件:也就是封锁ActiveX, Applet,zip, exe文件等东西,ActiveX, Applet可以在HTML页面中封锁,zip, exe在URL中封锁; 4.6 GPRS超额计费攻击防护 这个东西国内不知道用的多不多?没用过GPRS,这种缺陷GPRS本身应该能够修补吧?一定要加NS的设备么?按NS的说明不过就是一个删除通知而已,GPRS协议有那么傻么?个人觉得没什么意思。 5. 小结 NS的攻击防御功能还算比较全面,不过也没有其他防火墙作不到的东西。