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
TCP协议的攻击的内容就向大家介绍完了,希望大家已经掌握,我们还会在以后的文章中继续向大家介绍相关内容的。
【编辑推荐】