DDoS—未知的恐懼:如何面對它、處理它、放下它

SKY YU·2017年3月8日

前言

過完農曆新年,台灣金融界和資安界最熱鬧的,大概就是台灣各大券商被駭客使用DDoS攻擊癱瘓網站,嘗試勒索贖金的新聞了。周邊很多朋友都對這個議題有興趣,剛好曾經接觸過一些相關案例,也有些相關資訊,這邊就帶入一個簡單的情境,來模擬對應實際的網路設備與機制,讓非技術相關人員也可以了解其中的原理,與可能的應對方式,若有錯誤的地方,也請各位高手朋友們多多指教了。

情境模擬

說故事前,我們先對網路服務中所有相關角色進行對應,模擬情境如下:假設我們身處一個很特別的城市,城市裡的交通運輸工具只有中央車站提供的市區巴士,遊客要往返各個景點或商店,只能先到中央車站,再搭乘店家租用的市區巴士前往;我們是城市裡的一家茶餐廳,藉由提供餐飲茶水營利,我們的客戶數量很穩定,一天來客數在1000人以內,即使在最繁忙的用餐時段,同一時間的最大來客數也不會超過100人,因此我們跟中央車站租用了三台50人的巴士,店內的用餐位置有150個空位,並且雇用了30位服務生,每位服務生同時能服務五個客戶以上,確保我們在最繁忙的時候,也能順利提供服務。

我們的用餐流程和一般餐廳相同,為了確保供餐的服務品質與時效性,服務生在客人入坐了之後,會提供菜單確認客人是否已準備用餐,待客人完成點餐後,服務生將菜單送入廚房,並於餐點完成後提供給客人,客人用完餐後前往櫃檯買單後離開,服務生清理桌面等待下一組客人來臨。

上面這個情境中,對應實際網路環境的角色如下:

攻擊手法

描述完防禦方的情境,攻擊方的攻擊手法又是怎麼樣呢?故事繼續進行:
我們的生意一直很穩定,也保持了一定的利潤,此時另一家茶餐廳開始覬覦這門生意,想要分食這塊市場,於是他們使用一些手法來搗亂我們的服務流程,這樣他們就可以搶走我們的客人了,他們可能使用的攻擊手法(DDoS)可歸納為三類:

1.頻寬攻擊(Volumetric attack):

攻擊目標:市區巴士
攻擊方法:派一堆黑衣人、模特兒人偶、電冰箱、大型廢棄家具等,在中央車站屬於我們餐廳的巴士路線等候區,跟客人一起排隊搭車,本來一台可以承載50個客人的巴士,現在只能載10個黑衣人、10個模特兒人偶、2台電冰箱和一組沙發,車上真正要來光顧的客人可能不到兩位,其他的客人則跟著這些奇怪的東西混雜著排隊,我們在中央車站排隊等著上巴士的客人,已經直接排到車站外面去了

客人:根本上不了巴士,看不到餐廳招牌,直接放棄前往用餐

現況描述:如下圖那兩隻多出來的綠色柱子,這種DDoS攻擊是發送一堆無效無意義內容都是垃圾的大容量封包,完全不管後方服務器會不會回應,目的只在佔用有限的頻寬,頻寬佔住了,封包就無法順利傳遞,服務也就失效了,此類攻擊來源可能都是偽造的。

封包內容如下圖,頻寬中塞滿了無意義數據的大封包

2.TCP機制耗盡攻擊(TCP exhausted attack):

攻擊目標:菜單、座位、服務生
攻擊方法:派一堆已經到店內的黑衣人只聽音樂不聽話,只看菜單不點菜、或是根本沒有遞交點菜單,卻一直催促著上菜,從開始營業就佔住店內所有座位直到打烊,使店內永遠客滿,服務生永遠焦頭爛額,電影古惑仔裡面也有出現這招
客人:看到了餐廳招牌,但是餐廳永遠沒座位,直接放棄用餐
現況描述:如下圖左邊那突出的紅色線條,洪水類(flood)的攻擊皆屬此類,發送一堆假冒的TCP狀態封包,如syn,ack,fin,rst等,嘗試混淆主機處理TCP的狀態,藉此佔用主機相關資源,攻擊來源可能都是偽造的。

封包內容如下圖,一堆沒有完成或異常的TCP請求

3.CC攻擊(ChallengeCollapsar attack/slow and low attack):

攻擊目標:服務生
攻擊方法:派幾個看似一般客人的黑衣人,對服務生用坦尚尼亞語點餐、或是點牛肉麵不要牛肉、點煎餃不要煎,讓服務生花費大量的時間應付這些奇怪的請求,本來一個服務生可以同時服務5個客人,現在只能一對一,於是有120個客戶只能看著菜單發呆

客人:坐到了位置也拿了菜單,但是服務生永遠沒空,只能坐在位置上乾瞪眼

現況描述:如下圖,這類攻擊最難防禦,攻擊者發送少量(可能比正常量多一點點,讓防守方不容易察覺)正常且極耗資源的請求(例如對整個DB進行名稱查詢),然後在主機回覆後,再次重複地送出類似的請求,藉此拖住主機效能。這就是為什麼大部分論壇的搜索功能,會限制高等級帳號才能使用,以及每次查詢需要等待一段時間才能再度查詢的原因,因為這類正常的請求,如果不加以限制次數與頻率,服務器馬上就要回應5XX訊息了,此類攻擊來源都是真的。

被攻擊的目標類型:

DDoS的目的,是讓服務的有效性失效,攻擊者須付出成本去發動攻擊,時間拖得越長對攻擊者來說,成本越高也越不利,所以只要攻擊有效,花一塊能讓對方少賺兩塊,攻擊者就會持續對目標壓著打,因此並非每種網路服務都會直接面臨這種威脅,依服務的敏感度不同,我暫且分成以下三級:

第一級:可接受無預警斷線一小時以上,且斷線不影響營收的服務:
例如個人部落格,新聞網站等沒有收費的資訊傳播的網路服務

第二級:可接受無預警斷線30分鐘以上,斷線會部分影響營收的服務,但有其他非網路平台的因應措施:

這次的證券業者就是很好的例子,斷線對他們來說影響的是從網路下單的手續費,證券戶還是可以透過語音或是電話進行下單,證券業者也不需要因為網站掛點,對客戶進行賠償

第三級:不可接受任何無預警的斷線,斷線會全面影響營收的服務,無其他非網路平台的因應措施

電信商或網路遊戲供應商等都屬此類,這類服務的客戶非常敏感,服務不穩永遠比供應商更早知道,因為這些服務7×24都有用戶/玩家在使用,一但服務失效就要面臨沒有收入和賠償的問題

以上分類並非絕對,而且都還是有特例的,例如2014年的蘋果日報還是被DDoS,但攻擊者的目的不在金錢利益,而是在阻擋香港雨傘革命的即時新聞資訊傳遞,對蘋果來說只是第一手的資訊無法即時網路發送,並不會因此被讀者求償。

企業可以依此分類自行評估自己的狀況,如果沒有到第二甚至第三級,基本上不用太擔心DDoS的攻擊,因為對攻擊者而言無利可圖,就算真的被打掛了也對己無損(這次事件中除了網路下單的手續費之外,有哪家券商有其他的損失嗎?);若企業有心想要投資DDoS防禦,預算上僅需只要記住一個重點:在BCP中這項服務的失效,會對企業帶來多大的損失,然後將這個損失數字的30%左右拿來進行防禦即可(最多建議不要超過50%,這樣的防禦代價太高了)

可能的解決方案:

這邊說明一些我們所見過聽過接觸過的解決方案,如果有其他的建議,也很歡迎提出討論:

1.請中央車站的警衛(防禦設備)在入口處,先清查過濾這類不合理又奇怪的排隊客人(骨幹流量清洗服務):國外很多大型的ISP都有提供這類服務,如AT&T、Verizon和NTT等,清洗效果明顯但是價格高昂,絕對不是兩手一攤就能輕易取得的服務啊!此項選擇適合銀彈充足的企業

2.另外找轉運站來承接中央車站過來的流量,由轉運站的警衛清查過濾後再將正常的客戶由巴士轉運到餐廳(雲端清洗服務):國外很多的雲服務公司如cloudflare、incapsula、akamai等皆有提供此類服務,他們的頻寬充足清洗速度快,比較要注意的是有些服務延遲較高,網頁型等服務比較沒關係,但是對延遲敏感的服務恐怕只能另尋他案。此類服務也不便宜,計費方式各家不同,有興趣的朋友去這個網頁比較看看吧
http://www.toptenreviews.com/busine⋯⋯

3.跟中央車站租用更多的市區巴士來疏運這類的排隊客人(增購頻寬或多線路路由):比看看是對方派來亂的客人多,還是我們的巴士數量多;由於租用頻寬不便宜,加上現在攻擊的流量隨便都在10G以上,租用10G頻寬的價錢並非一般企業所能負擔。在頻寬租用成本高,加上攻擊流量成本低這不對稱的情況下,不推薦使用這個解決方案

4.僱請中央車站的警衛在店門口進行清查過濾(買防禦設備在自家機房):很多企業會被設備商或是系統整合商說服,購買清洗設備放置在本地端進行防禦,但是瑞凡,不管你的設備再會洗再能洗,你知道設備能洗的量還是取決於頻寬嗎?就算設備標榜能每秒清洗1T的流量,但是對外頻寬只有100M,那麼設備就只能洗100M,其餘的流量還是一樣塞爆頻寬。

在頻寬不大的情況下,極度不推薦此方案,花了大錢買了設備但是完全沒有解決問題,還要找機櫃接電拉線弄空調,不要被設備商/系統整合商呼隆囉

以上是將這幾年一些DDoS的經驗與大家分享,也感謝背後默默協助我的神隊友們提供想法做法與實際參與協防,這是一場資源消耗戰,只要找對方向準備充足的資源應對,要有效防禦DDoS並非難事。希望藉由這些資訊,可以讓防禦方更即時有效地找出對應方式,脫離DDoS攻擊的威脅。

https://www.facebook.com/notes/sky-yu/ddos未知的恐懼如何面對它處理它放下它/10154354521746961