发新话题
 搜藏 打印 该页面添加到 Mister Wong

一次DOS事件的解决办法

一次DOS事件的解决办法

作者:小龙女 来自:et8.net

0.分析过程
首先,分析了DOS的类型、特征、攻击方法。

使用netstat -na|grep SYN_RECV|wc,发现当前存在大量SYN_RECV状态连接,源地址都是伪造的,netstat -na|grep SYN_RECV|wc显示数量为1024个,这个是当然,Linux默认的Syn_Backlog对列就是1024,超过的SYN都丢弃了。

针对的攻击端口是80:WWW服务,当然,Web服务器也已经无法访问了。

在打开SYN_Cookie防护之后,攻击得到了一些缓解,但随后攻击流量又增大了,情况也好不到哪儿去,而Linux的Iptables又不能做syn_proxy的,那么只好从其他方面下手,用tcpdump -w抓下了当时的数据流量,计数分析流量大约在1.8w pps左右,其中99%以上都是伪造源地址的syn包。

既然是伪造地址,那就比较难处理,不过经过仔细的统计和分析,还是分析出了这次攻击中主要数据的特征,主要有以下几条:

代码:

1. tcp标志位为 syn2. ip数据总长为40Byte3. ip头中的Identifier字端固定为256(0x0100)4. TTL值平均分布为 74 - 95之间5. tcp窗口值固定为163846. 目标端口为tcp:807. tcp初始化序列号为 17314131xx,按+1累计依次递增



这样,注意看其中的3、4、5几条,这是对我们来说最重要的线索。
3. ip identifier字端固定为0x0100,而在TCP/IP规范中,这个字段是为了防止一个连接中的分片包重复而作的包内序列号。虽然大多数操作系统没有严格准循着一条规范,但这个数值的来源却是确定的,即在正常的TCP/IP堆栈中,这个字段的值应该是发送此数据包是的TCB(TCP控制块,一个内核空间的TCP数据结构)的序列号。而即使系统也没有严格准循这一条,那么在网络中传输的数据,identifier字段的内容也应该是随机分布的,正常的操作系统网络堆栈不可能发送出大量0x0100这样固定的字段内容来。

4. TTL值平均分布在74 - 95之间。按照常识也知道,大多数操作系统默认的TTL应该为32、64、128这样的2的整数次方;而另一个方面,TTL在网络传输的过程中每过一个路由器就会自动减一,而现在的Internet路由设计已经是比较良好的,从任何一点到达Intetnet的另一端,一般来说TTL条数不会超过20-30,这个我也测试过,从国内网通和电信的网络看来,到达国内和国际的大多数网站,TTL跳数都在20以内,而从Windows的Tracert命令也可以看出--它假设的最大TTL超时条数也只是30。超过30条的正常Internet路由是很罕见的。那么我们来做一个简单的减法:
代码:

128 - 30 = 9864 - 30 = 3432 - 30 = 2



所以一个数据包,在正常的传输过程中,当到达端点时,它的TTL数分布范围应该是:代码:

2 - 32 (罕见)、 34 - 64 、 98 - 128




而在本次数据采样中,大多数伪造地址的SYN数据,TTL都在74 - 95之间。

其他附加特征,例如IP长度、TCP窗口、TCP SYN_Flag等,也可以作为附加判断标志。这样我们提取出这次攻击的主要特征码为:
代码:

a. tcp syn flag only, dst port 80b. ip identifier = 0x0100c. 74 < ttl < 95d. tcp window = 16384



这样四条特征。

之后就是想办法过滤了。因为这次没办法假设其他的防火墙,只能用系统自身的iptables挡一下,所以效果么......够麻烦的。


1. 下载最新版的iptables-1.3.1和patch-o-matic snapshot 。(需要Linux内核
2.6.10以上版本支持,这一点...Redhat系的所有版本都得重编了。)
ftp://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/


解压iptables和pom;
运行pom patch脚本,过程中需要输入iptables和内核源代码完全路径;

代码:

# ./runme connlimit u32 TARPIT pkttype length



编译和安装iptables及pom内核模块。

代码:

# make -C /lib/modules/`uname -r`/build SUBDIRS=net/ipv4/netfilter/ modules# make -C /lib/modules/`uname -r`/build SUBDIRS=net/ipv4/netfilter/ modules_install




编译iptables。并手工安装;

代码:

# make KERNEL_DIR=内核源码目录# cp iptables iptables-save iptables-restore /usr/sbin# cp extensions/*.so /usr/lib/iptables/




2. 配置内核参数
代码:

======================================================================#--以下为sysctl 内核参数设置#net.ipv4.conf.default.rp_filter = 1#net.ipv4.conf.all.rp_filter = 1#net.ipv4.conf.eth1.rp_filter = 1# 开启IP源地址验证,防止IP地址欺骗,在任何情况下都应开启,默认关闭for f in /proc/sys/net/ipv4/conf/*/rp_filter; do      echo 1 > $f donesysctl -w net.ipv4.conf.default.accept_source_route=0   # 禁用icmp源路由选项sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1         # 忽略icmp ping广播包,应开启#sysctl -w net.ipv4.icmp_echo_ignore_all=1                      # 忽略所有icmp ping数据,覆盖上一项sysctl -w net.ipv4.icmp_ignore_bogus_error_responses=1# 以下一段为抵抗syn flood攻击,平时建议关闭sysctl -w net.ipv4.tcp_syncookies=1              # tcp syncookie,默认关闭sysctl -w net.ipv4.tcp_max_syn_backlog=1280   # syn队列,默认1024,> 1280可能工作不稳定,需要修改内核源码参数sysctl -w net.ipv4.tcp_synack_retries=2             # syn-ack握手状态重试次数,默认5,遭受syn-flood攻击时改为1或2sysctl -w net.ipv4.tcp_syn_retries=2                  # 外向syn握手重试次数,默认4# 以下一段为应对tcp connect连接耗尽攻击,如果开启iptables connlimit模块可禁用# 有严重连接性能影响和不稳定因素,慎用sysctl -w tcp_tw_recycle=1                           # 默认0,tw快速回收sysctl -w tcp_tw_reuse=1                             # 默认0,tw重用sysctl -w tcp_keepalive_intvl=60                    # 默认75,tcp keeplive探测轮询时间sysctl -w tcp_keepalive_probes=3                  # 默认9,tcp keeplive探测轮询次数sysctl -w tcp_keepalive_time=1800                # 默认7200,tcp keeplive时间sysctl -w tcp_fin_timeout=30                        # 默认60,tcp fin状态超时时间#sysctl -w net.ipv4.tcp_retries1=2                     # tcp连接重传参数,慎用#sysctl -w net.ipv4.tcp_retries2=8sysctl -w net.ipv4.ip_conntrack_max=65535          # 增大iptables状态跟踪表



======================================================================


3. 配置iptables规则
======================================================================

代码:

#--以下为iptables规则设置--modprobe ipt_TARPITmodprobe ipt_u32modprobe ipt_connlimitmodprobe ipt_lengthmodprobe ipt_pkttypeiptables -N input_extiptables -F input_ext                                    # 新建iptables队列iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state INVALID -j DROPiptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT            # 激活状态检测iptables -A INPUT -i eth0 -j input_ext              # 扩展input规则iptables -A INPUT -j DROP                              # 默认input规则,丢弃全部iptables -A input_ext -p tcp -m tcp --dport 80 --tcp-flags SYN,RST,ACK SYN -m u32 --u32 "0x2&0xffff=0x100&&0x5&0xff=0x4a:0x5f" -j DROP          # 本次syn-flood攻击指纹特征,丢弃iptables -A input_ext -p tcp -m tcp --dport 80 --tcp-flags SYN,RST,ACK SYN -m connlimit --connlimit-above 5 --connlimit-mask 32 -j TARPIT             # 防止连接耗尽攻击,每IP并发连接限制为4iptables -A input_ext -p tcp -j TARPIT                                                   # 防止端口扫描攻击iptables -A input_ext -m pkttype --pkt-type broadcast -j DROP                  # 丢弃广播数据包iptables -A input_ext -p icmp -m limit --limit 6/s -m icmp --icmp-type 4 -j ACCEPT          # 接受icmp traceroute/echo reply数据,限制流量 5个/秒iptables -A input_ext -p icmp -m limit --limit 6/s -m icmp --icmp-type 8 -j ACCEPT iptables -A input_ext -p icmp -m length --length 48:256 -j ACCEPT             # 限制icmp包大小为 0 - 256Byte,防止大包flood                                                                              # 实际网络中如果不用icmp/udp协议,可以直接全部drop



======================================================================



1. 带宽占满的情况下,任何防护都是没用的。
2. 任何ip数据都是可以伪造的,如果攻击数据完全采用随机数发送的话,那么很可能无迹可寻。
3. 在进行过滤和dos防御的时候,不可避免的会损失一些正常的连接,这个时候,想想80/20规则,
不要力求完美。
4. 任何安全防护措施和内核参数的调整,都可能对系统和网络的稳定性造成一定的负面影响,所以要根据实际情况而定,切勿忙从。
5. 这个防火墙规则中主要生效的是TCP段和ICMP段,在带宽未被占满时可以一定程度防止syn-flood、icmp-flood、tcp-connect-flood类型的DOS。
但是syn-flood的u32规则是针对这次攻击的特征所写的,在应对其他攻击时不可能完全有效,必须单独重新分析。
tcp-connect连接限制,我目前定的是同一ip地址并发5个web连接,防止连接耗尽,在局域网NAT访问时可能会有些问题,可以根据网络拓扑情况添加信任规则。
6. 常见的网络层dos主要有:
syn-flood (协议缺陷型)
ack-flood(stream) (协议缺陷型)
icmp-flood(smarf) (流量型)
udp-flood(froogle) (流量型)
tcp-connect-flood (资源型)
对于icmp和udp,可以在规则链开始就直接丢弃掉;
对于tcp-flood,可以使用conn-limit限制,效果比较好,但是要注意调整内核参数ip_conntrack的数值,否则可能造成iptables状态跟踪表溢出,反而形成拒绝服务;另外,当syn+ack类型的攻击发生时,本省也会消耗大量的conntrack资源,所以防火墙规则的顺序很重要。
对于syn-flood,最好的方法还是使用bsd pf的syn-proxy,效果不错,不过这个下次再讲吧。
如果不行的话,可能就只能针对个案进行模式特征分析了。

再次提醒,防火墙规则配置有风险,一定要根据自己实际情况调整和测试完毕后再上线。可以在input链的-j input_ext规则之前加一条:
-i INPUT 1 -s 内网地址 -j ACCEPT return之类的语句完全优先信任管理地址。
原文链接:http://bbs.et8.net/bbs/showthread.php?t=671756

本文由hew 发布于Linuxsky 论坛,网址:http://bbs.linuxsky.org/thread-4553-1-1.html

你的鼓励,我的动力.
做人厚道,看贴回贴.
my linux blog

TOP

[分享]需要硬防的和我联系

上海遐迩网络科技是一家位于上海陆家嘴金融中心的高科技网络公司,它很年轻,充满活力,全体员工平均年龄不足27岁,却拥有雄厚的技术力量和专业背景,有着一支技术过硬品质过硬的技术队伍。其中有多名国内安全领域的知名技术专家、硕士研究人员及各类安全专业人才。是一家专业的研发和生产网络安全设备的IT公司。
  
   该公司主要从事网络安全方面的研发和服务,凭借多年网络安全的研发经验,已在业界小有名气。研发小组经过艰苦紧张的研发,已经成功推出第一款抗拒绝服务设备Dosnipe。该设备核心部分完全采用自主研发成果,具有高效,准确,安全等特点,是一种全新的算法与理念,与传统的设计完全不同,从这点上来说,该设备填补了国内安全核心技术领域的一项空白。目前该项技术已申请国家软件专利,并已取得相关部门的认证。
  
   Dosnipe抗拒绝服务设备,在国内专业抗拒绝服务设备奇缺的情况下,它的出现,无疑给市场,给用户注入一剂兴奋剂。本来专业生产抗拒绝服务设备厂商就少,加上抗拒绝服务攻击起点低,防御难等特点,使得这部分领域成为网络安全的老大难,已成为国内网络信息经济发展的瓶颈,众多IDC服务商及企业无不谈DDOS色变。绿盟,天网,天元龙马等厂商在抵挡拒绝服务攻击方面做出了积极的贡献,除此之外,这个领域的专业厂商还是显得少而杂。
  
   一种新技术的出现,从它出现到成熟,再到技术产品化,市场化,一般来说,需要一个漫长的过程,遐迩科技用短短不到两年的时间走完了这个过程。这不能不说是个奇迹,尤其是他们在独立自主的研发条件下开发的这个成熟产品,更是难能可贵。目前这项核心技术被命名为“一次性单向非法数据包识别方法”,是一种全新的算法和思维方式,国内以前没有过,国外以前也没有过,该项技术完全摈弃了传统算法的思维模式,是从无到有,从零到一的技术性突破。是业界的骄傲,也是国内安全技术领域的骄傲。
  
   Dosnipe的技术优势主要体现在抵抗大流量攻击数据包下,所谓“一次性单向非法数据包识别方法”指的是攻击数据包只需被Dosnipe设备一次接受,就能判断识别它的真伪,并实时做出相应处理,无需返回地址源再识别,这就决定了在相同环境下,相同硬件条件下,Dosnipe抗拒绝服务设备的抵挡效果比其他同类产品高出一倍。举个例子,经过权威测试,同一级别的产品,绿盟黑洞在千兆环境下只能抵挡四,五百兆的攻击流量,而Dosnipe则能达到七,八百兆。新技术的使用,在提高效率的同时,无疑也能降低成本,这才是遐迩科技真正的优势所在。
  
   在应用方面,Dosnipe抗拒绝服务设备也取得了不错的成绩,从各个IDC服务商到各大中小型企业,银行,电信部分,网络游戏服务器,都活跃着Dosnipe的身影。其中典型的应用包括上海中国移动网络服务器安全解决方案,北京网银在线交易系统安全解决方案,某地方税务局局域网安全解决方案和上海易动网络安全解决方案等。值得一提的是,除Dosnipe抗拒绝服务设备的具体应用外,遐迩科技还提供安全评估,安全策划,安全审核,它优质的售后服务和应急响应措施已是有口皆碑,光受好评。
  
  
   在这个核心技术的支持下,围绕它,遐迩科技相续开发了一些周边产品,譬如DOSNIPE NIPS 入侵防护系统、Dosnipe EM反垃圾反病毒网关、中央存储备份系统,还有一些其他的安全服务和应急响应措施。我们可以看到,遐迩科技虽然年轻,但它已经具备了一个成熟企业所有要素。技术是IT行业的生命线,科技要以人为本,从高科技转为产品,再把产品市场化,增值,扩大,衍生出周边产品,从而达到市场最大化,利益最大化。遐迩科技在这一步上迈得很坚实,很坚定,也很成功。
  
   科技以人为本,技术如果不能转化为具体的产品为民服务,那它就是屠龙之技,毫无用处。在目前整个IT业持续低迷的大环境下,尤其需要遐迩科技这样的新鲜血液的注入。我国的IT行业起步晚,技术上落后国外数年,很多核心技术都不是我们自己的。在这种情况下,尤其需要国内本土IT企业的大力发展。不光是新技术为国内广大用户带来的直接好处,遐迩科技的意义在于,它推动了我国IT高科技领域的发展,在核心技术上填补了国内一块空白,它独立自主,艰苦研发的精神让我们看到了国内年轻IT企业的新力量、新希望。
  
  
  
上海遐迩科技http://www.sharesec.com

咨询电话: 021-58211660业务咨询: QQ:664530596 MSN:liumei@sharesec.com

TOP

发新话题