資安管理 SSL/TLS (2)

基本介紹

教學目標

初步了解 SSL/TLS 的資安風險和金鑰產生的流程。

重點概念

目前已知 SSL/TLS 有許多弱點可能會讓駭客遠端進行攻擊,弱點主要可以分為兩大類,分別為協定本身的弱點和特定工具的弱點,其中像是 SSL 3.0 和 TLS 1.0 已經證實有嚴重實作的缺陷會導致不安全,以及 OpenSSL 被發現有 heartbleed 漏洞,請參考下表。

CVE 編號 攻擊名稱 說明 解決方式
CVE-209-3555 TLS 端點可能支援不安全重新協商,此時有網路存取權的使用者就能夠將自己的流程加在客戶端傳給伺服器的流量之前執行惡意攻擊。 將客戶端和伺服器軟體升級到最新版本。
CVE-2011-3389 BEAST 當使用 CBC 模式加密時 TLS 1.0 產生的初始向量值是可以被預測,接著注入代理程式,再來監視取得密文之後,就能夠執行惡意攻擊,找出明文資料。 強制使用 TLS 1.1 以上的版本協定。
CVE-2012-4929 CRIME 伺服器執行具有壓縮機制的 TLS 1.2 之前的版本,就會容易受到惡意攻擊 停用 TLS 壓縮功能。
CVE-2013-0169 Lucky 13 當使用 CBC 模式加密時跨頻道的惡意攻惠會造成已知位置的資料被找出明文資料。 停用 CBC 加密方式。(OpenSSL 1.0.1d)
CVE-2013-2566 RC4 RC4 演算法中有許多位元組偏移,當知道機密資料位置,接著在相同的明文加密多次,就能找出明文資料。 停用支援 RC4 加密套件。
CVE-2013-3587 BREACH 網頁應用程式使用 HTTP 壓縮,並且經由 HTML 靜態機密回傳給客戶端時,就能夠執行惡意攻擊,找出明文資料。 停用 HTTP 壓縮功能。
CVE-2014-0160 heartbleed 當收到特製的請求之後,會導致洩露堆積記憶體中的機敏資料。 將客戶端和伺服器軟體升級到最新版本。(OpenSSL 1.0.1~1.0.1f)
CVE-2014-3566 POODLE 當使用 CBC 模式加密時 SSL 3.0 容易受到 Pading oracle 的惡意攻擊,找出明文資料。 停用 SSL 3.0。
CVE-2015-0400 Logjam 當系統支援 DH 群組小於 1024 位元時,就容易受到中間人 (Man In The Middle,MITM) 惡意攻擊。 強制使用 1024 位元以上的 DH 群組之大小。

接著駭客針對 SSL/TLS 攻擊主要破解憑證內容,以及依賴客戶端瀏覽器執行 JavaScript 代理程式,以利在 SSL/TLS 上產生所需要的請求,至於針對位元組偏移的攻擊,像是 RC4 和 Lucky 13 攻擊時會產生大量資料,所以實務應用較不切實際。此時為了防止駭客進行攻擊,所以加密組合的選擇就非常的重要,在 TLS 1.2 加密組合 (Cipher Suites) 的資訊主要有金鑰交換的方法、身分驗證的方法、對稱加密演算法、金鑰長度和模式和訊息驗證碼的演算法,在 RFC 5246 的技術標準中會列出基本的加密套件,此外我們也可以透過 OpenSSL 指令查看支援的加密套件。

查看 OpenSSL 支援的加密套件指令之範例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
c:\Apache24\bin>openssl ciphers -v
ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD
ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD
DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(256) Mac=AEAD
ECDHE-ECDSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=ECDSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
ECDHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
DHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=DH Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(128) Mac=AEAD
ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(128) Mac=AEAD
DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(128) Mac=AEAD
ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA384
ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA384
DHE-RSA-AES256-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(256) Mac=SHA256
ECDHE-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(128) Mac=SHA256
ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA256
DHE-RSA-AES128-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(128) Mac=SHA256
ECDHE-ECDSA-AES256-SHA TLSv1 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA1
ECDHE-RSA-AES256-SHA TLSv1 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA1
DHE-RSA-AES256-SHA SSLv3 Kx=DH Au=RSA Enc=AES(256) Mac=SHA1
ECDHE-ECDSA-AES128-SHA TLSv1 Kx=ECDH Au=ECDSA Enc=AES(128) Mac=SHA1
ECDHE-RSA-AES128-SHA TLSv1 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA1
DHE-RSA-AES128-SHA SSLv3 Kx=DH Au=RSA Enc=AES(128) Mac=SHA1
RSA-PSK-AES256-GCM-SHA384 TLSv1.2 Kx=RSAPSK Au=RSA Enc=AESGCM(256) Mac=AEAD
DHE-PSK-AES256-GCM-SHA384 TLSv1.2 Kx=DHEPSK Au=PSK Enc=AESGCM(256) Mac=AEAD
RSA-PSK-CHACHA20-POLY1305 TLSv1.2 Kx=RSAPSK Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
DHE-PSK-CHACHA20-POLY1305 TLSv1.2 Kx=DHEPSK Au=PSK Enc=CHACHA20/POLY1305(256) Mac=AEAD
ECDHE-PSK-CHACHA20-POLY1305 TLSv1.2 Kx=ECDHEPSK Au=PSK Enc=CHACHA20/POLY1305(256) Mac=AEAD
AES256-GCM-SHA384 TLSv1.2 Kx=RSA Au=RSA Enc=AESGCM(256) Mac=AEAD
PSK-AES256-GCM-SHA384 TLSv1.2 Kx=PSK Au=PSK Enc=AESGCM(256) Mac=AEAD
PSK-CHACHA20-POLY1305 TLSv1.2 Kx=PSK Au=PSK Enc=CHACHA20/POLY1305(256) Mac=AEAD
RSA-PSK-AES128-GCM-SHA256 TLSv1.2 Kx=RSAPSK Au=RSA Enc=AESGCM(128) Mac=AEAD
DHE-PSK-AES128-GCM-SHA256 TLSv1.2 Kx=DHEPSK Au=PSK Enc=AESGCM(128) Mac=AEAD
AES128-GCM-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AESGCM(128) Mac=AEAD
PSK-AES128-GCM-SHA256 TLSv1.2 Kx=PSK Au=PSK Enc=AESGCM(128) Mac=AEAD
AES256-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA256
AES128-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA256
ECDHE-PSK-AES256-CBC-SHA384 TLSv1 Kx=ECDHEPSK Au=PSK Enc=AES(256) Mac=SHA384
ECDHE-PSK-AES256-CBC-SHA TLSv1 Kx=ECDHEPSK Au=PSK Enc=AES(256) Mac=SHA1
SRP-RSA-AES-256-CBC-SHA SSLv3 Kx=SRP Au=RSA Enc=AES(256) Mac=SHA1
SRP-AES-256-CBC-SHA SSLv3 Kx=SRP Au=SRP Enc=AES(256) Mac=SHA1
RSA-PSK-AES256-CBC-SHA384 TLSv1 Kx=RSAPSK Au=RSA Enc=AES(256) Mac=SHA384
DHE-PSK-AES256-CBC-SHA384 TLSv1 Kx=DHEPSK Au=PSK Enc=AES(256) Mac=SHA384
RSA-PSK-AES256-CBC-SHA SSLv3 Kx=RSAPSK Au=RSA Enc=AES(256) Mac=SHA1
DHE-PSK-AES256-CBC-SHA SSLv3 Kx=DHEPSK Au=PSK Enc=AES(256) Mac=SHA1
AES256-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA1
PSK-AES256-CBC-SHA384 TLSv1 Kx=PSK Au=PSK Enc=AES(256) Mac=SHA384
PSK-AES256-CBC-SHA SSLv3 Kx=PSK Au=PSK Enc=AES(256) Mac=SHA1
ECDHE-PSK-AES128-CBC-SHA256 TLSv1 Kx=ECDHEPSK Au=PSK Enc=AES(128) Mac=SHA256
ECDHE-PSK-AES128-CBC-SHA TLSv1 Kx=ECDHEPSK Au=PSK Enc=AES(128) Mac=SHA1
SRP-RSA-AES-128-CBC-SHA SSLv3 Kx=SRP Au=RSA Enc=AES(128) Mac=SHA1
SRP-AES-128-CBC-SHA SSLv3 Kx=SRP Au=SRP Enc=AES(128) Mac=SHA1
RSA-PSK-AES128-CBC-SHA256 TLSv1 Kx=RSAPSK Au=RSA Enc=AES(128) Mac=SHA256
DHE-PSK-AES128-CBC-SHA256 TLSv1 Kx=DHEPSK Au=PSK Enc=AES(128) Mac=SHA256
RSA-PSK-AES128-CBC-SHA SSLv3 Kx=RSAPSK Au=RSA Enc=AES(128) Mac=SHA1
DHE-PSK-AES128-CBC-SHA SSLv3 Kx=DHEPSK Au=PSK Enc=AES(128) Mac=SHA1
AES128-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA1
PSK-AES128-CBC-SHA256 TLSv1 Kx=PSK Au=PSK Enc=AES(128) Mac=SHA256
PSK-AES128-CBC-SHA SSLv3 Kx=PSK Au=PSK Enc=AES(128) Mac=SHA1

其中 Kx 為金鑰交換演算法、Au 為身份驗證機制,Enc 為對稱加密演算法和金鑰長度,Mac 為訊息驗證碼的演算法,像是 DHE-RSA-AES128-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(128) Mac=SHA256 代表金鑰交換演算法為 DH、身份驗證機制為 RSA、對稱加密演算法為 AES、金鑰長度為 128 bits,訊息驗證碼的演算法為 SHA256。

再來 DH 金鑰交換演算法主要是允許雙方在公開通道上建立加密通道,其中 Pre-master Key 是由客戶端產生,接著由伺服器的公鑰加密之後,再來傳送給伺服器。其中 DH 公鑰,主要是由伺服器以憑證和伺服器金鑰交換訊息傳送給客戶端,其中金鑰類型又可分為靜態和短暫,所謂靜態公鑰主要是從伺服器的私鑰所衍生,因此可以在伺服器的憑證中找到,所謂短暫金鑰則是為每一個 SSL/TLS 工作階段而產生。此外因為 DH 金鑰交換演算法主要為匿名,因此無法進行身份驗證,所以我們會使用 RSA 進行身份驗證。若透過 RSA 進行協商時,客戶端和伺服器會向雙方傳送 256 bits 的亂數,其中前 32 bits 是由本機系統時間所產生,剩下的 224 bits來自虛擬亂數產器。接著客戶端會額外產生 368 bits 的亂數,再加上 16 bits 的 TLS 協定版本之後,總計 384 bits 就是 Pre-master Key ,因此 Pre-master Key 主要是使用伺服器的 RSA 公加密,再以客戶端金鑰交換訊息傳送,其中因為使用伺服器的公鑰加密代表此方法不提供轉送保密機制。當我們具備 Pre-master Key、伺服器的亂數和客戶端的亂數使用相同的虛擬亂數函數就能夠產生 Master Secret,此外雖然 Master Secret 的長度為 384 bits,但還是會透過 Master Secret、伺服器的亂數和客戶端的亂數使用相同的虛擬亂數函數產生不同大小的金鑰區塊,下一步客戶端和伺服器將會使用 Master Secret 產生工作階段金鑰進行資料的加密、解密、簽章和驗證。

最後 TLS 加密協定主要會使用 X.509 憑證進行客戶端和伺服器的驗證,通常會藉由的憑證頒發機構的根憑證和 X.509 憑證的簽章來驗證雙方的身份,其中憑證頒發機構會使用其私鑰對憑證進行簽章,接著會將對應的公鑰發佈給通訊雙方的作業系統和瀏覽器中當成受信任的根憑證。此外 X.509 憑證是可以進行串鏈,首先憑證頒發機構的根憑證主有包括根憑證名稱、根憑證公鑰、根憑證簽章、… 等資訊,接著中繼憑證和網站憑證皆包括擁有者名稱、擁有者公鑰、憑證頒發機構名稱、憑證頒發機構簽章、… 等資訊。其中憑證頒發機構的根憑證會透過根憑證公鑰驗證根憑證簽章,接著憑證頒發機構的根憑證驗證中繼憑證,以及中繼憑證驗證網站憑證。

總結本篇主要是先 SSL/TLS 的資安風險和金鑰產生的流程,至於有關 SSL/TLS 更多除錯方式將在之後進行說明。

相關資源