歡迎來到 黑吧安全網 聚焦網絡安全前沿資訊,精華內容,交流技術心得!

詳解Windows滲透測試工具Mimikatz的內核驅動

來源:本站整理 作者:佚名 時間:2020-01-28 TAG: 我要投稿

一、概述
Mimikatz通過其中包含的Mimidrv驅動程序,提供了利用內核模式的功能。Mimidrv是已經簽名的Windows驅動模型(WDM)內核模式軟件驅動程序,在相關命令前加上感嘆號(!)即可與標準Mimikatz可執行文件共同使用。Mimidrv沒有相應文檔,并且很少被人使用,但它卻提供了一個非常值得關注的方式,讓我們可以在ring 0執行一些操作。
本文詳細分析Mimidrv提供的功能,提出了一些可供大家參考的文檔,同時向不太了解內核的讀者介紹一些核心概念,最后將提出用于緩解基于驅動的威脅的防范建議。
二、為什么要使用Mimidrv?
簡而言之,擁有了內核就相當于擁有了一切。實際上,一些Windows功能往往無法從用戶模式調用,例如修改正在運行進程的屬性,或直接與其它已加載的驅動程序進行交互等等。而驅動程序為我們提供了一種通過用戶模式應用程序來調用這些函數的方法,我們也將在本文的后面部分進行深入探討。
三、加載Mimidrv
要使用Mimikatz驅動程序,第一步可以使用命令!+,該命令會從用戶模式啟動驅動程序,并請求為當前令牌分配SeLoadDriverPrivilege。

Mimikatz首先檢查驅動程序在當前工作目錄中是否存在,如果找到磁盤上的驅動程序,則開始創建服務。服務的創建是通過服務控制管理器(SCM)API函數來完成的。具體而言,advapi32!ServiceCreate將用于注冊具有以下屬性的服務:
CreateService(
              hSC, //Handle to the SCM database provided by OpenSCManager
              'mimidrv', //Service name
              'mimikatz driver (mimidrv)', //Service display name
              READ_CONTROL | WRITE_DAC | SERVICE_START,  //Desired access
              SERVICE_KERNEL_DRIVER,  //Kernel driver service type
              SERVICE_AUTO_START, //Start the service automatically on boot
              SERVICE_ERROR_NORMAL, //Log driver errors that occur during startup to the event log
              'C:\\path\\to\\mimidrv.sys', //Absolute path of the driver on disk
              NULL,  //Load order group (unused)
              NULL,  //Not used because the previous argument is NULL
              NULL,  //No dependencies for the driver
              NULL,  //Use NT AUTHORITY\SYSTEM to start the service
              NULL   //Unused because we are using the SYSTEM account
);
如果成功創建了服務,則“Evervone”組將被授予對該服務的訪問權限,從而允許系統上的任何用戶與該服務進行交互。例如,低特權的用戶可以停止該服務。

注意:我們特別要強調后期進行清理的重要性。在完成全部操作后,請記得刪除驅動程序(!-),以免植入被其他人濫用。
如果成功完成,最終將通過StartService來啟動服務。

四、加載后操作
服務啟動后,就應該進入到Mimidrv來完成設置。該驅動程序在啟動過程中沒有進行任何不同尋常的操作,但如果對于沒有WDM驅動程序開發經驗的人來說,應該會比較復雜。
每個驅動程序都必須具有已經定義的DriverEntry函數,該函數在加載驅動程序后立即被調用,并且用于設置驅動程序要運行所需滿足的要求。我們可以將其類比于用戶模式代碼中的main()函數。在Mimidrv的DriverEntry函數中,主要進行4項工作。
1、創建設備對象
客戶端不會直接與驅動程序進行通信,而是與設備對象進行通信,因此內核模式驅動程序至少必須創建1個設備對象。然而,如果沒有符號鏈接,用戶模式代碼仍然無法直接訪問該設備對象。我們將在稍后詳細介紹符號鏈接,第一步首先是要創建設備對象。
要創建設備對象,需要對nt!IoCreateDevice進行一些關鍵的調用。最值得關注的是第三個參數DeviceName。在globals.h中,將其設置為“mimidrv”。
在WinObj中,可以看到這個新創建的設備對象。

2、設置DispatchDeviceControl和Unload函數
如果該設備對象創建成功,則會定義DispatchDeviceControl函數,在MajorFunction分配表的IRP_MJ_DEVICE_CONTROL索引處注冊,并使用MimiDispatchDeviceControl函數。這意味著,每當其接收到IRP_MJ_DEVICE_CONTROL請求(例如來自kernel32!DeviceIoControl)時,Mimidrv都會調用其內部的MimiDispatchDeviceControl函數,該函數將處理這一請求。我們將在后文的“通過MimiDispatchDeviceControl進行用戶模式交互”一節中詳細介紹其工作原理。

[1] [2] [3] [4] [5] [6] [7] [8] [9]  下一頁

【聲明】:黑吧安全網(http://www.650547.live)登載此文出于傳遞更多信息之目的,并不代表本站贊同其觀點和對其真實性負責,僅適于網絡安全技術愛好者學習研究使用,學習中請遵循國家相關法律法規。如有問題請聯系我們,聯系郵箱[email protected],我們會在最短的時間內進行處理。
  • 最新更新
    • 相關閱讀
      • 本類熱門
        • 最近下載
        安徽快3自由的百科 加拿大28网站大白预测 重庆福彩幸运农场走势 湖北快3三形态走势图一 凯恩斯的劳动供给曲线 七乐彩专家免费预测 天津体彩11远五走势图 甘肃体彩11选5最大遗漏 北京十一选五体彩走势图 股票涨还是跌 秒速快3在线计划预测