济南网站营销,网络舆情监测服务,大连旅顺春风十里别墅,凡科网站免费注册今天#xff0c;我们来讲一下内核安全#xff01;
本文章仅提供学习#xff0c;切勿将其用于不法手段#xff01;
目前#xff0c;在渗透测试领域#xff0c;主要分为了两个发展方向#xff0c;分别为Web攻防领域和PWN#xff08;二进制安全#xff09;攻防领域。在…今天我们来讲一下内核安全
本文章仅提供学习切勿将其用于不法手段
目前在渗透测试领域主要分为了两个发展方向分别为Web攻防领域和PWN二进制安全攻防领域。在PWN的二进制领域免杀技术一直是后渗透利用阶段的重要安全技术之一。
想要免杀需要了解的安全技术知识包括软件加壳、代码混淆例如使用花指令、隐匿技术例如Rootkit技术、动态加密等内容。
接上一篇文章我们来继续讲述下 Rootkit技术 的相关基础知识点内容
在《 渗透测试之内核安全系列课程Rootkit技术初探 》之前的文章中我们讲述了 GDT 全局描述符表、LDT 局部描述符表、GDTR 全局描述符表 寄存器、LDTR 局部描述符表 寄存器 、一致性代码、非一致性代码、实模式、保护模式、线性地址 、PDPT 页目录指针表、PDT 页目录表、PTT 页表、P 页 、PDE 页目录表项 、PTE 页表项 、CR0 控制寄存器、CR2 页故障线性地址寄存器、 CR3 页目录基址寄存器 等非常重要的 基础知识 点 内容
这些内容是学习 Rootkit 技术 的基础
今天我们来继续来重点讲解下 线性地址 到 物理地址 的 转换过程
首先让我们来复习一下相关的技术知识点。
CR0 控制寄存器最重要的两个比特位分别是第 1 位 和 第 32 位
CR0控制寄存器的第1位 PE 控制着 保护模式 的 开启 与 关闭 当 PE 位 是 1 时保护模式 处于 开启 状态 当 PE 位 是 0 时保护模式 处于 关闭 状态此时 计算机 运行于 实模式
CR0控制寄存器的第32位 PG 控制着 内存分页机制 的 开启 与 关闭 当 PG 位 是 1 时内存分页机制 处于 开启 状态 当 PG 位 是 0 时内存分页机制 处于 关闭 状态此时 计算机 运行于 实模式
如果需要 启用 内存分页机制那么 第 1 位 PE 位 和 第 32 位 PG 位 的值均要为 1
CR2 页故障线性地址寄存器主要用于 在页异常情况发生时存储 产生异常的 线性地址
当发生页异常时例如指定的内存分页并不存在 这时会触发 缺页中断 CPU 会把引起 缺页中断 的 线性地址 保存在 CR2 页故障线性地址寄存器 之中
操作系统中的页异常处理程序其实就是 缺页中断 所对应的 中断服务程序可以通过检查 CR2 页故障线性地址寄存器 的 内容值 的方式去筛查出 缺页中断 这个异常 是 由 虚拟地址空间线性地址空间中的哪个 线性地址访问 所引起的CR2 页故障线性地址寄存器主要用于定位错误以及通过分页交换文件去辅助载入内存分页
我们需要知道针对 缺页中断 从 硬盘 中 去载入 相对应的 页表资源 或 页资源是由 缺页中断 对应的 中断服务程序 去自动完成的 CR2 页故障线性地址寄存器在 从 硬盘空间 向 内存空间 载入 指定页表资源 或 指定页资源 时发挥了非常重要的作用
CR3 页目录基址寄存器主要用于 PDT 页目录表 或 PDPT 页目录指针表 的 物理寻址
CR3 页目录基址寄存器存储了 PDT 页目录表 或 PDPT 页目录指针表 的 物理内存地址
在启用了 PAE 物理地址扩展的基础上CR3 页目录基址寄存器 的 高 27 位被用于 进行 PDPT 页目录指针表 的 物理地址寻址
什么是 PAE 呢
PAE 指的是 物理地址扩展
物理地址扩展PAE 是 中央处理器 CPU 的一项功能它的作用是使 x86 系列的处理器 能够在支持 PAE 物理地址扩展 技术 的 部分 Windows 操作系统环境是否支持 PAE 物理地址扩展与系统版本有关。例如 Windows 7 (32 位) 、Windows Server 2008 仅 (32 位) 、Windows Vista 仅 (32 位) 、Windows Server 2003 仅 (32 位) 、Windows XP (32 位) 中 访问 4 GB 以上 的 物理内存地址。 能够访问的内存物理地址大小取决于中央处理器CPU能够支持的最大内存物理地址上限例如64位 CPU所能支持的最大物理内存
在未启用 PAE 物理地址扩展机制 之前32位 线性地址 寻址线性地址 的 结构 由 高 10 位 的 页目录 表项索引 、中 10 位 的 页表 表项索引、低 12 位 的 页内偏移量 共同组成
在已启用 PAE 物理地址扩展机制 之后32位 线性地址 寻址线性地址 的 结构 由 高 2 位 的 页目录指针 表项索引 、中高 9 位 的 页目录 表项索引、中 9 位 的 页表 表项索引、低 12 位 的 页内偏移量 共同组成
注意在 启用 PAE 物理地址扩展机制 之后页目录表 中 每个子项的大小为 8个字节 64位
注意在 启用 PAE 物理地址扩展机制 之后页目录表 中 的 子项 数量 最多为 512 个
注意在 启用 PAE 物理地址扩展机制 之后页表 中 每个子项的大小为 8个字节 64位
注意在 启用 PAE 物理地址扩展机制 之后页表 中 的 子项 数量 最多为 512 个
在 32位 的 操作系统环境 下页目录 PDT 、 页表 PTT 、 页 P 的 内存空间 大小 均为 4 KB ( 4096 B 4096 个字节
在 32位 的 操作系统环境 下在未启用 PAE 物理地址扩展机制 之前 页目录表 PDT 的子项数量为 1024 个子项大小为 4字节32位
在 32位 的 操作系统环境 下在未启用 PAE 物理地址扩展机制 之前 页表 PTT 的子项数量为 1024 个子项大小为 4字节32位
在 32位 的 操作系统环境 下在已启用 PAE 物理地址扩展机制 之后 页目录表 PDT 的子项数量为 512 个子项大小为 8字节 64位
在 32位 的 操作系统环境 下在已启用 PAE 物理地址扩展机制 之后 页表 PTT 的子项数量为 512 个子项大小为 8字节 64位
在 32位 的 操作系统环境 下在已启用 PAE 物理地址扩展机制 之后 页目录指针表 PDPT 由 4 个 页目录指针 组成每个指针 指向 一个 页目录表PDTCR3寄存器 的内容值 定义会发生一定的变化CR3寄存器 的内容值 的 低 5 位 不再使用CR3寄存器 的内容值 的 高 27 位 被用于指向 页目录指针表 PDPT 的 基址页目录指针表 PDPT 的 起始地址物理内存地址
页目录 PDT 、页表 PTT 、页 P 的 内存边界 均是以 4 KB 对齐的也就是说页目录 、页表 、页 的 内存空间 的 起始地址物理地址除了第一个以 0 为起点的 内存空间0~4095 之外其它的内存空间 的 起始地址物理地址都是 以4KB的整数倍 为起点的。
让我们再来深入研究一下 页目录PDT和 页表PTT的 相关知识点内容
在 32位 的 操作系统环境 下页目录 PDT 和 页表 PTT 的子项数量均为 1024 每个子项的内存空间大小均为 4个字节 ( 4096 B 4096 个字节
4 个 字节 BYTE 等于 32 个 比特位 BIT
页目录 PDT 每个子项PDE 的 高20位第13-32位为 页表空间 的 基址起始地址物理内存地址
页目录 PDT 每个子项PDE 的 第 1 位 P Present 位 用于标记PDE 页目标表项 指向的页面内容 页表 PTT 或 大页 Large Page 是否存在 如果不存在可能会触发 缺页中断从而 通过 虚拟内存 技术 中的 分页文件交换技术将存储在 物理硬盘 中的 分页内容 载入到 物理内存 中 。
页目录 PDT 每个子项PDE 的 第 2 位 R/W Read/Write 位 用于标记PDE 页目标表项 指向的页面内容 页表 PTT 或 大页 Large Page 是否可写 当 RW 位 的 值 为 0 时PDE 页目录表项 指向 的 页面 只读 当 RW 位 的 值 为 1 时PDE 页目录表项 指向 的 页面 可读、可写 。
页目录 PDT 每个子项PDE 的 第 3 位 U/S User/Supervisor 位 用与标记PDE 页目标表项 指向的页面内容 页表 PTT 或 大页 Large Page 是否允许用户态程序 特权级R3 访问如果 U位 的内容值 为 0 , 则代表着这个子项 指向 的 页表 4KB 大小 或 页 大页4MB 大小 仅能够 被 操作系统 的 内核程序去进行 访问 和 操作
页目录 PDT 每个子项PDE 的 第 4 位 PWT Page-level Write-Through 位 用于控制 页面 的 写入 策略 当 PWT 位 的 内容值 被 设置为 1 时它 指示 中央处理器 CPU 对 指定页面 的 写操作 应使用 写穿 Write-Through 策略而不是 常见的 写回 Write-Back策略 写穿 Write-Through 策略 的 实现原理 为当 中央处理器 CPU 对 缓存在 CPU高速缓存 中的 页面内容 执行 写回操作时缓存在 CPU高速缓存 中的 页面内容 会被 立即写入到 物理内存 之中 写回 Write-Back策略 的 实现原理 为首先中央处理器 CPU 会把 缓存在 CPU高速缓存 中的页面内容 进行 “脏”dirty标记处理脏标记dirty表示 被缓存在 CPU高速缓存 中的 页面内容 是需要被写回到物理内存中去的之后被缓存在 CPU高速缓存 中的 页面内容 会在合适的时机如缓存行被替换或系统空闲时被异步地写回到物理内存中去
页目录 PDT 每个子项PDE 的 第 5 位 PCD Page Cache Disable 位 用于 控制 对应 页面 的 缓存 能力当 PCD 位 的 内容值 被 设置为 1 时PDE 页目录表项 指向 的 页面内容 页表 PTT 或 大页 Large Page 不能 被 CPU 进行 缓存 操作 当 PCD 位 的 内容值 被 设置为 0 时PDE 页目录表项 指向 的 页面内容 页表 PTT 或 大页 Large Page 能够 被 CPU 进行 缓存 操作
页目录 PDT 每个子项PDE 的 第 6 位 AAccessed位 用于标记PDE页目标表项指向的页面内容 页表 PTT 或 大页 Large Page 是否已经被访问过
页目录 PDT 每个子项PDE 的 第 7 位 DDirty位 用于标记PDE 页目录表项 指向的页面内容 页表 PTT 或 大页 Large Page 是否已经被修改过
页目录 PDT 每个子项PDE 的 第 8 位 PSPage Size位 用于说明 PDE 页目录表项 指向的页面内容 页表 PTT 或 大页 Large Page 的空间大小 页表 PTT 的 页面大小 为 4 K B 大页 Large Page 的 页面大小 为 4 M B 这涉及到了 页面大小扩展PSE技术 。
页目录 PDT 每个子项PDE 的 第 9 位 GGlobal位 用于标记PDE 页目录表项 指向的页面内容 页表 PTT 或 大页 Large Page 的 可访问属性 是否为 全局性的 如果 PDE 页目录表项 的 GGlobal位 的 内容值被设置为 1则代表 PDE 页目录表项 指向的页面内容 页表 PTT 或 大页 Large Page 的 页面属性 是全局性的全局页面能够被多个进程进行共享访问 并且全局页面 的 页面属性 在 进程切换之时 也 不会被刷新 这种 公有页面通常是通过 CreateFileMapping 等 系统调用 创建与分配 的 如果 PDE 页目录表项 的 GGlobal位 的 内容值被设置为 0 则代表 PDE 页目录表项 指向的页面内容 页表 PTT 或 大页 Large Page 是 进程私有 的只有创建这个页面 页表 PTT 或 大页 Large Page 的进程可以去 访问与操作 它这种 私有页面通常是通过 VirtualAlloc 等系统调用进行 创建与分配 的
页目录 PDT 每个子项PDE 的 第 10-12 位 AVLAvailable位 这是一个在较新处理器架构中引入的标志位主要用于支持 页目录表 的 优化 和 特性 AVL位通常被用于指示 页目录表项PDE是否可被用于执行某些优化操作例如页目录表项 的 合并 或 快速查找 如果 处理器 或 操作系统检测 到 某个页目录表项 的 AVL位 被设置 为 非 0 值 时处理器 或 操作系统 可以利用这一信息去执行 更为 高效 的 内存管理操作 需要注意的是AVL位 的 具体含义 和 行为 可能由于 不同 的 处理器架构 和 操作系统 而 存在 差异
注意在页目录 PDT 的子项 PDE 中PS 位Page Size位 是非常重要的PS位 第8位 仅在 PDE 页目录项 中存在是 PDE 页目录项 中非常值得一提的比特位当 PDE 页目录项 的 PS 位 第8位 为 0 时代表PDE 页目录项 指向 页表 页表大小为 4KB 当 PDE 页目录项 的 PS 位 第8位 为 1 时代表PDE 页目录项 直接指向页 P 这时页的大小为 4MB这是一个大页此时这个大页 4MB 大小的物理页的物理地址计算公式为 PDE 页目录项 的 高 10 位 线性地址 的 低 22 位 。
上述的页目录 PDT 的子项PDE除了前7位之外其它各比特位用途不固定各关键比特位的位置同样不固定因操作系统类型、CPU 版本不同而存在差异
页表 PTT 每个子项PTE 的 高20位第13-32位为 页空间 的 基址起始地址物理内存地址
页表 PTT 每个子项PTE 的 第 1 位 P Present 位 用于标记PTE 页表项 指向的页面内容是否存在 如果不存在可能会触发 缺页中断从而 通过 虚拟内存 技术 中的 分页文件交换技术将存储在 物理硬盘 中的 分页内容 载入到 物理内存 中 。
页表 PTT 每个子项PTE 的 第 2 位 R/W Read/Write 位 用于标记PTE 页表项指向的页面内容是否可写 当 RW 位 的 值 为 0 时PTE 页表项 指向 的 页面 只读 当 RW 位 的 值 为 1 时PTE 页表项 指向 的 页面 可读、可写 。
页表 PTT 每个子项PTE 的 第 3 位 U/S User/Supervisor 位 用与标记PTE 页表项 指向的页面内容 页 P 是否允许用户态程序 特权级R3 访问如果 U位 的内容值 为 0 , 则代表着这个子项 指向 的 页 4 K B 大小 仅能够 被 操作系统 的 内核程序去进行 访问 和 操作
页表 PTT 每个子项PTEPTE 的 第 4 位 PWT Page-level Write-Through 位 第 4 位 PWT Page-level Write-Through 位 用于控制 页面 的 写入 策略 当 PWT 位 的 内容值 被 设置为 1 时它 指示 中央处理器 CPU 对 指定页面 的 写操作 应使用 写穿 Write-Through 策略而不是 常见的 写回 Write-Back策略 写穿 Write-Through 策略 的 实现原理 为当 中央处理器 CPU 对 缓存在 CPU高速缓存 中的 页面内容 执行 写回操作时缓存在 CPU高速缓存 中的 页面内容 会被 立即写入到 物理内存 之中 写回 Write-Back策略 的 实现原理 为首先中央处理器 CPU 会把 缓存在 CPU高速缓存 中的页面内容 进行 “脏”dirty标记处理脏标记dirty表示 被缓存在 CPU高速缓存 中的 页面内容 是需要被写回到物理内存中去的之后被缓存在 CPU高速缓存 中的 页面内容 会在合适的时机如缓存行被替换或系统空闲时被异步地写回到物理内存中去
页表 PTT 每个子项PTE 的 第 5 位 PCD Page Cache Disable 位 用于标记PTE页表项指向的页面内容是否允许被进行页面缓存操作 当 PCD 位 的 内容值 被 设置为 1 时PTE 页表项 指向 的 页面内容 页 P 不能 被 CPU 进行 缓存 操作 当 PCD 位 的 内容值 被 设置为 0 时PTE 页表项 指向 的 页面内容 页 P 能够 被 CPU 进行 缓存 操作
页表 PTT 每个子项 的 第 6 位 AAccessed位 用于标记PTE页表项指向的页面内容是否已经被访问过
页表 PTT 每个子项PTE 的 第 7 位 DDirty位 用于标记PTE页表项指向的页面内容是否已经被修改过
页表 PTT 每个子项PTE 的 第 8 位 PAT 位Page Attribute Table是奔腾3及以后版本的CPU引入的一个页属性表标识位当 PTE页表项的 PAT位 的 内容值 被设置为 1 时它允许通过一系列专用寄存器MBR为每个页面提供更详细的属性设置。这些属性设置可以提供更精细的内存访问控制包括缓存策略、内存类型等从而优化系统的性能和响应速度
页表 PTT 每个子项PTE 的 第 9 位 G 位 用于标记PTE 页表项 指向的页面内容 页 P 的 可访问属性 是否为 全局性的 如果 PTE 页表项 的 GGlobal位 的 内容值被设置为 1则代表 PTE 页表项 指向的页面内容 页 P 的 页面属性 是全局性的全局页面能够被多个进程进行共享访问 并且全局页面 的 页面属性 在 进程切换之时 也 不会被刷新 这种 公有页面通常是通过 CreateFileMapping 等 系统调用 创建与分配 的 如果 PTE 页表项 的 GGlobal位 的 内容值被设置为 0 则代表 PTE 页表项 指向的页面内容 页 P 是 进程私有 的只有创建这个页面 页 P 的进程可以去 访问与操作 它 这种 私有页面通常是通过 VirtualAlloc 等系统调用进行 创建与分配 的
页表 PTT 每个子项PTE 的 第 10-12 位 AVLAvailable位 这是一个在较新处理器架构中引入的标志位主要用于支持 页表 的 优化 和 特性 AVL位通常被用于指示 页表项PTE是否可被用于执行某些优化操作例如页表项 的 合并 或 快速查找 如果 处理器 或 操作系统检测 到 某个页表项 的 AVL位 被设置 为非 0 值 时处理器 或 操作系统 可以利用这一信息去执行 更为 高效 的 内存管理操作 需要注意的是AVL位 的 具体含义 和 行为 可能由于 不同 的 处理器架构 和 操作系统 而 存在 差异
上述的页表 PTT 的子项PTE除了前7位之外其它各比特位用途不固定各关键比特位的位置同样不固定因操作系统类型、CPU 版本不同而存在差异
记住无论是 页目录 PDT 还是 页表 PTT 亦或者是 页 P 在一般情况下它们的 限长空间大小均为 4 KB 4096 B 4096 字节 对于 页 P 会存在 大页 的情况当 页 P 的 类型为 大页 时 页 P 的 空间大小 为 4 M B
页目录 PDT 、 页表 PTT 、页 P 、页目录项 PDE 、 页表项 PTE 等更详细、更精准的信息请参见 《 Intel 微处理器 》这本书《 Intel 微处理器 》是由美国的Barry B.Brey 德幅瑞大学编著的由 北京航空航天大学 的 金惠华、艾明晶、尚利宏 等专业人士进行翻译《 Intel 微处理器 》出版自 机械工业出版社 《 Intel 微处理器 》这本书出版自 2010 年虽然十多年过去了但是底层的基础知识底层的技术架构还是具备非常重要的参考价值的
在未来的课程中我们可能会去研究 数据执行保护 DEP 和 非统一内存访问 NUMA 。
虚拟内存技术 中的 分页交换技术实现原定于在本章进行讲解但介于篇幅限制决定改为 在未来章节中进行有关的内容讲解
请关注下一篇渗透测试之内核安全系列课程Rootkit技术初探五