據說無文件惡意軟件的目標,就是進駐內存以保持隱身。除了駐扎在內存,無文件惡意軟件的第二個特點,就是對系統管理工具的利用,比如PowerShell。
攻擊者為什么要利用無文件惡意軟件?
其一,不是每種終端解決方案都直接檢查內存。這讓內存成為了理想的藏身地點。其二,PowerShell之類的工具已經存在于系統中了。這就給攻擊者留下了多個好處。能夠靠局域網為生,便削減了因在受害者主機上部署惡意軟件而產生的動靜。
因為每個終端解決方案都會監視文件系統,寫磁盤的操作會觸動防御布網。讓惡意軟件僅進入內存則可避免該風險。這些工具也是廣為使用的管理工具,偶爾的惡意用途也可以混進環境常見噪音中。
Windows是現有無文件惡意軟件的主要目標。我們可以探究一下為什么無文件惡意軟件并非真的沒有文件。惡意軟件可被狹義定義為操作系統上執行的代碼,所以無文件惡意軟件確實可以無文件。
甚至最好的終端產品都會錯過內存中運行的高級惡意軟件,甚少有公司會采用Volatility之類的內存分析工具。
跳出上述狹義定義,惡意軟件背后黑手的目的,是盡可能多地收集目標用戶的信息。為此,惡意軟件需要能夠從中斷中恢復,而達到該功能的途徑,就是能夠挺過系統重啟。想要駐留,總得往磁盤上寫點兒什么東西。
Ars Technica 的文章中提到了某無文件惡意軟件的IoC,該惡意軟件創建了一個服務來挺過重啟。注冊表中留下的兩個鍵是:
HKEY_LOCAL_MACHINESYSTEMControlSet001servicesHKEY_LOCAL_MACHINESYSTEMControlSet001servicesPortProxyv4tov4 cpControlSet中的服務部分,就是系統服務在注冊表中存在的地方。惡意軟件能夠隨系統重啟的奧秘就在于此。該注冊表項有CurrentControlSet、ControlSet001和ControlSet002。微軟知識庫文章中介紹說:
ControlSet001可能是你最近一次重啟的控制集,而ControlSet002則是最近已知良好狀態,或者最近一次成功啟動的 Windows NT 控制集。CurrentControlSet子鍵,不過是指向某個ControlSetXXX的指針而已。
注冊表是存放于System32目錄下的一個文件。上面提到的SYSTEM項里填入的是操作系統里%WINDIR%System32configSYSTEM中的一個文件。這是無文件惡意軟件實際上并非沒有文件的鐵證。
任何希望長期生存的惡意軟件,最終都需要留下點什么東西,這東西很可能就在磁盤的某個地方。