前言
近期收到要求修正來自於Nessus的報告弱點修正 ,雖然並不是專門處理的SP或MIS什麼的,只是個弱弱的碼農,但手上經手拿來開發、展示的虛擬機器有個幾台,這篇文章是紀錄如何處理來自於Nessus的弱點。
先前在客戶端也碰到一模一樣的弱點,那個時候的SP大大處理完後,只講了一句:「很恐怖,不要問」,沒想到過了半年,就落到自己頭上來了。
處理弱點
本次處理的弱點Port號皆為3389,也就是預設用來RDP的通訊埠號。
編號 | 名稱 | 原文 | 概要 |
---|---|---|---|
51192 | 無法信任 SSL 憑證 | SSL Certificate Cannot Be Trusted | 無法信任此服務的 SSL 憑證。 |
57582 | SSL 自我簽署憑證 | SSL Self-Signed Certificate | 此服務的 SSL 憑證鏈結以未識別的自我簽署憑證結束。 |
※ 當然Nessus的解法說明也很簡單,花錢買對的憑證就對了,但想也知道不可能為了開發用的機器,一台一台去購買。另外一條路就是建立自己內部的憑證中心,並且簽發。
環境
- Host - Windows 11 - 22H2 (22621.1992)
- Target - Windows Server 2022 - 21H2 (20348.1906)
測試修改流程
建立使用SSL憑證
參考先前的文章 使用PowerShell建立自簽SSL憑證 ,快速建立一張測試用的憑證。
# 子憑證輸出密碼
$certPassword = ConvertTo-SecureString -String "secure" -Force -AsPlainText;
$certFilePath = "Certificate"
# 建立CA
$caparam = @{
Subject = 'C=TW,ST=Taiwan,L=Taipei,O=Demo,OU=IT,CN=Demo Develop CA,E=nobody@demo.net'
KeyUsage = @("CertSign", "CrlSign")
CertStoreLocation = 'Cert:\LocalMachine\My'
TextExtension = @('2.5.29.19={text}CA=true&pathlength=0')
HashAlgorithm = "SHA256"
NotAfter = (Get-Date).AddYears(20)
KeyAlgorithm = "RSA"
KeyLength = 4096
FriendlyName = "DemoCA"
}
$rootCa = New-SelfSignedCertificate @caparam;
# 建立憑證參數
$paramsCert = @{
Type = 'Custom'
Subject = 'C=TW,ST=Taiwan,L=Taipei,O=ESi,OU=IT,CN=Demo Develop Cert,E=nobody@demo.net'
KeyUsage = @('DigitalSignature', 'DataEncipherment', 'KeyEncipherment')
TextExtension = @(
'2.5.29.37={text}1.3.6.1.5.5.7.3.2,1.3.6.1.5.5.7.3.1',
'2.5.29.17={text}DNS=target&IPAddress=10.100.100.101' )
KeyAlgorithm = 'RSA'
KeyLength = 4096
KeyExportPolicy = "Exportable"
CertStoreLocation = 'Cert:\LocalMachine\My'
NotAfter = (Get-Date).AddYears(20)
Signer = $rootCa;
FriendlyName = "Demo 開發憑證"
}
# 建立自簽憑證
$selfSign = New-SelfSignedCertificate @paramsCert;
# 移動CA憑證到可信任的位置
$rootCa | Move-Item -Destination "Cert:\LocalMachine\Root";
New-Item -Path $certFilePath -ItemType Directory -Force
# 產出憑證檔案
Export-PfxCertificate -Cert $selfSign -FilePath "$certFilePath\server.pfx" -Password $certPassword
Export-PfxCertificate -Cert $rootCa -FilePath "$certFilePath\ca.pfx" -Password $certPassword;
在Host機器匯入CA
將CA憑證匯入Host,讓Host可信任這張CA所簽發的憑證。
在Host嘗試遠端進入
基本上沒做設定的情況下,Windows會自動產生同機器名稱的SSL自簽憑證。
在Target取得憑證指紋
如果依照先前簡便自簽的方式,憑證應該已經匯入到「個人」中,所以可以簡單找到憑證的指紋碼(Thumbprint)。
在Target開啟CMD,輸入指令
wmic /namespace:\\root\cimv2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="THUMBPRINT"
在Host驗證憑證
遠端測試,檢視憑證為新簽立憑證。
※ 由於實際上還是自簽的憑證,就不特別處理CRL的問題了,這可能就真的需要建立憑證中心了。
結語
本篇只是測試更換RDP所使用的SSL憑證內容,但由於沒辦法說想重新掃描就做,這樣做能不能處理掉這些弱點也不是很清楚,但就實務上來說,應付這種掃描的作法,感覺上最直接的方式還是直接將防火牆做點對點的開放,也就是只開放需要系統的Client端連入即可。