現在網絡技術日新月異
,不斷有新技術被不同類型軟件所使用。在提高開發軟件各個方面性能同時,也增加了系統安全隱患。例如:云技術能夠為我們帶來了一個更加有效地利用網絡資源和整合網絡數據模式;不過,這個新技術引出了安全的擔心。
網絡安全是涉及到網絡各個方面內容,現在最為突出問題就是網絡攻擊。根據近年來接觸到問題,總結了下面幾個現在比較常用網絡攻擊手法和一些防御測試。
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