【翻译】使用OpenAPI规范进行安全的API设计

API安全性是网络安全的重中之重。诸如云原生应用程序,无服务器,微服务,单页面应用程序以及移动和物联网设备等新兴趋势和技术已导致API的激增。应用程序组件不再是在单个进程中在一台机器上彼此通信的内部对象,而是通过网络相互通信的API。
这显着增加了攻击面。此外,通过发现和攻击后端API,攻击者通常可以绕过前端控件,直接访问敏感数据和关键内部组件。这导致了API攻击的激增。每周,新闻中都会报道新的API漏洞。OWASP现在有专门针对API的十大漏洞的单独列表。而Gartner估计,到2022,API都将成为头号攻击向量。
为了解决这个问题,公司越来越多地转向积极安全 模式。他们定义了预期的API行为,确保定义足够严格和详细,以使其有意义,测试实现以符合该定义,然后在使用API期间强制执行该定义。API预期范围之外的任何调用以及API预期返回范围之外的任何响应都将被自动拒绝。

与传统应用程序不同,API实际上具有一种在标准的机器可读模型中定义其预期输入和输出的方法。具体来说,对于当今最流行的API类型(REST API),此合同格式为OpenAPI。它最初是为文档目的而创建的Swagger标准,后来被Linux基金会下的OpenAPI Initiative采纳。当今市场上的大多数开发和API工具要么本机使用OpenAPI,要么以该格式支持导入和导出。
让我们看一下OpenAPI规范的特定部分及其在安全性中的作用。
注意: 我们将在此处的示例中使用YAML格式和OpenAPI版本3,但是JSON与该格式一样好,并且可以在版本2(也称为Swagger)中找到类似的方式来指定API行为。

路径

API路径是API定义中最基本的部分。它们与服务器URL和基本路径一起,记录了API客户端应调用的URL:

在OpenAPI规范中,路径是必填的。完整记录服务器公开的所有API和API路径可防止攻击者发起路径遍历攻击或查找影子端点:暂存,非生产性和旧式端点。

有效载荷

请求和响应都可能在正文中包含数据。REST API通常使用JSON作为交换数据的格式。尽管不是强制性的,但还是强烈建议您严格描述此类请求和响应的模式:

我们还应该将有效负载的类型明确指定为对象,并将其additionalProperties值设置为false。这些阻止将其他属性插入到调用中。
这些额外的步骤可防止攻击者将其获得的所有属性盲目地保存到数据库,并无意中覆盖敏感字段时,进行批量分配攻击。最近,流行的容器注册表系统Harbor发生了这种API漏洞,攻击者可以通过在API调用中仅包含”has_admin_role”:true来更改自己的个人资料详细信息,从而使自己成为管理员。

认证与授权

身份验证很重要,OpenAPI可以定义您的API应该具有的安全方案(基本,承载,API密钥,OAuth2,OpenID Connect等):

然后将其应用于任何级别(整个API或仅特定操作):

您也可以在上面的示例中看到,该标准本机支持范围。
不用说,身份验证和授权对于API安全性极为重要。如此多的API被黑客入侵的原因是: 它们本来是“内部的”,并且开发人员从未想到攻击者会找到进入网络并调用它们的方法。身份验证的设计没有遵循安全规范。

传输

在这个时代,应该始终加密流量并使用HTTPS而不是HTTP。
HTTP的使用会使得网站容易受到中间人攻击,在这种中间人攻击中,流量将被拦截,并且攻击者冒充合法的API使用者。

工具

我们将在这里简要介绍的另一个方面是工具支持。本文并不是对工具的评论,因此我们仅提供一些指导。您可以自行选择如Eolinker安全网关或者其他的安全工具使用。
API安全规范只有在实际使用它的情况下才有用,并且根据生命周期的阶段,其用法也有所不同。

API防火墙和API网关可以基于合同(在外部(南北)和内部(东西方)级别)实施“积极安全性”,如下图所示:

结论

本文整理了大部分可能会出现的API攻击方式,但是也请意识到,OpenAPI仍然是一个不断发展的标准,并且它对API安全性的覆盖也在不断发展。
幸运的是,OpenAPI允许您使用自己的自定义对象和属性对其进行扩展。您可以自己执行此操作,也可以使用您选择的API安全网关或API管理工具提供的自定义扩展名进行操作。随着API攻击的增加,确保您受到保护的最有效方法是使用“积极安全性”模型,在整个API生命周期中使用定义明确,经过测试和强制执行的规范。
翻译:Eolinker——国内3万+企业在用的API管理和网关工具

posted on 2021-04-23 15:54  隔壁王书  阅读(564)  评论(0编辑  收藏  举报

导航