0.B SSL

Wireshark Lab: SSL

這篇LAB主要是講解與實作SSL(Secure Sockets Layer)協定,透過分析課本所提供的Wireshark封包分析檔,來模擬伺服器之間的SSL trace records,而在連線中,我們可以觀察到不同SSL record的類型與SSL訊息的欄位。

 

步驟1. 截取 SSL session封包

一開始需要截取SSL在連線階段的封包,使用者可以在需要有加密連線的網站用Wireshark作抓取。在截取完封包後,可以在Wireshark裡的篩選器(filter)把條件設定為只顯示SSL record的封包,這樣你的Ethernet frame就會跟下圖很像。

 

註:如果對於自己抓取封包有困難,可以現在官方教材提供的封包範例檔:

http://gaia.cs.umass.edu/wireshark-labs/wireshark-traces.zip

解壓縮其中的ssl-ethereal-trace-1檔案。

 

 

步驟2. 檢視截取的 trace

在設定完Wireshark 的篩選器後,應該只會顯示包含 SSL record 的 Ethernet frame。請注意到一個 Ethernet frame 有可能包含一個或多個 SSL record。另外,一個 SSL record 不一定只會容納在一個 Ethernet frame,因此可能需要多個 Ethernet frame 來傳遞該 record。

註: HTTP跟SSL 有很大的差異,因為一個 frame只會包含一個完整的 HTTP 訊息或部分 HTTP 訊息,並不會包含多個HTTP 訊息。

 

問題1:在每前 8 個 Ethernet frame 中說明 frame 的來源(Client端或Server端),決定Ethernet frame 中 SSL record 的數量,以及列出 frame 裡面包含的 SSL record 類型。畫出表示客戶端與伺服器端之間的時間。

解答:

 

 

 

Frame

Source

SSL Count

SSL Type

106

Client

1

Client Hello

108

Server

1

Server Hello

111

Server

2

Certificate

Server Hello Done

112

Client

3

Client Key Exchange

Change Cipher Spec Encrypted

Handshake Message

113

Server

2

Change Cipher Spec Encrypted

Handshake Message

114

Client

1

Application Data

122

Server

1

Application Data

127

Server

1

Application Data

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

問題2:每個 SSL record 用同樣的三個欄位開頭(可能有不同的值)。其中一個欄位“content type”長度為 1 byte。列出以上三個欄位以及他們的長度。

 

解答:

開頭的三個欄位分別是:

 

Content Type                               1 byte

 

Version                                       2 bytes

 

Length                                        2 bytes

 

 

 

 

ClientHello Record部份部分

 

問題3:展開 ClientHello record 並觀察 content type 的值為何?

註:如果你的 trace 包含多個 ClientHello record,展開包含第一個的 frame。

 

解答:

Content type是編號第 22,代表的是Handshake Message,同時handshake type 是編號第 01為Client Hello

 

問題4:ClientHello record 是否包含 nonce(或challenge)?如果有,challenge 的值以十六進位表示為何?

 

解答:Client hello challenge 的值為 66df 784c 048c d604 35dc 4489 8946 9909

 

 

問題5:ClientHello 是否支援 cyber suite?如果有,在第一個列出的 suite 使用的 public-key algorithm、symmetric-key algorithm 與hash algorithm 為何?

 

解答:第一個列出的 suite 使用 RSA 作為 public key crypto,RC4 作為symmetric- key cipher 並使用 MD5 為 hash algorithm

 

 

 

問題6:請找到 ServerHello 的SSL record。該 record 是否說明使用的 cipher suite?而cipher suite 使用的 algorithm 為何?

 

解答:

Cipher suite 使用 RSA 作為 public key crypto、RC4 作為symmetric-key cipher 並使用 MD5 為 hash algorithm。

 

 

問題7:該 record 是否包含 nonce?如果有,其長度為何?在 SSL 客戶端與伺服器端之間目的為何?

 

解答:

有,在此 record 包含一個在 Random 下的 nonce。此 nonce 的長度是 32 bits、其中 28 為 data plus ,而4為時間。其目的是避免replay attacks。

 

 

問題8:該record是否包含session ID?而session ID 的目的為何?

 

解答:

有,包含session ID。其目的是為SSL session提供一個唯一的persistent identifier。客戶端可以在之後藉由 ClientHello 傳送伺服器提供的 session ID 回到原 session。

 

 

問題9:該record是否包含certificate或certificate有包含在另一個record。Certificate 是否能塞進單一個 Ethernet frame?

 

解答:

此 record 不包含 certificate,它是包含在另一個 recordCertificate 是可以塞到單一個 Ethernet frame。

 

 

問題10:找到client key exchange record,則該record是否包含pre-master secret?此secret的作用是什麼?此secre是否加密?如果是,如何加密?加密的secret長度為?

 

解答:

有, 該record包含pre-master secret。此pre-master secret同時被伺服器與用戶端用來產生master secret,其被用來產生一組 session keys for MAC address以及加密。此 secret 使用伺服器的 public key 加密,而用戶端從伺服器傳送的 certificaterecord 取得此 key。此加密的secret長度為 128 bytes。

 

 

問題11:Change Cipher Spec record 的作用是什麼?此record在trace為多少 byte?

 

解答:

Change Cipher Spec record 的作用是表示由客戶端傳送的subsequent SSL records(data,沒有 header)會被加密。此record 的長度為 6 bytes:5 bytes 為 header 與 1 byte 為message segment。

 

 

問題12:在 encrypted handshake record 什麼是加密過的?怎麼加密?

 

 

解答:

 

encrypted handshake record 裡,會產生先前所有來自客戶端 handshake 訊息串接的 MAC 並傳送到伺服器端

 

問題13:伺服器是否傳送 change cipher record 與 encrypted handshakerecord 到客戶端?這些 record 與客戶端傳送的差別是?

 

解答:

有,伺服器端也傳送了 Change Cipher Spec record 與encrypted handshake 到客戶端。伺服器的 encryptedhandshake record 跟客戶端傳送的不同,其包含所有伺服器端傳送的 handshake message 之 concatenation,而不是只有從客戶端。除此之外,與客戶端傳送的相同。

 

 

問題14:Application data 如何加密?包括 application data 的 record 是否包含 MAC?

 

解答:

Application data 使用 handshake 階段選擇的 symmetric keyencryption algorithm 加密(在這裡為 RC4)使用產生的symmetric encryption keys 以及使用 pre-master key 與nonces(從客戶端與伺服器)。客戶端的 encryption key 用在加密自客戶端傳送到伺服器端的 data,伺服器的 encryption key用來加密自伺服器傳送到客戶端的 data。包含 application data 的 record 有包含 MAC,但是 Wireshark沒有區別加密的 application data 和 MAC。