一、木馬(Trojan Horse)介紹 木馬全稱為特洛伊木馬(Trojan Horse,英文則簡稱為Trojan)。此詞語來源於古希臘的神話故事,傳說希臘人圍攻特洛伊城,久久不能得手。後來想出了一個木馬計,讓士兵藏匿於巨大的木馬中。大部隊假裝撤退而將木馬擯棄於特洛伊城下,讓敵人將其作為戰利品拖入城內。木馬內的士兵則乘夜晚敵人慶祝勝利、放松警惕的時候從木馬中爬出來,與城外的部隊裡應外合而攻下了特洛伊城。 在計算機安全學中,特洛伊木馬是指一種計算機程序,表面上或實際上有某種有用的功能,而含有隱藏的可以控制用戶計算機系統、危害系統安全的功能,可能造成用戶資料的洩漏、破壞或整個系統的崩潰。在一定程度上,木馬也可以稱為是計算機病毒。 由於很多用戶對計算機安全問題了解不多,所以並不知道自己的計算機是否中了木馬或者如何刪除木馬。雖然現在市面上有很多新版殺毒軟件都稱可以自動清除木馬病毒,但它們並不能防范新出現的木馬病毒(哪怕宣傳上稱有查殺未知病毒的功能)。而且實際的使用效果也並不理想。比如用某些殺毒軟件卸載木馬後,系統不能正常工作,或根本發現不了經過特殊處理的木馬程序。本人就測試過一些經編程人員改裝過的著名木馬程序,新的查殺毒軟件是連檢查都檢測不到,更不用說要刪除它了(哪怕是使用的是的病毒庫)。因此最關鍵的還是要知道特洛伊木馬的工作原理,由其原理著手自己來檢測木馬和刪除木馬。用手工的方法極易發現系統中藏匿的特洛伊木馬,再根據其藏匿的方式對其進行刪除。 二、木馬工作的原理 在Windows系統中,木馬一般作為一個網絡服務程序在種了木馬的機器後台運行,監聽本機一些特定端口,這個端口號多數比較大(5000以上,但也有部分是5000以下的)。當該木馬相應的客戶端程序在此端口上請求連接時,它會與客戶程序建立一TCP連接,從而被客戶端遠程控制。 既然是木馬,當然不會那麼容易讓你看出破綻,對於程序設計人員來說,要隱藏自己所設計的窗口程序,主要途徑有:在任務欄中將窗口隱藏,這個只要把 Form的Visible屬性調整為False,ShowInTaskBar也設為False。那麼程序運行時就不會出現在任務欄中了。如果要在任務管理器中隱身,只要將程序調整為系統服務程序就可以了。 好了,現在我們對木馬的運行有了大體了解。讓我們從其運行原理著手來看看它藏在哪。既然要作為後台的網絡服務器運行,那麼它就要乘計算機剛開機的時候得到運行,進而常駐內存中。想一想,Windows系統剛啟動的時候會通過什麼項目裝入而運行一些程序呢?你可能會想到“開始->程序->啟動”中的項目!沒錯,這是Windows啟動時要運行的東西,但要是木馬服務器程序明顯地放在這就不叫木馬了。 木馬基本上采用了Windows系統啟動時自動加載應用程序的方法,包括有win.ini、system.ini和注冊表等。 在win.ini文件中,[WINDOWS]下面,“run=”和“load=”行是Windows啟動時要自動加載運行的程序項目,木馬可能會在這現出原形。必須要仔細觀察它們,一般情況下,它們的等號後面什麼都沒有,如果發現後面跟有路徑與文件名不是你熟悉的或以前沒有見到過的啟動文件項目,那麼你的計算機就可能中上木馬了。當然你也得看清楚,因為好多木馬還通過其容易混淆的文件名來愚弄用戶。如AOL Trojan,它把自身偽裝成command.exe文件,如果不注意可能不會發現它,而誤認它為正常的系統啟動文件項。 在system.ini文件中,[BOOT]下面有個“shell=Explorer.exe”項。正確的表述方法就是這樣。如果等號後面不僅僅是 explorer.exe,而是“shell=Explorer.exe 程序名”,那麼後面跟著的那個程序就是木馬程序,明擺著你已經中了木馬。現在有些木馬還將explorer.exe文件與其進行綁定成為一個文件,這樣的話,這裡看起來還是正常的,無法瞧出破綻。 隱蔽性強的木馬都在注冊表中作文章,因為注冊表本身就非常龐大、眾多的啟動項目及易掩人耳目。 HKEY-LOCAL-MACHINE/Software/Microsoft/Windows/CurrentVersion/Run HKEY-LOCAL-MACHINE/Software/Microsoft/Windows/CurrentVersion/RunOnce HKEY-LOCAL-MACHINE/Software/Microsoft/Windows/CurrentVersion/RunOnceEx HKEY-LOCAL-MACHINE/Software/Microsoft/Windows/CurrentVersion/RunServices HKEY-LOCAL-MACHINE/Software/Microsoft/Windows/CurrentVersion/RunServicesOnce 上面這些主鍵下面的啟動項目都可以成為木馬的容身之處。如果是Windows NT,那還得注意HKEY-LOCAL-MACHINE/Software/SAM下的東西,通過regedit等注冊表編輯工具查看SAM主鍵,裡面下應該是空的。 木馬駐留計算機以後,還得要有客戶端程序來控制才可以進行相應的“黑箱”操作。要客戶端要與木馬服務器端進行通信就必須得建立一連接(一般為TCP連接),通過相應的程序或工具都可以檢測到這些非法網絡連接的存在。具體如何檢測,在第三部分有詳細介紹。 三、檢測木馬的存在 知道木馬啟動運行、工作的原理,我們就可以著手來看看自己的計算機有沒有木馬存在了。 首先,查看system.ini、win.ini、啟動組中的啟動項目。由“開始->運行”,輸入msconfig,運行Windows自帶的“系統配置實用程序”。
1、查看system.ini文件 選中“System.ini”標簽,展開[boot]目錄,查看“shell=”這行,正常為“shell=Explorer.exe” ,如果不是這樣,就可能中了木馬了。下圖所示為正常時的情況:
2、查看win.ini文件 選中win.ini標簽,展開[windows]目錄項,查看“run=”和“load=”行,等號後面正常應該為空 3、查看啟動組 再看看啟動標簽中的啟動項目,有沒有什麼非正常項目?要是有象netbus、netspy、bo等關鍵詞, 極有可能就是木馬了。本人一般都將啟動組中的項目保持在比較精簡的狀態,不需要或無大用途的項目都 屏蔽掉了 4、查看注冊表 由“開始-運行”,輸入regedit,確定就可以運行注冊表編輯器。再展開至: “HKEY-LOCAL-MACHINESoftwareMicrosoftWindowsCurrentVersionRun”目錄下,查看鍵值中有沒有自己
不熟悉的自動啟動文件項目,比如netbus、netspy、netserver等的單詞。注意,有的木馬程序生成的 服務器程序文件很像系統自身的文件,想由此偽裝蒙混過關。比如Acid Battery木馬,它會在注冊表項 “HKEY-LOCAL-MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun”下加入 Explorer=“CWINDOWSexpiorer.exe”,木馬服務器程序與系統自身的真正的Explorer之間只有一個字母 的差別! 通過類似的方法對下列各個主鍵下面的鍵值進行檢查: HKEY-LOCAL-MACHINE/Software/Microsoft/Windows/CurrentVersion/RunOnce HKEY-LOCAL-MACHINE/Software/Microsoft/Windows/CurrentVersion/RunOnceEx HKEY-LOCAL-MACHINE/Software/Microsoft/Windows/CurrentVersion/RunServices HKEY-LOCAL-MACHINE/Software/Microsoft/Windows/CurrentVersion/RunServicesOnce 如果操作系統是Windows NT,還得注意HKEY-LOCAL-MACHINE/Software/SAM下面的內容,如果有項目,那極有可能就是木馬了。正常情況下,該主鍵下面是空的。 當然在注冊表中還有很多地方都可以隱藏木馬程序,上面這些主鍵是木馬比較常用的隱身之處。除此之外,象HKEY-CURRENT-USER/ Software/Microsoft/Windows/CurrentVersion/Run、HKEY-USERS/****/Software/ Microsoft/Windows/CurrentVersion/Run的目錄下都有可能成為木馬的藏身之處。最好的辦法就是在HKEY-LOCAL -MACHINE/Software/Microsoft/Windows/CurrentVersion/Run或其它主鍵下面找到木馬程序的文件名,再通過其文件名對整個注冊表進行全面搜索就知道它有幾個藏身的地方了。 如果有留意,注冊表各個主鍵下都會有個叫“(默認)”名稱的注冊項,而且數據顯示為“(未設置鍵值)”,也就是空的。這是正常現象。如果發現這個默認項被替換了,那麼替換它的就是木馬了。 4、其它方法 上網過程中,在進行一些計算機正常使用操作時,發現計算機速度明顯起了變化、硬盤在不停的讀寫、鼠標不聽使喚、鍵盤無效、自己的一些窗口在未得到自己允許的情況下被關閉、新的窗口被莫名其妙地打開.....這一切的不正常現象都可以懷疑是木馬客戶端在遠程控制你的計算機。 如果懷疑你現在正在被木馬控制,那麼不要慌張地去拔了網線或抽了Modem上的電話線。有可能的話,最好可以逮到“黑”你的那個家伙。下面就介紹一下相應的方法: 由“開始->運行”,輸入command,確定,開一個MS-DOS窗口。或者由“開始->程序->MS-DOS”來打開它。在MS-DOS窗口的命令行鍵入“netstat”查看目前已與本計算機建立的連接。如下圖所示: 顯示出來的結果表示為四列,其意思分別為Proto:協議,Local Address:本地地址,Foreign Address :遠程地址,State:狀態。在地址欄中冒號的後面就是端口號。如果發現端口號碼異常(比如大於5000 ),而Foreign Address中的地址又不為正常網絡浏覽的地址,那麼可以判斷你的機器正被 Foreign Address中表示的遠程計算機所窺視著。在對應行的Foreign Address中顯示的IP地址就是目前非 法連接你計算機的木馬客戶端。 當網絡處於非活動狀態,也就是目前沒什麼活動網絡連接時,在MS-DOS窗口中用netstat命令將看不 到什麼東西。此時可以使用“netstat -a”,加了常數“-a”表示顯示計算機中目前處於監聽狀態的端口 。對於Windows98來說,正常情況下,會出現如下的一些處於監聽狀態的端口(安裝有NETBEUI協議): 如果出現有不明端口處於監聽(LISTENING)狀態,而目前又沒有進行任何網絡服務操作,那麼在監聽該 端口的就是特洛伊木馬了!如下圖所示的23456和23457端口都處於監聽狀態,很明顯是木馬造成的。 注意,使用此方法查詢處於監聽狀態的端口,一定要保證在短時間內(最好5分鐘以上)沒有運行任何 網絡沖浪軟件,也沒有進行過任何網絡操作,比如浏覽網頁,收、發信等。不然容易混淆對結果的判斷。 四、刪除木馬