windows系统有严格的安全模型,既实现了以对象为基础的自主访问控制(discretionary access control)又实现了系统级的强制访问控制(mandatory access control)。在自主访问的控制模型中,对象的所有者授权或拒绝哪些用户可以访问该对像。基于对象的访问控制并不能保护系统的所有操作,因为操作并没有与一个特定的对象联系在一起,如系统停机(shutdown)、备份文件核目录、交互式登陆到系统中等;甚至有些操作针对整个系统,并不与特定用户账号相关联,如账户的口令策略(通常不允许空口令)、允许或禁止匿名链接等。
windows操作系统涉及安全性管理的核心组件有:winlogon、SRM和lsass,winlogon和lsass是两个用户模式进程,SRM是windows内核执行体中的组件。
从图中可以看出安全组件的职责如下:
- SRM(安全引用监视器):负责 执行对象的安全访问检查、管理用户特权、生成安全审计消息,并且定义了访问令牌的数据结构来表示一个安全的环境。
- Winlogon:负责响应SAS(安全注意序列),以及管理交互式登陆会话。当用户登陆到系统中时,winlogon创建一个初始进程,并进一步由它创建外壳(shell)进程。
- Lsass(本地安全权威子系统):负责本地系统的安全策略,同时,它也认证用户的身份,以及将安全审计消息发送到系统的事件日志中。
- SAM(安全账户管理器)数据库:包含了本地用户及用户组,包括它们的口令及其他属性。位于注册表的HKLM\SAM下面。由于HKLM\SAM键只允许本系统账户访问,所以,除非用户在Local System账户下运行regedit.exe工具,否则无法访问HKLM\SAM子树。
- LSA策略数据库:包含了有关当前系统的信息,如准许访问系统以及如何访问(交互式登陆、网络登录或者以服务方式登陆);分配给谁哪些特权;如何进行安全审计等。如同SAM数据库一样,LSA策略数据库也存储在注册表中,位于HKLM\SECURITY下面。除了Local System账户以外的其他账户均无法访问HKLM\SECURITY子树。
总之,在windows的安全模型中,winlogon负责系统登陆及用户身份的认证;lsass负责管理本地的安全策略,并将这些策略通知到内核中的SRM。在内核中,SRM负责实现基于对象的访问控制以及系统安全策略的实施。WRK中的SRM代码位于base\ntos\se目录下。在此模型中,lsass和SRM对于系统安全性至关重要,一旦两个组件被恶意代码修改或者侵入,则系统的安全防线将不复存在。windows对两个组件有特殊保护,普通应用程序无法与它们打交道,它们相互之间通过LPC进行通信。它们的LPC连接在系统初始化时建立,而且,一旦双向LPC链接建立起来,它们的LPC端口便不再接受任何其他的链接请求,因而其他程序与它们无法建立LPC连接。