滲透測試人員對Pass-the-Hash(PtH)攻擊都很熟悉。我們常在滲透測試中用到它。如果你的職責包括網絡入侵防御,你至少應該了解其攻擊方法。不管你有多少經驗,你對問題了解得可能不深,或許還不知道它是怎么解決的,注意是“解決”而不是“修復”。
概述攻擊者通過一定辦法獲取了Windows計算機的本地管理員權限,可以在內存中尋找其它本地或域內賬戶登錄后的hash,因為電腦正在運行。這些hash可以“傳遞”(不需要破解)給其它的計算機或者服務,作為一種認證方法。
這意味著,一開始只攻破一個看起來不重要的服務器或工作站,由于域管理員賬戶為了執行一些支持任務,登錄了這個機器,就可以在更高的水平攻破整個域。
PtH的問題考慮下面比較常見的場景:
一個主機被攻陷(沒重要價值)。
但是本地administrator賬戶和其它所有主機的密碼相同。
攻擊者從內存中獲取了所有的hash,域管理員賬戶并不在里面。攻擊者獲取了所有的本地hash,包括administrator賬號的。
攻擊者使用獲取的本地administrator的hash,利用PtH登錄了其它的主機,然后重復這個過程(也被稱為hash噴射攻擊)。在這個過程中,會得到一個本地和域用戶的hash列表。
最終,一個主機會在內存中包含一個有權限的域賬戶,可以用于訪問數據庫,文件服務器,以及域控制器,然后再次使用PtH。
PtH并不是一個漏洞利用技術,它是Microsoft Windows提供的一個特性。因此,沒有補丁。降低PtH攻擊的風險是可以的,但是它需要對認證權限橫向隔離。
域中對權限橫向隔離降低PtH攻擊的風險,實際上是給管理員賬戶賦予有限的安全邊界的問題。或者可以這樣理解,最小化所有支持和管理賬戶的訪問范圍。
要遵守的策略是,盡量減少黑客獲取域內賬戶之后攻破其它服務器或主機的數量。比如,攻破一個開發主機之后,不應該泄漏開發服務器(或者產品服務器,或者其它主機,或者域控制器)上的管理員賬戶。
下面是需要遵守的幾個降低PtH攻擊風險的步驟:
第0步:基礎確保所有的服務器、主機、筆記本或者其它開放網絡端口的設備都安全加固了,確保禁用LM hash。
確保設置了非常強的密碼策略。
請不要在任何地方重用密碼,包括服務器或administrator賬號。不要為服務賬號設置簡單的密碼。
確保所有的本地administrator密碼都是唯一的。
這將使攻擊者在你的網絡難以立足。沒有hash就無法實施PtH攻擊。
第1步:應該定義安全邊界,比如HR主機,開發主機,財務筆記本,DMZ服務器,測試服務器等等。越多越好。每個安全邊界都應該設置一個對這個組里的所有主機有管理員權限的域賬戶(絕不可以是administraotr)。這個用戶應該配置成不能訪問其它主機或服務,最重要的是它不能是網絡中其它任何設備的管理員。
這樣做的原理是,攻破一個安全邊界里的機器,并不會泄漏其它的安全邊界。這是因為,任何被攻陷的高權限賬號都無法訪問其它邊界內的主機。
第2步:域administrator用戶只能用于訪問域控制器。每次使用這個賬戶都會留下一些痕跡,緩存的賬號或者是LSA密鑰等等。
如果攻擊者想辦法攻破了域控制器,那么游戲就結束了。所有的hash都可以提取,那時,PtH就變成了一個小問題。
第3步:服務賬戶應該一事一議來考慮,只分配服務正常工作需要的權限。這在PtH攻擊方面很有風險,我們經常利用它。
結論hash注入是我們在滲透測試中常用的方法。它是網絡滲透和擴展(可能也有提權)的一個有效辦法。
正如前面討論的,hash注入并不是一個漏洞,但是是微軟提供的一個會被濫用的特性。因此,它無法修復,但是可以降低風險。這需要對域網絡有一個合理的安全管理辦法。
微軟在2012年和2014年發表了兩篇文章,名為《Mitigating Pass-the-Hash (PtH) Attacks and Other Credential Theft Techniques》和《Mitigating Pass the Hash Attacks and Other Credential Theft, version 2》,非常有趣也非常有用,鏈接如下:
Pass-the-Hash (PtH) – https://technet.microsoft.com/en-us/dn785092.aspx
最好使用網絡訪問控制,把訪問管理服務(以及服務器)的權限限制在需要的主機上,這不是銀彈但卻有用。