Symanctec Management Agent(Altiris)許可權提升漏洞(CVE-2018-5240)
一、前言
在最近一次紅隊練習中,我們發現最新版的Symantec Management Agent(Altiris)中存在一個漏洞,可以用來提升許可權。
當Altiris本地代理執行資產情況掃描時(比如掃描軟體資產情況),掃描結束後這個 SYSTEM
許可權的服務會重新分配 NSI
以及 Outbox
資料夾的許可權:
C:Program FilesAltirisInventoryOutbox C:Program FilesAltirisInventoryNSI
結果就是 Everyone
組可以獲得這兩個目錄的完全控制權,這樣任何使用者都可以建立指向其他目錄的連結(junction)。因此,目標目錄就會被分配 Everyone
許可權,並且目錄下的每個檔案或者資料夾都會被強制整合該許可權。
如果主機上安裝了Symantec Management Agent v7.6、v8.0或者v8.1 RU7產品,那麼低許可權使用者就可以利用該漏洞來提升許可權。
二、漏洞發現及分析過程
在執行紅隊任務時,我們通常會在某臺主機上看到已安裝的各種型別的第三方端點軟體。這類軟體通常值得仔細研究,因為它們有可能成為當前主機甚至是整個環境的突破口。
在端點管理軟體方面,我們經常能看到由Symantec釋出的Altiris的身影。這款軟體是一個端點管理框架,使用方可以利用該框架來集中管理單位資產,確保所有系統已應用最新補丁,也可以用來安裝其他軟體、根據使用者的角色或組來更改配置,也支援整個單位的資產註冊。
我們測試的版本為7.6版,如下圖所示。根據Symantec在2018年6月12日的描述,安裝修復補丁之前的所有版本都存在這個問題。
我們注意到Altiris檔案結構中目錄的許可權為 Everyone – Full Control
。這些資料夾似乎包含一些無害的內容,比如掃描配置檔案以及XML檔案,我們認為這些檔案來與資產掃描或者最近任務的輸出結果有關。我們使用了一行非常簡單的Shell/">PowerShell命令找到了這些目錄及檔案的許可權,這些PowerShell語句都可以幫助我們使用Windows目標主機上的工具來稽核目標系統的ACL情況。典型的命令如下所示(參考 ofollow,noindex" target="_blank">Github 上程式碼):
Get-ChildItem C: -Recurse -ErrorAction SilentlyContinue | ForEach-Object {try {Get-Acl -Path $_.FullName | Select-Object pschildname,pspath,accesstostring} catch{}}|Export-Csv C:tempacl.csv -NoTypeInformation
檢視這些目錄的時間戳資訊後,我們發現這些資料夾每天有一次活動記錄。根據使用方的配置情況以及資產管理的需求,這些資料夾每天的活躍次數可能會更多。
從現在開始事情變得有趣起來。具備 Everyone – Full Control
許可權的資料夾的確非常有趣,但有時候我們頗費周折,最後可能會一無所獲。儘管如此,我們還是需要邁出第一步。
值得一提的是,發現這個情況後,我們第一時間翻閱了Cylance之前披露的一個 漏洞 (感謝Ryan Hanson的精彩分析),想確定之前的攻擊方法能否適用於這種情況。
我們發現 NSI
目錄的許可權情況如下圖所示,這些許可權與 Outbox
目錄的許可權一致:
隨後我們嘗試使用James Forshaw的 symboliclink-testing-tools 工具將該目錄重定向到另一個位置,建立另一個目錄的掛載點,判斷這些檔案是否會成功寫入,事實證明的確如此。這裡我們也可以選擇使用 systernals 中的 junction
工具。 junction
工具的唯一問題在於它要求指定的源目錄不存在,而這裡源目錄已經存在並且具備 Everyone
許可權。源目錄已存在的操作過程如下圖所示:
如果我們刪掉了這個目錄,就難以復現我們攻擊所需的這些許可權。James Forshaw的工具集可以幫助我們利用已存在的目錄,如下圖所示:
另一款工具也能用於這種攻擊場景:Windows自帶的 mklink.exe
工具,但我們需要高許可權才能使用該工具,並不滿足當前場景(現在我們的目的就是提升許可權)。
為了徹底澄清哪個程序會覆蓋這些許可權,我們上傳了 sysinternals 的Process Monitor工具,觀察後臺的具體工作流程。從結果中我們可以看到, AxXNSAgent.exe
會給所有檔案及目錄設定DACL策略。
三、武器化
那麼現在我們如何將該漏洞武器化?為了利用這個漏洞,我們可以選擇使用多種方法,但最簡單的一種方法就是嘗試去覆蓋Altiris的根目錄( C:\Program Files\Altiris\Alritis Agent\
)許可權,這樣我們就能修改該服務對應的程式檔案: AeNXSAgent.exe
,該程式正常情況下會以 SYSTEM
賬戶許可權執行。
在修改掛載點覆蓋許可權之前, Altiris Agent
目錄以及 AeNXSAgent.exe
檔案的許可權如下圖所示:
接下來我們需要創造一個掛載點,將其指向 Altiris Agent
目錄。需要注意的是,源目錄必須為空才能進行重定向,由於我們擁有每個檔案的全部許可權,因此這對我們來說非常簡單。我們可以使用James Forshaw開發的 symboliclink-testing-tools 工具來建立掛載點並驗證是否建立成功。
然後我們需要等待下次掃描。第二天早上起來掃描已結束,結果如下圖所示。正如我們所預期的,現在根目錄以及所有子項都已具備 Everyone – Full Control
許可權,其中就包括 AeNXSAgent.exe
。
一旦我們完全控制了 AeXNSAgent.exe
,我們就可以替換這個檔案,重啟主機以獲取 SYSTEM
許可權。我們要注意到一點,利用符號連結來實現許可權提升是一種非常普遍的現象,James Forshaw已經發現了20多個案例,大家可訪問 此處 獲取具體列表。
四、總結
該漏洞影響所有版本的Altiris Management Agent(包括v7.6、8.0以及8.1 RU7在內)。我們強烈推薦使用者立即安裝官方補丁。
如果大家對此類漏洞的利用(不管在執行時或者其他狀態)有更好意見或者建議,歡迎與社群共享。