15

停用不安全密碼套件(Cipher Suite) - 使用 IISCrypto 與 PowerShell

 2 years ago
source link: https://blog.darkthread.net/blog/disable-cipher-suites/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

使用 IISCrypto 與 PowerShell-黑暗執行緒

資安標準愈來愈嚴格,行之有年的做法現在可能被視為不夠安全。以 TLS 加密為例,加密協定中有所謂的 Cipher Suite (密碼套件),像 SSL Labs 檢查報告便會指出網站目前用的 TLS Ciper Suite 哪些強度不夠:(資安界走模範生風格,考 99 分也要打手心呢)

Fig1_637937482555486732.png

處理 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 被判定偏弱不建議使用:

Fig2_637937482555942046.png

在主機上執行 IISCrypto 取消勾選三個 AES CBC 項目,修改後需重開機才會啟用,若要省事可勾 Reboot 讓 IISCrypto 套用設定後自動重開機。

Fig3_637937482556697464.png

重開機後再測,三項 AES CBC 消失,驗證修改成功:

Fig4_637937482557118071.png

如果不方便使用第三方工具或需要批次大量部署,Cipher Suite 也能透過修改 Registry 停用。其位置在於 HKLM\SYSTEM\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002

Fig5_637937482557652773.png

資料型別是 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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK