前沿拓展:
reportqueue
念德評笑校C:ProgramDataMicrosoftWindows況門也齊你重引費(fèi)敵WERRepor毛苦達(dá)草角獨(dú)tQueue里的文件主要用于系統(tǒng)存放自動生成的系統(tǒng)報告,是可以刪除的。
ReportQueue里的文件可以存放系統(tǒng)自動生成的報告,屬于隊(duì)列查詢報告文件。雖然隊(duì)列查詢報告文件可以記錄系統(tǒng)在運(yùn)行中出現(xiàn)的問題,但這些記錄也屬于垃圾文件,所以刪除它對系統(tǒng)沒有影響。
而且,里面的文件由于系統(tǒng)的長期使用,它會記錄聲但爭部改卷互植大量垃圾內(nèi)容,日積月累,會非常占電腦C盤空間。在刪除這些文件后,下次系統(tǒng)依然會再次自動生成這些文件。所以,為了保持C盤有較大空間,應(yīng)該經(jīng)常對它進(jìn)行刪除。
擴(kuò)展資料
C盤里的其他占內(nèi)存的可刪除的垃圾文件:
1、系統(tǒng)產(chǎn)生的臨時文件
Windows在秋我安裝和使用過程中產(chǎn)生的垃圾包括臨時文件(如*.tmp、*._mp等)、臨時備份文件(如*.bak、*.old、*.syd等)、臨時幫助文件(*.gid)都是沒初求進(jìn)目有用的,都可以通過系統(tǒng)的“查找”功能管理器中,選擇“工具/文件夾選項(xiàng)”下“文件類型”標(biāo)簽,找到與“C:Program FilesKuroKuro.e頭xe”相關(guān)聯(lián)的文件類型,再按Del鍵刪除。
在2018年12月,一個名為“SandboxEscaper”的黑客公開了一個Windows Error Reporting(WER)組件中的0day漏洞。而根據(jù)他所提供的信息,我又發(fā)現(xiàn)了另一個0day漏洞,可被用于非法提升系統(tǒng)權(quán)限。根據(jù)微軟方面的說法,已有攻擊者利用這個漏洞進(jìn)行攻擊,但直到2019年5月該漏洞補(bǔ)丁才發(fā)布。
那么,這個漏洞的原理是啥呢?
微軟的又一次失誤
Windows Error Reporting工具是一個靈活的基于**的反饋架構(gòu),旨在收集有關(guān)Windows的軟硬件錯誤的信息,并將這些信息報告給Microsoft,好為用戶提供可用的解決方案。
例如,當(dāng)Windows系統(tǒng)崩潰或發(fā)生故障,則會生成一個錯誤報告并存儲在WER報告隊(duì)列目錄下(C:ProgramDataMicrosoftWindowsWERReportQueue),其中每個報告都有自己的子目錄和一個存儲相關(guān)元數(shù)據(jù)的名為report.wer的INI文件。為了使所有進(jìn)程都能上報系統(tǒng)錯誤信息,所有用戶都可以對reportQueue目錄進(jìn)行寫入,具體如下所示:
生成報告后,接下來就是將其發(fā)送給Microsoft以進(jìn)行進(jìn)一步分析。此交互流程可以通過多種方式觸發(fā),其中一種就是使用名為Windows Error ReportingQueueReporting的計劃任務(wù)。而從安全角度來看,此計劃任務(wù)很有趣,因?yàn)椋?/p>
它以system權(quán)限運(yùn)行,這就非常敏感了。它可以根據(jù)需求觸發(fā)。它涉及了一個exe文件wermgr.exe,以及一個參數(shù)-upload
在計劃任務(wù)觸發(fā)后,wermgr.exe與等待處理的報告文件和目錄進(jìn)行交互。它會讀取、解析這些文件,將它們**到其他目錄,或是直接刪除。但最重要的是,現(xiàn)在一個高權(quán)限的exe會處理任何用戶都可以寫入的文件。如果這中間流程存在問題,可能會導(dǎo)致一些嚴(yán)重的安全漏洞。
濫用文件鏈接
Windows支持不同類型的文件鏈接,它們可將某處的文件或目錄指向其他的文件和目錄,簡單來說,就是會將用戶重定向到目標(biāo)路徑。從安全的角度來看,文件鏈接很容易造成權(quán)限漏洞,因?yàn)橛脩艨梢詫⒛承┪募?span>鏈接到他們沒有寫權(quán)限的文件或目錄。
下面的示例描述了不具有kernel32.dll寫入權(quán)限的用戶是如何創(chuàng)建c:tempDirx.dll和C:WindowsSystem32kernel32.dll之間的鏈接的。這樣有可能使黑客可以讀、寫甚至刪除敏感的系統(tǒng)文件。
漏洞信息
簡而言之,黑客可以利用WER的system權(quán)限去更改任意文件。通過上述文件的鏈接,將WER目錄中的文件鏈接到計算機(jī)上其他目錄的文件,從而借助計劃任務(wù)的system權(quán)限幫助自己提升權(quán)限。
以下是完整的漏洞利用場景:
Step 1:wermger.exe逐個解析報告目錄中的所有文件,并將其提交給Microsoft。Step 2:當(dāng)wermger.exe檢測到名為Report.wer的被損壞的INI文件時,會進(jìn)行一系列處理,最終會將其刪除。但在刪除前,它會改變文件的訪問控制權(quán)限,以方便將其刪除。漏洞利用點(diǎn):黑客主要是利用wermger.exe讀取文件的訪問控制權(quán)限和改變其權(quán)限之間的短暫機(jī)會。如果攻擊者創(chuàng)建一個錯誤報告與系統(tǒng)上其他文件之間的鏈接,則在修改訪問控制的權(quán)限后,wermgr.exe就會錯誤地修改其他文件的權(quán)限。Step 1:
命令wermgr.exe -upload所做的第一件事就是調(diào)用wermgr!DoCoreUpload函數(shù),它會列出reportQueue下的所有子目錄,并讀取錯誤報告將其提交給Microsoft:
int64 DoCoreUpload(/* … */) {
/* … */
Ret = WerpSubmitReportFromStore(ReportPath, /* … */);
if (Ret >= 0) {
/* Report successfully uploaded */
} else {
if (Ret == ERROR_FILE_CORRUPT) {
DeleteCorruptedReportFromStore(ReportPath);
}
}
}
Step 2:
當(dāng)wermgr.exe遇到已損壞的名為report.wer的INI文件時,它會更改其訪問控制權(quán)限以便稍后刪除它。更具體地說:
1.第一,wermgr!DeleteCorruptedReportFromStore會列出子目錄下的所有文件;
2.接著,wermgr!PreparePathForDeletion會修改每個文件的權(quán)限。這就是漏洞原理所在!因?yàn)榇撕瘮?shù)會使用kernel32!GetFileSecurity讀取文件的安全描述符,并利用kernel32!SetFileSecurity將其設(shè)置為可刪除。
int64 PreparePathForDeletion(wchar_t* FileName) {
PSECURITY_DEsc riptOR SecurityDesc riptor = NULL;
DWORD BytesRead = 0;
PDACL Dacl = NULL;
/* … */
if ( !GetFileSecurity(FileName,
DACL_SECURITY_INFORMATION,
NULL, 0, &BytesRead) ) {
/* … */
return;
}
SecurityDesc riptor = new BYTE[BytesRead];
if ( !GetFileSecurity(FileName,
DACL_SECURITY_INFORMATION,
SecurityDesc riptor,
BytesRead, &BytesRead) ) {
/* … */
return;
}
if ( GetSecurityDesc riptorDacl(SecurityDesc riptor,
&DaclPresent,
&Dacl, &DaclDefaulted) )
{
/* … */
HANDLE TokenHandle = NULL;
PACL NewAcl = NULL;
EXPLICIT_ACCESS ExplicitAccess = {0};
/* … */
LPVOID UserName = new BYTE[/* … */];
GetTokenInformation(TokenHandle, TokenUser,
UserName, &BytesRead);
ExplicitAccess.Trustee.ptstrName = UserName;
ExplicitAccess.Trustee.TrusteeType = TRUSTEE_IS_NAME;
ExplicitAccess.grfAcces**ode = GRANT_ACCESS;
ExplicitAccess.grfAccessPermissions = DELETE | /* … */;
/* … */
SetEntriesInAcl(1, &ExplicitAccess, Dacl, &NewAcl);
InitializeSecurityDesc riptor(&SecurityDesc riptor, 1);
SetSecurityDesc riptorDacl(&SecurityDesc riptor, 1, NewAcl, 0);
SetFileSecurity(FilePath, DACL_SECURITY_INFORMATION,
&SecurityDesc riptor);
}
}
不過,在特定的時間創(chuàng)建文件鏈接較為困難,這可能需要一次又一次的嘗試。攻擊者在實(shí)際**作中很可能以可執(zhí)行文件(dll、exe或腳本)為目標(biāo),嘗試使用惡意文件覆蓋它們,最后等待系統(tǒng)自動執(zhí)行。
本文由白帽匯整理并翻譯,不代表白帽匯任何觀點(diǎn)和立場
來源:https://nosec.org/home/detail/2742.html
原文:https://unit42.paloaltonetworks.com/tale-of-a-windows-error-reporting-zero-day-cve-2019-0863/
白帽匯從事信息安全,專注于安全大數(shù)據(jù)、企業(yè)威脅情報。
公司產(chǎn)品:FOFA-網(wǎng)絡(luò)空間安全搜索引擎、FOEYE-網(wǎng)絡(luò)空間檢索系統(tǒng)、NOSEC-安全訊息平臺。
為您提供:網(wǎng)絡(luò)空間測繪、企業(yè)資產(chǎn)收集、企業(yè)威脅情報、應(yīng)急響應(yīng)服務(wù)。
拓展知識:
前沿拓展:
reportqueue
念德評笑校C:ProgramDataMicrosoftWindows況門也齊你重引費(fèi)敵WERRepor毛苦達(dá)草角獨(dú)tQueue里的文件主要用于系統(tǒng)存放自動生成的系統(tǒng)報告,是可以刪除的。
ReportQueue里的文件可以存放系統(tǒng)自動生成的報告,屬于隊(duì)列查詢報告文件。雖然隊(duì)列查詢報告文件可以記錄系統(tǒng)在運(yùn)行中出現(xiàn)的問題,但這些記錄也屬于垃圾文件,所以刪除它對系統(tǒng)沒有影響。
而且,里面的文件由于系統(tǒng)的長期使用,它會記錄聲但爭部改卷互植大量垃圾內(nèi)容,日積月累,會非常占電腦C盤空間。在刪除這些文件后,下次系統(tǒng)依然會再次自動生成這些文件。所以,為了保持C盤有較大空間,應(yīng)該經(jīng)常對它進(jìn)行刪除。
擴(kuò)展資料
C盤里的其他占內(nèi)存的可刪除的垃圾文件:
1、系統(tǒng)產(chǎn)生的臨時文件
Windows在秋我安裝和使用過程中產(chǎn)生的垃圾包括臨時文件(如*.tmp、*._mp等)、臨時備份文件(如*.bak、*.old、*.syd等)、臨時幫助文件(*.gid)都是沒初求進(jìn)目有用的,都可以通過系統(tǒng)的“查找”功能管理器中,選擇“工具/文件夾選項(xiàng)”下“文件類型”標(biāo)簽,找到與“C:Program FilesKuroKuro.e頭xe”相關(guān)聯(lián)的文件類型,再按Del鍵刪除。
在2018年12月,一個名為“SandboxEscaper”的黑客公開了一個Windows Error Reporting(WER)組件中的0day漏洞。而根據(jù)他所提供的信息,我又發(fā)現(xiàn)了另一個0day漏洞,可被用于非法提升系統(tǒng)權(quán)限。根據(jù)微軟方面的說法,已有攻擊者利用這個漏洞進(jìn)行攻擊,但直到2019年5月該漏洞補(bǔ)丁才發(fā)布。
那么,這個漏洞的原理是啥呢?
微軟的又一次失誤
Windows Error Reporting工具是一個靈活的基于**的反饋架構(gòu),旨在收集有關(guān)Windows的軟硬件錯誤的信息,并將這些信息報告給Microsoft,好為用戶提供可用的解決方案。
例如,當(dāng)Windows系統(tǒng)崩潰或發(fā)生故障,則會生成一個錯誤報告并存儲在WER報告隊(duì)列目錄下(C:ProgramDataMicrosoftWindowsWERReportQueue),其中每個報告都有自己的子目錄和一個存儲相關(guān)元數(shù)據(jù)的名為report.wer的INI文件。為了使所有進(jìn)程都能上報系統(tǒng)錯誤信息,所有用戶都可以對reportQueue目錄進(jìn)行寫入,具體如下所示:
生成報告后,接下來就是將其發(fā)送給Microsoft以進(jìn)行進(jìn)一步分析。此交互流程可以通過多種方式觸發(fā),其中一種就是使用名為Windows Error ReportingQueueReporting的計劃任務(wù)。而從安全角度來看,此計劃任務(wù)很有趣,因?yàn)椋?/p>
它以system權(quán)限運(yùn)行,這就非常敏感了。它可以根據(jù)需求觸發(fā)。它涉及了一個exe文件wermgr.exe,以及一個參數(shù)-upload
在計劃任務(wù)觸發(fā)后,wermgr.exe與等待處理的報告文件和目錄進(jìn)行交互。它會讀取、解析這些文件,將它們**到其他目錄,或是直接刪除。但最重要的是,現(xiàn)在一個高權(quán)限的exe會處理任何用戶都可以寫入的文件。如果這中間流程存在問題,可能會導(dǎo)致一些嚴(yán)重的安全漏洞。
濫用文件鏈接
Windows支持不同類型的文件鏈接,它們可將某處的文件或目錄指向其他的文件和目錄,簡單來說,就是會將用戶重定向到目標(biāo)路徑。從安全的角度來看,文件鏈接很容易造成權(quán)限漏洞,因?yàn)橛脩艨梢詫⒛承┪募?span>鏈接到他們沒有寫權(quán)限的文件或目錄。
下面的示例描述了不具有kernel32.dll寫入權(quán)限的用戶是如何創(chuàng)建c:tempDirx.dll和C:WindowsSystem32kernel32.dll之間的鏈接的。這樣有可能使黑客可以讀、寫甚至刪除敏感的系統(tǒng)文件。
漏洞信息
簡而言之,黑客可以利用WER的system權(quán)限去更改任意文件。通過上述文件的鏈接,將WER目錄中的文件鏈接到計算機(jī)上其他目錄的文件,從而借助計劃任務(wù)的system權(quán)限幫助自己提升權(quán)限。
以下是完整的漏洞利用場景:
Step 1:wermger.exe逐個解析報告目錄中的所有文件,并將其提交給Microsoft。Step 2:當(dāng)wermger.exe檢測到名為Report.wer的被損壞的INI文件時,會進(jìn)行一系列處理,最終會將其刪除。但在刪除前,它會改變文件的訪問控制權(quán)限,以方便將其刪除。漏洞利用點(diǎn):黑客主要是利用wermger.exe讀取文件的訪問控制權(quán)限和改變其權(quán)限之間的短暫機(jī)會。如果攻擊者創(chuàng)建一個錯誤報告與系統(tǒng)上其他文件之間的鏈接,則在修改訪問控制的權(quán)限后,wermgr.exe就會錯誤地修改其他文件的權(quán)限。Step 1:
命令wermgr.exe -upload所做的第一件事就是調(diào)用wermgr!DoCoreUpload函數(shù),它會列出reportQueue下的所有子目錄,并讀取錯誤報告將其提交給Microsoft:
int64 DoCoreUpload(/* … */) {
/* … */
Ret = WerpSubmitReportFromStore(ReportPath, /* … */);
if (Ret >= 0) {
/* Report successfully uploaded */
} else {
if (Ret == ERROR_FILE_CORRUPT) {
DeleteCorruptedReportFromStore(ReportPath);
}
}
}
Step 2:
當(dāng)wermgr.exe遇到已損壞的名為report.wer的INI文件時,它會更改其訪問控制權(quán)限以便稍后刪除它。更具體地說:
1.第一,wermgr!DeleteCorruptedReportFromStore會列出子目錄下的所有文件;
2.接著,wermgr!PreparePathForDeletion會修改每個文件的權(quán)限。這就是漏洞原理所在!因?yàn)榇撕瘮?shù)會使用kernel32!GetFileSecurity讀取文件的安全描述符,并利用kernel32!SetFileSecurity將其設(shè)置為可刪除。
int64 PreparePathForDeletion(wchar_t* FileName) {
PSECURITY_DEsc riptOR SecurityDesc riptor = NULL;
DWORD BytesRead = 0;
PDACL Dacl = NULL;
/* … */
if ( !GetFileSecurity(FileName,
DACL_SECURITY_INFORMATION,
NULL, 0, &BytesRead) ) {
/* … */
return;
}
SecurityDesc riptor = new BYTE[BytesRead];
if ( !GetFileSecurity(FileName,
DACL_SECURITY_INFORMATION,
SecurityDesc riptor,
BytesRead, &BytesRead) ) {
/* … */
return;
}
if ( GetSecurityDesc riptorDacl(SecurityDesc riptor,
&DaclPresent,
&Dacl, &DaclDefaulted) )
{
/* … */
HANDLE TokenHandle = NULL;
PACL NewAcl = NULL;
EXPLICIT_ACCESS ExplicitAccess = {0};
/* … */
LPVOID UserName = new BYTE[/* … */];
GetTokenInformation(TokenHandle, TokenUser,
UserName, &BytesRead);
ExplicitAccess.Trustee.ptstrName = UserName;
ExplicitAccess.Trustee.TrusteeType = TRUSTEE_IS_NAME;
ExplicitAccess.grfAcces**ode = GRANT_ACCESS;
ExplicitAccess.grfAccessPermissions = DELETE | /* … */;
/* … */
SetEntriesInAcl(1, &ExplicitAccess, Dacl, &NewAcl);
InitializeSecurityDesc riptor(&SecurityDesc riptor, 1);
SetSecurityDesc riptorDacl(&SecurityDesc riptor, 1, NewAcl, 0);
SetFileSecurity(FilePath, DACL_SECURITY_INFORMATION,
&SecurityDesc riptor);
}
}
不過,在特定的時間創(chuàng)建文件鏈接較為困難,這可能需要一次又一次的嘗試。攻擊者在實(shí)際**作中很可能以可執(zhí)行文件(dll、exe或腳本)為目標(biāo),嘗試使用惡意文件覆蓋它們,最后等待系統(tǒng)自動執(zhí)行。
本文由白帽匯整理并翻譯,不代表白帽匯任何觀點(diǎn)和立場
來源:https://nosec.org/home/detail/2742.html
原文:https://unit42.paloaltonetworks.com/tale-of-a-windows-error-reporting-zero-day-cve-2019-0863/
白帽匯從事信息安全,專注于安全大數(shù)據(jù)、企業(yè)威脅情報。
公司產(chǎn)品:FOFA-網(wǎng)絡(luò)空間安全搜索引擎、FOEYE-網(wǎng)絡(luò)空間檢索系統(tǒng)、NOSEC-安全訊息平臺。
為您提供:網(wǎng)絡(luò)空間測繪、企業(yè)資產(chǎn)收集、企業(yè)威脅情報、應(yīng)急響應(yīng)服務(wù)。
拓展知識:
原創(chuàng)文章,作者:九賢生活小編,如若轉(zhuǎn)載,請注明出處:http:///32034.html