2.1 Windows操作系统的安全机制
自1985年Windows操作系统问世以来,其版本随着计算机硬件和软件发展不断升级,架构从16位、32位到64位,桌面操作系统版本从最初的Windows 1.0到大家熟知的Windows 95、Windows 98直至现在的Windows 10,服务器操作系统版本从Windows NT 3.1、Windows NT 4.0直至现在的Windows Server 2016,操作系统内核版本从1.x、2.x直至Windows 10和Windows Server 2016的10.x,其功能在持续更新过程中不断完善。
需要说明的是,考虑到Windows操作系统的版本众多,且不同版本之间的功能和操作方式的差异较大。为突出重点,并便于读者理解和开展实验操作,本节主要针对Windows内核进行介绍。所涉及的操作均在Windows 7和Windows Server 2012环境下进行。
2.1.1 Windows操作系统的层次结构
微软在开发Windows服务器操作系统(Windows NT 3.1)之初,便将其定义为能够在用户级实现自主访问控制、提供审计访问对象机制的C2级操作系统。
1. 操作系统的设计类型
早期的一些小型系统(如MS-DOS)主要由可以相互调用的一系列过程组成。这种操作系统的特点是功能简单,实现容易。但其缺点是当修改一个过程时可能导致系统其他部分发生错误。
为解决过程调用中存在的问题,提出了层次系统模型,即将系统划分为模块和层,每个模块为其他模块(更高层)提供一系列函数及调用。该模型的设计特点是将一个大型复杂的系统分解成若干单向依赖的层次(最内部的一层为系统核),即每一层都提供一组功能且这些功能只依赖该层以内的各层,比较容易修改和测试,同时可以根据需要替换掉一层,但其缺点是限制过于严格。
随着计算机联网技术的发展和需求越来越突出,客户机/服务器(Client/Server)结构成为许多操作系统设计时选择的基础模型。在该结构中,操作系统被划分为一个或多个进程,每个进程称为一个服务器,它提供服务,如内存管理、配置管理、对象管理等。可以执行的应用称为客户机,一个客户机通过向指定的服务器发送消息来请求服务。系统中所有的消息都是通过微内核(Micro Kernel)发送的,如果有多个服务器存在,则这些服务器共享一个微内核。客户机和服务器都在用户模式(User Mode)下执行。客户机/服务器结构的特点是当一个服务器出现错误或重新启动时,不会影响系统的其他部分。
2. Windows服务器操作系统的结构
Windows服务器操作系统是层次结构和客户机/服务器结构的混合体,其系统结构如图2-1所示。
图2-1 Windows服务器操作系统的结构
(1)执行者。执行者是运行在内核模式(Kernel Mode)中的部分,它由3层组成。其中,最底层是硬件抽象层,它为其上层提供硬件结构的接口,可以使系统运行在不同的硬件上,方便系统的移植;微内核位于硬件抽象层之上,它为低层提供执行、中断、异常处理和同步的支持;最高层由一系列实现基本系统服务的模块组成,这些模块包括虚拟内存管理、对象管理、进程和线程管理、I/O管理、进程间通信和安全参考监视器。这些模块之间的通信是通过定义在每个模块中的函数实现的。
(2)被保护的服务。被保护的服务也称为被保护的子系统或服务器,提供了应用程序编程接口(Application Programming Interface,API),它以具有一定特权的进程形式在用户模式下执行。当一个应用调用API时,调用者通过局部过程调用(Local Procedure Call,LPC)发送请求信息给对应的服务器,服务器在接收到该请求信息后发送消息应答给调用者。下面介绍一些标准的服务。
①会话管理。会话管理是系统启动时加载的第一个服务,它负责启动DoS设备驱动,将子系统在注册表中进行注册,并且初始化动态链接库(Dynamic Link Library,DLL),然后启动NT注册(WinLogon)服务。
②NT注册。NT注册负责为交互式注册和注销提供接口服务,它是一个注册进程,在系统初始化时以logon进程通过Win32注册。同时,它还管理操作系统的桌面。
③Win32。Win32为应用程序提供有效的32位API,同时提供图形用户接口并且控制所有用户的输入和输出。该服务只输出两种对象:WindowsStation(如用户的鼠标、键盘和显示器的输入/输出等)和桌面对象。
④本地安全认证。本地安全认证主要提供安全认证服务,它在用户注册进程、安全事件日志进程等本地系统安全策略中提供重要的安全服务功能。安全策略是由本地安全策略库实现的,库中主要保存着可信域、用户和用户组的特权、访问权限和安全事件。这个数据库由本地安全认证来管理,并且只有通过本地安全认证后才能访问。
⑤安全账户管理。安全账户管理主要用于管理用户和用户组的账户,根据它的权限决定其作用是在本地域还是其他域范围内。另外,它还为认证服务器提供支持。安全账户作为子对象存储在注册表中的数据库中,这个数据库只有通过安全账户才能访问和管理。
(3)微内核对象和执行者对象。在Windows服务器操作系统中,所有的软件和硬件资源都是用对象表示的,如文件、信号量、计时器、线程、进程、内存等。具体可以分为微内核对象和执行者对象两种类型。
①微内核对象。微内核对象也称为内核对象,它是由微内核产生的、对用户不可见的最基本的对象。它输出给执行者的相关应用,提供只有内核最低层才能完成的基本功能。内核对象分为派遣对象和控制对象两种类型。其中,派遣对象(dispatcher object)用于控制调试和同步,它有一个信号状态,可以允许线程挂起对象的执行,直到信号状态发生改变。派遣对象主要有事件(event)、互斥体(mutant)、事件对(eventPair)、信号量(semaphore)、计时器(timer)、线程(thread)、进程(process)等;控制对象(control object)是由执行者和设备驱动控制的不可等待的、没有信号状态的对象,主要有中断、设备队列、配置文件(profiles)、异步过程调用(APC)、延迟过程调用(DPC)。
②执行者对象。大多数执行者对象用于封装一个或多个微内核对象,它在用户模式下是可见的。执行者为Win32等服务提供一系列的对象,通常情况下,服务直接为客户机程序提供执行者对象。另外,服务可以为客户机提供基于一个或多个简单对象构造一个新的对象。
2.1.2 Windows服务器的安全模型
安全是操作系统的核心,Windows操作系统将安全作为系统设计和功能实现的基础,安全模型是实现各类安全功能的基本框架。图2-2所示为Windows服务器操作系统的安全模型。其中,用户是安全的关键,在操作系统和网络环境中针对用户这一特定对象的是用户账户,因为任何一个用户只要访问系统就必须拥有一个账户,所以针对用户账户的管理是实现系统安全的第一道屏障。同时,在一个资源访问受限的系统中,并不是每一个账户所拥有的权限都是相同的,而是根据访问角色的不同分别分配不同的权限。例如,系统管理员或拥有同等权限的用户账户可以实现对整个系统的操作,如添加设备、更改系统设置、关闭系统中运行的程序等。而普通的访问者则可能只具有对特定资源的操作权限,如对某个文件或文件夹的读、写、删除、修改属性等。在Windows服务器操作系统中有一个安全账户管理数据库,其中存放的内容有用户账户和该账户所具有的权限等信息。
图2-2 Windows服务器操作系统的安全模型
在Windows服务器中,安全模型由本地安全认证、安全账户管理器、安全参考监视器、注册、访问控制、对象安全服务等功能模块构成,这些功能模块之间相互作用,共同实现系统的安全功能。
在多任务环境中,CPU以用户模式和内核模式运行。其中,当CPU运行于内核模式时,所有程序都可运行,任务可以执行特权级指令,对任何I/O设备有全部的访问权,还能够访问任何虚拟地址和控制虚拟内存硬件。内核模式是操作系统的核心部分,设备驱动程序都运行在该模式。在用户模式中,可以防止硬件特权指令的执行,并对内存和I/O空间的访问操作进行检查,操作系统的用户接口及所有的用户应用程序都运行在该模式下。