歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 遭受拒絕服務攻擊事件的分析及對策

遭受拒絕服務攻擊事件的分析及對策

日期:2017/2/27 14:19:52   编辑:更多Linux

   上段時間國內部分站點遭到了較大規模的拒絕服務(D.O.S)攻擊(包括類似前期yahoo等大型國際網站所遭受的的Ddos攻擊 --分布式拒絕服務攻擊)。波及的網站包括知名的新聞網站、商業網站、證券網站,甚至是部分網絡安全站點等。造成的症狀為:站點無法訪問,響應速度極慢,影響到周圍相關網段的其他主機等,至今還 有很多站點未恢復正常,無法正常訪問。    作為國內第一個網絡安全站點,我們的主站www.isbase.com也同樣受到了極其猛烈的拒絕服務攻擊。公司技術人員立即做出響應:針對攻擊的方式及可能采用的攻擊手段,提出了切實可行的完整解決方 案,把攻擊的危害降到了最低。現在網站一切正常,雖然攻擊仍舊在繼續,但對服務器的影響已經降到了最小,不會影響服務器的正常運作。同時,我們積極聯系了其他受攻擊的同行站點,表明攻擊來自同 一類手法,可能來自某人(團體)蓄意所為。另外,對我們近期為其他站點所做的緊急響應情況來看,此次攻擊的規模之廣,強度之大令人發指。在采取了我公司應的解決方案後,接受緊急響應的網站都已 恢復正常。    我們根據自己站點所受攻擊的來對此次大規模拒絕服務攻擊做初步分析報告:    從被攻擊的症狀來看,這次的攻擊大致有以下幾種:分布式拒絕服務攻擊、Syn-Flood攻擊,icmp炸彈(ping of death)等幾種。這個估計是根據審查我們站點被攻擊後留下的紀錄,分析這些記錄後得出的初步結論。    要防范拒絕服務攻擊,首先要從強化自身做起。     針對目前D.O.S攻擊的實施手段,我們預先采取了以下的一些措施:    1.為防止Syn-Flood攻擊(Syn-Flood攻擊的具體原理參見本站的技術文章),我們對默認安裝的系統進行了強化,主要是通過重新編譯內核,以及設定相應的內核參數使得系統強制對超時的Syn請求連 接數據包復位,同時通過縮短超時常數和加長等候隊列使得系統能迅速處理無效的Syn請求數據包。如果不強制對這些無效的數據包進行清除復位,將大大加重系統的負載,最終將導致系統失去響應。    2.為防止icmp炸彈的攻擊,在系統內核中對icmp數據包的流量進行限定允許。並在系統參數中對此限定值調整。以防止系統由此而造成的失去響應。    3.在系統中加裝防火牆系統,利用防火牆系統對所有出入的數據包進行過濾。    4.仔細調整服務器的各項參數。根據我們站點訪問量大的特點,對Web服務器和Mail服務器進行適度的預加重處理,即通過預先使服務器達到一定的負載,以使得整個系統的負載變化在訪問量變化時不 會出現很大的變化,如果出現了很大的變化,很有可能使得服務器崩潰。這和在建築中廣泛采用的預應力技術的原理是一致的。    在完成了對服務器的強化後,還必須使用一些有效的方法和規則來檢測和發現拒絕服務攻擊,並能在檢測到拒絕服務攻擊後采取相應的對策。    檢測的手段很多,可以通過察看路由器紀錄和系統紀錄以及站點目前狀態來實現。   通常,我們在設計防火牆的時候預先對某些特殊類型的IP數據包進行過濾(不需要紀錄)。這些特殊的IP是不能在Internet網上出現的(無法路由)。而要進行拒絕服務攻擊往往最需要這類有來無回的 數據包,來隱蔽攻擊者的真實地址和身份。而一旦這類地址的出現,往往就標志著某種拒絕服務攻擊的開始。   這一大類的地址是127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16這四個網段的地址。就我們的防火牆的規則而言,對這三個地址段是完全拒絕任何數據包的: deny all。然後通過檢測對這些規則的計數,來判決是否存在某些攻擊行為。如當我們發現在我們的計數器中發現如下的情況:    0 0 deny ip from any to 127.0.0.0/8   4552 553302 deny ip from 10.0.0.0/8 to any   0 0 deny ip from any to 10.0.0.0/8   0 0 deny ip from 172.16.0.0/12 to any   0 0 deny ip from any to 172.16.0.0/12   97601 11024404 deny ip from 192.168.0.0/16 to any   0 0 deny ip from any to 192.168.0.0/16    這時,我們就可以推斷是有人在拒絕服務攻擊,當我們利用"netstat –angrep SYN_RCVD"來檢測當時的網絡連接數目時,我們會發現有大量的SYN_RCVD類型的連接:    tcp4 0 0 202.109.114.50.80 203.93.217.52.2317 SYN_RCVD   tcp4 0 0 202.109.114.50.80 61.136.54.73.1854 SYN_RCVD    這就說明了此時服務器正在遭受Syn-Flood攻擊。紀錄這類攻擊的IP地址是毫無意義的(因為這些IP地址都是在程序中通過改變數據包頭而偽造的)。    而對於分布式拒絕服務攻擊,由於采用了大流量攻擊手法,會造成該網段路由器的阻塞,從而使得該網段內幾乎所有的服務器可用的帶寬都變的極小,對外造成不能訪問的現象。而此時,該網段主干路 由器亦承受極大的負載。對於Linux系統來說可以考慮重新編譯內核,將network中enable tcp_syncookie然後在使用新內核啟動,並且在/etc/rc.d/rc.local中添加並在命令行運行echo 1 >/proc/sys/net/ipv4/tcp_syncookies來防止synflood攻擊。


   而對於ICMP包炸彈這裡攻擊,則可以通過在防火牆上設置紀錄來實現檢測。一旦發現在一定的時間內有量的ICMP包湧入,而內核由於ICMP包的流量過載而出現警告,則說明存在此類的攻擊行為。這時, 可以從系統所紀錄的日志上看到,類似於如下的紀錄:    Deny ICMP 202.96.113.53 202.109.114.50 in   Deny ICMP 202.96.113.53 202.109.114.50 in   Deny ICMP 202.96.113.53 202.109.114.50 in   Deny ICMP 202.96.113.53 202.109.114.50 in   Deny ICMP 202.96.113.53 202.109.114.50 in    在檢測到攻擊行為後,就應該采取一些措施使得攻擊的影響減至最小。    對於分布式攻擊,目前還沒有非常有效方法來防御,我們所能做的是讓ISP對主干路由器進行限流措施來降低攻擊所造成的影響。    對於SYN-FLOOD攻擊,一方面要在服務器端打Syn-flood的補丁,另一方面需要在該網段的路由器上做些配置的調整。這些調整包括限制Syn半開數據包的流量和個數,在路由器的前端做必要的TCP攔截( 目前限於Cisco系列IOS12.0),並在路由器上設定相當嚴格的定時常數,利用路由器的TCP攔截技術使得只有完成TCP三次握手過程的數據包進入該網段,這樣可以有效地保護本網段內的服務器不受此類攻擊 。同時,在路由器的訪問列表裡拒絕10.0.0.0/8,172.16.0.0/12,192.168.0.0/16這三個虛擬網段的訪問。對於linux可以考慮使用防火牆規則來限制來自這些數據報的命令: ipchains -I input -i lo -s 127.0.0.02 -j ACCEPT ipchains -I input -s 127.0.0.02 -j DENY ipchains -I input -s 192.168.0.0/16 -j DENY ipchains -I input -s 172.16.0.0/12 -j DENY ipchains -I input -s 10.0.0.0/8 -j DENY    對於ICMP攻擊可以采取的方法一:在服務器端拒絕所有的ICMP包;(對於Linux系統運行echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all,並將該命令添加到/etc/rc.d/rc.local最後)    要徹底杜絕拒絕服務攻擊,只有追根溯源去找到正在進行攻擊的機器和攻擊者。 要追蹤攻擊者不是一件很容易的事情,一旦其停止了攻擊行為,很難將其發現。唯一可行的方法就是在其進行攻擊的時候,根據路由器的信息和攻擊數據包的特征,采用一級一級回溯的方法來查找其攻擊源 頭。這時需要各級部門的協同配合才能很好的完成。



ipchains -I input -s 192.168.0.0/16 -j DENY ipchains -I input -s 172.16.0.0/12 -j DENY ipchains -I input -s 10.0.0.0/8 -j DENY    對於ICMP攻擊可以采取的方法一:在服務器端拒絕所有的ICMP包;(對於Linux系統運行echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all,並將該命令添加到/etc/rc.d/rc.local最後)    要徹底杜絕拒絕服務攻擊,只有追根溯源去找到正在進行攻擊的機器和攻擊者。 要追蹤攻擊者不是一件很容易的事情,一旦其停止了攻擊行為,很難將其發現。唯一可行的方法就是在其進行攻擊的時候,根據路由器的信息和攻擊數據包的特征,采用一級一級回溯的方法來查找其攻擊源 頭。這時需要各級部門的協同配合才能很好的完成。



Copyright © Linux教程網 All Rights Reserved