一、事件發生
春節長假剛過完,WEB就出現故障,下午1點吃完回來,立即將桌面解鎖并習慣性的檢查了Web服務器。通過Web服務器性能監視軟件圖像顯示的向下滑行的紅色曲線看到WEB出現問題了。
根據上述的問題,我馬上開始核查Web服務器的日志,試試是否能檢測到問題究竟什么時候開始,或者發現一些關于引起中斷的線索。正當查詢線索過程中。公司首席運營官(COO)告訴我,他已經接到客戶的投訴電話,報告說無法訪問他們的網站。于是從臺式機中敲入網站地址,試著從臺式電腦訪問他們的網站,但是看到的只是無法顯示此頁面的消息。
回想前幾天也未對Web服務器做了任何改變也未對Web服務器做過任何改變,服務器曾經出現過的性能問題。在Web服務器的日志文件中沒有發現任何可疑之處,因此接下來我去仔細查看防火墻日志,和路由器日志。仔細查看了防火墻日志,打印出了那臺服務器出問題時的記錄。并過濾掉正常的流量并保留下可疑的記錄。表中顯示了打印出來的結果。
表一 防火墻日志
之后在路由器日志上做了同樣的工作并打印出了看上去異常的記錄。
攻擊期間的路由器日志
圖一
解釋:
IP packet sizedistribution 這個標題下的兩行顯示了數據包按大小范圍分布的百分率。這里顯示的內容表明:98.4%的數據包的大小在33字節到64字節之間(注意紅色標記)。
參數解釋:
IP packet sizedistribution 這個標題下的兩行顯示了數據包按大小范圍分布的百分率。這里顯示的內容表明:98.4%的數據包的大小在33字節到64字節之間。
Protocol 協議名稱
Total Flows 自從最后一次清除統計信息后,這種協議的信息流的個數。
Flows/Sec 每秒鐘時間內出現這種協議的信息流的平均個數,它等于總信息流數/綜合時間的秒數。
Packets/Flow 遵守這種協議的信息流中平均的數據包數。等于這種協議的數據包數,或者在這段綜合時間內,這種協議的信息流數。
Bytes/Pkt 遵守這種協議的數據包的平均字節數(等于這種協議總字節數,或者在這段綜合時間內,這種協議的數據包數)。B/Pkt ,這一信息流中每個數據包的平均字節數
Packets/Sec 每秒鐘時間內這種協議的平均數據包數(它等于這種協議的總數據包),或者這段綜合時間的總秒數。
Active(Sec)/Flow 從第一個數據包到終止信息流的最后一個數據包的總時間(以秒為單位,比如TCP FIN,終止時間量等等),或者這段綜合時間內這種協議總的信息流數。
Idle(Sec)/Flow 從這種協議的各個非終止信息流的最后一個數據包起,直到輸入這一命令時止的時間總和(以秒為單位),或者這段綜合時間內信息流的總時間長度。
正常路由日志
圖二
IP packet sizedistribution 這個標題下的兩行顯示了數據包按大小范圍分布的百分率。這里顯示的內容表明:2%的數據包的大小在33字節到64字節之間。
注意網站的訪問量直線下降。很明顯,在這段時間沒人能訪問他的Web服務器。我開始研究到底發生了什么,以及該如何盡快地修復。
二、事件分析
我的Web服務器發生了什么?很有可能攻擊,那么受到什么樣的攻擊呢?從這一攻擊是對回顯端口看,即是端口7,不斷發送小的UDP數據包來實現。攻擊看似發自兩個策源地,可能是兩個攻擊者同時使用不同的工具。在任何情況下,超負荷的數據流都會拖垮Web服務器。然而攻擊地址源不確定,不知道是攻擊源本身是分布的,還是同一個地址偽裝出許多不同的IP地址,這個問題比較難判斷。假如源地址不是偽裝的,是真實地址,則可以咨詢ARIN I美國Internet號碼注冊處,從它的“whois”數據庫查出這個入侵1P地址屬于哪個網絡。接下來只需聯系那個網絡的管理員就可以得到進一步的信息。
那么假如源地址是偽裝的,追蹤這個攻擊者就麻煩得多。若使用的是Cisco路由器,則還需查詢NetFlow高速緩存。NetFlow是Cisco快速轉發(CEF)交換框架的特性之一。為了追蹤這個偽裝的地址,必須查詢每個路由器上的NetFlow緩存,才能確定流量進入了哪個接口,然后通過這些路由器一次一個接口地往回一路追蹤,直至找到那個IP地址源。然而這樣做是非常難的,因為在Web Server和攻擊者的發起pc之間可能經由許多路由器,而且屬于不同的組織。另外,必須在攻擊正在進行時做這些分析。
經過分析之后,將防火墻日志和路由器日志里的信息關聯起來,發現了一些有趣的相似性,如表黑色標記處。攻擊的目標顯然是Web服務器192.68.0.175,端口為UDP 7,即回顯端口。這看起來很像拒絕服務攻擊(但還不能確定,因為攻擊的分布很隨意)。地址看起來多多少少是隨意而分散的,只有一個源地址是固定不變的,其源端口號也沒變。這很有趣。接著又將注意力集中到路由器日志上。
立刻發現,攻擊發生時路由器日志上有大量的64字節的數據包,而此時Web服務器日志上沒有任何問題。他還發現,案發時路由器日志里還有大量的“UDP-other”數據包,而Web服務器日志也一切正常。這種現象與基于UDP的拒絕服務攻擊的假設還是很相符的。
攻擊者正是用許多小的UDP數據包對Web服務器的回顯(echo 7)端口進行洪泛式攻擊,因此他們的下一步任務就是阻止這一行為。首先,我們在路由器上堵截攻擊。快速地為路由器設置了一個過濾規則。因為源地址的來源很隨機,他們認為很難用限制某個地址或某一塊范圍的地址來阻止攻擊,因此決定禁止所有發給192.168.0.175的UDP包。這種做法會使服務器喪失某些功能,如DNS,但至少能讓Web服務器正常工作。
路由器最初的臨時DOS訪問控制鏈表(ACL)
access-list 121 remark Temporary block DoS attack on web server 192.168.0.175
access-list 105 deny udp any host 192.168.0.175
access-list 105 permit ip any any
這樣的做法為Web服務器減輕了負擔,但攻擊仍能到達web,在一定程度上降低了網絡性能。 那么下一步工作是聯系上游帶寬提供商,想請他們暫時限制所有在他的網站端口7上的UDP入流量。這樣做會顯著降低網絡上到服務器的流量。
三、針對DOS預防措施
對于預防及緩解這種帶寬相關的DoS攻擊并沒有什么靈丹妙藥。本質上,這是一種“粗管子打敗細管子”的攻擊。攻擊者能“指使”更多帶寬,有時甚至是巨大的帶寬,就能擊潰帶寬不夠的網絡。在這種情況下,預防和緩解應相輔相成。
有許多方法可以使攻擊更難發生,或者在攻擊發生時減小其影響,具體如下:
Ø 網絡入口過濾
網絡服務提供商應在他的下游網絡上設置入口過濾,以防止假信息包進入網絡(而把它們留在Internet上)。這將防止攻擊者偽裝IP地址,從而易于追蹤。
Ø 網絡流量過濾
過濾掉網絡不需要的流量總是不會錯的。這還能防止DoS攻擊,但為了達到效果,這些過濾器應盡量設置在網絡上游。
Ø 網絡流量速率限制 一些路由器有流量速率的最高限制。
這些限制條款將加強帶寬策略,并允許一個給定類型的網絡流量匹配有限的帶寬。這一措施也能預先緩解正在進行的攻擊,同時,這些過濾器應盡量設置在網絡上游(盡可能靠近攻擊者);
Ø 入侵檢測系統和主機監聽工具
IDS能警告網絡管理員攻擊的發生時間,以及攻擊者使用的攻擊工具,這將能協助阻止攻擊。主機監聽工具能警告管理員系統中是否出現DoS工具
Ø 單點傳送RPF
這是CEF用于檢查在接口收到的數據包的另一特性。如果源IP地址CEF表上不具有與指向接收數據包時的接口一致的路由的話,路由器就會丟掉這個數據包。丟棄RPF的妙處在于,它阻止了所有偽裝源IP地址的攻擊。
針對DDOS預防措施
看了上面的實際案例我們也了解到,許多DDoS攻擊都很難應對,因為搞破壞的主機所發出的請求都是完全合法、符合標準的,只是數量太大。借助恰當的ACL,我們可以阻斷ICMP echo請求。但是,如果有自己的自治系統,就應該允許從因特網上ping你。不能ping通會使ISP或技術支持團隊(如果有的話)喪失某些故障排解能力。也可能碰到具有Cisco TCP截獲功能的SYN洪流:
Router(config)#ip tcp intercept list 101
Router(config)#ip tcp intercept max-incomplete high 3500
Router(config)#ip tcp intercept max-incomplete low 3000
Router(config)#ip tcp intercept one-minute high 2500
Router(config)#ip tcp intercept one-minute low 2000
Router(config)#access-list 101 permit any any
如果能采用基于上下文的訪問控制(Context Based Access Control,CBAC),則可以用其超時和閾值設置應對SYN洪流和UDP垃圾洪流。例如:
Router(config)# ip inspect tcp synwait-time 20
Router(config)# ip inspect tcp idle-time 60
Router(config)# ip inspect udp idle-time 20
Router(config)# ip inspect max-incomplete high 400
Router(config)# ip inspect max-incomplete low 300
Router(config)# ip inspect one-minute high 600
Router(config)# ip inspect one-minute low 500
Router(config)# ip inspect tcp max-incomplete host 300 block-time 0
警告:建議不要同時使用TCP截獲和CBAC防御功能,因為這可能導致路由器過載。
打開Cisco快速轉發(Cisco Express Forwarding,CEF)功能可幫助路由器防御數據包為隨機源地址的洪流。可以對調度程序做些設置,避免在洪流的沖擊下路由器的CPU完全過載:
Router(config)#scheduler allocate 3000 1000
在做了這樣的配置之后,IOS會用3s的時間處理網絡接口中斷請求,之后用1s執行其他任務。對于較早的系統,可能必須使用命令scheduler interval《milliseconds》。
四、總結
無論是出于報復、敲詐勒索、發起更大規模攻擊,DoS或DDoS攻擊都是一種不容輕視的威脅。非同一般的DoS攻擊通常是某種不完整的漏洞利用—使系統服務崩潰,而不是將控制權交給攻擊者。防范這種攻擊的辦法是及時打上來自廠商的補丁,或者對于Cisco系統,及時將操作系統升級到更新版本。同時,要關閉有漏洞的服務,或者至少要用訪問控制列表限制訪問。常規的DoS攻擊,特別是DDoS攻擊,經常不是那么有章法,也更難防范。如果整個帶寬都被蹩腳的ping洪流所耗盡,我們所能做的就很有限了。最后,必須與ISP和權力部門協作,盡可能從源頭上阻止攻擊。要用不同供應商、不同AS路徑并支持負載均衡功能的不止一條到因特網的連接,但這與應對消耗高帶寬的常規DoS/DDoS洪流的要求還相差很遠。我們總是可以用CAR或NBAR來拋棄數據包或限制發動進攻的網絡流速度,減輕路由器CPU的負擔,減少對緩沖區和路由器之后的主機的占用。
文章來源:
杭州市濱江區偉業路3號
業務熱線(微信同號):18143453325
業務郵箱:2848414880@qq.com
業務QQ:2848414880
浙公網安備 33010802012068號