Linux操作系统下的高级隐藏技术详解

  本文深入分析了Linux环境下文件、进程及模块的高级隐藏技术,其中包括:Linux可卸载模块编程技术、修改内存映象直接对系统调用进行修改技术,通过虚拟文件系统proc隐藏特定进程的技术。

  隐藏技术在计算机系统安全中应用十分广泛,尤其是在网络攻击中,当攻击者成功侵入一个系统后,有效隐藏攻击者的文件、进程及其加载的模块变得尤为重要。本文将讨论Linux系统中文件、进程及模块的高级隐藏技术,这些技术有的已经被广泛应用到各种后门或安全检测程序之中,而有一些则刚刚起步,仍然处在讨论阶段,应用很少。

  1.隐藏技术

  1.1.Linux下的中断控制及系统调用

  Intel x86系列微机支持256种中断,为了使处理器比较容易地识别每种中断源,把它们从0~256编号,即赋予一个中断类型码n,Intel把它称作中断向量。

  Linux用一个中断向量(128或者0×80)来实现系统调用,所有的系统调用都通过唯一的入口system_call来进入内核,当用户动态进程执行一条int 0×80汇编指令时,CPU就切换到内核态,并开始执行system_call函数,system_call函数再通过系统调用表sys_call_table来取得相应系统调用的地址进行执行。系统调用表sys_call_table中存放所有系统调用函数的地址,每个地址可以用系统调用号来进行索引,例如sys_call_table[NR_fork]索引到的就是系统调用sys_fork()的地址。

  Linux用中断描述符(8字节)来表示每个中断的相关信息,其格式如下:

  偏移量31….16  一些标志、类型码及保留位

  段选择符      偏移量15….0

  所有的中断描述符存放在一片连续的地址空间中,这个连续的地址空间称作中断描述符表(IDT),其起始地址存放在中断描述符表寄存器(IDTR)中,其格式如下:

  32位基址值  界限

  其中各个结构的相应联系可以如下表示:

  通过上面的说明可以得出通过IDTR寄存器来找到system_call函数地址的方法:根据IDTR寄存器找到中断描述符表,中断描述符表的第0×80项即是system_call函数的地址,这个地址将在后面的讨论中应用到。

关注度: 13%

浏览次数:176

页: 1 2 3 4 5

此条发布在 星期四, 02月 21st, 2008 at 9:50 am 安全策略, 系统防护. 您可以通过 RSS 2.0 获得最新评论. 您可以到文章末尾留言。

留言