作者:
小飛
·
2015/11/26 15:57
0x00 Windows Server Update Services
WSUS是Windows Server Update Services的簡稱。利用這個windows服務,管理員只需要保證區域網中的一臺主機能夠連線到MicroSoftUpdate伺服器,就能實現內網中所所有主機快速地進行windows更新。
簡而言之,內網中的WSUS伺服器就是windows官方更新伺服器的代理。WSUS伺服器透過網際網路取得官方的windows update,並且快取到本地。管理員只需要在wsus上選擇哪些補丁需要更新,就能透過HTTP/HTTPS協議快速地將各種ms-2015-***|||*部署到內網中的其他伺服器中去,這樣即使是由於種種原因不能暴露在英特網中的內網主機(比如oracle資料庫伺服器)也能透過WSUS及時下載補丁,大大增加了內網的安全性,實現了細粒化管理。所以很多中大型網路都會部署wsus伺服器來實現內網安全加固。
由於wsus是基於c/s模式的,所以server和client我們都需要進行配置。 client機器上在登錄檔中儲存了wsus伺服器的地址
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate\W UServer
比如儲存的內容可能是這樣的 http://wsus01:8530
. Port 8530 是wsus部署的預設埠。
0x01 WSUS 協議分析
wsus利用SOAP XML實現c/s之間的通訊,當client主機首次連入wsus-server的時候,會有一個這樣的註冊過程。
一旦完成了這樣的註冊流程,client主機就能進行定時更新檢查了。(只要上述的cookies不過期)
這裡我們詳細分析一下每一個請求
SOAP Call 請求 響應
SyncUpdates (硬體驅動) 本機硬體列表 可更新的驅動列表
SyncUpdates (軟體) 已經安裝的更新的id列表 新可用更新列表以及metadata
GetExtendedUpdateInfo 具體地update id 對應此id的詳盡的metadata,包括下載地址,hash..
可以看到wsus服務其實非常好理解:
一個SyncUpdates到wsus伺服器獲取可更新的id以及id對應的一些解釋資料,本機透過這些解釋資料決定安裝哪個(些)補丁,並且傳送GetExtendedUpdateInfo,獲得詳細的資訊進行安裝。
下面是一個SyncUpdates響應的例子
Example of wsus-server to cilent
#!xml
<UpdateIdentity UpdateID="53979536-176e-46c2-9f61-bcf68381c065" RevisionNumber="206" />
<Properties UpdateType="Software" />
<Relationships>
<Prerequisites>
<UpdateIdentity UpdateID="59653007-e2e9-4f71-8525-2ff588527978" /> <UpdateIdentity UpdateID="71c1e8bb-9a5d-4e56-a456-10b0624c7188" /> </Prerequisites>
</Relationships>
<ApplicabilityRules>
<IsInstalled>
<b.FileVersion Version="6.1.7601.22045" Comparison="GreaterThanOrEqualTo"
Path="\conhost.exe" Csidl="37" />
</IsInstalled>
<IsInstallable>
<Not>
<CbsPackageInstalledByIdentity
PackageIdentity="InternetExplorer-Package~11.2.9600.16428" /> </Not>
</IsInstallable>
那麼一旦client決定了要裝哪些更新就會再發一個GetExtenedUpdateInfo到wsus-server
Example of client to wsus-server(GetExtendedUpdateInfo request)
#!xml
<soap:Envelope><soap:Body>
<GetExtendedUpdateInfo>
<cookie>首次連線註冊的cookies</cookie>
<revisionIDs>
<int>13160722</int>
<int>16753458</int>
<int>17212691</int>
<int>17212692</int>
</revisionIDs>
<infoTypes>
<XmlUpdateFragmentType>Extended</XmlUpdateFragmentType> <XmlUpdateFragmentType>LocalizedProperties</XmlUpdateFragmentType> <XmlUpdateFragmentType>Eula</XmlUpdateFragmentType> </infoTypes> <locales>
<string>en-US</string>
<string>en</string> </locales>
</GetExtendedUpdateInfo>
</soap:Body></soap:Envelope>
wsus接著給出響應
Example of GetExtendedUpdateInfo response
#!xml
<soap:Envelope><soap:Body>
<GetExtendedUpdateInfoResponse><GetExtendedUpdateInfoResult> <Updates>
<Update>
<ID>17212691</ID>
<Xml><ExtendedProperties...</HandlerSpecificData></Xml> </Update>
<Update>
<ID>17212692</ID>
<Xml><ExtendedProperties...</HandlerSpecificData></Xml> </Update>
... </Updates>
<FileLocations>
<FileLocation>
<FileDigest>tXa3bCw4XzkLd/Fyfs2ATZcYgh8=</FileDigest>
<Url>http://wsus-server:8530/Content/1F/B576B76C2C385F39.cab</Url> </FileLocation>
<FileLocation>
<FileDigest>OzTUyOLCmjlK08U2VJNHw3rfpzQ=</FileDigest>
<Url>http://wsus-server:8530/Content/34/3B34D4C8E2C29A39.cab</Url> </FileLocation> </FileLocations>
</GetExtendedUpdateInfoResult>
</GetExtendedUpdateInfoResponse>
</soap:Body></soap:Envelope>
需要說明的是,每一個update標籤就是一個更新執行緒,然而最為重要的metadada標籤