zoukankan      html  css  js  c++  java
  • 【Windows内核原理与实现】读书笔记(五)

    事件追踪(ETW)

    Windows提供了统一的跟踪和记录事件的机制,称为ETW。用户模式的应用程序和内核模式的驱动程序都可以使用ETW来记录事件。ETW是直接由内核支持的事件记录机制,在它的框架结构中,共有三种组件:

    • 控制器(controller)。负责启动、停止或配置事件记录会话
    • 提供者(provider)。负责向ETW注册自己的事件类,并接受控制器的命令,以便启动或停止它们所负责的事件类的记录过程
    • 消费者(consumer)。负责有针对性地读取它们想要的事件数据,选择一个活多个记录会话。它们既可以实时地接收ETW缓冲区中的数据,也可以接收日志文件中的事件数据。

    Windows内置了一个内核日志记录器(kernel logger)作为ETW提供者,专门用于记录内核和核心驱动程序的事件。此内核日志记录器是由WMI(Windows Management Instrumentation,Windows管理规范)设备驱动程序实现的,它的驱动程序的名称为“WMIxWDM”。

    WMI是工业标准WBEM(Web-Based Enterprise Management)的一个实现。内核日志记录器是一个事件提供者,它有一个预定义GUID,即内核变量SystemTraceControlGuid。内核日志记录器支持多种事件类,采用标志位(flag)来指示是否记录某一类型的事件。进一步将这些事件分为8个组,每个组使用一个掩码(29位)来描述。系统的全局组掩码是由全局变量PerfGlobalGroupMask定义的。

    缓冲区管理是WMI驱动程序的重要职责之一。

    微软提供了一个性能工具xperf,它既是一个控制器,也是一个消费者。Xperf利用I/O接口(NtDeviceIoControlFile函数)与WMI驱动程序进行通信。Windows API提供了事件追踪API(位于advapi32.dll模块中),因此用户模式应用程序可以很方便地操纵和控制WMI驱动程序。

     

    安全性管理

    • SRM(安全引用监视器),负责执行对象的安全访问检查、管理用户特权、生成安全审计消息,并且定义了一个访问令牌数据结构来表示一个安全环境。
    • Winlogon,负责响应SAS(安全注意序列),以及管理交互式登陆会话。当用户登陆到系统中时,winlogon创建一个初始进程,并进一步由它创建外壳(shell)进程。
    • Lsass(本地安全权威子系统),负责本地系统的安全策略,同时,它也认证用户的身份,以及将安全审计消息发送到系统的事件日志中。
    • SAM(安全账户管理器)数据库,包含了本地用户和用户组,以及它们的口令和其他属性。位于注册表HKLM\SAM下面,只允许本地系统账户访问。
    • LSA策略数据库,包含了有关当前系统的一些信息,也存放在注册表中,位于HKLM\SECURITY下面。

    Windows安全模型中,winlogon负责系统登录,包括对用户身份的认证,lsass负责管理系统本地安全策略,并将这些策略通知到内核中的SRM。在内核中,SRM负责实现基于对象的访问控制以及系统全局安全策略的实施。

    SRM与lsass至关重要,它们相互之间通过LPC进行通信,它们的LPC链接在系统初始化时建立,一旦双向LPC连接建立起来,它们的LPC端口便不再接受任何其他的连接请求。

    Windows的自主访问模型与对象管理器集成在一起,每一种对象类型都定义了一个Security方法,该方法返回一个对象的安全信息。线程在访问一个对象以前必须先打开这个对象,并获得一个指向该对象的句柄。这个模型中,每一个线程都有一个安全环境,其中最重要的信息是一个访问令牌,代表了该线程的用户的一次登录;每个对象都有一个自主访问控制列表(ACL),指明了允许谁以何种方式访问该对象,而拒绝哪些用户以何种方式访问它。为了访问一个对象,线程可以不使用它所属进程的安全环境,而是以其他账户身份来运行的安全环境,这称为模仿(impersonation)。同一个进程中的其他线程也可以利用已经得到的句柄来访问该对象。

    令牌(TOKEN)代表了SRM中用到的主题,它描述了一个用户的一次登录,由winlogon进程在认证了用户身份以后创建。

    在Windows中,特权是由LUID对象来标识的,LUID代表了一个本地唯一标识符(Locally Unique Identifier),由两个LONG成员构成。

    Sep为前缀的函数是SRM的内部函数。

  • 相关阅读:
    【MySQL】JSON相关
    【Scala】01 基础了解
    【Windows】更改Win10字体和Cmd字体
    【DataBase】MySQL根据父节点查询下面的所有子节点
    【Windows】Win10 20H2版本 管理员身份问题
    【Java】树状节点结构的数据
    【Vue】接口模块化处理
    【Server
    【Binary】XShell6 无法使用的解决办法
    【Java】逻辑错误BUG
  • 原文地址:https://www.cnblogs.com/XjChenny/p/2367174.html
Copyright © 2011-2022 走看看