常見的幾種windows後門持久化方式
*本文原創作者:si1ence,本文屬於FreeBuf原創獎勵計劃,未經許可禁止轉載
0×0 背景
持久化後門是指當入侵者通過某種手段拿到伺服器的控制權之後,通過在伺服器上放置一些後門(指令碼、程序、連線之類),來方便他以後永續性的入侵,簡單梳理一下日常遇見windows用的比較多的一些持久化方式方便以後排查問題使用。
0×1 登錄檔自啟動
最常見的在指定鍵值新增一個新的鍵值型別為REG_SZ,資料項中添寫需要執行程式的路徑即可以啟動,此類操作一些較為敏感容易被本地AV攔截,目前也是較為常見的一種方式。
鍵值路徑如下:
HKEY_LOCAL_MACHINE\SOFTWARE\Microft\windows\currentversion\run
自啟動專案如下:
0×2 使用者登入
在登錄檔路徑:HKCU\Environment\
建立字串鍵值:UserInitMprLogonScript
鍵值設定為特定的指令碼路徑即可:
另外一種實現方式是修改winlogon Userinit欄位:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
Powershell的一鍵修改命令如下:
Set-ItemProperty "HKLM:\SOFTWARE\Microsoft\WINDOWS NT\CurrentVersion\Winlogon" -name Userinit -value "C:\Windows\system32\userinit.exe,***************"
0×3 定時任務
Windows實現定時任務主要有schtasks與at二種方式,一定層次說上schtasks是at命令的升級版、主要行為特別表現從一個特定的外網地址下載downloader樣本或病毒母體或者維持CC通訊的心跳包。
使用以下命令可以一鍵實現:
"schtasks /create /sc minute /mo 1 /tn "chrome" /tr wscript.exe C:\Users\\AppData\Local\Temp\13442980_crypted.vbs"
0×4 WMI
WMI是微軟基於Web的企業管理(WBEM)的實現版本,這是一項行業計劃,旨在開發用於訪問企業環境中管理資訊的標準技術。主要與Powershell命令配合使用可以實現無檔案攻擊重要方式,具有良好的隱蔽性也是目前較為常用的持久化手段。
關鍵實現的程式碼如下:
WMI物件主要是執行一個WQL(WMI Query Language)的查詢後,本地呼叫Powershell執行響應的程式碼由於沒有檔案儲存在本地磁碟能夠較好的免查殺。
Black Hat 2015公佈了一個WMIBackdoor的poc畢竟還是經典,在流行的powersploit與nishang框架裡面也有相關的ps1檔案。
傳送門: https://github.com/mattifestation/WMI_Backdoor
0×5 webshell
在指定的web伺服器路徑藏的很深的那種放置一個webshell,同時做好免殺後的shell往往比常規的系統後門更難被發現,這個操作很常規。
各類webshell種類比較多傳送門:
https://github.com/xl7dev/WebShell
0×6 自啟動服務
簡單的分為二種方式將自己的惡意的可執行檔案註冊成服務或者呼叫系統程序如svchost載入dll檔案執行服務。第二種方式相對隱蔽性較好由於系統程序的特殊性往往不敢輕易終止程序,由於此類均在PE檔案或者其他型別檔案在磁碟中容易被查殺,特殊處理過的除外。
Metasploit可以使用Metsvc建立服務,此類操作極容易被AV查殺。
如下是永恆之藍挖礦病毒一個常見病毒,通過偽裝服務名為系統服務瞞天過海。
在Meterpreter下可以執行run metsvc將會在目標主機上以Meterpreter的服務的形式註冊在服務列表中,並開機自動自動:
Windows服務端服務註冊成功:
0×7 dll劫持
如果在程序嘗試載入一個DLL時沒有指定DLL的絕對路徑,那麼Windows會嘗試去指定的目錄下查詢這個DLL;如果攻擊者能夠控制其中的某一 個目錄,並且放一個惡意的DLL檔案到這個目錄下,這個惡意的DLL便會被程序所載入,從而造成程式碼執行。
比較常用的如LPK.dll的劫持:
win7及win7以上系統增加了KnownDLLs保護,需要在登錄檔:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\ExcludeFromKnownDlls
下新增 “lpk.dll” 才能順利劫持:
另外一種思路是通過檢視被劫持的DLL的匯出函式表,程式設計實現劫持DLL向原DLL的匯出函式的轉發,並加入你的惡意程式碼達到一個劫持的效果。
0×8 COM劫持
主要通過修改CLSID下的登錄檔鍵值,實現對CAccPropServicesClass和MMDeviceEnumerator劫持,而系統很多正常程式啟動時需要呼叫這兩個例項,所以,這就可以用作後門來使用,並且,該方法也能夠繞過Autoruns對啟動項的檢測。
Powershell版本的poc: https://github.com/3gstudent/COM-Object-hijacking
0×9 B ootkit
MBR後門主要的思路是讀取主引導記錄和把分割槽表從主引導記錄中複製出來。然後把自己的包含惡意二進位制資料的主引導記錄放到主引導扇區,並複製新的分割槽表到它。但是,並非只有分割槽表需要保留,還有原來的主引導記錄也需要儲存下來,MBR病毒複製原始主引導記錄到其它64個未用到的扇區。到MBR病毒執行完自己的操作後在讀取原始的主引導記錄並跳到0x7c00處執行來引導開機。目前比較流行的比如暗雲木馬系列:
詳細可參考騰訊的研究報告: https://slab.qq.com/news/tech/1308.html
通過PCHunter也能夠進行簡單的MBR的異常判斷,此類後門往往具有較大的實施難度病毒種類往往也較少。
0×10 總結
Windows環境的持久化還有更多霸氣側漏的姿勢沒有遇見總結到,相對於之前建立隱藏賬戶、網站跟目錄下的webshell、一個後門的exe程式、定時任務這些手法一些更新的手法顯得更加隱蔽與難以查殺,希望能給日常背鍋的運維、安全應急、開發大佬與首席道歉師在客戶現場搞的焦頭爛額時候提供一些排查思路吧。
*本文原創作者:si1ence,本文屬於FreeBuf原創獎勵計劃,未經許可禁止轉載