中文字幕交换系列在线_一级黄片亚洲第一_午夜视频精品视在线播放_国产真人做受免费视频

始創(chuàng)于2000年 股票代碼:831685
咨詢(xún)熱線:0371-60135900 注冊(cè)有禮 登錄
  • 掛牌上市企業(yè)
  • 60秒人工響應(yīng)
  • 99.99%連通率
  • 7*24h人工
  • 故障100倍補(bǔ)償
全部產(chǎn)品
您的位置: 網(wǎng)站首頁(yè) > 幫助中心>文章內(nèi)容

解析映像劫持技術(shù)

發(fā)布時(shí)間:  2012/7/4 14:30:19
一. 詭異的中毒現(xiàn)象
  在成品檢驗(yàn)科文員辦公室的一臺(tái)電腦上折騰半個(gè)小時(shí)后,計(jì)算機(jī)維護(hù)部門(mén)的技術(shù)員只覺(jué)得眼皮不?裉?yàn)閺膭傞_(kāi)始接手這個(gè)任務(wù)開(kāi)始,他就一直在做無(wú)用功:他隨身帶的U盤(pán)里引以為豪的眾多維護(hù)工具包在這臺(tái)機(jī)器上全軍覆沒(méi),無(wú)論他直接在U盤(pán)上運(yùn)行還是隨便復(fù)制到哪個(gè)目錄里,系統(tǒng)都是報(bào)告“找不到文件”或者直接沒(méi)有運(yùn)行起來(lái)的反應(yīng),他第一次感受到了恐懼,文件分明就好好的在眼皮底下,可它們就是“找不到”或死活不肯執(zhí)行,莫非是在這臺(tái)機(jī)器上被病毒破壞了?他只好打開(kāi)網(wǎng)頁(yè)嘗試重新下載,但是他很快就絕望了,剛下載的查殺工具同樣也不能使用。
  無(wú)奈之下他只好在眾多文員的期待下說(shuō)出了大部分號(hào)稱(chēng)上門(mén)維護(hù)電腦的高手們常用的一句話,一般情況下這句話?cǎi)R上能讓大部分用戶接受殘酷的現(xiàn)實(shí),允許其重裝系統(tǒng),并為這次重裝系統(tǒng)付出50元的價(jià)格,這句話就是:“系統(tǒng)文件嚴(yán)重?fù)p壞了,沒(méi)法修了,只能重裝。”
  裝完系統(tǒng)和常用辦公軟件后,他像一個(gè)賊似的趕緊離開(kāi)了辦公室,生怕多呆一會(huì)兒就會(huì)惹來(lái)什么麻煩似的,而他卻不知道,“麻煩”早已在他剛才使用的U盤(pán)上安家了;氐阶约旱碾娔X前,他剛右鍵點(diǎn)擊U盤(pán),就看見(jiàn)鼠標(biāo)忙碌的狀態(tài)比平時(shí)久了點(diǎn),然后托盤(pán)區(qū)里的殺毒軟件和網(wǎng)絡(luò)防火墻都消失了,他心里一慌張,趕緊運(yùn)行超級(jí)巡警,系統(tǒng)卻報(bào)告“找不到文件”,他一下子呆在了電腦前:瘟神跟上門(mén)來(lái)了……
  古語(yǔ)云:道高一尺,魔高一丈。這句經(jīng)典哲理在網(wǎng)絡(luò)上得到了迅速的延伸應(yīng)用。今年初,一種早已有之的系統(tǒng)調(diào)試功能被應(yīng)用到病毒技術(shù)上,從而搖身一變成為惡魔的代言人,普通用戶很快就面臨了一場(chǎng)莫名其妙的病毒災(zāi)難,這就是“映像劫持”。
  二. 我本將心向明月,奈何明月照……
  “映像劫持”,也被稱(chēng)為“IFEO”(Image File Execution Options,其實(shí)應(yīng)該稱(chēng)為“Image Hijack”,后面章節(jié)會(huì)詳細(xì)提到,至少也應(yīng)該稱(chēng)為IFEO Hijack而不是只有“IFEO”自身。,它的存在自然有它的理由,在WindowsNT架構(gòu)的系統(tǒng)里,IFEO的本意是為一些在默認(rèn)系統(tǒng)環(huán)境中運(yùn)行時(shí)可能引發(fā)錯(cuò)誤的程序執(zhí)行體提供特殊的環(huán)境設(shè)定,系統(tǒng)廠商之所以會(huì)這么做,是有一定歷史原因的,在Windows NT時(shí)代,系統(tǒng)使用一種早期的堆(Heap,由應(yīng)用程序管理的內(nèi)存區(qū)域)管理機(jī)制,使得一些程序的運(yùn)行機(jī)制與現(xiàn)在的不同,而后隨著系統(tǒng)更新?lián)Q代,廠商修改了系統(tǒng)的堆管理機(jī)制,通過(guò)引入動(dòng)態(tài)內(nèi)存分配方案,讓程序?qū)?nèi)存的占用更為減少,在安全上也保護(hù)程序不容易被溢出,但是這些改動(dòng)卻導(dǎo)致了一些程序從此再也無(wú)法運(yùn)作,為了兼顧這些出問(wèn)題的程序,微軟以“從長(zhǎng)計(jì)議”的態(tài)度專(zhuān)門(mén)設(shè)計(jì)了“IFEO”技術(shù),它的原意根本不是“劫持”,而是“映像文件執(zhí)行參數(shù)”!
  IFEO設(shè)定了一些與堆分配有關(guān)的參數(shù),當(dāng)一個(gè)可執(zhí)行程序位于IFEO的控制中時(shí),它的內(nèi)存分配則根據(jù)該程序的參數(shù)來(lái)設(shè)定,那么如何使一個(gè)可執(zhí)行程序位于IFEO的控制中呢?答案很簡(jiǎn)單,Windows NT架構(gòu)的系統(tǒng)為用戶預(yù)留了一個(gè)交互接口,位于注冊(cè)表的“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options”內(nèi),使用與可執(zhí)行程序文件名匹配的項(xiàng)目作為程序載入時(shí)的控制依據(jù),最終得以設(shè)定一個(gè)程序的堆管理機(jī)制和一些輔助機(jī)制等,大概微軟考慮到加入路徑控制會(huì)造成判斷麻煩與操作不靈活的后果,也容易導(dǎo)致注冊(cè)表冗余,于是IFEO使用忽略路徑的方式來(lái)匹配它所要控制的程序文件名,例如IFEO指定了對(duì)一個(gè)名為“小金.EXE”的可執(zhí)行程序文件進(jìn)行控制,那么無(wú)論它在哪個(gè)目錄下,只要它名字還叫“小金.EXE”,它就只能在IFEO的五指山里打滾了。
  說(shuō)了半天都只是純粹的概念,那么IFEO到底是怎么樣發(fā)揮作用的呢?例如有一個(gè)程序文件名為“lk007.exe”,由于使用了舊的堆管理機(jī)制,它在新系統(tǒng)里無(wú)法正常運(yùn)行甚至出現(xiàn)非法操作,為了讓系統(tǒng)為其提供舊的堆管理機(jī)制,我們需要IFEO來(lái)介入,則需執(zhí)行以下步驟:
  1. 確保在管理員狀態(tài)下執(zhí)行regedit.exe,定位到以下注冊(cè)表項(xiàng):
  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
  2. 在“Image File Execution Options”下建立一個(gè)子鍵,名為“lk007.exe”,不區(qū)分大小寫(xiě),F(xiàn)在確保位于HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\lk007.exe\下,建立一個(gè)字符串類(lèi)型的注冊(cè)表項(xiàng),名為“DisableHeapLookAside”,值為“1”
  3. 再次運(yùn)行l(wèi)k007.exe查看運(yùn)行情況,如果真的是由于堆管理機(jī)制引發(fā)的問(wèn)題,則程序得以正常運(yùn)行,否則該程序問(wèn)題不屬于IFEO能夠干涉的范圍,或者需要嘗試搭配其他的參數(shù)使用。
  目前已知的IFEO參數(shù)有:
  ApplicationGoo
  Debugger
  PageHeapFlags
  DisableHeapLookAside
  DebugProcessHeapOnly
  PageHeapSizeRangeStart
  PageHeapSizeRangeEnd
  PageHeapRandomProbability
  PageHeapDllRangeStart
  PageHeapDllRangeEnd
  GlobalFlag
  BreakOnDllLoad
  ShutdownFlags
  說(shuō)白了,IFEO本質(zhì)是系統(tǒng)廠商為某些可能以早期設(shè)計(jì)模式運(yùn)行的軟件提供一種保全措施而設(shè)計(jì)出來(lái)的產(chǎn)物,并對(duì)其加以擴(kuò)充形成了一套可用于調(diào)試程序的簡(jiǎn)易方案,如“BreakOnDllLoad”參數(shù)可設(shè)定在載入某個(gè)DLL時(shí)設(shè)置斷點(diǎn),便于程序員調(diào)試ISAPI接口;帶有“Range”字樣的幾個(gè)參數(shù)則用于限制堆的大小等。
  而里面有一個(gè)導(dǎo)致了今天這種局面的參數(shù):Debugger。或許微軟當(dāng)初的用意是便于程序員能夠通過(guò)雙擊某個(gè)設(shè)置了IFEO控制列表的執(zhí)行體文件來(lái)直接調(diào)用調(diào)試器對(duì)其進(jìn)行調(diào)試,而不用再通過(guò)繁瑣的打開(kāi)調(diào)試器再進(jìn)行文件載入來(lái)實(shí)現(xiàn)調(diào)試,提高了工作效率。
  為了使得IFEO能夠影響到任何一個(gè)程序啟動(dòng)請(qǐng)求,NT架構(gòu)中將IFEO的優(yōu)先權(quán)設(shè)置得很高,基本上,當(dāng)用戶要求執(zhí)行某個(gè)程序時(shí),系統(tǒng)首先判斷該程序文件是否可執(zhí)行體,然后就到IFEO的入口項(xiàng)進(jìn)行文件名配對(duì)了,直到通過(guò)IFEO這一步后,進(jìn)程才真正開(kāi)始申請(qǐng)內(nèi)存創(chuàng)建起來(lái)。
  如果系統(tǒng)在IFEO程序列表里匹配了當(dāng)前運(yùn)行的文件名,它就會(huì)讀取文件名下的參數(shù),這些參數(shù)在未被人為設(shè)置之前均有個(gè)默認(rèn)值,而且它們也具備優(yōu)先權(quán),“Debugger”的優(yōu)先權(quán)是最高的,所以它是第一個(gè)被讀取的參數(shù),如果該參數(shù)未被設(shè)置,則默認(rèn)不作處理,如果設(shè)置了這個(gè)參數(shù),情況就變得復(fù)雜了……
  三. 罪魁禍?zhǔn)?ldquo;Debugger”
  前面一章里大家應(yīng)該都了解IFEO的本質(zhì)了,從實(shí)際現(xiàn)象來(lái)說(shuō),把IFEO直接稱(chēng)為“映像劫持”未免有點(diǎn)冤枉它了,因?yàn)槔锩娲蟛糠謪?shù)并不會(huì)導(dǎo)致今天這種局面的發(fā)生,惹禍的參數(shù)只有一個(gè),那就是“Debugger”,將IFEO視為映像劫持,大概是因?yàn)閲?guó)內(nèi)一些人直接套用了“Image File Execution Options”的縮寫(xiě)罷,在相對(duì)規(guī)范的來(lái)自Sysinternals的專(zhuān)業(yè)術(shù)語(yǔ)里,利用這個(gè)技術(shù)的設(shè)計(jì)漏洞進(jìn)行非法活動(dòng)的行為應(yīng)該被稱(chēng)為“Image Hijack”,這才是真正字面上的“映像劫持”!
  Debugger參數(shù),直接翻譯為“調(diào)試器”,它是IFEO里第一個(gè)被處理的參數(shù),其作用是屬于比較匪夷所思的,系統(tǒng)如果發(fā)現(xiàn)某個(gè)程序文件在IFEO列表中,它就會(huì)首先來(lái)讀取Debugger參數(shù),如果該參數(shù)不為空,系統(tǒng)則會(huì)把Debugger參數(shù)里指定的程序文件名作為用戶試圖啟動(dòng)的程序執(zhí)行請(qǐng)求來(lái)處理,而僅僅把用戶試圖啟動(dòng)的程序作為Debugger參數(shù)里指定的程序文件名的參數(shù)發(fā)送過(guò)去!光是這個(gè)概念大概就足夠一部分人無(wú)法理解了,所以我們放簡(jiǎn)單點(diǎn)說(shuō),例如有兩個(gè)客人在一起吃自助餐,其中一個(gè)客人(用戶)委托另一個(gè)客人(系統(tǒng))去拿食物時(shí)順便幫自己帶點(diǎn)食物回來(lái)(啟動(dòng)程序的請(qǐng)求),可是系統(tǒng)在幫用戶裝了一盤(pán)子食物并打算回來(lái)時(shí)卻發(fā)現(xiàn)另一桌上有個(gè)客人(Debugger參數(shù)指定的程序文件)居然是自己小學(xué)里的暗戀對(duì)象!于是系統(tǒng)直接端著原本要拿給用戶的食物放到那桌客人那里共同回憶往事去了(將啟動(dòng)程序請(qǐng)求的執(zhí)行文件映像名和最初參數(shù)組合轉(zhuǎn)換成新的命令行參數(shù)……),最終吃到食物的自然就是Debugger客人(獲得命令行參數(shù)),至此系統(tǒng)就忙著執(zhí)行Debugger客人的啟動(dòng)程序請(qǐng)求而把發(fā)出最初始啟動(dòng)程序請(qǐng)求的用戶和那盤(pán)食物(都送給Debugger客人做命令行參數(shù)了)給遺忘了。
  在系統(tǒng)執(zhí)行的邏輯里,這就意味著,當(dāng)一個(gè)設(shè)置了IFEO項(xiàng)Debugger參數(shù)指定為“notepad.exe”的“iexplore.exe”被用戶以命令行參數(shù)“-nohome bbs.nettf.net”請(qǐng)求執(zhí)行時(shí),系統(tǒng)實(shí)際上到了IFEO那里就跑去執(zhí)行notepad.exe了,而原來(lái)收到的執(zhí)行請(qǐng)求的文件名和參數(shù)則被轉(zhuǎn)化為整個(gè)命令行參數(shù)“C:\Program Files\Internet Explorer\IEXPLORE.EXE - nohome bbs.nettf.net”來(lái)提交給notepad.exe執(zhí)行,所以最終執(zhí)行的是“notepad.exe C:\Program Files\Internet Explorer\IEXPLORE.EXE - nohome bbs.nettf.net”,即用戶原來(lái)要執(zhí)行的程序文件名iexplore.exe被替換為notepad.exe,而原來(lái)的整串命令行加上iexplore.exe自身,都被作為新的命令行參數(shù)發(fā)送到notepad.exe去執(zhí)行了,所以用戶最終看到的是記事本的界面,并可能出現(xiàn)兩種情況,一是記事本把整個(gè)iexplore.exe都作為文本讀了出來(lái),二是記事本彈出錯(cuò)誤信息報(bào)告“文件名不正確”,這取決于iexplore.exe原來(lái)是作為光桿司令狀態(tài)請(qǐng)求執(zhí)行(無(wú)附帶運(yùn)行命令行參數(shù))的還是帶命令行參數(shù)執(zhí)行的。
  Debugger參數(shù)存在的本意是為了讓程序員能夠通過(guò)雙擊程序文件直接進(jìn)入調(diào)試器里調(diào)試自己的程序,曾經(jīng)調(diào)試過(guò)程序的朋友也許會(huì)有一個(gè)疑問(wèn),既然程序啟動(dòng)時(shí)都要經(jīng)過(guò)IFEO這一步,那么在調(diào)試器里點(diǎn)擊啟動(dòng)剛被Debugger參數(shù)送進(jìn)來(lái)的程序時(shí)豈不是又會(huì)因?yàn)檫@個(gè)法則的存在而導(dǎo)致再次產(chǎn)生一個(gè)調(diào)試器進(jìn)程?微軟并不是傻子,他們理所當(dāng)然的考慮到了這一點(diǎn),因此一個(gè)程序啟動(dòng)時(shí)是否會(huì)調(diào)用到IFEO規(guī)則取決于它是否“從命令行調(diào)用”的,那么“從命令行調(diào)用”該怎么理解呢?例如我們?cè)诿钐崾痉飯?zhí)行taskmgr.exe,這就是一個(gè)典型的“從命令行調(diào)用”的執(zhí)行請(qǐng)求,而我們?cè)邳c(diǎn)擊桌面上、普通應(yīng)用程序菜單里的taskmgr.exe時(shí),系統(tǒng)都會(huì)將其視為由外殼程序Explorer.exe傳遞過(guò)來(lái)的執(zhí)行請(qǐng)求,這樣一來(lái),它也屬于“從命令行調(diào)用”的范圍而觸發(fā)IFEO規(guī)則了。為了與用戶操作區(qū)分開(kāi)來(lái),系統(tǒng)自身加載的程序、調(diào)試器里啟動(dòng)的程序,它們就不屬于“從命令行調(diào)用”的范圍,從而繞開(kāi)了IFEO,避免了這個(gè)加載過(guò)程無(wú)休止的循環(huán)下去。
  從編程角度來(lái)說(shuō)明“命令行調(diào)用”,那就是取決于啟動(dòng)程序時(shí)CreateProcess是使用lpCommandLine(命令行)還是lpApplicationName(程序文件名)來(lái)執(zhí)行,默認(rèn)情況下大部分程序員編寫(xiě)的調(diào)用習(xí)慣是lpCommandLine——命令行調(diào)用
  BOOL CreateProcess
  (
  LPCTSTR lpApplicationName,
  LPTSTR lpCommandLine,
  LPSECURITY_ATTRIBUTES lpProcessAttributes。
  LPSECURITY_ATTRIBUTES lpThreadAttributes,
  BOOL bInheritHandles,
  DWORD dwCreationFlags,
  LPVOID lpEnvironment,
  LPCTSTR lpCurrentDirectory,
  LPSTARTUPINFO lpStartupInfo,
  LPPROCESS_INFORMATION lpProcessInformation
  );
  由于Debugger參數(shù)的這種特殊作用,它又被稱(chēng)為“重定向”(Redirection),而利用它進(jìn)行的攻擊,又被稱(chēng)為“重定向劫持”(Redirection Hijack),它和“映像劫持”(Image Hijack,或IFEO Hijack)只是稱(chēng)呼不同,實(shí)際上都是一樣的技術(shù)手段。
  講解完Debugger參數(shù)的作用,現(xiàn)在我們來(lái)看看“映像劫持”到底是怎么一回事,遭遇流行“映像劫持”病毒的系統(tǒng)表現(xiàn)為常見(jiàn)的殺毒軟件、防火墻、安全檢測(cè)工具等均提示“找不到文件”或執(zhí)行了沒(méi)有反應(yīng),于是大部分用戶只能去重裝系統(tǒng)了,但是有經(jīng)驗(yàn)或者歪打正著的用戶將這個(gè)程序改了個(gè)名字,就發(fā)現(xiàn)它又能正常運(yùn)行了,這是為什么?答案就是IFEO被人為設(shè)置了針對(duì)這些流行工具的可執(zhí)行文件名的列表了,而且Debugger參數(shù)指向不存在的文件甚至病毒本身!
  以超級(jí)巡警的主要執(zhí)行文件AST.exe為例,首先,有個(gè)文件名為kkk.exe的惡意程序向IFEO列表里寫(xiě)入AST.exe項(xiàng),并設(shè)置其Debugger指向kkk.exe,于是系統(tǒng)就會(huì)認(rèn)為kkk.exe是AST.exe的調(diào)試器,這樣每次用戶點(diǎn)擊執(zhí)行AST.exe時(shí),系統(tǒng)執(zhí)行的實(shí)際上是作為調(diào)試器身份的kkk.exe,至于本該被執(zhí)行的AST.exe,此刻只能被當(dāng)作kkk.exe的執(zhí)行參數(shù)來(lái)傳遞而已,而由于kkk.exe不是調(diào)試器性質(zhì)的程序,甚至惡意程序作者都沒(méi)有編寫(xiě)執(zhí)行參數(shù)的處理代碼,所以被啟動(dòng)的永遠(yuǎn)只有kkk.exe自己一個(gè),用戶每次點(diǎn)擊那些“打不開(kāi)”的安全工具,實(shí)際上就等于又執(zhí)行了一次惡意程序本體!這個(gè)招數(shù)被廣大使用“映像劫持”技術(shù)的惡意軟件所青睞,隨著OSO這款超級(jí)U盤(pán)病毒與AV終結(jié)者(隨機(jī)數(shù)病毒、8位字母病毒)這兩個(gè)滅殺了大部分流行安全工具和殺毒軟件的惡意程序肆虐網(wǎng)絡(luò)以后,一時(shí)之間全國(guó)上下人心惶惶,其實(shí)它們最大改進(jìn)的技術(shù)核心就是利用IFEO把自己設(shè)置為各種流行安全工具的調(diào)試器罷了,破解之道尤其簡(jiǎn)單,只需要將安全工具的執(zhí)行文件隨便改個(gè)名字,而這個(gè)安全工具又不在乎互斥量的存在,那么它就能正常運(yùn)行了,除非你運(yùn)氣太好又改到另一個(gè)也處于黑名單內(nèi)的文件名去了,例如把AST.exe改為IceSword.exe。
  小知識(shí):互斥量
  為了預(yù)防用戶簡(jiǎn)單的更改一個(gè)文件名就使得大部分安全工具破籠而出,一些木馬還同時(shí)采用了一種被稱(chēng)為“互斥量”的技術(shù)來(lái)徹底阻止安全工具運(yùn)行。在系統(tǒng)里,有一類(lèi)特殊的系統(tǒng)對(duì)象被稱(chēng)為“互斥量”(Mutex),它們的存在是為了減少系統(tǒng)開(kāi)銷(xiāo)而設(shè),例如一些工具在運(yùn)行時(shí)會(huì)檢測(cè)是否已經(jīng)有另一個(gè)自己的副本在運(yùn)行,要做這種檢測(cè)最有效率的方法就是在第一次運(yùn)行時(shí)創(chuàng)建一個(gè)互斥量,以后再運(yùn)行時(shí)檢測(cè)即可,這實(shí)際上是很簡(jiǎn)單的方法,因?yàn)橄到y(tǒng)會(huì)為我們保存已經(jīng)創(chuàng)建的互斥量,直到程序請(qǐng)求銷(xiāo)毀互斥量,否則它將一直存在。這樣一來(lái),問(wèn)題又出現(xiàn)了,如果惡意程序掌握了一些安全工具的互斥量并偽造呢?這些安全工具就會(huì)因?yàn)闄z測(cè)到“自身已經(jīng)運(yùn)行”而放棄繼續(xù)執(zhí)行的權(quán)利,惡意程序就沒(méi)有克星了。
  而那些雙擊時(shí)明明程序文件就在眼前,系統(tǒng)卻報(bào)錯(cuò)說(shuō)“找不到文件”,又是什么回事呢?這也是IFEO的另一種應(yīng)用罷了,其秘訣是將Debugger參數(shù)指向一個(gè)不存在的文件位置,這樣系統(tǒng)就會(huì)因?yàn)檎也坏竭@個(gè)調(diào)試器而無(wú)法順利執(zhí)行下去,如果系統(tǒng)老老實(shí)實(shí)報(bào)出“找不到調(diào)試器”的錯(cuò)誤提示那倒還好了,但就不知道微軟是出于對(duì)IFEO這個(gè)東西存在的事實(shí)掩蓋還是什么苦衷,卻死活不肯承認(rèn)是Debugger指向的調(diào)試器不存在導(dǎo)致的錯(cuò)誤,而是把已經(jīng)被“變異”成為命令行參數(shù)無(wú)法進(jìn)入系統(tǒng)創(chuàng)建進(jìn)程機(jī)制的原執(zhí)行請(qǐng)求作為“找不到的文件”給報(bào)了回去,于是未曾了解過(guò)IFEO的用戶只能莫名其妙的看著眼前就存在而系統(tǒng)“不承認(rèn)”的安全工具發(fā)愣了。
  作者:小金 轉(zhuǎn)載請(qǐng)勿斬首,謝謝
  四. 防范“映像劫持”
  好了,前面說(shuō)了這么多,大概又嚇得一批人開(kāi)始冒冷汗了吧,我們現(xiàn)在就來(lái)學(xué)習(xí)如何防范和破解“映像劫持”。
  判斷你的機(jī)器是否被劫持
  最簡(jiǎn)單的方法是逐個(gè)運(yùn)行你常用的安全工具,檢查是否出現(xiàn)“無(wú)法找到文件”或者干脆直接沒(méi)了反應(yīng)的,當(dāng)然,執(zhí)行結(jié)果和預(yù)期差別太大的也要被懷疑為劫持,例如你執(zhí)行IceSword.exe反而是你的QQ運(yùn)行了,那就不必我多說(shuō)了。
  其實(shí)只要注冊(cè)表編輯器regedit.exe、regedt32.exe沒(méi)有被劫持,那我們直接用它進(jìn)入“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options”這個(gè)注冊(cè)表項(xiàng)并展開(kāi)里面的子項(xiàng)列表一個(gè)個(gè)看下來(lái)確認(rèn)是否出現(xiàn)Debugger參數(shù)或其他可能影響程序運(yùn)行的堆管理參數(shù),便可得知機(jī)器是否被劫持。
  如果注冊(cè)表編輯器被劫持了怎么辦?直接改個(gè)名就能用了啊……
  更簡(jiǎn)單的方法,是使用Sysinternals的Autoruns,點(diǎn)擊它的“Image Hijacks”選項(xiàng)卡,即可看到被劫持的程序項(xiàng)了。
  追查劫持來(lái)源
  如果不幸你的機(jī)器上已經(jīng)成為“映像劫持”的受害者,請(qǐng)記錄好Debugger指向的程序位置,也不要試圖再執(zhí)行那些安全工具,首先應(yīng)該嘗試刪除受影響的IFEO項(xiàng),然后刷新注冊(cè)表看看數(shù)據(jù)是否馬上恢復(fù)了,如果馬上恢復(fù),則說(shuō)明后臺(tái)里有程序正在實(shí)時(shí)判斷和寫(xiě)入IFEO,這時(shí)候必須拿出Sysinternals出品的注冊(cè)表監(jiān)控工具Regmon或類(lèi)似工具,設(shè)置Filter為你正在嘗試刪除的安全工具的IFEO項(xiàng),很快就能發(fā)現(xiàn)具體是什么進(jìn)程在操作注冊(cè)表了,然后將IceSword改名(如果已經(jīng)被劫持),在它的進(jìn)程列表里將相應(yīng)進(jìn)程終止掉。如果這個(gè)進(jìn)程立即又重生了呢?再終止一次,然后迅速點(diǎn)擊IceSword的“監(jiān)視進(jìn)線程創(chuàng)建”,你就能發(fā)現(xiàn)上一次搗亂的程序是什么名字了,將它記錄下來(lái),再開(kāi)啟一個(gè)Sysinternals的工具“Process Explorer”,在對(duì)應(yīng)進(jìn)程上點(diǎn)擊右鍵選擇“Suspend”,這個(gè)進(jìn)程就會(huì)被掛起,用IceSword和它配合把相關(guān)惡意進(jìn)程都掛起后,再使用IceSword的文件功能里的“強(qiáng)制刪除”,在這個(gè)程序還沒(méi)來(lái)得及反應(yīng)時(shí)就把它們的本體給殲滅,這時(shí)候再返回Process Explorer里按照大小排列從最大的一個(gè)守護(hù)進(jìn)程開(kāi)始Kill Process即可,由于沒(méi)有了映像文件存在,它們意欲重新建立木馬帝國(guó)的賊心也就無(wú)法實(shí)現(xiàn)了。
  如果查殺過(guò)程更為復(fù)雜的話,請(qǐng)自行參閱相關(guān)文章,這里就不再贅述了。
  如此實(shí)現(xiàn)“免疫”?不被推薦的做法
  由于AV終結(jié)者搞得人心惶惶,一時(shí)間網(wǎng)絡(luò)上開(kāi)始流傳“免疫映像劫持”甚至“利用映像劫持免疫大部分常見(jiàn)病毒”的做法,對(duì)于這些方法的最初提供者,我相信他們的出發(fā)點(diǎn)是好的,只是,從嚴(yán)格的角度來(lái)看,這卻是不可取的。
  首先是“免疫映像劫持”,具體的方法是,例如免疫威金病毒“logo_1.exe”,則在IFEO列表里建立一個(gè)“logo_1.exe”項(xiàng),然后設(shè)定它的Debugger參數(shù)為它自身即“logo_1.exe”,根據(jù)原作者解釋?zhuān)湓硎沁f歸死循環(huán):“當(dāng)Debugger的值等于本身時(shí),就是調(diào)用自身來(lái)調(diào)試自己,結(jié)果自己不是調(diào)試器,又來(lái)一次,遞歸了,就進(jìn)入了死循環(huán),也就不能啟動(dòng)了。”
  這種方法雖然有效(最后的現(xiàn)象是“找不到文件”),但是它會(huì)導(dǎo)致系統(tǒng)在短時(shí)間內(nèi)陷入一個(gè)CreateProcess循環(huán)和命令參數(shù)的字符串累加狀態(tài),會(huì)消耗一定的資源,最終沒(méi)能執(zhí)行程序是因?yàn)橄到y(tǒng)使用CreateProcess啟動(dòng)的實(shí)例會(huì)被它自身代替執(zhí)行,從而造成死循環(huán),而且命令行的長(zhǎng)度是有系統(tǒng)限制的,到一定范圍就會(huì)出錯(cuò)了,尤其在可以接受命令行參數(shù)的程序里,你甚至?xí)l(fā)現(xiàn)硬盤(pán)狂轉(zhuǎn)了好一會(huì)兒才彈出錯(cuò)誤提示,這段時(shí)間里就是在死循環(huán)傳遞狀態(tài)了,最終由于超過(guò)系統(tǒng)限制的命令行長(zhǎng)度而導(dǎo)致系統(tǒng)傳遞執(zhí)行請(qǐng)求時(shí)出錯(cuò),才得以跳出這個(gè)死循環(huán),換一個(gè)角度來(lái)看,如果系統(tǒng)沒(méi)有限制命令行長(zhǎng)度,那么這個(gè)操作很可能直接導(dǎo)致系統(tǒng)所有資源都消耗在這個(gè)自己反復(fù)執(zhí)行自己的“調(diào)試器”上了。
  至于“利用映像劫持免疫大部分常見(jiàn)病毒”的做法,發(fā)起號(hào)召者模仿“映像劫持”后門(mén)屏蔽大部分常用安全工具的原理,搜集了許多流行危害程序的可執(zhí)行文件名加以前面提到的遞歸死循環(huán)方法達(dá)到目的,如果不計(jì)較前面提到的遞歸死循環(huán)缺點(diǎn),似乎這個(gè)方法是可行的。
  然而這真的可行嗎?世界上存在許多與某些系統(tǒng)文件同名同姓的社交型后門(mén),如位置不同而名字相同的命令提示符輸入法控制程序“conime.exe”(被OSO超級(jí)U盤(pán)病毒借用名字)、重要程序Rundll32.exe被某些木馬替換為自身、甚至IE瀏覽器主體iexplore.exe也存在被木馬偽造文件名的案例,如此一來(lái)不知道多少正常的系統(tǒng)程序可能會(huì)被這份“免疫列表”給誤殺了,我僅僅粗略瀏覽了一下就發(fā)現(xiàn)msiexec.exe居然存在“免疫列表”中,要知道這可是微軟安裝程序的主執(zhí)行體啊……
  爭(zhēng)議話題:是否禁止IFEO列表權(quán)限?
  同時(shí),網(wǎng)上還流傳著一個(gè)讓初級(jí)用戶看不懂的做法,那就是關(guān)閉IFEO列表的寫(xiě)入權(quán)限,具體操作如下:
  ?執(zhí)行32位注冊(cè)表編輯器regedt32.exe
  ?定位到HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
  ?確保焦點(diǎn)在Image File Execution Options上,選擇“安全”—“權(quán)限”
  ?將出現(xiàn)的用戶列表內(nèi)所有帶有“寫(xiě)入”的權(quán)限去掉,確定退出
  這樣一來(lái),任何對(duì)IFEO的寫(xiě)入操作都失效了,也就起了免疫效果。這個(gè)方法對(duì)一般用戶而言還是不錯(cuò)的,除非遭遇到一些特殊的需要往里面寫(xiě)入堆管理參數(shù)的程序,否則我建議一般用戶還是禁止此項(xiàng),從而杜絕一切IFEO類(lèi)病毒來(lái)襲。
  而爭(zhēng)議正在于此,因?yàn)閺拈L(zhǎng)計(jì)議來(lái)看,用戶很可能會(huì)遇到需要往IFEO列表里寫(xiě)入數(shù)據(jù)的正常程序,徹底禁止了IFEO的寫(xiě)入可能會(huì)導(dǎo)致不可預(yù)見(jiàn)的后果,既然如此,我們就采取折中的方法好了,使用HIPS(主機(jī)入侵防御系統(tǒng))的注冊(cè)表防御體系RD(Registry Defend),為我們提供一種兩者都能兼顧的IFEO管理方法!
  以SSM為例,首先確保RD體系模塊已經(jīng)開(kāi)啟,然后添加新監(jiān)視規(guī)則,“鍵路徑”指向HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options,“操作”為“當(dāng)更改時(shí)報(bào)警”,記得“包含值”選上,最后把“子鍵深度最大值”設(shè)為“3”,點(diǎn)擊確定生成新的監(jiān)視規(guī)則,然后在“規(guī)則”主界面里確保“存取”、“刪除”、“寫(xiě)入”的操作均為疑問(wèn)狀態(tài),這是表示在相關(guān)鍵值被進(jìn)行寫(xiě)入操作時(shí)彈出消息詢(xún)問(wèn)用戶,最后點(diǎn)擊“應(yīng)用設(shè)定”讓規(guī)則生效,從此只需開(kāi)著SSM,映像劫持就離你遠(yuǎn)去了。
  五. 千篇一律的結(jié)語(yǔ)
  道高一尺,魔高一丈,當(dāng)幾乎所有可能利用的啟動(dòng)項(xiàng)都被安全工具翻了個(gè)遍以后,與安全對(duì)立的技術(shù)也就不得不往上提高一個(gè)檔次,于是無(wú)論什么歪門(mén)邪道的招數(shù),只要能夠被利用,哪怕它原意是好的,也會(huì)被改寫(xiě)定義,從這次的映像劫持事件可以看出,這個(gè)系統(tǒng)遠(yuǎn)遠(yuǎn)不如我們想像中那么容易被掌握,尤其對(duì)普通用戶而言,這次技術(shù)的誤用簡(jiǎn)直是他們的滅頂之災(zāi)!在安全技術(shù)與反安全技術(shù)斗爭(zhēng)激烈的今天,我們用戶越來(lái)越有在夾縫中生存的感覺(jué)了,當(dāng)年輕松就可以得到的隨便開(kāi)多少個(gè)網(wǎng)頁(yè)都不會(huì)帶來(lái)一個(gè)病毒的日子早已遠(yuǎn)去,要想在這個(gè)瘋狂的世界里得以保全,我們只能借助于各種工具的守護(hù),和學(xué)習(xí)更多本來(lái)可以不用接觸的安全知識(shí),難道這真的要變成互聯(lián)網(wǎng)的生存法則嗎?
  =================================
  后記:
  發(fā)現(xiàn)一個(gè)有趣的現(xiàn)象,在百度上搜索映像劫持,會(huì)得到一堆結(jié)果返回的網(wǎng)頁(yè)里都有這么一句話:
  映像劫持原理:
  Windows NT系統(tǒng)在執(zhí)行一個(gè)從命令行調(diào)用的可執(zhí)行文件運(yùn)行請(qǐng)求時(shí),首先會(huì)檢查這是否是一個(gè)可執(zhí)行文件,如果是,又是什么格式的,然后就會(huì)檢查是否存在。
  這段話看著是不是莫名其妙?沒(méi)頭沒(méi)尾的,經(jīng)過(guò)我耐心查找,終于在一個(gè)角落找到了原始出處,感謝tombkeeper的撰文(節(jié)選):
  Windows NT系統(tǒng)在執(zhí)行一個(gè)從命令行調(diào)用的可執(zhí)行文件運(yùn)行請(qǐng)求時(shí),首先會(huì)檢查這是否是一個(gè)可執(zhí)行文件,如果是,又是什么格式的,然后就會(huì)檢查是否存在:
  [HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ImageName]
  如果存在,首先會(huì)試圖讀取這個(gè)鍵值:
  [HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ImageName]
  "Debugger"="debug_prog"
  如果存在,就執(zhí)行“debug_prog ImageName”
  很明顯,被流傳的“原理”來(lái)自tombkeeper的某篇文章中的前一段,或許抄襲者不明白后面接著的注冊(cè)表鍵值是什么意思,有什么重要作用,就想當(dāng)然的截?cái)嗔耍谑,這篇抄襲不完整的斷章取義文章經(jīng)過(guò)一傳十,十傳百的散播途徑后,終于成為了鋪天蓋地的“真理”,也難怪那么多人對(duì)IFEO感覺(jué)很好奇,因?yàn)楣饪茨切┐蟛糠治恼露际侵挥羞@么一段的,不信大家可以找找“IFEO”關(guān)鍵字,看看里面對(duì)“原理”的描述,真無(wú)語(yǔ)了,哎……


本文出自:億恩科技【xuefeilisp.com】

服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經(jīng)營(yíng)性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經(jīng)營(yíng)性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經(jīng)營(yíng)性ICP/ISP證:贛B2-20080012
  • 服務(wù)器/云主機(jī) 24小時(shí)售后服務(wù)電話:0371-60135900
  • 虛擬主機(jī)/智能建站 24小時(shí)售后服務(wù)電話:0371-60135900
  • 專(zhuān)注服務(wù)器托管17年
    掃掃關(guān)注-微信公眾號(hào)
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權(quán)所有  地址:鄭州市高新區(qū)翠竹街1號(hào)總部企業(yè)基地億恩大廈  法律顧問(wèn):河南亞太人律師事務(wù)所郝建鋒、杜慧月律師   京公網(wǎng)安備41019702002023號(hào)
      0
     
     
     
     

    0371-60135900
    7*24小時(shí)客服服務(wù)熱線