版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、10.1.1 文件(wnjin)结构 文件结构是文件存放在磁盘等存贮设备上的组织方法。主要(zhyo)体现在对文件和目录的组织上 目录提供了管理文件的一个方便而有效的途径 Linux使用标准的目录结构,在安装的时候,安装程序就已经为用户创建了文件系统和完整而固定的目录组成形式,并指定了每个目录的作用和其中的文件类型/rootbin home dev etc lib sbin tmp usr varX11R6 src lib local man binlib binLinux树型目录结构示意图第2页/共42页第1页/共42页第一页,共43页。10.1.2 文件系统 文件系统指文件存在的物理空间,
2、Linux系统中每个分区都是一个文件系统,都有自己的目录层次结构 Linux将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构 Linux文件系统使用索引节点来记录文件信息,其作用(zuyng)类似Windows的文件分配表 索引节点是一个结构,它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息 一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引节点数组中的唯一一个元素对应 系统给每个索引节点分配了一个号码,也就是该节点在数组中的索引号,称为索引节点号 Linux文件系统将文件索引节点号和文件名同时保存在目录中第3页/共42页第2页
3、/共42页第二页,共43页。Linux系统启动过程(guchng)BIOSlilo/grubKernel bootinitrc.sysinitrcmingettyloginshell启动电源使用Linux第4页/共42页第3页/共42页第三页,共43页。简介(jin ji) ELF(Executable and Linking Format,可执行链接格式)是Unix系统实验室(USL)作为应用程序二进制接口(Application Binary Interface,ABI)而开发和发布的 工具接口标准委员会(TIS)选择了正在发展中的ELF标准作为工作在32位Intel体系上不同操作系统之间
4、可移植的二进制文件格式 ELF标准定义了一个二进制接口集合,用以支持流线型的软件开发,从而减少不同执行接口的数量,因此可以(ky)减少重新编程、重新编译的代码 有关ELF的主要内容: 目标文件(Object Files),描述ELF目标文件格式三种主要的类型 程序转载和动态连接,描述目标文件的信息和系统在创建运行时程序的行为第5页/共42页第4页/共42页第四页,共43页。10.3.1 目标(mbio)文件 iABI的目标文件的格式,被称作ELF 在目标文件中有三种主要的类型: 可重定位文件(Relocatable File),保存着代码和适当的数据,用来和其他(qt)的目标文件一起创建一个可
5、执行文件或者是一个共享文件 可执行文件(Executable File),保存着一个用来执行的程序;该文件指出了exec(BA_OS)如何来创建程序进程映像 共享目标文件(Shared Object File),保存着代码和合适的数据,用来被下面的两个链接器链接 链接编辑器 可以和其他(qt)的可重定位与共享目标文件来创建其他(qt)的目标 动态链接器 联合可执行文件和其他(qt)的共享目标文件来创建一个进程映像第6页/共42页第5页/共42页第五页,共43页。10.3.1 目标(mbio)文件 目标文件参与程序的链接(创建一个程序)和程序的执行(运行一个程序) 从便利性和有效性来看,目标文件
6、格式提供(tgng)了文件内容的并行视图,以反映出不同的需要ELF头程序头表(可选)节1.节n.节头表ELF头程序头表段1段2.节头表(可选)Linking视图(sht)Execution视图第7页/共42页第6页/共42页第六页,共43页。10.3.2 ELF头#define EI_NIDENT 16#define EI_NIDENT 16typedef struct typedef struct unsigned char e_identEI_NIDENT; / unsigned char e_identEI_NIDENT; /* * 目标文件标识 * */ / Elf32_Half e_
7、type; / Elf32_Half e_type; /* * 目标文件类型 * */ / Elf32_Half e_machine; / Elf32_Half e_machine; /* * 给出文件的目标体系结构类型 * */ / Elf32_Word e_version; / Elf32_Word e_version; /* * 目标文件版本 * */ / Elf32_Addr e_entry; / Elf32_Addr e_entry; /* * 程序入口的虚拟地址,如果目标文件没有程序入口,可以为 0 0 * */ / Elf32_Off e_phoff; / Elf32_Off e
8、_phoff; /* * 程序头表的偏移量( (按字节计算) ) * */ / Elf32_Off e_shoff; / Elf32_Off e_shoff; /* * 节头表的偏移量( (按字节计算) ) * */ / Elf32_Word e_flags; / Elf32_Word e_flags; /* * 保存与文件相关的,特定于处理器的标志 * */ / Elf32_Half e_ehsize; / Elf32_Half e_ehsize; /* * ELF ELF 头部的长度( (以字节计算) ) * */ / Elf32_Half e_phentsize; / Elf32_Hal
9、f e_phentsize; /* * 程序头表的表项大小( (按字节计算) ) * */ / Elf32_Half e_phnum; / Elf32_Half e_phnum; /* * 程序头表的表项数目,可以为0 0 * */ / Elf32_Half e_shentsize; / Elf32_Half e_shentsize; /* * 节头表的表项大小( (按字节计算) ) * */ / Elf32_Half e_shnum; / Elf32_Half e_shnum; /* * 节头表的表项数目,可以为0 0 * */ / Elf32_Half e_shstrndx; / Elf3
10、2_Half e_shstrndx; /* * 节头表中与节名称字符串表相关的表项的索引 * */ / Elf32_Ehdr; Elf32_Ehdr;第8页/共42页第7页/共42页第七页,共43页。10.3.3 节 一个目标文件的节头表可以定位所有的节 节头表是一个Elf32_Shdr结构的数组 一个节头表的索引(suyn)是这个数组的下标 节头表的e_shoff成员给出了节头表的偏移量(从文件开始计数)。e_shnum说明节头表中包含了多少个表项;e_shentsize 给出了每个表项的长度 节头表索中某些引是保留的,这些专用索引(suyn)在目标文件中将没有与之对的应节 节头的结构所示:
11、第9页/共42页第8页/共42页第八页,共43页。typedef struct typedef struct Elf32_Word sh_name; / Elf32_Word sh_name; /* * 节名称。是节头字符串表节的索引。名字是NULL NULL 结尾的字符串 * */ / Elf32_Word sh_type; / Elf32_Word sh_type; /* * 为节的内容和语义进行分类 * */ / Elf32_Word sh_flags; / Elf32_Word sh_flags; /* * 节支持1 1位形式的标志志,这些标志描述了多种属性 * */ / Elf32_
12、Addr sh_addr; / Elf32_Addr sh_addr; /* * 如果节出现在进程的内存映像中,此成员给出节的第一个字节的地址, 否则,此字段为0 0 * */ / Elf32_Off sh_offset; / Elf32_Off sh_offset; /* * 此成员的取值给出节的第一个字节与文件头之间的偏移。 不过,SHT_NOBITSSHT_NOBITS类型的节不占用文件的空间,因此其 sh_offset sh_offset 成员给出的是其概念性的偏移 * */ / Elf32_Word sh_size; / Elf32_Word sh_size; /* * 此成员给出节
13、的长度( (字节数) )。除非节的类型是 SHT_NOBITSSHT_NOBITS, 否则节占用文件中的 sh_size sh_size 字节。类型为SHT_NOBITS SHT_NOBITS 的节长度 可能非零,但不占用文件中的空间。 * */ / Elf32_Word sh_link; / Elf32_Word sh_link; /* * 此成员给出节头部表索引链接。其具体的解释依赖于节类型 * */ / Elf32_Word sh_info; / Elf32_Word sh_info; /* * 此成员给出附加信息,其解释依赖于节类型 * */ / Elf32_Word sh_addra
14、lign; / Elf32_Word sh_addralign; /* * 某些节带有地址对齐约束。例如,若一个节保存一个 doubleworddoubleword, 那么系统必须保证整个节能够按双字对齐。sh_addrsh_addr对 sh_addralign sh_addralign 取模,结果必须为 0 0。目前仅允许取值为0 0和2 2的幂次数。 数值0 0和1 1表示节没有对齐约束 * */ / Elf32_Word sh_entsize; / Elf32_Word sh_entsize; /* * 某些节中包含固定大小的项目,如符号表。对于这类节, 此成员给出每个表项的长度字节数。
15、如果节中并不包含固定长度表项的 表,此成员取值为0 0 * */ / Elf32_Shdr; Elf32_Shdr;第10页/共42页第9页/共42页第九页,共43页。10.3.4 字符串表 字符串表节(String Table Section)保存着以NULL终止的一系列字符(一般称为字符串) 目标文件使用这些字符串来表示符号和节名 一个字符串的引用是一个符串表节的索引。第一个字节,即索引0,被定义(dngy)保存着一个NULL字符。同样的,一个符串表的最后一个字节保存着一个NULL字符,所有的字符串都以NULL终止 索引0的字符串是没有名字或者说是NULL,它的解释依靠上下文。一个空的符串
16、表节是允许的;它的节头成员sh_size将为0。对空的符串表来说,非0的索引是没有用的 一个节头的sh_name成员保存了一个对应于该节头字符串表的索引 一个字符串表可能涉及该节中的任意字节。一个字符串可能引用不止一次,可能存在引用子串的情况。一个字符串也可能被引用若干次,也允许存在不被引用的字符串第11页/共42页第10页/共42页第十页,共43页。10.3.5 符号表 一个目标文件的符号表(Symbol Table)保存了一个程序(chngx)在定位和重定位时需要的定义和引用的信息 一个符号表索引是相应的数组下标typedef struct typedef struct Elf32_Wor
17、d st_name; / Elf32_Word st_name; /* * 该成员保存了进入该目标文件的符号字符串表的索引。如果该值 不为 0 0 ,则它代表了给出符号名的字符串表索引。否则,该符号无名 * */ / Elf32_Addr st_value; / Elf32_Addr st_value; /* * 给出相应的符号值,它可能是绝对值或地址等( (依赖于上下文) ) * */ / Elf32_Word st_size; / Elf32_Word st_size; /* * 许多符号和长度相关。比如,一个数据对象的大小是该对象所包含的 字节数目。如果该符号的大小未知或没有大小则这个成
18、员为 0 0 * */ / unsigned char st_info; / unsigned char st_info; /* * 指出符号的类型和相应的属性 * */ / unsigned char st_other;/ unsigned char st_other;/* * 目前为0 0,没有含义 * */ / Elf32_Half st_shndx; / Elf32_Half st_shndx; /* * 每一个符号表的表项都定义为和某些节相关,该成员保存了相关 的节头索引。某些节索引指出了特殊的含义 * */ / Elf32_Sym; Elf32_Sym;第12页/共42页第11页/
19、共42页第十一页,共43页。10.3.6 重定位(dngwi) 重定位(Relocation)是链接符号引用和符号定义的过程。例如,当一个程序调用一个函数的时候,相关的调用必须在执行时把控制传送到正确的目标(mbio)地址。也就是说,重定位文件应当包含有如何修改它们的节内容的信息,从而允许可执行文件或共享目标(mbio)文件为一个进程的程序映像保存正确的信息typedef struct typedef struct Elf32_Addr r_offset; Elf32_Addr r_offset; Elf32_Word r_info; Elf32_Word r_info; Elf32_Rel;
20、 Elf32_Rel; typedef struct typedef struct Elf32_Addr r_offset; Elf32_Addr r_offset; Elf32_Word r_info; Elf32_Word r_info; Elf32_Sword r_addend; Elf32_Sword r_addend; Elf32_Rela; Elf32_Rela;第13页/共42页第12页/共42页第十二页,共43页。10.3.7 程序载入和动态链接(lin ji)概述 程序(chngx)头(Program Header),描述和程序(chngx)运行相关的目标文件结构typede
21、f struct typedef struct Elf32_Word p_type; / Elf32_Word p_type; /* * 此数组元素描述的段的类型,或者如何解释此数组元素的信息 * */ / Elf32_Off p_offset; / Elf32_Off p_offset; /* * 此成员给出从文件头到该段第一个字节的偏移 * */ / Elf32_Addr p_vaddr; / Elf32_Addr p_vaddr; /* * 此成员给出段的第一个字节将被放到内存中的虚拟地址 * */ / Elf32_Addr p_paddr; / Elf32_Addr p_paddr;
22、/* * 此成员仅用于与物理地址相关的系统中,因为System VSystem V忽略所有 应用程序的物理地址信息,此字段对与可执行文件和共享目标文件 而言具体内容是未指定的 * */ / Elf32_Word p_filesz; / Elf32_Word p_filesz; /* * 此成员给出段在文件映像中所占的字节数,可以为0 0 * */ / Elf32_Word p_memsz; / Elf32_Word p_memsz; /* * 此成员给出段在内存映像中占用的字节数,可以为0 0 * */ / Elf32_Word p_flags; / Elf32_Word p_flags; /
23、* * 此成员给出与段相关的标志 * */ / Elf32_Word p_align; / Elf32_Word p_align; /* * 可加载的进程段的p_vaddrp_vaddr和p_offsetp_offset取值必须合适,相对 于对页面大小的取模而言。此成员给出段在文件中和内存中如何对齐。数值0 0和1 1 表示不需要对齐,否则p_alignp_align应该是个正整数,并且是2 2的幂次数,p_vaddrp_vaddr和 p_offset p_offset 对 p_alignp_align取模后应该相等 * */ / Elf32_Phdr; Elf32_Phdr;第14页/共42
24、页第13页/共42页第十三页,共43页。10.3.7 程序(chngx)载入和动态链接概述 载入程序(chngx)(Program Loading),在给定一个目标文件时,系统为了让它运行必须将它载入内存ELF头程序头表其他信息Text段.0 x2BE00 bytesData段.0 x4E00 bytes其他信息.文件偏移文件虚拟地址00 x1000 x2BF000 x30D000 x80481000 x8073EFF0 x8074F000 x8079CFFMemberTextDatap_typePT_LOADPT_LOADp_offset0 x1000 x2bf00p_vaddr0 x804
25、81000 x8074f00p_paddrunspecifiedunspecifiedp_filesz0 x2be000 x4e00p_memsz0 x2be000 x5e24p_flagsPF_R+PF_XPF_R+PF_W+PF_Xp_align0 x10000 x1000可执行文件程序(chngx)头段第15页/共42页第14页/共42页第十四页,共43页。10.3.7 程序载入和动态(dngti)链接概述 进程( jnchng)映像段头部填充(Header Padding)0 x100 bytesText段.0 x2BE00 bytes数据填充(Data Padding)0 x100
26、bytes文本填充(Text Padding)0 x100 bytesData段.0 x4E00 bytes尚未初始化数据0 x1024 zero bytes页面填充(Page Padding)0 x2DC zero bytes虚拟地址内容段(Segment)0 x80480000 x8073F000 x8074F000 x807AD240 x80481000 x80740000 x8079D00TextData第16页/共42页第15页/共42页第十五页,共43页。10.3.7 程序载入和动态(dngti)链接概述 程序解释器 系统为解释器构造了一个内存映像,而不是使用(shyng)原始的可
27、执行文件的段映像。此时该解释器就负责接收系统来的控制并且为应用程序提供一个环境变量 解释器使用(shyng)两种方法中的一种来接收系统来的控制 接收一个文件描述符来读取该可执行文件,定位于开头。它可以使用(shyng)这个文件描述符来读取并且(或者)映射该可执行文件的段到内存中 依赖于该可执行文件的格式,系统会载入这个可执行文件到内存中而不是给该解释器一个文件描述符。伴随着可能的文件描述符异常的情况,解释器的初始进程声明应匹配该可执行文件应当收到的内容第17页/共42页第16页/共42页第十六页,共43页。10.3.7 程序载入和动态(dngti)链接概述 解释器本身并不需要第二个解释器。一个
28、解释器可能是一个共享对象也可能是一个可执行文件 一个共享对象在被载入的时候是与位置无关的,各个进程可能不同;系统在mmap(KE_OS)使用的动态段域为它创建段和相关的服务。因而,一个共享对象的解释器将不会和原始(yunsh)的可执行文件的原始(yunsh)段地址相冲突 一个可执行文件被载入到固定地址,系统使用程序头表中的虚拟地址为其创建段。因而,一个可执行文件解释器的虚拟地址可能和第一个可执行文件相冲突;这种冲突由解释器来解决第18页/共42页第17页/共42页第十七页,共43页。10.3.7 程序(chngx)载入和动态链接概述 动态链接器(Dynamic Linker) 当使用动态链接方
29、式建立一个可执行文件时,链接器把一个PT_INTERP类型的元素加到可执行文件中,告诉系统把动态链接器作为该程序(chngx)的解释器 Exec(BA_OS)和动态链接器合作为程序(chngx)创建进程,必须有如下的动作: 将可执行文件的内存段加入进程映像中 将共享对象的内存段加入进程映像中 为可执行文件和它的共享对象进行重定位 如果有一个用于读取可执行文件的文件描述符传递给了动态链接器,那么关闭它 向程序(chngx)传递控制,就象该程序(chngx)已经直接从exec(BA_OS)接收控制一样 链接器同时也为动态链接器构建各种可执行文件和共享对象文件的相关数据。这些数据驻留在可载入段中,使
30、得它们在执行过程中有效第19页/共42页第18页/共42页第十八页,共43页。10.4.1 有关(yugun)Unix病毒的几个误区 最大的一个误区就是认为很多高性能的安全系统能预防病毒蔓延 另一个误区就是认为Linux系统尤其可以防止病毒的感染,因为Linux的程序都来自于源代码,不是二进制格式 第三个误区就是认为Unix系统是绝对( judu)安全的,因为它具有很多不同的平台,而且每个版本的Unix系统有很大的差别第20页/共42页第19页/共42页第十九页,共43页。10.4.2 Shell脚本(jiobn)与病毒 书写Shell脚本病毒是一个很简单的制造Unix、Linux病毒的方法
31、Shell在不同的Unix/Linux系统上的差别很小 这种病毒可以算是一种跨系统的病毒 Shell脚本病毒的危害性不会很大并且(bngqi)它本身极易被破坏,因为它是以明文方式编写并执行的,任何用户和管理员都可以发觉它第21页/共42页第20页/共42页第二十页,共43页。#infection#infectionhead -n 24 $0 .test head -n 24 $0 .test for file in for file in * * dodoif test -f $file if test -f $file thenthenif test -x $file if test -x
32、$file thenthenif test -w $file if test -w $file thenthenif grep -s echo $file .mmm if grep -s echo $file .mmm thenthenhead -n 1 $file .mm head -n 1 $file .mm if grep -s infection .mm if grep -s infection .mm .mmm .mmm thenthenrm -f .mm rm -f .mm else else cat $file .SAVEE cat $file .SAVEE cat .test
33、$filecat .test $filecat .SAVEE $filecat .SAVEE $filefi; fi; fi; fi; fifi; fi; fi; fi; fidonedonerm .test .SAVEE .mmm .mm -frm .test .SAVEE .mmm .mm -f取自身保存到.test.test遍历文件系统判断是否为文件判断文件是否可执行判断文件是否可写判断是否为脚本程序提取要感染的脚本程序的第一行判断该文件是否已经被感染已经被感染, ,则跳过还未被感染借用传统的二进制文件的感染机制第22页/共42页第21页/共42页第二十一页,共43页。10.4.3 蠕虫
34、(r chn) 早期的蠕虫,基本上只运行于Unix系统,因为最初网络还处于以Unix平台为主的时期(shq) 莫里斯蠕虫是最典型的代表。该蠕虫利用SendMail程序存在的一个漏洞来获取其它计算机的控制权。病毒一般会利用rexec、fingerd或者口令猜解来尝试连接。在成功入侵之后,它会在目标机器上编译源代码并且执行它,而且会有一个程序来专门负责隐藏自己的踪迹 网络蠕虫一般都是利用已知的攻击程序去获得目标机的管理员权限。但是蠕虫的生命也很短暂,当该蠕虫所利用的漏洞被修补的话,那么该蠕虫也就失去了它的作用第23页/共42页第22页/共42页第二十二页,共43页。10.4.4 欺骗(qpin)库
35、函数 可以LD_PRELOAD环境变量把标准(biozhn)的库函数替换成自己的程序,从而让宿主程序执行替换后的程序第24页/共42页第23页/共42页第二十三页,共43页。10.4.5 Unix/Linux的安全(nqun)现状 由于Linux继承了Unix良好的权限管理机制,可执行文件和系统文件不容易被感染,设计Unix或Linux上的病毒,面临更大的技术困难,利用ELF格式的二进制文件来制作病毒并不容易 如果一个病毒感染的宿主文件拥有的权限是普通用户权限,那么该病毒所得到的权限当然也就只有普通用户权限(并且病毒不会利用exploit来提升权限),只能对该用户权限级别的文件和数据造成危害。
36、但是当一个病毒感染了一个root权限的文件的话,那么它就可以控制系统的一切 目前Linux系统有可能(knng)还比较安全,但不代表永远安全 Linux系统越来越流行,这将吸引大批病毒制造者,Unix/Linux病毒逐年升温的趋势已经证明了这一点 正如CIH病毒敲响了Windows系统的安全警钟一样,任何系统都难逃病毒的恶意攻击 目前已经出现了跨Windows、Linux平台的病毒第25页/共42页第24页/共42页第二十四页,共43页。10.5.1 病毒(bngd)机理 进程映像包含“文本段”(Text Segment,有时(yush)也称代码段)和“数据段”(Data Segment) 文
37、本段的内存保护属性是r-x,因此一般自修改代码不能用于文本段;数据段的内存保护属性是rw- 并不要求段长度是页长度的整数倍,常用到填充(Padding) 典型的,数据段不需要从页边界开始,而文本段要求起始页边界对齐第26页/共42页第25页/共42页第二十五页,共43页。10.5.1 病毒(bngd)机理 一个进程映像的内存布局可能如下 其中(qzhng)“T”代表文本信息;“D”代表数据信息;“P”代表填充信息 页1、2、3组成文本段 页4、5、6组成数据段页号#1 TTTTTTTTTTTTTTTT #1 TTTTTTTTTTTTTTTT 文本段内容(nirng)(nirng)#2 TTTT
38、TTTTTTTTTTTT #2 TTTTTTTTTTTTTTTT 文本段内容(nirng)(nirng)#3 TTTTTTTTTTTTPPPP #3 TTTTTTTTTTTTPPPP 文本段内容(nirng)(nirng)(部分) )#4 PPPPDDDDDDDDDDDD #4 PPPPDDDDDDDDDDDD 数据段内容(nirng)(nirng)(部分) )#5 DDDDDDDDDDDDDDDD #5 DDDDDDDDDDDDDDDD 数据段内容(nirng)(nirng)#6 DDDDDDDDDDDDPPPP #6 DDDDDDDDDDDDPPPP 数据段内容(nirng)(nirng)
39、(部分) )第27页/共42页第26页/共42页第二十六页,共43页。10.5.1 病毒(bngd)机理 段边界上的页填充提供了插入寄生代码的地方,只要空间允许(ynx),在这里插入寄生代码不破坏原有段内容,不要求重定位 文本段结尾处的页填充是插入寄生代码的好的地方,插入寄生代码之后,ELF文件布局如下所示ELF HeaderELF HeaderProgram header tableProgram header tableSegment 1 - Segment 1 - 文本(wnbn)(wnbn)段( (主体代码) )- - 寄生代码Segment 2Segment 2Section hea
40、der tableSection header tableSection 1Section 1. . .Section nSection n第28页/共42页第27页/共42页第二十七页,共43页。10.5.1 病毒(bngd)机理 为了在文本(wnbn)段末尾插入寄生代码,必须按如下步骤进行: (1)修改ELF头的成员e_shoff(e_phoff位于插入点之前) (2)定位文本(wnbn)段的程序头:修改p_filesz、p_memsz的值 (3)循环处理位于插入点之后各段相应的程序头:修改p_offset的值以反映新的位置 (4)循环处理位于插入点之后各节相应的节头:修改sh_offse
41、t的值 (5)在静态文件中物理地插入寄生代码,插入点位于文本(wnbn)段p_offset + p_filesz(修改之前的原始值) 修改ELF头成员e_shoff的原因在于节头表位于插入点之后。一般而言,可执行文件中的节头表位于各段之后第29页/共42页第28页/共42页第二十八页,共43页。10.5.1 病毒(bngd)机理 为了适应ELF规范中的这个要求,为了在宿主代码之前(zhqin)运行病毒体,还需要修改程序入口点的虚拟地址,同时需要在寄生代码尾部能够跳转回宿主代码原入口点继续正常流程,插入寄生代码的步骤修改如下: 修改ELF头成员e_shoff,以PAGE_SIZE为单位增加 修正
42、插入的寄生代码的尾部,使之能够跳转回宿主代码原入口点 定位文本段的程序头:修正ELF头的e_entry,指向病毒体(p_vaddr+p_filesz);修正p_filesz,增加病毒体大小(注意:这里不是增加页大小);修正p_memsz,增加病毒体大小(注意:这里不是增加页大小) 循环处理位于插入点之后各段相应的程序头:以PAGE_SIZE为单位增加p_offset的值 循环处理位于插入点之后各节相应的节头:以PAGE_SIZE为单位增加sh_offset的值第30页/共42页第29页/共42页第二十九页,共43页。10.5.1 病毒(bngd)机理 在静态文件中物理地插入寄生代码及填充(确保
43、构成一个完整页),插入点位于文本段p_offset + p_filesz(修改之前的原始值) 经过上述修改,病毒可以随机遍历(bin l)一个目录树,寻找可执行文件和动态链接库文件(对应的e_type分别等于ET_EXEC、ET_DYN),加以感染第31页/共42页第30页/共42页第三十页,共43页。10.5.2 一个(y )Linux病毒原型分析 示例病毒分为两大部分 ELF文件感染器(ELF Infector) 文件感染器将二进制代码(病毒体)插入到ELF文件的文本段,并让病毒体在目标(mbio)文件执行时首先被执行。其原理就是上一节介绍的病毒机理 概念性病毒 首先通过文件感染器将病毒代
44、码感染到一个ELF文件,这样就创造了第一个带毒文件,后续的传播就由病毒自己来完成 当带毒文件被执行时,会首先跳到病毒代码开始执行 病毒代码开始发作,在这个原型里,病毒会直接开始传播 病毒遍历当前目录下的每一个文件,如果是符合条件的ELF文件就开始感染 病毒的感染过程和ELFInfector的过程类似,但由于工作环境的不同,代码的实现也是有较大区别的第32页/共42页第31页/共42页第三十一页,共43页。10.5.2 一个Linux病毒(bngd)原型分析 目前传染对ELF文件的基本要求是文本段要有剩余空间能够容纳病毒代码,如果无法满足,病毒会忽略此ELF。对于被感染过一次的ELF文件,文本段
45、将不会有剩余的空间,因此(ync)二次感染是不会发生的 病毒代码执行过后,会恢复堆栈和所有寄存器(这很重要),然后跳回到真正的可执行文件入口,开始正常的运行过程第33页/共42页第32页/共42页第三十二页,共43页。10.6.1 手机病毒(bngd)原理 手机病毒其实也和计算机病毒一样,它可以通过计算机执行从而向手机乱发短信息 严格地讲,手机病毒应该是一种计算机病毒,这种病毒只能在计算机网络上进行传播而不能通过手机进行传播,因此所谓的手机病毒其实是计算机病毒程序启动了电信公司的一项服务,例如电子邮件到手机短信息的功能,而且它发给手机的是文档,根本就无破坏力可言。当然也有的手机病毒破坏力还是比
46、较大的,一旦发作可能比个人计算机病毒更厉害,传播速度更快 侵袭上网手机的病毒,会自动启动电话录音功能,并将录音四处传送,病毒也会自动打出电话、删除手机上的档案(dng n)内容,以及制造出金额庞大的电话账单第34页/共42页第33页/共42页第三十三页,共43页。10.6.1 手机(shu j)病毒原理 由于部分手机病毒是从自动打出电话时散播,因为手机网络联系得太完善,因而它比计算机病毒影响更广,而将来随着手机设计更复杂及功能更多元化,病毒带来的灾害亦会更广 另外由于手机还有其他的数据通讯方式,例如短信息、WAP服务,以及GRPS高速因特网连接服务,一方面它们确实能给我们带来方便,只需按几个键
47、就可以换个LOGO、下载喜爱的铃声,甚至可以实现高速的因特网连接。但也正是这些功能,可以写入系统或手机内存指令(zhlng),攻击者只要找到缺口,传出一个带毒的短信息,以手机操作系统的汇编语言编写病毒指令(zhlng),改变系统的机内码(machine code),将指令(zhlng)藏在记忆体中,然后再开启其他手机的电话本,大肆传播病毒,在一定时间内发作,破坏手机的开机系统第35页/共42页第34页/共42页第三十四页,共43页。10.6.2 手机(shu j)病毒的攻击方式及危害 针对手机的攻击,主要可以分为以下几类: 攻击WAP服务器等相关设备,使WAP手机无法接收正常信息 攻击、控制接
48、入服务器,或者利用网关漏洞,向手机发送大量垃圾信息。典型的就是利用各大门户网站的手机服务漏洞,编写程序,不停地用某个手机号码订阅某项服务或者退定某个服务,例如SMS.Flood病毒 直接攻击手机本身,使手机无法提供服务。这种破坏方式难度相对较大,目前(mqin)主要是利用手机程序的漏洞,发送精心构造的短信(SMS)或者彩信(MMS),造成手机内部程序出错,从而导致手机不能正常工作,就像我们经常在计算机上看到的“程序出错”情况一样。典型的例子就是针对西门子手机的Mobile.SMSDOS病毒第36页/共42页第35页/共42页第三十五页,共43页。10.6.3 手机漏洞(ludng)分析 攻击手机的一个重要途径,就是利用手机漏洞。主要有以下一些手机漏洞: Nokia某些产品PDU格式漏洞 Siemens 35系列特殊字符漏洞 Panasonic的GD87彩信手机漏洞 Orange 的SPV存在允许运行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论