rootkit是什么_iom是什么意思_ds是什么意思

电脑杂谈  发布时间:2017-01-11 02:08:49  来源:网络整理

1. 学习Rootkit需要了解的基础知识

0x1: 什么是rootkit

rootkit是允许某人控制操作系统的特定方面而不暴露他或她的踪迹的一组代码。从根本上说来,用户无法察觉这种特性构成了rootkit。rootkit会想尽办法去隐藏自己的网络、进程、I/O等信息(注意,这里所谓的隐藏,只是针对ring3的ui隐藏,内核层的功能不能隐藏,否则rootkit自己也无法使用功能了),所以,rootkit的攻防问题很大程度上是一个ring0争夺战的问题,监控程序必须直接深入到系统的底层去获取最原始的数据,才能避免因为rootkit的ring3隐藏导致的误判

0x2: 可装载内核模块(LKM)

Linux就是通常所说的单内核(monolithic kernel),它与微型内核(windows系统中常见)不同

LKM与直接编译到内核或典型程序的元素有根本区别

2.6及以上的本的Linux内核提供了更简单的bash命令用于构建LKM

Relevant Link:

0x3: ELF文件格式

关于ELF文件格式的内容请参阅另一篇文章:

0x4: 系统调用

关于系统调用的基本原理和内核代码,请参阅另外的文章

0x5: rootkit技术种类

0x6: rootkit的目的

Relevant Link:

2. 挂钩(HOOKING)

挂钩是一种使用处理程序(叫做挂钩)来修改控制流的编程技术。新的挂钩把它的地址注册为特定函数的地址,这样当那个函数被调用时,挂钩程序就代替它运行。一般,挂钩还会调用原先的函数,目的是维为了持原来的行为

可以看出,挂钩可用来扩展(或削弱)一个子程序的功能。rootkit是什么挂钩可按照rootkit的设计目的来修改操作系统的应用程序编程接口(API)的运行效果(有点类似设计模式中的装饰器设计模式)

rootkit是什么_iom是什么意思_ds是什么意思

0x1: 系统调用挂钩(Hooking a System Call)

系统调用是一种入口点,应用程序通过它向操作系统请求服务。通过挂住这些入口点,rootkit就能改变内核返回给某个或所有用户空间进程的数据。实际上,系统调用挂钩非常地有效,以至被大多数(可公开获取到的)rootkit在某种程度上都使用到了系统调用hook技术

从目前的情况看来,不论是对于尝试编写rootkit的攻击者、还是如要进行入侵检测防御的安全研究员来说,它们都会解除到的系统调用挂钩(Common System Call Hooks)大致有如下

关于系统调用hook的姿势,请参阅另一篇文章

对于系统调用挂钩,这里有几点核心的概念需要我们牢记

3. 直接内核对象操作

所有的操作系统(linux、windows)都会把内核中的运行状态(包括进程信息、系统内核状态)这些数据以对象的形式保存下来,包括:

这些内核状态信息往往保存在内核空间的某个地址段中,当我们通过系统向内核查询这些"内核状态信息"(运行进程的列表、开放的端口等)时,这些数据就被解析并返回。

因为这些数据是保存在内存中的,所以可以直接去操作它们,我们没有必要安装一个调用挂钩来改变控制流。这个技术通常叫做"直接内核对象操作(DKOM)"

0x1:内核队列数据结构(Kernel Queue Data Structures)

关于linux内核中的队列数据结构的相关知识,请参阅另一篇文章

0x2: 隐藏运行进程(Hiding a Running Process)

现在,我们已经linux在内核中是通过链表将各个进程串联起来,也掌握了如何操作这些链表的的"操作宏"。接下来可以继续学习一下如何通过直接修改这些"内核队列结构"来实现改变系统状态的,需要明白的是,不论是在linux还是在windows,所谓的系统状态就是内核中的一个个数据结构、链表共同组成的,我们平时使用API、系统调用去get()、set()各种状态,本质上就是在读写这些内核中的变量,所以,对内核变量进行直接定位并修改是改变linux内核状态的一个最好的思路

现在,我们已经linux在内核中是通过链表将各个进程串联起来,也掌握了如何操作这些链表的的"操作宏"。接下来可以继续学习一下如何通过直接修改这些"内核队列结构"来实现改变系统状态的,需要明白的是,不论是在linux还是在windows,所谓的系统状态就是内核中的一个个数据结构、链表共同组成的,我们平时使用API、系统调用去get()、set()各种状态,本质上就是在读写这些内核中的变量,所以,对内核变量进行直接定位并修改是改变linux内核状态的一个最好的思路

按照这个思想,我们可以直接去操作linux系统中表示进程的链表,断开其中某个元素后,系统在遍历这个链表的时候找不到指定元素,这个进程就被我们"隐藏"了

简单来说,这就是windows驱动hacking中常说的"断链法"

这里,我们需要对系统内核进程隐藏的攻防进行一下理解梳理

回到我们文章的例子上来看,task_struct链表就是CPU调度的依赖,我们如果对这个链表进行断链,则CPU自然也不会去调度这个进程了,为了解决这个问题,我们需要给内核打上hot-patch

hp.c

ds是什么意思_rootkit是什么_iom是什么意思

sht.c

Makefile

sh.patch

0x3: 对抗VFS HOOK进程隐藏检测

不论是在Linux、window下,进程隐藏的检测技术的核心思想都是类似的

process_list.c

Relevant Link:

4. LSM框架(Linux Security Module)于LKM安全

LSM框架自身并不提供任何安全策略,它只是为安全模型提供了一致性接口。它使得各种不同的安全模型以内核模块的方式得到实现,而且不需改动内核源代码以及重新编译内核。rootkit是什么目前基于LSM框架实现的最主要的安全模块主要有

在传统的安全机制下,Linux安全是基于自主存取控制(DAC)机制的,只要符合规定的权限,如规定的所有者和文件属性(读、写、执行)等,就可存取资源。一些通过setuid/setgid的程序就能形成严重的安全隐患,甚至一些错误的配置就可引发巨大漏洞,使系统被轻易攻击

而SELinux则基于强制存取控制(MAC),透过强制性的安全策略,应用程序或用户必须同时符合DAC 及对应SELinux的MAC才能进行正常操作,否则都将遭到拒绝或失败,而这些问题将不会影响其他正常运作的程序和应用,并保持它们的安全系统结构。

LKM 注入攻击一般是对/lib/modules/(uname-r)/kernel/下的模块文件进行修改,SELinux下的权限设置能限制对模块文件的修改,为模块文件的完整性提供保证,从而防止针对模块文件的 LKM注入攻击。同时 SELinux下的权限设置限制了恶意程序对/dev目录下文件访问和修改。由于进行了基于CAP_SYS_MODULE 权能的加载权限的检查,阻止了许多获取root权限后的恶意加载

Relevant Link:

5. rootkit检测技术及工具

0x1: rootkit防御技术

on prevention

Detection

rootkit一般会集成很多的组件和功能,检测rootkit本质上就是在理解rootkit的行为的基础上进行针对性的分类、聚类、以及行为定性

Relevant Link:

0x2: rootkit检测工具


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-25479-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...