解析映像劫持技術(shù)
更新時間:2008年06月26日 22:19:06 作者:
詭異的中毒現(xiàn)象
四. 防范“映像劫持”
好了,前面說了這么多,大概又嚇得一批人開始冒冷汗了吧,我們現(xiàn)在就來學(xué)習(xí)如何防范和破解“映像劫持”。
判斷你的機(jī)器是否被劫持
最簡單的方法是逐個運(yùn)行你常用的安全工具,檢查是否出現(xiàn)“無法找到文件”或者干脆直接沒了反應(yīng)的,當(dāng)然,執(zhí)行結(jié)果和預(yù)期差別太大的也要被懷疑為劫持,例如你執(zhí)行IceSword.exe反而是你的QQ運(yùn)行了,那就不必我多說了。
其實(shí)只要注冊表編輯器regedit.exe、regedt32.exe沒有被劫持,那我們直接用它進(jìn)入“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options”這個注冊表項并展開里面的子項列表一個個看下來確認(rèn)是否出現(xiàn)Debugger參數(shù)或其他可能影響程序運(yùn)行的堆管理參數(shù),便可得知機(jī)器是否被劫持。
如果注冊表編輯器被劫持了怎么辦?直接改個名就能用了啊……
更簡單的方法,是使用Sysinternals的Autoruns,點(diǎn)擊它的“Image Hijacks”選項卡,即可看到被劫持的程序項了。
追查劫持來源
如果不幸你的機(jī)器上已經(jīng)成為“映像劫持”的受害者,請記錄好Debugger指向的程序位置,也不要試圖再執(zhí)行那些安全工具,首先應(yīng)該嘗試刪除受影響的IFEO項,然后刷新注冊表看看數(shù)據(jù)是否馬上恢復(fù)了,如果馬上恢復(fù),則說明后臺里有程序正在實(shí)時判斷和寫入IFEO,這時候必須拿出Sysinternals出品的注冊表監(jiān)控工具Regmon或類似工具,設(shè)置Filter為你正在嘗試刪除的安全工具的IFEO項,很快就能發(fā)現(xiàn)具體是什么進(jìn)程在操作注冊表了,然后將IceSword改名(如果已經(jīng)被劫持),在它的進(jìn)程列表里將相應(yīng)進(jìn)程終止掉。如果這個進(jìn)程立即又重生了呢?再終止一次,然后迅速點(diǎn)擊IceSword的“監(jiān)視進(jìn)線程創(chuàng)建”,你就能發(fā)現(xiàn)上一次搗亂的程序是什么名字了,將它記錄下來,再開啟一個Sysinternals的工具“Process Explorer”,在對應(yīng)進(jìn)程上點(diǎn)擊右鍵選擇“Suspend”,這個進(jìn)程就會被掛起,用IceSword和它配合把相關(guān)惡意進(jìn)程都掛起后,再使用IceSword的文件功能里的“強(qiáng)制刪除”,在這個程序還沒來得及反應(yīng)時就把它們的本體給殲滅,這時候再返回Process Explorer里按照大小排列從最大的一個守護(hù)進(jìn)程開始Kill Process即可,由于沒有了映像文件存在,它們意欲重新建立木馬帝國的賊心也就無法實(shí)現(xiàn)了。
如果查殺過程更為復(fù)雜的話,請自行參閱相關(guān)文章,這里就不再贅述了。
如此實(shí)現(xiàn)“免疫”?不被推薦的做法
由于AV終結(jié)者搞得人心惶惶,一時間網(wǎng)絡(luò)上開始流傳“免疫映像劫持”甚至“利用映像劫持免疫大部分常見病毒”的做法,對于這些方法的最初提供者,我相信他們的出發(fā)點(diǎn)是好的,只是,從嚴(yán)格的角度來看,這卻是不可取的。
首先是“免疫映像劫持”,具體的方法是,例如免疫威金病毒“l(fā)ogo_1.exe”,則在IFEO列表里建立一個“l(fā)ogo_1.exe”項,然后設(shè)定它的Debugger參數(shù)為它自身即“l(fā)ogo_1.exe”,根據(jù)原作者解釋,其原理是遞歸死循環(huán):“當(dāng)Debugger的值等于本身時,就是調(diào)用自身來調(diào)試自己,結(jié)果自己不是調(diào)試器,又來一次,遞歸了,就進(jìn)入了死循環(huán),也就不能啟動了?!?
這種方法雖然有效(最后的現(xiàn)象是“找不到文件”),但是它會導(dǎo)致系統(tǒng)在短時間內(nèi)陷入一個CreateProcess循環(huán)和命令參數(shù)的字符串累加狀態(tài),會消耗一定的資源,最終沒能執(zhí)行程序是因為系統(tǒng)使用CreateProcess啟動的實(shí)例會被它自身代替執(zhí)行,從而造成死循環(huán),而且命令行的長度是有系統(tǒng)限制的,到一定范圍就會出錯了,尤其在可以接受命令行參數(shù)的程序里,你甚至?xí)l(fā)現(xiàn)硬盤狂轉(zhuǎn)了好一會兒才彈出錯誤提示,這段時間里就是在死循環(huán)傳遞狀態(tài)了,最終由于超過系統(tǒng)限制的命令行長度而導(dǎo)致系統(tǒng)傳遞執(zhí)行請求時出錯,才得以跳出這個死循環(huán),換一個角度來看,如果系統(tǒng)沒有限制命令行長度,那么這個操作很可能直接導(dǎo)致系統(tǒng)所有資源都消耗在這個自己反復(fù)執(zhí)行自己的“調(diào)試器”上了。
至于“利用映像劫持免疫大部分常見病毒”的做法,發(fā)起號召者模仿“映像劫持”后門屏蔽大部分常用安全工具的原理,搜集了許多流行危害程序的可執(zhí)行文件名加以前面提到的遞歸死循環(huán)方法達(dá)到目的,如果不計較前面提到的遞歸死循環(huán)缺點(diǎn),似乎這個方法是可行的。
然而這真的可行嗎?世界上存在許多與某些系統(tǒng)文件同名同姓的社交型后門,如位置不同而名字相同的命令提示符輸入法控制程序“conime.exe”(被OSO超級U盤病毒借用名字)、重要程序Rundll32.exe被某些木馬替換為自身、甚至IE瀏覽器主體iexplore.exe也存在被木馬偽造文件名的案例,如此一來不知道多少正常的系統(tǒng)程序可能會被這份“免疫列表”給誤殺了,我僅僅粗略瀏覽了一下就發(fā)現(xiàn)msiexec.exe居然存在“免疫列表”中,要知道這可是微軟安裝程序的主執(zhí)行體啊……
爭議話題:是否禁止IFEO列表權(quán)限?
同時,網(wǎng)上還流傳著一個讓初級用戶看不懂的做法,那就是關(guān)閉IFEO列表的寫入權(quán)限,具體操作如下:
?執(zhí)行32位注冊表編輯器regedt32.exe
?定位到HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
?確保焦點(diǎn)在Image File Execution Options上,選擇“安全”—“權(quán)限”
?將出現(xiàn)的用戶列表內(nèi)所有帶有“寫入”的權(quán)限去掉,確定退出
這樣一來,任何對IFEO的寫入操作都失效了,也就起了免疫效果。這個方法對一般用戶而言還是不錯的,除非遭遇到一些特殊的需要往里面寫入堆管理參數(shù)的程序,否則我建議一般用戶還是禁止此項,從而杜絕一切IFEO類病毒來襲。
而爭議正在于此,因為從長計議來看,用戶很可能會遇到需要往IFEO列表里寫入數(shù)據(jù)的正常程序,徹底禁止了IFEO的寫入可能會導(dǎo)致不可預(yù)見的后果,既然如此,我們就采取折中的方法好了,使用HIPS(主機(jī)入侵防御系統(tǒng))的注冊表防御體系RD(Registry Defend),為我們提供一種兩者都能兼顧的IFEO管理方法!
以SSM為例,首先確保RD體系模塊已經(jīng)開啟,然后添加新監(jiān)視規(guī)則,“鍵路徑”指向HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options,“操作”為“當(dāng)更改時報警”,記得“包含值”選上,最后把“子鍵深度最大值”設(shè)為“3”,點(diǎn)擊確定生成新的監(jiān)視規(guī)則,然后在“規(guī)則”主界面里確保“存取”、“刪除”、“寫入”的操作均為疑問狀態(tài),這是表示在相關(guān)鍵值被進(jìn)行寫入操作時彈出消息詢問用戶,最后點(diǎn)擊“應(yīng)用設(shè)定”讓規(guī)則生效,從此只需開著SSM,映像劫持就離你遠(yuǎn)去了。
五. 千篇一律的結(jié)語
道高一尺,魔高一丈,當(dāng)幾乎所有可能利用的啟動項都被安全工具翻了個遍以后,與安全對立的技術(shù)也就不得不往上提高一個檔次,于是無論什么歪門邪道的招數(shù),只要能夠被利用,哪怕它原意是好的,也會被改寫定義,從這次的映像劫持事件可以看出,這個系統(tǒng)遠(yuǎn)遠(yuǎn)不如我們想像中那么容易被掌握,尤其對普通用戶而言,這次技術(shù)的誤用簡直是他們的滅頂之災(zāi)!在安全技術(shù)與反安全技術(shù)斗爭激烈的今天,我們用戶越來越有在夾縫中生存的感覺了,當(dāng)年輕松就可以得到的隨便開多少個網(wǎng)頁都不會帶來一個病毒的日子早已遠(yuǎn)去,要想在這個瘋狂的世界里得以保全,我們只能借助于各種工具的守護(hù),和學(xué)習(xí)更多本來可以不用接觸的安全知識,難道這真的要變成互聯(lián)網(wǎng)的生存法則嗎?
=================================
后記:
發(fā)現(xiàn)一個有趣的現(xiàn)象,在百度上搜索映像劫持,會得到一堆結(jié)果返回的網(wǎng)頁里都有這么一句話:
映像劫持原理:
Windows NT系統(tǒng)在執(zhí)行一個從命令行調(diào)用的可執(zhí)行文件運(yùn)行請求時,首先會檢查這是否是一個可執(zhí)行文件,如果是,又是什么格式的,然后就會檢查是否存在。
這段話看著是不是莫名其妙?沒頭沒尾的,經(jīng)過我耐心查找,終于在一個角落找到了原始出處,感謝tombkeeper的撰文(節(jié)選):
Windows NT系統(tǒng)在執(zhí)行一個從命令行調(diào)用的可執(zhí)行文件運(yùn)行請求時,首先會檢查這是否是一個可執(zhí)行文件,如果是,又是什么格式的,然后就會檢查是否存在:
[HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ImageName]
如果存在,首先會試圖讀取這個鍵值:
[HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ImageName]
"Debugger"="debug_prog"
如果存在,就執(zhí)行“debug_prog ImageName”
很明顯,被流傳的“原理”來自tombkeeper的某篇文章中的前一段,或許抄襲者不明白后面接著的注冊表鍵值是什么意思,有什么重要作用,就想當(dāng)然的截斷了,于是,這篇抄襲不完整的斷章取義文章經(jīng)過一傳十,十傳百的散播途徑后,終于成為了鋪天蓋地的“真理”,也難怪那么多人對IFEO感覺很好奇,因為光看那些大部分文章都是只有這么一段的,不信大家可以找找“IFEO”關(guān)鍵字,看看里面對“原理”的描述,真無語了,哎……
相關(guān)文章
Web網(wǎng)絡(luò)安全漏洞分析SQL注入原理詳解
這篇文章主要為大家介紹了Web網(wǎng)絡(luò)安全漏洞分析SQL注入的原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-11-11突破神奇的Cloudflare防火墻的網(wǎng)絡(luò)安全學(xué)習(xí)
這篇文章主要為大家介紹了突破神奇的Cloudflare防火墻的網(wǎng)絡(luò)安全學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07網(wǎng)絡(luò)安全流量分析工具蟻劍詳細(xì)介紹
蟻劍(AntSword)是一款開源的跨平臺WebShell管理工具,它主要面向于合法授權(quán)的滲透測試安全人員以及進(jìn)行常規(guī)操作的網(wǎng)站管理員,蟻劍推崇模塊化的開發(fā)思想,遵循開源,就要開得漂亮的原則,致力于為不同層次的人群提供最簡單易懂、方便直接的代碼展示及其修改說明2022-09-09Web網(wǎng)絡(luò)安全分析二次注入攻擊原理詳解
這篇文章主要為大家講解介紹了Web網(wǎng)絡(luò)安全分析二次注入攻擊原理的詳解,有需要相關(guān)學(xué)習(xí)的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11SQL注入詳細(xì)講解(萬字長文,全網(wǎng)最全!)
SQL注入是比較常見的網(wǎng)絡(luò)攻擊方式之一,它不是利用操作系統(tǒng)的BUG來實(shí)現(xiàn)攻擊,而是針對程序員編寫時的疏忽,下面這篇文章主要給大家介紹了關(guān)于SQL注入詳細(xì)講解的相關(guān)資料,需要的朋友可以參考下2023-03-03