這篇文章給大家介紹Windows Java Usage Tracker本地提權(quán)漏洞分析是怎樣的,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
創(chuàng)新互聯(lián)公司是一家專(zhuān)業(yè)的成都網(wǎng)站建設(shè)公司,我們專(zhuān)注成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷(xiāo)、企業(yè)網(wǎng)站建設(shè),買(mǎi)鏈接,一元廣告為企業(yè)客戶(hù)提供一站式建站解決方案,能帶給客戶(hù)新的互聯(lián)網(wǎng)理念。從網(wǎng)站結(jié)構(gòu)的規(guī)劃UI設(shè)計(jì)到用戶(hù)體驗(yàn)提高,創(chuàng)新互聯(lián)力求做到盡善盡美。
近期,我們發(fā)現(xiàn)了一個(gè)Java Usage Tracker中的設(shè)計(jì)缺陷,可導(dǎo)致攻擊者創(chuàng)建任意文件,注入指定參數(shù),并實(shí)現(xiàn)本地權(quán)限提升。反之,該漏洞可以用于權(quán)限提升,從而使攻擊者可以訪問(wèn)受漏洞影響系統(tǒng)中的資源,這些資源通常受到保護(hù),或僅限于特定應(yīng)用程序或用戶(hù)才有權(quán)訪問(wèn)。
我們通過(guò)Zero Day Initiative,與Oracle合作修復(fù)了這一漏洞,該漏洞已經(jīng)在Oracle的2018年10月更新中實(shí)現(xiàn)修復(fù)。因此,需要敦促個(gè)人用戶(hù)及企業(yè)盡快更新他們的Java版本。
在本文中,我們將深入研究這一漏洞在Windows上的出現(xiàn)原因、Java Usage Tracker的工作原理以及實(shí)現(xiàn)漏洞利用所必要的條件。
Oracle安全更新公告:https://www.oracle.com/technetwork/security-advisory/cpuoct2018-4428296.html。
在Java中,有一個(gè)名為JavaUsage Tracker的功能,用于跟蹤系統(tǒng)中Java的使用方式。Java Usage Tracker具有以下功能:
1、通過(guò)啟動(dòng)配置參數(shù),記錄有關(guān)Java虛擬機(jī)(JVM)的日志信息。
2、將數(shù)據(jù)轉(zhuǎn)儲(chǔ)到日志文件中,或?qū)⑵渲囟ㄏ虻経DP服務(wù)器。
3、允許Usage Tracker配置中指定自定義屬性的日志值。
Java Usage Tracker的配置文件名稱(chēng)為usagetracker.properties。該文件位于全局默認(rèn)位置,這一位置根據(jù)操作系統(tǒng)的不同而有所不同。例如,Windows的默認(rèn)路徑是%ProgramData%\Oracle\Java\。全局默認(rèn)路徑中的usagetracker文件將跟蹤系統(tǒng)中所有啟動(dòng)的JVM的使用情況。
下圖展示了一個(gè)usagetracker.properties的樣例:
在上圖的第9行中,我們可以看到,JavaUsage Tracker會(huì)將日志信息記錄到文件global_javatracker.log中。以安裝Apache Tomcat(基于Java的開(kāi)源工具)的系統(tǒng)為例,重新啟動(dòng)服務(wù)后,將創(chuàng)建文件global_javatracker.log,并在其中寫(xiě)入Java使用情況跟蹤數(shù)據(jù)。每次,在Tomcat服務(wù)啟動(dòng)時(shí),都會(huì)向該日志文件中寫(xiě)入新的跟蹤信息。
下圖是跟蹤數(shù)據(jù)的示例,請(qǐng)注意這里是如何使用逗號(hào)分隔兩個(gè)不同值的,是在屬性文件(分隔符配置)中定義。
在文件usagetracker.properties中,有兩個(gè)屬性控制Java Usage Tracker的行為,分別是:
oracle.usagetracker.logToFile
oracle.usagetracker.additionalProperties
logTofile屬性允許用戶(hù)選擇系統(tǒng)中的任意路徑來(lái)保存日志文件。需要注意的是,日志文件是由被監(jiān)控的JVM創(chuàng)建的。如果JVM以提升后的權(quán)限運(yùn)行,那么JVM就能夠在系統(tǒng)的任何地方創(chuàng)建該文件,文件的擴(kuò)展名也不受控制(也就是說(shuō),可以創(chuàng)建名為global_javatracker.bat的日志文件)。
盡管logToFile路徑可以任意設(shè)置,但無(wú)法控制文件內(nèi)容。因?yàn)镴VM只會(huì)從現(xiàn)有的數(shù)據(jù)(無(wú)法修改)中寫(xiě)入值。然而,Java Usage Tracker具有從自定義屬性獲取值的特殊功能。 additionalProperties可以包含要跟蹤的任意和其他自定義屬性,如下所示。
如何通過(guò)additionalProperties添加自定義屬性:
重新啟動(dòng)Tomcat服務(wù)后,如何跟蹤數(shù)據(jù)的代碼段:
如上圖所示,該行的末尾附加了一個(gè)帶有null值的已配置跟蹤屬性com.anotherInterestingProperty= null。其值為null,表明該屬性不存在。有兩種方法可以控制Java Usage Tracker的行為:設(shè)置任意日志路徑,或者設(shè)置任意自定義屬性。目前,這個(gè)功能似乎是不能被利用的,但是如果結(jié)合了其他安全漏洞,就能夠被攻擊者利用。
下面,我們?cè)敿?xì)說(shuō)明如何借助自定義屬性實(shí)現(xiàn)漏洞利用。先前配置文件中的第9行會(huì)使得Java Usage Tracker強(qiáng)制創(chuàng)建.bat文件,然后添加自定義屬性ping 172.0.1.1 >。其生成了文件global_javatracker.bat,如下圖所示。
global_javatracker.bat中自定義屬性:
global_javatracker.bat正在被執(zhí)行:
在這里,需要注意附加屬性ping 172.0.1.1 >= null。當(dāng)我們執(zhí)行批處理文件global_javatracker.bat時(shí),會(huì)顯示錯(cuò)誤消息“VM start”無(wú)法識(shí)別。發(fā)生此錯(cuò)誤的原因在于,Java Usage Tracker的屬性文件僅生成一行,并且其分隔符是根據(jù)配置中的com.oracle.usagetracker.separator=, 來(lái)決定的,使用了逗號(hào)作為分隔符。
那么,如果將分隔符更改為“new line”(新的一行),將會(huì)生成完全不同的跟蹤日志。
帶有“new line”分隔符的JavaUsage Tracker:
使用“new line”分隔符后,生成的跟蹤日志:
上圖中的最后一行,包含ping 172.0.1.1 >= null。如果運(yùn)行g(shù)lobal_javatracker.bat,那么就會(huì)導(dǎo)致執(zhí)行ping172.0.1.1> = null命令。但是,由于帶有雙引號(hào),所以該命令無(wú)法識(shí)別。但是,我們還有機(jī)會(huì)執(zhí)行該命令,因?yàn)槊總€(gè)屬性值的雙引號(hào),可以通過(guò)修改另一個(gè)配置com.oracle.usagetracker.quote =”來(lái)實(shí)現(xiàn)替換。
舉例來(lái)說(shuō),我們創(chuàng)建一個(gè)內(nèi)容為空的com.oracle.usagetracker.quote配置,如下圖所示。
內(nèi)容為空的com.oracle.usagetracker.quote:
使用空配置從com.oracle.usagetracker.quote生成的跟蹤日志:
運(yùn)行g(shù)lobal_javatracker.bat,將會(huì)執(zhí)行命令ping 172.0.1.1> = null。如上圖中命令提示符最后的提示所示,創(chuàng)建了一個(gè)“null”文件。
至此,我們可以利用Java Usage Tracker實(shí)現(xiàn)以下操作:
1、 在文件系統(tǒng)的任意位置創(chuàng)建文件。
2、創(chuàng)建腳本文件,盡管我們?cè)谑纠袆?chuàng)建了批處理文件,但實(shí)際上也可用于創(chuàng)建其他類(lèi)型的文件。
3、注入任意命令(或與腳本文件相關(guān)的任何其他文本)。
攻擊者可以在系統(tǒng)的任意位置執(zhí)行或創(chuàng)建上述內(nèi)容,或可編寫(xiě)腳本的文件。但是,如果攻擊者想要成功利用這個(gè)漏洞做一些事情,還需要兩個(gè)條件:
1、需要在關(guān)鍵位置(比如:自動(dòng)啟動(dòng)腳本)中創(chuàng)建惡意文件。
2、需要有權(quán)訪問(wèn)關(guān)鍵位置,應(yīng)該由高權(quán)限的進(jìn)程創(chuàng)建惡意文件。
實(shí)際上,這兩個(gè)條件都可以實(shí)現(xiàn)。舉例來(lái)說(shuō),可以為非特權(quán)用戶(hù)創(chuàng)建Java UsageTracker配置(usagetracker.properties),具有更高特權(quán)的進(jìn)程負(fù)責(zé)創(chuàng)建惡意日志文件(Usage Tracker日志)。
如果保存到全局配置路徑中(例如Windows的%ProgramData%\Oracle\Java),在系統(tǒng)啟動(dòng)JVM時(shí),就會(huì)讀取Java Usage Tracker日志文件。接下來(lái),我們?cè)僖阅J(rèn)Tomcat安裝為例。在安裝Tomcat,并使用全局usagetracker.properties之后,跟蹤日志會(huì)在Tomcat重新啟動(dòng)后創(chuàng)建(如下圖所示)。實(shí)際上,該文件是由Tomcat服務(wù)創(chuàng)建的,默認(rèn)情況下會(huì)由System運(yùn)行。
目前,Tomcat服務(wù)已經(jīng)由System運(yùn)行,因此就可以在任意位置創(chuàng)建惡意文件global_javatracker.bat。但是,配置文件usagetracker.properties還必須由非特權(quán)用戶(hù)創(chuàng)建。
安裝Tomcat后,創(chuàng)建的跟蹤日志:
Tomcat創(chuàng)建的日志文件:
Java Usage Tracker的全局配置文件,都創(chuàng)建在默認(rèn)路徑%ProgramData%\Oracle\Java\中。此路徑中的內(nèi)容,一部分是在Java安裝期間創(chuàng)建的,也有一部分是在執(zhí)行Java命令時(shí)創(chuàng)建的(例如java –c)。
默認(rèn)情況下,%ProgramData%路徑只允許系統(tǒng)的“Users”創(chuàng)建文件。當(dāng)Oracle或Java路徑被建立時(shí),也會(huì)繼承上級(jí)路徑的默認(rèn)權(quán)限。下圖是%ProgramData%\Oracle\Java\權(quán)限的截圖:
我們舉例來(lái)進(jìn)一步說(shuō)明這個(gè)漏洞。具有低權(quán)限的用戶(hù),可以創(chuàng)建惡意配置文件usagetracker.properties。由于Tomcat服務(wù)以“System”的權(quán)限運(yùn)行,因此它可以在系統(tǒng)的任何位置創(chuàng)建批處理文件。在批處理文件中,可以包括將腳本寫(xiě)入到啟動(dòng)項(xiàng)位置之類(lèi)的例程。
目前,攻擊者可以通過(guò)多種方式,濫用Java Usage Tracker的功能來(lái)實(shí)現(xiàn)權(quán)限提升。我們的研究?jī)H在Windows環(huán)境中進(jìn)行了測(cè)試,但其他操作系統(tǒng)也可能受到該漏洞的影響。
攻擊者為實(shí)現(xiàn)權(quán)限提升,可能會(huì)組合利用一些漏洞,這些漏洞包括:
1、任意文件類(lèi)型創(chuàng)建:該漏洞可以通過(guò)oracle.usagetracker.logToFile路徑實(shí)現(xiàn)。例如,可以創(chuàng)建一些類(lèi)似于批處理文件的腳本。
2、參數(shù)注入:通過(guò)oracle.usagetracker.additionalProperties配置來(lái)實(shí)現(xiàn)。
3、本地權(quán)限提升:通過(guò)%ProgramData%/Oracle/Java中的弱權(quán)限來(lái)實(shí)現(xiàn)。
關(guān)于Windows Java Usage Tracker本地提權(quán)漏洞分析是怎樣的就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。