《零信任网络:在不可信网络中构建安全系统》:作者Evan Gilman和Doug Barth,译者奇安信身份安全实验室。本书介绍了零信任模型,该模型认为整个网络无论内外都是不安全的,“可信”内网中的主机面临的安全威胁与互联网上的主机别无二致。本书主要展示了零信任如何让读者专注于构建强大的身份认证和加密,同时提供分区访问和更好的操作敏捷性。通过阅读本书,读者将了解零信任网络的架构,包括如何使用当前可用的技术构建一个架构。
安全内参在近期对本书部分内容进行了连载,第二期的连载介绍了如何做好信任管理,本期连载作为系列连载的最后一篇,将详细介绍零信任网络中建立信任和进行授权的关键要素——网络代理。
什么是网络代理
网络代理指在网络请求中用于描述请求发起者的信息集合,一般包括用户、应用程序和设备共3类实体信息。在传统实现方案中,一般对这些实体进行单独授权,但是在零信任网络中,策略基于这3类实体信息的组合整体进行制定。用户、应用程序和设备信息是访问请求密不可分的上下文,将其作为整体进行授权,可以极大地缓解凭证窃取等安全威胁。
网络代理具有短时性特征,在进行授权决策时按需临时生成。访问代理的构成要素(用户或设备)信息一般存放在数据库中,在授权时实时查询并进行组合,因此,网络代理代表的是用户和设备各个维度的属性在授权时刻的实时状态。
以一个虚拟企业为例。这个虚拟企业颇具安全意识,为每个员工都发放了专用的笔记本电脑,用于日常办公。另外,考虑到如今工作和个人生活高度融合的现实,在非工作时间,一些员工难免需要通过自用的手机收发电子邮件和管理日程。为满足如上场景,安全团队制定了细粒度的访问控制策略:基于员工所使用的终端来决定是否允许其访问某些特定资源。
比如,允许员工通过企业发放的工作笔记本电脑提交源代码,但是禁止员工使用手机进行类似操作。通过手机访问源代码并非典型的使用场景,并且和企业提供的工作笔记本电脑相比,员工自用手机终端的安全风险更难评估和控制。因此,上述访问控制策略合情合理。
这个虚构的故事描绘了一个典型的零信任网络场景,安全策略在认证和授权环节都充分地利用了多个因子,综合考虑了用户及其使用的设备的信息。不难看出,用户和设备这两个因子相辅相成——虽然用户具备源代码的访问权限,但是并不允许其从手机这种移动终端上发起源代码访问。有的企业还会制定这样的访问控制策略——用户必须使用可信终端提交代码,并且这个终端必须属于用户,即用户只能使用自己的可信终端进行代码提交。
用户和设备的这种绑定关系称为网络代理,这是零信任网络引入的一个非常重要的概念。在零信任网络里,把用户和设备进行剥离并单独处置是不合适的,访问控制策略需要将用户和设备作为一个整体进行考虑。引入网络代理的概念,有助于针对用户和设备这个有机整体进行访问控制策略的制定,也可将这个整体称为用户—设备对。
网络代理的数据差异性
网络代理的一些数据字段是专门为了缓解主动攻击而存在的,这些属性的取值随时都可能发生变化,有些属性甚至需要在授权时实时计算出来,信任评分就属于这类动态数据。信任评估系统会根据访问活动日志之类的信息进行实时计算,并更新用户、应用程序和设备的信任评分。作为访问授权的重要因子,信任评分可以很好地缓解现代网络攻击,为确保其有效性,应该尽可能地实时或接近实时地进行计算和更新。
除了信任评分这类快速、频繁变化的数据,网络代理还经常包含一些稀疏数据。比如,一台新入网的设备,和已经入网并在册使用的设备相比,系统对其知之甚少,因此这类设备的网络代理能包含的信息就会少得多。虽然缺乏完备的数据,但仍然需要允许这类设备和企业基础设施进行交互,以便进行基本的设备注册和软件安装。在这个场景里,新入网设备还没有分配和绑定用户,如果安全策略要求网络代理必须包含用户信息,则这类设备访问资源时就会被拒绝。授权策略必须能覆盖这种场景,并考虑网络代理数据的稀疏性。
在零信任网络里,稀疏数据不仅仅存在于新入网设备中,在自治系统中也普遍存在,和人工值守的系统相比,自治系统的很多数据,特别是和用户相关的数据可能缺失。在这种场景下,系统一般不直接对运行和使用应用程序的用户账号进行认证,而是通过其他技术手段确保创建这些用户的配置管理系统的安全。
根据场景需求和方案的成熟度不同,网络代理包含的数据粒度可能有较大差异。可能只包含一些高层数据,比如用户名或设备的制造商,也可能包含底层的数据,诸如设备序列号、居住地之类的信息。当然,网络代理包含的数据越详细,数据的差异性就越是明显,必须予以解决。
网络代理包含的数据是否可信也是必须考虑的因素。比如,在采购阶段就采集的设备信息就比运行时从设备上采集的数据可信程度高,这种信任度的差异是客观存在的,其根源在于很难保证从设备上采集的数据的准确性和完整性,尤其是当设备可能被攻陷的情况下。
正确使用网络代理
针对设备和用户分别进行授权,虽然看起来更简单直接,但是不推荐这样做,在零信任网络模型下,授权的主体必须是网络代理,所有的访问控制策略都是针对网络代理制定的。
基于网络代理制定授权策略让策略制定者可以将通信上下文作为整体来考虑。用户—设备对在零信任授权决策中至关重要,网络代理将二者捆绑在一起,让其相辅相成缺一不可。同时,把数据打包到访问代理,可以降低用户/设备比较的复杂度,也很符合零信任架构理念中关于降低进入门槛的关键诉求。
作为网络活动的首要参与者,网络代理在信任评分计算过程中,同样发挥着重要作用。评估网络代理的信任度时,信任引擎不仅仅可以使用网络代理自身包含的信息,还可以使用其历史行为记录。信任评分作为网络代理的附加信息,在制定授权策略的时候会经常用到。关于信任评分的计算方法,后续章节将会详细阐述。
另外,正确理解认证和授权之间的差异至关重要。网络代理是纯粹的授权要素,和认证毫无关系。事实上,认证是先决条件,只有成功通过认证,才能产生网络代理所需的数据信息。对用户和设备的认证往往是单独进行的,比如,设备可以使用X.509证书进行认证,而用户的认证往往采用传统的多因子认证手段。
一般来说,认证是面向会话的,而授权是面向请求的。认证所使用的数据和因子一般不会经常变化,因此,将认证结果进行会话缓存是允许的,但授权恰好相反,因为授权决策极大地依赖网络代理的数据细节,这些数据受各种因素的影响,可能随时发生变更,因此,授权决策应该尽可能地依赖最新的数据,绝不建议将网络代理或授权结果进行缓存。
最后,如果生成网络代理的代价过大,则会极大地影响并发授权请求的性能,因此生成网络代理的方法和机制应该尽可能的轻量级。
适当地暴露网络代理
网络代理包含的信息往往是敏感的。一些用户的隐私信息,如姓名、地址、电话号码包含在网络代理中,有利于更好地做出授权决策,但这些信息很敏感,必须妥善处理以确保用户隐私不被泄露。
不仅仅是用户信息很敏感,设备信息也同样敏感,设备的详细信息有可能被攻击者用于进行针对性的远程攻击,根据一些模式分析,攻击者甚至可以判断出用户设备的物理位置并进行窃取。
控制平面本身的安全性较高,因此整个网络代理生命周期都应该限制在控制平面内以便充分地保护其数据安全,控制平面的系统应该在逻辑上和物理上都与数据平面隔离,应该定义明确的边界并不要频繁变更。
策略判定依赖访问代理,既然访问代理的数据位于控制平面,那么策略判定就应该在控制平面完成。但是也有例外,比如在某些应用中心化的场景,需要实现细粒度的应用功能授权。应用程序位于数据平面,虽然位于控制平面的授权引擎也可以对应用程序的授权请求提供服务,但这并不是最佳方案,在这种场景下控制平面并不一定是授权决策的最佳位置,需要应用程序本身进行一些授权决策。这种情况,需要将一些网络代理的信息暴露给数据平面。
举个例子,假设有一个管理系统存放了客户的所有信息,员工可以根据其角色对这些数据进行访问,不同角色的员工访问的数据不同,其中的搜索功能允许员工在被授权访问的数据中进行搜索。要实现这个逻辑,管理系统需要知道用户的角色以便进行授权。
为了让应用程序实现自身的细粒度授权逻辑,需要通过可信的信道将网络代理的信息暴露给应用程序,比如,可以简单地在访问请求通过反向代理时,将网络代理的数据信息插入请求的HTTP头。在这个例子里,反向代理属于零信任网络的控制平面,可以查看网络代理信息并进行粗粒度的授权,同时将网络代理的部分信息传递给下游应用程序进行进一步的细粒度授权。
将网络代理的信息暴露给下游应用程序,也有利于兼容应用系统既有的丰富的授权机制。要实现这种兼容性,需要将网络代理的部分信息按照下游系统的要求进行格式转换并传递。对第三方应用来说,其支持的数据格式难免有差异,但对于企业自建应用,网络代理采用通用数据格式也将极大地降低管理代价。
延展阅读
声明:本文来自安全内参,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。