前言
近期收到要求修正來自於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憑證 ,快速建立一張測試用的憑證。
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
| $certPassword = ConvertTo-SecureString -String "secure" -Force -AsPlainText; $certFilePath = "Certificate"
$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;
$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,輸入指令
1
| wmic /namespace:\\root\cimv2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="THUMBPRINT"
|
在Host驗證憑證
遠端測試,檢視憑證為新簽立憑證。
※ 由於實際上還是自簽的憑證,就不特別處理CRL的問題了,這可能就真的需要建立憑證中心了。
結語
本篇只是測試更換RDP所使用的SSL憑證內容,但由於沒辦法說想重新掃描就做,這樣做能不能處理掉這些弱點也不是很清楚,但就實務上來說,應付這種掃描的作法,感覺上最直接的方式還是直接將防火牆做點對點的開放,也就是只開放需要系統的Client端連入即可。
參考
- 遠端桌面接聽程序憑證設定