Windows 10引入了一个名为虚拟安全模式(Virtual Secure Mode VSM)的安全功能。VSM利用Hyper-V虚拟机管理程序和二级地址转换(Second Level Address Translation SLAT)来创建一组称为虚拟信任级别(Virtual Trust Levels VTL)的模式。这种新的软件架构创建了一个安全边界,以防止在一个VTL中运行的进程访问另一个VTL的内存。这种隔离的有利于减少内核漏洞以及保护密码哈希值和Kerberos密钥等数据。

Diagram1分别描述了在CPU ring0和ring 3中运行的内核模式代码和用户模式代码这种传统模型。在这种新模式中,传统模式运行的代码在VTL0中执行,它无法访问特权更高的VTL1,在VTL1中运行着安全内核和独立用户模式(Isolated User Mode IUM)代码。VTL是分层的,这意味着在VTL1中运行的任何代码都比在VTL0中运行的代码具有更高的特权。

VTL isolation由Hyper-V创建,它在启动时使用SLAT分配内存。当系统运行时,它动态地继续使用SLAT分配内存,SLAT分配的内存就能保护安全内核指定需要VTL0保护的内存,这些内存将用于保存保密数据。由于为两个VTL分配了独立的内存块,因此通过为VTL1和VTL0分配具有适当访问权限的专用内存块,为VTL1创建了安全的运行时环境。

Trustlets

Trustlets(也称为可信进程、安全进程或IUM进程)是指运行在VSM中作为IUM进程运行的程序。Trustles通过marshalling调用数据到运行在VTL0 ring 0中的Windows内核来完成系统调用。VSM创建了一个小型执行环境,其中包括在VTL1中执行的小型安全内核(与运行在VTL0中的内核和驱动程序相隔离)。明显的安全优势是将VTL1中的trustlet用户模式页面与VTL0内核中运行的驱动程序隔离开来。即使VTL0的内核模式被恶意软件破坏,VTL0中程序也无法访问IUM进程页面。

启用VSM后,本地安全机构(Local Security Authority LSASS)环境作为trustlet运行。LSASS管理本地系统策略、用户验证和审计,同时处理敏感的安全数据,如密码hash和Kerberos密钥。为了利用VSM的安全优势,一个名为LSAISO.exe(LSA isolation)的信任程序在VTL1中运行,并通过RPC通道与在VTL0中运行的LSASS.exe通信。LSAISO保密数据先吧被加密,再在发送到运行在VSM正常模式下的LSASS,并且LSAISO的页面被保护免受运行在VTL0中的恶意代码的攻击。

Isolated User Mode (IUM) Implications

IUM进程不能被附加,这限制了调试VTL1代码。这包括内存转储的事后调试以及为实时调试附加调试工具。它还包括特权帐户或内核驱动程序试图将DLL加载到IUM进程、注入线程或提供用户模式APC。这些操作可能导致整个系统的不稳定。调用有害Trustlet安全的Windows APIs可能会以意想不到的方式失败。例如,将DLL加载到Trustlet中会使它在VTL0中可用,但在VTL1中不可用。如果目标线程在Trustlet中,QueueUserApc可能会自动失败。其他API,如CreateRemoteThread、VirtualAllocEx和Read/WriteProcessMemory,在用于Trustlets时也不会像预期的那样工作。

下面的示例代码来防止调用任何试图向IUM进程附加或注入代码的函数。包括调用trustlet中代码的APC队列的内核驱动程序。

Remarks

如果IsSecureProcess的返回状态为success,要检查SecureProcess _Out_ parameter以确定该进程是否为IUM进程。IUM进程被系统标记为“安全进程”。TRUE意味着目标进程的类型是IUM。

NTSTATUS
IsSecureProcess(_In_ HANDLE ProcessHandle,_Out_ BOOLEAN *SecureProcess)
{NTSTATUS status;// definition included in ntddk.h  PROCESS_EXTENDED_BASIC_INFORMATION extendedInfo = {0};PAGED_CODE(); extendedInfo.Size = sizeof(extendedInfo);// Query for the process information  status = ZwQueryInformationProcess(ProcessHandle, ProcessBasicInformation, &extendedInfo,sizeof(extendedInfo), NULL);if (NT_SUCCESS(status)) {*SecureProcess = (BOOLEAN)(extendedInfo.IsSecureProcess != 0);}return status;
}

Windows10的, “Windows Driver Kit - Windows 10.0.15063.0”,包含了PROCESS _ EXTENDED _ BASIC _ INFORMATION结构的定义。结构的更新版本在ntddk.h中用新的IsSecureProcess字段定义。

typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION {SIZE_T Size;    // Ignored as input, written with structure size on outputPROCESS_BASIC_INFORMATION BasicInfo;union {ULONG Flags;struct {ULONG IsProtectedProcess : 1;ULONG IsWow64Process : 1;ULONG IsProcessDeleting : 1;ULONG IsCrossSessionCreate : 1;ULONG IsFrozen : 1;ULONG IsBackground : 1;ULONG IsStronglyNamed : 1;ULONG IsSecureProcess : 1;ULONG IsSubsystemProcess : 1;ULONG SpareBits : 23;} DUMMYSTRUCTNAME;} DUMMYUNIONNAME;
} PROCESS_EXTENDED_BASIC_INFORMATION, *PPROCESS_EXTENDED_BASIC_INFORMATION;

Isolated User Mode (IUM) Processes(MSDN翻译)相关推荐

  1. CreateFont()函数的MSDN翻译

    函数功能:该函数创建一种有特殊性的逻辑字体,此逻辑字体可以在后面被任何设备选择. 函数原型:HFONT CreateFont(int nHeight, int nWidth, int nEscapem ...

  2. 输入法编程指南(根据msdn翻译)

    2006-01-14 作者 不祥 Windows 95输入法编辑器(IME) 原著:Microsoft 翻译:TBsoft Software Studio 一.关于Windows 95混合语言IME ...

  3. Driver residency in WDDM 2.0(MSDN翻译)

    Driver residency in WDDM 2.0 这节描述了WDDM v2的一些驱动residency的一些改变.这些功能在win10之后开始生效. (PS: residency 之前一直没有 ...

  4. Monitor Hot Plug Detection(MSDN翻译)

    Monitor Hot Plug Detection 显卡上的Video output被看作是显卡的一个子设备.而monitor或者其他连接到output上的外部显示设备不会当作一个子设备.在初始化时 ...

  5. 半导体理论(第1部分)本征半导体

    文章目录 写在前面 正文 独立半导体原子 半导体晶体 电子分布 交个朋友 写在前面 原文链接 相关博文 博客首页 注:知识搬运,供学习交流使用,侵联删! 正文 我们首先讨论本征半导体.硅,锗和砷化镓是 ...

  6. Nginx学习之负载均衡fair模块

    2019独角兽企业重金招聘Python工程师标准>>> Nginx学习之负载均衡fair模块 2017-04-10 20:27 写在开始 前面对Nginx的三种负载均衡实现做了一个简 ...

  7. 深入探索.NET框架内部了解CLR如何创建运行时对象

    为什么80%的码农都做不了架构师?>>>    本文讨论: • SystemDomain, SharedDomain, and DefaultDomain • 对象布局和内存细节. ...

  8. 《Effective C#》读书笔记——条目10:使用可选参数减少方法重载的数量C#语言习惯...

    C#4.0 引入了具名参数(MSDN翻译为"命名实参",个人认为具名参数更形象,可选参数亦是)和可选参数(可选实参).客户端代码使用具名参数意味着:方法中的参数名称也成为了公有接口 ...

  9. 序列化(串行化)- 使用BinaryFormatter进行序列化

    注:原书上翻译为串行化,MSDN翻译为序列化,我以MSDN为准,写为序列化. 可以使用属性(Attribute)将类的元素标为可序列化的(Serializable)和不可被序列化的(NonSerial ...

最新文章

  1. python 动画场景_Python GUI教程(十五):在PyQt5中使用动画
  2. 一些蠕虫传播研究的文章——TODO
  3. 【BZOJ3172】单词(AC自动机)
  4. 如果诸葛亮用C++写出师表。。。。
  5. VMware虚拟机和Ubuntu系统的必备设置(包括下载地址,更新下载源等)
  6. C#winform控制textbox输入只能为数字
  7. AlphaGo Zero,造神还是开启潘多拉魔盒?【附论文下载】
  8. c语言随机抽取函数,Excel随机取值,给你三种解决方案
  9. python 苹果李子橙_分享|苹果和它千万不能放在一起!因为它们会……
  10. C/S、B/S架构模式的三层结构特点分析
  11. 6个Web前端值得收藏很实用的菜单模板(下)
  12. 设计师工作经验_得到我作为设计师的第一份工作
  13. 19年上半年读书清单一览
  14. 网易微博宣布将用户迁移至轻博客Lofter
  15. 华清远见嵌入式培训_第六周回顾与反思
  16. 改名叫Benson...
  17. 网卡的功能、构造与分类 | 什么是网卡?
  18. 4.2.1 积分法(一)——第一类换元积分法
  19. 说说抖音和小红书的交互和界面设计,您更喜欢哪一个?
  20. Confluence 6 修改空间名字和标识

热门文章

  1. Vote打分界面完结
  2. APS计划排产在金属加工行业的应用
  3. 注意力汇聚:Nadaraya-Watson 核回归
  4. 弘辽科技:拼多多卖家该如何操作拼多多推广中心?推广收费吗?
  5. 计算机识别人脸原理,《人脸识别原理及算法 ——动态人脸识别系统研究》第一章 概论...
  6. ubuntu 查看网卡状态命令_ubuntu 查看网卡速度
  7. iPhone For Dummies, 12th Edition 免积分下载
  8. qlabel可以选中吗_PyQt5 控件学习(一个一个学习之QLabel)
  9. Python学习(作业第一周)
  10. IT行业 经验···