一. 跟不上時代的安全教科書新的學期開始了,某大學網絡管理專業三年級的同學們顯得特别興奮,這個學期的課程安排裡終于出現了“網絡安全”課程,一直對安全技術甚至黑客攻防手段感興趣的同學更是對這門課程充滿了期待,可是在幾天的課程下來以後,同學們的興奮之火卻被澆熄了不少:首先學校頒發的教材書籍裡的示例系統是Windows NT 4.0和Windows 98的安全攻防和簡單的木馬檢測,而同學們用的都是Windows XP,和NT的簡陋界面怎麼都聯系不到一塊;其次負責此課程的老師完全是屬于依葫蘆畫瓢的教學模式,甚至某次一個同學提問如何檢測查殺灰鴿子木馬的時候,老師足足盯了該同學5分鐘以後才冒出一句“用正版殺毒軟件啊!”。如此幾次下來,同學們已經明白,他們接觸到的所謂網絡安全教育,已經是被這個社會淘汰了的東西,一段時間後,網絡安全課創下了學生逃課最多、學生最不配合教師工作的記錄,在面對輔導員在班會上的批評時,他們隻能默默的在心裡念叨:學這些被淘汰的東西,會在實際生活中真實有用的嗎?我們連自己機器上的木馬病毒都不知道怎麼找出來,何況更深入的網絡安全學習?這是一個瘋狂的網絡時代,每隔一段時間就有大量新的漏洞被發掘出來,公開的、未公開的、地下流通的,最終都被别有用心的人制成入侵工具、新型後門、蠕蟲、流氓軟件等,在廣大對計算機處于懵懂狀态的用戶看來,這麼多術語他們并不去關心,他們所關心的是,自己正在用的防火牆産品有效嗎?而大量事實卻告訴我們,近年來反病毒産品的有效率正在逐步降低,在一部分用戶眼裡,如何配合第三方工具手工檢測查殺木馬正是他們迫切需要了解的,而這一切的基礎,卻又要涉及到各種基礎概念的理解消化,以及,木馬等惡意軟件的發展過程……二. 近代木馬與惡意程序發展史自BO、冰河誕生以來,國内的木馬曆史便正式展開了,下面我們以技術的發展突破作為界限,分别說說他們的曆史和發展趨勢。混沌時代:單打獨鬥的後台運行程序早期的特洛伊木馬後門先驅可以追溯到1997年那個網絡在國内還未大量普及的時代,在當時,初期階段的特洛伊木馬技術在國外早已熱火朝天,而國内衆多用戶卻還在用着撥号上網偶爾浏覽新聞和下載文件,隻有少數用戶知道并研究外國傳入的英文界面特洛伊木馬程序BO、SubSeven等,木馬技術始終屬于少數人手裡的“高科技”入侵工具,直到國産木馬“冰河”的出現和随後的幾個版本升級,才标志着國内用戶迎來了網絡木馬的混沌時代。冰河在2000年停止更新時放出的最後一個版本更是讓大家第一次體會到了遠程控制他人計算機的心跳感覺,于是冰河在短時間内就掀起了一股熱潮,一時之間國内許多計算機都對外開放了被冰河駐紮的标志——7626端口,并且大量的掃描報告也都指向7626端口,随後衆多帶有模仿性質和改良優化的其他後門也相應出事,這個時代的後門入侵是極其簡單的,究其原因,是由于那時候網絡防火牆的雛形仍在探索發展階段,大部分網絡用戶都是處于毫無防備的狀态下,而且那時候又有幾個人明白所謂的“安全問題”是什麼東西呢?于是許多人依靠這些木馬入了門。這一時期的木馬在現在的時代眼光看來,都是極其簡單的入門級産品了,但是由于當時的主流系統是安全性馬馬虎虎的Windows 9x系列,這些木馬隻需要簡單的一些功能函數就實現了在任務管理器中的隐藏,而且由于當時并沒有太多相對強大的第三方任務管理器,加上用戶自身安全意識比現在相對更低,于是造就了一個木馬招搖過市的時代。從技術上看,這時期的木馬後門普遍都是運行于用戶層(Ring3)上的隐藏了窗體并将自己在Windows9x中注冊為“服務程序”(RegisterAsService)的後台網絡應用程序,而且大部分并不存在自我保護功能,就連冰河的自我保護也是更改了一些常用文件如文本文件等類型的打開方式以實現的;這一時代的木馬啟動項也非常簡單易找,就現在的木馬發展程度來說,它們充其量隻能作為初學者的木馬查殺防範入門練習教材罷了,首先這些木馬的标準運行環境是毫無安全防禦可言的Windows 9x系統,到了NT架構系統上甚至會直接報錯退出運行了,隻有少數木馬對NT架構系統做了一點額外設置以便繞過Win9x專有的系統函數來确保運行順利,但是這樣的後果就是它們直接在NT系統自帶的任務管理器中暴露并簡單終結掉了;其次,用戶隻需要找到它的進程并終結,然後簡單的清理一下啟動項殘留數據就完成了木馬的查殺——大部分此類型的木馬的全部家當就是一個能夠自我複制到系統目錄并設置自啟動項的可執行程序而已,隻要這個程序消失,就等于把整個木馬掃地出門了。然而,由于這一時期的用戶群體幾乎沒有安全意識和相應反病毒産品領域的空白,這一批木馬技術先驅卻為後面的木馬發展打下了不可忽視的基礎。對于第一代木馬的查殺十分簡單,使用現在的任意一個任務管理器甚至Windows 2000/XP自帶的任務管理器就能發現其進程,通過與注冊表啟動項Run、RunServices的對比判斷即可找出,然後直接終結其進程,删除對應文件和啟動項信息,并檢查EXE和TXT等文件的關聯方式是否被“後門恢複程序”更改即可。__page_break__探索時代:被網絡防火牆信任的内部間諜好景不長,随着越來越多用戶對信息安全有了隐隐約約的需求和安全廠商适時推出了用于屏蔽過濾外部異常訪問掃描的網絡防火牆産品以後,許多用戶即使對計算機處于朦胧狀态,也會給自己安裝一個網絡防火牆産品——雖然用戶可能根本連它的用處是什麼都不知道;其次,網吧作為一種大衆普遍上網場所也開始流行起來,初涉木馬的試探者們很快發現他們無法成功對網吧裡的電腦進行連接控制了,但是在網吧裡使用木馬連接Internet上的受感染機器卻又不存在這個問題,這是為什麼?因為網吧的内部網絡環境是一個局域網,它使用私有IP地址進行通訊,對外部網絡的訪問出口是通過代理服務器(Proxy)或路由器NAT(網絡地址轉換,Network Address Translation)方式實現的,這兩種方法都會屏蔽掉内部網絡,所有内部網絡中的計算機對于公共網絡來說都是不可見的,也就是說,無論用戶在網吧内部什麼機器上種植了木馬,那麼隻要他離開了網吧到外面的公共網絡中意圖對這個木馬進行連接控制,他就會發現無論如何努力都做不到了,這是由于網吧對外提供的隻是一個由網絡接口設備負責通訊和地址轉換的公共網絡IP,用戶在公共網絡中執行的訪問操作都隻會被視為對這個網絡接口設備的訪問,而這個網絡接口設備上是不可能存在用戶剛才在網吧内部機器中設置的木馬的,而且由于連接條件匹配不充分,它也不會把這個連接請求轉交給内部網絡中任何一台計算機,所以網吧内部網絡裡植入的木馬根本就收不到來自外部的連接控制請求,自然也就無法工作了。這個現象直接導緻了基于C/S(客戶端/服務端)模式的傳統木馬在遇到網吧或者類似的局域網環境時無功而返,同時一部分安裝了網絡防火牆的用戶也由于防火牆默認屏蔽了外部網絡訪問的大部分端口而幸免于難,在相當一段時間内造成了傳統木馬一蹶不振的局面,然而好景不長,在經過一段時間的沉寂後,一種新型的木馬連接概念被提出來了,雖然其原理也是基于C/S模式的網絡連接,但是在連接時卻将态度轉了180度:這次的入侵,發出第一個連接請求的不再是遠程控制者使用的客戶端,而是受害者的木馬服務器端。第一個使用此概念的木馬名為“網絡神偷”,被設計用來從局域網内往外盜取文件數據。這個概念被業界稱為“端口反彈”,它的實現思路是将以往的C/S模式來了個逆轉:客戶端開啟一個本地端口來監聽遠方連接請求,而服務端卻是通過一些方法獲得客戶端IP以後主動來連接它,最終實現遠程控制。這個思路一下子就把網絡防火牆打個措手不及,因為早期的防火牆開發者并未考慮過通過本機主動發起的連接也會出現這種意料之外的情況,而對于網吧等局域網環境,它們更隻是會把這一行為視作用戶發出的一次正常網絡請求,于是,這個來自心靈地獄的連接請求最終和入侵者碰了頭,連接成功後發生的事情就和傳統木馬所要做的所有事情一模一樣了。在早期網絡防火牆尚未出現記錄本機主動連接請求的功能之前,要判斷自己的機器上是否存在反彈型木馬是一件比較困難的事情,因為使用端口反彈概念的服務端并不主動開放任何端口連接,在其未發起入侵連接之前,用戶無法得知自己機器進程裡是否有異常,直到它與遠方入侵者建立了連接,用戶才有可能在網絡程序狀态檢測工具裡看到一些對外連接的進程信息,可是這樣主動對外連接的進程也太多了,如Internet Explorer、Foxmail、QQ等也都是主動對外連接的,一般的用戶根本就無法将其判斷分析出來。端口反彈型木馬的出現雖然讓入侵的隐蔽等級又提高了一個層次,但是它也不是無懈可擊的,由于木馬需要實現主動連接客戶端的功能,而大部分入侵者是不會使用固定IP的,在生成木馬服務端的時候就必須使用一個相對固定的公共網絡連接方式讓服務端以後能通過這個途徑得到客戶端的控制請求,這一途徑經常是公共網絡上的HTTP空間或FTP空間,随着技術發展還出現過依賴動态域名直達客戶端的端口反彈型木馬,它們與客戶端建立連接的步驟是:1.服務端根據入侵者預設的反彈依據,連接到一個指定的公共網絡空間裡,通過讀取某個數據文件獲得客戶端的當前IP地址,這個數據文件是通過客戶端的自動更新上傳實現的。2.獲得IP地址數據後,服務端嘗試與之建立連接3.如果連接成功,則開始控制行為從上述步驟可以看出,反彈木馬的連接過程相比于其它正常程序的網絡連接,要多出一個獲取客戶端地址的步驟,這正是我們判斷一個程序是否反彈木馬的重要依據,針對這個特性,用戶可以使用以下步驟判斷一個程序是否反彈木馬:1.安裝Iris、Ethereal等工具,然後重啟計算機,重啟完畢後不要進行網絡連接,直接運行監聽工具并設置Filter為監視端口80和21的TCP通訊2.連接網絡,查看監聽工具的數據包捕獲情況3.如果出現HTTP或FTP請求,及時查看其報文内容,如果沒有采取簡單的加密文本,一般能直接看到發出的報文連接請求得到了一個帶有IP地址的回應數據,記錄其本機端口和遠程地址端口信息4.查看天網等防火牆的網絡應用程序端口情況,找到匹配以上記錄的那個進程,這個進程有超過80%的幾率屬于反彈木馬如果是新類型的直接使用動态DNS解析IP地址的反彈木馬呢?這種木馬其實更好發現,隻要設置監聽工具的Filter為監聽53端口,即可迅速發現這些特殊的域名解析包,由于動态域名的命名方式都具有一定的個性特征,而且它們的廠商信息都可以在網絡上直接查到,這樣一來即可迅速判斷機器上是否存在反彈木馬。__page_break__鋒芒小露:“無進程”木馬後門在2002年和2003年間,網絡上出現了3款令當時的用戶和安全技術者大呼頭痛的木馬作品“廣外系列”,分别是“廣外男生”、“廣外女生”以及“廣外幽靈”,這3個作品都使用了在當時頗感新鮮的技術“遠程線程注射”,做到了國内真正意義上的第一款“無進程”木馬——DLL木馬。“廣外男生”的主體是一個可執行程序EXE和一個動态鍊接庫DLL,而EXE隻是用于在開機時調用這個DLL執行木馬主線程并使用“遠程線程注射”(RemoteThread Inject)技術将DLL與這個EXE脫離開來,然後DLL的線程進入系統裡現有的任意一個進程的内存空間中維持運行,而用于執行最初的DLL啟動工作并實現在DLL被破壞時複活它的EXE會在DLL成功插入其他進程後自動退出,這種傳統的DLL啟動方式成為早期大量DLL木馬的加載方式,所以它存在一個弱點:在計算機啟動時用戶如果查看任務管理器的速度稍微快一些,他就能看到一個迅速消失的進程,而且這時期的DLL木馬雖然實施了無進程啟動,但卻是被動的加載方式,在如今可以枚舉并終止進程中相關DLL模塊的程序遍天下的現狀中,任意一款具備進程模塊查找功能的程序如Process Explorer、IceSword等都能将它們清理幹淨——它們的文件名太明顯了。但是不得不否認,早期的DLL木馬技術雖然隻是個雛形,但它卻是為如今到處橫行的真正無第三方EXE加載項(使用特殊技術令系統外殼程序加載它)的衆多惡意軟件和木馬的DLL主體的技術實現做了鋪墊。從最初的第三方EXE加載DLL啟動方式開始,到随後的使用rundll32.exe加載運行,再到利用NT服務的宿主程序svchost.exe實現啟動,直到現在的技術巅峰——使用“ShellExecuteHook”(執行挂鈎)技術。經常關注安全的用戶或許會見到過“ShellExecuteHook”,如今許多木馬和惡意程序都在用戶層使用它作為啟動方式了,但這是一種什麼技術,大家可能又會迷惑不解了,究竟這個技術和木馬有什麼聯系?其實這是一種正常的系統功能,名為“執行挂鈎”,操作系統廠商開發它的初衷十分簡單:為程序提供一個額外的通知功能,以實現系統中任何程序啟動時都提前讓使用了“執行挂鈎”的程序收到新程序的啟動通知,簡單的說,這是操作系統在出于某種程序交互需求的考慮下所衍生的技術,它的作用就是讓一部分程序能夠在其他程序開始運行之前就得知有新程序即将運行的通知,以及這個程序的映像文件名稱等信息,用于接收通知的程序必須遵循COM對象編程标準編寫。這個技術是通過外殼程序Explorer.exe實現的,它的加載項被指定在系統注冊表“HKLMSoftwareMicrosoftWindowsCurrentVersionExplorerShellExecuteHooks”内,用戶浏覽這裡會發現裡面并不是熟悉的路徑和文件名,而是一堆奇怪組合的數字和字符串,這些字符串被稱為“Class ID”(類唯一标識符,CLSID),每一個DLL模塊都擁有屬于它自己的唯一CLSID,操作系統自身是通過CLSID獲得這個DLL的詳細文件位置并加載它的。在執行挂鈎技術裡,這個注冊表鍵裡的數據就代表了申請接受通知的DLL模塊的CLSID,當一個新程序執行時,系統會将這個消息通過注冊表的執行挂鈎入口派發出去,而後系統會載入這些符合COM對象标準的DLL文件以執行它預先定義的線程代碼對消息進行處理,換句話說,也就是系統自己啟動了聲明為“執行挂鈎”對象的DLL模塊,它們的初次加載程序是外殼Explorer.exe。看到這裡,各位是不是覺得這個過程很熟悉?沒錯,這簡直就是第一代DLL木馬依靠第三方EXE實現自啟動的翻版,所不同的是,這次的DLL啟動宿主是系統外殼自身,而且它還擁有一個任何第三方EXE宿主都無法具備的功能:确保DLL在每一個進程啟動時自動加載運行。這個技術最早被殺毒軟件用于實現提前檢測功能,然而現在它卻被惡意軟件、木馬後門等程序編寫者大量的用在了不法行為之上,與IFEO的初衷一樣,它們的功能都被曲解應用了。由于這個技術的執行邏輯使得木馬主體DLL可以在每一個程序運行時也随着它執行并随之進入它的内存空間,成為其模塊之一,也就是說,這個技術使得做了保護措施的DLL木馬變得難以徹底查殺,而且它不會産生任何敏感位置的啟動項,也不需要指明一個加載器——它的加載器就是Explorer.exe自身。而廣大用戶中,能夠理解并找到這個注冊表項的人不多。使用這個技術的木馬如何查殺?其實别看它似乎很可怕,它也是有弱點的:由于這是Explorer實現的功能,它就必須依靠Explorer的存在而産生通知行為,一旦Explorer被終止執行,這類木馬也就沒有了加載器。大部分手工查殺木馬的用戶都發現使用這個技術的木馬無法徹底删除,其實這與他們的使用習慣有關,大部分用戶都是在需要用到什麼工具的時候才會去運行它,那麼回到開頭對這個技術的解釋來重新理解一下,你就會明白,這是因為你在其後運行其他工具的時候,執行挂鈎又将木馬DLL啟動了一次,并可能産生了另一個随機字符串組合的DLL文件名來添加新的加載項,如此惡意循環,最終便無法徹底查殺。正确的做法是,在運行了一堆自己預料到會用上的功能以後,将Explorer.exe終止,避免執行挂鈎再次被調用,随後使用工具争取一次就能把位于注冊表入口ShellExecuteHooks 内地DLL注冊信息和文件本體共同删除,這樣一來即可将木馬逐出機器。在工具的選擇上我推薦Sysinternal的Autoruns,它提供的ShellExecuteHooks清理一體化功能非常不錯。__page_break__漏洞先鋒:網頁木馬網頁木馬并不是指使用網頁編寫的木馬程序,也不是一種新的木馬類型,而是一種通過浏覽器漏洞實現普通木馬傳播的感染手段,這個時代裡浏覽器已經成為衆多入侵途徑的窗口,它們都是通過一些嵌入了特殊構造的漏洞執行代碼的網頁和腳本進行入侵的,其後果是浏覽器代替用戶自動運行了之前下載的木馬程序,這一切,讓人防不勝防。其實不僅僅是浏覽器自身漏洞可以引發木馬危機,各種以浏覽器為執行宿主的BHO控件漏洞也同樣可以導緻浏覽器崩潰或自行下載執行入侵者指定的頁面,如支付寶、Web迅雷、百度搜霸、藍天語音聊天室插件等IE控件都出現過危害程度高的漏洞。當一個被載入浏覽器的控件出現漏洞時,對用戶而言就等于是浏覽器自身出了漏洞,因為它們形成了宿主關系,其影響已經形成一體了,當入侵者使用特殊編寫的腳本誘使存在漏洞的控件發生溢出時,輕則控件發生崩潰直接導緻浏覽器也跟着崩潰,重則發生緩沖區溢出,執行來自浏覽器傳遞的攻擊代碼ShellCode而導緻用戶機器變成一個“木馬下載器”(Trojan-Downloader),自動下載執行木馬等危害程序。網頁木馬的曆史非常悠久,自從1999年MIME執行漏洞被公開後,早期的網頁木馬便宣告出世,如果你是那個時代就走過來的用戶,你一定聽說過“求職信”,它就是使用浏覽器MIME漏洞傳播的早期惡意程序之一,随後的“大無極”更是把漏洞影響擴散到了嚴重危害的程度。大部分網頁木馬的共同點都是依賴于用戶機器的浏覽器漏洞來實現下載木馬本體執行的功能,在相關廠商未出有效的安全補丁之前,我們能做的隻有通過某種手段預防漏洞危害,那就是利用浏覽器自身提供的一個小功能将問題控件暫時屏蔽。細心的用戶在閱讀一些安全小組的漏洞分析報告時,經常會看到這麼一句:“在軟件廠商未發布安全補丁之前,我們建議用戶對該控件設置Killbit”。那麼,什麼是“Killbit”?微軟編号Q240797的知識庫文章《如何禁止 ActiveX 控件在 Internet Explorer 中運行》一文對此做出了诠釋:Internet Explorer 有一項安全功能,可用于禁止 Internet Explorer HTML 呈現引擎加載某個 ActiveX 控件。此功能可通過進行注冊表設置來完成,這種設置叫做設置“killbit”。一旦設置了“killbit”,該控件即永遠不可加載,即使将其完全安裝也是如此。此設置可以确保,即使有漏洞的組件被引入或重新引入系統中,它也不具活性,沒有破壞力。實際上,這一設置的本質是将存在漏洞的控件在浏覽器裡的兼容性标識設置為“不安全”,于是在預先設定的浏覽器加載邏輯裡,這一“不安全”的控件就不會被加載,從而保證浏覽器不會攜帶着這個問題控件運行,其相關漏洞自然也就沒有了入口。兼容性标識位于系統注冊表的HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerActiveX Compatibility下,其子鍵為各個ActiveX控件的CLSID(有關CLSID概念請參見本文上半部分),每個CLSID項裡都有一個名為“Compatibility Flags”的DWORD類型值,當它的值為“0x00000400”即十六進制400或十進制1024時,浏覽器就會認為這個控件不安全而将其忽略,同時微軟還提供了“兼容的安全CLSID替代”功能,用于在對某個問題控件使用Killbit後指定的另一個功能替代控件,它是通過用戶建立一個名為“AlternateCLSID”的字符串實現的,其内容為功能替代控件的CLSID。地下工事破壞者:如今的主流技術“Rootkit”上面提到的木馬和惡意程序手段其實都是在用戶層Ring3級别運行的應用程序,所以它們無法做得非常厲害,隻要用戶使用适當的安全工具即可檢測并除去,然而現在,技術的戰鬥轉入了系統核心層Ring0。從最初的Rootkit概念提出到現在短短幾年的時間裡,Rootkit已經從一個神秘高深的危險技術變成了今天臭大街的東西,尤其是流氓軟件更是争先恐後的使用這一技術達到自己無法被消滅的目的。用《大腕》裡的一句經典台詞評價,那就是“如果你寫的惡意代碼不到Rootkit級别,那你都不好意思發布出來炫耀!”,如果當初說Rootkit是木馬界裡的艾滋病,那麼今天的網絡世界早已成為一個艾滋病村。Rootkit技術是如今這個時代的研究主流,從最初的可以在安全模式裡輕易發現并删除的灰鴿子保護驅動、3721保護驅動等,到現在的無視安全模式照常運行的驅動,它們在Ring0層裡實現的功能早已不再是簡單的文件隐藏保護手段,而是到了全面負責的地步,例如有一種Rootkit分為Ring3層執行程序和Ring0驅動兩部分,而它的Ring3啟動項是一般用戶無論如何也找不出來的,因為它的驅動實現的功能是在用戶系統每次啟動進入桌面,所有啟動項都未加載時将Ring3層可執行程序的路徑寫入啟動項,當桌面加載完畢、所有啟動項都執行完畢後,驅動又做了一件事情,它将剛才自己寫入的啟動項删除了,如此一來,不知情的用戶根本就不知道自己機器上存在過如此險惡的東西。三. 結語:我們還能做什麼毫無疑問,雖然每個時代的用戶都在經曆着木馬的來襲,但是很明顯,早期的用戶要過得更舒服一些,因為那時候還沒有Rootkit,還沒有這麼多DLL木馬,更沒有現在這種滿大街會武術的流氓景象。時代在發展,這些技術也會在彼此争鬥之中各自獲得突破口而往更高的等級發展,隻是每個時代的初級用戶都不可能和當今的技術同步,于是用戶成了技術發展的受害方。并非每個用戶都是安全專家,所以我們寄希望于反病毒産品,但它畢竟是商業的産品,并非所有用戶都能獲得足夠的更新,如果有一天用戶機器上的反病毒産品成為了傀儡,而用戶仍在毫不知情的信任它的掃描結果,那會是什麼樣的一種情形呢?在這個相對險惡的網絡環境裡,我們還能怎樣做?
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!