新聞中心
前言

申扎網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),申扎網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為申扎千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的申扎做網(wǎng)站的公司定做!
path-the-hash,中文直譯過來就是hash傳遞,在域中是一種比較常用的攻擊方式。在網(wǎng)上所找到的資料,大多數(shù)是介紹如何實現(xiàn)此類攻擊,但對于它背后所隱藏的關(guān)于Windows安全機制的一些知識,卻鮮有探討。本文的目的就是從pass-the-hash這一古老的話題切入,由攻擊過程中Windows的行為引出它背后的安全機制,讓大家對Windows有更深入的了解。
攻擊方式
通常來說,pass-the-hash的攻擊模式是這樣的:
獲取一臺域主機高權(quán)限
利用mimikatz等工具導(dǎo)出密碼hash
用導(dǎo)出的hash嘗試登陸其他域主機
下面簡單演示一下一般的攻擊方法:
mimikatz抓取密碼
傳遞hash
可以看到,已經(jīng)能夠訪問到遠程的機器了。
一個試驗引出的問題
雖然pth是一個比較老的套路了,但實際上關(guān)于這個話題能談到的還有很多。其中值得注意的包括微軟發(fā)布的補丁kb2871997。據(jù)說這個補丁能夠阻止pth,并且還能阻止mimikatz抓取明文密碼。
有意思的是,事情并不是那么簡單,我們做一個實驗:
攻擊機:192.168.1.109
windows server 2008 r2
靶機:192.168.1.103
windows server 2008 r2
這里有兩點需要注意,一是pth所使用的賬戶User并不是RID為500的賬戶,但它是本地管理員組的成員,二是這并非在域環(huán)境中進行實驗,所有的賬戶都不是域賬戶
首先在靶機上查看一下補丁情況
可以看到,沒有安裝kb2871997
然后在攻擊機上傳遞hash
提示拒絕訪問
接下來我們再嘗試以RID為500的Administrator用戶pth,
這下成功了。那如果我們在域環(huán)境下,使用域賬戶情況又如何呢?
這次使用域賬戶User,User是一個RID非500的域管理員組成員
從上面的實驗中我們可以得出一個結(jié)論:即便沒有打KB2871997,windows server 2008 r2依然阻止了RID非500,也即非內(nèi)置管理員賬戶的遠程登陸,但這條規(guī)則對于域賬戶并不適用。下面我們來深入探究原因。
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)一個本地管理員組的用戶遠程登陸時,它不是以一個“完全”的管理員身份登陸。什么是“完全”呢?
在Pass-the-Hash Is Dead(強烈推薦!)中,有這么一段話:
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
以作者的觀點來看,返回的令牌被過濾了,它僅有一個“中等完整性”。也就是說,這個令牌不是“完全”的。這里的完全,就是指令牌的完整性級別。
完整性級別
“……完整性級別能夠修改自主訪問行為,以便區(qū)分以同一用戶身份運行,并被同一用戶擁有的不同進程和對象,從而提供在同一用戶賬戶內(nèi)隔離代碼和數(shù)據(jù)的能力。強制完整性級別(MIC,mandatory integrity control)機制通過把調(diào)用者關(guān)聯(lián)到一個完整性級別,讓SRM能夠得到調(diào)用者自身屬性的更詳細信息。它給要訪問的對象定義了一個完整性級別,從而指出了要訪問該對象的調(diào)用者必須擁有的信任信息?!?——《深入解析windows操作系統(tǒng) 第六版(上冊)》.P.487
以我的理解來講,當(dāng)一個用戶登陸到windows操作系統(tǒng)中時,所屬他的進程在訪問不同的對象時,操作系統(tǒng)必須確認它有訪問此對象的權(quán)限。通過賦予完整性級別這一屬性,各對象能夠被區(qū)分開,并能控制訪問的行為。完整性級別是通過一個SID來指定的,系統(tǒng)使用了五個主要級別:
既然以SID的方式定義了完整性級別,那么它就應(yīng)該存在于用戶的令牌中。一個訪問令牌的基本結(jié)構(gòu)如下:
實際上,代表完整性級別的SID包含在組SID中。一個進程或線程擁有一個令牌,當(dāng)它請求訪問一個對象時,Windows內(nèi)核中的SeAccessCheck函數(shù)會進行完整性檢查。如果它的完整性級別等于或高于請求的對象,它就可以對此對象進行寫入操作。但當(dāng)一個進程或線程想要打開另一個進程或線程時,它不僅要滿足完整性檢查,還要擁有DACL的授權(quán)。
進程與對象的訪問權(quán)
UAC
UAC大家應(yīng)該都很熟悉。簡單來說,UAC的目的就是讓用戶以標(biāo)準(zhǔn)的權(quán)限,而非管理員權(quán)限來執(zhí)行操作。它能夠在一定程度上阻止惡意軟件的運行。在我們的印象中,UAC似乎只是對本地使用計算機進行了限制,但事實上,微軟也考慮了UAC對遠程登陸的安全限制。在微軟的知識庫文章中,它認為應(yīng)該保護本地管理員免受來自網(wǎng)絡(luò)的攻擊,因此對網(wǎng)絡(luò)施加了UAC限制。同時,微軟也提到了:
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.
在我們的實驗中,由于UAC的限制,我們無法以一個高完整性的令牌來登陸遠程主機,因而pth攻擊并不會成功;而在域環(huán)境中,我們以管理員組身份遠程登陸時,將會得到一個高完整性的令牌,UAC對我們的行為并不加以限制。文章中也提到了解決問題的方法,通過設(shè)置LocalAccountTokenFilterPolicy的值為1來取消UAC的限制。這個鍵默認并不存在,需要在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System下手動創(chuàng)建。順便一提,UAC的設(shè)置就保存在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System中。通常我們要更改UAC設(shè)置并不需要直接修改注冊表,而是通過控制面板中的更改用戶賬戶控制設(shè)置來更改。下圖即為更改用戶賬戶控制設(shè)置:
可以看到有四個等級:最高一檔(始終通知)、第二檔、第三檔、最低一檔(從不通知)。不同的等級將會影響到注冊表中鍵的值:
回到正題。我們來驗證一下微軟的方案:
在注冊表中HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System下新建一個DWORDLocalAccountTokenFilterPolicy并將值設(shè)置為0
pass-the-hash
將LocalAccountTokenFilterPolicy值設(shè)置為1,重復(fù)攻擊過程
沒有問題,說明的確是由于令牌被UAC過濾掉導(dǎo)致無法遠程登陸。這里我想再介紹兩個概念:受限制的令牌和已過濾的管理員令牌。
受限制的令牌
受限制的令牌是通過windows的模仿機制創(chuàng)建的來源令牌的一份拷貝。至于什么是模仿這里暫且不表,感興趣的同學(xué)可以自行g(shù)oogle。受限令牌的特征就是能夠作為復(fù)制品修改源令牌而不對源令牌造成影響。它的修改可以是如下:
從該令牌的特權(quán)數(shù)組中刪除一些特權(quán)
可以標(biāo)記某些SID 為僅僅拒絕(deny-only)
可以將SID標(biāo)記為受限制的(restricted)
第二點和第三點實際上是對特權(quán)做出了限制,但這樣的限制并不是直接將特權(quán)刪除,因為刪除特權(quán)可能會導(dǎo)致特權(quán)覆蓋,簡單來說就是此令牌不具有某些特權(quán),但如果它的組SID被授予某些權(quán)限,那它也將具備這些權(quán)限。
已過濾的管理員令牌
UAC會使用受限制的令牌來創(chuàng)建已過濾的管理員令牌。一個已過濾的管理員令牌具有以下特性:
其完整性級別為“中”
管理員SID和管理員類的SID被標(biāo)記為“僅僅拒絕”
除Change Notify、Shutdown、Undock、Increase Working Set和Time Zone外的特權(quán)都被移除
前面我們提到返回的令牌僅有一個“中等完整性”,是由于它是一個已過濾的管理員令牌。根據(jù)微軟在Vista以后的默認策略,持有此令牌的用戶將不得進行遠程管理。
總結(jié)
經(jīng)過以上的分析,我們可以大概明白為什么pass-the-hash在不同環(huán)境下有著迥異的行為。說的淺一點,就是UAC在作祟;深入探討的話,則能通過pass-the-hash管窺Windows的龐大安全機制。
受限于篇幅及主題的限制,我無法將文章中某些出現(xiàn)的概念進行深入地介紹,希望本文能夠拋磚引玉,讓大家對Windows操作系統(tǒng)進行深入地研究與思考,看待某些安全問題時能夠有更新奇的理解。
分享題目:從hash傳遞攻擊談相關(guān)Windows安全機制
URL標(biāo)題:http://www.dlmjj.cn/article/dpcidds.html


咨詢
建站咨詢
