映像劫持原理

windows映像劫持技術(IFEO)
  基本症狀:可能有朋友遇到過這樣的情況,一個正常的程序,無論把它放在哪個位置,或者是一個程序重新用安裝盤修復過,都出現無法運行的情況,或是出錯提示爲“找不到文件”或者直接沒有運行起來的反應,或者是比如運行程序A卻成了執行B(可能是病毒),而改名後卻可以正常運行的現象。
  遭遇流行“映像劫持”病毒的系統表現爲常見的殺毒軟件、防火牆、安全檢測工具等均提示“找不到文件”或執行了沒有反應,於是大部分用戶只能去重裝系統了,但是有經驗或者歪打正着的用戶將這個程序改了個名字,就發現它又能正常運行了~~
  既然我們是介紹映像劫持技術(IFEO)相關,那我們就先介紹下:

一,什麼是映像劫持(IFEO)?

  1.所謂的映像劫持IFEO就是Image File Execution Options
  (其實應該稱爲“Image Hijack”。)
  它是位於註冊表
  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
  IFEO的本意是爲一些在默認系統環境中運行時可能引發錯誤的程序執行體提供特殊的環境設定。由於這個項主要是用來調試程序用的,對一般用戶意義不大。默認是隻有管理員和local system有權讀寫修改。
  當一個可執行程序位於IFEO的控制中時,它的內存分配則根據該程序的參數來設定,而WindowsN T架構的系統能通過這個註冊表項使用與可執行程序文件名匹配的項目作爲程序載入時的控制依據,最終得以設定一個程序的堆管理機制和一些輔助機制等。出於簡化原因,IFEO使用忽略路徑的方式來匹配它所要控制的程序文件名,所以程序無論放在哪個路徑,只要名字沒有變化,它就運行出問題。
  先看看常規病毒等怎麼修改註冊表來達到隨機啓動吧。
  病毒、蠕蟲和,***等仍然使用衆所皆知並且過度使用的註冊表鍵值,如下:
  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
  HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs
  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify
  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
  HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
  等等。
  2.另外一種劫持的方法是:在目標程序目錄下建立與系統DLL相同的導出函數,執行內容爲
  f=LoadLibrary(byref "c:\windows\system32\"+dllname)
  f=GetProcAddress(byval f,byref procname)
  !jmp f
  '(PowerBasic)
  ,在DLL初始化的時候可以幹一些壞事,以此來達到改變原應用程序的目的

二,具體使用資料:

  我們大家一起來看網絡上另一個朋友做得試驗:
  開始-運行-regedit,展開到:
  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
  然後選上Image File Execution Options,新建個項,然後,把這個項(默認在最後面)改成123.exe
  選上123.exe這個項,然後默認右邊是空白的,我們點右鍵,新建個“字串符”,然後改名爲“Debugger"
  這一步要做好,然後回車,就可以。。。再雙擊該鍵,修改數據數值(其實就是路徑)。。
  把它改爲 C:\windows\system32\CMD.exe
  (注:C:是系統盤,如果你係統安裝在D則改爲D:如果是NT或2K的系統的話,把Windows改成Winnt,下面如有再提起,類推。。。)
  好了,實驗下。~ .
  然後找個擴展名爲EXE的,(我這裏拿IcesWord.exe做實驗),改名爲123.exe。。。
  然後運行之。。。嘿嘿。。出現了DOS操作框,不知情的看着一閃閃的光標,肯定覺得特詭異。
  一次簡單的惡作劇就成咧。。。
  同理,病毒等也可以利用這樣的方法,把殺軟、安全工具等名字再進行重定向,指向病毒路徑
  所以,如果你把病毒清理掉後,重定向項沒有清理的話,由於IFEO的作用,沒被損壞的程序一樣運行不了!
  讓病毒迷失自我
  同上面的道理一樣,如果我們把病毒程序給重定向了,是不是病毒就不能運行了,答案是肯定的。
  WindowsRegistryEditorVersion5.00
  [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\ImageFileExecutionOptions\sppoolsv.exe]
  Debugger=123.exe
  [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\ImageFileExecutionOptions\logo_1.exe]
  Debugger=123.exe
  將上面的代碼保存爲後綴.reg的文件,雙擊它,是以金豬病毒和威金病毒爲例,這樣即使這些病毒在系統啓動項裏面,即使隨系統運行了,但是由於映象劫持的
  重定向作用,還是會被系統提示無法找到病毒文件(這裏是logo_1.exe和sppoolsv.exe)。

三,映像劫持的基本原理:

  QUOTE:
  NT系統在試圖執行一個從命令行調用的可執行文件運行請求時,先會檢查運行程序是不是可執行文件,如果是的話,再檢查格式的,然後就會檢查是否存在。。如果不存在的話,它會提示系統找不到文件或者是“指定的路徑不正確等等。。
  當然,把這些鍵刪除後,程序就可以運行!
  [ 引自 網絡技術論壇:]
  從實際現象來說,把IFEO直接稱爲“映像劫持”未免有點冤枉它了,因爲裏面大部分參數並不會導致今天這種局面的發生,惹禍的參數只有一個,那就是“Debugger”,將IFEO視爲映像劫持,大概是因爲國內一些人直接套用了“Image File Execution Options”的縮寫罷,在相對規範的來自Sysinternals的專業術語裏,利用這個技術的設計漏洞進行非法活動的行爲應該被稱爲“Image Hijack”,這纔是真正字面上的“映像劫持”!
  Debugger參數,直接翻譯爲“調試器”,它是IFEO裏第一個被處理的參數,其作用是屬於比較匪夷所思的,系統如果發現某個程序文件在IFEO列表中,它就會首先來讀取Debugger參數,如果該參數不爲空,系統則會把Debugger參數裏指定的程序文件名作爲用戶試圖啓動的程序執行請求來處理,而僅僅把用戶試圖啓動的程序作爲Debugger參數裏指定的程序文件名的參數發送過去!光是這個概念大概就足夠一部分人無法理解了,所以我們放簡單點說,例如有兩個客人在一起吃自助餐,其中一個客人(用戶)委託另一個客人(系統)去拿食物時順便幫自己帶點食物回來(啓動程序的請求),可是系統在幫用戶裝了一盤子食物並打算回來時卻發現另一桌上有個客人(Debugger參數指定的程序文件)居然是自己小學裏的暗戀對象!於是系統直接端着原本要拿給用戶的食物放到那桌客人那裏共同回憶往事去了(將啓動程序請求的執行文件映像名和最初參數組合轉換成新的命令行參數……),最終吃到食物的自然就是Debugger客人(獲得命令行參數),至此係統就忙着執行Debugger客人的啓動程序請求而把發出最初始啓動程序請求的用戶和那盤食物(都送給Debugger客人做命令行參數了)給遺忘了。
  在系統執行的邏輯裏,這就意味着,當一個設置了IFEO項Debugger參數指定爲“notepad.exe”的“iexplore.exe”被用戶以命令行參數“-nohome bbs.nettf.net”請求執行時,系統實際上到了IFEO那裏就跑去執行notepad.exe了,而原來收到的執行請求的文件名和參數則被轉化爲整個命令行參數“C:\Program Files\Internet Explorer\IEXPLORE.EXE - nohome bbs.nettf.net”來提交給notepad.exe執行,所以最終執行的是“notepad.exe C:\Program Files\Internet Explorer\IEXPLORE.EXE - nohome bbs.nettf.net”,即用戶原來要執行的程序文件名iexplore.exe被替換爲notepad.exe,而原來的整串命令行加上iexplore.exe自身,都被作爲新的命令行參數發送到notepad.exe去執行了,所以用戶最終看到的是記事本的界面,並可能出現兩種情況,一是記事本把整個iexplore.exe都作爲文本讀了出來,二是記事本彈出錯誤信息報告“文件名不正確”,這取決於iexplore.exe原來是作爲光桿司令狀態請求執行(無附帶運行命令行參數)的還是帶命令行參數執行的。
  Debugger參數存在的本意是爲了讓程序員能夠通過雙擊程序文件直接進入調試器裏調試自己的程序,曾經調試過程序的朋友也許會有一個疑問,既然程序啓動時都要經過IFEO這一步,那麼在調試器裏點擊啓動剛被Debugger參數送進來的程序時豈不是又會因爲這個法則的存在而導致再次產生一個調試器進程?微軟並不是傻子,他們理所當然的考慮到了這一點,因此一個程序啓動時是否會調用到IFEO規則取決於它是否“從命令行調用”的,那麼“從命令行調用”該怎麼理解呢?例如我們在命令提示符裏執行taskmgr.exe,這就是一個典型的“從命令行調用”的執行請求,而我們在點擊桌面上、普通應用程序菜單裏的taskmgr.exe時,系統都會將其視爲由外殼程序Explorer.exe傳遞過來的執行請求,這樣一來,它也屬於“從命令行調用”的範圍而觸發IFEO規則了。爲了與用戶操作區分開來,系統自身加載的程序、調試器裏啓動的程序,它們就不屬於“從命令行調用”的範圍,從而繞開了IFEO,避免了這個加載過程無休止的循環下去。
  由於Debugger參數的這種特殊作用,它又被稱爲“重定向”(Redirection),而利用它進行的***,又被稱爲“重定向劫持”(Redirection Hijack),它和“映像劫持”(Image Hijack,或IFEO Hijack)只是稱呼不同,實際上都是一樣的技術手段。
  講解完Debugger參數的作用,現在我們來看看“映像劫持”到底是怎麼一回事,遭遇流行“映像劫持”病毒的系統表現爲常見的殺毒軟件、防火牆、安全檢測工具等均提示“找不到文件”或執行了沒有反應,於是大部分用戶只能去重裝系統了,但是有經驗或者歪打正着的用戶將這個程序改了個名字,就發現它又能正常運行了,這是爲什麼?答案就是IFEO被人爲設置了針對這些流行工具的可執行文件名的列表了,而且Debugger參數指向不存在的文件甚至病毒本身!
  以超級巡警的主要執行文件AST.exe爲例,首先,有個文件名爲kkk.exe的惡意程序向IFEO列表裏寫入AST.exe項,並設置其Debugger指向kkk.exe,於是系統就會認爲kkk.exe是AST.exe的調試器,這樣每次用戶點擊執行AST.exe時,系統執行的實際上是作爲調試器身份的kkk.exe,至於本該被執行的AST.exe,此刻只能被當作kkk.exe的執行參數來傳遞而已,而由於kkk.exe不是調試器性質的程序,甚至惡意程序作者都沒有編寫執行參數的處理代碼,所以被啓動的永遠只有kkk.exe自己一個,用戶每次點擊那些“打不開”的安全工具,實際上就等於又執行了一次惡意程序本體!這個招數被廣大使用“映像劫持”技術的惡意軟件所青睞,隨着OSO這款超級U盤病毒與AV終結者(隨機數病毒、8位字母病毒)這兩個滅殺了大部分流行安全工具和殺毒軟件的惡意程序肆虐網絡以後,一時之間全國上下人心惶惶,其實它們最大改進的技術核心就是利用IFEO把自己設置爲各種流行安全工具的調試器罷了,破解之道尤其簡單,只需要將安全工具的執行文件隨便改個名字,而這個安全工具又不在乎互斥量的存在,那麼它就能正常運行了,除非你運氣太好又改到另一個也處於黑名單內的文件名去了,例如把AST.exe改爲IceSword.exe。

四,映像脅持的具體案例:

  引用JM的jzb770325001版主的一個分析案例:
  QUOTE:
  蔚爲壯觀的IFEO,稍微有些名氣的都掛了:
  HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\avp.exe
  HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\AgentSvr.exe
  HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\CCenter.exe
  HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\Rav.exe
  從這個案例,我們可以看到這個技術的強大之處!很多的殺軟進程和一些輔助殺軟或工具,全部被脅持,導致你遇到的所有殺軟都無法運行!
  試想如果更多病毒,利用於此,將是多麼可怕的事情!

五:如何解決並防範“映像劫持”?

  方法一: 限制法(轉自網絡搜索)
  它要修改Image File Execution Options,所先要有權限,纔可讀,於是。。一條思路就成了。。
  打開註冊表編輯器,定位到[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\ImageFileExecutionOptions\,選中該項,右鍵→權限→高級,取消administrator和system用戶的寫權限即可。
  方法二:快刀斬亂麻法
  打開註冊表編輯器,定位到[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\,把“ImageFileExecutionOptions”項刪除即可。
  方法三:利用Microsoft Sysinternals Suite
  更簡單的方法,是使用Sysinternals Suite(一個微軟的工具集合)中的Autoruns,點擊它的“Image Hijacks”選項卡,即可看到被劫持的程序項了。
  方法四:權限杜絕
  網上還流傳着一個讓初級用戶看不懂的做法,那就是關閉IFEO列表的寫入權限,具體操作如下:
  執行32位註冊表編輯器regedt32.exe
  定位到HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options;
  確保焦點在Image File Execution Options上,選擇“安全”—“權限”;
  將出現的用戶列表內所有帶有“寫入”的權限去掉,確定退出。
  這樣一來,任何對IFEO的寫入操作都失效了,也就起了免疫效果。這個方法對一般用戶而言還是不錯的,除非遭遇到一些特殊的需要往裏面寫入堆管理參數的程序。建議一般用戶還是禁止此項,從而杜絕一切IFEO類病毒來襲。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章