您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何進行Panda反病毒軟件本地提權漏洞分析,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
我將跟大家討論一個我在Panda反病毒產品中發現的一個安全漏洞(CVE-2019-12042),這是一個本地提權漏洞,該漏洞將允許攻擊者在目標設備上將非特權賬戶提權至SYSTEM。
受影響的產品包括Panda Dome(版本< 18.07.03)、Panda InternetSecurity、Panda Antivirus Pro、PandaGlobal Protection、Panda Gold Protection和舊版本的Panda Antivirus(版本 <= 15.0.4)。
目前,廠商已經在v18.07.03版本中修復了該漏洞。
存在漏洞的系統服務為AgentSvc.exe這個服務可以創建一個全局Section對象和一個對應的全局事件,每當一個進程嘗試向共享內存寫入數據并需要服務進程去處理這些數據時,它們便會發出信號。由于這個過程中的權限驗證機制存在缺陷,因此該漏洞將影響那些允許“Everyone”和非特權用戶修改共享內存和事件的對象。
這個服務會創建一個線程,該線程會無限期等待內存更改事件,并在收到事件信號時解析內存中的內容。當共享內存中的第二個“值”不為零時,它會使用一個指針來調用如下所示的函數,指針指向的地址為列表頭部的值:
typedef struct StdList_Event{ struct StdList_Event* Next; struct StdList_Event* Previous; struct c_string { union { char* pStr; char str[16]; }; unsigned int Length; unsigned intInStructureStringMaxLen; }DipsatcherEventString; //..};
如下圖所示,代碼期望在共享內存中偏移量為2的位置有一個unicode字符串,它會使用這個字符串來初始化一個wstring對象,并將其轉換為ANSI字符串。除此之外,在第50行代碼,使用了"3sa342ZvSfB68aEq"來初始化一個字符串,并將它和攻擊者可控制的ANSI字符串以及一個指針(指向一個輸出字符串對象)傳遞給函數"DecodeAndDecryptData"。
該函數會對這個base64字符串進行解碼,然后使用RC2和密鑰“3sa342ZvSfB68aEq”揭密出結果值。所以,我們向共享內存中寫入的內容必須是經過RC2加密并且使用Base64編碼的值。
當函數返回結果時,解碼后的數據會被轉換為“wstring”對象,而do-while循環會根據分隔符“|”來提取子字符串,并將它們分別插入到列表中,最后將它們以參數進行傳遞。
我們回到線程的主函數,如下所示,代碼會遍歷列表,并將字符串傳遞給Dispatcher.dll中CDispatcher類的InsertEvent方法:
我們對Dispatcher.dll文件中的CDispatcher::InsertEvent方法進行了分析,發現它會向一個CQueue隊列中插入事件字符串:
CDispatcher::Run方法會運行一個單獨的線程來處理這個隊列中的元素:
CRegisterPlugin::ProcessEvent方法會解析攻擊者控制的字符串,查看錯誤調試消息,我們會發現我們面對的是一個開源的JSON解析器:【json-parser】。
既然我們已經知道了這個服務需要我們傳入哪種數據,但我們還需要知道數據的JSON屬性。CDispatcher::Initialize方法會調用CRegisterPlugins::LoadAllPlugins方法來從注冊表中讀取Panda的安裝路徑,然后訪問插件目錄,然后加載其中所有的DLL文件。
其中一個DLL名叫Plugin_Commands.dll,它的功能貌似是執行命令行指令。
由于這些DLL都可以提供錯誤調試消息,這樣我們就可以輕松定位目標方法了。我們也迅速找到了Plugin_Commands.dll中的Run方法:
在這個函數中,我們從輸入數據中找到了目標JSON屬性:
我們還可以從內核調試器中攔截部分JSON消息:
至此,我想看看是否能夠執行硬盤中的某些東西。通過對Run方法的反編譯結果進行分析,我們發現了一個函數可以解析相關的屬性值,并判斷其是否指向的是URL或是磁盤中的文件。這里,我們就可以使用file://URI來執行硬盤中的文件了。
在查找強制屬性時,我們發現至少要提供這兩個值:ExeName和SourcePath:
但是,當我們在設置了這兩個值之后將事件"CmdLineExecute"加入隊列,我們的進程并沒有創建成功。調試之后,我發現“ExeMD5”也是一個強制屬性,它應該包含待運行的可執行程序的有效MD5哈希。
CheckMD5Match函數會動態計算文件哈希,并與我們提供的JSON屬性進行對比。
測試如下JSON數據(RC2+Base64編碼),我們可以看到cmd.exe成功以SYSTEM權限運行了:
{ "CmdLineExecute": { "ExeName":"cmd.exe", "SourcePath":"file://C:\\Windows\\System32", "ExeMD5":"fef8118edf7918d3c795d6ef03800519" }}
當我們嘗試提供自己的可執行程序時,Panda會將其檢測為惡意軟件并刪除之,即使該文件不是惡意軟件。此時,我們可以讓cmd.exe來啟動我們的進程,最終的JSON數據如下所示:
{ "CmdLineExecute": { "ExeName":"cmd.exe", "Parameters": "/c startC:\\Users\\VM\\Desktop\\run_me_as_system.exe", "SourcePath":"file://C:\\Windows\\System32", "ExeMD5":"fef8118edf7918d3c795d6ef03800519" //MD5 hash of CMD.EXE }}
最后的漏洞利用代碼會在目標磁盤中存放一個文件,并計算cmd.exe的MD5哈希,構建JSON數據,對其加密并編碼,最終將其寫入共享內存。
還需要注意的是,這個PoC漏洞利用代碼可以在不需要任何重新編譯操作的情況下在所有的Windows版本中正常工作。
上述內容就是如何進行Panda反病毒軟件本地提權漏洞分析,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。