今天,我们来讲一下内核安全!
本文章仅提供学习,切勿将其用于不法手段!
目前,在渗透测试领域,主要分为了两个发展方向,分别为Web攻防领域和PWN(二进制安全)攻防领域。在PWN的二进制领域,免杀技术,一直是后渗透利用阶段的重要安全技术之一。
想要免杀,需要了解的安全技术知识包括软件加壳、代码混淆(例如,使用花指令)、隐匿技术(例如,Rootkit技术)、动态加密等内容。
接上一篇文章,我们来继续讲述下 Rootkit技术 的相关基础知识点内容!
今天开始,我们来讲一些实战的东西!
实战的东西,最为实用,也更具有干货的价值!
想要进行 Rootkit 软件开发,我们是一定要基础到 操作系统 的 内核编程 的 !
操作系统 和 特权程序,都是在 内核模式 中运行的!
内核模式代码有权访问系统的任何部分,并且不像用户模式代码那样受到限制。 内核模式代码可以访问在用户模式或内核模式下运行的任何其他进程的任何部分。 许多核心操作系统功能和许多硬件设备驱动程序在内核模式下运行。
写 内核 Rootkit 程序,一定要拥有 驱动程序开发 的 能力!
驱动程序开发,涉及到 相关基础知识点,例如 IRP 、I/O堆栈、WDM驱动、用户层 Rootkit 、内核层 Rootkit 、硬件层 Rootkit 等 !
Rootkit 技术,分为 攻击 和 防守 两种技术!
学会攻击技术,是为了能够进行更加有效的安全防御!
如果我们并不知道 刀剑 为何物,那么,我们怎么会懂得躲避与防御 刀剑的锋芒呢?
Rootkit 的 攻击技术,主要是指 驻留内核底层,控制操作系统行为 的 技术!
Rootkit 的 防御技术,主要是指 驻留内核底层,检测 Rootkit 软件的存在,取证 Rootkit 软件的行为!
攻击和防守,并不分家!攻击和防守技术,作为一名白帽子黑客,是必须要学会的!
Rootkit 技术,涉及到多方面的知识,包括 硬件系统 、 软件系统 、 内核驱动 、Rootkit 技巧(例如,如何绕过安全软件的检测、如何检测到工作于内核层面的 Rootkit 软件)等。
在硬件系统层面,涉及到 保护模式 的 相关知识 !
例如,CPU特权级,我们需要知道 WINDOWS 和 LINUX 都仅实现了 R0(内核层)和 R3(用户层)的特权级别 !这样的设计,是存在问题的 !本应工作在 R1(启动层)的东西,操作系统内核一起,共同工作在了 R0 内核 层 !这样的设计,给了 Rootkit技术 的 生存空间 !给了以驱动形式存在的病毒木马,繁殖传播 的土壤 !用户层木马,配合着内核层木马,共同获得了 操作系统的控制权!结合硬件层面的恶意代码,甚至给 安全软件 造成了很大的 清除压力。为什么,我会说,硬件层面的恶意代码?一些硬件的固件,为了保持与优化硬件性能,是对外提供了接口的!它们提供的接口,给了恶意软件侵入的大门!
想要编写 Rootkit 程序,我们必须要熟悉 CPU 的特权级,只有进入系统内核,Rootkit 软件才能发挥出更大的威力!
想要编写 Rootkit 程序,我们必须要熟悉 内存分页机制,只有了解底层的内核实现,我们才能去 读取 或 更改 页目录表( PDT ) 、页表( PTT )、页( P ) 的 数据内容( 比较重要的,包括 访问权限、读写开关、偏移量、物理地址 等)。
我们前几章,为什么要重点去讲硬件环境和操作系统的基础知识内容呢?
如果缺乏对于这些底层基础知识的足够了解,我们是很难有效打开 Rootkit 的 编程大门 的 !
针对内存空间的访问控制体系,我们必须有足够的了解!
关于内存空间的访问控制体系知识,我们会在下一章继续进行讲解!
这一章,主要是给大家换个口味 !
毕竟,过分的去讲底层知识,可能会让初学者们感到疲惫,轻松愉快的学习环境,才是我想给大家去营造的!
学习 Rootkit 技术,我们要了解 硬件系统的体系架构,我们也要了解 操作系统的体系架构 !
操作系统方面,最为主流的派系,莫过于 Windows 、Uinx 、Linux 这三种类型的操作系统 !
Windows 由 美国 微软公司 设计 并 开发,Windows 操作系统 是一个 基于 窗口化和消息机制 的操作系统。Windows 操作系统,是闭源的!这是它对于程序员而言,不太友好的一点!
Uinx 由 美国 贝尔实验室 设计的,它 和 Windows 设计理念有所不同,它被主要应用于服务器领域!而 Windows 系统 则 更多被应用于 个人电脑 !Uinx 也是闭源的 !这意味者,它对于程序员来说,同样不太美好 !美国 苹果公司 的 MacOS 系统 就是基于 Uinx 系统扩展而来的 !
Linux 由 芬兰赫尔辛基大学的二年级学生 Linus Torvalds 设计开发的 !Linux 系统 最大的优点,就是开源且免费,Linux 系统 对于 程序员来说,是非常友好的!程序员可以通过阅读 Linux 的 内核源码 去更加透彻地理解 Linux 系统 的 底层技术实现 !Linux 和 Uinx 在技术实现的体验层面上来看,是非常相似的 ! Linux 被设计开发之初,就借鉴于 Unix 系统 !但是,Linux 系统 的 源代码 是 独立且开放 的 !
研究操作系统,我们要研究它的底层 !
以 Windows 系统 为例,我们要研究它的 内存分页机制 、服务调用机制(例如,中断分发、异常分发、系统服务分发 等)!
研究 Windows 内核驱动程序,我们要研究它的内核技术实现 !
我们要了解,在 Windows 环境下,开发 驱动程序 软件,我们需要了解两种最为经典的却动程序开发设计模型!一种是 WDM( Windows Driver Model )Windows 驱动程序 模型,一种是 WDF( Windows Driver Framework )Windows 驱动程序 框架 !
以前,比较主流的 Windows 环境下的 驱动程序开发模型,就是 WDM ( Windows Driver Model )Windows 驱动程序 模型 !
现在,比较主流的 Windows 环境下的 驱动程序开发模型,为 WDF( Windows Driver Framework )Windows 驱动程序 框架 !
大家可以理解为,WDF( Windows Driver Framework )Windows 驱动程序 框架 是 Windows 系统环境 下进行 驱动程序开发 的 升级优化版本!
WDF 驱动程序框架,主要包括两个类型,一个是 用户级驱动框架 UMDF( User Mode Driver Framework ),它主要的文件表现形式为 DLL 动态链接库 文件。一个是 内核级驱动框架 KMDF( Kernel Mode Driver Framework ),它主要的文件表现形式为 SYS 系统内核 文件。
WDM ( Windows 驱动程序 模型),是基于 面向过程 的 程序设计方法 进行 驱动程序开发 的 !
WDF ( Windows 驱动程序 框架),是基于 面向对象 的 程序设计方法 进行 驱动程序开发 的 !
在开发普通的 Windows 应用程序时,我们一般需要使用 美国 微软公司 的 SDK 包( 软件开发工具包 ) !
在开发特殊的 Windows 驱动程序时,我们一般需要使用 美国 微软公司 的 DDK 包( 驱动开发工具包 ) !
WDK 包( Windows Driver Kit )是基于 WDF Windows 驱动程序 框架 模式的 驱动开发工具包 !
WDK 包,是 采用 WDF 模式,基于 面向对象的编程方法 进行 驱动程序开发的 编程工具包 !
在 WDK 包 流行之前,人们普遍采用 DDK 包( Driver Developer Kit )驱动程序 开发 工具包 进行 驱动程序 开发工作 ! DDK 包,是基于 WDM Windows 驱动程序 模型 模式 的 驱动开发工具包 !DDK 包,是 基于 面向过程 的 编程方法 进行 驱动程序开发 的 编程工具包 !
在以后的章节中,我们将逐步讲述 Windows 驱动程序 的 开发过程 和 学习方法 !
请关注下一篇,渗透测试之内核安全系列课程:Rootkit技术初探(六)
版权归原作者 黑客影儿 所有, 如有侵权,请联系我们删除。