您还未登录! 登录 | 注册 | 帮助  

您的位置: 首页 > 软件开发专栏 > 网络/安全 > 正文

现代的应用安全需要纵深防御

发表于:2022-07-15 作者:胥磊 来源:51cto

译者 | 胥磊

审校 | 孙淑娟

在过去的十年,企业网络的入侵已经变得司空见惯,大家对边界安全的关注也在日渐淡化。但越来越多的公司发现仅仅通过“处于内网”就信任访问的用户和设备,明显不足以应对不断变化的威胁。

与此同时将业务应用程序重新平台化为 SaaS 模式,加上移动和分布式的网络逐渐成为行业趋势,使得通过VPN接入公司内网显得老套和繁琐。疫情的爆发围绕上述趋势掀起的一场风暴,加速了安全的更新换代。对于任何想要生存下来的公司来说,采用零信任架构都不再有可商谈的余地。

零信任意味着纵深防御

关于安全(含现实世界和数字世界)的最重要原则之一就是纵深防御。通过与单一控制措施来确保安全(就像大门上的一把锁)进行比较,单一措施的效果远不如采取一系列安全措施的组合能提供更多的安全性。

“门和锁”的分类

在这些确保安全的措施里面有不少可以采用零信任安全架构,都归属于粗粒度和细粒度访问控制的范畴。在过去的十年,大部分安防行业的注意力都集中在粗粒度访问控制,但在最近两年伴随一波创新的浪潮已经变为细粒度访问控制了。

如上图所示,纵深防御就是要求每一层上至少要有一个解决方案(甚至更多)。下面让我们深入研究其中的几个。

粗粒度访问控制

这类访问控制虽然能知道正在访问受保护资源的用户和设备,但是没有这些用户,相关操作以及操作资源的上下文。主要包括访问代理,单点登录/身份服务提供商以及API网关/路由。

1. 访问代理

正如Google在推广其BeyondCorp时所说的那样,访问代理是用户访问企业应用和资源的第一道防线。使用了用户、设备、网络、位置甚至日期/时间属性的准入控制策略,有助于确保只有通过该策略允许的请求才被路由到应用程序。Zscaler 和 Cisco 等大型供应商以此作为传统 VPN 的替代品。

2. 企业单点登录/身份服务提供商

身份服务提供商(IDP)通常被用于用户要登录他们可以访问的应用时进行身份验证。虽然严格意义上来说这不是授权层,但IDP可以根据一系列的属性对用户做出是否有权限访问某些应用的粗粒度决策。例如Okta这样的IDP可以将销售部门的用户配置到Salesforce,并强制只有销售人员才可以访问此类应用。IDP 对于下游访问控制也是至关重要的,因为它产生一个签名的访问令牌(如 JWT) ,IDP 的下游各层都可以使用这个令牌来确认请求所代表的用户身份。

3. API路由/网关

服务网格提供了一个机会,在将请求路由到应用程序之前可以使用API网关进行API的访问授权。云原生计算基金会的开放策略代理(OPA)项目,作为一个可用于访问授权的通用策略引擎而广受欢迎。像Styra这类供应商可以非常容易的通过配置类似Kong和Envory的API网关来评估OPA策略,该策略可以基于HTTP方法,路径甚至访问令牌(JWT)中的属性来允许或拒绝请求。话虽如此,由于API网关没有足够的用户相关的上下文(超出JWT范畴),而且无法提供特定资源的访问控制,因此这一层的防御是粗粒度的。

细粒度访问控制

这种类型的安全措施都内置于应用本身或者了解应用正在访问的资源,由于它们有那些正在尝试执行操作的用户,操作本身以及操作的资源相关的全部上下文,因此认为它们都是“细粒度”的,包括应用/API授权,数据过滤和数据代理。随着粗粒度解决方案日趋成熟,目前许多创新都转向了细粒度授权,其中的大多数解决方案都要某种程度地集成到应用程序中,而不仅仅是网络级别拦截请求。

1. 应用/API授权服务

几乎每个业务应用都有角色和权限控制,根据登录用户的权限级别来区分可用的操作集。一个健壮的 RBAC/ABAC 解决方案,允许应用将来自身份服务提供商(OPA)或目录的属性映射到应用的角色和权限,以便尽可能自动地分配角色和权限。

现代的应用有一个负责为每个应用/API请求授权的微服务,它会根据用户和资源属性编写授权策略来允许或拒绝请求。OPA作为这层的良好的解决方案开始被推行,很多供应商(其中包括Aserto)都将OPA作为端到端应用授权解决方案的一部分。SaaS开发人员也开始逐步使用基于OPA等开源项目中现成的解决方案来替换自主开发的授权微服务。

2. 数据过滤

一些应用依靠数据访问层来过滤出用户正在访问的数据中那些“正确”的数据,通常这些都是在行级安全级别的数据库中,或由开发人员手动或通过ORM库的构建在应用中完成。

解决这个问题的新方法包括向库提供描述主体(用户或用户组),谓词(要执行的动作)和对象(资源)以及主体可以使用的规则,和对资源可以执行的哪些操作,然后这些库将协助构建对数据源的查询控制,只返回“正确”的数据。本质上是提供了一个“授权感知的ORM”。

3. 数据代理

数据代理不仅可以通过依赖了数据源的应用来进行限制访问数据源还可以通过网络层进行限制。类似于API网关,数据代理可以拦截对已知数据源的请求,并根据用户以及其正在查询的字段做出细粒度的访问决策。Cyral已采用OPA作为执行数据库访问控制规则的底层引擎。

结论

借助于零信任架构,安全不再是孤注一掷的赌博行为。在降低因未授权访问和数据泄露带来的风险方面,纵深防御比过时的基于边界安全的方法要有效得多。每个公司都应采用这种粗细粒度混合的访问控制。

结合使用访问代理,身份提供商和API网关,为基于用户和设备身份的应用,资源和数据访问提供粗粒度访问控制。创建应用且对应用的每个请求都基于RBAC/ABAC服务进行授权,可以确保在应用层执行细粒度的访问控制,因为应用层中有着最多的谁被允许在哪些资源上执行哪些操作的上下文。一旦授权服务允许操作,使用数据过滤可以仅返回用户可以访问的数据,从而减少“手工”编写查询代码的需求。最后数据代理可以根据用户和应用正在访问的字段的细粒度属性对数据源的查询进行独立授权。所有这些方法的组合使用可以更好地提高安全性。

译者介绍

胥磊,51CTO社区编辑,某头部电商技术副总监,关注Java后端开发,技术管理,架构优化,分布式开发等领域。

原文标题:​Modern Application Security Requires Defense in Depth​​,作者:Omri Gazitt​