概述:本次實驗利用Wireshark先對TCP三次握手原理進行分析,解釋TCP連接建立的過程,並用“兩軍問題”解釋爲什麼要進行三次握手;然後分析TCP連接的安全性,概述SYN洪範攻擊和SSL,利用Wireshark抓取http登錄密碼,證明http是明文傳輸,數據不安全,而https是密文傳輸,安全可靠;最後對免費WiFi熱點的安全性提出自己的一些思考。
一,Wireshark分析TCP三次握手
1,抓取數據包
1.1,打開Wireshark,在過濾欄輸入“http”進行抓包過濾。點擊開始,進行抓包。
1.2,打開瀏覽器,輸入網址www.csdn.net進行訪問。
1.3,打開www.csdn.net的網頁源代碼,查看響應服務器的域名地址爲read.csdn.net
打開cmd,ping 域名地址read.csdn.net的ip,得到響應服務器的ip地址爲101.201.170.152。
1.4,在抓取到的數據包找到本機和101.201.170.152的交互信息,並找到協議爲HTTP,方法爲GET的數據包,如圖所示。
右鍵選擇Follow TCP Stream,在彈出的窗口中,可以查看到Host和Referer,證明該數據包確實是來自csdn網站。
2,三次握手分析
2.1在追蹤到的TCP流中,可以看到在HTTP之前有三次TCP數據交互,分別是
第1次:本機->csdn服務器 客戶端向服務器發送連接請求
第2次:csdn服務器->本機 服務器對客戶端的連接請求進行響應,允許請求。
第3次:本機->csdn服務器 客戶端接收到服務器的響應後,進行應答。
2.2網上隨便一搜,鋪天蓋地有一堆三次握手的示意圖,找一張過來便於對數據包進行分析:
對應着三次握手的示意圖,對數據包進行分析。
第一次握手(SYN)
(1)源IP:本機IP 目的IP:服務器IP;表示本機發往服務器的TCP報文段。
(2)源端口3800,目的端口爲80(http熟知端口)
(3)Syn=1,Seq=0,Ack=0
Client通過發送一個TCP報文段向服務器發起連接請求,該報文段被稱爲SYN報文段, 不包含應用數據,Syn的值被置爲1,後面可以看到在連接未建立成功時,Syn的值都爲1,連接建立成功之後,Syn爲0,它表示Client和Server都已經Established,可以進行數據傳輸。
Seq是Client選擇的起始序列號,此處是0。關於序列號的選擇也有諸多的研究,因爲適當的選擇序列號可以避免某些安全性攻擊。
Ack值爲0。
第二次握手(SYNACK)
(1)源IP: 服務器IP 目的IP:本機IP 表示服務器返回給本機的應答TCP報文段
(2)源端口80,目的端口爲3800
(3)Syn=1,Ack=1 , Seq=0
該報文段被稱爲SYNACK報文段,顧名思義,這是Server對Client發送的SYN報文段進行確認(ACK),示意Client連接被允許。該報文段也不包含應用數據。
SYN被置爲1,因爲連接還未建立成功。
Ack的值爲Client的初始Seq加1,於是Ack=1;
Server端的初始序列號Seq=0
第三次握手(ACK)
(1)源IP:本機IP 目的IP:服務器IP;表示本機發往服務器的確認TCP報文段。
(2)源端口3800,目的端口爲80
(3)Syn=0,Ack=1,Seq=0
該報文段被稱爲ACK報文段,是Client對Server的應答進行確認(ACK),服務器成功收到ACK報文段之後,連接就建立成功了。
此時Syn的值被置爲0;
Ack的值爲Server的初始Seq加1。
二,爲什麼是三次握手?
imooc上Tony老師是利用有名的兩軍問題來進行解釋的,課程地址http://www.imooc.com/view/258
在此先感謝老師,然後將課件截圖過來和大家分享:
設左邊的藍色部隊爲A藍,右邊的藍色部隊爲B藍。
(1)第一次握手:A藍數據成功到達B藍,B藍收到A藍的通知“你準備好攻打紅色部隊了嗎?”
(2)第二次握手:B藍回覆A藍,“我準備好了!”。
假設回覆成功到達A藍,但是此時B藍並不知道A藍是否成功收到了它的回覆,因此它並不敢輕舉妄動,假設A藍並沒有收到回覆,沒有出兵,那B藍豈不是會全軍覆沒。於是很有必要進行第三次握手。
(3)第三次握手:A藍回覆B藍,“我知道你準備好了,開打吧!”
當B藍收到這個確認之後,就可以開始出兵了。
理論上來說,兩軍的溝通永遠停不下來,因爲沒有辦法確認最後一次數據包是否成功到達對方,所以三次握手也並不是絕對的可靠,可以選擇四次,甚至多次握手,但是考慮到開銷,選擇三次握手,能保證足夠的可靠性了。
三,初識SYN洪範攻擊和SSL
1, SYN洪範攻擊(SYN flood attack)
在上述TCP三次握手的過程中,涉及到一個問題,那就是TCP緩存和變量的設置,傳統的設置緩存和變量的大致過程如下:
(1)第二次握手時,Server端分配TCP緩存和變量,生成一個半開TCP連接。
(2)第三次握手時,Client端分配TCP緩存和變量,TCP雙向連接建立成功。
SYN洪範攻擊是指,攻擊者利用多個源發出衆多的SYN報文段,但是不會發出ACK報文段,如果按照傳統的TCP連接方式,Server端每接收到一個SYN報文段就會分配TCP緩存和變量,建立半開TCP連接。於是這種攻擊會致使服務器的連接資源消耗殆盡,可憐的服務器此時相當於被攻擊者鉗制住了,別的合法的Client就無法與Server進行TCP連接了。
由此可以看出,在TCP第三次握手之前進行緩存和變量分配的連接方式,其實是不安全。
2,SSL(Secure Socket Layer)
SSL,即安全套接字層,另外一個類似的名字是TSL,(Transport Layer Security,運輸層安全性)是SSL3的修改版本。
SSL子層位於應用層之下,傳輸層之上,通過SSL套接字接口與應用層對接,通過TCP套接字與傳輸層對接。
SSL最大的功能就是使得TCP的連接和數據傳輸變得安全,它運用了加密技術,在數據傳送到傳輸層之前對數據進行加密,具體涉及到的加密算法,和防攻擊技術,在此就不具體介紹了(其實是因爲我也不是很懂)。
這樣一來,數據就是密文傳輸,而非明文。我們在日常生活中經常聽到兩個名詞,一個是http,另一個是https,這兩者的區別在於後者使用了SSL加密技術,數據是加密傳輸的,一般的網絡抓包工具不能截獲一些重要信息,比如用戶登錄密碼,而http是明文傳輸的,很容易用抓包工具抓取用戶登錄密碼。
對安全性要求較高的網站一般會使用https,比如百度,淘寶,京東,以及銀行網站等等。而像論壇,博客等網站對安全性要求不是那麼高的網站,一般使用http。
三,抓取http登錄密碼
下面用Wireshark抓取九度Online Judge(http://ac.jobdu.com)的登錄密碼。
我正好忘記了我的登錄密碼,但是瀏覽器保存下了 ,現在用Wireshark抓取,看看我的密碼到底是多少,下次清空瀏覽器記錄時就不會忘了。
1,打開Wireshark,開始抓包,登錄九度OJ。
2,找到對應的數據包(HTTP協議,POST方法)
3,查看該數據包應用層的內容
四,關於免費WiFi熱點的一些思考
免費WiFi熱點是極其不安全的,爲什麼呢?
後臺服務器會很容易抓取你的某些用戶名和登錄密碼,即使https抓取不到,也可以抓取一些http的密碼,對許多人來說,不管哪個密碼被攻破,都不是一件令人愉快的事情,假如對方居心叵測,順藤摸瓜還可以獲取你的更多私人信息。所以說,有些時候免費WiFi其實就是一個魚餌。
同一個寢室的人也可以利用這種方法獲取室友的信息,先僞造一個WiFi熱點(這是很簡單的),然後吃着零食,慢慢抓包……
感謝原文作者。
原文地址:http://blog.csdn.net/qq_24421591/article/details/50856423