在殺毒軟件日益完備的互聯(lián)網(wǎng)中,那些大部分以加載系統(tǒng)啟動項(xiàng)為主要攻擊手段的的普通病毒和木馬越來越難以攻破用戶的防御屏障,但與此同時(shí),有一些病毒卻“劍走偏鋒“,不僅繞過了殺毒軟件的檢測,還在隱藏自己的同時(shí)攻破了系統(tǒng)。這些病毒是如何抓住用戶心理,一步步突破了用戶系統(tǒng)。
接下來,通過本篇文章,美創(chuàng)第59號安全實(shí)驗(yàn)室將為大家剖析基于輔助功能的鏡像劫持攻擊原理,向大家展現(xiàn)還原這種攻擊所帶來的巨大危害以及防御手段。
01
輔助功能簡介
所謂輔助功能就是在windows系統(tǒng)中,我們可以使用多種組合鍵打開或關(guān)閉特定的功能,例如常用的win + ctrl + o打開屏幕鍵盤,win + u打開設(shè)置中心,連按5次shift打開粘滯鍵等等。
而且微軟為了提高用戶體驗(yàn),非常‘貼心’的允許用戶在登陸系統(tǒng)前也可以使用這些功能,根據(jù)這個(gè)特性,某些攻擊者很可能通過遠(yuǎn)程桌面協(xié)議,在未授權(quán)的情況下運(yùn)行這些功能,雖然這些功能是‘友好的’,沒有危害性,但我們知道,這些功能之所以可以運(yùn)行其實(shí)是在命令行里運(yùn)行的系統(tǒng)指令罷了,例如
C:WINDOWSSystem32Utilman.exe 打開設(shè)置中心
C:WINDOWSSystem32sethc.exe 打開粘滯鍵
C:WINDOWSSyetem32osk.exe 打開屏幕鍵盤
問題在于,如果我們在未登陸系統(tǒng)的情況下使用組合鍵運(yùn)行的系統(tǒng)命令遭到篡改,本來應(yīng)該打開‘十分安全’的輔助程序卻被另一惡意程序代替執(zhí)行,最終導(dǎo)致在用戶不知情的情況下,獲得系統(tǒng)權(quán)限,留下隱蔽后門。
可如何才能使用戶啟動輔助功能的系統(tǒng)命令變成運(yùn)行自己惡意軟件的系統(tǒng)命令呢,這就要說到另一項(xiàng)技術(shù):鏡像劫持。
02
鏡像劫持簡介
“鏡像劫持”,又叫“映像劫持”,也被稱為“IFEO”(Image File Execution Options),在Windows NT架構(gòu)的系統(tǒng)里,IFEO的本意是為一些在默認(rèn)系統(tǒng)環(huán)境中運(yùn)行時(shí)可能引發(fā)錯(cuò)誤的程序執(zhí)行體提供特殊的環(huán)境設(shè)定。當(dāng)一個(gè)可執(zhí)行程序位于IFEO的控制中時(shí),它的內(nèi)存分配則根據(jù)該程序的參數(shù)來設(shè)定,而Windows NT架構(gòu)的系統(tǒng)能通過這個(gè)注冊表項(xiàng)使用與可執(zhí)行程序文件名匹配的項(xiàng)目作為程序載入時(shí)的控制依據(jù),最終得以設(shè)定一個(gè)程序的堆管理機(jī)制和一些輔助機(jī)制等。大概微軟考慮到加入路徑控制會造成判斷麻煩與操作不靈活的后果,也容易導(dǎo)致注冊表冗余,于是IFEO使用忽略路徑的方式來匹配它所要控制的程序文件名。
簡單來說,當(dāng)我想運(yùn)行A.exe,結(jié)果運(yùn)行的卻是B.exe,也就是說在這種情況下A程序被B程序給劫持了,而映像劫持病毒就是通過修改某些注冊表常用項(xiàng)的鍵值,達(dá)到在用戶無意識的情況下想運(yùn)行常用程序卻讓木馬等惡意程序在后臺運(yùn)行的目的。
03
鏡像劫持原理及實(shí)現(xiàn)
原理:
為了實(shí)現(xiàn)鏡像劫持,需要先找到鏡像劫持在注冊表中的路徑,“HKEY_LOCAL_macHINE SOFTWARE Microsoft WindowsNT CurrentVersion Image File ExecutionOptions”。
然而WINDOWS NT系統(tǒng)在試圖執(zhí)行一個(gè)從命令行調(diào)用的可執(zhí)行文件運(yùn)行請求時(shí),會先檢查運(yùn)行程序是不是可執(zhí)行文件,如果是的話,再檢查格式,然后就會檢查是否存在。由此我們發(fā)現(xiàn),造成鏡像劫持的罪魁禍?zhǔn)拙褪菂?shù)“Debugger”,他是IFEO里第一個(gè)被處理的參數(shù),若果該參數(shù)不為空,系統(tǒng)則會把Debugger參數(shù)里指定的程序文件名作為用戶試圖啟動的程序執(zhí)行請求來處理,而僅僅把用戶試圖啟動的程序作為Debugger參數(shù)里指定的程序文件名的參數(shù)發(fā)送過去。參數(shù)“Debugger”本來是為了讓程序員能夠通過雙擊程序文件直接進(jìn)入調(diào)試器里調(diào)試自己的程序。現(xiàn)在卻成了病毒的攻擊手段。
讓我們進(jìn)行更深的思考,當(dāng)更改的表項(xiàng)是殺毒軟件所在的表項(xiàng),會造成什么后果。毫無疑問,殺毒軟件完全沒辦法工作,不僅繞過了殺毒軟件還隱秘的執(zhí)行了自己的惡意程序,一般用戶根本想不到殺毒軟件的注冊表項(xiàng)會被篡改,這就進(jìn)一步增加了攻擊后可利用的時(shí)間。危害性不言而喻。
復(fù)現(xiàn):
修改注冊表的惡意代碼:
#include <IOStream>
#include <Windows.h>
using namespace std;
int test(){
Dword dwDisposition;
HKEY hKey;
const char path[] = "C:WINDOWSSystem32calc.exe";
RegCreateKeyExA(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\chrome.exe", 0, NULL, 0, KEY_WRITE, NULL, &hKey, &dwDisposition);
RegSetValueExA(hKey, "Debugger", 0, REG_SZ, (BYTE*)path, (1 + ::lstrlenA(path)));
return 0;}
int main(){
test();
return 0;}
惡意程序運(yùn)行后,注冊表中chrome.exe新增鍵值對Debugger=“C:WINDOWSSystem32calc.exe”
注冊表項(xiàng)遭到修改后,雙擊運(yùn)行chrome運(yùn)行,本該打開網(wǎng)頁卻打開了計(jì)算器程序,因?yàn)橄到y(tǒng)優(yōu)先執(zhí)行了”C:WINDOWSSystem32calc.exe”。造成了鏡像劫持攻擊。
04
基于輔助功能實(shí)現(xiàn)鏡像劫持原理及實(shí)現(xiàn)
安全從業(yè)者不應(yīng)輕視任何一種漏洞,因?yàn)楫?dāng)不同的漏洞結(jié)合到一起時(shí)很有可能產(chǎn)生1+1>2的效果。這一點(diǎn)在輔助功能和鏡像劫持身上很好的體現(xiàn)了出來。
之前我們提過輔助功能是執(zhí)行系統(tǒng)命令,并且允許用戶在未登錄的情況下運(yùn)行,那么當(dāng)我們使用鏡像劫持攻擊,更改了這些指令在注冊表IFEO中的鍵值就可能造成攻擊者不需要登陸系統(tǒng)即可運(yùn)行某些惡意軟件。
原理:
修改注冊表,在“HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows NT CurrentVersion Image File Execution Option”中添加Utilman.exe項(xiàng),在此項(xiàng)中添加debugger鍵,鍵值為啟動cmd的命令C:WINDOWSSystem32cmd.exe。
當(dāng)攻擊者通過遠(yuǎn)程桌面協(xié)議連接到受害者電腦上時(shí),只需使用組合鍵win+u,本應(yīng)該打開的設(shè)置中心,最終卻打開了cmd命令行,通過命令行可以添加用戶、打開注冊表、運(yùn)行惡意軟件、添加隱蔽后門等等一些列攻擊手段,嚴(yán)重性不言而喻。
復(fù)現(xiàn):
在注冊表中新增Utilman.exe表項(xiàng),添加鍵值對Debugger=“C:WINDOWSSystem32cmd.exe”
在登陸頁面上運(yùn)行win + u,在無需登錄的情況下就打開了cmd命令框。
05
防御和清除手段
1、由于此類攻擊的惡意代碼要修改Image File Execution Options,首先要有權(quán)限才可讀寫,于是,我們可以通過限制用戶對該注冊表的讀寫權(quán)限,來阻止鏡像劫持。打開注冊表編輯器,定位到HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionImageFileExecutionOptions,選中該項(xiàng),右鍵→權(quán)限→高級,取消administrator和system用戶的寫權(quán)限即可。
2、由于鏡像劫持需要在注冊表中添加輔助功能的表項(xiàng),所以檢查“HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Option”注冊表路徑下的程序名稱,一些常用的輔助功能表項(xiàng)如:Utilman.exe,stch.exe,osk.exe等等。
3、基于零信任的理念,對于有可能有安全隱患的不必要表項(xiàng)可以選擇刪除,直接禁用輔助功能即可。打開注冊表編輯器,定位到HKEY_LOCAL_MACHINE SOFTWARE Microsoft WindowsNT CurrentVersion ,把“ImageFileExecutionOptions”項(xiàng)刪除。






