- Webmaster
- 註冊日: 2008/2/19
- 來自:
- 發表數: 15771
|
- [分享]有趣的特洛伊木馬原理
- 有趣的特洛伊木馬原理
------------------------------- 互動出版社 2002-01-06 17:31:15
一、 引言
特洛伊木馬是 Trojan Horse 的中譯,是借自"木馬屠城記"中那只木馬的名稱。古希臘有大軍圍攻特洛伊城,逾年無法攻下。有人獻計製造一隻高二丈的大木馬假裝作戰馬神,攻擊數天後仍然無功,遂留下木馬拔營而去。城中得到解圍的消息,及得到"木馬"這個奇異的戰利品,全城飲酒狂歡。到午夜時份,全城軍民盡入夢鄉,匿於木馬中的將士開秘門游繩而下,開啟城門及四處縱火,城外伏兵湧入,焚屠特洛伊城。後世稱這只木馬為"特洛伊木馬",現今電腦術語借用其名,意思是"一經進入,後患無窮"。特洛伊木馬原則上它和Laplink 、 PCanywhere 等程式一樣,只是一種遠端管理工具。而且本身不帶傷害性,也沒有感染力,所以不能稱之為病毒 (也有人稱之為第二代病毒);但卻常常被視之為病毒。原因是如果有人不當的使用,破壞力可以比病毒更強。
二、木馬攻擊原理
特洛伊木馬是一個程式,它駐留在目標電腦裡,可以隨電腦自動啟動並在某一連接進行偵聽,在對接收的資料識別後,對目標電腦執行特定的操作。木馬,其實質只是一個使用連接進行通信的網路客戶/伺服器程式。
1、基本概念:網路客戶/伺服器模式的原理是一台主機提供伺服器(伺服器),另一台主機接受伺服器(客戶機)。作為伺服器的主機一般會開啟一個預設的連接並進行監聽(Listen), 如果有客戶機向伺服器的這一連接提出連接請求(Connect Request), 伺服器上的相應程式就會自動執行,來回覆客戶機的請求,這個程式稱為守護程序(UNIX的術語,不過已經被移植到了MS系統上)。對於特洛伊木馬,被控制端就成為一台伺服器,控制端則是一台客戶機,G_server.exe是守護程序, G_client是客戶端應用程式。
2、程式實現:
可以使用VB或VC的Winsock控件來編寫網路客戶/伺服器程式, 實現方法如下:
伺服器端:
G_Server.LocalPort=7626(冰河的預設連接,可以改為別的值)
G_Server.Listen(等待連接)
客戶端:
G_Client.RemoteHost=ServerIP(設遠端位址為伺服器位址)
G_Client.RemotePort=7626(設遠端連接為冰河的預設連接)
(在這裡可以分配一個本地連接給G_Client, 如果不分配, 電腦將會自動分配一個)
G_Client.Connect(調用Winsock控件的連接方法)
一旦伺服器端接到客戶端的連接請求ConnectionRequest,就接受連接
Private Sub G_Server_ConnectionRequest(ByVal requestID As Long)
G_Server.Accept requestID
End Sub
客戶端用G_Client.SendData傳送指令,而伺服器在G_Server_DateArrive事件中接受並執行指令(幾乎所有的木馬功能都在這個事件處理程式中實現)
如果客戶中斷連接,則關閉連接並重新監聽連接
Private Sub G_Server_Close()
G_Server.Close (關閉連接)
G_Server.Listen(再次監聽)
End Sub
客戶端上傳一個指令,伺服器端解釋並執行指令。
3、實現木馬的控制功能
由於Win98開放了所有的權限給使用者,因此,以使用者權限執行的木馬程式幾乎可以控制一切,下面僅對木馬的主要功能進行簡單的概述, 主要是使用Windows API函數。
(1)遠端監控(控制對方滑鼠、關繫,並監視對方螢幕)
keybd_event模擬一個關繫動作。
mouse_event模擬一次滑鼠事件
mouse_event(dwFlags,dx,dy,cButtons,dwExtraInfo)dwFlags:
MOUSEEVENTF_ABSOLUTE 指定滑鼠座標系統中的一個絕對位置
MOUSEEVENTF_MOVE 移動滑鼠
MOUSEEVENTF_LEFTDOWN 模擬滑鼠左鍵按下
MOUSEEVENTF_LEFTUP 模擬滑鼠左鍵抬起
MOUSEEVENTF_RIGHTDOWN 模擬滑鼠右鍵按下
MOUSEEVENTF_RIGHTUP 模擬滑鼠右鍵按下
dx,dy:MOUSEEVENTF_ABSOLUTE中的滑鼠座標
(2)記錄各種密碼訊息
keylog begin:將擊鍵記錄在一個Text裡,同時還記錄執行輸入的視窗名
(3)獲取系統訊息
a.取得電腦名 GetComputerName
b.更改電腦名 SetComputerName
c.目前使用者 GetUserName
d.系統路徑
Set FileSystem0bject = CreateObject("Scripting.FileSystemObject")(建立檔案系統對像)
Set SystemDir = FileSystem0bject.getspecialfolder(1)(取系統目錄)
Set SystemDir = FileSystem0bject.getspecialfolder(0)(取Windows安裝目錄)
e.取得系統版本 GetVersionEx
f.目前顯示解析度
Width = screen.Width screen.TwipsPerPixelX
Height= screen.Height screen.TwipsPerPixelY
(4)限製系統功能
a.遠端關機或重啟電腦,使用WinAPI中的如下函數可以實現:
ExitWindowsEx(UINT uFlags,DWORD dwReserved)
當uFlags=EWX_LOGOFF 中止程序,然後註銷
=EWX_SHUTDOWN 關掉系統但不關電源
=EWX_REBOOT 重新引導系統
=EWX_FORCE強迫中止沒有響應的程序
=EWX_POWERDOWN 關掉系統及關閉電源
b.鎖定滑鼠,ClipCursor(lpRect As RECT)可以將指標限製到指定區域,或者用ShowCursor(FALSE)把滑鼠隱藏起來也可以,RECT是定義的一個矩形。
c.讓對方掉線 RasHangUp
d.終止程序 ExitProcess
e.關閉視窗 利用FindWindow函數找到視窗並利用SendMessage函數關閉視窗
(5)遠端檔案操作
刪除檔案:File delete
拷貝檔案:File copy
共享檔案:Export list(列出目前共享的光碟機、目錄、權限及共享密碼)
(6)註冊表操作
在VB中只要Set RegEdit=CreateObject("WScript.Shell")就可以使用以下的註冊表功能:
刪除鍵值:RegEdit.RegDelete RegKey
增加鍵值:RegEdit.Write RegKey,RegValue
獲取鍵值:RegEdit.RegRead (Value)
三、特洛伊木馬隱身方法
木馬程式會想盡一切辦法隱藏自己,主要途徑有:在工作列中隱藏自己,這是最基本的只要把Form的Visible內容設為False、ShowInTaskBar設為False,程式執行時就不會出現在工作列中了。在工作程序中隱形:將程式設為「系統伺服器」可以偽裝自己。當然它也會悄無聲息地啟動,木馬會在每次使用者啟動時自動裝載伺服器端,Windows系統啟動時自動載入應用程式的方法,「木馬」都會用上,如:啟動組、win.ini、system.ini、註冊表等等都是「木馬」藏身的好地方。
在win.ini檔案中,在[WINDOWS]下面,「run=」和「load=」是可能載入「木馬」程式的途徑,一般情況下,它們的等號後面什麼都沒有,如果發現後面跟有路徑與檔案名稱不是您熟悉的啟動檔案,您的電腦就可能中上「木馬」了。當然您也得看清楚,因為好多「木馬」,如「AOL Trojan木馬」,它把自身偽裝成command.exe檔案,如果不注意可能不會發現它不是真正的系統啟動檔案。
在system.ini檔案中,在[BOOT]下面有個「shell=檔案名稱」。正確的檔案名稱應該是「explorer.exe」,如果不是「explorer.exe」,而是「shell= explorer.exe 程式名」,那麼後面跟著的那個程式就是「木馬」程式,就是說您已經中「木馬」了。
在註冊表中的情況最複雜,使用regedit指令開啟註冊表編輯器,在點擊至:「HKEY-LOCAL-MACHINESoftwareMicrosoftWindowsCurrentVersionRun」目錄下,檢視鍵值中有沒有自己不熟悉的自動啟動檔案,副檔名為EXE,這裡切記:有的「木馬」程式產生的檔案很像系統自身檔案,想使用偽裝矇混過關,如「Acid Battery v1.0木馬」,它將註冊表「HKEY-LOCAL-MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun」下的 Explorer 鍵值改為Explorer=「C:WINDOWSexpiorer.exe」,「木馬」程式與真正的Explorer之間只有「i」與「l」的差別。當然在註冊表中還有很多地方都可以隱藏「木馬」程式,如:「HKEY-CURRENT-USERSoftwareMicrosoftWindowsCurrentVersionRun」、「HKEY-USERS****SoftwareMicrosoftWindowsCurrentVersionRun」的目錄下都有可能,最好的辦法就是在「HKEY-LOCAL-MACHINESoftwareMicrosoftWindowsCurrentVersionRun」下找到「木馬」程式的檔案名稱,再在整個註冊表中搜尋即可。
目前,除了上面介紹的隱身技術外,更新、更隱蔽的方法已經出現,那就是-驅動程式及動態連結庫技術。驅動程式及動態連結庫技術和一般的木馬不同,它基本上擺脫了原有的木馬模式-監聽連接,而採用替代系統功能的方法(覆寫驅動程式或動態連結庫)。這樣做的結果是:系統中沒有增加新的檔案(所以不能用掃瞄的方法查殺)、不需要開啟新的連接(所以不能用連接監視的方法查殺)、沒有新的程序(所以使用程序檢視的方法發現不了它,也不能用kill程序的方法終止它的執行)。在正常執行時木馬幾乎沒有任何的症狀,而一旦木馬的控制端向被控端發出特定的訊息後,隱藏的程式就立即開始運作。
四、 特洛伊木馬防禦原理
知道了木馬的攻擊原理和隱身方法,我們就可以採取措施進行防禦了。
1.連接掃瞄
連接掃瞄是檢查遠端機器有無木馬的最好辦法, 連接掃瞄的原理非常簡單, 掃瞄程式嘗試連接某個連接, 如果成功, 則說明連接開放,如果失敗或超過某個特定的時間(逾時), 則說明連接關閉。但對於驅動程式/動態連結木馬, 掃瞄連接是不起作用的。
2.檢視連接
檢視連接和連接掃瞄的原理基本相同,不過是在本地機上使用netstat -a(或某個第三方程式)檢視所有的TCP/UDP連接,檢視連接要比連接掃瞄快,但同樣是無法查出驅動程式/動態連結木馬,而且僅能在本地使用。
3.檢查註冊表
上面在討論木馬的啟動方式時已經提到,木馬可以使用註冊表啟動(好像現在大部分的木馬都是使用註冊表啟動的,至少也把註冊表作為一個自我保護的方式),那麼,我們同樣可以使用檢查註冊表來發現冰河在註冊表裡留下的痕跡。
4.尋找檔案
尋找木馬特定的檔案也是一個常用的方法,木馬的一個特徵檔案是kernl32.exe,另一個是sysexlpr.exe,只要刪除了這兩個檔案,木馬就已經不起作用了。如果您只是刪除了sysexlpr.exe而沒有做掃尾工作的話,可能會遇到一些麻煩-就是您的Text打不開了, sysexplr.exe是和Text關聯的,您還必須把Text跟notepad關聯上。
另外,對於驅動程式/動態連結庫木馬,有一種方法可以試試,使用Windows的"系統檔案檢查器",使用"開始選單"-"程式"-"附件"-"系統工具"-"系統訊息"-"工具"可以執行"系統檔案檢查器", 用「系統檔案檢查器」可檢查操作系統檔案的完整性,如果這些檔案損壞,檢查器可以將其還原,檢查器還可以從安裝磁碟中解壓縮已壓縮的檔案(如驅動程式)。如果您的驅動程式或動態連結庫在您沒有升級它們的情況下被更改了,就有可能是木馬(或者損壞了),擷取更改過的檔案可以保證您的系統安全和穩定。
五、結束語
只要您有一點點的疏忽,就有可能被人安裝了木馬。所以平時不要隨便從網站上下載軟體,不要隨便執行別人給的軟體,經常檢查自己的系統檔案、註冊表、連接,經常去安全站台檢視最新的木馬公告等等,提高自己的網路安全意識,瞭解木馬的常見伎倆,這樣對於保證自己電腦的安全不無裨益。
|