Linux病毒技术

Linux安全性

  • 一个最大的误区就是很多高性能的安全操作系统可以预防计算机病毒。
  • 另一个误区就是认为Linux系统尤其可以防止病毒的感染,因为Linux的程序都来自于源代码,不是二进制格式。
  • 第三个误区就是认为Linux系统是绝对安全的,因为它具有很多不同的平台,而且每个版本的Linux系统有很大的不一样。

Linux病毒分类

第一种: Shell脚本病毒
第二种: 蠕虫病毒
第三种: 欺骗库函数
第四种: 内核级的传播
第五种: 与平台兼容的病毒

Linux系统下的脚本病毒

  • shell在不同的Linux系统上面的差别很小。
  • Shell简单易学。

Linux可执行文件格式(ELF)

  • Elf 也就是 “Executable and Linking Format.”
  • Elf 起源于Unix,经改进应用于FreeBSD和Linux等现有类Unix操作系统。
  • 微软的PE格式也学习了ELF格式的优点。

ELF文档服务于在不同的操作系统上目标文件的创建或者执行文件的开发。它分以下三个部分:

  • “目标文件”描述了ELF目标文件格式三种主要的类型。
  • “程序装载和动态连接”描述了目标文件的信息和系统在创建运行时程序的行为。
  • “C 语言库”列出了所有包含在libsys中的符号、标准的ANSIC和libc的运行程序,还有libc运行程序所需的全局的数据符号。

三种主要类型:

  • 一个可重定位文件(relocatable file)保存着代码和适当的数据,用来和其他的目标文件一起来创建一个可执行文件或者是一个共享文件。
  • 一个可执行文件(executable file)保存着一个用来执行的程序,该文件指出了exec(BA_OS)如何来创建程序进程映象。
  • 一个共享目标文件(shared object file)保存着代码和合适的数据,用来被下面的两个链接器链接。第一个是链接编辑器,可以和其他的重定位和共享目标文件来创建另一个目标文件。第二个是动态链接器,联合一个可执行文件和其他的共享目标文件来创建一个进程映象。

  • 一个目标文件的节头表可以让我们定位所有的节。节头表是一个Elf32_Shdr结构的数组。一个节头表的索引是这个数组的下标。
  • ELF头结构中的e_shoff成员给出了节头表的偏移量(从文件开始计数)。
  • e_shnum告诉我们节头表中包含了多少个表项;
  • e_shentsize 给出了每个表项的长度。某些节头表索引是保留的,这些索引在目标文件中没有与之对应的节。

字符串表

字符串表节(String table sections)保存着以NULL终止的一系列字符,一般我们称为字符串。目标文件使用这些字符串来表示符号和节名。一个字符串的引用是一个字符串表节的索引。

字符表

一个目标文件的符号表(symbol table)保存了定位和重定位程序的定义和引用的信息。一个符号表索引是相应的下标。0表项特指了该表的第一个表项,就象未定义的符号索引一样。

重定位

重定位(Relocation)是链接符号引用和符号定义的过程。比如,当一个程序调用一个函数的时候,相关的调用必须在执行时把控制传送到正确的目标地址。换句话说,重定位文件应当包含如何修改他们的节内容的信息,从而允许可执行文件或共享目标文件为一个进程的程序映像保存正确的信息。

程序头

一个可执行的或共享的目标文件的程序头表是一个结构数组,每一个结构描述一个段或其他系统准备执行该程序所需要的信息。一个目标文件段包含一个或多个部分(就象下面的“段目录”所描述的那样)。程序头仅仅对于可执行或共享的目标文件有意义。

程序载入

当创建或增加一个进程映像的时候,系统在逻辑上将拷贝一个文件的段到一个虚拟的内存段。

动态链接

  • 程序解释器(Progam Interpreter)
    系统为解释器“编写”了一个内存映像,而不是使用原始的可执行文件的段映像。此时该解释器就负责接收来自系统的控制并且为应用程序提供一个环境变量。
  • 动态链接器(Dynamic Linker)
    当使用动态链接方式建立一个可执行文件时,链接器把一个PT_INTERP类型的元素加到可执行文件中,告诉系统像该系统的解释器一样调用动态链接器。
  • 动态节(Dynamic Section)
    如果一个目标文件参与动态的链接,它的程序头表将有一个类型为PT_DYNAMIC的元素。该“段”包含了.dynamic节。一个_DYNAMIC特别的符号,表明了该节包含了以下结构的一个数组。
  • 共享目标的依赖关系(Shared Object Dependencies)
    当链接器处理一个文档库时,它取出库中成员并且把它们拷贝到一个输出的目标文件中。当运行时没有包括一个动态链接器的时候,那些静态的链接服务是可用的。共享目标也提供服务,动态链接器必须把正确的共享目标文件链接到要执行的进程映象中。因此,可执行文件和共享的目标文件之间存在着明确的依赖性。
  • 全局偏移量表 (Global Offset Table,GOT)
    全局偏移量表在私有数据中保存着绝对地址,所以在不影响位置无关性和程序代码段共享能力的情况下应该使地址是可用的。一个程序参考它的GOT(使用位置无关的地址)并提取绝对的地址,所以与重定向无关的位置定位到绝对的位置。
  • PLT过程连接表(Procedure Linkage Table)
    正如GOT重定位把位置无关的地址计算成绝对地址一样,PLT过程链接表重定向那些与位置无关的函数调用到绝对的地址。

无关ELF格式的感染方法

  • 覆盖式感染
    这种感染最初的思路很简单,就是将病毒体直接拷贝到宿主文件中,从开始部分覆盖宿主文件,从而宿主文件被感染成单纯的病毒体,一般情况下宿主文件会遭到破坏,若要使得在病毒执行后仍然交换控制权给宿主文件,则需要给宿主文件备份,这里的思路并不复杂只是将原宿主文件复制到一个隐藏文件,然后在病毒体执行完之后执行宿主文件,使得进程映像中添加的是原宿主文件的内容。
  • 追加式感染
    这种感染最初的思路也很简单,同上面那种方式不同的是将病毒体直接追加到宿主文件中,或者将宿主追加到病毒体之后,并不存在覆盖宿主文件的行为,从而宿主文件被感染成单纯的病毒体和原宿主文件的合体,在病毒文件执行后交换控制权给宿主文件。

感染过程:

  • 查找当前目录下的可执行文件(也可以进行小规模的目录查找)
  • 找到可执行文件test后,
  • 修改病毒体,使病毒执行结束后能够提取宿主文件到一个新文件,然后执行这个新文件进行进程映像替换,即交还控制权给宿主文件;
  • 合并病毒体到test,不覆盖宿主文件,但放在宿主文件内容之前;

执行过程:

  • 病毒体先执行
  • 病毒体执行完后,找到病毒体尾部
  • 提取宿主文件到新文件
  • 执行新文件

利用ELF格式的感染方法

与ELF格式相关的感染方法,需要根据ELF格式来改变ELF格式内容,从而使病毒代码和宿主代码共存并且病毒代码执行结束后能顺利交接控制权给宿主。向ELF文件中插入寄生病毒代码要求宿主文件和病毒体都是完整的,因此插入的病毒代码会造成段的使用大小增加。

你可能感兴趣的:(计算机病毒)