權限維持之打造不同的映像劫持後門




0x01 前言css

「映像劫持」,也被稱爲「IFEO」(Image File Execution Options),在WindowsNT架構的系統裏,IFEO的本意是爲一些在默認系統環境中運行時可能引起錯誤的程序執行體提供特殊的環境設定。當一個可執行程序位於IFEO的控制中時,它的內存分配則根據該程序的參數來設定,而WindowsN T架構的系統能經過這個註冊表項使用與可執行程序文件名匹配的項目做爲程序載入時的控制依據,最終得以設定一個程序的堆管理機制和一些輔助機制等。出於簡化緣由,IFEO使用忽略路徑的方式來匹配它所要控制的程序文件名,因此程序不管放在哪一個路徑,只要名字沒有變化,它就運行出問題。nginx


下面呢,咱們聊一聊如何打造不同「映像劫持」後門。shell



0x02 實驗環境windows

  • 目標機-Windows 7(192.168.43.94)安全

  • 攻擊機-Kali Linux  (192.168.43.9)服務器


0x03 傳統「映像劫持」Shift後門微信

    傳統「映像劫持」,當用戶雙擊對應的程序後,操做系統就會給外殼程序(例如」explorer.exe」)發佈相應的指令,其中包含有執行程序的路徑和文件名,而後由外殼程序來執行該程序。事實上在該過程當中,Windows還會在註冊表的上述路徑中查詢全部的映像劫持子鍵,若是存在和該程序名稱徹底相同的子鍵,就查詢對應子健中包含的」dubugger」鍵值名,並用其指定的程序路徑來代替原始的程序,以後執行的是遭到」劫持」的虛假程序。簡單點說,當你打開的是程序A,而運行的倒是程序B架構


你們必定都知道映像劫持後門,在如下注冊表中的sethc.exe項添加一個Debugger字符值(REG_SZ),而且賦值爲cmd.exe的執行路徑爲C:\windows\system32\cmd.exe,如圖:ide


IFEO註冊表項:工具

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\


執行命令添加:
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"


如上文所述,修改IFEO中的「debugger」鍵值,用來替換原有程序的執行,鍵入五下Shift執行sethc.exe程序時會執行cmd.exe程序。


0x04 如何打造不同的「映像劫持」後門呢?

    與上文對比,不同的「映像劫持」後門是怎樣的呢?0x03中所講述的傳統「映像劫持」後門是修改IFEO中的「debugger」鍵值,用來替換原有程序的執行。而不同的「映像劫持」後門,實現的效果是:程序A靜默退出結束後,會執行程序B


懷揣着0x04的目標咱們開始籌備。在網上收集資料時發現, Image File Execution Options下能夠設置如下值項,其中GlobalFlag是本次測試的關鍵點:

DebuggerDisableHeapLookasideShutdownFlagsMinimumStackCommitInBytesExecuteOptionsGlobalFlagDebugProcessHeapOnly......


在MSDN的博客上進一步發現GlobalFlag由gflags.exe控制,文章地址:

https://blogs.msdn.microsoft.com/junfeng/2004/04/28/image-file-execution-options/


下載gflags.exe開始研究,在Silent Process Exit這個選項卡中發現了挺有趣的東西。根據微軟官方介紹,從Windows7開始,能夠在Silent Process Exit選項卡中,能夠啓用和配置對進程靜默退出的監視操做。在此選項卡中設定的配置都將保存在註冊表中。


填寫如上圖配置後點擊應用,開始測試。使用Process Explorer進行檢測進程的變化發現鍵入五下Shift執行時,先執行sethc.exe程序,當sethc.exe程序靜默退出時,執行cmd.exe程序,運行效果以下:


0x05 來看一看它的原理

進一步分析,發現實際上是工具幫咱們添加並修改了IFEO目錄下sethc.exe的GlobalFlag值,如圖:


以及SilentProcessExit下ReportingMode和MonitorProcess兩個項值,如圖:


那麼,咱們只須要需改對應的註冊表便可:

reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v GlobalFlag /t REG_DWORD /d 512
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\sethc.exe" /v ReportingMode /t REG_DWORD /d 1
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\sethc.exe" /v MonitorProcess /t REG_SZ /d "C:\windows\system32\cmd.exe"


0x06 接下來,看下最終效果

那麼,咱們能夠修改上文中MonitorProcess值來放咱們的後門,例如Python反彈shell,配合五下Shift就能夠神不知鬼不覺的進行反連。 鍵入五下Shift後正常彈粘滯鍵,關閉以後執行咱們的Python代碼, 如圖:


咱們來看下GIF動圖效果:


0x07 如何「破」這種權限維持手法

(1) 流量方面:

服務器主動請求攻擊機,如圖:

隨後,三次握手創建鏈接,所以當咱們看到異常請求或鏈接時可進行防護措施。


(2) 系統配置方面:

微軟windows遠程桌面服務爲咱們提供了兩個配置(SecurityLayer、UserAuthentication),以下:


其中UserAuthentication參數可指定在創建遠程桌面鏈接以前如何對用戶進行身份驗證,以下:


翻譯:

用戶鑑權即UserAuthentication這個參數的做用,官方文檔說明以下:
0:說明是進行遠程桌面前不須要用戶身份驗證。1:說明是進行遠程桌面前須要進行用戶身份驗證。

那麼,當咱們將該參數設置爲1時則可防止黑客利用遠程桌面界面鍵入Shift從而達到防護效果,能夠直接執行如下命令修改UserAuthentication註冊表值,咱們看下效果:

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 1 /f


發現咱們必須密碼輸入正確才能彈出遠程桌面。


最後,你們能夠明白一個道理「不知攻焉知防」,攻擊者經過改變UserAuthentication參數方便控制,咱們也能夠經過它提升防護。


0x08 參考文章

https://blogs.msdn.microsoft.com/junfeng/2004/04/28/image-file-execution-options/

https://blog.csdn.net/johnsonblog/article/details/8165861

http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools_amd64/dbg_amd64.msi

https://oddvar.moe/2018/04/10/persistence-using-globalflags-in-image-file-execution-options-hidden-from-autoruns-exe/




本文分享自微信公衆號 - 貝塔安全實驗室(BetaSecLab)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索