您好,登錄后才能下訂單哦!
NVIDIA任意文件寫入命令執行的分析,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
在這篇文章中,我們將對NVIDIA GeForce Experience(GFE)中的任意文件寫入漏洞(CVE-2019-5674)進行深入分析。大家都知道,很多使用了N卡的設備在安裝NVIDIA GeForce產品時默認都會安裝NVIDIA GeForce Experience(GFE),由于存在這個漏洞,攻擊者將能夠強制讓應用程序以特權用戶身份在目標系統中寫入任意文件。簡單來說,你可以通過重寫關鍵系統文件來讓主機無法正常服務,而且你甚至還可以控制、利用和竊取目標系統中的數據。
由于GFE在寫入日志文件時使用的是SYSTEM用戶權限,這種不安全的權限設置將導致任意系統文件均可被重寫。除此之外,日志文件中的數據也是用戶可控制的,攻擊者將可以向日志文件中注入控制命令,然后將其存儲為batch文件來執行并實現提權。
根據NVIDIA官網的介紹,GeForce Experience GFE不僅可以更新升級顯卡驅動,并優化你的游戲設置,而且還可以截圖,或跟朋友分享視頻流文件。更重要的是,它可以給N卡用戶提供更多的附加功能。
當時在分析NVIDIA服務和應用程序時,我先打開的是進程監控軟件(Procmon),分析后我發現,有兩個跟NVIDIA有關的進程可能會有搞頭:nvcontainer.exe和NVDisplay.Container.exe。接下來,我在Procmon中添加了一個過濾器來查看*container.exe會向那些文件寫入數據。
在過濾器的幫助下,我們只需要關注“寫入文件”的操作即可,大家可以從下圖中看到,這些進程會以“NT AUTHORITY\SYSTEM”來向“C:\ProgramData”目錄中寫入多個日志文件(其中還包括普通用戶可以修改的文件)。
檢查這些文件的權限之后,我們可以看到“Everyone”組中的用戶擁有對這些文件的完整控制權。
所以,SYSTEM組和Everyone組中的成員均可隨意控制這些文件,包括創建跟其他系統文件的硬鏈接或符號鏈接。如果攻擊者不能以普通用戶身份來修改某個系統文件,那么在創建了跟該文件相關聯的鏈接之后,SYSTEM進程將搜索這個鏈接(本身就是日志文件,默認時可寫入的),并允許向該文件寫入數據。受影響的文件將包括關鍵系統文件,而這些文件一旦被非法修改,將導致應用程序或操作系統崩潰。
在利用該漏洞前,我們需要使用symboliclink-testing-tools來創建符號鏈接和硬鏈接,因為該工具可以幫我們以普通用戶權限創建系統文件的鏈接。在測試過程中,我還使用了Createsymlink工具并創建了一個臨時符號鏈接:“C:\ProgramData\NVIDIACorporation\nvstapisvr\nvstapisvr.log”=>“C:\windows\test.file”,這個test.file文件只有管理員權限可寫。為了確保符號鏈接創建成功,我們需要讓“C:\ProgramData\NVIDIACorporation\nvstapisvr\”目錄為空,如果該目錄不為空,則會看到如下圖所示的錯誤信息:
接下來,當NVIDIA特權進程向日志文件“C:\ProgramData\NVIDIACorporation\nvstapisvr\nvstapisvr.log”中寫入數據時,該進程實際上是在向“C:\windows\test.file”寫入數據。
這就表明,該漏洞可以允許我們重寫任意系統文件。但這樣還遠遠不夠,因為我們還無法讓某些文件崩潰或讓系統拒絕服務。這是因為特定日志文件中的數據目前仍是不可控制的,它只會寫入所有本該記錄的日志數據。
因此,我們需要控制寫入到日志文件中的數據。經過分析之后,我發現“C:\ProgramData\NVIDIACorporation\nvstreamsvc\nvstreamsvcCurrent.log”中包含一些有趣的字符串,而且當GeForce Experience的“GameStream”開關打開或關閉時,“C:\ProgramData\NVIDIA Corporation\NvStreamSrv\settings.txt”中包含的某些變量會寫入到nvstreamsvcCurren日志文件中。
點擊這個開關,可以讓“C:\ProgramData\NVIDIACorporation\nvstreamsvc\nvstreamsvcCurrent.log”記錄settings.txt文件中包含的URL地址:
接下來,我嘗試向這些變量值后面添加一些命令來修改日志文件:
果然成功了:
雖然這里有一堆其他的日志數據,但我們注入的命令最終還是會在.bat文件中執行的。再加上現在我可以向任意目錄中寫入文件,那么我就可以向存在漏洞的文件中注入有效命令,然后把文件寫入到系統啟動目錄中,然后執行注入的命令,最終實現提權。
但這里還是有一個問題,也就是創建符號鏈接的目錄必須為空,但現在的目錄包含NVIDIA服務需要使用的文件,而且我還刪不掉。但是,這個問題進入安全模式就解決了。
總結一下:
1、將需要執行的命令添加到“C:\ProgramData\NVIDIACorporation\NvStreamSrv\settings.txt”;
2、 清空“C:\ProgramData\NVIDIACorporation\nvstreamsvc\”目錄;
3、 創建符號鏈接:“C:\ProgramData\NVIDIACorporation\nvstreamsvc\nvstreamsvcCurrent.log”=>“C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\cmd.bat”
創建符號鏈接:
切換“GameStream”服務的開關,然后系統啟動目錄中就會有我們的cmd.bat文件了:
NVIDIA本身帶有很多batch文件,這些文件可以在“C:\Windows”目錄中找到:
當“NVIDIA Display Container”或“NVIDIA TelemetryContainer”服務崩潰了兩次以上時,這些文件就會以SYSTEM權限運行,這也是NVIDIA服務的恢復機制:
這些文件同樣是我們可以利用的,我們只需要讓NVIDIA服務崩潰三次,就可以強制讓BAT文件執行,并實現提權。
GeForce Experience <= 3.18
看完上述內容,你們掌握NVIDIA任意文件寫入命令執行的分析的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。