版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
://tup張仁斌李鋼侯整風(fēng)
編著計(jì)算機(jī)病毒與反病毒技術(shù)清華大學(xué)出版社主要內(nèi)容Linux系統(tǒng)的啟動(dòng)過程ELF文件格式Linux病毒的感染機(jī)制病毒的根本原理及其防范第10章Unix/Linux病毒與病毒簡(jiǎn)介10.1.1文件結(jié)構(gòu)文件結(jié)構(gòu)是文件存放在磁盤等存貯設(shè)備上的組織方法。主要表達(dá)在對(duì)文件和目錄的組織上目錄提供了管理文件的一個(gè)方便而有效的途徑Linux使用標(biāo)準(zhǔn)的目錄結(jié)構(gòu),在安裝的時(shí)候,安裝程序就已經(jīng)為用戶創(chuàng)立了文件系統(tǒng)和完整而固定的目錄組成形式,并指定了每個(gè)目錄的作用和其中的文件類型10.1Linux文件系統(tǒng)根底Linux樹型目錄結(jié)構(gòu)示意圖10.1.2文件系統(tǒng)文件系統(tǒng)指文件存在的物理空間,Linux系統(tǒng)中每個(gè)分區(qū)都是一個(gè)文件系統(tǒng),都有自己的目錄層次結(jié)構(gòu)Linux將這些分屬不同分區(qū)的、單獨(dú)的文件系統(tǒng)按一定的方式形成一個(gè)系統(tǒng)的總的目錄層次結(jié)構(gòu)Linux文件系統(tǒng)使用索引節(jié)點(diǎn)來記錄文件信息,其作用類似Windows的文件分配表索引節(jié)點(diǎn)是一個(gè)結(jié)構(gòu),它包含了一個(gè)文件的長(zhǎng)度、創(chuàng)立及修改時(shí)間、權(quán)限、所屬關(guān)系、磁盤中的位置等信息一個(gè)文件系統(tǒng)維護(hù)了一個(gè)索引節(jié)點(diǎn)的數(shù)組,每個(gè)文件或目錄都與索引節(jié)點(diǎn)數(shù)組中的唯一一個(gè)元素對(duì)應(yīng)系統(tǒng)給每個(gè)索引節(jié)點(diǎn)分配了一個(gè)號(hào)碼,也就是該節(jié)點(diǎn)在數(shù)組中的索引號(hào),稱為索引節(jié)點(diǎn)號(hào)Linux文件系統(tǒng)將文件索引節(jié)點(diǎn)號(hào)和文件名同時(shí)保存在目錄中10.1Linux文件系統(tǒng)根底Linux系統(tǒng)啟動(dòng)過程10.2Linux系統(tǒng)啟動(dòng)過程簡(jiǎn)介ELF(ExecutableandLinkingFormat,可執(zhí)行鏈接格式)是Unix系統(tǒng)實(shí)驗(yàn)室(USL)作為應(yīng)用程序二進(jìn)制接口(ApplicationBinaryInterface,ABI)而開發(fā)和發(fā)布的工具接口標(biāo)準(zhǔn)委員會(huì)(TIS)選擇了正在開展中的ELF標(biāo)準(zhǔn)作為工作在32位Intel體系上不同操作系統(tǒng)之間可移植的二進(jìn)制文件格式ELF標(biāo)準(zhǔn)定義了一個(gè)二進(jìn)制接口集合,用以支持流線型的軟件開發(fā),從而減少不同執(zhí)行接口的數(shù)量,因此可以減少重新編程、重新編譯的代碼有關(guān)ELF的主要內(nèi)容:目標(biāo)文件(ObjectFiles),描述ELF目標(biāo)文件格式三種主要的類型程序轉(zhuǎn)載和動(dòng)態(tài)連接,描述目標(biāo)文件的信息和系統(tǒng)在創(chuàng)立運(yùn)行時(shí)程序的行為10.3ELF文件格式10.3.1目標(biāo)文件iABI的目標(biāo)文件的格式,被稱作ELF在目標(biāo)文件中有三種主要的類型:可重定位文件(RelocatableFile),保存著代碼和適當(dāng)?shù)臄?shù)據(jù),用來和其他的目標(biāo)文件一起創(chuàng)立一個(gè)可執(zhí)行文件或者是一個(gè)共享文件可執(zhí)行文件(ExecutableFile),保存著一個(gè)用來執(zhí)行的程序;該文件指出了exec(BA_OS)如何來創(chuàng)立程序進(jìn)程映像共享目標(biāo)文件(SharedObjectFile),保存著代碼和適宜的數(shù)據(jù),用來被下面的兩個(gè)鏈接器鏈接鏈接編輯器可以和其他的可重定位與共享目標(biāo)文件來創(chuàng)立其他的目標(biāo)動(dòng)態(tài)鏈接器聯(lián)合可執(zhí)行文件和其他的共享目標(biāo)文件來創(chuàng)立一個(gè)進(jìn)程映像10.3ELF文件格式10.3.1目標(biāo)文件目標(biāo)文件參與程序的鏈接(創(chuàng)立一個(gè)程序)和程序的執(zhí)行(運(yùn)行一個(gè)程序)從便利性和有效性來看,目標(biāo)文件格式提供了文件內(nèi)容的并行視圖,以反映出不同的需要Linking視圖Execution視圖10.3ELF文件格式10.3.2ELF頭#defineEI_NIDENT16typedefstruct{unsignedchare_ident[EI_NIDENT];/*目標(biāo)文件標(biāo)識(shí)*/Elf32_Halfe_type;/*目標(biāo)文件類型*/Elf32_Halfe_machine;/*給出文件的目標(biāo)體系結(jié)構(gòu)類型*/Elf32_Worde_version;/*目標(biāo)文件版本*/Elf32_Addre_entry;/*程序入口的虛擬地址,如果目標(biāo)文件沒有程序入口,可以為0*/Elf32_Offe_phoff;/*程序頭表的偏移量(按字節(jié)計(jì)算)*/Elf32_Offe_shoff;/*節(jié)頭表的偏移量(按字節(jié)計(jì)算)*/Elf32_Worde_flags;/*保存與文件相關(guān)的,特定于處理器的標(biāo)志*/Elf32_Halfe_ehsize;/*ELF頭部的長(zhǎng)度(以字節(jié)計(jì)算)*/Elf32_Halfe_phentsize;/*程序頭表的表項(xiàng)大小(按字節(jié)計(jì)算)*/Elf32_Halfe_phnum;/*程序頭表的表項(xiàng)數(shù)目,可以為0*/Elf32_Halfe_shentsize;/*節(jié)頭表的表項(xiàng)大小(按字節(jié)計(jì)算)*/Elf32_Halfe_shnum;/*節(jié)頭表的表項(xiàng)數(shù)目,可以為0*/Elf32_Halfe_shstrndx;/*節(jié)頭表中與節(jié)名稱字符串表相關(guān)的表項(xiàng)的索引*/}Elf32_Ehdr;10.3ELF文件格式10.3.3節(jié)一個(gè)目標(biāo)文件的節(jié)頭表可以定位所有的節(jié)節(jié)頭表是一個(gè)Elf32_Shdr結(jié)構(gòu)的數(shù)組一個(gè)節(jié)頭表的索引是這個(gè)數(shù)組的下標(biāo)節(jié)頭表的e_shoff成員給出了節(jié)頭表的偏移量(從文件開始計(jì)數(shù))。e_shnum說明節(jié)頭表中包含了多少個(gè)表項(xiàng);e_shentsize給出了每個(gè)表項(xiàng)的長(zhǎng)度節(jié)頭表索中某些引是保存的,這些專用索引在目標(biāo)文件中將沒有與之對(duì)的應(yīng)節(jié)節(jié)頭的結(jié)構(gòu)所示:10.3ELF文件格式typedefstruct{Elf32_Wordsh_name;/*節(jié)名稱。是節(jié)頭字符串表節(jié)的索引。名字是NULL結(jié)尾的字符串*/Elf32_Wordsh_type;/*為節(jié)的內(nèi)容和語(yǔ)義進(jìn)行分類*/Elf32_Wordsh_flags;/*節(jié)支持1位形式的標(biāo)志志,這些標(biāo)志描述了多種屬性*/Elf32_Addrsh_addr;/*如果節(jié)出現(xiàn)在進(jìn)程的內(nèi)存映像中,此成員給出節(jié)的第一個(gè)字節(jié)的地址,否則,此字段為0*/Elf32_Offsh_offset;/*此成員的取值給出節(jié)的第一個(gè)字節(jié)與文件頭之間的偏移。不過,SHT_NOBITS類型的節(jié)不占用文件的空間,因此其sh_offset成員給出的是其概念性的偏移*/Elf32_Wordsh_size;/*此成員給出節(jié)的長(zhǎng)度(字節(jié)數(shù))。除非節(jié)的類型是SHT_NOBITS,否則節(jié)占用文件中的sh_size字節(jié)。類型為SHT_NOBITS的節(jié)長(zhǎng)度可能非零,但不占用文件中的空間。*/Elf32_Wordsh_link;/*此成員給出節(jié)頭部表索引鏈接。其具體的解釋依賴于節(jié)類型*/Elf32_Wordsh_info;/*此成員給出附加信息,其解釋依賴于節(jié)類型*/Elf32_Wordsh_addralign;/*某些節(jié)帶有地址對(duì)齊約束。例如,若一個(gè)節(jié)保存一個(gè)doubleword,那么系統(tǒng)必須保證整個(gè)節(jié)能夠按雙字對(duì)齊。sh_addr對(duì)sh_addralign取模,結(jié)果必須為0。目前僅允許取值為0和2的冪次數(shù)。數(shù)值0和1表示節(jié)沒有對(duì)齊約束*/Elf32_Wordsh_entsize;/*某些節(jié)中包含固定大小的項(xiàng)目,如符號(hào)表。對(duì)于這類節(jié),此成員給出每個(gè)表項(xiàng)的長(zhǎng)度字節(jié)數(shù)。如果節(jié)中并不包含固定長(zhǎng)度表項(xiàng)的表,此成員取值為0*/}Elf32_Shdr;10.3.4字符串表字符串表節(jié)(StringTableSection)保存著以NULL終止的一系列字符(一般稱為字符串)目標(biāo)文件使用這些字符串來表示符號(hào)和節(jié)名一個(gè)字符串的引用是一個(gè)符串表節(jié)的索引。第一個(gè)字節(jié),即索引0,被定義保存著一個(gè)NULL字符。同樣的,一個(gè)符串表的最后一個(gè)字節(jié)保存著一個(gè)NULL字符,所有的字符串都以NULL終止索引0的字符串是沒有名字或者說是NULL,它的解釋依靠上下文。一個(gè)空的符串表節(jié)是允許的;它的節(jié)頭成員sh_size將為0。對(duì)空的符串表來說,非0的索引是沒有用的一個(gè)節(jié)頭的sh_name成員保存了一個(gè)對(duì)應(yīng)于該節(jié)頭字符串表的索引一個(gè)字符串表可能涉及該節(jié)中的任意字節(jié)。一個(gè)字符串可能引用不止一次,可能存在引用子串的情況。一個(gè)字符串也可能被引用假設(shè)干次,也允許存在不被引用的字符串10.3ELF文件格式10.3.5符號(hào)表一個(gè)目標(biāo)文件的符號(hào)表(SymbolTable)保存了一個(gè)程序在定位和重定位時(shí)需要的定義和引用的信息一個(gè)符號(hào)表索引是相應(yīng)的數(shù)組下標(biāo)10.3ELF文件格式typedefstruct{Elf32_Wordst_name;/*該成員保存了進(jìn)入該目標(biāo)文件的符號(hào)字符串表的索引。如果該值不為0,則它代表了給出符號(hào)名的字符串表索引。否則,該符號(hào)無名*/Elf32_Addrst_value;/*給出相應(yīng)的符號(hào)值,它可能是絕對(duì)值或地址等(依賴于上下文)*/Elf32_Wordst_size;/*許多符號(hào)和長(zhǎng)度相關(guān)。比如,一個(gè)數(shù)據(jù)對(duì)象的大小是該對(duì)象所包含的字節(jié)數(shù)目。如果該符號(hào)的大小未知或沒有大小則這個(gè)成員為0*/unsignedcharst_info;/*指出符號(hào)的類型和相應(yīng)的屬性*/unsignedcharst_other;/*目前為0,沒有含義*/Elf32_Halfst_shndx;/*每一個(gè)符號(hào)表的表項(xiàng)都定義為和某些節(jié)相關(guān),該成員保存了相關(guān)的節(jié)頭索引。某些節(jié)索引指出了特殊的含義*/}Elf32_Sym;10.3.6重定位重定位(Relocation)是鏈接符號(hào)引用和符號(hào)定義的過程。例如,當(dāng)一個(gè)程序調(diào)用一個(gè)函數(shù)的時(shí)候,相關(guān)的調(diào)用必須在執(zhí)行時(shí)把控制傳送到正確的目標(biāo)地址。也就是說,重定位文件應(yīng)當(dāng)包含有如何修改它們的節(jié)內(nèi)容的信息,從而允許可執(zhí)行文件或共享目標(biāo)文件為一個(gè)進(jìn)程的程序映像保存正確的信息10.3ELF文件格式typedefstruct{Elf32_Addrr_offset;Elf32_Wordr_info;}Elf32_Rel;
typedefstruct{Elf32_Addrr_offset;Elf32_Wordr_info;Elf32_Swordr_addend;}Elf32_Rela;10.3.7程序載入和動(dòng)態(tài)鏈接概述程序頭(ProgramHeader),描述和程序運(yùn)行相關(guān)的目標(biāo)文件結(jié)構(gòu)10.3ELF文件格式typedefstruct{Elf32_Wordp_type;/*此數(shù)組元素描述的段的類型,或者如何解釋此數(shù)組元素的信息*/Elf32_Offp_offset;/*此成員給出從文件頭到該段第一個(gè)字節(jié)的偏移*/Elf32_Addrp_vaddr;/*此成員給出段的第一個(gè)字節(jié)將被放到內(nèi)存中的虛擬地址*/Elf32_Addrp_paddr;/*此成員僅用于與物理地址相關(guān)的系統(tǒng)中,因?yàn)镾ystemV忽略所有應(yīng)用程序的物理地址信息,此字段對(duì)與可執(zhí)行文件和共享目標(biāo)文件而言具體內(nèi)容是未指定的*/Elf32_Wordp_filesz;/*此成員給出段在文件映像中所占的字節(jié)數(shù),可以為0*/Elf32_Wordp_memsz;/*此成員給出段在內(nèi)存映像中占用的字節(jié)數(shù),可以為0*/Elf32_Wordp_flags;/*此成員給出與段相關(guān)的標(biāo)志*/Elf32_Wordp_align;/*可加載的進(jìn)程段的p_vaddr和p_offset取值必須合適,相對(duì)于對(duì)頁(yè)面大小的取模而言。此成員給出段在文件中和內(nèi)存中如何對(duì)齊。數(shù)值0和1表示不需要對(duì)齊,否則p_align應(yīng)該是個(gè)正整數(shù),并且是2的冪次數(shù),p_vaddr和p_offset對(duì)p_align取模后應(yīng)該相等*/}Elf32_Phdr;10.3.7程序載入和動(dòng)態(tài)鏈接概述載入程序(ProgramLoading),在給定一個(gè)目標(biāo)文件時(shí),系統(tǒng)為了讓它運(yùn)行必須將它載入內(nèi)存10.3ELF文件格式MemberTextDatap_typePT_LOADPT_LOADp_offset0x1000x2bf00p_vaddr0x80481000x8074f00p_paddrunspecifiedunspecifiedp_filesz0x2be000x4e00p_memsz0x2be000x5e24p_flagsPF_R+PF_XPF_R+PF_W+PF_Xp_align0x10000x1000可執(zhí)行文件程序頭段10.3.7程序載入和動(dòng)態(tài)鏈接概述進(jìn)程映像段10.3ELF文件格式10.3.7程序載入和動(dòng)態(tài)鏈接概述程序解釋器系統(tǒng)為解釋器構(gòu)造了一個(gè)內(nèi)存映像,而不是使用原始的可執(zhí)行文件的段映像。此時(shí)該解釋器就負(fù)責(zé)接收系統(tǒng)來的控制并且為應(yīng)用程序提供一個(gè)環(huán)境變量解釋器使用兩種方法中的一種來接收系統(tǒng)來的控制接收一個(gè)文件描述符來讀取該可執(zhí)行文件,定位于開頭。它可以使用這個(gè)文件描述符來讀取并且(或者)映射該可執(zhí)行文件的段到內(nèi)存中依賴于該可執(zhí)行文件的格式,系統(tǒng)會(huì)載入這個(gè)可執(zhí)行文件到內(nèi)存中而不是給該解釋器一個(gè)文件描述符。伴隨著可能的文件描述符異常的情況,解釋器的初始進(jìn)程聲明應(yīng)匹配該可執(zhí)行文件應(yīng)當(dāng)收到的內(nèi)容10.3ELF文件格式10.3.7程序載入和動(dòng)態(tài)鏈接概述解釋器本身并不需要第二個(gè)解釋器。一個(gè)解釋器可能是一個(gè)共享對(duì)象也可能是一個(gè)可執(zhí)行文件一個(gè)共享對(duì)象在被載入的時(shí)候是與位置無關(guān)的,各個(gè)進(jìn)程可能不同;系統(tǒng)在mmap(KE_OS)使用的動(dòng)態(tài)段域?yàn)樗鼊?chuàng)立段和相關(guān)的效勞。因而,一個(gè)共享對(duì)象的解釋器將不會(huì)和原始的可執(zhí)行文件的原始段地址相沖突一個(gè)可執(zhí)行文件被載入到固定地址,系統(tǒng)使用程序頭表中的虛擬地址為其創(chuàng)立段。因而,一個(gè)可執(zhí)行文件解釋器的虛擬地址可能和第一個(gè)可執(zhí)行文件相沖突;這種沖突由解釋器來解決10.3ELF文件格式10.3.7程序載入和動(dòng)態(tài)鏈接概述動(dòng)態(tài)鏈接器(DynamicLinker)當(dāng)使用動(dòng)態(tài)鏈接方式建立一個(gè)可執(zhí)行文件時(shí),鏈接器把一個(gè)PT_INTERP類型的元素加到可執(zhí)行文件中,告訴系統(tǒng)把動(dòng)態(tài)鏈接器作為該程序的解釋器Exec(BA_OS)和動(dòng)態(tài)鏈接器合作為程序創(chuàng)立進(jìn)程,必須有如下的動(dòng)作:將可執(zhí)行文件的內(nèi)存段參加進(jìn)程映像中將共享對(duì)象的內(nèi)存段參加進(jìn)程映像中為可執(zhí)行文件和它的共享對(duì)象進(jìn)行重定位如果有一個(gè)用于讀取可執(zhí)行文件的文件描述符傳遞給了動(dòng)態(tài)鏈接器,那么關(guān)閉它向程序傳遞控制,就象該程序已經(jīng)直接從exec(BA_OS)接收控制一樣鏈接器同時(shí)也為動(dòng)態(tài)鏈接器構(gòu)建各種可執(zhí)行文件和共享對(duì)象文件的相關(guān)數(shù)據(jù)。這些數(shù)據(jù)駐留在可載入段中,使得它們?cè)趫?zhí)行過程中有效10.3ELF文件格式10.4.1有關(guān)Unix病毒的幾個(gè)誤區(qū)最大的一個(gè)誤區(qū)就是認(rèn)為很多高性能的平安系統(tǒng)能預(yù)防病毒蔓延另一個(gè)誤區(qū)就是認(rèn)為L(zhǎng)inux系統(tǒng)尤其可以防止病毒的感染,因?yàn)長(zhǎng)inux的程序都來自于源代碼,不是二進(jìn)制格式第三個(gè)誤區(qū)就是認(rèn)為Unix系統(tǒng)是絕對(duì)平安的,因?yàn)樗哂泻芏嗖煌钠脚_(tái),而且每個(gè)版本的Unix系統(tǒng)有很大的差異10.4Unix病毒概述10.4.2Shell腳本與病毒書寫Shell腳本病毒是一個(gè)很簡(jiǎn)單的制造Unix、Linux病毒的方法Shell在不同的Unix/Linux系統(tǒng)上的差異很小這種病毒可以算是一種跨系統(tǒng)的病毒Shell腳本病毒的危害性不會(huì)很大并且它本身極易被破壞,因?yàn)樗且悦魑姆绞骄帉懖?zhí)行的,任何用戶和管理員都可以覺察它10.4Unix病毒概述#infectionhead-n24$0>.testforfilein*doiftest-f$filetheniftest-x$filetheniftest-w$filethenifgrep-secho$file>.mmmthenhead-n1$file>.mmifgrep-sinfection.mm>.mmmthenrm-f.mmelsecat$file>.SAVEEcat.test>$filecat.SAVEE>>$filefi;fi;fi;fi;fidonerm.test.SAVEE.mmm.mm-f
取自身保存到.test遍歷文件系統(tǒng)
判斷是否為文件
判斷文件是否可執(zhí)行
判斷文件是否可寫
判斷是否為腳本程序
提取要感染的腳本程序的第一行判斷該文件是否已經(jīng)被感染
已經(jīng)被感染,則跳過還未被感染借用傳統(tǒng)的二進(jìn)制文件的感染機(jī)制
10.4.3蠕蟲早期的蠕蟲,根本上只運(yùn)行于Unix系統(tǒng),因?yàn)樽畛蹙W(wǎng)絡(luò)還處于以Unix平臺(tái)為主的時(shí)期莫里斯蠕蟲是最典型的代表。該蠕蟲利用SendMail程序存在的一個(gè)漏洞來獲取其它計(jì)算機(jī)的控制權(quán)。病毒一般會(huì)利用rexec、fingerd或者口令猜解來嘗試連接。在成功入侵之后,它會(huì)在目標(biāo)機(jī)器上編譯源代碼并且執(zhí)行它,而且會(huì)有一個(gè)程序來專門負(fù)責(zé)隱藏自己的蹤跡網(wǎng)絡(luò)蠕蟲一般都是利用的攻擊程序去獲得目標(biāo)機(jī)的管理員權(quán)限。但是蠕蟲的生命也很短暫,當(dāng)該蠕蟲所利用的漏洞被修補(bǔ)的話,那么該蠕蟲也就失去了它的作用10.4Unix病毒概述10.4.4欺騙庫(kù)函數(shù)可以LD_PRELOAD環(huán)境變量把標(biāo)準(zhǔn)的庫(kù)函數(shù)替換成自己的程序,從而讓宿主程序執(zhí)行替換后的程序10.4Unix病毒概述10.4.5Unix/Linux的平安現(xiàn)狀由于Linux繼承了Unix良好的權(quán)限管理機(jī)制,可執(zhí)行文件和系統(tǒng)文件不容易被感染,設(shè)計(jì)Unix或Linux上的病毒,面臨更大的技術(shù)困難,利用ELF格式的二進(jìn)制文件來制作病毒并不容易如果一個(gè)病毒感染的宿主文件擁有的權(quán)限是普通用戶權(quán)限,那么該病毒所得到的權(quán)限當(dāng)然也就只有普通用戶權(quán)限(并且病毒不會(huì)利用exploit來提升權(quán)限),只能對(duì)該用戶權(quán)限級(jí)別的文件和數(shù)據(jù)造成危害。但是當(dāng)一個(gè)病毒感染了一個(gè)root權(quán)限的文件的話,那么它就可以控制系統(tǒng)的一切目前Linux系統(tǒng)有可能還比較平安,但不代表永遠(yuǎn)平安Linux系統(tǒng)越來越流行,這將吸引大批病毒制造者,Unix/Linux病毒逐年升溫的趨勢(shì)已經(jīng)證明了這一點(diǎn)正如CIH病毒敲響了Windows系統(tǒng)的平安警鐘一樣,任何系統(tǒng)都難逃病毒的惡意攻擊目前已經(jīng)出現(xiàn)了跨Windows、Linux平臺(tái)的病毒10.4Unix病毒概述10.5.1病毒機(jī)理進(jìn)程映像包含“文本段〞(TextSegment,有時(shí)也稱代碼段)和“數(shù)據(jù)段〞(DataSegment)文本段的內(nèi)存保護(hù)屬性是r-x,因此一般自修改代碼不能用于文本段;數(shù)據(jù)段的內(nèi)存保護(hù)屬性是rw-并不要求段長(zhǎng)度是頁(yè)長(zhǎng)度的整數(shù)倍,常用到填充(Padding)典型的,數(shù)據(jù)段不需要從頁(yè)邊界開始,而文本段要求起始頁(yè)邊界對(duì)齊10.5基于ELF的計(jì)算機(jī)病毒10.5.1病毒機(jī)理一個(gè)進(jìn)程映像的內(nèi)存布局可能如下其中“T〞代表文本信息;“D〞代表數(shù)據(jù)信息;“P〞代表填充信息頁(yè)1、2、3組成文本段頁(yè)4、5、6組成數(shù)據(jù)段頁(yè)號(hào)#1[TTTTTTTTTTTTTTTT]←文本段內(nèi)容#2[TTTTTTTTTTTTTTTT]←文本段內(nèi)容#3[TTTTTTTTTTTTPPPP]←文本段內(nèi)容(局部)#4[PPPPDDDDDDDDDDDD]←數(shù)據(jù)段內(nèi)容(局部)#5[DDDDDDDDDDDDDDDD]←數(shù)據(jù)段內(nèi)容#6[DDDDDDDDDDDDPPPP]←數(shù)據(jù)段內(nèi)容(局部)10.5基于ELF的計(jì)算機(jī)病毒10.5.1病毒機(jī)理段邊界上的頁(yè)填充提供了插入寄生代碼的地方,只要空間允許,在這里插入寄生代碼不破壞原有段內(nèi)容,不要求重定位文本段結(jié)尾處的頁(yè)填充是插入寄生代碼的好的地方,插入寄生代碼之后,ELF文件布局如下所示ELFHeaderProgramheadertableSegment1-文本段(主體代碼)-寄生代碼Segment2SectionheadertableSection1..Sectionn10.5基于ELF的計(jì)算機(jī)病毒10.5.1病毒機(jī)理為了在文本段末尾插入寄生代碼,必須按如下步驟進(jìn)行:(1)修改ELF頭的成員e_shoff(e_phoff位于插入點(diǎn)之前)(2)定位文本段的程序頭:修改p_filesz、p_memsz的值(3)循環(huán)處理位于插入點(diǎn)之后各段相應(yīng)的程序頭:修改p_offset的值以反映新的位置(4)循環(huán)處理位于插入點(diǎn)之后各節(jié)相應(yīng)的節(jié)頭:修改sh_offset的值(5)在靜態(tài)文件中物理地插入寄生代碼,插入點(diǎn)位于文本段p_offset+p_filesz(修改之前的原始值)修改ELF頭成員e_shoff的原因在于節(jié)頭表位于插入點(diǎn)之后。一般而言,可執(zhí)行文件中的節(jié)頭表位于各段之后10.5基于ELF的計(jì)算機(jī)病毒10.5.1病毒機(jī)理為了適應(yīng)ELF標(biāo)準(zhǔn)中的這個(gè)要求,為了在宿主代碼之前運(yùn)行病毒體,還需要修改程序入口點(diǎn)的虛擬地址,同時(shí)需要在寄生代碼尾部能夠跳轉(zhuǎn)回宿主代碼原入口點(diǎn)繼續(xù)正常流程,插入寄生代碼的步驟修改如下:修改ELF頭成員e_shoff,以PAGE_SIZE為單位增加修正插入的寄生代碼的尾部,使之能夠跳轉(zhuǎn)回宿主代碼原入口點(diǎn)定位文本段的程序頭:修正ELF頭的e_entry,指向病毒體(p_vaddr+p_filesz);修正p_filesz,增加病毒體大小(注意:這里不是增加頁(yè)大小);修正p_memsz,增加病毒體大小(注意:這里不是增加頁(yè)大小)循環(huán)處理位于插入點(diǎn)之后各段相應(yīng)的程序頭:以PAGE_SIZE為單位增加p_offset的值循環(huán)處理位于插入點(diǎn)之后各節(jié)相應(yīng)的節(jié)頭:以PAGE_SIZE為單位增加sh_offset的值10.5基于ELF的計(jì)算機(jī)病毒10.5.1病毒機(jī)理在靜態(tài)文件中物理地插入寄生代碼及填充(確保構(gòu)成一個(gè)完整頁(yè)),插入點(diǎn)位于文本段p_offset+p_filesz(修改之前的原始值)經(jīng)過上述修改,病毒可以隨機(jī)遍歷一個(gè)目錄樹,尋找可執(zhí)行文件和動(dòng)態(tài)鏈接庫(kù)文件(對(duì)應(yīng)的e_type分別等于ET_EXEC、ET_DYN),加以感染10.5基于ELF的計(jì)算機(jī)病毒10.5.2一個(gè)Linux病毒原型分析例如病毒分為兩大局部ELF文件感染器(ELFInfector)文件感染器將二進(jìn)制代碼(病毒體)插入到ELF文件的文本段,并讓病毒體在目標(biāo)文件執(zhí)行時(shí)首先被執(zhí)行。其原理就是上一節(jié)介紹的病毒機(jī)理概念性病毒首先通過文件感染器將病毒代碼感染到一個(gè)ELF文件,這樣就創(chuàng)造了第一個(gè)帶毒文件,后續(xù)的傳播就由病毒自己來完成當(dāng)帶毒文件被執(zhí)行時(shí),會(huì)首先跳到病毒代碼開始執(zhí)行病毒代碼開始發(fā)作,在這個(gè)原型里,病毒會(huì)直接開始傳播病毒遍歷當(dāng)前目錄下的每一個(gè)文件,如果是符合條件的ELF文件就開始感染病毒的感染過程和ELFInfector的過程類似,但由于工作環(huán)境的不同,代碼的實(shí)現(xiàn)也是有較大區(qū)別的10.5基于ELF的計(jì)算機(jī)病毒10.5.2一個(gè)Linux病毒原型分析目前傳染對(duì)ELF文件的根本要求是文本段要有剩余空間能夠容納病毒代碼,如果無法滿足,病毒會(huì)忽略此ELF。對(duì)于被感染過一次的ELF文件,文本段將不會(huì)有剩余的空間,因此二次感染是不會(huì)發(fā)生的病毒代碼執(zhí)行過后,會(huì)恢復(fù)堆棧和所有存放器〔這很重要〕,然后跳回到真正的可執(zhí)行文件入口,開始正常的運(yùn)行過程10.5基于ELF的計(jì)算機(jī)病毒10.6.1病毒原理病毒其實(shí)也和計(jì)算機(jī)病毒一樣,它可以通過計(jì)算機(jī)執(zhí)行從而向亂發(fā)短信息嚴(yán)格地講,病毒應(yīng)該是一種計(jì)算機(jī)病毒,這種病毒只能在計(jì)算機(jī)網(wǎng)絡(luò)上進(jìn)行傳播而不能通過進(jìn)行傳播,因此所謂的病毒其實(shí)是計(jì)算機(jī)病毒程序啟動(dòng)了電信公司的一項(xiàng)效勞,例如電子郵件到短信息的功能,而且它發(fā)給的是文檔,根本就無破壞力可言。當(dāng)然也有的病毒破壞力還是比較大的,一旦發(fā)作可能比個(gè)人計(jì)算機(jī)病毒更厲害,傳播速度更快侵襲上網(wǎng)的病毒,會(huì)自動(dòng)啟動(dòng)錄音功能,并將錄音四處傳送,病毒也會(huì)自動(dòng)打出、刪除上的檔案內(nèi)容,以及制造出金額龐大的賬單10.6病毒簡(jiǎn)介10.6.1病毒原理由于局部病毒是從自動(dòng)打出時(shí)散播,因?yàn)榫W(wǎng)絡(luò)聯(lián)系得太完善,因而它比計(jì)算機(jī)病毒影響更廣,而將來隨著設(shè)計(jì)更復(fù)雜及功能更多元化,病毒帶來的災(zāi)害亦會(huì)更廣另外由于還有其他的數(shù)據(jù)通訊方式,例如短信息、WAP效勞,以及GRPS高速因特網(wǎng)連接效勞,一方面它們確實(shí)能給我們帶來方便,只需按幾個(gè)鍵就可以換個(gè)LOGO、下載喜愛的鈴聲,甚至可以實(shí)現(xiàn)高速的因特網(wǎng)連接。但也正是這些功能,可以寫入系統(tǒng)或內(nèi)存指令,攻擊者只要找到缺口,傳出一個(gè)帶毒的短信息,以操作系統(tǒng)的匯編語(yǔ)言編寫病毒指令,改變系統(tǒng)的機(jī)內(nèi)碼(machinecode),將指令藏在記憶體中,然后再開啟其他的本,大肆傳播病毒,在一定時(shí)間內(nèi)發(fā)作,破壞的開機(jī)系統(tǒng)10.6病毒簡(jiǎn)介10.6.2病毒的攻擊方式及危害針對(duì)的攻擊,主要可以分為以下幾類:攻擊WAP效勞器等相關(guān)設(shè)備,使WAP無法接收正常信息攻擊、控制接入效勞器,或者利用網(wǎng)關(guān)漏洞,向發(fā)送大量垃圾信息。典型的就是利用各大門戶網(wǎng)站的效勞漏洞,編寫程序,不停地用某個(gè)號(hào)碼訂閱某項(xiàng)效勞或者退定某個(gè)效勞,例如SMS.Flood病毒直接攻擊本身,使無法提供效勞。這種破壞方式難度相對(duì)較大,目前主要是利用程序的漏洞,發(fā)送精心構(gòu)造的短信(SMS)或者彩信(MMS),造成內(nèi)部程序出錯(cuò),從而導(dǎo)致不能正常工作,就像我們經(jīng)常在計(jì)算機(jī)上看到的“程序出錯(cuò)〞情況一樣。典型的例子就是針對(duì)西門子的Mobile.SMSDOS病毒10.6病毒簡(jiǎn)介10.6.3漏洞分析攻擊的一個(gè)重要途徑,就是利用漏洞。主要有以下一些漏洞:Nokia某些產(chǎn)品
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《唯美模板》課件
- 《禮儀插花的應(yīng)用》課件
- 單位管理制度集粹匯編人員管理十篇
- 《離合器檢修》課件
- 單位管理制度匯編大合集人事管理十篇
- 單位管理制度分享匯編【人力資源管理】十篇
- 單位管理制度分享大全職員管理篇
- 單位管理制度范例選集職員管理篇十篇
- 《中級(jí)計(jì)量經(jīng)濟(jì)學(xué)》課程教學(xué)大綱 (二)
- 八下期中測(cè)試卷02【測(cè)試范圍:第1-11課】(原卷版)
- 動(dòng)火作業(yè)審批表
- 過敏性紫癜課件PPT
- 浙江省紹興市諸暨市2023-2024學(xué)年數(shù)學(xué)三上期末達(dá)標(biāo)檢測(cè)試題含答案
- 腳手架質(zhì)量驗(yàn)收標(biāo)準(zhǔn)
- 小學(xué)思政課《愛國(guó)主義教育》
- 中藥材的性狀及真?zhèn)舞b別培訓(xùn)-課件
- 泵站項(xiàng)目劃分
- 綠化養(yǎng)護(hù)工作檢查及整改記錄表
- 新能源發(fā)電技術(shù)學(xué)習(xí)通課后章節(jié)答案期末考試題庫(kù)2023年
- GB/T 42752-2023區(qū)塊鏈和分布式記賬技術(shù)參考架構(gòu)
- Module 9 (教案)外研版(一起)英語(yǔ)四年級(jí)上冊(cè)
評(píng)論
0/150
提交評(píng)論