0x00 前言
在內網滲透中,當我們獲得了WSUS服務器的控制權限后,可以通過推送補丁的方式進行橫向移動。這個利用方法最早公開在BlackHat USA 2015。本文將要整理這個利用方法的相關資料,結合思路,得出行為檢測的方法。
0x01 簡介
本文將要介紹以下內容:
環境搭建
利用思路
實現工具
行為檢測
0x02 環境搭建
本節介紹WSUS服務器搭建的過程,通過配置客戶端實現補丁的推送
參考資料:
https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-r2-and-2008/dd939822(v=ws.10)
1.WSUS服務器搭建
WSUS服務器需要安裝在Windows Server操作系統
(1)安裝
在添加角色和功能頁面,選擇Windows Server Update Services
需要指定補丁更新包的存放路徑,這里可以設置為C:WSUS
(2)配置
打開Windows Server Update Services進行配置
配置時選擇默認選項即可,在選擇Download update information from Microsoft Update時,點擊Start Connecting,如果報錯提示An HTTP error has occurred,經過我的多次測試,可以采用以下方法解決:
關閉當前頁面
進入Windows Server Update Services,選擇synchronization,點擊synchronization Now,等待同步完成,如下圖
選擇Options,選擇WSUS Server Configuration Wizard,重新進入配置頁面,連接成功,如下圖
配置完成后需要創建計算機組,如下圖
當同步完成后,會提示下載了多少個補丁,如下圖
選擇Updates頁面,可以查看已下載的補丁,UnApproved表示未安裝的補丁,安裝后的補丁可以選擇Approved進行查看,如下圖
選中一個補丁,點擊Approve...,彈出的對話框可以針對指定計算機組安裝補丁,如下圖
2.客戶端配置
客戶端只要是Windows系統即可,需要通過組策略配置
依次選擇Computer Configuration -> Administrative Templates -> Windows Components -> Windows Update,選擇Configure Automatic Updates,設置成Auto download and notify for install,選擇Specify intr.NET Microsoft update service location,設置更新服務器地址為http://192.168.1.182:8530
注:
需要指定端口8530
對于域環境,配置組策略后需要等待一段時間,這是因為組策略每90分鐘在后臺更新一次,隨機偏移量為0-30分鐘,如果想立即生效,可以輸入命令:gpupdate /force
對于工作組環境,配置組策略可以立即生效
當客戶端開始補丁更新時,WSUS服務器會獲得客戶端的信息,并顯示在Computers頁面
組策略配置的操作等同于創建注冊表,具體信息如下:
(1)組策略配置自動更新后會創建注冊表HKEY_LOCAL_macHINESOFTWAREPoliciesMicrosoftWindowsWindowsUpdateAU
查詢命令:REG QUERY "HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindowsWindowsUpdateAU"
返回結果示例:
(2)組策略配置服務器地址后會創建注冊表HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindowsWindowsUpdate
查詢命令:REG QUERY "HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindowsWindowsUpdate"
返回結果示例:
3.推送補丁
在WSUS服務器的Windows Server Update Services頁面,選擇指定補丁,右鍵點擊Approve...,在彈出的對話框中選擇計算機組即可
等待客戶端到達補丁更新時間,即可完成補丁的推送
0x03 利用思路
如果我們能夠生成一個帶有Payload的補丁,就能夠通過補丁進行橫向移動,但是在利用上需要注意補丁文件的簽名問題:Windows的補丁文件需要帶有微軟的簽名
通常的利用方法是使用帶有微軟簽名的程序,例如psexec,通過psexec執行命令或者添加一個管理員用戶
0x04 實現工具
開源的工具有以下三個:
https://github.com/nettitude/SharpWSUS
https://github.com/AlsidOfficial/WSUSpendu
https://github.com/ThunderGunExpress/Thunder_Woosus
以上三個工具的實現原理基本相同,都是創建一個調用psexec執行命令的補丁,將補丁推送至指定計算機,等待目標計算機更新補丁
創建補丁的操作需要連接SQL數據庫,依次實現以下操作:
ImportUpdate
PrepareXMLtoClient
InjectURL2Download
DeploymentRevision
PrepareBundle
PrepareXMLBundletoClient
DeploymentRevision
1.創建補丁
SharpWSUS在創建補丁時需要注意轉義字符,命令示例:
這條命令將會在Updates的Security Updates頁面下創建WSUSDemo,如下圖
2.補丁部署
將補丁部署到指定計算機組,命令示例:
這條命令會創建計算機組Demo Group,并且把win-iruj9k30gr7移動到該組下面,如下圖
接下來需要等待客戶端安裝這個補丁
3.查看補丁狀態
查看補丁是否被安裝,命令示例:
補丁未安裝的輸出如下:
還有一種查看方法是查看計算機的補丁更新時間,示例命令:SharpWSUS.exe inspect
輸出示例:
為了便于測試,可以強制客戶端更新補丁,看到新的補丁信息,如下圖
4.清除補丁信息
命令示例:
這條命令會刪除補丁,刪除添加的計算機組
在整個補丁更新過程中,WSUS服務器會將psexec.exe保存在WSUS服務器本地C:wsuswuagent.exe和C:wsusWsusContent8EFD7980D3E437F28000FA815574A326E569EB548E.exe,需要手動清除
在測試WSUSpendu時,為了便于分析細節,可以修改以下代碼:
命令行執行:powershell -ep bypass -f WSUSpendu.ps1 -Verbose,將會輸出完整的信息
0x05 行為檢測
客戶端的補丁歷史更新記錄會保存所有的補丁安裝信息:
如下圖
但是,攻擊者如果獲得了系統的管理員控制權限,可以通過命令行卸載補丁的方式清除歷史更新記錄,命令行卸載補丁的命令示例:
查看更新:wmic qfe list brief/format:table
卸載指定更新:wusa /uninstall /kb:976902 /quiet /norestart
0x06 小結
本文介紹了通過WSUS進行橫向移動的方法和實現工具,結合利用思路,給出行為檢測的建議。
參考資料:
https://www.blackhat.com/docs/us-15/materials/us-15-Stone-WSUSpect-Compromising-Windows-Enterprise-Via-Windows-Update.pdf
https://www.gosecure.net/blog/2020/09/03/wsus-attacks-part-1-introducing-pywsus/
https://labs.nettitude.com/blog/introducing-sharpwsus/