文档章节

Linux环境下的高级隐藏技术

疯狂的小黑
 疯狂的小黑
发布于 2016/10/24 13:50
字数 1598
阅读 13
收藏 0
点赞 0
评论 0

linux相关资料由兄弟连www.itxdl.cn官方分享

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

 

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

 

  1.隐藏技术

 

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

 

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

 

  Linux用一个中断向量(128或者0x80)来实现系统调用,所有的系统调用都通过唯一的入口system_call来进入内核,当用户动态进程执行一条int 0x80汇编指令时,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寄存器找到中断描述符表,中断描述符表的第0x80项即是system_call函数的地址,这个地址将在后面的讨论中应用到。

 

    1.2.Linux 的LKM(可装载内核模块)技术

 

 

  为了使内核保持较小的体积并能够方便的进行功能扩展,Linux系统提供了模块机制。模块是内核的一部分,但并没有被编译进内核,它们被编译成目标文件,在运行过程中根据需要动态的插入内核或者从内核中移除。由于模块在插入后是作为Linux内核的一部分来运行的,所以模块编程实际上就是内核编程,因此可以在模块中使用一些由内核导出的资源,例如Linux2.4.18版以前的内核导出系统调用表(sys_call_table)的地址,这样就可以根据该地址直接修改系统调用的入口,从而改变系统调用。在模块编程中必须存在初始化函数及清除函数,一般情况下,这两个函数默认为init_module()以及clearup_module(),从2.3.13内核版本开始,用户也可以给这两个函数重新命名,初始化函数在模块被插入系统时调用,在其中可以进行一些函数及符号的注册工作,清除函数则在模块移除系统时进行调用,一些恢复工作通常在该函数中完成。

 

  1.3.Linux下的内存映像

 

  /dev/kmem是一个字符设备,是计算机主存的映像,通过它可以测试甚至修改系统,当内核不导出sys_call_table地址或者不允许插入模块时可以通过该映像修改系统调用,从而实现隐藏文件、进程或者模块的目的。

 

  1.4.proc 文件系统

 

  proc文件系统是一个虚拟的文件系统,它通过文件系统的接口实现,用于输出系统运行状态。它以文件系统的形式,为操作系统本身和应用进程之间的通信提供了一个界面,使应用程序能够安全、方便地获得系统当前的运行状况何内核的内部数据信息,并可以修改某些系统的配置信息。由于proc以文件系统的接口实现,因此可以象访问普通文件一样访问它,但它只存在于内存之中。

 

  2.技术分析

 

  2.1 隐藏文件

 

  Linux系统中用来查询文件信息的系统调用是sys_getdents,这一点可以通过strace来观察到,例如strace  ls 将列出命令ls用到的系统调用,从中可以发现ls是通过sys_getedents来执行操作的。当查询文件或者目录的相关信息时,Linux系统用sys_getedents来执行相应的查询操作,并把得到的信息传递给用户空间运行的程序,所以如果修改该系统调用,去掉结果中与某些特定文件的相关信息,那么所有利用该系统调用的程序将看不见该文件,从而达到了隐藏的目的。首先介绍一下原来的系统调用,其原型为:

int sys_getdents(unsigned int fd, struct dirent *dirp,unsigned int count)

其中fd为指向目录文件的文件描述符,该函数根据fd所指向的目录文件读取相应dirent结构,并放入dirp中,其中count为dirp中返回的数据量,正确时该函数返回值为填充到dirp的字节数。下图是修改后的系统调用hacked_getdents执行流程。

 

 图中的hacked_getdents函数实际上就是先调用原来的系统调用,然后从得到的di

© 著作权归作者所有

共有 人打赏支持
疯狂的小黑
粉丝 2
博文 96
码字总数 80472
作品 0
东城
程序员
linux+Oracle集群课程全面升级

作为国内最早从事开源架构师级课程研发的公司,从2006年10月开始,荣新稳步提升,将互联网运维作为主导就业方向,并将Linux集群架构课程发展成为国内最顶级、覆盖技术最全面的Linux课程,作为...

张琦
06/26
0
0
Linux 上的基础网络设备详解

Linux 抽象网络设备简介 和磁盘设备类似,Linux 用户想要使用网络功能,不能通过直接操作硬件完成,而需要直接或间接的操作一个 Linux 为我们抽象出来的设备,既通用的 Linux 网络设备来完成...

ustbgaofan
2014/12/17
0
0
Linux 服务器性能优于Windows 25%

网络世界里,谁更优异?微软Windows服务还是开源Linux? 这一争论引发着激烈的见解,但根据一名有着丰富Windows和Linux开发经验的IT顾问的说法,它只是一个关于哪一服务器操作系统更适合于所要...

walkerxk
2010/06/10
0
0
正在经历变革的 Linux 系统管理员技能

你上次编译内核是多久以前的事儿了?新生代 Linux 管理员的答案很简单:我压根儿没编译过内核。我也从没编译过内核,当然自己弄着玩儿的不算。我实在想不到我为啥需要自定义内核,所以我就用...

oschina
2014/08/16
5.2K
15
哪里可以找到 Kali Linux 的教程?

Kali Linux 秘籍 原书:Kali Linux Cookbook 译者:飞龙 在线阅读 PDF格式 EPUB格式 MOBI格式 Github Git@OSC 目录: 第一章 安装和启动Kali 第二章 定制 Kali Linux 第三章 高级测试环境 第...

wizardforcel0
07/02
0
0
Linux编程操作知识整理(continued)

前言:是自己对一种知识若干本的整合,当然是有主有次的,想尝试做下主题阅读方面的笔记。具体的内容整合到自己知识库里了。 一。文件I/O APUE里文件I/O讲的是“如何打开,读取,写入以及关闭...

im天行
2012/11/17
0
0
嵌入式软件学习方法 嵌入式软件知识

目前嵌入式软件的学习主要主要面向的几个操作系统是,Linux,WINCE、VxWorks等等。其中Linux是开源免费的,而且其源代码是开放的,更加适合我们学习嵌入式软件。下面我们介绍一下嵌入式软件学...

创客学院
04/12
0
0
PHP程序员进阶之路好书籍推荐

今天给PHP程序员们推荐几本PHP进阶好书,PHP程序员们不要以为自己现在已经工作就放弃了一个上进的心,现在互联网发展这么快,小心长江后浪推前浪,前浪死在沙滩上哦。。。 · 《UNIX网络编程...

Yomut
04/25
0
0
Linux基金会加入新领导成员,发布2015会议计划

  在过去的这么多年里,Linux 基金会已经成为了非常有影响力的组织,不仅仅是监督 Linux 直接相关的举措,同时还有一些重要技术措施,这些措施包括构建 "The Internet of Everything。这周...

fnnn99
2014/12/22
0
0
Cinnamon 3.8.3 发布,Linux 桌面交互环境

Cinnamon 3.8.3 已发布,更新内容: 在联机帐户中使用默认图标名称 删除无用的图标 Cinnamon 主题:改进窗口列表进程显示 设置:修复 mintsources/mintdrivers/lightdm-settings csstartup.p...

王练
05/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java 复制对象有哪些方式

java 复制对象有哪些方式 Apache的 Common beanutils库 org.apache.commons.beanutils.BeanUtils.copyProperties(dest,origin); Springframework 的BeanUtil 依赖: <dependency> ......

黄威
20分钟前
1
0
1.13 单用户模式

命令 init 6 #重启,reboot或shutdown -r now init 0 #重启,poweroff 单用户模式:密码忘记情况下 主机重启,按方向键↑,选择CentOS Linux (3.10.0-514.e17.X86 64) 7 (Core),按e键编辑...

小丑鱼00
22分钟前
1
0
jstack的简单使用

公司测试反应, 一个java应用的机器,cpu始终是30%, 即使不做交易, 于是想到了之前看到的jstack文章, 实践步骤记录一下: 1, 找出java应用的进程号 ps -ef|grep 应用名|grep -v grep 2, 找出pid...

零二一七
27分钟前
1
0
崛起于Springboot2.X之项目war打包部署(18)

将springboot项目打包步骤: 1、启动类 extends SpringBootServletInitializer 2、启动类添加覆盖方法 @Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder......

木九天
36分钟前
2
0
导入CSV文件就行数据整理分析

#-*-coding:utf-8-*-import csv,os,re,mathlocalPath=input("请输入所有群文件的根目录:") #所有QQ群文件的物理根目录路径def info(): info_dic=[] dirList=os.listdi...

Kefy
42分钟前
1
0
CoreText进阶(六)-内容大小计算和自动布局

CoreText进阶(六)-内容大小计算和自动布局 其它文章: CoreText 入门(一)-文本绘制 CoreText入门(二)-绘制图片 CoreText进阶(三)-事件处理 CoreText进阶(四)-文字行数限制和显示更...

aron1992
43分钟前
1
0
一个Unity高人的博客,涉猎范围很广,深度也很深。

https://blog.csdn.net/ecidevilin/article/list/

爽歪歪ES
45分钟前
0
0
Spring Cloud Config-Git后端

EnvironmentRepository的默认实现使用Git后端,这对于管理升级和物理环境以及审核更改非常方便。要更改存储库的位置,可以在Config Server中设置“spring.cloud.config.server.git.uri”配置...

itcloud
47分钟前
1
0
centos7 卸载mysql

[root@zyf ~]# rpm -qa|grep -i mysqlmysql-community-libs-5.6.34-2.el7.x86_64mysql-community-server-5.6.34-2.el7.x86_64mysql-community-release-el7-5.noarchmysql-community-......

Yao--靠自己
55分钟前
0
0
【Spring 系列 条件注解】

Spring 提供了按条件注册Bean的功能涉及到两个组件分别是:核心接口Condition,核心注解Conditional。 1、示例说明 为了演示条件注解的效果,需要定义一个属性文件,然后根据属性文件中配置的...

HansonReal
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部