楊恩鎮(zhèn) 向來(lái)生
山東師范大學(xué) 山東 250014
木馬的首要特征是它的隱蔽性,為了提高自身的生存能力,木馬會(huì)采用各種手段來(lái)偽裝隱藏。常見(jiàn)的木馬隱藏方式主要有以下幾種。
文件隱藏,就是通過(guò)偽裝迷惑用戶(hù),并且隱藏木馬文件自身。木馬通常會(huì)設(shè)置自身文件的屬性為“隱藏”和“系統(tǒng)”,并把文件名改成類(lèi)似于系統(tǒng)文件的文件名來(lái)隱蔽自己;在Windows NT/2000中,可以利用NTFS的多數(shù)據(jù)流特性來(lái)實(shí)現(xiàn)文件隱藏;修改與文件系統(tǒng)操作有關(guān)的程序,可以過(guò)濾掉木馬信息。例如使用Rootkit技術(shù),通過(guò)修改系統(tǒng)呈現(xiàn)給用戶(hù)的文件列表,使用戶(hù)或檢測(cè)軟件無(wú)法發(fā)現(xiàn)木馬文件,從而實(shí)現(xiàn)隱藏;另外把木馬文件存放在特殊區(qū)域(如引導(dǎo)區(qū))也可以達(dá)到隱藏的目的。此外,常見(jiàn)的木馬文件隱藏方式有:嵌入到宿主文件中,即插入到某程序中或與某程序捆綁到一起;或者偽裝成圖片、文本等非可執(zhí)行文件;或者復(fù)制多個(gè)副本隱蔽;或者采取文件替換,即用修改后的DLL文件替換系統(tǒng)DLL文件。
啟動(dòng)隱藏,是指目標(biāo)機(jī)自動(dòng)加載運(yùn)行木馬程序,而不被用戶(hù)發(fā)現(xiàn)。在Windows系統(tǒng)中,典型的木馬自動(dòng)加載技術(shù)有:修改系統(tǒng)“啟動(dòng)”項(xiàng);修改注冊(cè)表的相關(guān)鍵值;修改“組策略”;修改系統(tǒng)配置文件(Win.ini、System.ini和Autorun.bat等);利用文件關(guān)聯(lián)技術(shù)和文件劫持技術(shù);上述啟動(dòng)方式,一般要修改系統(tǒng)的相關(guān)文件,容易被檢測(cè)工具發(fā)現(xiàn)。隨著木馬技術(shù)的發(fā)展,出現(xiàn)了更高級(jí)的服務(wù)自啟動(dòng)技術(shù)和插入系統(tǒng)服務(wù)自啟動(dòng)技術(shù)。服務(wù)自啟動(dòng)技術(shù)主要是木馬偽裝成系統(tǒng)服務(wù),操作系統(tǒng)在啟動(dòng)時(shí)自動(dòng)加載該服務(wù);插入系統(tǒng)服務(wù)自啟動(dòng)技術(shù)主要是將木馬自身插入系統(tǒng)服務(wù)程序,伴隨系統(tǒng)服務(wù)程序啟動(dòng)。
進(jìn)程隱藏,就是通過(guò)某種技術(shù)手段,使用戶(hù)不能發(fā)現(xiàn)木馬進(jìn)程,或者木馬程序不以進(jìn)程或服務(wù)的形式存在。木馬實(shí)現(xiàn)進(jìn)程隱藏的方式有兩種:偽隱藏和真隱藏。
偽隱藏,就是指木馬程序的進(jìn)程仍然存在,但不在任務(wù)管理器中顯示。在Windows 9x系統(tǒng)下,可以利用Register-ServiceProcess方法,把木馬進(jìn)程注冊(cè)為系統(tǒng)服務(wù),使其以服務(wù)的方式在后臺(tái)工作,而不出現(xiàn)在任務(wù)管理器的列表中;在Windows NT/XP系統(tǒng)中,可以將木馬編寫(xiě)為NT-Service,替換系統(tǒng)相應(yīng)的服務(wù)進(jìn)程,偽裝成合法服務(wù),實(shí)現(xiàn)自身進(jìn)程的隱藏。NameLess木馬就采用了這種技術(shù)。
典型的偽隱藏方法是利用API攔截技術(shù),建立一個(gè)后臺(tái)的系統(tǒng)鉤子(Hook),攔截 ToolHelp API、PDH(Performance Data Helper)、PSAPI(Process Status API)的EnumProcessModules等相關(guān)函數(shù)的調(diào)用,實(shí)現(xiàn)對(duì)進(jìn)程和服務(wù)的遍歷調(diào)用的控制,當(dāng)檢測(cè)到木馬進(jìn)程 ID(PID)的時(shí)候直接跳過(guò),這樣進(jìn)程信息中就不會(huì)包含該木馬程序的進(jìn)程,從而實(shí)現(xiàn)了木馬進(jìn)程的隱藏。
如今,當(dāng)我懷揣著文學(xué)夢(mèng),亦步亦趨來(lái)到北大之后,每天我只有珍惜,只有感恩,有時(shí),我會(huì)擔(dān)心第二天一覺(jué)醒來(lái),發(fā)現(xiàn)自己不在北大。我現(xiàn)在能做的,就是對(duì)身邊的每一個(gè)人好,用我的筆勤奮地耕耘下去,縱然艱難,但身處這樣一個(gè)和諧的環(huán)境內(nèi),不對(duì)立就是進(jìn)步,就是人生最大的成功。
真隱藏,是指讓木馬程序不以進(jìn)程或服務(wù)的方式工作,而是將木馬核心代碼以線(xiàn)程或DLL的方式插入到遠(yuǎn)程進(jìn)程中。
真隱藏的方法一般采用動(dòng)態(tài)嵌入技術(shù)、注冊(cè)表DLL插入、特洛伊DLL、CreateProcess插入和調(diào)試程序插入等。其中動(dòng)態(tài)嵌入技術(shù)比較流行,其原理是將自己的代碼嵌入正在運(yùn)行的其它進(jìn)程中。常見(jiàn)的動(dòng)態(tài)嵌入技術(shù)有:遠(yuǎn)程線(xiàn)程注入、掛接API、Windows Hook等。其中遠(yuǎn)程線(xiàn)程注入技術(shù)指的是通過(guò)CreateRemoteThread函數(shù)在一個(gè)遠(yuǎn)程進(jìn)程中創(chuàng)建遠(yuǎn)程線(xiàn)程,進(jìn)入該進(jìn)程的內(nèi)存地址空間。掛接API主要通過(guò)改寫(xiě)代碼或修改待掛接模塊的輸入節(jié)地址實(shí)現(xiàn),其中修改輸入節(jié)的方法更為實(shí)用,其不存在CPU問(wèn)題和線(xiàn)程同步問(wèn)題。
內(nèi)核模塊隱藏,就是使木馬程序依附到操作系統(tǒng)部件上,或成為操作系統(tǒng)的一部分。這種技術(shù)具有很好的隱藏性,但是實(shí)現(xiàn)起來(lái)比較復(fù)雜。在Windows系統(tǒng)中采用設(shè)備驅(qū)動(dòng)技術(shù),編寫(xiě)虛擬設(shè)備驅(qū)動(dòng)程序?qū)崿F(xiàn)。在Linux系統(tǒng)中,內(nèi)核級(jí)木馬一般使用LKM技術(shù)實(shí)現(xiàn)。LKM(load kernel module)主要是用于系統(tǒng)擴(kuò)展功能,不需要重新編譯內(nèi)核,就可以被動(dòng)態(tài)加載。由于LKM工作在內(nèi)核空間,對(duì)LKM的追蹤要比一般程序困難得多。
主要包括通信內(nèi)容、流量、信道和端口的隱藏。通信內(nèi)容隱藏主要是對(duì)傳輸內(nèi)容加密,隱藏通信內(nèi)容;當(dāng)不存在任何其他通信流量時(shí),木馬程序處于監(jiān)聽(tīng)狀態(tài),等待其他進(jìn)程通信。一旦出現(xiàn)其他通信流量時(shí),木馬程序也隨即啟動(dòng)通信,從而實(shí)現(xiàn)通信流量的隱藏;通信信道隱藏主要采用網(wǎng)絡(luò)隱蔽通道技術(shù)。比較常見(jiàn)的網(wǎng)絡(luò)隱蔽通道技術(shù)有:ICMP畸形報(bào)文傳遞、HTTP隧道技術(shù)、自定義TCP/UDP報(bào)文等。端口隱藏主要采用端口復(fù)用技術(shù),不打開(kāi)新的通信端口,而是在一個(gè)端口上建立了多個(gè)連接,利用系統(tǒng)實(shí)際存在的合法端口(如21、80、23等)進(jìn)行通訊和控制。
協(xié)同隱藏,是指木馬為了能更好地實(shí)現(xiàn)隱藏,達(dá)到長(zhǎng)期潛伏的目的,通常融合多種隱藏技術(shù),多個(gè)木馬或多個(gè)木馬部件協(xié)同工作,保證木馬的整體隱藏能力。此類(lèi)木馬通常包含一個(gè)完成主要功能的主木馬和若干個(gè)協(xié)同工作的子木馬。子木馬協(xié)助主木馬實(shí)現(xiàn)功能和屬性的隱藏。Rootkit就是一個(gè)使用了協(xié)同隱藏技術(shù)的木馬,它包含多個(gè)子木馬程序,具有良好的反檢測(cè)能力。
木馬的查殺,最簡(jiǎn)單的方法是利用殺毒軟件,目前大多數(shù)殺毒軟件,比如卡巴斯基、諾頓、小紅傘、Avast等都能有效刪除大多數(shù)木馬。另外也可以使用專(zhuān)門(mén)的木馬專(zhuān)殺工具來(lái)殺除,例如木馬克星、Spy Sweeper、360安全衛(wèi)士等軟件。由于殺毒軟件和專(zhuān)殺工具的更新速度通常滯后于新木馬的出現(xiàn),因此有必要掌握木馬的檢測(cè)和手動(dòng)清除方法。
在我的電腦窗口下打開(kāi)工具-文件夾選項(xiàng)-查看-顯示所有文件和文件夾,可以看到隱藏的文件。再選擇顯示已知文件類(lèi)型擴(kuò)展名,查看是否存在多擴(kuò)展名的程序,如果有就可能是木馬文件。然后檢查系統(tǒng)文件是否都處于正常的系統(tǒng)文件夾內(nèi)。如果存在多個(gè)同樣的系統(tǒng)文件,那么就要注意查看是否為木馬文件。
由于木馬一般需要通過(guò)端口進(jìn)行通信(如冰河木馬使用7626端口進(jìn)行監(jiān)聽(tīng)),因此檢查系統(tǒng)開(kāi)放端口及連接是輔助判斷木馬的一個(gè)重要依據(jù)。用戶(hù)可以通過(guò)系統(tǒng)自帶的netstat命令查看系統(tǒng)的開(kāi)放端口和TCP/UDP連接,輔助使用Fport等工具具體查看進(jìn)程與端口的映射關(guān)系,來(lái)判斷系統(tǒng)是否有木馬存在。
用戶(hù)可以利用Windows系統(tǒng)自帶的任務(wù)管理器檢查系統(tǒng)的活動(dòng)進(jìn)程,觀察有沒(méi)有陌生的進(jìn)程,重點(diǎn)注意一些CPU占用率較高的進(jìn)程。另外借助一些專(zhuān)門(mén)工具如Process Explorer,用戶(hù)可以檢查更加詳盡的進(jìn)程列表信息,以此來(lái)判斷進(jìn)程的合法性。找到對(duì)應(yīng)木馬文件后,就可以把木馬進(jìn)程結(jié)束。
重點(diǎn)檢查注冊(cè)表啟動(dòng)項(xiàng)和系統(tǒng)服務(wù)相關(guān)鍵值。運(yùn)行regedit命令打開(kāi)注冊(cè)表,展開(kāi)“HKEY_LOCA-L_MACHINESoftwareMicrosoftWindowsCurrent-Version”和“HKEY_CURRENT_USERSoftwareM-icrosoftWindowsCurrentVersion”下的所有以Run開(kāi)頭的項(xiàng),檢查其下是否有新增的和可疑的鍵值。找到木馬程序的文件名后搜索整個(gè)注冊(cè)表,找出所有對(duì)應(yīng)的項(xiàng),然后刪除或修改注冊(cè)表里相應(yīng)的內(nèi)容,并將安裝路徑所指示的文件刪除。
檢查Win.ini。在C:WINDOWS目錄下有一個(gè)配置文件Win.ini,在它的[windows]字段中有啟動(dòng)命令“l(fā)oad=”和“run=”,在一般情況下,“=”后面是空白的,如果有啟動(dòng)程序,很可能就是木馬。
檢查System.ini。在System.ini中,其[boot]字段的“shell=explorer.exe”是加載木馬的常見(jiàn)位置。如果該字段變?yōu)檫@樣:“shell=explorer.exe某一程序名”,那么后面跟著的那個(gè)程序就是木馬。另外,Syste-m.ini的[386Enh]字段內(nèi)的“driver=路徑程序名”也是木馬常更改的項(xiàng)。
主要是利用Windows的文件保護(hù)特性,檢測(cè)驅(qū)動(dòng)程序/動(dòng)態(tài)鏈接庫(kù)類(lèi)型木馬,這些木馬會(huì)修改虛擬設(shè)備驅(qū)動(dòng)程序(vxd)或修改動(dòng)態(tài)鏈接庫(kù)(DLL)。使用Windows的系統(tǒng)文件檢查器可以檢測(cè)操作系統(tǒng)文件的完整性。如果系統(tǒng)驅(qū)動(dòng)程序或動(dòng)態(tài)鏈接庫(kù)被木馬程序修改,使用系統(tǒng)文件檢查器可以檢測(cè)出來(lái),并能從安裝盤(pán)中還原這些系統(tǒng)文件,以保證系統(tǒng)安全和穩(wěn)定。
防范木馬攻擊最基本的方法就是安裝殺毒軟件和防火墻,防火墻可以主動(dòng)攔截各種應(yīng)用程序的網(wǎng)絡(luò)連接,殺毒軟件可以查殺絕大部分的木馬。用戶(hù)可以輔助使用專(zhuān)業(yè)的木馬防護(hù)工具如360安全衛(wèi)士等實(shí)現(xiàn)對(duì)系統(tǒng)和網(wǎng)絡(luò)的監(jiān)控。
對(duì)于一般的木馬防護(hù)采取如下措施。
3.1.1 用戶(hù)管理策略
為了防止黑客非法入侵,用戶(hù)管理工作應(yīng)做到:①禁用來(lái)賓賬戶(hù),同時(shí)只保留必要的賬戶(hù);②安全密碼的設(shè)置要盡量復(fù)雜,并且定期更換;③設(shè)置賬戶(hù)鎖定策略,防止黑客反復(fù)破解用戶(hù)密碼。
3.1.2 文件共享策略
設(shè)置文件共享時(shí)要注意:①只有需要時(shí)才打開(kāi)文件共享,共享完畢后及時(shí)關(guān)閉。②關(guān)閉默認(rèn)共享和IPC$共享。用戶(hù)可以通過(guò)修改注冊(cè)表來(lái)刪除默認(rèn)共享,也可以通過(guò)在控制面板的服務(wù)管理器中關(guān)閉Server服務(wù)來(lái)解決。為了防止IPC入侵,用戶(hù)可以通過(guò)修改注冊(cè)表禁止IPC$共享和IPC$空連接。
3.1.3 修復(fù)漏洞
很多木馬可以通過(guò)操作系統(tǒng)和應(yīng)用軟件漏洞侵入系統(tǒng),建議用戶(hù)開(kāi)啟Windows的自動(dòng)更新功能,及時(shí)升級(jí)系統(tǒng)。用戶(hù)可以使用專(zhuān)用安全工具進(jìn)行漏洞檢查,定期對(duì)漏洞進(jìn)行更新修復(fù)。
3.1.4 關(guān)閉不常用端口
木馬一般需要通過(guò)端口與外界進(jìn)行通信,為安全考慮應(yīng)當(dāng)關(guān)閉不常使用的端口。例如:關(guān)閉3389端口防止黑客通過(guò)遠(yuǎn)程終端服務(wù)默認(rèn)端口入侵。
3.1.5 關(guān)閉不必要的服務(wù)
Windows操作系統(tǒng)提供很多系統(tǒng)服務(wù)以方便管理,但開(kāi)啟太多服務(wù)也給入侵者打開(kāi)了方便之門(mén)。所以用戶(hù)可以根據(jù)需要在服務(wù)管理器中進(jìn)行設(shè)置,在允許的情況禁止可能為黑客入侵提供方便的服務(wù)。
用戶(hù)安全意識(shí)淡薄是木馬攻擊得以順利進(jìn)行的一個(gè)重要原因。用戶(hù)亟需加強(qiáng)安全意識(shí),杜絕木馬心理欺騙層面的入侵企圖。①不要隨意下載和運(yùn)行來(lái)歷不明的軟件,安裝軟件之前先用殺毒軟件查殺。②不隨意散播個(gè)人電子郵箱地址,不要任意執(zhí)行電子郵件中的附件。③不登錄陌生網(wǎng)站,禁用瀏覽器的“ActiveX控件和插件”以及“Java腳本”功能,禁用文件系統(tǒng)對(duì)象FileSystemObject,防止惡意站點(diǎn)網(wǎng)頁(yè)木馬全自動(dòng)入侵。
隨著網(wǎng)絡(luò)安全防范技術(shù)的不斷發(fā)展,木馬程序的入侵手段也在不斷變化,新型木馬層出不窮。新型木馬廣泛采用反彈端口、http隧道、API Hook技術(shù)、高級(jí)防火墻繞過(guò)技術(shù)、Rootkit技術(shù)等各種手段,使得木馬在系統(tǒng)中更具隱蔽性,更具危害性。因此,對(duì)木馬所采用的各種技術(shù)進(jìn)行深入的研究,有助于木馬程序的檢測(cè)和防范,可以更好的應(yīng)對(duì)木馬攻擊。
[1]Pelaez,C.E.,Bowles,J.,Computer viruses,System Theory.1991.Proceedings.,Twenty-Third Southeastern Symposium on.10-12 Mar 1991.
[2]康治平,向宏.特洛伊木馬隱藏技術(shù)研究及實(shí)踐[J].計(jì)算機(jī)工程與應(yīng)用.2006.
[3]張新宇,卿斯?jié)h,馬恒太等.特洛伊木馬隱藏技術(shù)研究[J].通信學(xué)報(bào).2004.