一. 誰是救世主
相信看過《黑客帝國》系列的朋友都不會對主人公尼奧感到陌生,這位闖入虛擬世界的程序員一次又一次演繹了“救世主”的角色,保護了城市居民,其形象早已深入人心。而離開電影後,我們廣大的計算機用戶要面對的又是另一種亦真亦假的數字虛擬世界——網絡,這裡同樣潛伏著許多危險,同樣存在“黑客帝國”,但這裡卻沒有尼奧這個人的存在,我們能看到的,只有形形色色的安全廠商和他們所提供的安全工具,除此之外,似乎已經沒有別的選擇。
於是乎,許多用戶把各種安全工具看成了這個世界中的“救世主”,我們看到許多關於安全工具的廣告,我們購買市面上流行的防病毒軟件,我們在聽聞每周一次的“新病毒預警”時趕緊升級病毒特征庫,我們每周都對電腦進行一次漫長的病毒掃描……許多人都這樣做,許多人不得不這樣做,因為我們把一切都交給殺毒工具了,我們什麼都不需要做了,我們只管肆無忌彈的上網聊天看電影下軟件,因為我們有殺毒工具,這些工具都具備一個“實時監測”的功能,它每時每刻都會檢查我們剛下載的文件,我們感到自己很安全,我們以為這就是網絡中的防御。
然而,事實真的如此美好嗎?依稀記得有一句話好像是這麼說的,“無論你做什麼事情,你都不可避免要付出一定的代價”,在我們安然自得的享受由殺毒工具帶來的安全防御的同時,,我們也在付出相應的代價。為什麼呢?因為殺毒工具是一套在系統啟動的時候就開始運行直到關機或者用戶退出它的時候才會停止運行的程序,它們的檢測和防御機制的效率是不能和尼奧相比的。舉個簡單例子,學過編程的人大概都知道,象棋程序是最難寫得完美的,因為象棋的走法從來都沒有一個固定的模式,我們能創造出許多花樣,但是程序不能,它只能按照有限的判斷機制去決定每一步棋怎麼走,這就是為什麼如今的許多象棋程序看起來像個傻瓜的原因。有人也許會說,做一個強大的象棋程序把盡可能遇到的走法都寫進去就可以了,這個象棋程序必然無敵。這樣是可行的,但是由此帶來的代價就是每個和它下棋的人可能都要花一輩子的時間了,因為程序在每走一步棋之前都要把所有盡可能遇到的情況都“思考”一遍,這樣是要付出時間作為代價的,如果要縮短時間,就要讓程序在同一時刻思考多種走法,但著時候,代價就變成龐大的系統資源消耗了——你能忍受麼?
同樣的缺陷正在殺毒軟件身上發生,我們知道,大部分殺毒軟件是采用“特征碼”技術去搜索病毒的,就是說,殺毒軟件引擎讀取一個程序或文件內容,並與自身數據庫裡儲存的已被確認為病毒程序體內某段特定代碼進行匹配,一旦兩者相同,殺毒軟件就“確認”此文件為病毒。隨著病毒家族的龐大,這個數據庫體積的增長也到了不可忽視的地步,加載的速度也就慢了。而且數據庫每增加一個病毒特征碼,殺毒引擎的判斷分支就要增多一條,相應的時間也會延長,為了避免出現掃描一個文件需要半小時的尴尬情況,殺毒軟件會采用各種提高匹配速度的方案,但這些方案無一例外都要瘋狂剝削用戶的系統資源,如果一台電腦的配置並不是很高,那麼在用戶查毒的時候,他基本上已經不能正常做其他工作了,找個電視台慢慢看連續劇吧,這就是尼奧的代價。
那麼,誰才是我們的救世主?答案就是——你自己。能信任的人永遠只有自己,只要肯努力,每個人都可以做尼奧,不過這也是有代價的,因為它把系統資源的消耗轉變為腦子的消耗,把判斷分支和經驗寫入腦子裡,在處理分支的效率上,人永遠比程序要靈活,而且這樣一來就不會出現依賴的惡性循環了,離開了殺毒軟件,我們要學會靠自己來保護自己不被這個虛擬世界傷害到。現在,就讓我們來做自己的救世主吧。
二. 做自己的救世主
小時候曾經看過一個故事《另一種侵略》,被人類打敗的宇宙侵略者送給人類一種水晶,只要人類拿起它想一種物品,這個物品就會出現在自己面前,於是每個人都開始沉浸於無盡的享受中,再也沒人去鑽研科技國防了,幾十年後,人類開始出現退化現象。這時候,宇宙侵略者又來訪問地球了,這次它們只用了一條條鞭子就征服了地球,在最後一個人類被驅逐進囚籠之前,他回頭含糊不清的說了句什麼話——連他的舌頭都退化得差不多了,也許他是說:“地球完了。”
以上的故事或許只是虛無的幻想,但類似的行為卻正在當代發生,如果一個用戶懷疑自己的電腦感染了後門,他的第一個反應大概會是打開殺毒工具。故事裡的人類太依賴水晶的魔力,現實中的我們太依賴殺毒軟件的方便快捷!也許有人會反對,既然能使用工具方便快捷的保護計算機安全,我又何必自尋煩惱學習安全防御?會這樣想的用戶沒有想到網絡的復雜,能闖進計算機的“客人”並非就是在各大安全工具廠商通緝名單上的成員,因為網絡中還流傳著一部分小規模使用而且沒有被公開的“私人後門”(例如大部分DDoS後門工具其實都是自己寫自己用的),有能力的人都可以自己寫“私人後門”,然後通過多種途徑放到別人的計算機上執行。這時候,“病毒庫特征碼”技術的局限性就開始顯露了,被感染了“私人後門”的用戶偶爾會察覺到計算機異常,然後他會開始查毒,結果因為滲透進系統的後門程序並沒有在病毒特征庫裡“登記”過,殺毒軟件就認不出它了,用戶只能在浪費大量時間後看著殺毒軟件報告的“沒有發現病毒”消息繼續“享受”被入侵的感覺。這個事實可笑嗎?我們只能在自己信賴的尼奧面前被敵人殺死——甚至這個尼奧也不復存在了,如果後門能把它踢出內存並刪除掉的話。
還是那句話,能信任的人只有自己,更何況這是網絡。所以,我們不能再戰戰兢兢的躲在掩體裡等待救世主消滅所有敵人了,我們要做自己的救世主!
三. 捕獲不請自來的“客人”
“600型機器人包裹的是橡膠外皮,很容易被認出來,但現在的101型機器人是生化技術制造的,有真實皮膚,會呼吸、流血、甚至口臭,一切都和人類一樣,直到它開始攻擊,你才能知道它不是人類。”
“那你們怎麼辦?”
“我們用狗識別終結者。”
——《終結者》
在《終結者》裡,狗是唯一可以區分敵我的工具,因為它判斷對方的方式並不僅僅靠眼睛——眼睛是可以被欺騙的,但是氣息不能,一個機器人無論偽裝得再怎麼逼真,都不能具備生命體的氣息,但是它能欺騙人類的視覺和聽覺,這就足夠了。
後門技術從誕生到現在,已經發展了好幾代,對自身的偽裝技術也越來越成熟了,從最初的啟動項結合隱藏進程方式,到最新的Ring0驅動方式,我們越來越難發現這些“客人”的痕跡,當它開始破壞的時候,已經來不及做補救措施了,所以,我們需要一種可以嗅出後門氣息的“狗”。
1.准備工作
在進行一切工作之前,用戶需要對系統有點了解,例如注冊表、啟動項、服務、常見的程序和進程名等,這是學習手工查毒最基本的要求,在初期可以多參考一些介紹系統概念的文章如到處都流傳的“系統進程詳解”、“WinXP系統服務簡介及優化措施”等,並做一點筆記,力求日積月累盡快記住一些最常見的系統程序和相關工具的使用方法,如果過不了這個門檻,後面的工作也就無從談起。
首先,我們必須了解Windows系統的三大知識點:注冊表(Registry)、進程(Process)和權限(Privilege)。
“注冊表”是出現在Windows 95及以後版本的一種數據庫。在這之前,用戶要對軟硬件工作環境進行配置,就要修改一種被稱為“配置設置”(INI)的文件來完成,但是由於每種設備或應用程序都得有自己的INI文件,無形中增加了管理難度,為了解決這個問題,微軟開始統一標准並將各種信息資源集中起來存儲,最終形成了將應用程序和計算機系統配置信息容納在一起的“注冊表”,用來管理應用程序和文件的關聯、硬件設備說明、狀態屬性以及各種狀態信息和數據等,注冊表維持著整個系統的正常運作。
注冊表采用一種類似文件目錄的結構樹來描述配置信息,最頂端的5個項目稱為“根鍵”(ROOT_KEY),系統能識別的所有的數據都是從它們這裡展開的,這5個根鍵分別是:
HKEY_CLASSES_ROOT(負責各種組件注冊類別和文件並聯信息)
HKEY_CURRENT_USER(當前登錄用戶的環境信息)
HKEY_LOCAL_MACHINE(整個系統的公共環境信息)
HKEY_USERS(所有用戶的環境配置信息)
HKEY_CURRENT_CONFIG(當前的配置信息)
其中,我們主要關注的是前面三個根鍵裡的數據,它們是後門最愛篡改的地方,分別是三個啟動項目“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run”、“HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run”和“HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices”,一般的後門都要通過修改這裡加入自己的配置信息以達到跟隨系統啟動的目的;除此之外就是文件並聯信息“HKEY_CLASSES_ROOT”,並聯型後門最愛更改這裡的.exe、.bat、.scr、.com等可執行文件的注冊信息,讓自己搶先一步運行。更多涉及到的注冊表內容以後會提到,現在讓我們來看看進程是什麼。
“進程”,是指一個可執行文件在運行期間請求系統在內存裡開辟給它的數據信息塊,系統通過控制這個數據塊為運行中的程序提供數據交換和決定程序生存期限,任何程序都必須擁有至少一個進程,否則它不被系統承認。進程從某一方面而言就是可執行文件把自身從存儲介質復制在內存中的映像,它通常和某個在磁盤上的文件保持著對應關系,一個完整的進程信息包括很多方面的數據,我們使用進程查看工具看到的“應用程序”選項卡包含的是進程的標題,而“進程”選項卡包含的是進程文件名、進程標識符、占用內存等,其中“進程文件名”和“進程標識符”是必須掌握的關鍵,“進程標識符”是系統分配給進程內存空間時指定的唯一數字,進程從載入內存到結束運行的期間裡這個數字都是保持不變的,而“進程文件名”則是對應著的介質存儲文件名稱,根據“進程文件名”