TikTok三面:“聊聊TCP/IP常見的攻擊手段”。
下面的內(nèi)容主要和大家一起學習回顧關于 TCP/IP 的常見攻擊,你需要至少有一個基本的認識。
概覽

1 IP欺騙
IP是什么
在網(wǎng)絡中,所有的設備都會分配一個地址。這個地址就仿佛小藍的家地址「多少號多少室」,這個號就是分配給整個子網(wǎng)的,「室」對應的號碼即分配給子網(wǎng)中計算機的,這就是網(wǎng)絡中的地址?!柑枴箤奶柎a為網(wǎng)絡號,「室」對應的號碼為主機號,這個地址的整體就是IP地址。
通過IP地址我們能知道什么?
通過 IP 地址,我們就可以知道判斷訪問對象服務器的位置,通過這個 IP 地址就可以判斷訪問對象服務器的位置,從而將消息發(fā)送到服務器。一般發(fā)送者發(fā)出的消息首先經(jīng)過子網(wǎng)的集線器,轉(zhuǎn)發(fā)到最近的路由器,然后根據(jù)路由位置訪問下一個路由器的位置,直到重點
IP頭部格式

IP欺騙技術
騙唄,拐騙,誘騙!
IP 欺騙技術就是偽造某臺主機的 IP 地址的技術。通過IP 地址的偽裝使得某臺主機能夠偽裝另外的一臺主機,而這臺主機往往具有某種特權或者被另外的主機所信任。
假設現(xiàn)在有一個合法用戶 (1.1.1.1) 已經(jīng)同服務器建立正常的連接,攻擊者構造攻擊的 TCP 數(shù)據(jù),偽裝自己的 IP 為 1.1.1.1,并向服務器發(fā)送一個帶有 RSI 位的 TCP 數(shù)據(jù)段。服務器接收到這樣的數(shù)據(jù)后,認為從 1.1.1.1 發(fā)送的連接有錯誤,就會清空緩沖區(qū)中建立好的連接。
這時,如果合法用戶 1.1.1.1 再發(fā)送合法數(shù)據(jù),服務器就已經(jīng)沒有這樣的連接了,該用戶就必須從新開始建立連接。攻擊時,偽造大量的IP地址,向目標發(fā)送 RST 數(shù)據(jù),使服務器不對合法用戶服務。雖然IP地址欺騙攻擊有著相當難度,但我們應該清醒地意識到,這種攻擊非常廣泛,入侵往往從這種攻擊開始。
2 SYN Flooding
SYN Flooding簡介
拒絕服務攻擊(DDoS)從1970 年出現(xiàn)直到今天都依然在作祟,并給全球范圍內(nèi)的各大組織帶來了不可估量的損失。SYN Flood是互聯(lián)網(wǎng)上最經(jīng)典的DDoS攻擊方式之一,最早出現(xiàn)于 1999 年左右,雅虎是當時最著名的受害者。SYN Flood攻擊利用了 TCP 三次握手的缺陷,能夠以較小代價使目標服務器無法響應,且難以追查。
SYN flood 是一種常見的 DOS(denial of service拒絕服務)和 DDos (distributed denial of serivce 分布式拒絕服務)攻擊方式。這是一種使用TCP協(xié)議缺陷,發(fā)送大量的偽造的 TCP 連接請求,使得被攻擊方 CPU 或內(nèi)存資源耗盡,最終導致被攻擊方無法提供正常的服務。
TCP SYN Flood攻擊原理
TCP SYN Flood 攻擊利用的是 TCP 的三次握手(SYN -> SYN/ACK -> ACK),假設連接發(fā)起方是A,連接接受方是 B,即 B 在某個端口(Port)上監(jiān)聽A發(fā)出的連接請求,過程如下圖所示,左邊是A,右邊是B。

A 首先發(fā)送 SYN(Synchronization)消息給 B,要求 B 做好接收數(shù)據(jù)的準備;B 收到后反饋 SYN-ACK(Synchronization-Acknowledgement) 消息給A,這個消息的目的有兩個:
向 A 確認已做好接收數(shù)據(jù)的準備,
同時要求 A 也做好接收數(shù)據(jù)的準備,此時 B 已向 A 確認好接收狀態(tài),并等待 A 的確認,連接處于半開狀態(tài)(Half-Open),顧名思義只開了一半;A 收到后再次發(fā)送 ACK (Acknowledgement) 消息給B,向 B 確認也做好了接收數(shù)據(jù)的準備,至此三次握手完成,「連接」就建立了,
大家注意到?jīng)]有,最關鍵的一點在于雙方是否都按對方的要求進入了可以接收消息的狀態(tài)。而這個狀態(tài)的確認主要是雙方將要使用的消息序號(SquenceNum),TCP 為保證消息按發(fā)送順序抵達接收方的上層應用,需要用消息序號來標記消息的發(fā)送先后順序的。
TCP是「雙工」(Duplex)連接,同時支持雙向通信,也就是雙方同時可向?qū)Ψ桨l(fā)送消息,其中 SYN 和 SYN-ACK 消息開啟了A→B的單向通信通道(B 獲知了 A 的消息序號);SYN-ACK 和 ACK 消息開啟了B→A單向通信通道(A獲知了B的消息序號)。
上面討論的是雙方在誠實守信,正常情況下的通信。
但實際情況是,網(wǎng)絡可能不穩(wěn)定會丟包,使握手消息不能抵達對方,也可能是對方故意不按規(guī)矩來,故意延遲或不發(fā)送握手確認消息。
假設 B 通過某 TCP 端口提供服務,B 在收到 A 的 SYN 消息時,積極的反饋了 SYN-ACK 消息,使連接進入半開狀態(tài),因為 B 不確定自己發(fā)給 A 的 SYN-ACK 消息或 A 反饋的 ACK 消息是否會丟在半路,所以會給每個待完成的半開連接都設一個Timer,如果超過時間還沒有收到 A 的 ACK 消息,則重新發(fā)送一次 SYN-ACK 消息給A,直到重試超過一定次數(shù)時才會放棄。

B 為幫助 A 能順利連接,需要分配內(nèi)核資源維護半開連接,那么當 B 面臨海量的連接 A 時,如上圖所示,SYN Flood 攻擊就形成了。攻擊方 A 可以控制肉雞向 B 發(fā)送大量 SYN 消息但不響應 ACK 消息,或者干脆偽造 SYN 消息中的 Source IP,使 B 反饋的 SYN-ACK 消息石沉大海,導致 B 被大量注定不能完成的半開連接占據(jù),直到資源耗盡,停止響應正常的連接請求。
3 UDP Flooding
UDP 洪泛是也是一種拒絕服務攻擊,將大量的用戶數(shù)據(jù)報協(xié)議(UDP)數(shù)據(jù)包發(fā)送到目標服務器,目的是壓倒該設備的處理和響應能力。防火墻保護目標服務器也可能因 UDP 泛濫而耗盡,從而導致對合法流量的拒絕服務。
UDP Flood攻擊如何工作?
UDP Flood 主要通過利用服務器響應發(fā)送到其中一個端口的 UDP 數(shù)據(jù)包所采取的步驟。在正常情況下,當服務器在特定端口接收到 UDP 數(shù)據(jù)包時,會經(jīng)過兩個步驟:
服務器首先檢查是否正在運行正在偵聽指定端口的請求的程序。
如果沒有程序在該端口接收數(shù)據(jù)包,則服務器使用 ICMP(ping)數(shù)據(jù)包進行響應,以通知發(fā)送方目的地不可達。
舉個例子。假設今天要聯(lián)系酒店的小藍,酒店客服接到電話后先查看房間的列表來確保小藍在客房內(nèi),隨后轉(zhuǎn)接給小藍。
首先,接待員接收到呼叫者要求連接到特定房間的電話。接待員然后需要查看所有房間的清單,以確??腿嗽诜块g中可用,并愿意接聽電話。碰巧的是,此時如果突然間所有的電話線同時亮起來,那么他們就會很快就變得不堪重負了。
當服務器接收到每個新的 UDP 數(shù)據(jù)包時,它將通過步驟來處理請求,并利用該過程中的服務器資源。發(fā)送 UDP 報文時,每個報文將包含源設備的 IP 地址。在這種類型的 DDoS 攻擊期間,攻擊者通常不會使用自己的真實 IP 地址,而是會欺騙 UDP 數(shù)據(jù)包的源 IP 地址,從而阻止攻擊者的真實位置被暴露并潛在地飽和來自目標的響應數(shù)據(jù)包服務器。
由于目標服務器利用資源檢查并響應每個接收到的 UDP 數(shù)據(jù)包的結果,當接收到大量 UDP 數(shù)據(jù)包時,目標的資源可能會迅速耗盡,導致對正常流量的拒絕服務。

如何緩解UDP洪水攻擊?
大多數(shù)操作系統(tǒng)部分限制了 ICMP 報文的響應速率,以中斷需要 ICMP 響應的 DDoS 攻擊。這種緩解的一個缺點是在攻擊過程中,合法的數(shù)據(jù)包也可能被過濾。如果 UDP Flood 的容量足夠高以使目標服務器的防火墻的狀態(tài)表飽和,則在服務器級別發(fā)生的任何緩解都將不足以應對目標設備上游的瓶頸。
4 TCP 重置攻擊
在 TCP 重置攻擊中,攻擊者通過向通信的一方或雙方發(fā)送偽造的消息,告訴它們立即斷開連接,從而使通信雙方連接中斷。正常情況下,如果客戶端收發(fā)現(xiàn)到達的報文段對于相關連接而言是不正確的,TCP 就會發(fā)送一個重置報文段,從而導致 TCP 連接的快速拆卸。
TCP 重置攻擊利用這一機制,通過向通信方發(fā)送偽造的重置報文段,欺騙通信雙方提前關閉 TCP 連接。如果偽造的重置報文段完全逼真,接收者就會認為它有效,并關閉 TCP 連接,防止連接被用來進一步交換信息。服務端可以創(chuàng)建一個新的 TCP 連接來恢復通信,但仍然可能會被攻擊者重置連接。萬幸的是,攻擊者需要一定的時間來組裝和發(fā)送偽造的報文,所以一般情況下這種攻擊只對長連接有殺傷力,對于短連接而言,你還沒攻擊呢,人家已經(jīng)完成了信息交換。
從某種意義上來說,偽造 TCP 報文段是很容易的,因為 TCP/IP 都沒有任何內(nèi)置的方法來驗證服務端的身份。有些特殊的 IP 擴展協(xié)議(例如 IPSec)確實可以驗證身份,但并沒有被廣泛使用??蛻舳酥荒芙邮請笪亩?,并在可能的情況下使用更高級別的協(xié)議(如 TLS)來驗證服務端的身份。但這個方法對 TCP 重置包并不適用,因為 TCP 重置包是 TCP 協(xié)議本身的一部分,無法使用更高級別的協(xié)議進行驗證。
5. 模擬攻擊
以下實驗是在
OSX系統(tǒng)中完成的,其他系統(tǒng)請自行測試。
現(xiàn)在來總結一下偽造一個 TCP 重置報文要做哪些事情:
嗅探通信雙方的交換信息。
截獲一個
ACK標志位置位 1 的報文段,并讀取其ACK號。偽造一個 TCP 重置報文段(
RST標志位置為 1),其序列號等于上面截獲的報文的ACK號。這只是理想情況下的方案,假設信息交換的速度不是很快。大多數(shù)情況下為了增加成功率,可以連續(xù)發(fā)送序列號不同的重置報文。將偽造的重置報文發(fā)送給通信的一方或雙方,時其中斷連接。
為了實驗簡單,我們可以使用本地計算機通過 localhost 與自己通信,然后對自己進行 TCP 重置攻擊。需要以下幾個步驟:
在兩個終端之間建立一個 TCP 連接。
編寫一個能嗅探通信雙方數(shù)據(jù)的攻擊程序。
修改攻擊程序,偽造并發(fā)送重置報文。
下面正式開始實驗。
建立 TCP 連接
可以使用 netcat 工具來建立 TCP 連接,這個工很多操作系統(tǒng)都預裝了。打開第一個終端窗口,運行以下命令:
$ nc -nvl 8000
這個命令會啟動一個 TCP 服務,監(jiān)聽端口為 8000。接著再打開第二個終端窗口,運行以下命令:
$ nc 127.0.0.1 8000
該命令會嘗試與上面的服務建立連接,在其中一個窗口輸入一些字符,就會通過 TCP 連接發(fā)送給另一個窗口并打印出來。

嗅探流量
編寫一個攻擊程序,使用 Python 網(wǎng)絡庫 scapy 來讀取兩個終端窗口之間交換的數(shù)據(jù),并將其打印到終端上。代碼比較長,下面為一部份,完整代碼后臺回復 TCP攻擊,代碼的核心是調(diào)用 scapy 的嗅探方法:

這段代碼告訴 scapy 在 lo0 網(wǎng)絡接口上嗅探數(shù)據(jù)包,并記錄所有 TCP 連接的詳細信息。
iface : 告訴 scapy 在
lo0(localhost)網(wǎng)絡接口上進行監(jiān)聽。lfilter : 這是個過濾器,告訴 scapy 忽略所有不屬于指定的 TCP 連接(通信雙方皆為
localhost,且端口號為8000)的數(shù)據(jù)包。prn : scapy 通過這個函數(shù)來操作所有符合
lfilter規(guī)則的數(shù)據(jù)包。上面的例子只是將數(shù)據(jù)包打印到終端,下文將會修改函數(shù)來偽造重置報文。count : scapy 函數(shù)返回之前需要嗅探的數(shù)據(jù)包數(shù)量。
發(fā)送偽造的重置報文
下面開始修改程序,發(fā)送偽造的 TCP 重置報文來進行 TCP 重置攻擊。根據(jù)上面的解讀,只需要修改 prn 函數(shù)就行了,讓其檢查數(shù)據(jù)包,提取必要參數(shù),并利用這些參數(shù)來偽造 TCP 重置報文并發(fā)送。
例如,假設該程序截獲了一個從(src_ip, src_port)發(fā)往 (dst_ip, dst_port)的報文段,該報文段的 ACK 標志位已置為 1,ACK 號為 100,000。攻擊程序接下來要做的是:
由于偽造的數(shù)據(jù)包是對截獲的數(shù)據(jù)包的響應,所以偽造數(shù)據(jù)包的源
IP/Port應該是截獲數(shù)據(jù)包的目的IP/Port,反之亦然。將偽造數(shù)據(jù)包的
RST標志位置為 1,以表示這是一個重置報文。將偽造數(shù)據(jù)包的序列號設置為截獲數(shù)據(jù)包的 ACK 號,因為這是發(fā)送方期望收到的下一個序列號。
調(diào)用
scapy的send方法,將偽造的數(shù)據(jù)包發(fā)送給截獲數(shù)據(jù)包的發(fā)送方。
對于我的程序而言,只需將這一行取消注釋,并注釋這一行的上面一行,就可以全面攻擊了。按照步驟 1 的方法設置 TCP 連接,打開第三個窗口運行攻擊程序,然后在 TCP 連接的其中一個終端輸入一些字符串,你會發(fā)現(xiàn) TCP 連接被中斷了!
進一步實驗
可以繼續(xù)使用攻擊程序進行實驗,將偽造數(shù)據(jù)包的序列號加減 1 看看會發(fā)生什么,是不是確實需要和截獲數(shù)據(jù)包的
ACK號完全相同。打開
Wireshark,監(jiān)聽 lo0 網(wǎng)絡接口,并使用過濾器ip.src == 127.0.0.1 && ip.dst == 127.0.0.1 && tcp.port == 8000來過濾無關數(shù)據(jù)。你可以看到 TCP 連接的所有細節(jié)。在連接上更快速地發(fā)送數(shù)據(jù)流,使攻擊更難執(zhí)行。
6 中間人攻擊
豬八戒要向小藍表白,于是寫了一封信給小藍,結果第三者小黑攔截到了這封信,把這封信進行了篡改,于是乎在他們之間進行搞破壞行動。這個馬文才就是中間人,實施的就是中間人攻擊。好我們繼續(xù)聊聊什么是中間人攻擊。
什么是中間人
攻擊中間人攻擊英文名叫 Man-in-the-MiddleAttack,簡稱「MITM攻擊」。指攻擊者與通訊的兩端分別創(chuàng)建獨立的聯(lián)系,并交換其所收到的數(shù)據(jù),使通訊的兩端認為他們正在通過一個私密的連接與對方 直接對話,但事實上整個會話都被攻擊者完全控制。我們畫一張圖:

從這張圖可以看到,中間人其實就是攻擊者。通過這種原理,有很多實現(xiàn)的用途,比如說,你在手機上瀏覽不健康網(wǎng)站的時候,手機就會提示你,此網(wǎng)站可能含有病毒,是否繼續(xù)訪問還是做其他的操作等等。
中間人攻擊的原理
舉個例子,我和公司簽了一個一份勞動合同,一人一份合同。不曉得哪個可能改了合同內(nèi)容,不知道真假了,怎么搞?只好找專業(yè)的機構來鑒定,自然就要花錢。
在安全領域有句話:我們沒有辦法杜絕網(wǎng)絡犯罪,只好想辦法提高網(wǎng)絡犯罪的成本。既然沒法杜絕這種情況,那我們就想辦法提高作案的成本,今天我們就簡單了解下基本的網(wǎng)絡安全知識,也是面試中的高頻面試題了。
為了避免雙方說活不算數(shù)的情況,雙方引入第三家機構,將合同原文給可信任的第三方機構,只要這個機構不監(jiān)守自盜,合同就相對安全。
如果第三方機構內(nèi)部不嚴格或容易出現(xiàn)紕漏
雖然我們將合同原文給第三方機構了,為了防止內(nèi)部人員的更改,需要采取什么措施呢
一種可行的辦法是引入摘要算法。即合同和摘要一起,為了簡單的理解摘要。大家可以想象這個摘要為一個函數(shù),這個函數(shù)對原文進行了加密,會產(chǎn)生一個唯一的散列值,一旦原文發(fā)生一點點變化,那么這個散列值將會變化。
有哪些常用的摘要算法呢
目前比較常用的加密算法有消息摘要算法和安全散列算法(SHA)。MD5 是將任意長度的文章轉(zhuǎn)化為一個128位的散列值,可是在2004年,MD5 被證實了容易發(fā)生碰撞,即兩篇原文產(chǎn)生相同的摘要。這樣的話相當于直接給黑客一個后門,輕松偽造摘要。
所以在大部分的情況下都會選擇SHA算法
出現(xiàn)內(nèi)鬼了怎么辦?
看似很安全的場面了,理論上來說杜絕了篡改合同的做法。主要某個員工同時具有修改合同和摘要的權利,那搞事兒就是時間的問題了,畢竟沒哪個系統(tǒng)可以完全的杜絕員工接觸敏感信息,除非敏感信息都不存在。所以能不能考慮將合同和摘要分開存儲呢
那如何確保員工不會修改合同呢
這確實蠻難的,不過辦法總比困難多。我們將合同放在雙方手中,摘要放在第三方機構,篡改難度進一步加大
那么員工萬一和某個用戶串通好了呢
看來放在第三方的機構還是不好使,同樣存在不小風險。所以還需要尋找新的方案,這就出現(xiàn)了數(shù)字簽名和證書
數(shù)字證書和簽名
同樣的,舉個例子。Sum 和 Mike 兩個人簽合同。Sum 首先用 SHA 算法計算合同的摘要,然后用自己私鑰將摘要加密,得到數(shù)字簽名。Sum 將合同原文、簽名,以及公鑰三者都交給 Mike

如果 Sum 想要證明合同是 Mike 的,那么就要使用 Mike 的公鑰,將這個簽名解密得到摘要x,然后Mike 計算原文的sha摘要Y,隨后對比x和y,如果兩者相等,就認為數(shù)據(jù)沒有被篡改
在這樣的過程中,Mike 是不能更改 Sum 的合同,因為要修改合同不僅僅要修改原文還要修改摘要,修改摘要需要提供Mike 的私鑰,私鑰即 Sum 獨有的密碼,公鑰即 Sum 公布給他人使用的密碼
總之,公鑰加密的數(shù)據(jù)只能私鑰可以解密。私鑰加密的數(shù)據(jù)只有公鑰可以解密,這就是非對稱加密
對稱與非對稱加密
隱私保護?不是嚇唬大家,信息是透明的兄die,不過盡量去維護個人的隱私吧,今天學習對稱加密和非對稱加密。
大家先讀讀這個字"鑰",是讀"yao",我以前也是,其實讀"yue"
對稱加密
對稱加密,顧名思義,加密方與解密方使用同一鑰匙(秘鑰)。具體一些就是,發(fā)送方通過使用相應的加密算法和秘鑰,對將要發(fā)送的信息進行加密;對于接收方而言,使用解密算法和相同的秘鑰解鎖信息,從而有能力閱讀信息。

常見的對稱加密算法
DES
DES使用的密鑰表面上是64位的,然而只有其中的56位被實際用于算法,其余8位可以被用于奇偶校驗,并在算法中被丟棄。因此,DES 的有效密鑰長度為56位,通常稱 DES 的密鑰長度為56位。假設秘鑰為 56 位,采用暴力破Jie的方式,其秘鑰個數(shù)為2的56次方,那么每納秒執(zhí)行一次解密所需要的時間差不多1年的樣子。當然,沒人這么干。DES 現(xiàn)在已經(jīng)不是一種安全的加密方法,主要因為它使用的56位密鑰過短。

IDEA
國際數(shù)據(jù)加密算法(International Data Encryption Algorithm)。秘鑰長度128位,優(yōu)點沒有專利的限制。
AES
當DES被破解以后,沒過多久推出了 AES 算法,提供了三種長度供選擇,128 位、192 位和 256,為了保證性能不受太大的影響,選擇128即可。
SM1和SM4
之前幾種都是國外的,我們國內(nèi)自行研究了國密 **SM1 **和 SM4。其中S都屬于國家標準,算法公開。優(yōu)點就是國家的大力支持和認可
總結下幾種

非對稱算法
在對稱加密中,發(fā)送方與接收方使用相同的秘鑰。那么在非對稱加密中則是發(fā)送方與接收方使用的不同的秘鑰。其主要解決的問題是防止在秘鑰協(xié)商的過程中發(fā)生泄漏。比如在對稱加密中,小藍將需要發(fā)送的消息加密,然后告訴你密碼是123balala,ok,對于其他人而言,很容易就能劫持到密碼是123balala。那么在非對稱的情況下,小藍告訴所有人密碼是123balala,對于中間人而言,拿到也沒用,因為沒有私鑰。所以,非對稱密鑰其實主要解決了密鑰分發(fā)的難題。如下圖

其實我們經(jīng)常都在使用非對稱加密,比如使用多臺服務器搭建大數(shù)據(jù)平臺hadoop,為了方便多臺機器設置免密登錄,是不是就會涉及到秘鑰分發(fā)。再比如搭建docker集群也會使用相關非對稱加密算法。
常見的非對稱加密
RSA(RSA 加密算法,RSA Algorithm)
優(yōu)勢是性能比較快,如果想要較高的加密難度,需要很長的秘鑰。
ECC
基于橢圓曲線提出。是目前加密強度最高的非對稱加密算法
SM2
同樣基于橢圓曲線問題設計。最大優(yōu)勢就是國家認可和大力支持。
三種對比

散列算法
這個大家應該更加熟悉了,比如我們平常使用的MD5校驗,在很多時候,我并不是拿來進行加密,而是用來獲得唯一性ID。在做系統(tǒng)的過程中,存儲用戶的各種密碼信息,通常都會通過散列算法,最終存儲其散列值。
常見的散列
MD5
MD5 可以用來生成一個 128 位的消息摘要,它是目前應用比較普遍的散列算法,具體的應用場景你可以自行 參閱。雖然,因為算法的缺陷,它的唯一性已經(jīng)被破解了,但是大部分場景下,這并不會構成安全問題。但是,如果不是長度受限(32 個字符),我還是不推薦你繼續(xù)使用 MD5 的。
SHA
安全散列算法。**SHA **分為 SHA1 和 SH2 兩個版本。該算法的思想是接收一段明文,然后以一種不可逆的方式將它轉(zhuǎn)換成一段(通常更小)密文,也可以簡單的理解為取一串輸入碼(稱為預映射或信息),并把它們轉(zhuǎn)化為長度較短、位數(shù)固定的輸出序列即散列值(也稱為信息摘要或信息認證代碼)的過程。
SM3
國密算法SM3。加密強度和SHA-256想不多。主要是收到國家的支持。
總結

至此,總結下,大部分情況下使用對稱加密,具有比較不錯的安全性。如果需要分布式進行秘鑰分發(fā),考慮非對稱。如果不需要可逆計算則散列算法。因為這段時間有這方面需求,就看了一些這方面的資料,入坑信息安全,就怕以后洗發(fā)水都不用買。謝謝大家查看!
問題還有,此時如果 Sum 否認給過 Mike 的公鑰和合同,不久gg了
所以需要 Sum 過的話做過的事兒需要足夠的信譽,這就引入了第三方機構和證書機制。
證書之所以會有信用,是因為證書的簽發(fā)方擁有信用。所以如果 Sum 想讓 Mike 承認自己的公鑰,Sum 不會直接將公鑰給 Mike ,而是提供由第三方機構,含有公鑰的證書。如果 Mike 也信任這個機構,法律都認可,那ik,信任關系成立

如上圖所示,Sum 將自己的申請?zhí)峤唤o機構,產(chǎn)生證書的原文。機構用自己的私鑰簽名 Sum 的申請原文(先根據(jù)原文內(nèi)容計算摘要,再用私鑰加密),得到帶有簽名信息的證書。Mike 拿到帶簽名信息的證書,通過第三方機構的公鑰進行解密,獲得 Sum 證書的摘要、證書的原文。有了 Sum 證書的摘要和原文,Mike 就可以進行驗簽。驗簽通過,Mike 就可以確認 Sum 的證書的確是第三方機構簽發(fā)的。
用上面這樣一個機制,合同的雙方都無法否認合同。這個解決方案的核心在于需要第三方信用服務機構提供信用背書。這里產(chǎn)生了一個最基礎的信任鏈,如果第三方機構的信任崩潰,比如被黑客攻破,那整條信任鏈條也就斷裂了
為了讓這個信任條更加穩(wěn)固,就需要環(huán)環(huán)相扣,打造更長的信任鏈,避免單點信任風險

上圖中,由信譽最好的根證書機構提供根證書,然后根證書機構去簽發(fā)二級機構的證書;二級機構去簽發(fā)三級機構的證書;最后有由三級機構去簽發(fā) Sum 證書。
如果要驗證 Sum 證書的合法性,就需要用三級機構證書中的公鑰去解密 Sum 證書的數(shù)字簽名。
如果要驗證三級機構證書的合法性,就需要用二級機構的證書去解密三級機構證書的數(shù)字簽名。
如果要驗證二級結構證書的合法性,就需要用根證書去解密。
以上,就構成了一個相對長一些的信任鏈。如果其中一方想要作弊是非常困難的,除非鏈條中的所有機構同時聯(lián)合起來,進行欺詐。
中間人攻擊如何避免?
既然知道了中間人攻擊的原理也知道了他的危險,現(xiàn)在我們看看如何避免。相信我們都遇到過下面這種狀況:

出現(xiàn)這個界面的很多情況下,都是遇到了中間人攻擊的現(xiàn)象,需要對安全證書進行及時地監(jiān)測。而且大名鼎鼎的github網(wǎng)站,也曾遭遇過中間人攻擊:
想要避免中間人攻擊的方法目前主要有兩個:
客戶端不要輕易相信證書:因為這些證書極有可能是中間人。
App 可以提前預埋證書在本地:意思是我們本地提前有一些證書,這樣其他證書就不能再起作用了。
7 DDOS
通過上面的描述,總之即好多種攻擊都是 DDOS 攻擊,所以簡單總結下這個攻擊相關內(nèi)容。
其實,像全球互聯(lián)網(wǎng)各大公司,均遭受過大量的 DDoS。
2018年,GitHub 在一瞬間遭到高達 1.35Tbps 的帶寬攻擊。這次 DDoS 攻擊幾乎可以堪稱是互聯(lián)網(wǎng)有史以來規(guī)模最大、威力最大的 DDoS 攻擊了。在 GitHub 遭到攻擊后,僅僅一周后,DDoS 攻擊又開始對 Google、亞馬遜甚至 Pornhub 等網(wǎng)站進行了 DDoS 攻擊。后續(xù)的 DDoS 攻擊帶寬最高也達到了 1Tbps。
那 DDoS 攻擊究竟是什么?
DDos 全名 Distributed Denial of Service,翻譯成中文就是分布式拒絕服務。指的是處于不同位置的多個攻擊者同時向一個或數(shù)個目標發(fā)動攻擊,是一種分布的、協(xié)同的大規(guī)模攻擊方式。單一的DoS攻擊一般是采用一對一方式的,它利用網(wǎng)絡協(xié)議和操作系統(tǒng)的一些缺陷,采用欺騙和偽裝的策略來進行網(wǎng)絡攻擊,使網(wǎng)站服務器充斥大量要求回復的信息,消耗網(wǎng)絡帶寬或系統(tǒng)資源,導致網(wǎng)絡或系統(tǒng)不勝負荷以至于癱瘓而停止提供正常的網(wǎng)絡服務。
舉個例子
我開了一家有五十個座位的重慶火鍋店,由于用料上等,童叟無欺。平時門庭若市,生意特別紅火,而對面二狗家的火鍋店卻無人問津。二狗為了對付我,想了一個辦法,叫了五十個人來我的火鍋店坐著卻不點菜,讓別的客人無法吃飯。
上面這個例子講的就是典型的 DDoS 攻擊,一般來說是指攻擊者利用“肉雞”對目標網(wǎng)站在較短的時間內(nèi)發(fā)起大量請求,大規(guī)模消耗目標網(wǎng)站的主機資源,讓它無法正常服務。在線游戲、互聯(lián)網(wǎng)金融等領域是 DDoS 攻擊的高發(fā)行業(yè)。
攻擊方式很多,比如 ICMP Flood、UDP Flood、NTP Flood、SYN Flood、CC 攻擊、DNS Query Flood等等。
SYN Flood進行DDoS攻擊的實現(xiàn)原理**
SYN Flood 是一種利用 TCP 協(xié)議缺陷,發(fā)送大量偽造的 TCP 連接請求,從而使得被攻擊方資源耗盡(CPU滿負荷或內(nèi)存不足)的攻擊方式。
一次正常的建立 TCP 連接,需要三次握手:客戶端發(fā)送 SYN 報文,服務端收到請求并返回報文表示接受,客戶端也返回確認,完成連接。
SYN Flood 就是用戶向服務器發(fā)送報文后突然死機或掉線,那么服務器在發(fā)出應答報文后就無法收到客戶端的確認報文(第三次握手無法完成),這時服務器端一般會重試并等待一段時間后再丟棄這個未完成的連接。
一個用戶出現(xiàn)異常導致服務器的一個線程等待一會兒并不是大問題,但惡意攻擊者大量模擬這種情況,服務器端為了維護數(shù)以萬計的半連接而消耗非常多的資源,結果往往是無暇理睬客戶的正常請求,甚至崩潰。從正??蛻舻慕嵌瓤磥?,網(wǎng)站失去了響應,無法訪問。
如何應對 DDoS 攻擊?
高防服務器
還是拿開的重慶火鍋店舉例,高防服務器就是我給重慶火鍋店增加了兩名保安,這兩名保安可以讓保護店鋪不受流氓騷擾,并且還會定期在店鋪周圍巡邏防止流氓騷擾。
高防服務器主要是指能獨立硬防御 50Gbps 以上的服務器,能夠幫助網(wǎng)站拒絕服務攻擊,定期掃描網(wǎng)絡主節(jié)點等,這東西是不錯,就是貴~
黑名單
面對火鍋店里面的流氓,我一怒之下將他們拍照入檔,并禁止他們踏入店鋪,但是有的時候遇到長得像的人也會禁止他進入店鋪。這個就是設置黑名單,此方法秉承的就是“錯殺一千,也不放一百”的原則,會封鎖正常流量,影響到正常業(yè)務。
DDoS 清洗
DDos 清洗,就是我發(fā)現(xiàn)客人進店幾分鐘以后,但是一直不點餐,我就把他踢出店里。
DDoS 清洗會對用戶請求數(shù)據(jù)進行實時監(jiān)控,及時發(fā)現(xiàn) **DOS **攻擊等異常流量,在不影響正常業(yè)務開展的情況下清洗掉這些異常流量。
CDN 加速
CDN 加速,我們可以這么理解:為了減少流氓騷擾,我干脆將火鍋店開到了線上,承接外賣服務,這樣流氓找不到店在哪里,也耍不來流氓了。
在現(xiàn)實中,CDN 服務將網(wǎng)站訪問流量分配到了各個節(jié)點中,這樣一方面隱藏網(wǎng)站的真實 IP,另一方面即使遭遇 DDoS 攻擊,也可以將流量分散到各個節(jié)點中,防止源站崩潰。
總結
計算機網(wǎng)絡涉及的知識點較多,文中也就算是提了一下,更深此的理解還需要大家去看相應的書籍,感覺看了這一篇,當面試官問 DDOS 或者 TCP 涉及哪些攻擊技術知識點的時候,能夠回答出來就好了,咋們下一篇再見!
不知不覺中這篇文章從素材的確認,關鍵字的過濾,上下文的銜接,畫圖,算下來差不多兩周,不過在這個過程確實學習了不少新的知識點。有點收獲不妨點贊,在看,轉(zhuǎn)發(fā),謝謝!
推薦?? :Github掘金計劃:Github上的一些優(yōu)質(zhì)項目搜羅
推薦?? :星球一周年福利
推薦?? :嘮嘮嗑!大學那會接私活賺了3w+
推薦?? :怎么吃透一個 Java 項目?新人如何上手一個項目的開發(fā)?
