所有文章 > API安全 > 如何全方位保护 API 的安全
如何全方位保护 API 的安全

如何全方位保护 API 的安全

重大数据泄露事件不断增多,API 也越来越多地被用来获取敏感数据。原因有两个:API 是应用程序(及其数据)的第一道防线,越来越多的应用程序可以通过云和 API 访问。从音乐流媒体和社交媒体等非关键功能到财务账户和医疗保健等极其关键的数据,一切都可以通过 API 全天候访问。

为什么破坏 API 安全性如此令人向往?有很多邪恶的理由,但这里仅列举几个:

  • 窃取个人身份信息 (PII) 并在暗网上出售或用于身份盗窃
  • 对于资产盗窃、勒索或赎金
  • 导致应用程序不稳定或不可用
  • 间谍活动(企业或政治)
  • 干预选举
  • 政治格局动荡不安

诸如此类。数据的可用性和泄露的危险使得确保 API 安全至关重要。

每年,开放全球应用安全项目 (OWASP)都会列出十大 API 安全风险。我们将快速浏览当前列表,并列出每种风险导致的数据泄露示例。

之后,我们将讨论 API 管道以及如何防止管道中常见的 API 安全问题。

OWASP 十大 API 安全风险(2023 年)

让我们看一下 OWASP 十大 API 安全风险,按普遍性(从高到低)排序。

API1:2023 – 对象级授权 (BOLA) 损坏

在 BOLA 攻击中,应用程序数据的对象 ID 在 API 响应中泄露,并用于获取对敏感数据的未经授权的访问。

大规模Twitter(现为 X)API 泄​​露是一次 BOLA 攻击,其中可用于查找用户的 API 最终泄露了 PII。

API2:2023 – 身份验证失败

通过破坏身份验证,攻击者可以破坏弱的身份验证方法并获得对应用程序(最终是数据)的访问权限。

许多安全漏洞都是由于身份验证失败造成的。

API3:2023 – 对象属性级别授权损坏

这与 BOLA 类似,攻击者能够未经授权访问数据。

API4:2023 – 不受限制的资源消耗

在这种情况下,攻击者可以不受限制地访问应用程序及其资源。此类攻击可能导致应用程序不稳定甚至中断。如果不受限制地使用大量应用程序资源,结果可能会非常昂贵(例如付费云资源)

一个例子是拒绝服务(或 DoS)攻击,应用程序因流量过大而无法再运行。

API5:2023 – 功能级别授权 (BFLA) 损坏

使用 BFLA,可以允许未经授权访问应用程序功能。这包括微服务之间的授权问题。

一家保险公司成为 BFLA 攻击的受害者,因为客户数据通过应用程序的“受保护部分”向公众开放。

API6:2023 – 不受限制地访问敏感业务流

这种威胁涉及应用程序交易的自动滥用漏洞,例如售票或主题评论。例如,“恶意机器人”可用于压垮应用程序并规避安全性。

2022 年 11 月的泰勒·斯威夫特演唱会门票混乱就曾发生过这种情况。黄牛机器人被用来为经过验证的粉丝购买限量发行的门票,然后以高额利润出售。

API7:2023 – 服务器端请求伪造 (SSRF)

也称为“URL 欺骗”,这涉及服务器使用输入 URL 访问远程资源而不验证给定的 URL,这可能允许攻击者绕过 VPN 或防火墙并可能获得敏感数据的访问权限。攻击者使用服务器使请求看起来合法。

2019 年Capital One 发生的大规模数据泄露事件就是一次 SSRF 攻击,导致 1 亿信用卡持有人的 PII 被盗。最近,有人提起了集体诉讼。

API8:2023 – 安全配置错误

应用程序中任何薄弱或配置错误的安全性都会打开攻击面。

2023年5月,丰田汽车因云配置不足而遭遇大数据泄露。

API9:2023 – 库存管理不当

不当的 API 库存管理包括未记录的(影子)API、弃用的(僵尸)API 和未经授权的(流氓)API。

影子 API 和僵尸 API 存在风险,因为它们可能没有经过充分的安全审查。流氓 API 可能与影子 API 含义相同,但也可能是恶意代码注入打开应用程序后门的结果。

API10:2023 – 不安全的 API 使用

应用程序使用的第三方API的安全性较弱,可能会允许访问数据。

这种威胁的一个例子是具有数据访问权限的不安全的 AWS S3 存储桶,这似乎是造成最近许多数据泄露的罪魁祸首。即使托管数据的应用程序非常安全,数据仍然可以通过 S3 API 访问。

API 管道

在软件开发中,我们经常听到“管道”和“向左移动”等概念。但这些概念在 API 的背景下意味着什么?

API 管道涵盖整个 API 生命周期,从初始开发(“左侧”)到部署到生产(“右侧”)。如下所示。

API 管道 - 涵盖整个 API 生命周期

让我们讨论一下 API 管道的各个阶段。

开发/编码

API 诞生于开发中,理想情况下,首先要制定一个 OpenAPI 规范(OAS spec)来形式化 API,指定参数,确定可能的返回参数和代码等。

许多开发人员使用集成开发环境 (IDE) 来组织环境,例如VSCode(开源)、PyCharm(社区和付费层)或GoLand(付费层)。

根据 IDE,可能会有扩展程序帮助您编写 OAS 规范。例如,VSCode 有多个 OAS 规范 linter 扩展,可以静态标记规范问题,例如Spectral(开源)和Postman (免费和付费)。Spectral 扩展甚至有一个OWASP Top 10 API 安全风险规则集。Panoptica (免费试用版和付费版)可以从命令行运行不同的OAS 规范 linter 。

AI 副驾驶现在非常流行,可用于开发 API 客户端/服务器代码。流行的 AI 副驾驶包括GitHub Copilot(付费层)等。

请注意,并非所有 API 安全问题都可以静态检测。许多问题只能在动态环境中检测到,其中 API 调用实际上正在被执行。

API 代码完成后,就可以进行单元测试了。

单元测试

开发完成后,API 代码将接受单元测试,其中会进行“模拟”API 调用以验证 API 是否正常运行。单元测试环境仍然是静态的,因为尽管可以调用客户端和服务器函数,但应用程序并未作为一个整体运行。

有许多工具可以自动生成模拟 API 代码并运行模拟 API 服务器,包括WireMock(开源)、Mockoon(开源)、Microcks(开源)、Postman(免费和付费)、RestAssured(开源)和SoapUI(开源)。

一旦编写并通过单元测试,API 代码就可以用于 CI/CD。

持续集成/持续交付(CI/CD)

在 CI/CD 中,代码提交进行代码审查,构建镜像,并自动运行一些门控测试。门控测试包括静态测试(例如单元测试和 OAS spec linters)和动态测试(例如端到端功能测试),其中实际安装了代码,并且可以以自动化方式测试基本功能。

如果 CI/CD 测试全部通过,则代码可以合并到代码存储库并在暂存区进行测试。

暂存环境

暂存环境与实际生产环境类似,但独立用于内部测试。在暂存环境中,应用程序已安装,质量保证团队可以验证其功能。

高可用性和性能测试也可以在阶段运行。高可用性测试涉及验证应用程序中是否存在单点故障。性能测试验证您的应用程序是否能够大规模执行,其中包括大量 API 流量。

API 性能和负载测试的工具包括Locust(开源)、SoapUI 和 Postman。

另一种在准备阶段很有用的工具是模糊测试器。模糊测试器将坏数据传递到应用程序中的 API 端点,并试图对应用程序产生负面影响(例如使其停止响应、崩溃、泄露数据等)。模糊测试工具的示例包括RESTler(开源)和 Panoptica。

Greenfield Deployment

应用程序首次部署到生产环境时,称为“Greenfield Deployment”。在绿地部署中,由于没有现有工件,因此不存在任何版本控制或升级问题。

在生产环境中,您可以动态扫描实时 API 流量以查找安全风险,从而保护您的应用程序。Panoptica CNAPP 平台拥有一整套 API 安全功能,我们将在下面讨论。

Brownfield Deployment

Brownfield Deployment是指在现有生产环境中升级应用程序。

对于Brownfield ,API 向后兼容性和版本控制等因素开始发挥作用。例如,在应用程序升级为新版本后,API 客户端可以继续使用以前的 OAS 规范版本。必须支持多个 API 版本。

金丝雀部署是一种Brownfield ,其中应用程序的不同版本同时运行,以降低新版本的风险。金丝雀部署仅管理总 API 流量的子集。在这里,API 向后兼容性和版本控制也是重要的考虑因素。

预防管道中常见的 API 安全问题

现在我们已经讨论了 OWASP 十大 API 安全风险和完整的 API 管道,让我们来看看一些常见的 API 安全问题以及如何在整个管道中预防它们。

BOLA

根据 OWASP 的数据,BOLA 是 2023 年最普遍的 API 安全问题。它们包含在问题 API1:2023(损坏的对象级别授权)和 API3:2023(损坏的对象属性级别授权)中。

如前所述,在 BOLA 攻击中,最终用户能够访问他们无权访问的数据,通常是因为元数据在应用程序的 API 响应中泄露。

由于数据(尤其是 PII)是泄露的主要目标,任何未经授权的访问都会是一个巨大的安全问题。

如何防止 BOLA 穿过 API 管道?

  • 在开发过程中,请确保您的应用程序中具有强大的授权模型,不允许未经授权访问数据,并确保 API 响应中没有数据泄露。
  • 在开发和 CI/CD 中,使用OAS 规范 linters(前面讨论过)来标记潜在的授权问题。
  • 在单元测试和 CI/CD 期间,运行尝试在未经授权的情况下访问数据的模拟 API 流量。
  • 在 CI/CD 和暂存阶段,针对您的 API 端点运行模糊测试器,它会将错误输入发送到 API 并标记任何意外的数据访问。
  • 在准备和生产阶段,运行动态 API 安全工具来检查 API 流量并标记潜在的 BOLA 问题。Panoptica 具有 BOLA 检测功能。

BFLAs

当最终用户调用应用程序或应用程序微服务之间未经适当授权访问应用程序功能时,就会发生 BFLA。BOLA(上文)是关于访问数据的,BFLA 是关于访问功能的。未经授权访问功能最终会导致数据泄露。BFLA 是 OWASP 问题 API5:2023(功能级别授权损坏)。

如何防止 BFLA 跨 API 管道?

  • 在开发过程中,确保您拥有强大的授权模型,以便从最终用户和微服务之间访问应用程序功能。
  • 在单元测试和 CI/CD 中,运行尝试在未经授权的情况下访问应用程序功能的模拟 API 流量。
  • 在准备和生产阶段,运行动态 API 安全工具来检查 API 流量并标记潜在的 BFLA 问题。Panoptica 能够学习 BFLA 授权模型,然后检测实时流量中的任何潜在违规行为。

弱身份验证

应用程序的弱身份验证更容易被攻击者攻陷。它可以让威胁者访问用户帐户和数据。弱(或失效)身份验证包含在 OWASP 问题 API2:2023(失效身份验证)和 API8:2023(安全配置错误)中。

其中一种形式是基本身份验证,它需要用户名和密码,但密码本身很“弱”。这包括短密码、太常见的密码(例如可以在字典搜索中找到)或跨帐户重复使用的密码。

弱身份验证也可能是由于端点安全性弱造成的,例如使用 HTTP 而不是 HTTPs。

最后,加密问题也属于这一类。没有加密或加密薄弱的端点可能会为您的应用程序打开攻击面。如果没有任何加密,所有 API 流量都是“明文的”,这意味着它可以被窃听和轻松读取。弱加密可能涉及较短的加密密钥,很容易被破解。

如何防止 API 管道中出现弱身份验证?

  • 开发启用强加密的安全端点(例如 HTTPs)。
  • 对于基本身份验证,需要强密码多因素身份验证(MFA)。
  • 在开发和 CI/CD 中,使用OAS 规范 linters(特别是 OWASP Top 10 规则集)来标记不安全的端点问题。
  • 在单元测试和 CI/CD 中,运行使用弱身份验证并尝试获取访问权限的模拟 API 流量。
  • 在准备和生产阶段,运行动态 API 安全工具来标记实时 API 流量中的弱身份验证。Panoptica 可以检测多种形式的弱身份验证。

影子 API

OWASP 问题 API9:2023(库存管理不当)包括影子 API。影子 API 未记录在 OAS 规范中。它们是一种您甚至可能不知道的安全风险。

随着应用程序的发展,影子 API 的安全性不太可能随之发展。它们甚至可能会被完全遗忘,从而暴露出应用程序中持续存在的安全漏洞或后门。

如何防止影子 API 跨 API 管道?

  • 在开发过程中,请确保对所有 API进行盘点,并在 OAS 规范中记录每个 API。
  • 在准备和生产阶段,运行动态 API 安全工具,这些工具可以检测实时流量中的影子 API,并为其重建OAS 规范,以便正确记录它们。Panoptica 具有这些功能。

僵尸 API

OWASP 问题 API9:2023(库存管理不当)也包括僵尸 API。僵尸 API 是 OAS 规范中已弃用但仍在应用程序中活动的 API。它们出现在棕地和金丝雀生产环境中,这些环境中可能正在使用多个 API 版本。
与影子 API 一样,僵尸 API 不太可能随您的应用程序一起发展,并且从安全角度来看可能受到较少的审查,从而为您的应用程序留下后门。

如何防止僵尸 API 穿过 API 管道?

  • 尽快删除对僵尸(已弃用)API 的支持。
  • 在准备和生产过程中,运行可以检测实时流量中的僵尸 API 的动态 API 安全工具,例如 Panoptica。

弱第三方身份验证

即使您的应用程序数据访问确实安全,薄弱的第三方身份验证仍可能使您的数据面临威胁。第三方您的数据的访问包括数据库、S3 存储桶等。薄弱的第三方身份验证包含在 OWASP 问题 API8:2023(安全配置错误)和 API10:2023(不安全的 API 使用)中。

如何防止 API 管道中出现弱第三方身份验证

  • 在开发过程中,请保留应用程序所使用的所有第三方 API 和服务的清单
  • 验证第三方访问是否安全
  • 在 CI/CD 和暂存阶段,使用工具评估第三方API 调用的安全性。Panoptica CLI 具有此功能。
  • 在准备和生产阶段,使用云安全扫描器检测薄弱的第三方身份验证。云安全扫描工具的示例包括AWS Config(付费服务)、Azure Automation and Control(免费和付费层)、GCP Cloud Asset Inventory(免费)和CloudQuery(开源和付费层)。

资源消耗

无限制的资源消耗是 OWASP 问题 API4:2023。如果应用程序在短时间内被大量 API 调用淹没,则可能会产生负面影响。例如,CPU、RAM 和存储等应用程序资源可能会被快速消耗或耗尽,从而导致运营成本增加、响应时间变慢,甚至应用程序故障和中断。

如何防止 API 管道中不受限制的资源消耗?

  • 在开发过程中,为应用程序的 API 处理添加速率限制,包括 API 请求的最大速率和合理的超时
  • 在准备阶段,使用超出允许的 API 请求速率的性能测试并验证应用程序是否仍按预期运行。
  • 在准备和生产中,在应用程序前面使用API 网关来限制和限制 API 请求的速率。一些流行的 API 网关是AWS API 网关(免费和付费)、GCP API 网关(免费和付费)、Kong(开源和付费)、Tyk(开源)和Azure API Management(免费和付费)。请注意,使用 API 网关时,应用程序仍然需要自己的速率限制功能。

OWASP 问题 API6:2023(不受限制的敏感业务流访问)与不受限制的资源消耗有关,但它意味着自动化、坏机器人或人工智能参与了 API 滥用,从而加剧了资源消耗。

URL 欺骗

通过 URL 欺骗攻击,无效或恶意的 URL 会被传递到 API 请求中,服务器会在不验证 URL 的情况下代理该 URL。可疑 URL 可能是虚假网站或 Webhook。这可能会允许访问敏感数据和 PII。OWASP 问题 API7:2023(服务器端请求伪造)涵盖了此类漏洞。

如何防止 API 管道中的 URL 欺骗?防御此类攻击可能很复杂。这是一个很好的入门资源。预防措施的概要如下:

  • 在开发过程中,对给定的URL执行验证,包括IP地址和域名(参见上面的资源链接)。
  • 如果可能,创建一个允许的 URL列表,并根据列表验证给定的 URL(参见上面的资源链接)。
  • 在单元测试和 CI/CD 中,运行模拟 API 流量,尝试将无效的 URL 传递到 API 中。

数据注入

数据注入可让威胁行为者通过 API 将恶意数据、配置或程序传递到应用程序中。这可能会允许访问数据(例如 BOLA)或使应用程序不稳定。

如何防止通过 API 管道注入数据?

  • 在开发过程中,包括严格的类型检查(即检查请求中的数据是否正确,不允许意外的数据类型)和API 处理中的输入验证。
  • 设置请求中可输入数据的大小和数量的上限。例如,设置字符串输入的最大大小。
  • 在开发和 CI/CD 中,使用OAS spec linters来检测数据输入的问题。
  • 在单元测试和 CI/CD 中,运行尝试注入无效数据的模拟 API 流量。
  • 在 CI/CD 和暂存阶段,针对 API 端点运行模糊测试器,将无效或格式错误的数据发送到 API。Panoptica CLI 包含模糊测试功能。
  • 在准备和生产阶段,运行动态 API 安全工具,可以将 API 流量与 OAS 规范进行比较并标记数据差异(包括规范偏差)。Panoptica CNAPP 平台具有此功能。

代码注入

代码注入是指将不良代码添加到应用程序中。随着 IDE 插件和 AI 副驾驶越来越多地用于生成 API 客户端和服务器代码,存在将“坏”代码注入应用程序的风险。这可能会产生意想不到的甚至是恶意的副作用。例如,流氓(恶意)API 可能会注入您的应用程序,从而创建后门访问。流氓 API 属于 OWASP 问题 API9:2023(库存管理不当)。

如何防止通过 API 管道注入代码?

  • 在开发过程中,通过彻底的代码审查来验证任何生成的代码非常重要。
  • 在 CI/CD、准备和生产中,镜像扫描可以搜索应用程序中的任何常见漏洞和暴露 (CVE)。Panoptica 可以扫描 Kubernetes 容器镜像和虚拟机镜像以查找问题。
  • 在准备和生产阶段,运行动态 API 安全工具来扫描任何恶意 API。Panoptica 具有此功能。

结论

从 OWASP 十大 API 安全风险,到 API 管道,再到常见的 API 安全问题及其预防方法,我们涵盖了很多内容,并提供了很多工具建议。

祝您和您的应用程序拥有最好的 API 安全性!

文章来源:Securing APIs From Left to Right (and Everywhere in Between)

#你可能也喜欢这些API文章!