利用 nmap 找尋網站使用的 Cipher Suite
2024-04-30 17:13:44

通常在像是使用 SSL Labs 這類工具檢查網站 SSL 安全性時,常會有列出 SSL 使用的 Cipher Suite(密碼套件),如下圖

隨便拿一個 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 做舉例,我們可以得知這是:

  • TLS:這個 Cipher Suite 適用的 Protocal(協定)
  • ECDHE:使用的密碼交換演算法,這邊指的是 ECDH Ephemeral
  • ECDSA:Handshake 時的驗證機制(數位簽章),這邊指的是 Elliptic Curve Digital Signature Algorithm
  • AES_128:Session 的 Cipher 和所使用的方法及位元數
  • GCM:加密算法,這裡指的是 Galois/Counter Mode
  • SHA256:雜湊算法及位元組,用來驗證訊息完整性

如果不確定目前使用的 Cipher Suite 是否安全,可以參考 ciphersuite.info 這個網站列表,會列出所有目前已知的 Cipher Suite 以及其是否安全等。

利用 nmap 檢查 Cipher Suite

前面應該有人用過 SSL Labs 去檢查網站,但你會發現它其實意外中的慢,這時就可以用我們的 nmap 來輔助檢測。(這邊不多贅述 nmap 的安裝方式,請洽 Google 大神)

如果今天我要檢測 https://kangjw.me 使用的 Cipher Suite,我可以輸入以下 nmap,透過載入 ssl-enum-ciphers 套件來協助檢測

1
nmap -p 443 --script ssl-enum-ciphers kangjw.me

跑完後應該會出現像是下方的輸出結果:

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
59
60
61
62
63
Starting Nmap 7.94 ( https://nmap.org ) at 2024-03-25 15:18 CST
Nmap scan report for kangjw.me (104.21.18.100)
Host is up (0.14s latency).
Other addresses for kangjw.me (not scanned): 172.67.181.145

PORT STATE SERVICE
443/tcp open https
| ssl-enum-ciphers:
| TLSv1.0:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (ecdh_x25519) - A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (ecdh_x25519) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
| compressors:
| NULL
| cipher preference: server
| warnings:
| 64-bit block cipher 3DES vulnerable to SWEET32 attack
| TLSv1.1:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (ecdh_x25519) - A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (ecdh_x25519) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| compressors:
| NULL
| cipher preference: server
| TLSv1.2:
| ciphers:
| TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (ecdh_x25519) - A
| TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 (ecdh_x25519) - A
| TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (ecdh_x25519) - A
| TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (ecdh_x25519) - A
| TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 (ecdh_x25519) - A
| TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 (ecdh_x25519) - A
| TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 (ecdh_x25519) - A
| TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256-draft (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256-draft (ecdh_x25519) - A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_128_CBC_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A
| compressors:
| NULL
| cipher preference: client
| TLSv1.3:
| ciphers:
| TLS_AKE_WITH_AES_128_GCM_SHA256 (ecdh_x25519) - A
| TLS_AKE_WITH_AES_256_GCM_SHA384 (ecdh_x25519) - A
| TLS_AKE_WITH_CHACHA20_POLY1305_SHA256 (ecdh_x25519) - A
| cipher preference: client
|_ least strength: C

可以看到在不同 TLS 版本下網站支援的 Cipher Suite,這時就可以依照你的要求在伺服端停止支援這些 Cipher Suite 的使用咯!

Cloudflare 用戶也可以透過限制最小 TLS 版本,購買 Advence Ceritification 來限制 Cipher Suite 的使用(每月 10 美金),就可以不用花心思去調整網頁伺服器配置咯!