防禦Mimikatz攻擊的方法介紹
簡單介紹Mimikatz攻擊
Mimikatz在內網滲透測試中發揮著至關重要的作用,主要是因為它能夠以明文形式從內存中提取明文密碼。眾所周知,攻擊者在他們的滲透中大量使用Mimikatz, 儘管微軟推出了安全補丁,但是在較舊的操作系統(如Windows 2008 Server)中Mimikatz還是仍然有效,所以在很多情況下它可能導致橫向移動和域許可權提升。 值得注意的是,如果Mimikatz是從本地管理員等許可權執行的,則它只能導出用戶憑據和密碼哈希值。下面通過幾種方法來防禦Mimikatz攻擊:
Debug許可權設置
根據Microsoft的調試許可權確定哪些用戶可以將調試器附加到任何進程或內核。默認情況下,此許可權授予本地管理員。然而,除非他是系統進程,否則本地管理員極不可能需要此許可權。
本地管理員-調試許可權
在默認安裝的Windows Server 2016系統中,未定義調試許可權的組策略,這意味著只有本地管理員具有此許可權。
調試許可權-組策略
從攻擊者的角度來看,可以通過使用Mimikatz以下命令執行此檢查:
檢查調試許可權
Mimikatz需要此許可權,因為它要與LSASS進程交互。 因此,將此許可權僅設置為需要這許可權的特定用戶或組,並將其從本地管理員中刪除是非常重要。 可以通過將策略定義為不包含任何用戶或組來禁用SeDebugPrivilege。
Group Policy Management Editor -> Windows Settings -> Security Settings -> Local Policies -> User Rights Assignment -> Debug programs -> Define these policy settings:
禁用SeDebugPrivilege
Mimikatz-禁用調試許可權
WDigest
WDigest協議是在WindowsXP中被引入的,旨在與HTTP協議一起用於身份認證。默認情況下,Microsoft在多個版本的Windows(Windows XP-Windows 8.0和Windows Server 2003-Windows Server 2012)中啟用了此協議,這意味著純文本密碼存儲在LSASS(本地安全授權子系統服務)進程中。 Mimikatz可以與LSASS交互,允許攻擊者通過以下命令檢索這些憑據:
sekurlsa::wdigest
Mimikatz?—?WDigest
Microsoft在Windows8.1,Windows 10,Windows Server 2012 R2和Windows Server 2016系統中默認禁用此協議。但是,如果您的組織使用較舊的操作系統(如Windows 7和Windows Server 2008等),Microsoft已發布了一個補丁(KB2871997),允許管理員啟用或禁用WDigest協議。打完補丁後,建議驗證是否已經從註冊表中禁用WDigest。
HKEY_LOCAL_MACHINESystemCurrentControlSetControlSecurityProvidersWDigest
WDigest-禁用
Negotiate和UseLogonCredential註冊表項值應設置為0可以完全禁用此協議。 應該注意的是,在較新的操作系統(Windows Server 2016,Windows 10等)中,UseLogonCredential註冊表項不存在。 當然,具有本地管理員許可權的攻擊者可以修改註冊表以啟用WDigest並獲取憑據,因為Dave Kennedy在他的博客中對此進行了大量解釋。 因此,如果在禁用此協議後將這些值設置為1,則表明存在攻擊。 應該不斷監視註冊表修改,以便在早期階段獲得警報並捕獲威脅。
如果我們禁用此協議,攻擊者嘗試從WDigest檢索純文本憑據將失敗:
Mimikatz-WDigest已禁用
LSA保護
本地安全許可權服務(LSASS)驗證用戶是否進行本地和遠程登錄,並實施本地安全策略。 Windows 8.1及更高版本的系統中,Microsoft為LSA提供了額外的保護,以防止不受信任的進程讀取內存或代碼注入。Windows 8.1之前的系統,攻擊者可以執行Mimikatz命令來與LSA交互並檢索存儲在LSA內存中的明文密碼。
sekurlsa::logonPasswords
Mimikatz-與LSA交互
建議Windows Server 2012R2和Windows 8.1之前的系統應啟用LSA保護,以防止Mimikatz訪問LSASS進程的特定內存位置獲取明文密碼。可以通過創建註冊表項RunAsPPL並設置其值為1來啟用此保護。
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLSA
LSA保護已啟用
在啟用了LSA保護的系統中,攻擊者將收到以下錯誤:
Mimikatz-LSA保護
受限制的管理模式
Microsoft在WindowsServer 2012 R2中引入了一項額外的安全功能,可以有效的防止本地管理員的純文本憑據在RDP會話期間存儲在LSASS中。即使LSA保護可以阻止Mimikatz檢索憑證,但建議在攻擊者禁用LSA保護的情況下使用此安全功能作為額外的安全保護。
應在以下位置創建「DisableRestrictedAdmin」註冊表項並且設置為0,這樣可以通過網路RDP會話請求管理員登陸系統。 此外,創建「DisableRestrictedAdminOutboundCreds」註冊表項值為1,可以禁止管理員執行RDP的系統內部的網路身份驗證。 缺少此註冊表項,管理員可以導出憑據。
HKEY_LOCAL_MACHINESystemCurrentControlSetControlLsa
已啟用受限制的管理模式
需要在域中強制執行「對遠程伺服器的憑據限制委派」策略,以確保所有出站RDP會話都使用「RestrictedAdmin」模式,因此才不會泄露憑據。
組策略限制憑證授權
需要使用「Require Restricted Admin」設置啟用該策略。
啟用受限制的管理員-限制憑證授權
強制執行此策略後,管理員可以遠程RDP到所需註冊表許可權的工作站和伺服器,以便控制Windows運行一些程序。
運行-受限制的管理模式切換
或者直接從命令提示符執行它。
命令提示符-受限制的管理模式切換
對於Windows 2012 R2和Windows 8.1之前的舊操作系統,此選項是Microsoft補丁的一部分KB2871997。
憑證緩存
如果域控制器不可用,Windows將檢查已緩存的最後一個密碼哈希值,以便使用系統對用戶進行身份驗證。 這些密碼哈希值緩存在以下註冊表設置中:
HKEY_LOCAL_MACHINESECURITYCache
如果執行Mimikatz以下命令,可以檢索這些哈希值:
lsadump::cache
默認情況下,Windows會緩存最後10個密碼哈希值。 建議通過將以下安全設置來防止密碼的本地緩存,將其值設置為0。
Computer Configuration -> Windows Settings -> Local Policy -> Security Options -> Interactive Logon: Number of previous logons to cache -> 0
互動式登錄-不緩存登錄
攻擊者嘗試使用Mimikatz檢索這些密碼哈希將失敗:
Credential Caching禁用後Mimikatz出錯
受保護的用戶組
WindowsServer 2012及更高版本中的Microsoft引入了一個名為「Protected Users」的新安全組。 此組使域管理員能夠保護本地管理員等有許可權的用戶,因為屬於該組的任何帳戶只能通過Kerberos對域進行身份驗證。 這將有助於防止NTLS密碼哈希值或LSAS中的純文本憑據泄露給敏感帳戶,這些帳戶通常是攻擊者的目標。
可以在「Active Directory用戶和計算機」中找到「Protected Users」安全組。
ActiveDirectory-受保護的用戶安全組
成為此安全組一部分的帳戶將在身份驗證方面自動歸入Kerberos策略,默認情況下配置如下:
Kerberos默認策略
或者,可以通過執行以下PowerShell命令將帳戶添加到「受保護的用戶」組中:
Add-ADGroupMember –Identity "Protected Users" –Members Jane
通過PowerShell添加受保護的用戶組帳戶
通過安裝Microsoft的補丁KB2871997,WindowsServer 2008等較舊的操作系統可以擁有此安全組。
結論
通過使用有效的端點解決方案與AppLocker等應用程序白名單相結合來防止惡意的可執行文件,執行一些PowerShell命令和cmd命令,還可以加固安全性。即使網路攻擊者已經實現繞過這些控制,執行註冊表修改,以便充分利用Mimikatz進行憑證獲取,在此過程中將會生成許多事件,管理員應該監視某些註冊表項,這有助於檢測攻擊行為


※Mylobot——一種使用高複雜度逃避技術的新型殭屍網路
※深入研究VBScript—CVE-2018-8174利用分析
TAG:嘶吼RoarTalk |