如何利用DLL注入繞過Win10勒索軟體保護
微軟在Windows 10作業系統中加入了一個新的勒索軟體保護功能——Controlled Folder Access(受控資料夾訪問),該功能可用於預防受保護的資料夾中的檔案被未知的程式修改。
在上週舉行的DerbyCon安全會議上,安全研究人員展示了“勒索軟體用DLL注入來繞過Controlled Folder Access的勒索軟體保護功能”。
用DLL注入繞過Controlled Folder Access
Controlled Folder Access是win10引入的保護資料夾和檔案不被白名單外的應用修改的特徵。白名單指使用者指定或微軟預設的一些應用程式列表。
explorer.exe程式就在Controlled Folder Access的白名單列表中,安全研究人員Soya Aoyama找出一種將惡意DLL注入Explorer來繞過Controlled Folder Access的方式。因為Explorer在白名單裡,所以當DLL注入後,Explorer啟動時就可以繞過勒索軟體保護功能。
當explorer.exe啟動時,會載入HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers登錄檔中的DLL,如下圖所示:
HKEY_CLASSES_ROOT樹是HKEY_LOCAL_MACHINE和HKEY_CURRENT_USER中的登錄檔資訊的合集。在執行合併時,Windows會給出HKCU樹中的優先順序。
也就是說,如果有key存在HKCU中,其優先順序就高於HKLM中的相同key,也會最終合併到HKEY_CLASSES_ROOT樹中。關於合併的更多說明可參見 ofollow,noindex">https://docs.microsoft.com/en-us/windows/desktop/sysinfo/hkey-classes-root-key 。
預設情況下,explorer啟動時會從HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{90AA3A4E-1CBA-4233-B8BB-535773D48449}\InProcServer32 key中載入Shell.dll。為了將惡意DLL載入到explorer.exe中,研究人員建立了一個HKCU\Software\Classes\CLSID\{90AA3A4E-1CBA-4233-B8BB-535773D48449}\InProcServer32 key,然後將其預設值修改為惡意DLL。
當Explorer.exe程序被kill掉和重啟時,惡意DLL就會載入到explorer.exe中。下圖是DLL注入到explorer.exe的示例:
問題的關鍵是上述動作不僅繞過了Controlled Folder Access,還繞過了Windows defender。根據研究人員的測試,Avast, ESET, Malwarebytes Premium, McAfee的勒索軟體保護都沒有檢測到上述行為。
微軟響應
研究人員Aoyama已將該漏洞報告和可以繞過Controlled Folder Access的POC通報給了微軟SRC。但微軟並不覺得這是一個需要修復的漏洞,具體迴應為:
如果說你的發現是正確的話,該報告預測攻擊者已經擁有了目標賬戶的訪問許可權,然後通過修改登錄檔注入DLL。如果只有寫入HKCU的許可權,是不能影響其他使用者的。因此,這不屬於許可權提升,因為修改登錄檔注入後和注入前對目標裝置和系統的訪問許可權是相同的。
但勒索軟體加密受害者計算機時並不需要進行許可權提升。唯一需要的是清除Volume Shadow Copy(卷影拷貝),惡意軟考開發者可以用其他的漏洞和方法來執行vssadmin(卷影複製服務,用於卷影複製服務的命令列介面)。
通過繞過Controlled Folder Access的勒索軟體保護功能,惡意軟體可以在沒有管理員許可權的情況下安裝。這可能正是危險和攻擊的開始。