Windows系统结构还有引导过程
I.a 大致结构
windows内核是从windows NT
内核发展过来的,从开始就和硬件的发展息息相关。
Windows采用双模式(dual mode
)结构来保护操作系统内核不受应用程序的错误而出现崩溃
windows的原始设计是一个支持多环境子系统的os,它还支持POSIX和OS/2环境子系统.为他们提供仿真执行环境
I.b windows内核组成结构
关于函数的开头
nt
:内核提供的服务Ldr
:映像加载器函数Csr
:Windows子进程通讯函数Dbg
:调试函数Etw
:系统时间函数Rtl
:运行支持函数
执行体API函数接收的参数来自各种应用程序,通常会在程序的最开始处,对所接受的参数逐一探查他们的可访问性。
II. windows内核关键组件
HAL 硬件抽象层
HAL通常是一个独立的动态链接库,windows自身携带多种HAL,但是在系统安装的时候只会选择一种,改名为hal.dll
。涉及中断控制器、单处理器/多处理器硬件断点。
内核(微内核)
在内核模块ntoskrnl.exe
中的上层部分为执行体,下层最接近HAL的就是内核。负责进程调度、中断和异常处理,核心任务是尽可能让系统中的所有处理器变得高效。
windows内核使用抢占式调度,由于采用面向对象的设计,使得它主要面向两个对象:分发器 和 控制 两个对象
- 分发器对象:实现各种同步功能。影响线程调度,主要用于 事件(event) 突变体(mutant) 信号量(semaphore) 进程(process) 线程(thread) 队列(query) 门(gate) 定时器(timer)
- 控制对象:用于控制内核的操作,不影响线程调度。包括 异步调用(APC) 延迟过程调用(DPC) 中断对象
执行体
在内核模块ntoskrnl.exe
中的上层部分,包含5种类型的函数
- 被导出的、可以在用户模式下调用的函数。位于
ntdll.dll
中。一般就是win API - 没有被导出、可以在用户模式下调用的函数。比如常见的反调试函数,包括各种LRC(
Local Process Call
,本地调用过程)、各种查询函数和专业函数。 - 只能在内核模式下调用的导出函数。在
windows DDK
中有文档。 - 执行体之间内部调用,未被文档化的函数
- 一个组件的内置函数
其中组件包括
- 进程和线程管理器:负责进程/线程的CURD
- 内存管理:虚拟内存
- 安全引用监视器(SRM):维护本地计算机的安全策略
- I/O管理器
- 缓存管理器:允许磁盘将文件映射到内存中
- 配置管理器:负责注册表的实现
- 即插即用管理器
还有的函数负责对执行体进行管理
- 对象管理器:执行体对象的CURD
- LPC设施:负责同一设备的的客户进程和服务进程的消息传递,对应的是远程过程调用(RPC)
- 运行时库函数
- 执行体支持例程:内存的分配、互锁内存的转换
设备驱动程序
驱动文件(.sys
),漏洞挖掘存在于IOCTL
文件系统/存储管理
主要是ntfs.sys
。漏洞挖掘存在于CLFS
(通用日志文件系统)。
网络
windows套接字、winInet、NetBIOS、RPC
III. windows子系统
在上面的内核部分已经实现了对硬件的简单访问控制,那么就会在次基础上进行跟高层次的建设。
在PE文件的头部域Subssytem
中指定了该程序会在那个子环境中运行。
子系统也分为用户模式和内核模式,核心部分是 win32k.sys。子系统的DLL链接到应用程序中,包括kernel32.dll
user32.dll
gdi32.dll
advapi.dll
,负责实现文档化的windows函数。
win32k.sys同时也负责向内核注入一系列出调函数(callout),一旦调用了win32k.sys的任何一个系统服务,这个程序就会变成一个GDI线程
核心功能可以分为:
-
窗口管理
由windows子进程
csrss.exe
负责控制台窗口功能1
2
3
4子系统会话--->交互式窗口站--->默认桌面--->顶级窗户口列表->子窗口
| |_>登录窗口
| |_>屏幕保护窗口
|->非交互式窗口-->不可见桌面 -
图形设备接口(GDI)
主要是图形支持,设计Direct3D等
IV. 安全性管理
三个核心组件:winlogon、SRM 和 lsass
winlogon 和 lsass 是两个用户模式进程, 而 SRM 是 Windows 执行体中的组件
- SRM(Security Reference Monitor安全引用监视器),负责执行对象的安全访问检查、管理用户特权、生成安 全审计消息,并且定义了访问令牌数据结构来表示一个安全环境。
- Winlogon,负责响应 SAS(安全注意序列),以及管理交互式登录会话。当用户登 录到系统中时,winlogon 创建一个初始进程,并进一步由它创建外壳(shell)进程。
- Lsass(Local Security Authentic SubSystem本地安全权威子系统),负责本地系统的安全策略,同时,它也认证用户的 身份,以及将安全审计消息发送到系统的事件日志中。
- SAM(安全账户管理器)数据库,包含了本地用户和用户组,以及它们的口令和其 他属性。它位于注册表的 HKLM\SAM 下面。由于 HKLM\SAM 键只允许本地系统账 户访问,所以,除非用户在 Local System 账户下运行 regedit.exe 工具,否则无法访问 HKLM\SAM 子树。
- LSA 策略数据库,包含了有关当前系统的一些信息,譬如谁允许访问系统以及如何 访问(交互式登录、网络登录或者以服务方式登录);分配给谁哪些特权;安全审计 如何进行等。如同 SAM 数据库一样,LSA 策略数据库也存储在注册表中,位于 HKLM\SECURITY 下面。同样地,除了 Local System 账户以外的其他账户均无法访 问 HKLM\SECURITY 子树。
winlogon 负责系统登录,包括对用户身份的认证;lsass 负责管理系统本地安全策略,并且将这些策略通知到内核中的 SRM。在内核 中,SRM 负责实现基于对象的访问控制以及系统全局安全策略的实施。
关于一些提权
在 Windows 中,特权是由 LUID 对象来标识的,LUID 代表一个本地唯一标识符(Locally Unique Identifier)
1 | typedef struct _LUID_AND_ATTRIBUTES { |
Windows 内核中定义了一组特权,即类型为 LUID 的 Se全局变量。Windows 内核中,与安全相关的函数以“Se”作为前缀,有一些安全函数还存在对应的系 统服务。这些系统服务函数的名称以“Nt”作为前缀,后面部分与“Se”函数相同。
V. Windows的引导过程
最开始也是从经典的MBR开始,然后是ntldr的osloader。
在osloader中将物理地址转为虚拟地址,该过程可见:windows_kernel_driver_2中对CR3、CR4寄存器的控制。
之后osloader加载NTDETECT.COM程序,利用系统BIOS查询系统基本设备,在引导过程的后期被存放到注册表 HKLM\HARDWARE\DESCRIPTION
os loader 加载内核模块映像文件,默认为 ntoskrnl.exe,以及 HAL 映像文件,默 认为 hal.dll。再加载注册表的 SYSTEM 储巢,即\WINDOWS\system32\config\system 文件。
然后是内核的初始化,此入口函数为 KiSystemStartup
为了解决在初始化过程中的相互依赖 性问题,内核的初始化分两个阶段进行,称为阶段 0 和阶段 1。大多数内核组件的初始化函 数相应地带有一个整数参数,以指明一次调用是阶段 0 初始化还是阶段 1 初始化,而有些组 件的初始化函数通过检查一个全局变量 InitializationPhase 的值来判断当前处于哪个阶段。
阶段 0 初始化的目的是,将阶段 1 初始化所要用到的基 本数据结构建立起来。这时中断被禁止,调整IDT、TSS、PCR等。接着调用 KiInitializeKernel 函数,执行内核初始化。最后,当前线程蜕变成一个空闲线程。
V. Windows发布历史
MicroSoft在操作系统领域中最开始起源于MS-DOS,随后演变出了两个分支,最开始的Win 95/98/Me
,之后就是基于Windows NT
的内核版本的Window XP/7/8/10/vista
的版本。
版本 | 发布日期 | 主要特点 | 内核版本 |
---|---|---|---|
Windows 1.0 | 1985年11月 | 初始版本,提供基本的图形用户界面和应用程序支持 | 1.0 |
Windows 2.0 | 1987年12月 | 引入了窗口重叠、图标和键盘快捷键等改进 | 2.0 |
Windows 3.0 | 1990年5月 | 支持多任务处理和TrueType字体,用户界面大幅改进 | 3.0 |
Windows 95 | 1995年8月 | 具有开始菜单、任务栏和32位应用程序支持的重要版本 | 4.0 |
Windows 98 | 1998年6月 | 引入了对USB设备和DVD光盘的支持,改进了系统稳定性 | 4.10 |
Windows 2000 | 2000年2月 | 强化了系统稳定性和安全性,提供了企业级特性 | 5.0 |
Windows XP | 2001年10月 | 引入了全新的用户界面、系统恢复功能和多用户支持 | 5.1 |
Windows Vista | 2007年1月 | 全新的用户界面、更高的安全性和系统稳定性 | 6.0 |
Windows 7 | 2009年10月 | 优化了用户界面和性能,改进了任务栏和窗口管理 | 6.1 |
Windows 8 | 2012年10月 | 引入了全新的开始屏幕和触摸优化的用户界面 | 6.2 |
Windows 10 | 2015年7月 | 统一了桌面和移动设备平台,引入了Windows应用商店 | 10.0 |
Windows 11 | 2021年10月 | 新的用户界面设计、改进的性能和安全性,支持Android应用 | 10.0 |