本文探讨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 1703 之前的版本,在控制面板-显示中,存在如下图中的图形界面设置: 系统升级到Windows 10 1703 或是Windows 10 1709 之后,不再存在 ...

  2. 各个版本 Windows 10 系统中自带的 .NET Framework 版本

    原文各个版本 Windows 10 系统中自带的 .NET Framework 版本 Windows 名称 Windows 版本 自带的 .NET Framework 版本 Windows 10 Oc ...

  3. Windows 10操作系统中的邮件应用

    早期的邮件收发软件Outlook express曾被广泛使用,然而现在却很难下载到,在Windows 10操作系统中也无法使用. 实际上,Windows 10中存在“邮件”应用,可以直接作为邮件的收发 ...

  4. java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET

    java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET 亲,“社区之星”已经一周岁了!      社区福利快来领取免费参加MDCC大会机会哦    Tag功能介绍—我们 ...

  5. 重新想象 Windows 8 Store Apps (35) - 通知: Toast 详解

    [源码下载] 重新想象 Windows 8 Store Apps (35) - 通知: Toast 详解 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 通知 Toa ...

  6. 重新想象 Windows 8 Store Apps (36) - 通知: Tile 详解

    [源码下载] 重新想象 Windows 8 Store Apps (36) - 通知: Tile 详解 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 通知 Tile ...

  7. C语言操作WINDOWS系统存储区数字证书相关函数详解及实例

     C语言操作WINDOWS系统存储区数字证书相关函数详解及实例 以下代码使用C++实现遍历存储区证书及使用UI选择一个证书 --使用CertOpenSystemStore打开证书存储区. --在循环中 ...

  8. Asp.net中web.config配置文件详解(一)

    本文摘自Asp.net中web.config配置文件详解 web.config是一个XML文件,用来储存Asp.NET Web应用程序的配置信息,包括数据库连接字符.身份安全验证等,可以出现在Asp. ...

  9. C#中web.config文件详解

    C#中web.config文件详解 一.认识Web.config文件 Web.config 文件是一个XML文本文件,它用来储存 ASP.NET Web 应用程序的配置信息(如最常用的设置ASP.NE ...

随机推荐

  1. Microsoft SQL Server学习(二)

    目录 关于数据库的语法: 1.创建数据库 create database 数据库名 on primary (主文件属性(name,filename,size等)) -用逗号隔开次要主要文件和次要文件 ...

  2. 中国版 Office 365 (X-Tenant / Tango) 功能验证报告 - 2 基本步骤

    说明: 1. 前期准备 - 在Azure上模拟出生产环境: 包括父域域控.子域域控.父域的Exchange Server.子域的Exchange Server.对Exchange Server, 需要 ...

  3. Swift - 值类型与引用类型的初步探究

    前言 swift中的结构体和类在组成和功能上具有一定的相似性.两者都可以含有成员属性.成员方法用于数据存储和功能性模块封装.往往造成不知如何对二者进行区分和使用 值类型概念和引用类型概念 值类型的概念 ...

  4. date - 打印或设置系统日期和时间

    总览 date [选项]... [+格式] date [选项] [MMDDhhmm[[CC]YY][.ss]] 描述 根据指定格式显示当前时间或设置系统时间. -d, --date=STRING 显示 ...

  5. cpio - 存取归档包中的文件

    总览 (SYNOPSIS) cpio {-o|--create} [-0acvABLV] [-C bytes] [-H format] [-M message] [-O [[user@]host:]a ...

  6. ar - 建立, 修改档案或从档案中抽取成员.

    总览 ar [-]{dmpqrtx}[abcfilNoPsSuvV] [membername] [count] archive files... 描述 GNU 组织的ar 程序 用于建立, 修改档案 ...

  7. centos7下配置tomcat开机启动

    配置tomcat的开机启动1> 在centos7的/etc/rc.d/rc.local中加入:(注意自己的路径)#java environment export JAVA_HOME=/usr/j ...

  8. JavaSE-17 泛型

    学习要点 泛型接口 泛型类 泛型方法 多参数泛型类 泛型类的继承 泛型的定义 允许在定义类.接口.方法时使用类型形参,类型形参将会在声明变量.创建对象或者调用方法时候动态指定. 泛型接口 1  定义 ...

  9. BZOJ1079: [SCOI2008]着色方案 (记忆化搜索)

    题意:有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块. 所有油漆刚好足够涂满所有木块,即c1+c2+...+ck=n.相邻两个木块涂相同色显得很 ...

  10. ubuntu 18.04 安装.net core

    要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系那就只好在琢磨了,然后就发现了在github有安装的方法因为是18.04 所以 wget -qO- https://packages.micro ...