linux中rookit的类型,Linux下一种rootkit的分析和检测

原标题:Linux下一种rootkit的分析和检测

*本文原创作者:linken,属于FreeBuf原创奖励计划,禁止转载

0×01 引言

前段时间在github上看到了一个开源的rootkit源码,代码量比较少,OS适配也比较容易。将分析的笔记整理成一篇小文,分享出来。水平有限,难免有疏漏和错误,敬请指教。

0×02 rootkit简介

这次介绍的是Linux下R0层的rootkit。

Intel的x86处理器是通过Ring级别来进行访问控制的,级别共分4层,从Ring0到Ring3(后面简称R0、R1、R2、R3)。R0层拥有最高的权限,R3层拥有最低的权限。按照Intel原有的构想,应用程序工作在R3层,只能访问R3层的数据;操作系统工作在R0层,可以访问所有层的数据;而其他驱动程序位于R1、R2层,每一层只能访问本层以及权限更低层的数据。 这应该是很好的设计,这样操作系统工作在最核心层,没有其他代码可以修改它;其他驱动程序工作在R1、R2层,有要求则向R0层调用,这样可以有效保障操作系统的安全性。但现在的OS,包括Windows和Linux都没有采用4层权限,而只是使用2层——R0层和R3层,分别来存放操作系统数据和应用程序数据,从而导致一旦驱动加载了,就运行在R0层,就拥有了和操作系统同样的权限,可以做任何事情,而所谓的rootkit也就随之而生了。实际上,所有的内核代码都拥有根权限,当然,并不一定它们都叫做rootkit,这要看你用它来做什么。R3层的rootkit通过文件完整性检测较容易发现。

0×03 下载地址

https://github.com/ivyl/rootkit

0×04 使用方法

1、编译安装完成后,通过/proc/rtkit和内核进行交互,内核模块默认是隐藏的,所有lsmod查看不到。通过cat /proc/rtkit查看,具体的信息如下:

1fad22e440d42115b11d15afee144d05.png

2、使用方法:

2.1、文件的隐藏 【 hides files prefixed with __rt or 10-__rt and gives root】

创建时候文件名以__rt或10-__rt开头即可默认隐藏。

621686906a18fedd5eb14912dc856bb2.png

2.2、进程隐藏的方法 【hpXXXX – hides proc with id XXXX】

echo -n hp1234>> /proc/rtkit

cae8948abd933b512d7f5fdc49b45a8a.png

2.3、自身模块的隐藏和显示分别通过 【mh – module hide ms – module show】

echo -n mh >> /proc/rtkit

echo -n ms >> /proc/rtkit

1819e483c5144a26e391b7874231a8e1.png

0×05 源码分析

进程隐藏的代码实现,通过拦截具体文件系统的回调函数,在回调函数中将指定的进程过滤掉,从而达到隐藏的目的。具体如下:

827e30017f051ebc02dcbfd34080bc76.png

6de4c4a4202727fd82abdfd8f0286250.png

ps命令的原理是通过读取/proc所有的信息,展示所有的进程。在读取/proc目录时,对应的函数被替换,从而达到隐藏进程的目的。文件隐藏的原理类似。

0×06 进程rootkit的检测

通过上文分析我们知道,所用到的rootkit隐藏技术是通过ps命令读取/proc的时候隐藏某些进程从而达到隐藏目的。所以如果我们将内核中进程链表所有的进程信息输出,并和ps查找到的进程进行比较,就可以找出哪些是被隐藏的进程。

在Linux中,内核通过进程链表把所有进程的描述符链接起来。每个task_struct结构体都包含一个list_head类型的tasks字段。表头是init_task描述符,即0进程的进程描述符。Init_task的tasks.prev字段指向链表中最后插入的进程描述符的tasks字段。#define for_each_process(p) \ for (p = &init_task ; (p = next_task(p)) != &init_task ; )这个宏用来遍历进程链表。检测的核心代码如下:

for_each_process(task_list) {

printk("[%d] %s",task_list->pid,task_list->comm);

}

此段代码将系统中所有的进程打印出来,将其结果和ps的结果对比即可找到隐藏的进程。测试的效果如下:

45d96e98c7064e525df33c3e44e03ea5.png

0×07 引述

https://www.cnblogs.com/findumars/p/5557283.html

<> 机械工业出版社

0×08 特别说明

上文中提到的内容只是用作技术讨论,请勿用于非法用途!

*本文原创作者:linken,属于FreeBuf原创奖励计划,禁止转载返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值