TCP/IP常見攻擊手段
這一篇主要和大家一起學習回顧關(guān)于 TCP/IP 的常見攻擊,至少有一個基本的認識
前言

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

IP欺騙技術(shù)
騙唄,拐騙,誘騙!
IP 欺騙技術(shù)就是偽造某臺主機的 IP 地址的技術(shù)。通過IP 地址的偽裝使得某臺主機能夠偽裝另外的一臺主機,而這臺主機往往具有某種特權(quán)或者被另外的主機所信任。
假設(shè)現(xiàn)在有一個合法用戶 (1.1.1.1) 已經(jīng)同服務(wù)器建立正常的連接,攻擊者構(gòu)造攻擊的 TCP 數(shù)據(jù),偽裝自己的 IP 為 1.1.1.1,并向服務(wù)器發(fā)送一個帶有 RSI 位的 TCP 數(shù)據(jù)段。服務(wù)器接收到這樣的數(shù)據(jù)后,認為從 1.1.1.1 發(fā)送的連接有錯誤,就會清空緩沖區(qū)中建立好的連接。
這時,如果合法用戶 1.1.1.1 再發(fā)送合法數(shù)據(jù),服務(wù)器就已經(jīng)沒有這樣的連接了,該用戶就必須從新開始建立連接。攻擊時,偽造大量的IP地址,向目標發(fā)送 RST 數(shù)據(jù),使服務(wù)器不對合法用戶服務(wù)。雖然IP地址欺騙攻擊有著相當難度,但我們應(yīng)該清醒地意識到,這種攻擊非常廣泛,入侵往往從這種攻擊開始。
2 SYN Flooding
SYN Flooding簡介
拒絕服務(wù)攻擊(DDoS)從1970 年出現(xiàn)直到今天都依然在作祟,并給全球范圍內(nèi)的各大組織帶來了不可估量的損失。SYN Flood是互聯(lián)網(wǎng)上最經(jīng)典的DDoS攻擊方式之一,最早出現(xiàn)于 1999 年左右,雅虎是當時最著名的受害者。SYN Flood攻擊利用了 TCP 三次握手的缺陷,能夠以較小代價使目標服務(wù)器無法響應(yīng),且難以追查。
SYN flood 是一種常見的 DOS(denial of service拒絕服務(wù))和 DDos (distributed denial of serivce 分布式拒絕服務(wù))攻擊方式。這是一種使用TCP協(xié)議缺陷,發(fā)送大量的偽造的 TCP 連接請求,使得被攻擊方 CPU 或內(nèi)存資源耗盡,最終導(dǎo)致被攻擊方無法提供正常的服務(wù)。
TCP SYN Flood攻擊原理
TCP SYN Flood 攻擊利用的是 TCP 的三次握手(SYN -> SYN/ACK -> ACK),假設(shè)連接發(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)]有,最關(guān)鍵的一點在于雙方是否都按對方的要求進入了可以接收消息的狀態(tài)。而這個狀態(tài)的確認主要是雙方將要使用的消息序號(SquenceNum),TCP 為保證消息按發(fā)送順序抵達接收方的上層應(yīng)用,需要用消息序號來標記消息的發(fā)送先后順序的。
TCP是「雙工」(Duplex)連接,同時支持雙向通信,也就是雙方同時可向?qū)Ψ桨l(fā)送消息,其中 SYN 和 SYN-ACK 消息開啟了A→B的單向通信通道(B 獲知了 A 的消息序號);SYN-ACK 和 ACK 消息開啟了B→A單向通信通道(A獲知了B的消息序號)。
上面討論的是雙方在誠實守信,正常情況下的通信。
但實際情況是,網(wǎng)絡(luò)可能不穩(wěn)定會丟包,使握手消息不能抵達對方,也可能是對方故意不按規(guī)矩來,故意延遲或不發(fā)送握手確認消息。
假設(shè) B 通過某 TCP 端口提供服務(wù),B 在收到 A 的 SYN 消息時,積極的反饋了 SYN-ACK 消息,使連接進入半開狀態(tài),因為 B 不確定自己發(fā)給 A 的 SYN-ACK 消息或 A 反饋的 ACK 消息是否會丟在半路,所以會給每個待完成的半開連接都設(shè)一個Timer,如果超過時間還沒有收到 A 的 ACK 消息,則重新發(fā)送一次 SYN-ACK 消息給A,直到重試超過一定次數(shù)時才會放棄。

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

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

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

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

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

常見的對稱加密算法
DES
DES使用的密鑰表面上是64位的,然而只有其中的56位被實際用于算法,其余8位可以被用于奇偶校驗,并在算法中被丟棄。因此,DES 的有效密鑰長度為56位,通常稱 DES 的密鑰長度為56位。假設(shè)秘鑰為 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)點就是國家的大力支持和認可
總結(jié)下幾種

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

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

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

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

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

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

出現(xiàn)這個界面的很多情況下,都是遇到了中間人攻擊的現(xiàn)象,需要對安全證書進行及時地監(jiān)測。而且大名鼎鼎的github網(wǎng)站,也曾遭遇過中間人攻擊:
想要避免中間人攻擊的方法目前主要有兩個:
客戶端不要輕易相信證書:因為這些證書極有可能是中間人。
App 可以提前預(yù)埋證書在本地:意思是我們本地提前有一些證書,這樣其他證書就不能再起作用了。
7 DDOS
通過上面的描述,總之即好多種攻擊都是 DDOS 攻擊,所以簡單總結(jié)下這個攻擊相關(guān)內(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,翻譯成中文就是分布式拒絕服務(wù)。指的是處于不同位置的多個攻擊者同時向一個或數(shù)個目標發(fā)動攻擊,是一種分布的、協(xié)同的大規(guī)模攻擊方式。單一的DoS攻擊一般是采用一對一方式的,它利用網(wǎng)絡(luò)協(xié)議和操作系統(tǒng)的一些缺陷,采用欺騙和偽裝的策略來進行網(wǎng)絡(luò)攻擊,使網(wǎng)站服務(wù)器充斥大量要求回復(fù)的信息,消耗網(wǎng)絡(luò)帶寬或系統(tǒng)資源,導(dǎo)致網(wǎng)絡(luò)或系統(tǒng)不勝負荷以至于癱瘓而停止提供正常的網(wǎng)絡(luò)服務(wù)。
舉個例子
我開了一家有五十個座位的重慶火鍋店,由于用料上等,童叟無欺。平時門庭若市,生意特別紅火,而對面二狗家的火鍋店卻無人問津。二狗為了對付我,想了一個辦法,叫了五十個人來我的火鍋店坐著卻不點菜,讓別的客人無法吃飯。
上面這個例子講的就是典型的 DDoS 攻擊,一般來說是指攻擊者利用“肉雞”對目標網(wǎng)站在較短的時間內(nèi)發(fā)起大量請求,大規(guī)模消耗目標網(wǎng)站的主機資源,讓它無法正常服務(wù)。在線游戲、互聯(lián)網(wǎng)金融等領(lǐ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 報文,服務(wù)端收到請求并返回報文表示接受,客戶端也返回確認,完成連接。
SYN Flood 就是用戶向服務(wù)器發(fā)送報文后突然死機或掉線,那么服務(wù)器在發(fā)出應(yīng)答報文后就無法收到客戶端的確認報文(第三次握手無法完成),這時服務(wù)器端一般會重試并等待一段時間后再丟棄這個未完成的連接。
一個用戶出現(xiàn)異常導(dǎo)致服務(wù)器的一個線程等待一會兒并不是大問題,但惡意攻擊者大量模擬這種情況,服務(wù)器端為了維護數(shù)以萬計的半連接而消耗非常多的資源,結(jié)果往往是無暇理睬客戶的正常請求,甚至崩潰。從正??蛻舻慕嵌瓤磥?,網(wǎng)站失去了響應(yīng),無法訪問。
如何應(yīng)對 DDoS 攻擊?
高防服務(wù)器
還是拿開的重慶火鍋店舉例,高防服務(wù)器就是我給重慶火鍋店增加了兩名保安,這兩名保安可以讓保護店鋪不受流氓騷擾,并且還會定期在店鋪周圍巡邏防止流氓騷擾。
高防服務(wù)器主要是指能獨立硬防御 50Gbps 以上的服務(wù)器,能夠幫助網(wǎng)站拒絕服務(wù)攻擊,定期掃描網(wǎng)絡(luò)主節(jié)點等,這東西是不錯,就是貴~
黑名單
面對火鍋店里面的流氓,我一怒之下將他們拍照入檔,并禁止他們踏入店鋪,但是有的時候遇到長得像的人也會禁止他進入店鋪。這個就是設(shè)置黑名單,此方法秉承的就是“錯殺一千,也不放一百”的原則,會封鎖正常流量,影響到正常業(yè)務(wù)。
DDoS 清洗
DDos 清洗,就是我發(fā)現(xiàn)客人進店幾分鐘以后,但是一直不點餐,我就把他踢出店里。
DDoS 清洗會對用戶請求數(shù)據(jù)進行實時監(jiān)控,及時發(fā)現(xiàn) **DOS **攻擊等異常流量,在不影響正常業(yè)務(wù)開展的情況下清洗掉這些異常流量。
CDN 加速
CDN 加速,我們可以這么理解:為了減少流氓騷擾,我干脆將火鍋店開到了線上,承接外賣服務(wù),這樣流氓找不到店在哪里,也耍不來流氓了。
在現(xiàn)實中,CDN 服務(wù)將網(wǎng)站訪問流量分配到了各個節(jié)點中,這樣一方面隱藏網(wǎng)站的真實 IP,另一方面即使遭遇 DDoS 攻擊,也可以將流量分散到各個節(jié)點中,防止源站崩潰。
總結(jié)
計算機網(wǎng)絡(luò)涉及的知識點較多,文中也就算是提了一下,更深此的理解還需要大家去看相應(yīng)的書籍,感覺看了這一篇,當面試官問 DDOS 或者 TCP 涉及哪些攻擊技術(shù)知識點的時候,能夠回答出來就好了,咋們下一篇再見!
往期精選
另外,cxuan 肝了六本 PDF,公號回復(fù) cxuan ,領(lǐng)取作者全部 PDF 。

