【51CTO.com独家特稿】TCP/IP 堆栈负责处理传入和传出 IP 数据包,并将数据包的数据路由到要处理这些数据的应用程序。由于自身的缺陷、网络的开放性以及黑客的攻击是造成互联网络不安全的主要原因。TCP/IP作为Internet使用的标准协议集,是黑客实施网络攻击的重点目标。TCP/IP协议组是目前使用最广泛的网络互连协议。但TCP/IP协议组本身存在着一些安全性问题。由于Unix操作系统众所周知的稳定性、可靠性,用来提供各种Internet服务的计算机运行的操作系统占很大比例的是Unix及Unix类操作系统,目前比较常见的运行在PC机上的Unix类操作系统有:Linux、BSD 、Solaris、AIX、HP-UX 等。Unix类操作系统实现允许配置其操作以反击大部分网络级的攻击。本文主要向大家介绍几种Unix类操作系统的TCP/IP堆栈加固方法。
对TCP/IP堆栈攻击的类型中的两种:
◆扫描: 扫描或 跟踪足迹是黑客的初始信息收集过程的一部分。在黑客能够攻击系统之前,他们需要收集关于该系统的信息,如网络布局、操作系统类型、系统可用服务、系统用户等。黑客可以根据所收集的信息推断出可能的弱点,并选择对选定目标系统的最佳攻击方法。
◆拒绝服务攻击:通常,黑客瞄准特定系统,闯入系统以便将其用于特定用途。那些系统的主机安全性经常会阻止攻击者获得对主机的控制权。但进行 拒绝服务攻击时,攻击者不必获得对系统的控制权。其目标只是使系统或网络过载,这样它们就无法继续提供服务了。拒绝服务攻击可以有不同的目标,包括 带宽消耗和 资源缺乏。拒绝服务攻击现在扩展到分布式拒绝服务攻击。
一、 ICMP协议部分
ICMP是专门用作逻辑错误和诊断的信使。RFC792对它作了详细的阐述。任何IP网络设备都有发送、接收或运作ICMP消息的功能。虽然ICMP的设计者没有考虑今天出现的安全性问题,但是他们已经设计了一些能使ICMP更有效运作的基本准则。
◆为了确保ICMP消息不会淹没IP网络,ICMP没有任何特别的优先级,它总是一种常规流量。
◆ICMP消息作为其他ICMP消息的响应而发送。这个设计机制是为了防止出现一个错误消息不断地重复制造出另一个错误消息。否则,它就真的是个大问题了。
◆ICMP不能作为多播或广播流量的响应而发送。
针对ICMP协议的攻击包括:
◆目的地不可到达攻击属于拒绝服务攻击 :ICMP 目的地不可到达消息向尝试转发消息的网关提供了一种工具,用来通知发送方:因为在数据报目的地地址中指定的主机不可到达,所以无法传递该消息。
◆Smurf 攻击属于拒绝服务攻击 :Smurf 攻击是拒绝服务攻击的一种非常可怕的形式,因为它具有放大效应。Smurf 攻击利用 ICMP 回应消息。
1禁用ICMP回声广播活动
AIX 5 #no -o directed_broadcast=0 FreeBSD 5-7 #sysctl -w net.inet.icmp.bmcastecho=0 HP-UX 10 #ndd -set /dev/ip ip_respond_to_echo_broadcast 0 #ndd -set /dev/ip ip_forward_directed_broadcasts 0 Linux2.4-2.6 #sysctl -w net.ipv4.icmp_echo_ig#nore_broadcasts=1 OpenBSD3-4 已经是缺省设置 Solaris 8-10 #ndd -set /dev/ip ip_respond_to_echo_broadcast 0 #ndd -set /dev/ip ip6_respond_to_echo_multicast 0 #ndd -set /dev/ip ip_forward_directed_broadcasts 0 |
否则你的系统可能成为Smurf攻击者的工具。Smurf攻击是以最初发动这种攻击的程序名“Smurf”来命名的。这种攻击方法结合使用了IP欺骗和ICMP回复方法使大量网络传输充斥目标系统,引起目标系统拒绝为正常系统进行服务。Smurf攻击通过使用将回复地址设置成受害网络的广播地址的ICMP应答请求(ping)数据包,来淹没受害主机,最终导致该网络的所有主机都对此ICMP应答请求做出答复,导致网络阻塞。更加复杂的Smurf将源地址改为第三方的受害者,最终导致第三方崩溃。
2禁用ICMP路由重定向
AIX5 #no -o ipig#noreredirects=1 #no -o ipsendredirects=0 FreeBSD 5-7 #sysctl -w net.inet.ip.redirect=0 #sysctl -w net.inet.ip6.redirect=0 HP-UX 10 #ndd -set /dev/ip ip_send_redirects 0 #ndd -set /dev/ip ip_forward_directed_broadcasts 0 Linux2.4-2.6 #sysctl -w net.ipv4.conf.all.accept_redirects=0 #sysctl -w net.ipv6.conf.all.accept_redirects=0 #sysctl -w net.ipv4.conf.all.send_redirects=0 #sysctl -w net.ipv6.conf.all.send_redirects=0 OpenBSD3-4 #sysctl -w net.inet.icmp.rediraccept=0 #sysctl -w net.inet6.icmp6.rediraccept=0 Solaris 8-10 #ndd -set /dev/ip ip_ig#nore_redirect 1 #ndd -set /dev/ip ip6_ig#nore_redirect 1 #ndd -set /dev/ip ip_send_redirects 0 #ndd -set /dev/ip ip6_send_redirects 0 |
否则您的系统可能被攻击者使其路由表错误。
3禁用ICMP广播探测
AIX5 #no -o icmpaddressmask=0 FreeBSD 5-7 #sysctl -w net.inet.icmp.maskrepl=0 HP-UX 10 #ndd -set /dev/ip ip_respond_to_address_mask_broadcast 0 #ndd -set /dev/ip ip_respond_to_timestamp_broadcast 0 Linux2.4-2.6 #sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 OpenBSD3-4 已经是缺省设置 Solaris8-10 #ndd -set /dev/ip ip_respond_to_address_mask_broadcast 0 #ndd -set /dev/ip ip_respond_to_timestamp_broadcast |
#p#
二、 IP 协议部分
IP协议是TCP/IP中最重要的协议之一,提供无连接的数据包传输机制,其主要功能有:寻址、路由选择、分段和组装。
1 禁用IP源路由
IP协议允许一台主机指定数据包通过你的网络的路由,而不是允许网络组件确定最佳的路径。这个功能的合法的应用是用于诊断连接故障。但是,这种用途很少应用。这项功能最常用的用途是为了侦察目的对你的网络进行镜像,或者用于攻击者在你的专用网络中寻找一个后门。除非指定这项功能只能用于诊断故障,否则应该关闭这个功能。
AIX5 #no -o ipsrcroutesend=0 #no -o ipsrcrouteforward=0 FreeBSD 5-7 #sysctl -w net.inet.ip.sourceroute=0 #sysctl -w net.inet.ip.accept_sourceroute=0 HP-UX 10 #ndd -set /dev/ip ip_src_route_forward 0 Linux2.4-2.6 #sysctl -w net.ipv4.conf.all.accept_source_route=0 #sysctl -w net.ipv4.conf.all.forwarding=0 #sysctl -w net.ipv4.conf.all.mc_forwarding=0 OpenBSD3-4 已经是缺省设置 Solaris8-10 #ndd -set /dev/ip ip_forward_src_routed 0 #ndd -set /dev/ip ip6_forward_src_routed 0 |
2健全强制检查,也被称为入口过滤或出口过滤
Linux2.4-2.6 #sysctl -w net.ipv4.conf.all.rp_filter=1 |
3 记录日志和丢弃 "Martian"数据包
Linux2.4-2.6 #sysctl -w net.ipv4.conf.all.log_martians=1 |
#p#
三、 TCP协议部分
TCP使用三次握手机制来建立一条连接,握手的第一个报文为SYN包;第二个报文为 SYN/ACK包,表明它应答第一个SYN包同时继续握手过程;第三个报文仅仅是一个应答,表示为ACK包。若A为连接方,B为响应方,其间可能的威胁有:
◆攻击者监听B方发出的SYN/ACK报文。
◆攻击者向B方发送RST包,接着发送SYN包,假冒A方发起新的连接。
◆B方响应新连接,并发送连接响应报文SYN/ACK。
◆攻击者再假冒A方对B方发送ACK包。
这样攻击者便达到了破坏连接的作用,若攻击者再趁机插入有害数据包,则后果更严重。
针对ICMP协议的攻击包括:
◆TCP SYN 扫描属于端口扫描:TCP SYN 扫描是 端口扫描的变体。端口扫描用来检查给定主机上的端口是否打开。
◆SYN 扩散属于拒绝服务攻击:Smurf 攻击流行之前,SYN 扩散攻击是最具破坏性的拒绝服务攻击。
1 在TCP重负载下增加系统弹性(这使系统更能抵抗SYN洪水攻击)
有以下几个步骤:
◆购买更多的物理内存。
◆使用SYN Cookies (包括Linux2.4-2.6、BSD )技术 。当半连接队列满时,SYN cookies并不丢弃SYN请求,而是通过加密技术来标识半连接状态。限制同时打开的SYN 半连接数。
◆增加最大半连接数:大量的SYN请求导致未连接队列被塞满,使正常的TCP连接无法顺利完成三次握手,通过增大未连接队列空间可以缓解这种压力。
◆缩短SYN半连接的timeout时间
通过增大backlog队列能防范SYN攻击;另外减少超时时间也使系统能处理更多的SYN请求。timeout超时时间,也即半连接存活时间,是系统所有重传次数等待的超时时间总和,这个值越大,半连接数占用backlog队列的时间就越长,系统能处理的SYN请求就越少。为缩短超时时间,可以通过缩短重传超时时间(一般是第一次重传超时时间)和减少重传次数来实现。
AIX5 #no -o clean_partial_conns=1 FreeBSD 5-7 #sysctl -w kern.ipc.somaxconn=1024 HP-UX 10 #ndd -set /dev/tcp tcp_syn_rcvd_max 1024 #ndd -set /dev/tcp tcp_conn_request_max 200 #ndd -set /dev/tcp tcp_time_wait_interval 60000 Linux2.4-2.6 #sysctl -w net.ipv4.tcp_max_syn_backlog=2048 #sysctl -w net.ipv4.tcp_syncookies=1 #sysctl –w net.ipv4.tcp_synack_retries="0" OpenBSD3-4 已经是缺省设置 Solaris8-10 #ndd -set /dev/tcp tcp_conn_req_max_q 1024 #ndd -set /dev/tcp tcp_conn_req_max_q0 4096 #ndd -set /dev/tcp tcp_time_wait_interval 60000 |
说明:关于SYN攻击防范技术,归纳起来,主要有两大类,一类是通过防火墙、路由器等过滤网关防护,另一类是通过加固TCP/IP协议栈防范.但必须清楚的是,SYN攻击不能完全被阻止,我们所做的是尽可能的减轻SYN攻击的危害,除非将TCP协议重新设计。
2 增加TCP发送和接受窗口为至少32 kbytes不过不要超过64kbytes
AIX5 #no -o tcp_sendspace=32768 #no -o tcp_recvspace=32768 FreeBSD 5-7 #sysctl -w net.inet.tcp.sendspace=32768 #sysctl -w net.inet.tcp.recvspace=32768 HP-UX 10 已经是缺省设置 Linux2.4-2.6 内核支持RFC 1323 和 RFC 2018可以动态调整 OpenBSD3-4 内核支持RFC 1323 和 RFC 2018可以动态调整 Solaris8-10 #ndd -set /dev/tcp tcp_xmit_hwat 32768 #ndd -set /dev/tcp tcp_recv_hwat 32768 |
#p#
四、 ARP协议部分
在OSI模型的第2层是数据链路层,该层提供了网络节点间的数据传输机制。该层重要的原因是它负责将数据分割成帧进行传输。在数据链路层上有许多值得我们探讨的不安全因素,但是其中最重要的是地址分辨协议(ARP)。
1 减少ARP缓存清理时间间隔
地址解析协议ARP正是用来进行IP地址到MAC地址的转换的.同时为了避免不必要的ARP报文查询,每台主机的操作系统都维护着一个ARP高速缓存ARP Cache,记录着同一链路上其它主机的IP地址到MAC地址的映射关系.ARP高速缓存通常是动态的,该缓存可以手工添加静态条目,由系统在一定的时间间隔后进行刷新。ARP协议虽然是一个高效的数据链路层协议,但作为一个局域网协议,它是建立在各主机之间相互信任的基础上的,所以ARP协议存在以下缺陷:ARP高速缓存根据所接收到的ARP协议包随时进行动态更新;ARP协议没有连接的概念,任意主机即使在没有ARP请求的时候也可以做出应答;ARP协议没有认证机制,只要接收到的协议包是有效的,主机就无条件的根据协议包的内容刷新本机ARP缓存,并不检查该协议包的合法性.因此攻击者可以随时发送虚假ARP包更新被攻击主机上的ARP缓存,进行地址欺骗或拒绝服务攻击. 调整ARP清理的时间,通过向IP路由缓冲填充伪造的ARP条目可以让恶意用户产生资源耗竭和性能减低攻击。
AIX5 #no -o arpt_killc=20 FreeBSD 5-7 #sysctl -w net.link.ether.inet.max_age=1200 Solaris8-10 #ndd -set /dev/arp arp_cleanup_interval 60000 Linux2.4-2.6 #sysctl -w net.link.ether.inet.max_age=1200 |
说明:ARP缓存清理时间间隔如果定得太大,对于一个大网来说,有可能不能分配到ip(某些分到ip地址的主机没开,也占用地址) ,定得太小,引起大量广播风暴。
总结:主要向大家介绍强化Unix 类家族系统的TCP/IP堆栈的方法。其实非常简单,通过对命令行配置,就可以保护或者减缓Unix类服务器免遭网络级别的拒绝服务攻击,包括SYN洪水攻击、ICMP攻击和SNMP攻击。
【51CTO.COM 独家特稿,转载请注明出处及作者!】
【编辑推荐】