為什么對于一些大流量的訪問服務要添加驗證碼功能?為什么抖音網頁版在不登錄的情況下,會時不時彈出一個讓你點選圖片驗證碼的功能?為什么對于微信公眾平臺要對第三方開發的服務進行白名單驗證呢?
帶著這些問題我們就開始介紹今天所要分享的內容吧?
簡單的TCP攻擊手段介紹
在介紹本次分享之前我們先來看看TCP的三次握手是如何實現的。其實在網上很多資料中都有關于TCP三次握手的原理介紹。
- 第一步、需要PC1發送一個請求報文,告訴PC2,自己將要開始傳輸數據了。
- 第二步、PC2接收到PC1發送報文之后,然后向PC1響應一個報文,告訴PC1自己準備好了。可以發送數據了。
- 第三步、PC1收到了PC2發送的響應報文之后,就開始給PC2發送消息了。
上面這過程就是一個簡單的TCP三次握手的過程。
那么在這個過程中,就存在兩種網絡攻擊手段。
SYN ACK攻擊
例如在PC1發出請求的時候,會發送很多的SYN請求,并且這些請求的Seq是遞增的,這有點像是一個復讀機一樣,一直在詢問PC2有沒有準備好。然后PC2在接收到這么多的請求之后,就一直會去響應這樣的請求。無法去處理其他的正常請求。
UDP反射攻擊
這種攻擊方式就有點意思了,假設有一個騙子冒充PC1給PC2發送請求,并且攜帶的需要響應的IP地址是192.168.1.23,但是實際上這個時候PC1的IP地址是192.168.1.15,那么這個時候PC2在收到了請求之后,就會往192.168.1.23上去響應數據,這個時候真正的192.168.1.23的機器由于并沒有發送過相關的請求,在收到了這個請求之后,就很蒙圈,這是誰發的呀?
然后如果將上面兩種攻擊方式結合到一起,這個時候就會給192.168.1.23的機器造成很大的傷害呀?
當然這只是眾多的攻擊手段中很容易理解的一種攻擊手段。
什么是DDoS攻擊呢?
簡單來講DDoS攻擊就是分布式拒絕服務攻擊,簡單的來說,就是使用大量的僵尸用戶,在同一時間內發送很多的請求,這樣經過一段時間的攻擊,服務器的網絡和IO等資源就會被耗盡,也就會進入癱瘓狀態,這是一種非常粗暴的攻擊方式。而且DDoS攻擊一直存在并且一直也沒有很好的解決方案。雖然沒有根治的辦法但是DDoS攻擊還是可以有效的進行防御的。
預防DDoS攻擊
目前防御DDoS攻擊主要有兩種方案。
CDN技術
一種是采用CDN技術,用分布式的方式去對抗分布式攻擊,攻擊者組織了千軍萬馬的僵尸用戶進行攻擊,那么防御者也采用分身技術來制造出更多的響應來對付,可能這些僵尸用戶的攻擊全部都在分身上攻擊呢?真真的服務器并不會受到傷害。
不過采用CDN技術的方案,有幾個比較明顯的缺陷。
第一就是真實的服務器IP不能泄露,真實的服務器IP必須要被隱藏在分布式網絡環境中,如果真實的IP被找到之后,相當于分身的真身被找到了,那這樣的攻擊立馬就打到了真身上。也就是說如果某個CDN被攻破了,真實的IP被泄露了,那么服務器就慘了。
第二這也是CND的特性,所有的數據都需要通過公網來進行傳輸,而這對一些交互性比較強的系統性能上也是有所損耗的。所以并不是所有的系統都適合采用CDN技術。
高防服務器
第二種就是防御方式就是高防服務器,高防服務器就完全可以克服CDN所帶來的缺點,它可以讓服務器暴露真實的IP地址,當然所暴露的也是高防服務器的IP地址,而真實的業務服務是與高防的服務以內網通信的方式進行連接的。真實的業務服務器IP并不會直接暴露在互聯網中。
從這一點上來看,高防服務器就完全可以支持高并發實時系統。當然高防服務器并不是沒有缺點的,它有一個比較明顯的缺點就是貴,真的是貴。防御能力越強的服務器,費用就越貴。當然,采用了高防服務器,服務所能承受的攻擊也會更大,如果想要攻擊這樣的服務器的話,攻擊方的成本也是非常巨大的。
為什么高防服務器那么貴呢?首先根據之前提到,要想承受住DDoS攻擊那么首先它自身得具備足夠大的上游流量的帶寬,如果一個高防服務器能夠抵抗150G的攻擊,那么它的上游的帶寬也必須大于150G,這個概念與我們一般能夠接觸到的帶寬大小完全不是一個量級的,如果它沒有這樣的帶寬,那么DDoS攻擊會很快的吃滿帶寬,還沒有來得及清洗異常連接,就已經起不到高防的作用了。
其次,一個高防服務器必須要有強大的硬件支持,想要知道,一般的網卡所能承受的流量也就是1G左右,而服務器上所用的網卡一般也只有10G到40G左右,所以150G的帶寬所需要的硬件也是非常重要的,所以一般采用多態機器來構成一個負載均衡的架構。
第三,針對一些超高流量的訪問,CPU的處理能力也是非常重要的。畢竟流量清洗工作就是需要去識別在網絡數據包中存在的異常數據包,而這個過程需要的就是CPU處理能力。提到流量清洗,那么下面我們就來介紹什么是流量清洗?
什么是流量清洗?
一個比較經典的高防體系流量流向是這樣的。進入流量,進入到流量清洗設備中,然后進入到抗CC防火墻,最后經過內網到被保護的服務器中,如下圖所示。
也就是說需要經過兩道流量清洗過程才會進入到最終的服務器中。為什么要分兩道流量清洗呢?通過TCP/IP 的五層網絡模型,我們知道,被利用用來進行DDoS攻擊的主要是網絡層、傳輸層和應用層。
這里提到的第一道流量清洗是針對網絡層和傳輸層的流量清洗。這兩層有什么地方可以被攻擊呢?在網絡通信中,所有的通信規則都是由人提前制定好的,一個簡單的例子,上面提到的SYN ACK攻擊。
而高防的第二道防線就是CC防火墻,在TCP或者是UDP協議中,通過洪水手段或者是反射手段都是可以追蹤到攻擊者的IP的。也是由于這個原因,現在很少有人通過這種方式來進行攻擊了。通常我們知道了攻擊者的IP地址或者是IP段之后,通過一些規則就可以完全進行清洗了。
CC防火墻則是用來對抗應用層的攻擊,如果將傳輸層和網絡層封裝的數據類比與快遞包裹,那么最終使用快遞包裹中的數據的就是應用層用戶了,也就是說當你的運輸手段都合法的情況下是可以將一個定時炸彈運輸到你的手中的,這個時候定時炸彈爆炸,也是會對你造成傷害的。
而CC防火墻就是防止了這種情況的出現,通過對于HTTP中的請求頭的合法性校驗來判斷所傳輸的數據包中是否包含異常信息。而這種包含的信息中很大程度上的目的就是通過某些手段來拖垮服務器帶寬,或者是讓CPU使用率增加,使得應用服務器受到傷害。
到這里,我們也就明白為什么會有那么多的驗證碼,為什么要添加服務器白名單了吧!其實都是為了給高防服務器提供科學有效的防御規則。通過驗證碼的方式來驗證流量是否是從正常IP發出,通過白名單的方式來驗證是否存在不是從白名單中的流量進入到服務器中。
總結
上面我們介紹了關于DDOS攻擊相關的內容,并且介紹了如何科學有效的防護DDoS攻擊攻擊的手段。希望能對大家理解DDoS攻擊有所幫助。