從hash傳遞攻擊談相關(guān)Windows安全機(jī)制
前言
path-the-hash,中文直譯過來就是hash傳遞,在域中是一種比較常用的攻擊方式。在網(wǎng)上所找到的資料,大多數(shù)是介紹如何實(shí)現(xiàn)此類攻擊,但對(duì)于它背后所隱藏的關(guān)于Windows安全機(jī)制的一些知識(shí),卻鮮有探討。本文的目的就是從pass-the-hash這一古老的話題切入,由攻擊過程中Windows的行為引出它背后的安全機(jī)制,讓大家對(duì)Windows有更深入的了解。
攻擊方式
通常來說,pass-the-hash的攻擊模式是這樣的:
獲取一臺(tái)域主機(jī)高權(quán)限
利用mimikatz等工具導(dǎo)出密碼hash
用導(dǎo)出的hash嘗試登陸其他域主機(jī)
下面簡(jiǎn)單演示一下一般的攻擊方法:
mimikatz抓取密碼
傳遞hash
可以看到,已經(jīng)能夠訪問到遠(yuǎn)程的機(jī)器了。
一個(gè)試驗(yàn)引出的問題
雖然pth是一個(gè)比較老的套路了,但實(shí)際上關(guān)于這個(gè)話題能談到的還有很多。其中值得注意的包括微軟發(fā)布的補(bǔ)丁kb2871997。據(jù)說這個(gè)補(bǔ)丁能夠阻止pth,并且還能阻止mimikatz抓取明文密碼。
有意思的是,事情并不是那么簡(jiǎn)單,我們做一個(gè)實(shí)驗(yàn):
攻擊機(jī):192.168.1.109
windows server 2008 r2
靶機(jī):192.168.1.103
windows server 2008 r2
這里有兩點(diǎn)需要注意,一是pth所使用的賬戶User并不是RID為500的賬戶,但它是本地管理員組的成員,二是這并非在域環(huán)境中進(jìn)行實(shí)驗(yàn),所有的賬戶都不是域賬戶
首先在靶機(jī)上查看一下補(bǔ)丁情況
可以看到,沒有安裝kb2871997
然后在攻擊機(jī)上傳遞hash
提示拒絕訪問
接下來我們?cè)賴L試以RID為500的Administrator用戶pth,
這下成功了。那如果我們?cè)谟颦h(huán)境下,使用域賬戶情況又如何呢?
這次使用域賬戶User,User是一個(gè)RID非500的域管理員組成員
從上面的實(shí)驗(yàn)中我們可以得出一個(gè)結(jié)論:即便沒有打KB2871997,windows server 2008 r2依然阻止了RID非500,也即非內(nèi)置管理員賬戶的遠(yuǎn)程登陸,但這條規(guī)則對(duì)于域賬戶并不適用。下面我們來深入探究原因。
UAC與令牌完整性
微軟在文章Description of User Account Control and remote restrictions in Windows Vista中提到:
When a user who is a member of the local administrators group on the target remote computer establishes a remote administrative connection…they will not connect as a full administrator. The user has no elevation potential on the remote computer, and the user cannot perform administrative tasks. If the user wants to administer the workstation with a Security Account Manager (SAM) account, the user must interactively log on to the computer that is to be administered with Remote Assistance or Remote Desktop.
根據(jù)微軟的描述,當(dāng)一個(gè)本地管理員組的用戶遠(yuǎn)程登陸時(shí),它不是以一個(gè)“完全”的管理員身份登陸。什么是“完全”呢?
在Pass-the-Hash Is Dead(強(qiáng)烈推薦!)中,有這么一段話:
for any non-RID 500 local admin account remotely connecting to a Windows Vista+ machine, whether through WMI, PSEXEC, or other methods, the token returned is “filtered” (i.e. medium integrity) even though the user is a local administrator. Since there isn’t a method to remotely escalate to a high-integrity context, except through RDP (which needs a plaintext password unless ‘Restricted Admin’ mode is enabled) the token remains medium integrity. So when the user attempts to access a privileged resource remotely, e.g. ADMIN$, they receive an “Access is Denied” message despite technically having administrative access. I’ll get to the RID 500 exception in a bit
以作者的觀點(diǎn)來看,返回的令牌被過濾了,它僅有一個(gè)“中等完整性”。也就是說,這個(gè)令牌不是“完全”的。這里的完全,就是指令牌的完整性級(jí)別。
完整性級(jí)別
“……完整性級(jí)別能夠修改自主訪問行為,以便區(qū)分以同一用戶身份運(yùn)行,并被同一用戶擁有的不同進(jìn)程和對(duì)象,從而提供在同一用戶賬戶內(nèi)隔離代碼和數(shù)據(jù)的能力。強(qiáng)制完整性級(jí)別(MIC,mandatory integrity control)機(jī)制通過把調(diào)用者關(guān)聯(lián)到一個(gè)完整性級(jí)別,讓SRM能夠得到調(diào)用者自身屬性的更詳細(xì)信息。它給要訪問的對(duì)象定義了一個(gè)完整性級(jí)別,從而指出了要訪問該對(duì)象的調(diào)用者必須擁有的信任信息。” ——《深入解析windows操作系統(tǒng) 第六版(上冊(cè))》.P.487
以我的理解來講,當(dāng)一個(gè)用戶登陸到windows操作系統(tǒng)中時(shí),所屬他的進(jìn)程在訪問不同的對(duì)象時(shí),操作系統(tǒng)必須確認(rèn)它有訪問此對(duì)象的權(quán)限。通過賦予完整性級(jí)別這一屬性,各對(duì)象能夠被區(qū)分開,并能控制訪問的行為。完整性級(jí)別是通過一個(gè)SID來指定的,系統(tǒng)使用了五個(gè)主要級(jí)別:
既然以SID的方式定義了完整性級(jí)別,那么它就應(yīng)該存在于用戶的令牌中。一個(gè)訪問令牌的基本結(jié)構(gòu)如下:
實(shí)際上,代表完整性級(jí)別的SID包含在組SID中。一個(gè)進(jìn)程或線程擁有一個(gè)令牌,當(dāng)它請(qǐng)求訪問一個(gè)對(duì)象時(shí),Windows內(nèi)核中的SeAccessCheck函數(shù)會(huì)進(jìn)行完整性檢查。如果它的完整性級(jí)別等于或高于請(qǐng)求的對(duì)象,它就可以對(duì)此對(duì)象進(jìn)行寫入操作。但當(dāng)一個(gè)進(jìn)程或線程想要打開另一個(gè)進(jìn)程或線程時(shí),它不僅要滿足完整性檢查,還要擁有DACL的授權(quán)。
進(jìn)程與對(duì)象的訪問權(quán)
UAC
UAC大家應(yīng)該都很熟悉。簡(jiǎn)單來說,UAC的目的就是讓用戶以標(biāo)準(zhǔn)的權(quán)限,而非管理員權(quán)限來執(zhí)行操作。它能夠在一定程度上阻止惡意軟件的運(yùn)行。在我們的印象中,UAC似乎只是對(duì)本地使用計(jì)算機(jī)進(jìn)行了限制,但事實(shí)上,微軟也考慮了UAC對(duì)遠(yuǎn)程登陸的安全限制。在微軟的知識(shí)庫文章中,它認(rèn)為應(yīng)該保護(hù)本地管理員免受來自網(wǎng)絡(luò)的攻擊,因此對(duì)網(wǎng)絡(luò)施加了UAC限制。同時(shí),微軟也提到了:
A user who has a domain user account logs on remotely to a Windows Vista computer. And, the domain user is a member of the Administrators group. In this case, the domain user will run with a full administrator access token on the remote computer, and UAC will not be in effect.
在我們的實(shí)驗(yàn)中,由于UAC的限制,我們無法以一個(gè)高完整性的令牌來登陸遠(yuǎn)程主機(jī),因而pth攻擊并不會(huì)成功;而在域環(huán)境中,我們以管理員組身份遠(yuǎn)程登陸時(shí),將會(huì)得到一個(gè)高完整性的令牌,UAC對(duì)我們的行為并不加以限制。文章中也提到了解決問題的方法,通過設(shè)置LocalAccountTokenFilterPolicy的值為1來取消UAC的限制。這個(gè)鍵默認(rèn)并不存在,需要在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System下手動(dòng)創(chuàng)建。順便一提,UAC的設(shè)置就保存在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System中。通常我們要更改UAC設(shè)置并不需要直接修改注冊(cè)表,而是通過控制面板中的更改用戶賬戶控制設(shè)置來更改。下圖即為更改用戶賬戶控制設(shè)置:
可以看到有四個(gè)等級(jí):最高一檔(始終通知)、第二檔、第三檔、最低一檔(從不通知)。不同的等級(jí)將會(huì)影響到注冊(cè)表中鍵的值:
回到正題。我們來驗(yàn)證一下微軟的方案:
在注冊(cè)表中HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System下新建一個(gè)DWORDLocalAccountTokenFilterPolicy并將值設(shè)置為0
pass-the-hash
將LocalAccountTokenFilterPolicy值設(shè)置為1,重復(fù)攻擊過程
沒有問題,說明的確是由于令牌被UAC過濾掉導(dǎo)致無法遠(yuǎn)程登陸。這里我想再介紹兩個(gè)概念:受限制的令牌和已過濾的管理員令牌。
受限制的令牌
受限制的令牌是通過windows的模仿機(jī)制創(chuàng)建的來源令牌的一份拷貝。至于什么是模仿這里暫且不表,感興趣的同學(xué)可以自行g(shù)oogle。受限令牌的特征就是能夠作為復(fù)制品修改源令牌而不對(duì)源令牌造成影響。它的修改可以是如下:
從該令牌的特權(quán)數(shù)組中刪除一些特權(quán)
可以標(biāo)記某些SID 為僅僅拒絕(deny-only)
可以將SID標(biāo)記為受限制的(restricted)
第二點(diǎn)和第三點(diǎn)實(shí)際上是對(duì)特權(quán)做出了限制,但這樣的限制并不是直接將特權(quán)刪除,因?yàn)閯h除特權(quán)可能會(huì)導(dǎo)致特權(quán)覆蓋,簡(jiǎn)單來說就是此令牌不具有某些特權(quán),但如果它的組SID被授予某些權(quán)限,那它也將具備這些權(quán)限。
已過濾的管理員令牌
UAC會(huì)使用受限制的令牌來創(chuàng)建已過濾的管理員令牌。一個(gè)已過濾的管理員令牌具有以下特性:
其完整性級(jí)別為“中”
管理員SID和管理員類的SID被標(biāo)記為“僅僅拒絕”
除Change Notify、Shutdown、Undock、Increase Working Set和Time Zone外的特權(quán)都被移除
前面我們提到返回的令牌僅有一個(gè)“中等完整性”,是由于它是一個(gè)已過濾的管理員令牌。根據(jù)微軟在Vista以后的默認(rèn)策略,持有此令牌的用戶將不得進(jìn)行遠(yuǎn)程管理。
總結(jié)
經(jīng)過以上的分析,我們可以大概明白為什么pass-the-hash在不同環(huán)境下有著迥異的行為。說的淺一點(diǎn),就是UAC在作祟;深入探討的話,則能通過pass-the-hash管窺Windows的龐大安全機(jī)制。
受限于篇幅及主題的限制,我無法將文章中某些出現(xiàn)的概念進(jìn)行深入地介紹,希望本文能夠拋磚引玉,讓大家對(duì)Windows操作系統(tǒng)進(jìn)行深入地研究與思考,看待某些安全問題時(shí)能夠有更新奇的理解。