API 帮助跨多个设备互连多个应用程序或软件系统,定义它们可以发出的调用或请求的种类、调用的方式、应使用的数据格式以及应遵守的约定。API 已经发展成为重要的互连,支持不同应用程序架构之间的通信,促进新服务的更快集成和部署。软件开发程序也依赖 API 来提供服务、平台管理和持续部署。涉及移动设备、云数据系统和微服务设计模式的现代应用程序架构需要使用多个 API 作为网关,以促进不同 Web 应用程序之间的互操作性。
在 API 安全领域,“攻击”和“漏洞”这两个词经常互换使用,许多人并不了解 API 攻击/漏洞的真正含义。API 攻击/漏洞是一种威胁类别,在很大程度上未被行业现有的 API 安全框架和指南解决。为了保持基于 API 的安全和可信度,必须改进应对的思维和工具,以应对公司现在面临的各种 API 威胁——以及 API 威胁形势的快速发展。
什么是 API 滥用?
任何设计和代码都难以避免错误,安全技术也是如此。有时软件的结构,哪怕是根据相应规范设计的,都可能有被滥用技术利用的风险。
OWASP 这样定义软件 “滥用(abuse)”:
创建误用和滥用案例以滥用或利用软件功能中控件的弱点来攻击应用程序。使用应用程序的滥用案例模型,作为识别直接或间接利用滥用场景的具体安全测试的媒介。
简而言之,滥用案例模型在某种程度上是威胁建模。API 对于构建坚固且持续的通信桥梁至关重要,该桥梁使设备能够无缝传递所需信息。然而黑客采用多种方式来利用 API 并破坏目标设备,这种 API 开发是对 API 安全的潜在威胁。如果在 API 设计的威胁建模阶段没有考虑到执行锁定端口,并且没有添加补偿控制,那么这些 API 就有可能被“滥用”。API 滥用是指错误处理 API、获得未经批准的访问和修改关键功能的行为,以便 API 可用于攻击服务器或使服务器超载等敌对过程。它是在机器人、网络钓鱼攻击或手动插入恶意代码的帮助下执行的。
API 滥用很常见,但原因不总是因为 API 本身设计不佳。有时 API 具有可预测的设计结构,这也让攻击者有机会滥用 API。API 滥用包括:
- 出于恶意原因以未经批准的方式使用 API。在这些情况下,API 在技术上按设计使用,但被错误的人或出于错误的原因使用。比如数据抓取。
- 利用应用程序逻辑中的漏洞。这些滥用是特定于特定业务的,在许多情况下,并没有通过 OWASP 框架来解决。
API 滥用的严重影响
企业往往会因为他们的 API 通过了漏洞评估而觉得企业的 API 是安全且“完美”的。但最大的 API 保护缺口是对向合作伙伴开放的 API 的保护,这些 API 很容易被滥用。即使 API 编写得非常完美且没有漏洞,也可能以意想不到的方式被滥用,从而暴露共享它们的组织的核心业务功能和数据。
最典型的例子就是 2018 年剑桥分析公司 (CA) 丑闻。在该事件中,CA 利用 Facebook 的开放 API 收集了至少 8700 万用户的大量数据。这是通过使用 Facebook 测验应用程序来实现的,该应用程序利用了一个允许第三方应用程序收集有关测验者的信息的许可设置,以及他们所有朋友的兴趣、位置数据等。这些信息随后被出售给各种政治活动。其全部影响可能永远不得而知,但公认的影响对2016年美国总统大选和英国“脱欧”公投产生了重大影响。该事件还导致 Facebook 的市值立即遭受超过 1000 亿美元的打击,罚款超过数十亿美元,并在数年后一直成为政府监管机构的目标。
所有这些都不涉及利用 Facebook API 基础设施中的基础设施漏洞。Facebook 暴露了一个最终被滥用的核心业务 API,而 CA 只是简单地以创建它时未打算或未预料到的方式使用了 Facebook 的公共 API。
API 滥用实例及预防建议
以下是一些常见的 API 滥用案例,以及如何预防的建议。
失效的对象级授权 (BOLA)
BOLA 指对对象访问请求的验证不充分,允许攻击者通过重用访问令牌来执行未经授权的操作。根据 OWASP 的 API 安全项目,BOLA 是当今最严重且最常见的 API 攻击,占所有 API 攻击的40%。
预防 BOLA 的建议:
- 实施依赖于用户策略的授权机制,验证登录用户是否有权执行请求的操作。
- 使用随机和不可预测的值作为记录 ID 的 GUID。
- 编写评估授权的测试。
分布式拒绝服务攻击 (DDoS)
DDoS 是一种常见的攻击类型,恶意攻击者通过故意使用来自多个设备和 IP 地址的大量机器人流量使 API 过载。对于企业而言,关键业务服务因此面临风险,例如登录服务、会话管理和其他为用户提供应用程序正常运行时间和可用性的服务。
执行 DDoS 活动的攻击者通常使用不对称技术,通过这种技术发送少量数据来生成 API 调用,这通常会导致服务器严重超载,因为他们必须使用大量数据来响应此类 API 调用。此类攻击会严重占用系统资源并大大增加系统所有用户的服务器响应时间。
企业可以采取以下措施来阻止 DDoS 攻击:
- 流量分析
- 速率限制(例如,每个客户端/资源的请求数、请求负载大小)。
- 自动缩放资源(确保为阈值报告打开警报)。
安全配置错误
应用程序中安全设置的不当配置可能会导致通过帐户接管(ATO) 的方式被利用和攻击。
防止这种情况的几种方法是:
- 盘点和管理所有 API,特别留意影子 API 和僵尸 API。
- 扩大数据治理范围,从应用程序扩展到所涉及的 API 的数据。
数据泄露
这种威胁通常被认为是通过开放的 API 意外泄露机密信息造成的。Venmo 是 PayPal 旗下的移动支付服务。在 Venmo 中,交易在设计上和默认情况下都是公开的。这种开放策略在 2019 年导致了严重的数据抓取问题,2 亿 Venmo 用户的私人信息被抓取。此外,还发现了美国总统拜登的 Venmo 账户。 无论是有意还是无意的数据泄露,在被大量滥用时都可能引发国家安全问题。
缓解或消除数据泄露风险的两种方法是:
- 在 API 而非客户端级别执行信息过滤
- 避免在功能不需要时发送敏感信息
API 注入
API 注入指恶意代码连同 API 请求被注入。注入的命令执行后,这种恶意代码(不仅仅是 SQLi)可以从服务器删除用户的整个站点。恶意攻击者通常以此来获取对私人数据的访问权限。
以下是一些避免注入的方法:
- 参数化查询
- 保证安全的上下文,可在时间线上查看所有 API 活动。
- 用授权取代过时和不安全的认证方法。
- 在服务器端添加输入验证机制
- 避免执行特殊字符
- 全面的日志记录、监控和警报