现在网络技术日新月异
,不断有新技术被不同类型软件所使用。在提高开发软件各个方面性能同时,也增加了系统安全隐患。例如:云技术能够为我们带来了一个更加有效地利用网络资源和整合网络数据模式;不过,这个新技术引出了安全的担心。
网络安全是涉及到网络各个方面内容,现在最为突出问题就是网络攻击。根据近年来接触到问题,总结了下面几个现在比较常用网络攻击手法和一些防御测试。
DDos--分布式拒绝服务攻击
DDos 是 Distributed Denial of service , 这种攻击起源于1996年;此攻击主要利用合理的服务请求来占用过多的服务资源,从而使服务器无法处理合法用户的指令。有以下主要几种具体攻击手段:
(1)SYN 洪水攻击
原理:SYN 洪水攻击主要是利用TCP协议缺陷,通过“肉鸡”伪造地址和发送大量的半连接请求,使得主机一直等待半连接请求的回复。通过此方法不断耗费主机有限的CPU资源和内存资源。
攻击手段:一般都是开发专门制造洪水攻击程序;程序核心主要是伪造一个TCP协议信息头和IP协议的信息头
- TCP_HEADER tcpheader;
- IP_HEADER ipheader;
-
- ipheader.h_verlen=(4<<4 | sizeof(IP_HEADER)/sizeof(unsigned long));
- ipheader.total_len = htons(sizeof(IP_HEADER)+sizeof(TCP_HEADER));
- ipheader.ident = 1;
- ipheader.frag_and_flags = 0;
- ipheader.ttl = 128;
- ipheader.proto = IPPROTO_TCP;
- ipheader.checksum =0;
- ipheader.sourceIP = htonl(FakeIpHost+SendSEQ);
- ipheader.destIP = inet_addr(DestIP);
-
- tcpheader.th_dport=htons(port);
- tcpheader.th_sport = htons(8080);
- tcpheader.th_seq = htonl(SEQ+SendSEQ);
- tcpheader.th_ack = 0;
- tcpheader.th_lenres =(sizeof(TCP_HEADER)/4<<4|0);
- tcpheader.th_flag = 2;
- tcpheader.th_win = htons(16384);
- tcpheader.th_urp = 0;
- tcpheader.th_sum =
防御手段:
1)使用硬防火墙过滤;硬件防火墙明显提高防御性能,基本能拦截95%~99%的攻击信息包;服务器依然会接受到攻击的信息包。缺点:只能被动提高防御性能
2)使用门户代理过滤;防御效果非常明显,曾经试过被20G数据攻击。经过美国某防御门户过滤后,大概只有几十K有效数据发送到服务器上。缺点:在使用了防御门户后,服务端与客户端之交互延时非常严重(>1000MS)。
3)修改服务器一些网络安全参数设定;如:Window
可以修改下面一些配置SynAttackProtect,TcpMaxPortsExhausted,TcpMaxHalfOpen和
TcpMaxHalfOpenRetried等;更加详细相关配置设定介绍可以到网上搜索一下,应该不少。系统的防御性能提高有限,但无需要任何投入。
4)机器群集均衡负载;这个方法是一个最有效和成本最高的方法。这里我就不多讲最后这个方法啦。
总结:SYN洪水攻击主要是攻击方与防御方比拼硬件资源和防御策略。
(2)流量攻击
原理:流量攻击主要是“肉鸡”通过对目的主机的服务端口发送大量的垃圾数据,导致目的主机的网络堵塞。在网络上很多文章都会将SYN洪水攻击和流量攻击视
作为相同手段。从监控软件来看,被这两种攻击时候都会表现为网络流量暴涨导致网络堵塞。其实,这两种攻击的网络堵塞原因是有本质上区别的。流量攻击导致网
络堵塞是某些IP机器实际发送大量垃圾信息去耗尽主机带宽;SYN洪水攻击导致网络堵塞是目标主机本身所有资源被伪造半连接请求耗尽了,使得机器根本不能
继续接受新连接。
攻击手段:最简单流量攻击程序都是将简单Socket 程序中的sendBuf 修改为大于64K数据块就可以了。
-
- sendto(sock,sendBuf,dataSize,0,(struct sockaddr*) &sockAddr,sizeof(sockAddr));
防御手段:
1)使用硬防火墙过滤;根据服务程序现状设定合适策略,基本拦截95~99%的垃圾信息;流量攻击拦截非常依靠硬件防火墙设定策略,有效策略会大大提高系统防御性能。
2)使用门户代理过滤;参照【SYN洪水攻击】相应描述.
3)优化服务端程序解密算法
现在一般网络上C/S 或者B/S
架构模式的程序,在系统互相通信指令上基本都是密文。当系统服务端程序受到攻击时候,服务的解密算法就会受到巨大压力,很容易导致服务器资源耗尽。所以,
为了提高系统在高压力下生存率,选择高效解密方法是很有必要。
4)增加服务端程序网络异常处理
在一定高压力情况下,除了需要确保服务端的”稳定性“;还需要确保系统的”准确性“。对一些网络异常中断的情况,制定一些补救性措施和机制。特别是一些实时性系统特别重要,按过往经验在一定压力情况下会出现非常离谱错误。
5)增加服务端程序防御策略
由于DDos
攻击往往都使用IP地址”欺骗“技术,在行业里面暂时没有比较有效的反击方法。所以,现在最流行防御策略就是服务端” 装死 “。身边其他人称为”
信息忽略回馈机制“,主要思想就是当系统收到一个不能识别的指令时候,立即掉弃连接和不对连接作出任何反馈信息。除了”
信息忽略回馈机制“外,还有一些商业上和业务上防御策略。如: 账户锁定策略,IP锁定策略和服务器认证策略等。
总结:流量攻击是检验防御方网络流量,系统安全策略,系统异常处理和系统性能。在项目时间允许情况下,这个测试是必不可少的。
(3)HTTP洪水攻击
原理:HTTP洪水是利用【应用层】中HTTP协议缺陷;不断发送没有完成的HTTP头,直到你的服务器耗尽所有的资源。
攻击手段:
1)首先向服务器发出如下HTTP头部:
GET / HTTP/1.1\r\n
Host: host\r\n
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0;
Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.503l3; .NET
CLR 3.0.4506.2152; .NET CLR 3.5.30729; MSOffice 12)\r\n
Content-Length: 42\r\n
2)然后每隔一定时间继续发出一个自定义的头部:
X-a: b\r\n
须知根据HTTP协议,HTTP请求头部与请求主体的分隔是多一个\r\n。也就是说上述的HTTP头部一直没有发送完成,HTTP服务器会等在那里准备
接受余下的内容,一直到接受超时,然后关闭连接。默认的apache读取头部的超时据说是3000秒。Apache的情况是,每接受一个连接新开一个进程
或线程,这样新接受一个连接的资源消耗很大,我测试的过结果是,一般apache只需在超时时间内,持续发送500个以上的包,apache就不会再接收
新的连接了。
防御手段:
1)减少HTTP头部连接超时的时间,尤其是HTTP请求中GET、HEAD方法的超时时间。注意一般POST方法的头部包含了上传的内容,所以传输时间会很长,要避免将合法的请求提前关闭。
2)限定单个IP的连接数。缺点是,有些学校、大公司都通过NAT方式连接互联网,所以同一个IP的连接数会很多。
3)特别针对Apache,将Nginx此类反向服务器放在apache前面,用来撑连接,代理合法的请求。
4)使用硬防火墙过滤;
5)使用门户代理过滤;
总结:HTTP协议的缺陷其实是TCP/IP协议缺陷的一个延伸,只是表现在应用层网络协议面上。
本人水平有限,若有不准确地方欢迎提出。
MK-TIANYI