前言


摘要

 


CyberArk實驗室團隊已經發現了一種從本地安全機構(LSA)Secrets註冊表配置單元得到加密的服務憑據的方法,並將它們注入到新的惡意服務中,以實現域的橫向移動與完全控制。

此漏洞需要攻擊者首先在受感染的計算機上獲得本地管理員權限,但一旦獲得了本地管理員權限,攻擊者就可以利用單個加入域的機器橫向滲透,最終獲得對域控制器的訪問權限。

此漏洞可以在Windows端利用,包括啓用了Credential Guard(VSM)功能的Windows 10機器。

本博客將解釋現今的服務憑證保護方法,和怎樣繞過攻擊,以及CyberArk實驗室團隊如何證明這個漏洞可以進行橫向滲透。

 

背景:如何保護服務憑證

 


從Windows 7開始,Microsoft將憑證存儲在安全註冊表配置LSA Secrets註冊表(HKEY_LOCAL_MACHINE / Security / Policy)中來開始保護服務憑據,憑據使用數據保護API(DPAPI)且通過系統密鑰進行加密,一般情況只有system賬户能訪問,管理員是沒辦法的,但是,默認情況下。管理員仍然擁有對此註冊表的修改權限,利用修改權限,管理員仍然可以訪問LSA Secrets,從註冊表中轉儲憑據,或利用DPAPI進行提取。

在Windows 10中,Microsoft引入了Credential Guard功能,旨在通過安全的位置隔離來主動保護內存中的域用户憑據,藉此來緩解使用憑據或哈希進行橫向移動的風險。 但是,因為Credential Guard僅在內存中保護憑據,無法保護服務憑據。 因此,這些可能具有域訪問權限的服務憑證仍保留在LSA Secrets註冊表配置單元中。

 

新風險

 


CyberArk實驗室團隊最近發現,存儲在LSA Secrets註冊表配置單元中的加密服務憑據可泄漏,並用於實現橫向移動,即使啓用Windows 10中的Credential Guard。在概念上類似於以前版本的Windows中的傳遞哈希漏洞,攻擊者可以使用加密Secrets橫向移動通過域,而不需要知道基本的憑據。

 

概念證明

 


我們假設這些用於合法服務的服務憑證可能被捕獲並注入到惡意服務中,從而允許攻擊者訪問所有系統和資源,那麼在Windows機器上具有本地管理員訪問權限的任何惡意用户都可以重用存儲的域級服務憑據以橫向移動,並可能訪問域控制器。

為了測試這個假設,我們從以下基準環境開始:

1. win10計算機,本地管理員訪問權限

2. 啓用Credential Guard功能

3. 一個非管理域憑據的服務

為了測試這種情況,我們創建了一個新的空白服務,我們將嘗試注入捕獲這個服務憑據。 這個空白服務旨在模仿攻擊者實際創建和使用的惡意服務。

步驟1:獲取LSA Secrets的訪問權限

訪問LSA Secrets的第一步是授予本地管理員對安全性註冊表配置單元的訪問權限。 如上所述,默認情況下,此訪問權限僅保留給SYSTEM用户。 但是,本地管理員具有更改此默認設置所需的權限。

system服務可以關嗎_搜索

Figure 1: Security registry hive default Administrator permissions

使用本地管理員權限,攻擊者可以編輯權限,以授予管理員對安全性註冊表配置單元(HKEY_LOCAL_MACHINE / Security)的訪問權限。 一旦攻擊者具有對安全性註冊表配置單元的讀取和寫入權限,他就能夠訪問註冊表並開始搜索服務的憑據信息。

步驟2:搜索服務信息

通過訪問LSA Secrets註冊表,接下來我們在機器搜索具有域級訪問權的服務(services with domain-level access)。注意,這些服務沒有管理權限; 他們只是對同一域上的其他系統進行非管理訪問。

system服務可以關嗎_搜索_02

Figure 2: Service enumeration

此查詢標識了兩個具有域級訪問權的服務:AppVClient和tzautoupdate。 這些服務在Windows 10機器上屬於基礎服務,我們能夠在註冊表中找到他們:

HKEY_LOCAL_MACHINE/Security/Policy/Secrets/SC AppVClient
HKEY_LOCAL_MACHINE/Security/Policy/Secrets/SC tzautoupdate

我們從LSA Secrets註冊表中導出了這倆個服務的憑據信息,且並沒有嘗試利用DPAPI去解密。從這點上説,憑據仍被配置為僅對這些特定服務啓用認證。在我們更改配置以使用我們的新服務執行測試之前,我們還需要訪問服務的屬性。

我們再次使用本地管理員進行訪問註冊表並導出與這些服務相關聯的屬性:

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services.

步驟3: 更改憑據和屬性進行重複使用

如上所述,合法服務的憑據和屬性都被配置為僅為其特定服務工作,這意味着我們不能重複使用它們。然而我們是否可以修改憑據和屬性的配置以使他們被不同的服務使用呢,為了測試這個,我們使用上面提到的空白服務。

我們修改了服務的憑據和屬性配置,以便兩者都指向我們新的空白服務。

system服務可以關嗎_system服務可以關嗎_03

Figure 3: Service modifications

然後,我們將修改的憑據導入到空白服務的憑據中,並將修改後的屬性導入到空白服務的屬性中,如圖4和圖5所示。

system服務可以關嗎_system服務可以關嗎_04

Figure 4: Import modified service secrets into blank service secrets

system服務可以關嗎_Windows_05

Figure 5: Import modified service properties into blank service properties

接下來,我們在機器上啓動空白服務進行測試。

我們進行域枚舉以快速定位域控制器,並且我們搜索了對所有枚舉域控制器具有高權限訪問的服務。我們還找連接到原始受害者系統的所有其他系統。 如果受害者機器不包含任何具有域控制器訪問的服務,我們還能夠橫向移動到其他可能包含具有更高特權的服務的機器。

步驟4:橫向移動和域完全控制

使用服務上的信息以及網絡上連接的系統的信息,我們測試了我們的空白服務,看看我們是否能夠成功地實現橫向移動。 結果是 “是”。使用這些不完全和重用的服務憑證,我們證明不完全的服務憑據實際上可以用於實現橫向移動。 並且,每訪問一個新機器,我們有可能找到在域上具有更高和更高權限的服務帳户。在每一台新機器上,我們能夠重複獲取憑證,修改和重複利用的過程,直到我們能夠找到一個訪問域控和實現完全控制的服務賬户

 

實際意義

 


CyberArk實驗室中的測試清楚地表明,在單個用户的機器上,具有本地管理員訪問權限的攻擊者可能會獲取服務憑據,並重新用它們以實現橫向移動和域的完全控制 。(即使啓用了Credential Guard)。

在實際情況下,攻擊者可以重複“服務憑證竊取,修改和重用”的過程,並且攻擊者可以配置惡意服務以自動化該攻擊以迭代步驟。在這種情況下,在一台計算機上具有本地管理員訪問權限的攻擊者可以在幾分鐘內獲得整個域的完全所有權。

 

緩解


Microsoft Credential Guard不會以保護域級用户憑據的方式保護域級服務憑據。 因此,我們必須採取額外的步驟來保護和監控服務憑據的使用。

為了降低服務憑據失竊的風險以及攻擊者橫向移動通過網絡的能力,應該採取以下步驟:

1. 從標準用户中刪除本地管理員權限

2. 儘量在本地服務中少用域賬户,除非必須

3. 在需要時,為服務創建專用的域帳户

4. 刪除服務帳户的所有不必要的權限

5. 通過Windows事件日誌監視對敏感註冊表值的所有權限更改

6. 使用憑證盜竊檢測工具來檢測和阻止竊取LSA Secrets