应用程序接口安全是指实施保护措施来保护应用程序接口及其传输的数据,最终防止未经授权的访问并确保软件系统和服务的可靠性。它对于保护您的数据和应用程序免遭未经授权的访问、数据修改或破坏至关重要。本文探讨了开发人员如何保护应用程序接口的最佳实践
随着现代软件开发越来越依赖应用程序接口(API),API 已成为网络攻击的主要目标。在 Palo Alto 于 2023 年进行的一项调查中,92% 的参与研究组织在过去一年中至少遇到过一次与 API 相关的安全事件。在这些企业中,57%的企业遇到过多次与 API 相关的安全事件。让我们来讨论一下风险以及如何避免风险。
OWASP API 安全风险
开放式网络应用程序安全项目(OWASP)是一个致力于提高软件安全性的非营利性组织。它提供各种资源,包括指南、工具和最佳实践,以帮助开发人员和组织提高应用程序的安全性。该组织旨在提高人们对应用程序安全问题的认识,并提供切实可行的解决方案来降低风险。
2019 年,该组织在年度报告中增加了安全 API Top 10 榜单。该榜单确定了 API 安全十大风险,为开发人员提供指导,让他们全面了解 API 生态系统中普遍存在的威胁。OWASP 维护十大 API 风险,最新版本于 2023 年发布。
OWASP API 2019 年十大风险列表 | OWASP API 2023 年十大风险列表 |
---|---|
1. 被破坏的对象级授权 | 1. 被破坏的对象级授权 |
2. 被破损的用户身份验证 | 2. 失灵的身份验证 |
3. 数据过度暴露 | 3. 对象属性级授权失效 |
4. 缺乏资源和速率限制 | 4. 不受限制的资源消耗 |
5. 功能级授权失效 | 5. 功能级授权失效 |
6. 大规模分配 | 6. 不受限制地访问敏感业务流 |
7. 安全配置错误 | 7. 服务器端请求伪造 |
8. 注入 | 8. 安全配置错误 |
9. 资产管理不当 | 9. 库存管理不当 |
10. 日志记录和监控不足 | 10. 不安全地使用 API |
了解每种风险
被破坏的对象级授权
API 使用对象级授权来确保只有授权用户才能访问其提供的数据。如果应用程序接口未能在对象级别充分执行访问控制,允许未经授权的用户查看、修改或删除他们不应该访问的数据,就会出现对象级授权失效(BOLA)的情况。这种风险表明,应用程序接口没有正确检查谁可以对特定对象执行哪些操作,从而可能暴露敏感数据。
举例说明: Purple-Cart 是一个在线购物平台,用户可以查看和编辑他们的订单详细信息。在这种情况下,如果对象级授权失效,一个用户就可以操作甚至删除另一个用户的订单信息。
这种风险的影响可能非常严重。它可能导致数据泄露、隐私侵犯和经济损失。未经授权访问敏感数据会损害组织的声誉,并导致法律后果,因此需要谨慎降低风险。
断点验证
身份验证失效是一种漏洞,由于身份验证过程中的缺陷,它允许未经授权访问应用程序或 API。当凭证未得到适当保护、会话未得到充分管理或存在薄弱的身份验证方法时,就会出现这种情况。
举例说明:如果应用程序接口不要求用户在更改电子邮件地址时提供当前密码以确认身份,攻击者就可能利用这种漏洞接管用户账户。
失效身份验证的影响可能是有害的,会导致未经授权的账户访问、身份盗用和敏感数据滥用。
破坏对象属性级授权(BOLA)
在这种情况下,攻击涉及通过过度数据暴露(向用户暴露敏感数据或不必要的数据)或批量赋值(同时为对象的多个属性赋值)来获得对敏感信息的未授权访问。利用此漏洞,无有效访问权限的用户可读取和/或修改端点的对象值。
举例说明:网上银行应用程序的 API 端点允许用户检索其账户信息。该端点将用户的账号作为参数,并返回一个包含用户账户余额、交易历史和其他账户详细信息的对象。
利用该漏洞可能导致攻击者访问潜在的敏感数据,包括个人身份信息 (PII)。此外,利用此类漏洞的攻击者可更改对象的属性,从而提升权限、篡改数据和绕过安全机制。
不受限制的资源消耗
这是一种旨在耗尽目标系统或应用程序资源的拒绝服务(DoS)攻击。当攻击者可以从 API 中消耗过多资源(如 CPU、内存或带宽)时,就会发生不受限制的资源消耗。这可以通过向 API 发出大量请求来实现。
举例说明:一个社交媒体应用程序有一个 API 端点,允许用户重置忘记的密码。该端点将用户的电子邮件地址作为参数,并发送带有重置密码链接的电子邮件。但是,该端点没有实施速率限制或其他措施来防止无限制的资源消耗。这意味着攻击者可以向端点发送大量请求,重置大量用户的密码。
利用应用程序中的这一漏洞会导致性能下降、中断,甚至造成经济损失。
功能级授权中断
当应用程序接口允许未经授权的用户访问某些功能或执行他们本不应该访问的操作时,就会出现功能级授权中断。这种漏洞通常源于不当的访问控制措施。
举例说明: 考虑一个电子商务应用程序,由于功能级授权失效,普通用户可以修改产品价格。这可能会导致经济损失、混乱和潜在的系统滥用。
功能级别授权失效可能会造成重大影响,导致经济损失、用户不满和系统功能滥用。
不受限制地访问敏感业务流
这涉及利用应用程序的业务模型来获得对敏感业务流的无限制访问。要利用此漏洞,攻击者需要了解目标 API 背后的业务逻辑,找到敏感的业务流,并自动对其进行访问。
举例说明: 用户通过保留所有电影首映时段,阻止其他用户使用电影院应用程序。
不受限制地访问敏感业务流会让攻击者窃取数据、发起 DoS 攻击和实施欺诈,从而损害公司的财务和声誉。
服务器端请求伪造(SSRF)
当攻击者可以迫使 API 服务器向其他系统发出未经授权的请求时,就会发生 SSRF。
举例说明: 社交媒体应用程序的 API 端点允许用户共享链接。端点将链接的 URL 作为参数,并返回链接的预览。攻击者可以发送恶意 URL,并使用 API 端点在内部网络上启动端口扫描,以发现开放端口。
利用 SSRF,攻击者可以访问未经授权的网络、篡改数据,甚至完全入侵服务器。
安全配置错误
当 API 或其组件配置不安全时,就会发生安全配置错误。这可能包括默认设置、权限过于宽松或暴露了本应保密的敏感信息。
举例说明: 考虑一个基于云的 API 服务,其存储桶可公开访问,默认情况下包含敏感的客户数据。安全配置错误可能会使任何人都能在线访问这些存储桶,从而导致数据泄漏。
安全配置错误的影响是巨大的,因为它可能导致数据泄露或未经授权的访问。
库存管理不当
如果企业没有完整准确的 API 清单,或者没有管理和淘汰旧 API 的流程,就会出现这种情况。如果企业没有管理旧端点或废弃端点的流程,攻击者仍可访问这些端点。这样,攻击者就可以利用这些端点,在未经授权的情况下访问敏感数据或功能。
当组织没有管理 API 密钥的流程时,也会出现库存管理不当的情况;这些密钥可能会暴露给公众。这可能会让攻击者窃取这些密钥,并利用它们对 API 进行未经授权的访问。
不安全地使用 API
当与外部 API 集成的 API 实施或后端系统没有验证和消毒其输入或验证端点时,就会发生这种情况。
此外,如果未验证 API 服务器的真实性,攻击者就可以冒充合法的 API 服务器,向客户端发送恶意请求。
举例说明: 网络应用程序使用 API 验证用户身份。网络应用程序没有验证发送到 API 的用户输入。攻击者向网络应用程序提交恶意输入,然后将其传递给 API。API 不会验证输入,因此恶意输入会在 API 服务器上执行。恶意输入会让攻击者控制 API 服务器。然后,攻击者利用 API 服务器窃取网络应用程序用户的敏感数据。
该漏洞一旦被利用,可导致数据被盗和遭受各种注入攻击。
缓解策略
缓解策略对于保护您的应用程序接口免受常见安全风险的影响至关重要。通过采取积极主动的措施,您可以大大降低漏洞被利用的可能性。以下是应对最常见 API 安全风险的实用策略:
防止破坏对象级授权
要防止这一漏洞,必须实施严格的访问控制和身份验证措施。减少 BOLA:
- 基于令牌的身份验证:用户登录成功后,系统会签发数字签名令牌,用于验证和控制对特定对象的访问,从而确保系统内安全和授权的交互,有助于减少对象级授权的中断。
- 用户访问控制列表(ACL):可通过明确定义和规范用户或用户组对特定资源的访问权限来缓解这一漏洞,确保精确和授权的交互,同时防止未经授权的访问。
- 执行测试:定期审核和测试授权机制,以发现并纠正漏洞。
可用于测试 BOLA 漏洞的工具有:
防止数据过度暴露
- 实施适当的数据过滤和访问控制。
- 只提供每个用户的角色或请求所需的数据。
- 确保不会无意中暴露敏感数据,并定期审查数据访问策略。
加强身份验证安全
- 多因素身份验证:通过要求用户提供多种形式的身份验证(如密码和时间敏感代码),这大大增强了身份验证的安全性,即使密码被泄露,也能增加一层额外的保护,防止未经授权的访问。
- 限制登录尝试:通过对登录尝试实施限制,可以降低未经授权访问的风险,使攻击者通过重复和自动登录尝试猜测或破解密码的难度增加。
- 会话管理:这可确保用户会话得到适当的验证和授权,通过实施安全的会话管理实践(如唯一的会话标识符和会话超时)最大限度地降低未经授权访问的风险,从而防止会话劫持和未经授权的会话重用。
工具
防范注入攻击
输入验证是防范 SQL 注入和跨站脚本 (XSS) 等注入攻击的关键。验证和消毒用户输入可防止恶意代码或意外字符被执行。正确的输入验证可确保用户提供的数据在可接受的参数范围内,从而消除篡改查询或注入恶意脚本的企图。
参考资料
防范 SSRF 攻击
- 防火墙:防火墙作为内部网络与外部实体之间的保护屏障,对减轻服务器端请求伪造(SSRF)攻击至关重要。可以对防火墙进行配置,以检查和过滤进出流量,帮助防止与 SSRF 相关的恶意请求。
- 白名单:实施白名单是加强服务器端请求伪造(SSRF)攻击防御的有力策略。使用白名单可定义应用程序可访问的认可 URL 和 IP 地址。这样可以减少攻击面,阻止未经授权的 SSRF 尝试。
确保正确的安全配置
确保正确的安全配置需要遵循安全服务器和应用程序配置的最佳实践。以下是一些确保最佳实践的方法:
- 更新和打补丁:更新和打补丁对于降低与已知漏洞相关的安全风险至关重要。定期更新有助于弥补这些安全漏洞,降低未经授权访问、数据泄露和其他威胁的可能性。
- 删除默认账户:如果不删除,默认账户可能成为攻击者的潜在入口。威胁者通常会利用默认凭据(通常为公众所知)来获得未经授权的访问。删除默认账户可消除可预测的进入点,从而降低风险。
参考资料
案例研究
Azure API 管理 SSRF 漏洞
Ocra Security 的研究发现,有可能访问微软产品之一(Azure)的内部网络资源,从而可能危及该云服务的安全性。该漏洞于 2022 年 11 月 12 日报告。
研究人员发现,该漏洞可能允许攻击者获取有关 Azure 线缆端点(Azure 服务用于通过 WAAgent 进行通信的内部静态 IP 地址)的信息,如已安装的扩展、证书及其相应的私钥。
APIM 工程团队已于 2022 年 11 月 16 日完成部署修复程序,以充分阻止对虚拟机上本地端口/资源的访问。
Parler API 攻击
Parler 是一个社交媒体平台,其 API 暴露给公众,允许攻击者访问和下载大量用户数据、帖子和媒体文件。该事件暴露了 Parler API 安全性的重大缺陷,尤其是在验证过程(Broken Authentication)和数据访问控制方面。点击此处了解有关此次攻击的更多信息。
小结
Azure API 管理中的 SSRF 漏洞和 Parler API 攻击的案例研究强调了 API 安全的极端重要性。这些事件的主要启示包括:
- 需要进行全面的安全评估。
- API 开发中严格的输入验证。
- 监控和识别异常或未授权 API 请求的重要性。
开发人员必须不断了解潜在漏洞,同时投资于强大的访问控制、数据过滤和安全配置实践。API 安全并非一朝一夕之功,需要持续致力于保护应用程序和用户数据的安全。
评论留言