無文件攻擊實例:基於註冊表的Poweliks病毒分析
前言
病毒與殺軟的博弈持續進行著,雙方的攻防技術也是日新月異,隨著殺軟殺毒能力的不斷提升,病毒對抗也在持續加強,無文件攻擊作為一種比較新型的攻擊手段,正逐步擴大其影響力。
深信服EDR安全團隊發現, 從2016年至今,所有重大的APT事件中,有77%的組織採用了無文件的攻擊方式進行入侵,再縱觀這三年,無文件的攻擊方式也越來越流行:
(圖片來自Gartner的演講Get Ready for "Fileless" Malware Attacks)
近日,我們捕獲了一個poweliks病毒樣本,此病毒家族就是一個典型的基於註冊表的無文件攻擊實例。為了對此類攻擊有更直觀且全面的了解,我們研究分析poweliks病毒,來梳理無文件式攻擊的整體流程。Poweliks是著名的無文件式攻擊病毒,其後出現了多個版本的變種,其採用了註冊表、powershell、進程注入這三種無文件攻擊方式來對主機進行隱蔽性攻擊,由於行為很隱蔽,所以其很難被殺軟所查殺。
病毒原理
Poweliks.exe為此病毒的母體, poweliks.exe首先修改註冊表,然後調用rundll32.exe執行powershell腳本(包含惡意代碼),powershell腳本首先創建一個合法進程dllhost.exe(此文件在C:WindowsSystem32目錄下),然後將惡意代碼注入到此進程中並執行(躲避殺軟查殺) ,達到與C&C伺服器通信的目的。最後,當系統每次重啟時,都會自動運行註冊表裡的惡意代碼,實現持久化攻擊。
雙擊Poweliks.exe(病毒母體),運行情況如下:
技術分析
Poweliks病毒一般是通過郵件的方式進行傳播的,在郵件裡面包含一個惡意的word文檔,一旦打開這個word文檔,它將會執行惡意代碼並運行Poweliks病毒。
病毒主流程如下:
以下是C&C伺服器的地址及HTTP請求的格式
Poweliks.exe接著向註冊表默認啟動項鍵值(HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun(Default))中寫入兩條惡意代碼:
寫入第一個惡意代碼(調用rundll32.exe讀取run鍵值里的jscript代碼並執行)
這段代碼由於是使用Unicode編碼的,所以使用regedit.exe打開會報錯誤,使用常規的方式刪除不了此註冊表鍵:
寫入第二個惡意代碼(被調用執行的Jscript代碼)
然後在Run項下創建創建一個Unicode字元的項:
這裡的目的也是為了使用戶在打開regedit.exe打開的時候出現報錯,防止用戶刪除惡意的註冊表項:
我們現在回過頭來看看jscript的關鍵代碼
這段代碼的主要功能是調用powershell執行一段base64加密後的代碼,將powershell代碼解密,發現其中繼續調用了一段加密代碼,解密後發現是一段惡意的二進位shellcode。
然後,poweliks.exe調用進程poweliks.exe:0進行自刪除:
poweliks.exe:0進程在刪除母體文件poweliks.exe後退出。
最後,遺留在系統中dllhost.exe進程被注入惡意代碼後做了兩個操作,連接C&C伺服器和監控註冊表,確保自己的惡意代碼不會被刪除:
處理方法
1. 結束進程dllhost.exe
2. 使用PCHunter刪除註冊表相應的惡意鍵值,即刪除默認鍵對應的值。(HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun默認)


※攻擊熱點指南針?千里目淺談安全趨勢
※SamSam勒索病毒變種預警
TAG:千里目安全實驗室 |