從SharPersist思考惡意軟體持久化檢測

深信服千里目發表於2019-10-21

       持久化(Persistence)是一個攻擊鏈週期中非常重要的環節,攻擊者會利用各種技術確保惡意軟體在系統上駐留的時間更加長久,即使在裝置重啟、憑據修改或其他可能破壞當前惡意活動的操作發生後,也能夠重新拉起和保持惡意的行為。

      建立持久化又分為持久化注入持久化觸發兩個部分。持久化注入通常指植入惡意payload,通常包括程式注入、EXE檔案注入、動態連結庫(DLL)注入、HTML應用程式(HTA)注入、指令碼注入等;而持久化觸發則包括新增自啟動項、服務、計劃任務等。

     國外安全研究人員在九月釋出了一個用C#編寫的持久化工具包SharPersist,主要用於實現Windows下的各類持久化操作,該專案的開源地址為: https://github.com/fireeye/SharPersist

    SharPersist支援的持久化技術包括以下幾種: 

從SharPersist思考惡意軟體持久化檢測

    使用SharPersist實現持久化非常簡單,命令列下新增引數即可實現指定的功能,會用到的參數列如下: 

從SharPersist思考惡意軟體持久化檢測


使用-h引數可以獲取到非常詳細的使用說明,下面用一些例項如何使用SharPersist實現持久化,例如,把notepad.exe新增到登錄檔自啟動: 

> SharPersist.exe -t reg -m add -k "hkcurun" -v "notepad" -c "C:\Windows\System32\cmd.exe" -a "/c notepad.exe"


從SharPersist思考惡意軟體持久化檢測

將powershell命令新增到計劃任務:

>SharPersist.exe -t schtask -m add -c "%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe" -a "-e bypass C:\Windows\notepad.exe" -n notepad


從SharPersist思考惡意軟體持久化檢測

SharPersist中實現的幾項持久化功能都是比較容易識別的,實際上還有更多可被利用的持久化技術,MITRE ATT&CK給出了一份更為詳細的列表:

從SharPersist思考惡意軟體持久化檢測

       隨著對抗手段日益複雜化,持久化技術也將演變得更加隱蔽,想要在端點上識別出攻擊者的持久化手段,就需要採集大量的資料進行分析判別,看起來簡單的檢測工作,在實際環境中面臨著很多困難。

       在真實環境中捕獲有效惡意樣本是一個難題,況且還要對採集到的樣本進行確認和分類,好在很多滲透測試工具提供了能夠實現持久化的功能,如本文提到的SharPersist,還有Metasploit以及Persistence Aggressor Script等,可以用於模擬各種常見的惡意軟體持久化操作,以便安全研究人員從中提取特徵。

        實際應用中,仍然還會存在很多阻礙,如某些正常軟體和運維工具,也可能會觸發檢測規則,要如何減少類似的誤報;在採集和儲存系統安全日誌時,是否會影響到系統效能,並且在大量的日誌中如何有效的進行檢測,避免過度消耗資源,都是安全研究人員要面臨的挑戰。




相關文章