本文探讨Windows 10 S(下称Win10S)中的Device Guard(设备保护,下称DG)。我将提取策略,并弄清楚在默认Win10S系统上可以和不可以运行什么。我将在下一篇文章中介绍在不安装任何额外软件(如Office)或升级到Windows 10 Pro的情况下实现任意代码执行的一些方法。

Win10S是第一个向消费者发布的通过DG预先锁定的Windows操作系统。DG是基于WindowsVista中引入的内核模式代码完整性(KMCI)和Windows 8 RT中引入的用户模式代码完整性(UMCI)。DG包含诸多限制代码执行的特性,基于一组策略规则限制什么类型的可执行文件/脚本(包括DLL)可以加载。要找到在带DG的系统中运行任意代码的方法,我认为第一步是要提取DG策略并检查其缺陷。

提取DG系统完整性策略

DG的执行通过系统完整性(SI)策略配置。SI策略作为二进制文件存储在磁盘上。当操作系统启动时,WINLOAD或内核CI 驱动程序将策略加载到内存中,并根据配置的各种规则开始执行。

文件的位置取决于策略的部署方式。我使用的是预装了Win10S 的Surface笔记本电脑,策略位于C:\Windows\Boot\EFI文件夹中,名为winsipolicy.p7b。该文件无读取限制,我们可以提取其内容,因此可以确定执行的是什么策略。但是,据我所知,没有官方文档描述该二进制策略文件格式。有一个ConfigCI Powershell模块可将XML文件转换为二进制策略。但是没有相应的命令执行相反的操作。

MattGraeber编写了一个可将二进制格式转换回XML格式的Powershell脚本。但原始脚本有些问题,因此我做了一些修改,以完全支持Win10S中使用的策略格式,并修复了一些bug。Matt用我的修补程序在github上更新了其副本,可点击此处获取。将脚本加载到Powershell中,然后运行以下命令:

ConvertTo-CIPolicywinsipolicy.p7b output.xml

转换后得到我们可以阅读的XML文件。XML文件可从Matt的博文获取。接下来我们分成几个部分一一探讨。

系统完整性策略规则

第一个重要的部分是定义一组在系统完整性策略中启用的布尔选项的规则。

第一个选项启用UMCI。默认情况下,DG不执行UMCI,但执行KMCI。第二个选项启用“高级启动选项菜单”,这有点意思,因为默认情况下,菜单为禁用状态,该策略允许系统用户对启动过程有更多的控制。第三个选项是“执行应用商店应用程序”。这确保你不能为应用商店应用程序禁用UMCI。如果没有这种设置,就可以配置一个side-loading策略,如此你就可以部署自己的UWP应用程序。由于Win10S的宗旨是“安全性”,所以只允许应用商店签名的UWP应用程序,我将在“允许的签名者”部分解释这一点。最后一个是“条件性Windows锁定策略”,其似乎与Windows10S SKU和锁定策略最终可被禁用的可能性相关联。这与许可值和系统环境变量“Kernel_CI_SKU_UNLOCKED”有关。

文件规则

接下来是一组文件规则。这通常用于将已知可绕过DG及可让你轻易运行任意代码的具体可执行文件列入黑名单。这与微软在其DG部署指南中提供的列表接近。不过微软还阻止了注册表编辑工具和Windows脚本宿主等内容。

对于每个拒绝规则,策略指定一个文件名和最低文件版本。注意,在拒绝规则中,最低版本实则是最高版本。这就是说,规则仅适用于版本号低于指定版本的文件。由于每个规则的版本设置均为65535.65535.65535.65535,这是绝对最大值,这就确保了任何版本的可执行文件均无法执行。文件名和版本从可执行文件的版本资源中提取,这意味着仅仅将cmd.exe重命名为badger.exe并不能解决问题,策略会看到版本资源中的原始文件名并阻止执行。如果尝试修改版本资源,那么文件的签名不再匹配,你就无法通过签名策略。

对于微软为何要全力阻止CMD这样的东西,原因尚不十分清楚。我们确实可以用其运行命令,但签名策略一定程度上限制了可运行什么可执行文件。阻止PowerShell和WScript我还较为理解,但正如我们稍后会看到的,这些文件策略规则只能作为防止我们实现任意代码执行的减速带。

允许的签名者

现在我们来看看DG策略允许什么签名者(假设其未被文件规则阻止)。首先,DG策略定义允许的签名者列表,该列表稍后在策略配置中引用。允许的签名者列表如下:

大多数签名证书使用一种特殊的“知名”格式,仅用一个数字值来标识证书。找出这些数字值对应的证书可能比较麻烦。还好,Win10S中的Powershell ConfigCI模块有示例策略文件,比如Default_WindowsEnforced.xml,即使其未明确显示使用的证书,但至少给出了名称(毕竟其可能是多个Microsoft Product Root 2010证书)。比如,“MicrosoftProduct Root 2010”可能是以下root(是Win10S中几乎所有签名文件的root证书):

但是,由白名单签名者签名还不够,这未免太多简单。你还必须在证书链中具有特定的增强型密钥用法(EKU)。因此,比如,签名者ID_SIGNER_WINDOWS_PRODUCTION_USER必须具有OID值为1.3.6.1.4.1.311.10.3.6的EKUID_EKU_WINDOWS。Windows二进制文件设置了该EKU,但如果由相同root签名的二进制文件(比如WinDBG)也由微软签名,但未设置该EKU,这意味着其不加载。从这一信息我们可以理解由应用商店签名意味着什么。这是特定证书链和特定应用商店EKU的结合。这反映在ID_SIGNER_STORE签名规则中。

对于内核代码,允许以下签名者:

对于用户模式,允许以下签名者:

这里唯一突出的是ID_SIGNER_DRM的用户模式签名,因为其是DRM的预信任的root密钥。几乎肯定可以从多个图形驱动程序为链到该root的证书获取一个私钥。我尚未对此进行

Windows 10 S中的Device Guard详解(上篇)相关推荐

  1. Windows 10 系统自带搜索功能详解

    原标题:在 Windows 10 上高效搜文件,自带搜索功能其实就够了 快速搜索和效率启动,是大多数用户的刚需,为此也诞生了一大波启动器应用,如 macOS 平台的 Alfred.LaunchBar, ...

  2. Windows 10系统下安装FFmpeg教程详解

    FFmpeg:FFMPEG堪称自由软件中最完备的一套多媒体支持库,它几乎实现了所有当下常见的数据封装格式.多媒体传输协议以及音视频编解码器.除去部分具备系统软件开发能力的大型公司(Microsoft. ...

  3. win10计算机记录,启用Windows 10计算器中的历史记录功能 | MOS86

    点击此处修复Windows错误并提高系统性能 Windows 10中的计算器应用程序看起来很简单,但功能尚不强大,因为它包含一些标准的,科学的和编程的模式以及单位转换器.它成为准备账单,转换食谱或其他 ...

  4. Windows 10环境中安装Snort+Barnyard2+MySQL

    一.背景 Snort是一款著名的开源入侵检测系统,有着悠久的历史和众多用户.我们通过部署Snort系统来监测异常网络活动并发出报警.Snort的跨平台性能很好,它支持的各种Linux/Unix和Win ...

  5. 关闭windows安全警报_关闭 Windows 10 系统中自带 Defender 防病毒软件三种方法

    Windows Defender 以前它叫 Microsoft Anti Spyware,是一款杀毒程序,可以运行在 Windows XP 和 Windows Server 2003 操作系统上,并已 ...

  6. Windows 10/11 中的快速录屏的 5 种方法

    在当今世界,出于各种原因,人们更喜欢录制他们的 PC 屏幕.录制计算机屏幕的功能对于在线学习.录制在线会议的特定亮点或帮助您制作抖音视频至关重要.不管是什么原因,屏幕录制让许多人的生活更轻松.截屏是有 ...

  7. 实战Windows Azure:微软云计算平台技术详解

    实战Windows Azure:微软云计算平台技术详解  徐子岩 编著 ISBN978-7-121-14547-6   2011年10月出版 定价:69.00 元 16开 440页 宣传语:什么是真正 ...

  8. CC#中List用法介绍详解学习通http://www.bdgxy.com/roundWorker类用法总结学习通http://www.bdgxy.com/

    文章来源: 学习通http://www.bdgxy.com/ 普学网http://www.boxinghulanban.cn/ 智学网http://www.jaxp.net/ 表格制作excel教程h ...

  9. ios首次加载web_IOS_IOS中UIWebView的使用详解,一、初始化与三种加载方式 UI - phpStudy...

    IOS中UIWebView的使用详解 一.初始化与三种加载方式 UIWebView继承与UIView,因此,其初始化方法和一般的view一样,通过alloc和init进行初始化,其加载数据的方式有三种 ...

最新文章

  1. 掌握深度学习,为什么要用PyTorch、TensorFlow框架?
  2. 打开指定摄像头_我在无人区深处,遇到了一个高清摄像头
  3. 我所有的博客都在这里了,拿出来晒晒~~
  4. shiro学习(13):springMVC结合shiro完成认证
  5. Java工作笔记-使用Maven创建Spring Boot并生成war包外部tocamt运行
  6. C语言——猴子吃桃问题
  7. 初识Flink广播变量broadcast
  8. IntelliJ IDEA统计项目代码行数
  9. 编译原理(第3版) 清华大学出版社 黄贤英等人著作 课程知识点总结
  10. python http通信接口开发
  11. amr转换mp3格式文件
  12. 利用scrapy爬取句子迷网站优美句子存储到本地(喜欢摘抄的人有福了!)
  13. FeatherNets:卷积神经网络轻如羽毛,用于面部反欺骗
  14. ‘lengths‘ argument should be a 1D CPU int64 tensor, but got 1D cuda:0 Long tensor
  15. win10系统更新服务器太慢了,win10升级太慢咋办?win10升级太慢原因及技巧介绍
  16. 日常一些办公软件问题
  17. C语言:围圈报数游戏
  18. 分布式协调系统ZooKeeper的安装
  19. python学习-数组
  20. wps linux 程序转pdf文件,将PowerPoint转换成PDF的九款免费软件(附下载)

热门文章

  1. 初识Monorepo
  2. 2022年多媒体领域国际会议期刊汇总
  3. 安卓开发:修改app的文字样式
  4. 是计算机数控系统的核心,监管目标是监管者追求的最好效果或最好状态。()
  5. #Python@字符串语法规则
  6. parent-child 关系介绍
  7. angular2杂学
  8. 微信小程序调用相机选择图片生成水印
  9. 增长量计算n+1原则_国家公务员考试:资料分析中增长量的计算 (1)
  10. unity接入quick sdk报错总结(ios第二版)