概述
零信任模型注定会取代边界安全模型。边界安全模型试图把攻击者阻挡在可信的内部网络之外,然而零信任模型却认识到这种方法注定会失败,因此,零信任模型首先假设内部网络中同样存在恶意的攻击者,并据此建立安全机制来防范这种威胁。
零信任网络的5个基本假定:
- 网络无时无刻不处于危险的环境中
- 网络中自始至终存在外部或内部威胁
- 网络的位置不足以决定网络的可信程度
- 所有的设备、用户和网络流量都应当经过认证和授权
- 安全策略必须是动态的,并基于尽可能多的数据源计算而来
传统网络安全架构和边界安全模型:
零信任架构:
零信任网络的3个关键组件:
- 用户/应用程序认证:组件包含了用户认证和应用认证两层含义,因为并不是所有的操作都由用户执行,比如在数据中心内部,很多操作由应用程序自动执行,在这种情况下,通常把应用程序等同于用户看待。
- 设备认证和信任:这一特性很少出现在采用边界安全模型保护的网络中。在传统的网络中,设备认证通常会出现在VPN或NAC技术中,但是在端到端的场景下很少用到。
- 信任:零信任模型需要计算出“信任评分”(Trust Score),并将应用程序、设备和信任评分绑定在一起形成“代理”(Agent),然后基于代理实施安全策略,进行访问请求的授权。
信任管理
威胁模型
枚举针对系统的威胁,定义能够缓解这些威胁的系统和过程。
网络安全领域常见威胁建模方法:
- STRIDE
- DREAD
- PASTA
- Trike
- VAST
RFC 3552描述了互联网的威胁模型。一般情况下,零信任网络遵循互联网威胁模型来描述安全态势,规划缓解威胁的措施。
强认证
零信任网络中,仅基于用户口令完成身份认证是不够的,因为可能被中间人攻击等等。
常用X.509证书进行强认证。
认证信任
PKI零信任模型身份认证的基石,大多数零信任网络都采用PKI来证明身份的真实性。设备、用户、应用程序等实体都可以使用数字证书来进行身份认证。
公共PKI会影响零信任网络的灵活性和可扩展性,尽量使用私有PKI。
最小特权
一个实体应该只被授予完成任务所需要的特权,而不是被授予该实体想要得到的权限。如果确实需要更高的访问权限,那么用户可以并且只能在需要的时候获得这些特权。
基于网络活动的风险分析主动调整访问权限的能力是零信任网络的安全特性之一。通过动态调整安全策略和访问权限,零信任网络能够积极应对已知和未知的恶意攻击。
可变的信任
信任引擎计算信任评分并生成网络代理,然后根据策略进行请求的授权:
零信任网络不再给网络参与者定义和分配基于二元决策的策略,而是持续监视参与者的网络活动,并据此持续更新其信任评分,然后使用这个评分作为授权策略判定的依据之一。
控制平面和数据平面
零信任客户端与控制平面进行交互以访问服务资源:
控制平面授予数据平面的某个参与者的信任应该具有时效性。信任应当是临时性的,信任委托方和信任受托方之间需要定期履行确认手续,才能保证持续信任的合理性。租用访问令牌或短生命周期证书是实现这一原则的较合适的解决方案。如果采取租用访问令牌的方案,那么这些令牌不仅需要在数据平面(比如,当控制平面向网络代理授予了令牌,网络代理在数据平面中移动时)进行校验,还需要在数据平面和控制平面交互时进行校验。通过限制数据平面和控制平面进行凭据交互的时间窗口,能够降低对网络进行物理攻击的可能性。
网络代理
网络代理指在网络请求中用于描述请求发起者的信息集合,一般包括用户、应用程序和设备共3类实体信息。
网络代理包含的不同类型的数据,其优先级、粒度都有所差异,典型的网络代理可能包含如下数据。
- 网络代理信任评分
- 用户信任评分
- 用户角色或群组
- 用户居住地
- 用户认证方式
- 设备信任评分
- 设备制造厂商
- TPM制造厂商和版本号
- 当前设备位置
- IP地址
数据的兼容性对实现和维护零信任控制平面来说至关重要。成熟的零信任网络都会通过从各种系统和数据源获取的数据来生成网络代理。按需扩展和伸缩性对一个成熟的零信任网络来说至关重要。
网络代理属于授权范畴,它参与授权决策,不属于认证范畴,但认证的结果和状态会在网络代理的数据中有所体现。控制平面基于网络代理对访问请求进行授权,这些系统是零信任网络中授权的首要执行者。
授权
零信任授权体系架构包括4个核心组件:策略执行组件、策略引擎、信任引擎、数据存储系统。从安全的角度来看,将这些组件彼此隔离大有必要。这些授权组件是零信任安全模型的核心构成要素,其安全性至关重要,可维护性也需要妥善评估。再次强调,不管出于任何目的,如果不得不把这4大组件合并到一个单体系统实现,那么其可行性和安全性都必须谨慎评估,最好是尽量避免这种实现方式。
策略执行组件
策略执行组件在整个零信任网络中大量存在,部署时需要尽可能地靠近工作负载。策略执行组件直接影响授权决策的结果,在实际场景中,可以由负载均衡器、代理服务器甚至防火墙充当策略执行组件的角色。策略执行组件和负责授权决策的策略引擎进行交互,确保网络访问请求的主体通过认证,并将每个访问请求的上下文传递给授权引擎完成授权决策。策略引擎依据事先制定好的策略,对请求及其上下文进行比较并做出决策,根据决策结果通知策略执行点对访问请求放行还是拒绝。
策略执行组件有两大职责。第一,和策略引擎交互完成授权决策,比如,负载均衡器收到一个请求时需要通过授权并获悉此请求是否被允许。第二,授权决策结果的强制执行。这两大职责在零信任授权架构中既可以通过一个组件实现,也可以由两个系统组件来分别实现。
策略执行组件的位置非常重要,作为零信任网络在数据平面的实际控制点,它也可以被称为策略执行点,需要确保其部署位置尽量靠近终端,否则信任“收缩”到策略执行组件之后,零信任的安全性可能会受到影响。实际实现中,策略执行点可以作为客户端组件在系统中大量部署,这一点和其他组件不同,其他组件大多数是作为服务组件进行部署。
策略执行组件代理接收预授权信号,以使用传统策略执行机制控制对系统的访问,这些系统一起构成了策略执行组件。
策略引擎
策略引擎调用信任引擎,利用各种数据源分析并评估风险。风险评分类似信用等级,能有效防护未知威胁,通过风险评分可以提升策略的安全性和鲁棒性,又不至于因为考虑各种边界场景而引入复杂性。授权决策时,策略引擎将信任引擎作为一个重要的外部组件进行调用,Google公司的BeyondCorp项目率先采用了信任引擎技术。
策略引擎是零信任授权模型中进行授权决策的组件,它接收来自策略执行组件的授权请求,并和预先制定好的策略进行比较,决定请求是否被允许,并将决策结果返回策略执行组件进行强制执行。
策略执行组件和策略引擎的这种部署关系能很好地支持动态、实时、按需的授权决策,并且在必要的时候,快速撤销授权结果。因此,将策略执行组件和策略引擎分开考虑是至关重要的。
策略引擎进行授权决策时所使用的规则需要被持久化存储,策略规则虽然最终被加载到策略引擎模块中,但是其制定、存储和管理最好独立于策略引擎。将策略规则存放在版本控制系统中是一种值得推荐的方案,具有如下好处。
- 策略的变更可持续跟踪
- 策略变更的缘由可通过版本控制系统进行跟踪
- 策略配置的当前状态可通过实际的策略执行机制进行验证
零信任模型和传统网络安全在策略上的差异点主要体现在用于定义策略的控制机制不同。零信任策略不基于网络具体信息(如IP地址或网段),而是基于网络中的逻辑组件来制定策略,这些逻辑组件可能包括以下几种:网络服务、设备终端分类、用户角色。
策略可由系统管理员集中定义和管理,也可以开放部分权限给资源或服务所有者,但需要通过策略审查、分层策略等方式优化和缓解策略多人维护带来的潜在风险。
信任引擎
在零信任网络里,信任引擎是对特定的网络请求或活动进行风险分析的系统组件,其职责是对网络请求及活动的风险进行数值评估,策略引擎基于这个风险评估进行进一步的授权决策,以确定是否允许此次访问请求。
策略引擎周期性地从权威清单库读取各类实体的属性值,并基于一定的算法进行风险评分计算。比如,设备清单库可以为信任引擎提供设备上次系统更新的时间,或设备是否具备某类特定的安全机制。
对风险进行量化并不简单,一种可行的方案是定义一系列专门的规则来对实体的风险评分进行估计。比如,缺少最新软件补丁的设备的信任评分理应较低,用户连续认证失败也会导致其信任评分较低。
虽然这种通过规则逐项评估信任评分的方式是一种较好的基础方案,但是仅仅通过一组静态规则是不够的,它们不能满足零信任网络对未知攻击进行防御这一预设目标。因此,成熟的信任引擎除了使用静态规则,还大量采用机器学习技术来实现信任评分功能。
应该同时对网络代理及网络代理的构成要素(设备、用户及应用程序)进行风险评分。将这些风险评分同时传递给策略引擎,策略引擎根据具体的规则决定使用哪些评分参与授权决策。
虽然在零信任网络里,实体的信任评分看似并不机密,但仍然需要尽量避免将信任评分暴露给最终用户。对于潜在攻击者,当前信任评分无疑是一种提示信号,让他们可以知悉自己在当前系统中的信任度正在上升还是下降,从而进行更多的攻击尝试。
数据存储系统
用于授权决策的数据库可以被视为系统当前和历史状态的权威数据源。数据库存放的信息被控制平面的各个系统使用,是授权的一个重要的决策依据:
建立设备信任
初始信任:设备证书的生成和保护、静态和动态系统中的身份标识安全
通过使用一次性动态口令(TOTP)可以在单个步骤中完成部署和签名授权。生成部署请求时可以提供一个TOTP并将其传递给签名服务进行验证。这种简单而强大的机制确保了新证书签发过程的可控,同时其需要的额外管理成本较小。因为一个TOTP口令只能使用一次,所以TOTP验证失败是一个重要的安全事件,可以杜绝安全隐患。
通过控制平面认证设备
X.509证书链、TPM、基于硬件的零信任附件。
设备清单管理
- 梳理系统预期
- 客户端系统安全介绍:单次使用、瞬时性、第三方参与
设备信任续租
- 本地度量:基于TPM等硬件度量,基于agent程序采集健康度和状态等度量
- 远程度量:漏扫等
软件配置管理
配置管理是严格控制和记录所有软件变更的过程,所需的配置被定义为代码或数据,这些信息通常被提交到版本控制系统进行管理,以便进行变更审计、回滚之类的操作。有许多开源和商业软件可供选择,其中较受欢迎的是Chef、Puppet、Ansible和CFEngine。
- 基于配置管理的设备清单库
- 确保数据的真实性
使用设备数据进行用户授权
根据场景,形成信用评分,完成用户授权。
信任信号
- 上次镜像时间
- 历史访问
- 位置
- 网络通信模式
建立用户信任
在零信任网络中可以利用用户活动日志作为用户画像,分析用户行为基线以便与当前活动对比做出信任评估。
身份权威性
- 非正式身份:昵称、网名
- 权威身份:身份证、真实姓名、驾照
私有系统的身份初始化
- 政府颁发的身份
- 人工认证
- 预期信息的确认
身份的存储
- 最好用几个相互隔离的数据库来存储用户信息,限制信息的暴露面
- 目录的维护:妥善处理身份的新增和删除
何时进行身份认证
- 通过认证机制获取信任:登陆、验证码
- 通过信任驱动认证机制:摒弃绝对的一次性的认证需求,取而代之的是一种自适应的按需认证和授权机制
- 使用多通道通信:同时破坏多个通道的难度将大大增加,这就是多通道带来安全性提升的根本原因
- 缓存身份及其信任等级
如何认证身份
- 用户所知道的信息:只有用户本人知道的信息(如密码)
- 用户所持有的凭证:用户可以提供的物理凭证(如时间型动态口令令牌)、TOTP、证书、安全令牌
- 用户所固有的特征:用户的固有特征(如指纹或视网膜)
- 带外认证
- 单点登陆:SSO、Kerberos、CAS
- 向本地认证解决方案转移:UAF标准
用户组的认证和授权
- Shamir 秘密共享机制
建立应用信任
软件交付链:源代码、构建/编译、分发、执行。
- 信任源代码:保护代码库(源代码签名)、验证代码和审计跟踪、代码审查
- 构建系统的信任:构建任务签名、构建的可重现性、解耦发布版本和工件(Artifact)版本
- 建立分发系统的信任:工件发布、分发安全、完整性和真实性、建立分发网络的信任
发布文件签名,其中包含包索引的散列(含包自身的散列值):
信任实例
- 单向升级策略
- 授权实例:提供每个部署凭证的系统的示例流程
- 运行时安全:安全编码实践、隔离(SELinux、APPArmor、容器、沙箱等)、主动监控(模糊测试、漏洞扫描)、主动响应
建立流量信任
- 加密和认证
- 零信任网络:TLS、IPSec
- 过滤:主机过滤、双向过滤、中间过滤
- 首包认证建立初始信任:拥有预认证密钥的客户端可以发送一个签名的数据包为TCP连接设定期望,否则不会有应答
通过为认证请求设定预期,预认证可以被认为是对认证请求的授权,它往往通过为一小段数据加密和/或签名,并使用UDP协议将数据包发送至资源方来完成。使用UDP进行预认证非常重要,因为UDP传输是无连接的,默认无须响应,这个特性允许信息接收方“隐藏”自己,只有其接收到采用正确密钥加密的数据包时才会做出响应暴露自己。
被动接收一个经过正确加密的预认证数据包后,就可以让信息发送方启动身份认证流程了,可以对防火墙过滤规则进行细粒度控制,仅仅为此发送方打一个“洞”,让此发送方与系统的TLS服务器通信。这种预认证操作模式也称为单包授权 (Single Packet Authorization,SPA,开源实现:fwknop)。
零信任网络的实现
确定实现范围
RFC-格式的优先级建议:
- 所有网络流量在处理前必须经过认证
- 所有网络流量在传输前应当被加密
- 必须由网络中的端点系统执行认证和加密
- 必须枚举所有网络流量,这样系统才可以执行强制访问控制
- 应当使用网络中安全强度最高的认证和加密算法套件
- 认证不应当依赖公共PKI供应商,而应当使用私有PKI系统
- 应当定期执行设备扫描、为设备安装补丁以及轮换设备
建立系统框图
系统框图能够帮助我们透彻地理解内部网络和外部网络间的通信模式,有助于系统通信信道的设计。
理解网络流量
无控制器架构
- 从配置管理系统着手:配置管理系统只是过渡工具
- 应用认证和授权:使用安全令牌而不是TOTP(基于时间的一次性口令)
- 认证负载均衡和代理
- 基于关系的策略
- 策略分发
定义和安装策略
先记录后执行:
- 抽取所需策略集的一个子集,该策略子集就是建议策略
- 以仅记录日志的方式部署建议策略
- 在一个足够长的周期内收集生产环境的网络流量
- 研究那些执行建议策略后被拒绝的网络流量
- 执行建议策略
- 重复上述(1)~(5)步骤,直到所需策略都部署完成
- 完成所有策略部署后,开启一个默认拒绝所有流量的策略
零信任代理
零信任代理是应用级代理服务器,用来保护零信任网络,它是处理认证、授权以及加密的基础设施。这些代理的部署方式是保证零信任网络安全的关键所在。
零信任代理分为反向代理和前向代理两种工作模式,运行时可以同时采用这两种工作模式,也可以只采用其中的一种。
在反向代理工作模式下,代理接收来自零信任客户端的连接请求,并接收初始连接,校验此连接是否应该被授权,授权通过后,把客户端请求传递给后端的应用系统处理。
在前向代理工作模式下,非零信任感知的组件需要向另一个零信任系统发出网络请求。因为非零信任感知的组件不能和零信任控制平面交互,所以不能正确地初始化该请求,只能通过认证代理完成请求的初始化。
客户端与服务端迁移
通常首先是从客户端—服务器之间的交互着手实现零信任模型。这里的客户端一般是指移动设备或者源自非受控网络的访问服务。此外,考虑到设备的移动特性,其物理安全性也成为必须考虑的问题。因此,从此处着手实现零信任模型对组织来说价值比较高。
攻击者视图
- 身份窃取
- 分布式拒绝服务攻击(DDoS)
- 枚举终端
- 不可信的计算平台
- 社会工程学
- 合法用户被人身威胁
- 无效性
- 控制平台安全
参考
版权声明:本文为博主原创文章,转载请注明出处。 旭日酒馆