渗透测试之内核安全系列课程:Rootkit技术初探(六)

news2026/4/2 9:49:53

今天,我们来讲一下内核安全!

本文章仅提供学习,切勿将其用于不法手段!

目前,在渗透测试领域,主要分为了两个发展方向,分别为Web攻防领域和PWN(二进制安全)攻防领域。在PWN二进制领域免杀技术,一直是后渗透利用阶段的重要安全技术之一。

想要免杀,需要了解的安全技术知识包括软件加壳、代码混淆(例如,使用花指令)、隐匿技术(例如,Rootkit技术)、动态加密等内容。

接上一篇文章,我们来继续讲述下 Rootkit技术 的相关基础知识点内容!

我们来继续讲一些 实战类 的 技术干货 !

上篇文章的内容中,讲述了 在 Windows  环境下 进行 驱动开发 的 两大 工具类型

WDM Windows 驱动程序 模型WDF Windows 驱动开发 框架

WDM Windows 驱动程序 模型 采用  面向过程 编程方法 进行 Windows 环境下的 驱动程序开发 

WDF Windows 驱动程序 框架 采用  面向对象编程方法 进行 Windows 环境下的 驱动程序开发 

WDM Windows 驱动程序 模型开发工具包DDK Driver Developer Kit

WDF Windows 驱动程序 模型开发工具包WDK Windows Driver Kit  !

今天,我们来继续科普一些 驱动开发领域 的 基础知识 !

在进行驱动程序开发时,我们优先推荐使用 DDK( Driver Developer Kit )进行驱动程序开发工作!原因相对简单, DDK( Driver Developer Kit )如同 Windows API 一样,接近于底层空间!

Windows API  ,在 用户态 的 软件程序 开发领域 中,是最接近于 操作系统底层 的 存在! 

Windows API  ,直接与 操作系统内核 进行 数据通信 !

大家可以理解为, Windows API  是 用户态软件程序 和 操作系统内核 进行 数据通信 的一座桥梁!相对于 MFC 类库 而言,Windows API  函数,在使用方面,更加的灵活 !MFC 类库,是按照面向对象的程序设计方法,对 Windows API  函数 的一次 封装 !

DDK( Driver Developer Kit ),直接与底层硬件通信,大家可以理解为,DDK 中的 函数方法 是最接近于硬件底层的 !DDK 如同 Windows API 一样,使用面向过程的程序设计方法,进行 驱动程序 的 开发工作 !

DDK( Driver Developer Kit ),接近于 硬件底层,DDK( Driver Developer Kit )在 驱动程序开发领域的功能实现方面,也是最为灵活的 ! 我们需要知道,DDK 在 驱动程序的功能开发实现方面 ,要比 WDK( Windows Driver Kit )更加 灵活 !

Windows 驱动程序,主要分为 两大类 ,分别为 NT 式 驱动程序 和 WDM 驱动程序 。

NT 式 驱动程序,是一类比较古老的、不支持 即插即用功能 的 驱动程序 !Windows 2000、Windows XP 系统 的 驱动程序,就是属于 NT 式 驱动程序 !NT 式 驱动程序的明显不足为 

并不支持即插即用功能 !

WDM 驱动程序,是一类相对较新的、支持 即插即用功能 的 驱动程序 !目前 Windows 系列的 主流 操作系统 ,都是支持 WDM 类型 的 驱动程序 的 !

WDK( Windows Driver Kit ),属于 DDK( Driver Developer Kit )的升级版本,采用 面向对象的程序设计方法,进行驱动程序开发工作 !但是 !WDK( Windows Driver Kit )如同 MFC 一样,都是 采用面向对象的程序设计方法 对 底层函数 进行了 相应的封装 !不同的是,MFC 类库 封装的对象是 Windows  API 函数 ,而 WDF( Windows Driver Kit )封装的对象 , 则是 DDK( Driver Developer Kit )!

现在,我们来介绍一下,在 Windows 驱动程序 的 开发 工作中,需要使用到的一些非常重要的数据结构 ! 学会它们,是进行 Windows 驱动程序 开发工作 的 知识基础 !

首先,我们要认识到,每一个驱动程序,都会存在对应的 驱动对象( DRIVER_OBJECT )DRIVER_OBJECT 是一种 数据结构 !在驱动程序被加载时,操作系统内核 中的 对象管理程序 利用 DRIVER_OBJECT 数据结构 去创建 实例化 的 驱动程序对象 !驱动程序对象 的 数据结构 是使用 DRIVER_OBJECT 进行表示的 !因此,熟悉 DRIVER_OBJECT 的 数据结构 定义 ,是非常重要的 !下面,介绍一下,驱动程序对象  DRIVER_OBJECT 的 数据结构 定义 !

typedef struct _DRIVER_OBJECT {

    CSHORT Type ;  //结构体类型( 始终为 DRIVER_OBJECT_TYPE )

    CSHORT Size ;  //结构体大小( 以 Bypte 字节 为单位 )

    PDEVICE_OBJECT DeviceObject ;  //DEVICE_OBJECT结构指针(设备对象指针)

    ULONG Flags ;  //32位掩码(驱动程序属性)

    PVOID DriverStart ;  //驱动程序代码入口点(DriverEntry函数在内存空间中的线性地址)

    ULONG DriverSzie ;  //驱动程序代码长度(驱动程序代码占用的内存空间大小(字节))

    PVOID DriverSection ; //内存区对象(节)指针(指向驱动程序的配置信息的内存描述表)

    PDRIVER_EXTENSION DriverExtension ;  //指向驱动扩展的指针(允许添加额外功能)

    UNICODE_STRING DriverName ;  //驱动程序名称

    PUNICODE_STRING HardwareDatabase ;  //指向注册表中的硬件信息路径(特定的配置参数)

    PFAST_IO_DISPATCH FastIoDispatch ;  //指向FAST_IO_DISPATCH结构体的指针

    PDRIVER_INITIALIZE DriverInit ;  //指向特定驱动程序的入口点函数的指针(初始化)

    PDRIVER_STARTIO DriverStartIo ;  //指向特定驱动程序的入口点函数的指针(启动I/O操作)

    PDRIVER_UNLOAD DriverUnload ;  //指向特定驱动程序的入口点函数的指针(卸载驱动)

    PDRIVER_DISPATCH MajorFunction [ IRP_MJ_MAXIMUM_FUNCTION + 1 ] ;  //一个函数指针数组,包含了驱动程序能够处理的各种主要I/O请求的函数指针。

}    DRIVER_OBJECT

typedef struct _DRIVER_OBJECT * PDRIVER_OBJECT

注意,typedef 关键字,用于 自定义数据类型 ,C语言 中 有相关的 用途说明 介绍 !

注意,struct 关键字,用于 创建 结构体 结构 ,C语言 中 有相关的 用途说明 介绍 !

PDRIVER_OBJECT 数据类型   DRIVER_OBJECT 对象 指针 类型 !

下面,我们来重点地讲解一下, DRIVER_OBJECT 对象 的 相关字段 用途 !

1、Type :此字段标识该结构体的类型,通常设置为DRIVER_OBJECT_TYPE,用于表明这是一个驱动对象结构体。

2、Size :此字段表示该结构体的大小,以字节为单位,帮助内核和驱动程序识别结构体的内存布局。

3、DeviceObject :这是一个指针,指向驱动程序所创建的设备对象链表的头部。每个设备对象代表着一个设备或者驱动程序创建的一种虚拟设备。驱动程序通过IoCreateDevice等函数创建设备对象,并通过此字段与内核交互。

4、DriverStart :这是一个指针,指向驱动程序代码的入口点,即DriverEntry函数。当驱动程序被加载时,DriverEntry函数会被调用,用于初始化驱动对象和其他资源。

5、DriverSize :表示驱动程序的大小,用于内核管理驱动程序映像的内存占用情况。

6、DriverSection :指向驱动程序映像的内存区对象,用于内核管理驱动程序在内存中的布局和访问权限。

7、DriverExtension :指向驱动扩展的指针,允许驱动程序添加额外的信息或功能到驱动对象中。

8、DriverName :一个UNICODE_STRING类型,表示驱动程序的名称。这有助于系统日志、调试工具和其他组件识别驱动程序。

9、HardwareDatabase :指向注册表中的硬件信息路径,为驱动程序提供设备特定的配置和参数( 在Windows内核模式驱动程序中,硬件数据库用于存储有关系统中所有设备实例的信息,如设备的设备路径、设备对象指针等 )。

10、FastIoDispatch :一个指向FAST_IO_DISPATCH结构体的指针。FAST_IO_DISPATCH结构体包含了一组回调例程,这些例程允许文件系统驱动程序或文件系统筛选器驱动程序(旧)提供快速I/O处理。通过这组回调例程,驱动程序能够直接处理某些常见的I/O操作,从而提高性能并减少内核模式的转换次数。

11、DriverInit :这些字段是指向特定驱动程序的入口点函数的指针,用于执行初始化任务。

12、DriverStartIo :这些字段是指向特定驱动程序的入口点函数的指针,用于执行启动I/O操作任务。

13、DriverUnload :这些字段是指向特定驱动程序的入口点函数的指针,用于执行卸载驱动任务。

14、MajorFunction :一个函数指针数组,包含了驱动程序能够处理的各种主要I/O请求的函数指针。每个数组元素对应一种I/O请求类型,当系统需要处理这种请求时,会调用相应的函数。

注意,以大小字母 P 开头数据类型 一般 是 指针数据 类型 ,这是命名定义上的 习惯性 约定 !

DRIVER_OBJECT驱动程序 的存在形式,它是一个 结构体 。在Windows内核中,每个设备驱动程序都需要一个DRIVER_OBJECT对象,DRIVER_OBJECT对象 由系统创建并传递给驱动程序的 DriverEntry函数 或 AddDevice函数 的 参数 。 

驱动程序使用此对象来注册与设备对象和其他系统对象的交互,并在操作系统需要与驱动程序进行交互时使用此对象。DRIVER_OBJECT对象还包含了与驱动程序所管理的设备对象相关联的设备扩展结构,以及用于处理I/O请求的函数指针等信息。它是驱动程序与操作系统内核之间的桥梁,用于协调设备的操作和管理 。

具体来说,DRIVER_OBJECT结构体包含了一系列字段,用于描述驱动程序的特定属性。例如,它包含驱动类型、驱动大小、驱动对象、驱动标志、驱动的起始位置、驱动的大小、指向驱动程序映像的内存区对象、驱动的扩展空间、驱动名字等。

请注意,DRIVER_OBJECT在驱动开发中是一个核心概念,其细节和具体实现可能因不同的Windows版本和硬件平台而有所不同。

扩展知识:

NDIS 中间层 驱动程序,处于 网络协议 驱动程序网络硬件 驱动程序 中间。NDIS 中间层 驱动 程序 非常强大 !NDIS中间层驱动程序 可以看到 操作系统 中的全部 网络通信 的 数据流量信息 ! 网络协议 驱动程序,仅能发现 接收到 的 网络数据包。中间层驱动程序,被通常用于 数据包过滤 和 防火墙软件开发 ,但是 NDIS 中间层 驱动程序 也可以被用于 网络通信数据流量 隐藏 !

Rootkit 类型 远控程序 ,想要 隐藏自身 并 监听 、修改 、发送 网络协议层 的 通信数据 ,就 势必 会 进行 NDIS 层面 的 驱动程序开发 !因此,当我们想要 检测 与 取证 NDIS 层面 的 Rootkit 远控程序 的 软件行为,就必须要对 NDIS 相关的基础知识,有所了解 !

下一章内容中,将重点介绍 WDM 驱动开发工作中 , 会使用到的 另一个非常重要的 数据结构 DEVICE_OBJECT 设备对象

请关注下一篇,渗透测试之内核安全系列课程:Rootkit技术初探(七)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1838410.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【html】爱心跳动动画:CSS魔法背后的故事

效果展示: 代码介绍: 爱心跳动动画:CSS魔法背后的故事 在前端开发中,CSS不仅仅是一种用于控制网页样式的工具,它也是一种表达创意和想象力的艺术手段。今天,我要为大家介绍一段使用CSS实现的爱心跳动动画…

【TB作品】MSP430G2553,单片机,口袋板, 交通灯控制系统

题8 交通灯控制系统 十字路口交通灯由红、绿两色LED显示器(两位8段LED显示器)组成,LED显示器显示切换倒计时,以秒为单位,每秒更新一次;为确保安全,绿LED计数到0转红,经5秒延时&#…

深度解析:河南资信预评价乙级资质人员专业背景要求

深度解析:河南资信预评价乙级资质人员专业背景要求 河南资信预评价乙级资质对人员的专业背景有着明确的要求,这些要求旨在确保工程咨询单位具备足够的专业能力和技术水平。以下是对这些专业背景要求的深度解析: 一、咨询工程师(投…

基于IDEA的Maven(依赖介绍和引用)

如何通过一个坐标信息(依赖)去引用 ,某个"jar 包" 会在这篇博客进行学习。 目录 一、学习开始 (0)项目的结构组成和 "pom.xml" 文件内容。 (1)首先需要一个标签&#xf…

Open3D点云处理学习

Color ICP Colored point cloud registration — Open3D 0.11.0 documentation Colored point cloud registration - Open3D 0.18.0 documentation 展示了使用color-icp结果 对比gicp错误处理结果 intel自己的论文 Colored Point Cloud Registration Revisited 优化方程 参…

计算机行业的现状与未来之2024

年年都说编程好,编程工资涨不了。 人家骑车送外卖,月入两万好不好。 一、计算机专业的背景与现状 在过去几十年里,计算机科学相关专业一直是高考考生的热门选择。无论是计算机科学与技术、软件工程,还是人工智能与大数据&#xff…

vue项目首页优化问题(前后端都要优化)

2.1 config/index.js 开启productionGzip 将其productionGzip 配置成true 2.2 配置Gzip的 插件配置 打开webpack.prod.config.js 配置一下这段代码 代码如下 if (config.build.productionGzip) { const CompressionWebpackPlugin require(‘compression-webpack-plugin’)…

深入探索Stable Diffusion:从原理到应用的全面解析

目录 一 Stable Diffusion的基本概念 什么是Stable Diffusion? Stable Diffusion与传统生成模型的区别 二 Stable Diffusion的理论基础 扩散过程的数学描述 马尔可夫链蒙特卡罗方法(MCMC) 三 Stable Diffusion的算法实现 基本步骤 代码实现 四 Stable Diffusion的…

jdk下载安装及电脑上同时安装多个jdk

一、jdk的下载 官方地址: Java Software | Oracle 系统环境变量配置 1、首先新建JDK1.8和17的JAVA_HOME,他们的变量名区分开,分别为JAVA17_HOME,JAVA8_HOME。分别指向他们的安装地址。 2、新建配置他们可变的地址,这个环境变量的值…

智能建筑与物联网技术:重塑未来空间的智慧交响曲

在21世纪的建筑领域,智能建筑已经成为城市发展的新地标,而物联网技术(IoT)正是驱动这一变革的核心引擎。下面大家一起窥探智能建筑与物联网技术结合的奇妙世界,探讨其广泛应用与未来发展趋势。 物联网技术&#xff1a…

保障信息安全!等保2.0的二级和三级到底有何不同?详细解析

在应用场景上,二级是地市级以上的国家机关、企业、事业单位的一般信息系统,三级是各级政府、企业、事业单位的内部重要信息系统,还有各个部委的官方网站等。 在评定标准方面,第二级和第三级则是以系统受损后对公共和国家安全的损害…

LoReFT——大语言模型的表示微调

引言 参数高效的微调或 PeFT 方法寻求通过更新少量权重来适应大型语言模型。然而,大多数现有的可解释性工作已经证明,表示编码了丰富的语义信息,这表明它可能是编辑这些表示的更好、更强大的替代方案。预先训练的大型模型通常经过微调以用于…

避免Tomcat调试信息泄露的最佳实践

大家好!我是小米,一个热爱分享技术的小伙伴。最近我们团队在进行网站安全扫描时,发现了一个敏感信息泄露的漏洞。经过一番努力,终于解决了这个问题。今天我想在这里分享我们的经历,希望能为大家提供一些参考和帮助。 问题背景 在处理请求过程中,如果服务器遇到运行时错…

《模拟联合国2.9—团队协作》

感谢上海财经大学持续的邀请,今天在阶梯教室举办的《模拟联合国2.0—团队协作》沙盘课程圆满结束。尽管场地的限制带来了一定的挑战,但得益于系统思考中“结构影响行为”的原则,我得以在不同场景中巧妙设计课程结构,极大地促进了大…

python版本的选择

python3.10.a1会出现奇怪的问题, AttributeError: module importlib.metadata has no attribute EntryPoints[end of output]但3.10.11不会 因此下载python(win版)link 选左边的

Scott Brinker:API对今天的Martech用户来说「非常重要」 ,但它们对即将到来的人工智能代理浪潮至关重要

API在Martech中非常重要 猜一猜空格应该填什么: _______之于AI代理就像数据之于AI模型 正如你可能从我的标题猜到的那样,答案是API。让我们讨论一下为什么…… 数据是人工智能模型的差异化 在过去的一年半里,人工智能疯狂的超级炒作周期…

Java实现一个解析CURL脚本小工具

该工具可以将CURL脚本中的Header解析为KV Map结构;获取URL路径、请求类型;解析URL参数列表;解析Body请求体:Form表单、Raw Body、KV Body、XML/JSON/TEXT结构体等。 使用示例 获取一个http curl脚本: curl --locatio…

备忘录文字颜色怎么改 备忘录改变字体颜色方法

在日常的工作和生活中,备忘录已经成为我不可或缺的好帮手。但是,面对满满当当的备忘录,有时候不同的任务和信息都混在一起,让人眼花缭乱。我常常想,如果能改变备忘录中的文字颜色,用以区分不同类别的事项&a…

HTML李峋同款跳动的爱心代码(双爱心版)

目录 写在前面 跳动的爱心 完整代码 代码分析 系列推荐 最后想说 写在前面 在浩瀚的网络世界中,总有一些小惊喜能触动我们的心弦。今天,就让我们用HTML语言,探索既神秘又浪漫的李峋同款跳动的爱心代码吧。 首先,让我们一起…