什么是最小权限原则(非常详细)
所谓最小权限原则,指的是只授予实体完成其工作所需的权限。通过只授予始终需要的权限,而不是偶尔需要的权限,可极大地降低用户或应用滥用或误用权限的可能性。
对应用来说,最小权限通常意味着以服务账户的身份运行、在容器或“牢笼”中运行等;对用户来说,最小权限通常表现为“只有工程师才能访问源代码”这样的策略;对于设备,也可考虑最小权限原则,但通常采用与其初始被指派的用户或应用相同的策略。
最小权限原则的另一种运用是,在需要提权的情况下,只让用户在需要的情况下拥有提升后的权限。知道执行各种操作所需的权限很重要,这样才能授予合适的权限。这种做法比简单的访问控制更进一步。
最小权限原则意味着,用户在大部分时间内使用无特权用户账户执行操作,需要提权时,用户使用有更高权限的单独账户执行操作。在单机环境下,用户通常通过执行认证操作来提权。
例如,在 UNIX 系统中,用户使用 sudo 命令来调用其他命令时,将被要求输入认证密码,通过认证后才会以相应的角色执行指定的命令。在 GUI 环境中,用户执行有风险的操作时,可能出现一个对话框,要求用户输入相应的密码。通过与用户交互,降低了恶意软件以用户的身份执行操作的可能性。
同样,在零信任网络中,也应让用户在大部分时间内只有较低的权限,仅在需要执行敏感操作时才提升其权限。例如,用户只要经过认证,就可随便访问公司的文件目录、随便使用项目规划软件,但要想访问重要的生产系统,就需进行进一步的确认,确保用户及其系统未被攻陷:
与用户一样,应用也应配置成只有必要的权限。然而,在企业网络环境中,应用常常被授予非常高的网络资源访问权限,其原因有两个:
因此在配置计算机时,常常会先禁用用于保护基础设施的应用安全框架。
除了考虑用户和应用的权限,零信任网络还会考虑网络中设备的权限。换言之,通过综合考虑用户/应用和用来访问资源的设备来决定要授予的权限等级,将有助于降低凭证丢失或被盗带来的影响。
相比于传统网络,零信任网络中的权限变化更为频繁。在传统网络中,最终会形成相对静态的访问控制策略。如果出现了需要更高权限的新应用场景,用户可能会说服管理员调整策略,但更常见的做法是,请求有更高权限的人(如系统管理员)帮他们执行操作。
这种静态定义的策略带来了两个问题。首先,在管理相对宽松的组织中,用户的权限将随时间的推移不断提高,导致最小权限原则带来的好处越来越少;其次,无论组织管理是否宽松,管理员都将被授予过高的权限,导致攻击者有意识地将系统管理员作为钓鱼攻击的目标。
相反,零信任网络根据网络活动的众多属性来确定当前请求的访问操作的风险程度,这些属性可以是时间方面的(在正常活动窗口之外进行的可疑访问)、地理位置方面的(访问位置不同于上次的访问位置)乃至行为方面的(用户访问其通常不会访问的资源)。与根据单一因素相比,根据访问请求的所有细节决定是否授权,可实现更细粒度的访问控制。
例如,如果用户在正常工作时间从正常位置请求访问数据库,将被授予访问权限,但如果用户在非工作时间从非常规的位置请求访问数据库,将要求用户使用额外的方式进行认证。
在零信任网络中,可根据网络活动的风险程度主动地调整访问权限,这是使零信任网络更安全的多个特性之一。凭借动态调整策略和访问权限,零信任网络能够在攻击者发起已知或未知的攻击时自主采取应对措施。
定义信任策略的工作通常由安全工程师手动完成。云系统可能提供了托管策略,但这些策略只实现了基本区分(如超级用户、管理员、普通用户),无法满足高级需求。
出现这种情况的可能原因之一是,策略难以定义和维护,因此试图变更既有策略的请求会遇到阻力。鉴于策略变更带来的影响难以判断,出于谨慎考虑,管理员倾向于维持现状,这让最终用户感到沮丧,同时大量的变更请求让系统管理员不堪重负。
权限授予通常也通过手动完成,且权限是根据用户在组织中承担的职责授予的。这种基于角色的策略系统导致网络管理员必须创建大量信任池,从而削弱了网络的整体安全态势。这些信任池使黑客将系统管理员账户作为攻击目标,例如 Conti 勒索软件集团将攻击系统管理员作为勒索攻击的最后一步。
诸如 LAPSUS$ 等网络犯罪组织积极地招募公司内鬼,以帮助它们通过 VPN 或 Citrix 渗透到公司网络内,如下图所示。

图 1 网络犯罪组织LAPSUS$在Telegram频道上发布的公司员工/内鬼招募信息
网络犯罪组织的目标是进入公司网络,最好是使用具有特权的员工凭证进入。最近几年,LAPSUS$ 使用这种方法成功地攻陷了三星、NVIDIA、沃达丰、微软和 Okta 的网络。保护网络的最高境界或许是这样的:不要设置权限极高的系统管理员账户。
这些信任池凸显了传统网络在信任管理方面存在的根本性问题:策略的动态程度不够,无法应对网络面临的威胁。成熟的组织会制定网络活动审计流程,但审计的执行频率可能不够,且审计工作非常烦琐,采用人工方式很难做好。另外,等到通过审计发现系统管理员行为恶劣,进而采取弥补措施时,可能已经造成了巨大的损害。一种可能更有效的做法是,重新审视参与者/信任关系,认识到信任是不断变化的,它取决于网络参与者以前和当前的行为。
这种信任模型根据参与者所有的行为来确定其可信度,它并不是什么新鲜事物,征信机构很多年前就开始提供这种服务了。
征信机构根据个人在现实世界中的行为给他打分,并评估其可信度,而不是要求零售商、金融机构或雇主各自独立地确定个人的可信度。然后,消费组织可根据信用评分来确定授予个人多大的可信度。申请抵押贷款时,个人的信用评分越高,贷款利率越低,这降低了放贷机构的风险。企业雇主可能将某人的信用评分作为其是否被录用的决策依据。
从个案论,这些因素让人感觉随意而模糊,但发挥着重要作用。通过根据具体情况及不断变化的“信任评分”来定义信任策略,提供了一种防御机制,让系统能够应对任何威胁。

图 2 通过使用信任评分,只需提供较少的策略就能授予不同的访问权限
零信任网络持续地监视网络参与者的行为,进而更新他们的信任评分,而不针对网络参与者做出二元的策略决策。然后,根据信任评分和请求操作的风险程度来定义策略,如下图所示:

图 3 信任引擎计算信任评分并生成代理,然后将代理同策略进行比较,以便给请求授权
例如,一个用户从不可信网络查看其日历时,可能对信任评分的要求较低;但如果这个用户试图修改系统设置,将要求他有高得多的信任评分,如果该用户的信任评分不满足要求,将拒绝其请求,并将该请求标记为需要立即审核。这个简单示例说明了信任评分的优点:可做出细粒度的决策,确定需要满足哪些要求才授予访问权限。
客户端最初建立会话时被认为是不可信的,它们必须通过各种机制积累信任值,直至达到访问目标服务所需的信任阈值。例如,强认证证明了设备由公司配置,信任度可能得到极大的提高,但还不足以访问计费系统。如果再提供正确的 RSA 令牌,可能会进一步极大地提高信任度,加上成功设备认证,足以被授权访问计费系统。
对那些坚持不懈的攻击者来说,难道不能通过慢慢在系统中积累信任而最终获得更高的访问权限吗?
或许通过延长需要保持行为“正常”的时间,可减缓攻击者的进度,从而足以缓解这个问题,因为这意味着外部审计将有更多的机会发现入侵者。
另一种缓解这个问题的方法是,向控制平面暴露多项信息,确保只有位于可信位置的可信用户才能执行敏感操作。通过将信任评分同设备和应用元数据相关联,可支持灵活的策略,这些策略能够规定必须满足的绝对要求,同时能够通过计算所得的信任评分发现未知的风险。
将安全策略和用户在组织中的角色解耦,可能会给最终用户带来迷惑和挫败感。例如,用户在咖啡馆访问敏感资源时可能遭到拒绝,但从家里访问时不会,系统如何向用户解释这种差别呢?是否可以向用户提出严格程度不同的认证要求呢?对于新用户,是否应该先授予其较低的访问权限,等信任评分表明其值得获得更多的信任后,再授予较高的权限呢?
或许可以让用户这样提高信任度:将使用的设备拿到技术支持处进行加固。所有这些都是需要考虑的重点,具体的操作路径因零信任网络的部署而异。
控制平面变化频繁,无法处理高速网络流量,因此定义控制平面和数据平面之间的接口时,必须确保数据平面几乎能够实现所有的策略行为,只将不常发生的(相对于流量速率)请求发送给控制平面进行处理。
零信任网络还在控制平面和数据平面之间定义了清晰的边界。在这种网络中,数据平面包括应用、防火墙、代理和路由器等系统,它们直接处理所有的网络流量。这些系统位于所有网络连接的路径上,需要快速决定是否允许流量通过。如果将数据平面视为一个整体,它将有很高的权限和很大的暴露面,因此必须防止数据平面中的服务被用来获得对控制平面的访问特权,进而在网络中横向移动。有关控制平面的安全性,将在第4章中讨论。
在零信任网络中,控制平面由一系列组件构成,这些组件接收并处理数据平面设备转发的请求,这些请求想要访问(或被授权访问)网络资源,如下图所示:

图 4 零信任客户端为了访问资源而与控制平面交互
控制平面的组件检查与发起请求的系统相关的数据,以确定操作的风险有多高,同时检查相关的策略,以确定所需的信任度有多高。做出授权决策后,控制平面将通知或重新配置数据平面中的系统,以允许进行请求的访问。
控制平面用来改变数据平面的机制非常重要。由于数据平面中的系统通常是攻击者进入网络的入口,因此数据平面和控制平面之间的接口必须非常清晰,以确保攻击者无法攻陷数据平面进而在网络中横向移动。
对于数据平面和控制平面之间的请求,必须进行加密,并使用非公共 PKI 系统进行认证,以确保接收系统是可信的。控制平面和数据平面之间的接口应类似于用户空间和内核空间之间的接口,将两个系统之间的交互在很大程度上隔离,以防提权攻击。
关注控制平面和数据平面之间的接口的同时,别忘了控制平面的另一个基本性质:在整个网络中,信任都由控制平面授予。鉴于控制平面对网络行为的深远影响,控制平面本身的可信度非常重要。在零信任网络中,由于存在控制平面这个具有极高特权的参与者,因此对网络设计有很多有趣的要求。
其中一个要求是,控制平面给数据平面中的参与者授予的信任必须有时间限制。信任必须是临时性的,信任委托方和信任受托方之间必须定期进行确认,以确保信任持续有效。为满足这一原则,最合适的解决方案是使用租用访问令牌或短期证书。
如果使用租用访问令牌,不仅需要在数据平面内部对其进行验证(例如,代理使用控制平面授予的令牌进入数据平面时),还需在数据平面和控制平面交互时进行验证。控制平面基于各种因素决定是否批准请求,由于信任是临时性的(有时间限制),因此如果最初控制平面决定批准请求所依赖的因素发生了变化,控制平面可能同数据平面协调,撤销之前对资源访问请求的许可。通过限制数据平面和控制平面使用特定凭证进行交互的时间窗口,可降低网络遭受物理攻击的可能性。
对应用来说,最小权限通常意味着以服务账户的身份运行、在容器或“牢笼”中运行等;对用户来说,最小权限通常表现为“只有工程师才能访问源代码”这样的策略;对于设备,也可考虑最小权限原则,但通常采用与其初始被指派的用户或应用相同的策略。
最小权限原则的另一种运用是,在需要提权的情况下,只让用户在需要的情况下拥有提升后的权限。知道执行各种操作所需的权限很重要,这样才能授予合适的权限。这种做法比简单的访问控制更进一步。
最小权限原则意味着,用户在大部分时间内使用无特权用户账户执行操作,需要提权时,用户使用有更高权限的单独账户执行操作。在单机环境下,用户通常通过执行认证操作来提权。
例如,在 UNIX 系统中,用户使用 sudo 命令来调用其他命令时,将被要求输入认证密码,通过认证后才会以相应的角色执行指定的命令。在 GUI 环境中,用户执行有风险的操作时,可能出现一个对话框,要求用户输入相应的密码。通过与用户交互,降低了恶意软件以用户的身份执行操作的可能性。
同样,在零信任网络中,也应让用户在大部分时间内只有较低的权限,仅在需要执行敏感操作时才提升其权限。例如,用户只要经过认证,就可随便访问公司的文件目录、随便使用项目规划软件,但要想访问重要的生产系统,就需进行进一步的确认,确保用户及其系统未被攻陷:
- 对于风险相对较低的操作,这个提权过程可能很简单,如要求用户输入密码、要求提供双因子验证令牌或向用户的手机推送通知;
- 对于高风险访问操作,可选择要求相关人员从对端以带外请求的方式主动确认。
与用户一样,应用也应配置成只有必要的权限。然而,在企业网络环境中,应用常常被授予非常高的网络资源访问权限,其原因有两个:
- 一是难以定义对应用进行限制的策略;
- 二是假定用户更有可能成为攻击目标。
因此在配置计算机时,常常会先禁用用于保护基础设施的应用安全框架。
除了考虑用户和应用的权限,零信任网络还会考虑网络中设备的权限。换言之,通过综合考虑用户/应用和用来访问资源的设备来决定要授予的权限等级,将有助于降低凭证丢失或被盗带来的影响。
相比于传统网络,零信任网络中的权限变化更为频繁。在传统网络中,最终会形成相对静态的访问控制策略。如果出现了需要更高权限的新应用场景,用户可能会说服管理员调整策略,但更常见的做法是,请求有更高权限的人(如系统管理员)帮他们执行操作。
这种静态定义的策略带来了两个问题。首先,在管理相对宽松的组织中,用户的权限将随时间的推移不断提高,导致最小权限原则带来的好处越来越少;其次,无论组织管理是否宽松,管理员都将被授予过高的权限,导致攻击者有意识地将系统管理员作为钓鱼攻击的目标。
相反,零信任网络根据网络活动的众多属性来确定当前请求的访问操作的风险程度,这些属性可以是时间方面的(在正常活动窗口之外进行的可疑访问)、地理位置方面的(访问位置不同于上次的访问位置)乃至行为方面的(用户访问其通常不会访问的资源)。与根据单一因素相比,根据访问请求的所有细节决定是否授权,可实现更细粒度的访问控制。
例如,如果用户在正常工作时间从正常位置请求访问数据库,将被授予访问权限,但如果用户在非工作时间从非常规的位置请求访问数据库,将要求用户使用额外的方式进行认证。
在零信任网络中,可根据网络活动的风险程度主动地调整访问权限,这是使零信任网络更安全的多个特性之一。凭借动态调整策略和访问权限,零信任网络能够在攻击者发起已知或未知的攻击时自主采取应对措施。
动态信任
信任管理可能是网络安全管理中最棘手的问题。对于网络中不断变化的用户和设备,确定对其授予什么样的权限将耗费大量时间,还会直接影响网络的安全态势。信任管理是如此重要,而当前信任管理系统部署不足的程度令人惊讶。定义信任策略的工作通常由安全工程师手动完成。云系统可能提供了托管策略,但这些策略只实现了基本区分(如超级用户、管理员、普通用户),无法满足高级需求。
出现这种情况的可能原因之一是,策略难以定义和维护,因此试图变更既有策略的请求会遇到阻力。鉴于策略变更带来的影响难以判断,出于谨慎考虑,管理员倾向于维持现状,这让最终用户感到沮丧,同时大量的变更请求让系统管理员不堪重负。
权限授予通常也通过手动完成,且权限是根据用户在组织中承担的职责授予的。这种基于角色的策略系统导致网络管理员必须创建大量信任池,从而削弱了网络的整体安全态势。这些信任池使黑客将系统管理员账户作为攻击目标,例如 Conti 勒索软件集团将攻击系统管理员作为勒索攻击的最后一步。
诸如 LAPSUS$ 等网络犯罪组织积极地招募公司内鬼,以帮助它们通过 VPN 或 Citrix 渗透到公司网络内,如下图所示。

图 1 网络犯罪组织LAPSUS$在Telegram频道上发布的公司员工/内鬼招募信息
网络犯罪组织的目标是进入公司网络,最好是使用具有特权的员工凭证进入。最近几年,LAPSUS$ 使用这种方法成功地攻陷了三星、NVIDIA、沃达丰、微软和 Okta 的网络。保护网络的最高境界或许是这样的:不要设置权限极高的系统管理员账户。
这些信任池凸显了传统网络在信任管理方面存在的根本性问题:策略的动态程度不够,无法应对网络面临的威胁。成熟的组织会制定网络活动审计流程,但审计的执行频率可能不够,且审计工作非常烦琐,采用人工方式很难做好。另外,等到通过审计发现系统管理员行为恶劣,进而采取弥补措施时,可能已经造成了巨大的损害。一种可能更有效的做法是,重新审视参与者/信任关系,认识到信任是不断变化的,它取决于网络参与者以前和当前的行为。
这种信任模型根据参与者所有的行为来确定其可信度,它并不是什么新鲜事物,征信机构很多年前就开始提供这种服务了。
征信机构根据个人在现实世界中的行为给他打分,并评估其可信度,而不是要求零售商、金融机构或雇主各自独立地确定个人的可信度。然后,消费组织可根据信用评分来确定授予个人多大的可信度。申请抵押贷款时,个人的信用评分越高,贷款利率越低,这降低了放贷机构的风险。企业雇主可能将某人的信用评分作为其是否被录用的决策依据。
从个案论,这些因素让人感觉随意而模糊,但发挥着重要作用。通过根据具体情况及不断变化的“信任评分”来定义信任策略,提供了一种防御机制,让系统能够应对任何威胁。
信任评分
零信任网络使用信任评分来定义信任,如下图所示。
图 2 通过使用信任评分,只需提供较少的策略就能授予不同的访问权限
零信任网络持续地监视网络参与者的行为,进而更新他们的信任评分,而不针对网络参与者做出二元的策略决策。然后,根据信任评分和请求操作的风险程度来定义策略,如下图所示:

图 3 信任引擎计算信任评分并生成代理,然后将代理同策略进行比较,以便给请求授权
例如,一个用户从不可信网络查看其日历时,可能对信任评分的要求较低;但如果这个用户试图修改系统设置,将要求他有高得多的信任评分,如果该用户的信任评分不满足要求,将拒绝其请求,并将该请求标记为需要立即审核。这个简单示例说明了信任评分的优点:可做出细粒度的决策,确定需要满足哪些要求才授予访问权限。
客户端最初建立会话时被认为是不可信的,它们必须通过各种机制积累信任值,直至达到访问目标服务所需的信任阈值。例如,强认证证明了设备由公司配置,信任度可能得到极大的提高,但还不足以访问计费系统。如果再提供正确的 RSA 令牌,可能会进一步极大地提高信任度,加上成功设备认证,足以被授权访问计费系统。
信任评分面临的挑战
基于信任评分的策略模型并非没有缺点。其中第一个难关是,单一的信任评分是否足以保护所有的敏感资源。用户的信任评分会因历史行为而降低,也可能因可信的历史行为而提高。对那些坚持不懈的攻击者来说,难道不能通过慢慢在系统中积累信任而最终获得更高的访问权限吗?
或许通过延长需要保持行为“正常”的时间,可减缓攻击者的进度,从而足以缓解这个问题,因为这意味着外部审计将有更多的机会发现入侵者。
另一种缓解这个问题的方法是,向控制平面暴露多项信息,确保只有位于可信位置的可信用户才能执行敏感操作。通过将信任评分同设备和应用元数据相关联,可支持灵活的策略,这些策略能够规定必须满足的绝对要求,同时能够通过计算所得的信任评分发现未知的风险。
将安全策略和用户在组织中的角色解耦,可能会给最终用户带来迷惑和挫败感。例如,用户在咖啡馆访问敏感资源时可能遭到拒绝,但从家里访问时不会,系统如何向用户解释这种差别呢?是否可以向用户提出严格程度不同的认证要求呢?对于新用户,是否应该先授予其较低的访问权限,等信任评分表明其值得获得更多的信任后,再授予较高的权限呢?
或许可以让用户这样提高信任度:将使用的设备拿到技术支持处进行加固。所有这些都是需要考虑的重点,具体的操作路径因零信任网络的部署而异。
控制平面与数据平面
在网络系统中,常常将控制平面和数据平面加以区分。这里的基本概念是:网络设备有两个逻辑域,这两个逻辑域之间存在清晰的接口。数据平面相对简单,负责管理网络流量,由于它需要高速地处理流量,因此其逻辑必须相对简单,且通常由专用硬件处理。相反,控制平面可以看作网络设备的大脑,由于系统管理员将配置应用于这一层,因此它会随策略的变化而频繁地变化。控制平面变化频繁,无法处理高速网络流量,因此定义控制平面和数据平面之间的接口时,必须确保数据平面几乎能够实现所有的策略行为,只将不常发生的(相对于流量速率)请求发送给控制平面进行处理。
零信任网络还在控制平面和数据平面之间定义了清晰的边界。在这种网络中,数据平面包括应用、防火墙、代理和路由器等系统,它们直接处理所有的网络流量。这些系统位于所有网络连接的路径上,需要快速决定是否允许流量通过。如果将数据平面视为一个整体,它将有很高的权限和很大的暴露面,因此必须防止数据平面中的服务被用来获得对控制平面的访问特权,进而在网络中横向移动。有关控制平面的安全性,将在第4章中讨论。
在零信任网络中,控制平面由一系列组件构成,这些组件接收并处理数据平面设备转发的请求,这些请求想要访问(或被授权访问)网络资源,如下图所示:

图 4 零信任客户端为了访问资源而与控制平面交互
控制平面的组件检查与发起请求的系统相关的数据,以确定操作的风险有多高,同时检查相关的策略,以确定所需的信任度有多高。做出授权决策后,控制平面将通知或重新配置数据平面中的系统,以允许进行请求的访问。
控制平面用来改变数据平面的机制非常重要。由于数据平面中的系统通常是攻击者进入网络的入口,因此数据平面和控制平面之间的接口必须非常清晰,以确保攻击者无法攻陷数据平面进而在网络中横向移动。
对于数据平面和控制平面之间的请求,必须进行加密,并使用非公共 PKI 系统进行认证,以确保接收系统是可信的。控制平面和数据平面之间的接口应类似于用户空间和内核空间之间的接口,将两个系统之间的交互在很大程度上隔离,以防提权攻击。
关注控制平面和数据平面之间的接口的同时,别忘了控制平面的另一个基本性质:在整个网络中,信任都由控制平面授予。鉴于控制平面对网络行为的深远影响,控制平面本身的可信度非常重要。在零信任网络中,由于存在控制平面这个具有极高特权的参与者,因此对网络设计有很多有趣的要求。
其中一个要求是,控制平面给数据平面中的参与者授予的信任必须有时间限制。信任必须是临时性的,信任委托方和信任受托方之间必须定期进行确认,以确保信任持续有效。为满足这一原则,最合适的解决方案是使用租用访问令牌或短期证书。
如果使用租用访问令牌,不仅需要在数据平面内部对其进行验证(例如,代理使用控制平面授予的令牌进入数据平面时),还需在数据平面和控制平面交互时进行验证。控制平面基于各种因素决定是否批准请求,由于信任是临时性的(有时间限制),因此如果最初控制平面决定批准请求所依赖的因素发生了变化,控制平面可能同数据平面协调,撤销之前对资源访问请求的许可。通过限制数据平面和控制平面使用特定凭证进行交互的时间窗口,可降低网络遭受物理攻击的可能性。