停用不安全密碼套件(Cipher Suite) - 使用 IISCrypto 與 PowerShell
6 |
資安標準愈來愈嚴格,行之有年的做法現在可能被視為不夠安全。以 TLS 加密為例,加密協定中有所謂的 Cipher Suite (密碼套件),像 SSL Labs 檢查報告便會指出網站目前用的 TLS Ciper Suite 哪些強度不夠:(資安界走模範生風格,考 99 分也要打手心呢)
處理 TLS 資安強化時會看到 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 這種一長串的識別字串,即所謂的 TLS Cipher Suite 字串。TLS 的加解密過程複雜,涉及金鑰交換、數位簽章、大量資料傳輸加密、訊息驗證等環節,每個環節可採用的方法有多種選擇,這些選項的組合被稱為 Cipher Suite ,可以想成「凱薩沙拉 + 羅宋湯 + 乾煎櫻桃鴨胸佐紅酒醬 + 焦糖烤布蕾」的概念(噗,舉例舉到肚子有點餓惹)。以 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 為例,提供了以下資訊:
- ECDHE - Key Exchange
- RSA - Signature
- AES_256_GCM - Bulk Encryption
- SHA384 - Message Authentication
延伸閱讀:Cipher Suites in TLS/SSL (Schannel SSP) 及 Windows 各版本支援
若系統平台是 Windows (註:TLS 不只用在網站 HTTPS,SQL/RDP 也會用到,之前停用 TLS 1.X 踩坑的記憶猶新),要停用不夠安全的 Cipher Suite,免費工具軟體 - IISCrypto 是最簡便的選擇。
要進行操作,我推薦用 nmap ssl-enum-ciphers 即時檢查 Cipher Suite 狀態,對照修改前後的變化,比跑 SSL Labs 有效率,並可用在內部網路及非 IIS 服務。Windows 的 Cipher Suite 為作業系統層設定,修改結果一體適用於 IIS、SQL、遠端桌面... 等各服務,我是用 nmap 觀察 3389 (RDP 遠端桌面) 當指標。
修改前有 AES CGM 兩項、AES CBC 三項,AES CBC 被判定偏弱不建議使用:
在主機上執行 IISCrypto 取消勾選三個 AES CBC 項目,修改後需重開機才會啟用,若要省事可勾 Reboot 讓 IISCrypto 套用設定後自動重開機。
重開機後再測,三項 AES CBC 消失,驗證修改成功:
如果不方便使用第三方工具或需要批次大量部署,Cipher Suite 也能透過修改 Registry 停用。其位置在於 HKLM\SYSTEM\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002
資料型別是 MultiString,類似字串陣列,要移除特定項目,寫 PowerShell 最快,附上範例:
$regKey = 'hklm:\SYSTEM\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002'
$funcs = Get-ItemProperty $regKey Functions | Select-Object -ExpandProperty Functions
$filtered = $funcs | Where-Object {
$_ -ne 'TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384' -and `
$_ -ne 'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256' -and `
$_ -ne 'TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA' -and `
$_ -ne 'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA'
}
Set-ItemProperty $regKey Functions $filtered -Type MultiString
Tips of disabling weak Windows cipher suites by IISCrypto and PowerShell.
Comments
# by Kawa
也可以用TestSSLServer小工具 https://www.bolet.org/TestSSLServer/ 也會顯示檢測Server使用的Cipher Suites強度
# by Kawa
如果要使用[SSL Labs 檢查報告]一定要勾「Do not show the results on the boards」,不然檢測完成後沒多久,Server就會接受各種【意外】的測試了。
# by Jeffrey
to Kawa, (己筆記) 感謝分享。
# by KK
RSA 是 authentication? SHA384 才是 signature?
# by Jeffrey
to KK, TLS Cipher Suite 字串各段定義主要是參考微軟文件 https://docs.microsoft.com/en-us/windows/win32/secauthn/cipher-suites-in-schannel?WT.mc_id=DOP-MVP-37580 中的這張圖 https://docs.microsoft.com/en-us/windows/win32/secauthn/images/tls-cipher-suite.png
# by 1
1