
1. 设备信任1.1. 在零信任网络中建立设备信任至关重要,这也是非常困难的一个环节1.2. 建立设备信任是基石,直接影响零信任网络架构的成败1.3. 大多数网络安全事件都和攻击者获得信任设备的控制权相关,这种情况一旦发生,信任就将被彻底瓦解,无法通过设备来确保安全信任链的建立2. 初始信任2.1. 对于新采购的设备,其信任程度取决于采购者对生产厂商和供应商的信任程度2.1.1. 一般认为其信任度较高2.1.2. 这种继承自供应商的信任度是一种社会化信任2.1.3. 需要将这种现实社会的真实信任度“注入”设备本身,形成初始的数字信任度2.2. 黄金镜像2.2.1. 无论以何种方式收到设备,都需要加载一个明确的“好”镜像,这个镜像就是“黄金镜像”2.2.2. 一次性地通过彻底的审核确定软件镜像的可信,并将其作为“黄金镜像”进行分发2.2.3. 将一个干净的“黄金镜像”加载到设备能极大地确保设备的信任度2.2.3.1. 通过这种方式,有足够的理由确信设备运行的软件经过了审核并且是安全的2.2.3.2. 记录设备上次重新加载镜像的时间可以在一定程度上决定设备的可信程度2.3. 安全启动2.3.1. 通过一些非常底层的技术将非法代码植入到设备中是完全有可能的2.3.1.1. 即便重新为设备加载镜像也无法擦除2.3.2. 安全启动是防护此类攻击的方法之一,通过在设备固件内嵌入的公钥对驱动程序和操作系统引导程序进行签名验证,可以确保这类非法植入物无所遁形2.3.3. 安全启动比较有效,但是其受限于操作系统和设备的内在机制的支持2.3.4. 有效验证设备上运行的软件只是第一步,还需要提供一种技术手段,让设备可以向待访问的资源标识自己的身份2.3.4.1. 典型做法是通过私有CA为每台设备签发单独的设备证书,进行网络通信时,设备必须提交此证书2.4. 设备证书2.4.1. 设备证书不仅仅能证明设备是已知在册的,还能证明设备的唯一身份2.4.2. 设备证书的私钥一旦被窃取,攻击者就可以假冒信任设备,这种情况会直接影响设备认证方案的有效性2.4.2.1. 必须考虑设备证书私钥的安全存储问题2.4.3. 方案1:配置对私钥的访问权限,只允许具有超级权限的用户(如root或administrator)访问2.4.3.1. 攻击者一旦提权就可以轻易获取私钥2.4.4. 方案2:对私钥进行加密2.4.4.1. 比简单的权限控制方案好一些2.4.4.2. 可能存在一些易用性问题2.4.4.2.1. 必须提供口令或其他凭证才能解密和使用私钥2.4.4.2.2. 对于服务器认证的场景它就很不适用了2.4.4.2.2.1. 无法做到每次软件重启时都要求人工交互2.4.5. 方案3:迄今为止存储设备密钥的一种极好的方法是使用安全的加密处理器2.4.5.1. 这些设备[通常被称为硬件安全模块(HSM)或可信平台模块(TPM)]提供可以执行加密操作的安全区域2.4.5.2. 加密处理器暴露为数不多的应用程序编程接口(API)用于生成非对称加密密钥,确保私钥永远不会离开安全模块2.4.5.3. 操作系统也不能直接访问安全模块存储的私钥,因此它很难被窃取2.4.6. 设备证书代表了设备的身份和初始信任度,其私钥用于对其他系统证明本设备是被认证的、可信的2.4.6.1. 既然对身份标识的本地安全存储都需要谨慎防护以免被窃取,证书的生成和签发就更不应掉以轻心2.4.6.2. 如果从企业的安全需求来看,设备的初始证书签发和安装极其敏感,那就必须在证书签署流程中引入人工干预环节,杜绝流程上的隐患2.5. 身份标识安全2.5.1. 在相对静态的系统中配置新主机时,通常由安全操作员进行人工的设备身份标识部署2.5.1.1. 一般认为安全操作员是可信任的2.5.1.2. 这一人工操作确保初始身份标识可信2.5.2. 在动态系统中,配置和签名过程都是自动化的,是否需要人工干预?2.5.2.1. 完全取决于系统的安全等级2.5.3. 所有应用和系统组件都应该身份化,这一原则是不变的,这同时适用于主机中心化和容器中心化的环境2.6. 审批和安全授权2.6.1. 为避免人为犯错,建议每个人只负责对他们自己发起的请求进行审批确认2.6.2. 通过使用一次性动态口令(TOTP)可以在单个步骤中完成部署和签名授权2.6.2.1. 一个TOTP口令只能使用一次,所以TOTP验证失败是一个重要的安全事件,可以杜绝安全隐患2.6.3. 信任只能来源/派生于某个已有的信任源2.6.3.1. 人工干预2.6.3.1.1. 在相对静态的基础设施或终端用户设备的场景中,人工干预是一种简单安全的方案2.6.3.1.2. 对于自动化的基础设施场景而言,人工干预不是一个好的选择2.6.3.2. 资源管理器2.6.3.2.1. 在某种程度上属于特权系统,其具备对基础设施的系统进行扩大或缩减的能力,并且整个基础设施的可用性也极大地依赖这类资源管理系统2.6.3.2.2. 通过资源管理器可以直接或间接地对新证书的签发进行授权2.6.3.2.3. 在容器化环境中,这类职责可能由资源调度器承担2.6.3.3. 镜像或设备2.6.3.3.1. 可考虑将身份凭证直接“烧制”到设备镜像中2.6.3.3.2. 不建议将这种方案作为首选,因为这种方案过度依赖镜像库,并且保护和周期性地刷新镜像将变得复杂且具有风险2.6.3.3.3. 可以利用HSM或TPM来提供与硬件关联的设备证书,这种方案比直接将凭证“烧制”到设备镜像中稍好2.6.3.3.4. 但过度依赖TPM来实现设备证书的签发仍然不是最理想的方案2.6.3.3.5. 特别是需要兼顾云端系统的部署时,其局限性就很明显了2.6.4. 授权因子2.6.4.1. 镜像中的密钥(或TPM中注册的密钥)2.6.4.2. 正确的IP地址2.6.4.3. 合法的TOTP(通过资源管理器生成)2.6.4.4. 匹配的证书属性(如匹配的证书CN)2.6.5. 一种较好的方式是综合利用资源管理器和可信安全镜像,将通用的认证凭证“烧制”到设备镜像中(或注册TPM密钥),并将其用于终端和签名服务之间的安全通信传输2.6.5.1. 攻击者无法访问待部署的主机,顶多对可用性进行一些攻击2.6.5.2. 即便设备镜像被盗用也无法完成证书请求,因为资源管理器会进一步验证镜像部署的主机以及签名请求的其他属性3. X.5093.1. X.509是当之无愧的设备身份和认证方面的重要标准3.1.1. 它定义了公钥证书、吊销列表的证书格式和验证证书链的方法3.1.2. X.509证书的首要作用是证明身份3.2. X.509的强大之处在于,其使用的公私钥对除了用于设备身份认证,还提供了一种用于设备初始安全通信的可靠机制3.2.1. 这也是X.509对互联网安全非常有价值的众多原因之一3.3. 证书链及证书认证机构3.3.1. 要使证书具备足够的意义,对其建立信任是至关重要的3.3.2. 任何人都可以签发证书,只是拥有一个匹配的CN名称证书并不意味着什么,证书必须经由可信机构进行数字签名才能具备有效性,才是可信的3.3.3. 没有“真实”签名的证书被称为自签名证书,通常用于测试3.3.4. 证书注册机构(一般可由证书签发机构充当或委派)负责对证书的详细信息进行确认,只有确认过的证书信息才能被签名3.3.5. 如果签发的证书具备一定的属性,还可以用于签发下一级证书,从而形成信任链,显而易见,这个信任链的根就是证书认证机构3.3.6. 通过信任CA,我们间接信任了其签发的所有证书的有效性3.3.7. 通过实现分发少量公钥(CA公钥),所有从这个CA签发的证书都包含了到上级签发证书的链接,从而可验证其有效性和合法性3.4. 公钥加密或非对称加密3.4.1. 非对称加密运算代价极大,不适合用于大块数据加密3.4.2. 通过使用公钥和私钥两个密钥可以完成身份证明/认证3.4.3. 公钥是可公开分发的,而私钥由证书的所有者安全持有3.4.4. 使用私钥加密一小段数据,则这段数据只能通过对应的公钥进行解密,从而证明证书所有者确实持有证书私钥3.4.5. 在大多数场景下,这个密钥对采用RSA密钥对3.5. 设备身份3.5.1. 主体(Subject),这个字段用于描述证书的所有者,在设备认证的场景下,这个所有者就是设备(或主机)3.5.2. 通常情况下,组织(Organization, O)和组织机构(Organizational Unit, OU)字段的含义与字面意思一致3.5.2.1. O字段用于表示环境3.5.2.2. OU字段用于表示主机的角色3.5.3. 证书是经过签名的,可被信任,所以这些信息可以安全地用于授权判定3.5.4. 作为授权客体的服务器明确地知道其应该被授权给哪些主体3.6. 私钥存储3.6.1. 如果私钥被攻破,那么设备的身份和隐私也会受到威胁3.6.1.1. 私钥被攻破的情况是一种糟糕的场景,应该不惜一切代价进行规避3.6.2. 可以在存储私钥时对其进行加密,使用私钥的时候需要提供加密口令进行解密3.6.2.1. 使用口令对私钥进行加密仅适用于面向用户的设备3.6.2.2. 在数据中心场景,这种方案并不奏效,因为解密私钥需要口令并考虑其安全存储,或通过某种安全机制传输密钥口令到服务器,这样一来,保证口令的安全变得和保护私钥一样重要3.6.3. 硬件安全模块(HSM)3.6.3.1. 可以通过硬件生成密钥对并且将私钥保存在安全存储区内,安全存储区的私钥是禁止直接读取的,只能通过HSM提供的接口请求其使用私钥来进行指定的运算3.6.3.2. 这种基于硬件安全存储的私钥保护机制非常安全,不易被盗3.7. 设备认证3.7.1. 在零信任网络中,将X.509证书用于设备认证至关重要,它是证明设备身份的基石,其在建立端到端加密的过程中也不可或缺3.7.2. 零信任网络的每个设备都应该拥有X.509证书3.7.2.1. 这个方案的核心是私钥,私钥是基于软件的,如果被盗,那么整个设备认证体系将成为无本之木3.7.3. 设备证书通常用于真正的设备认证的代理3.7.3.1. 密钥如此之长,不可能将其写下来或记住3.7.3.2. 密钥可以被下载和安装,因此,一般不由用户随身携带,在设备认证的场景中,密钥应该始终和设备在一起3.7.4. 通过使用TPM可以将私钥和硬件进行绑定并安全存储,从而有望彻底地解决私钥的安全问题4. TPM4.1. 可信平台模块(TPM)是一种嵌入到计算设备中的特殊芯片4.1.1. 这种芯片一般称为加密处理器,用于以可信和安全的方式进行密码运算4.1.2. 一般包含自己的固件,可以将其视作一种特殊的单片机4.1.3. 有助于实现一种小巧而精简的硬件API,并且可轻松审核和分析潜在的系统漏洞4.1.3.1. 可以避免暴露过多接口以及直接对私钥的读取4.1.3.2. 即便是操作系统,也无从获取安全密钥4.1.4. 安全密钥和硬件紧密绑定4.1.4.1. 在零信任安全中,通过TPM实现设备认证是一个极佳的实践4.2. 使用TPM加密数据4.2.1. TPM生成并存储所谓的存储根密钥(Storage Root Key, SRK),这个密钥对代表了TPM设备的信任根4.2.2. 为了有效利用TPM进行批量数据加密,必须设法减少SRK直接保护的数据量4.2.3. 方案是生成一个随机加密密钥,将其用作对称加密算法(如AES)的加密密钥,并采用这类高性能算法对块数据进行加密,这个随机加密密钥可以使用SRK进行加密保护4.3. 中间密钥和密码短语4.3.1. 很多TPM库(如TrouSerS)在加密数据时会使用中间密钥4.3.1.1. 要求TPM创建一个全新的非对称密钥对,使用公钥对AES密钥进行加密,然后使用SRK对私钥进行加密4.3.1.2. 解密数据时,首先通过TPM解密中间密钥的私钥,并用它解密AES密钥,然后再使用AES密钥解密原始数据4.3.2. 增加一级额外的中间密钥有利于加密数据的灵活分发4.3.2.1. 如果仅仅为了满足“密钥只能通过相应的设备进行解密”这一目标,则并不需要采用中间密钥方案4.3.3. SRK和中间密钥都支持加密短语,因此中间密钥可以允许使用额外的加密短语4.4. 基于TPM的安全存储机制的一个作用在于保护设备X.509证书的私钥4.4.1. 安全密钥是设备身份证明的权威信任根,如果其被盗用,那么设备身份事实上也被盗用了4.4.2. 使用TPM对私钥进行加密,意味着虽然仍有可能从磁盘获取私钥,但是一旦离开当前设备,这个私钥就不能解密和恢复使用4.4.3. 密钥盗用仍然存在可能性4.4.3.1. 方案只能防止攻击者直接从磁盘读取密钥4.4.3.2. 无法避免攻击者提权后直接从内存读取解密后的密钥4.4.3.3. 攻击者甚至可能调用TPM的接口直接进行加解密操作4.5. 平台配置寄存器4.5.1. Platform Configuration Register, PCR4.5.2. 是TPM的重要特性之一4.5.3. 提供多个存储插槽,可以用于存放运行软件的散列值4.5.4. PCR最开始存放的是BIOS的散列值,紧随其后的是引导记录,然后是对应的配置信息,诸如此类4.5.4.1. 这些散列值序列可以用于证明系统的配置或状态是合法的4.5.5. 数据“封印”4.5.5.1. 可以确保只允许经过授权的软件配置解密数据,这可以通过在使用TPM加密数据时,传递一组已知的PCR数据值作为参数来实现4.5.5.2. 被“封印”的数据只能通过封印它的TPM进行解密,并且解密时PCR的取值必须匹配4.5.5.3. 由于PCR的取值无法修改或回滚,因此可以使用TPM“封印”技术确保加密数据不仅仅绑定到当前设备,还能绑定到特定的软件配置和版本4.5.5.4. 可以有效地防止攻击者通过设备访问权限来获取私钥,因为只有未被修改的软件才能解锁这些数据4.6. 远程认证4.6.1. 数据一旦离开物理TPM的安全存储区域,其安全性将无法保证,仍然可能被盗用4.6.2. 一旦通过TPM对加密数据进行解锁/解密,原本在TPM中安全存放的私钥就被暴露了4.6.3. TPM还提供了另外一种唯一标识其身份的方法,就是被称为背书密钥(Endorsement Key,EK)的密钥对4.6.3.1. 每个TPM都有唯一的密钥对4.6.3.2. EK的私钥仅存在于TPM内,因此即便是操作系统也无法对其进行访问4.6.4. 远程认证时,TPM生成一个称为“引用”,然后将其安全地传输至远端系统4.6.4.1. 这个“引用”包含了当前的PCR取值列表,并且使用EK进行签名4.6.4.2. 远端系统可以通过这些信息对主机身份(因为EK对于每个TPM都是唯一的)和对应的软件状态/配置(因为PCR的取值不能被修改)进行确证4.7. 用于认证的密钥仅能够签署源自于TPM的数据,这种局限显然无法支持类似TLS之类的传输加密协议4.7.1. 流行的IKE守护进程strongSwan使得TPM不仅仅可以用于认证IPSec连接,还能通过对PCR数据的使用实现授权,确保发起连接的主机所运行的软件是准确且未被篡改过的4.8. 对于一个成熟的零信任网络,使用TPM进行强设备认证是理想选择,它完美地实现了软件身份和物理硬件之间的联结4.8.1. 目前TPM虚拟化技术已有可用的实现(如用于Xen系统的vTPM),但信任仍然必须植根于硬件TPM4.8.2. 设计一套可热迁移的基于TPM的安全系统具有极大的挑战性4.8.3. 虽然在成熟的零信任网络中建议采用TPM作为设备认证的手段,但不应该将其视为强制需求, TPM的大幅采用并不容易,在零信任架构的采用和迁移方面可以考虑一些其他的折中方案5. 基于硬件的零信任附件5.1. 在零信任网络中,支持传统设备的常用方案是采用认证代理5.2. 认证代理终止与零信任相关的逻辑和操作,并将连接转发至传统主机5.3. 可以通过一些专用硬件来实现类似功能,这些专用硬件设备作为零信任附件设备,携带一枚TPM芯片,可以直接插入传统设备的以太网端口