冰河(木馬)
冰河(木馬)
冰河(木馬)主要用於遠程監控,自動跟蹤目標機屏幕變化,同時可以完全模擬鍵盤及滑鼠輸入,記錄各種信息,然後私自創建、上傳、下載、複製、刪除文件或目錄。冰河的伺服器端程序為G-server.exe,客戶端程序為G-client.exe,默認連接埠為7626。
該軟體主要用於遠程監控,具體功能包括:
1.自動跟蹤目標機屏幕變化,同時可以完全模擬鍵盤及滑鼠輸入,即在同步被控端屏幕變化的同時,監控端的一切鍵盤及滑鼠操作將反映在被控端屏幕(區域網適用);
2.記錄各種口令信息:包括開機口令、屏保口令、各種共享資源口令及絕大多數在對話框中出現過的口令信息;
3.獲取系統信息:包括計算機名、註冊公司、當前用戶、系統路徑、操作系統版本、當前顯示解析度、物理及邏輯磁碟信息等多項系統數據;
4.限制系統功能:包括遠程關機、遠程重啟計算機、鎖定滑鼠、鎖定系統熱鍵及鎖定註冊表等多項功能限制;
5.遠程文件操作:包括創建、上傳、下載、複製、刪除文件或目錄、文件壓縮、快速瀏覽文本文件、遠程打開文件(提供了四中不同的打開方式——正常方式、最大化、最小化和隱藏方式)等多項文件操作功能;
6.註冊表操作:包括對主鍵的瀏覽、增刪、複製、重命名和對鍵值的讀寫等所有註冊表操作功能;
7.發送信息:以四種常用圖標向被控端發送簡簡訊息;
8.點對點通訊:以聊天室形式同被控端進行在線交談。
雖然許多殺毒軟體可以查殺它,但國內仍有幾十萬中冰河的電腦存在!作為木馬,冰河創造了最多人使用、最多人中彈的奇迹!現在網上又出現了許多的冰河變種程序,我們這裡介紹的是其標準版,掌握了如何清除標準版,再來對付變種冰河就很容易了。
冰河的伺服器端程序為G-server.exe,客戶端程序為G-client.exe,默認連接埠為7626。一旦運行G-server,那麼該程序就會在C:/Windows/system目錄下生成Kernel32.exe和sysexplr.exe,並刪除自身。Kernel32.exe在系統啟動時自動載入運行,sysexplr.exe和TXT文件關聯。即使你刪除了Kernel32.exe,但只要你打開TXT文件,sysexplr.exe就會被激活,它將再次生成Kernel32.exe,於是冰河又回來了!這就是冰河屢刪不止的原因。
1、刪除C:Windows/system 下的Kernel32.exe和Sysexplr.exe文件。
2、冰河會在註冊表HKEY_LOCAL_MACHINE/software/microsoft/windows/ CurrentVersion
Run下紮根,鍵值為C:/windows/system/Kernel32.exe,刪除它。
3、在註冊表的HKEY_LOCAL_MACHINE/software/microsoft/windows/ CurrentVersion/Runservices下,還有鍵值為C:/windows/system/Kernel32.exe的,也要刪除。
4、最後,改註冊表HKEY_CLASSES_ROOT/txtfile/shell/open/command下的默認值,由中木馬後的C:/windows/system/Sysexplr.exe %1改為正常情況下的C:/windows/notepad.exe %1,即可恢復TXT文件關聯功能。
先來說一下木馬是如何通過網頁進入你的電腦的,相信大家都知道,現在有很多圖片木馬,EML和EXE木馬,其中的圖片木馬其實很簡單,就是把木馬exe文件的文件頭換成bmp文件的文件頭,然後欺騙IE瀏覽器自動打開該文件,然後利用網頁里的一段JAVASCRIPT小程序調用DEBUG把臨時文件里的bmp文件還原成木馬exe文件並拷貝到啟動項里,接下來的事情很簡單,你下次啟動電腦的時候就是你噩夢的開始了,EML木馬更是傳播方便,把木馬文件偽裝成audio/x-wav聲音文件,這樣你接收到這封郵件的時候只要瀏覽一下,不需要你點任何連接,windows就會為你代勞自動播放這個他認為是wav的音樂文件,木馬就這樣輕鬆的進入你的電腦,這種木馬還可以frame到網頁里,只要打開網頁,木馬就會自動運行,另外還有一種方法,就是把木馬exe編譯到.JS文件里,然後在網頁里調用,同樣也可以無聲無息的入侵你的電腦,這只是些簡單的辦法,還有遠程控制和共享等等漏洞可以鑽,知道這些,相信你已經對網頁木馬已經有了大概了解,
開始-設置-控制面版-添加刪除程序-windows安裝程序-把附件里的windows scripting host去掉,然後打開Internet Explorer瀏覽器,點工具-Internet選項-安全-自定義級別,把裡面的腳本的3個選項全部禁用,然後把“在中載入程序和文件”禁用,當然這只是簡單的防治方法,不過可能影響一些網頁的動態java效果,不過為了安全就犧牲一點啦,這樣還可以預防一些惡意的網頁炸彈和病毒,如果條件允許的話可以加裝防火牆,再到微軟的網站打些補丁,反正我所知道的網吧用的都是原始安裝的windows,很不安全哦,還有盡量少在一些小網站下載一些程序,尤其是一些號稱黑客工具的軟體,小心盜不著別人自己先被盜了,當然,如果你執意要用的話,號被盜了也應該付出這個代價吧。還有,不要以為裝了還原精靈就很安全,據我所知,一般網吧的還原精靈都只還原c:盤即系統區,所以只要木馬直接感染你安裝在別的盤裡的遊戲執行文件,你照樣逃不掉的。
木馬冰河是用C++Builder寫的,為了便於大家理解,我將用相對比較簡單的VB來說明它,其中涉及到一些WinSock編程和Windows API的知識,如果你不是很了解的話,請去查閱相關的資料。
無論大家把木馬看得多神秘,也無論木馬能實現多麼強大的功能,木馬,其實質只是一個網路客戶/服務程序。那麼,就讓我們從網路客戶/服務程序的編寫開始。
網路客戶/服務模式的原理是一台主機提供服務(伺服器),另一台主機接受服務(客戶機)。作為伺服器的主機一般會打開一個默認的埠並進行監聽(Listen),如果有客戶機向伺服器的這一埠提出連接請求(Connect Request),伺服器上的相應程序就會自動運行,來應答客戶機的請求,這個程序我們稱為守護進程(UNⅨ的術語,不過已經被移植到了MS系統上)。對於冰河,被控制端就成為一台伺服器,控制端則是一台客戶機,G_server.exe是守護進程,G_client是客戶端應用程序。(這一點經常有人混淆,而且往往會給自己種了木馬!)
在VB中,可以使用Winsock控制項來編寫網路客戶/服務程序,實現方法如下(其中,G_Server和G_Client均為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
其他的部分可以用命令傳遞來進行,客戶端上傳一個命令,服務端解釋並執行命令......
由於Win98開放了所有的許可權給用戶,因此,以用戶許可權運行的木馬程序幾乎可以控制一切,讓我們來看看冰河究竟能做些什麼(看了后,你會認同我的觀點:稱冰河為木馬是不恰當的,冰河實現的功能之多,足以成為一個成功的遠程控制軟體)
因為冰河實現的功能實在太多,我不可能在這裡一一詳細地說明,所以下面僅對冰河的主要功能進行簡單的概述,主要是使用Windows API函數,如果你想知道這些函數的具體定義和參數,請查詢WinAPI手冊。
遠程監控
keybd_event 模擬一個鍵盤動作(這個函數支持屏幕截圖哦)。
mouse_event 模擬一次滑鼠事件(這個函數的參數太複雜,我要全寫在這裡會被編輯罵死的,只能寫一點主要的,其他的自己查WinAPI吧)
mouse_event(dwFlags,dx,dy,cButtons,dwExtraInfo)
dwFlags:
MOUSEEVENTF_ABSOLUTE 指定滑鼠坐標系統中的一個絕對位置。
MOUSEEVENTF_MOVE 移動滑鼠
MOUSEEVENTF_LEFTDOWN 模擬滑鼠左鍵按下
MOUSEEVENTF_LEFTUP 模擬滑鼠左鍵抬起
MOUSEEVENTF_RIGHTDOWN 模擬滑鼠右鍵按下
MOUSEEVENTF_RIGHTUP 模擬滑鼠右鍵按下
MOUSEEVENTF_MIDDLEDOWN 模擬滑鼠中鍵按下
MOUSEEVENTF_MIDDLEUP 模擬滑鼠中鍵按下
dx,dy: MOUSEEVENTF_ABSOLUTE中的滑鼠坐標
記錄各種口令信息
(作者註:出於安全形度考慮,本文不探討這方面的問題,也請不要給我來信詢問)
獲取系統信息
a.取得計算機名 GetComputerName
b.更改計算機名 SetComputerName
c.當前用戶 GetUserName函數
d.系統路徑
Set FileSystem0bject = CreateObject("Scripting.FileSystemObject") (建立文件系統對象)
Set SystemDir = FileSystem0bject.getspecialfolder⑴
(取系統目錄)
Set SystemDir = FileSystem0bject.getspecialfolder(0)
(取Windows安裝目錄)
(友情提醒: FileSystemObject是一個很有用的對象,你可以用它來完成很多有用的文件操作)
e.取得系統版本 GetVersionEx(還有一個GetVersion,不過在32位windows下可能會有問題,所以建議用GetVersionEx
f.當前顯示解析度
Width = screen.Width \ screen.TwipsPerPixelX
Height= screen.Height \ screen.TwipsPerPixelY
其實如果不用Windows API我們也能很容易的取到系統的各類信息,那就是Windows的"垃圾站"-註冊表
比如計算機名和計算機標識吧:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VNETSUP中的Comment,ComputerName和WorkGroup
註冊公司和用戶名:HKEY_USERS\.DEFAULT\Software\Microsoft\MS Setup (ACME)\UserInfo至於如何取得註冊表鍵值請看第6部分。
限制系統功能
a.遠程關機或重啟計算機,使用WinAPI中的如下函數可以實現:
ExitWindowsEx(ByVal uFlags,0)
當uFlags=0 EWX_LOGOFF 中止進程,然後註銷
當uFlags=1 EWX_SHUTDOWN 關掉系統電源
當uFlags=2 EWX_REBOOT 重新引導系統
當uFlags=4 EWX_FORCE 強迫中止沒有響應的進程
b.鎖定滑鼠
ClipCursor(lpRect As RECT)可以將指針限制到指定區域,或者用ShowCursor(FALSE)把滑鼠隱藏起來也可以
註:RECT是一個矩形,定義如下:
Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
c.鎖定系統 這個有太多的辦法了,嘿嘿,想Windows不死機都困難呀,比如,搞個死循環吧,當然,要想系統徹底崩潰還需要一點技巧,比如設備漏洞或者耗盡資源什麼的......
d.讓對方掉線 RasHangUp......
e.終止進程 ExitProcess......
f.關閉窗口 利用FindWindow函數找到窗口並利用SendMessage函數關閉窗口
遠程文件操作
無論在哪種編程語言里,文件操作功能都是比較簡單的,在此就不贅述了,你也可以用上面提到的FileSystemObject對象來實現
註冊表操作
在VB中只要Set RegEdit=CreateObject("WScript.Shell")
就可以使用以下的註冊表功能:
刪除鍵值:RegEdit.RegDelete RegKey
增加鍵值:RegEdit.Write RegKey,RegValue
獲取鍵值:RegEdit.RegRead (Value)
記住,註冊表的鍵值要寫全路徑,否則會出錯的。
發送信息
很簡單,只是一個彈出式消息框而已,VB中用MsgBox("")就可以實現,其他程序也不太難的。
點對點通訊
呵呵,這個嘛隨便去看看什麼聊天軟體就行了(因為比較簡單但是比較煩,所以我就不寫了,呵呵。又:我始終沒有搞懂冰河為什麼要在木馬里搞這個東東,困惑......)
換牆紙
CallSystemParametersInfo(20,0,"BMP路徑名稱",&H1)
值得注意的是,如果使用了ActiveDesktop,換牆紙有可能會失敗,遇到這種問題,請不要找冰河和我,去找Bill吧。
木馬並不是合法的網路服務程序,因此,它必須想盡一切辦法隱藏自己,好在,Windows是一個捉迷藏的大森林!
這是最基本的了,如果連這個都做不到......(想象一下,如果Windows的任務欄里出現一個國際象棋中木馬的圖標...@#!#@...也太囂張了吧!)
在VB中,只要把form的Visible屬性設為False,ShowInTaskBar設為False,程序就不會出現在任務欄中了。
在任務管理器中隱形,就是按下Ctrl+Alt+Del時看不見那個名字叫做“木馬”的進程,這個有點難度,不過還是難不倒我們,將程序設為“系統服務”可以很輕鬆的偽裝成比爾蓋子的嫡系部隊(Windows,我們和你是一家的,不要告訴別人我藏在哪兒...)。
在VB中如下的代碼可以實現這一功能:
Public Declare Function RegisterServiceProcess Lib "kernel32" (ByVal ProcessID As Long,ByVal ServiceFlags As Long) As Long
Public Declare Function GetCurrentProcessId Lib "kernel32" () As Long
(以上為聲明)
Private Sub Form_Load()
RegisterServiceProcess GetCurrentProcessId,1 (註冊系統服務)
End Sub
Private Sub Form_Unload()
RegisterServiceProcess GetCurrentProcessId,0 (取消系統服務)
End Sub
你當然不會指望用戶每次啟動後點擊木馬圖標來運行服務端,木馬要做到的第二重要的事就是如何在每次用戶啟動時自動裝載服務端(第一重要的是如何讓對方中木馬,嘿嘿,這部分的內容將在後面提到)
Windows支持多種在系統啟動時自動載入應用程序的方法(簡直就像是為木馬特別定做的)啟動組、win.ini、system.ini、註冊表等等都是木馬藏身的好地方。冰河採用了多種方法確保你不能擺脫它。首先,冰河會在註冊表的HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run和RUNSERⅥCE鍵值中加上了\kernl32.exe(是系統目錄),其次如果你刪除了這個鍵值,自以為得意地喝著茶的時候,冰河又陰魂不散地出現了...怎麼回事?原來冰河的服務端會在c:\windows(這個會隨你windows的安裝目錄變化而變化)下生成一個叫sysexplr.exe文件(太象超級解霸了,好毒呀,冰河!),這個文件是與文本文件相關聯的,只要你打開文本(哪天不打開幾次文本?),sysexplr.exe文件就會重新生成krnel32.exe,然後你還是被冰河控制著。(冰河就是這樣長期霸佔著窮苦勞動人民寶貴的系統資源的,555555)
木馬都會很注意自己的埠(你呢?你關心你的6萬多個埠嗎?),如果你留意的話,你就會發現,木馬埠一般都在1000以上,而且呈越來越大的趨勢(netspy是1243....)這是因為,1000以下的埠是常用埠,佔用這些埠可能會造成系統不正常,這樣木馬就會很容易暴露;而由於埠掃描是需要時間的(一個很快的埠掃描器在遠程也需要大約二十分鐘才能掃完所有的埠),故而使用諸如54321的埠會讓你很難發現它。在文章的末尾我給大家轉貼了一個常見木馬的埠表,你就對著這個表去查吧(不過,值得提醒的是,冰河及很多比較新的木馬都提供埠修改功能,所以,實際上木馬能以任意埠出現)
目前,除了冰河使用的隱身技術外,更新、更隱蔽的方法已經出現,那就是-驅動程序及動態鏈接庫技術(冰河3.0會採用這種方法嗎?)。
驅動程序及動態鏈接庫技術和一般的木馬不同,它基本上擺脫了原有的木馬模式-監聽埠,而採用替代系統功能的方法(改寫驅動程序或動態鏈接庫)。這樣做的結果是:系統中沒有增加新的文件(所以不能用掃描的方法查殺)、不需要打開新的埠(所以不能用埠監視的方法查殺)、沒有新的進程(所以使用進程查看的方法發現不了它,也不能用kill進程的方法終止它的運行)。在正常運行時木馬幾乎沒有任何的癥狀,而一旦木馬的控制端向被控端發出特定的信息后,隱藏的程序就立即開始運作......
事實上,我已經看到過幾個這樣類型的木馬,其中就有通過改寫vxd文件建立隱藏共享的木馬...(江湖上又將掀起新的波浪)
本文主要是探討木馬的基本原理,木馬的破解並非是本文的重點(也不是我的長處),具體的破解請大家期待yagami的《特洛伊木馬看過來》(我都期待一年了,大家和我一起繼續期待吧,嘿嘿),本文只是對通用的木馬防禦、卸載方法做一個小小的總結:
埠掃描是檢查遠程機器有無木馬的最好辦法,埠掃描的原理非常簡單,掃描程序嘗試連接某個埠,如果成功,則說明埠開放,如果失敗或超過某個特定的時間(超時),則說明埠關閉。(關於埠掃描,Oliver有一篇關於“半連接掃描”的文章,很精彩,那種掃描的原理不太一樣,不過不在本文討論的範圍之中)
但是值得說明的是,對於驅動程序/動態鏈接木馬,掃描埠是不起作用的。
查看連接和埠掃描的原理基本相同,不過是在本地機上通過netstat-a(或某個第三方的程序)查看所有的TCP/UDP連接,查看連接要比埠掃描快,缺點同樣是無法查出驅動程序/動態鏈接木馬,而且僅僅能在本地使用。
上面在討論木馬的啟動方式時已經提到,木馬可以通過註冊表啟動(好像現在大部分的木馬都是通過註冊表啟動的,至少也把註冊表作為一個自我保護的方式),那麼,我們同樣可以通過檢查註冊表來發現"馬蹄印",冰河在註冊表裡留下的痕迹請參照《潛行篇》。
查找木馬特定的文件也是一個常用的方法(這個我知道,冰河的特徵文件是G_Server.exe吧? 笨蛋!哪會這麼簡單,冰河是狡猾狡猾的......)冰河的一個特徵文件是kernl32.exe(靠,偽裝成Windows的內核呀),另一個更隱蔽,是sysexlpr.exe(什麼什麼,不是超級解霸嗎?)對!冰河之所以給這兩個文件取這樣的名字就是為了更好的偽裝自己,只要刪除了這兩個文件,冰河就已經不起作用了。其他的木馬也是一樣(廢話,Server端程序都沒了,還能幹嘛?)
如果你只是刪除了sysexlpr.exe而沒有做掃尾工作的話,可能會遇到一些麻煩-就是你的文本文件打不開了,因為前面說了,sysexplr.exe是和文本文件關聯的,你還必須把文本文件跟notepad關聯上,方法有三種:
a.更改註冊表(我就不說了,有能力自己改的想來也不要我說,否則還是不要亂動的好)
b.在<我的電腦>-查看-文件夾選項-文件類型中編輯
c.按住SHIFT鍵的同時滑鼠右擊任何一個TXT文件,選擇打開方式,選中<;始終用該程序打開......>;,然後找到notepad,點一下就OK了。(這個最簡單,推薦使用)
提醒一下,對於木馬這種狡猾的東西,一定要小心又小心,冰河是和txt文件關聯的,txt打不開沒什麼大不了,如果木馬是和exe文件關聯而你貿然地刪了它......你苦了!連regedit都不能運行了!
之所以把殺病毒軟體放在最後是因為它實在沒有太大的用,包括一些號稱專殺木馬的軟體也同樣是如此,不過對於過時的木馬以及菜鳥安裝的木馬(沒有配置服務端)還是有點用處的,值得一提的是最近新出來的ip armor在這一方面可以稱得上是比較領先的,它採用了監視動態鏈接庫的技術,可以監視所有調用Winsock的程序,並可以動態殺除進程,是一個個人防禦的好工具(雖然我對傳說中“該軟體可以查殺未來十年木馬”的說法表示懷疑,嘿嘿,兩年後的事都說不清,誰知道十年後木馬會“進化”到什麼程度?甚至十年後的操作系統是什麼樣的我都想象不出來)
另外,對於驅動程序/動態鏈接庫木馬,有一種方法可以試試,使用Windows的"系統文件檢查器",通過"開始菜單"-"程序"-"附件"-"系統工具"-"系統信息"-"工具"可以運行"系統文件檢查器"(這麼詳細,不會找不到吧? 什麼,你找不到!吐血! 找一張98安裝盤補裝一下吧),用“系統文件檢查器”可檢測操作系統文件的完整性,如果這些文件損壞,檢查器可以將其還原,檢查器還可以從安裝盤中解壓縮已壓縮的文件(如驅動程序)。如果你的驅動程序或動態鏈接庫在你沒有升級它們的情況下被改動了,就有可能是木馬(或者損壞了),提取改動過的文件可以保證你的系統安全和穩定。(注意,這個操作需要熟悉系統的操作者完成,由於安裝某些程序可能會自動升級驅動程序或動態鏈接庫,在這種情況下恢復"損壞的"文件可能會導致系統崩潰或程序不可用!)
只要你有一點點的疏忽,就有可能被人安裝了木馬,知道一些給人種植木馬的常見伎倆對於保證自己的安全不無裨益。
網上“幫”人種植木馬的伎倆主要有以下的幾條
a.軟哄硬騙法
這個方法很多啦,而且跟技術無關的,有的是裝成大蝦,有的是裝成PLMM,有的態度謙恭,有的......反正目的都一樣,就是讓你去運行一個木馬的服務端。
b.組裝合成法
就是所謂的221(Two To One二合一)把一個合法的程序和一個木馬綁定,合法程序的功能不受影響,但當你運行合法程序時,木馬就自動載入了,同時,由於綁定后程序的代碼發生了變化,根據特徵碼掃描的殺毒軟體很難查找出來。
c.改名換姓法
這個方法出現的比較晚,不過現在很流行,對於不熟練的windows操作者,很容易上當。具體方法是把可執行文件偽裝成圖片或文本----在程序中把圖標改成Windows的默認圖片圖標,再把文件名改為*.jpg *.exe,由於Win98默認設置是"不顯示已知的文件後綴名",文件將會顯示為*.jpg,不注意的人一點這個圖標就中木馬了(如果你在程序中嵌一張圖片就更完美了)
d.願者上鉤法
木馬的主人在網頁上放置惡意代碼,引誘用戶點擊,用戶點擊的結果不言而喻:開門揖盜;奉勸:不要隨便點擊網頁上的鏈接,除非你了解它,信任它,為它死了也願意...
a.不要隨便從網站上下載軟體,要下也要到比較有名、比較有信譽的站點,這些站點一般都有專人殺馬殺毒;
b.不要過於相信別人,不能隨便運行別人給的軟體;
(特別是認識的,不要以為認識了就安全了,就是認識的人才會給你裝木馬,哈哈,挑撥離間......)
c.經常檢查自己的系統文件、註冊表、埠什麼的,經常去安全站點查看最新的木馬公告;
d.改掉windows關於隱藏文件後綴名的默認設置(我是只有看見文件的後綴名才會放心地點它的)
e.如果上網時發現莫名其妙地硬碟亂響或貓上的數據燈亂閃,要小心;