API安全的盲点:GraphQL

如今,在API现代化的大趋势下,越来越多的企业从REST架构切换到开源数据查询和操作语言GraphQL。这种转变带来很多好处:GraphQL更灵活、可扩展,更易于开发人员使用,但这同时也给攻击者打开了一扇窗户。企业的开发团队需要避免重蹈Kubernetes安全的覆辙——匆忙切换到时髦的,对开发人员友好的技术,同时留下巨大的安全隐患和代价高昂的“安全债务”。

GraphQL的两大漏洞风险

根据MITRE CVE数据库和HackerOne Hacktivity的最新漏洞数据,攻击者正在积极渗透GraphQL及其开发人员,在GraphQL服务器、客户端和其他组件中寻找可用的漏洞利用。企业DevOps和DevSecOps团队需要对此给与足够的重视。

MITRE CVE数据库跟踪的45个GraphQL漏洞(2019年首次发现)数据显示,当前GraphQL的安全漏洞主要是授权绕过漏洞(占总数的54.8%)和拒绝服务漏洞(16.7%)。

在所有跟踪的GraphQL漏洞中:

  • 9.5%的漏洞与信息泄露有关
  • 7.1%与代码执行有关
  • 7.1%与跨站点请求伪造有关
  • 4.8%与注入有关

Hacktivity门户网站收集的研究人员报告的漏洞数据与MITRE CVE的数据基本一致:授权绕过风险更加突出,87%的已知GraphQL漏洞属于这一类。拒绝服务漏洞以7%的份额位居第二。条件竞争漏洞和会话管理漏洞各占2.8%。

值得注意的是,Hacktivity作为漏洞赏金门户,其数据可能会出现一定的偏差,因为授权漏洞对敏感数据的威胁更大,为研究人员带来更丰厚的赏金。此外,测试DoS漏洞也在很大程度上被禁止,因为测试可能会造成真正的伤害,这也会导致对此类漏洞的报告数量偏少。

针对GraphQL面临的主要漏洞威胁,GraphQL开发人员需要实施有效的基于模式的访问控制来限制功能访问,防范授权绕过攻击。此外还应设置动态速率限制以遏制拒绝服务攻击。开发团队需要通过精细分析对上述安全措施提供支持,并维护活动日志以获得更好的可见性,这将进一步确保团队能够在攻击者造成伤害之前阻止未经授权的行为。

GraphQL API攻击侦察为何不可见?

如今,攻击者拥有复杂的自动化方法来侦察GraphQL应用的安全漏洞。攻击者的工具箱中已经有很多现成的工具可以对目标GraphQL API展开被动研究、发起评估应用程序行为的无害查询,以及通过简单的推理来定位GraphQL API。

此类攻击前的侦察活动很难被检测到,因为标准API安全网关不会对传入的GraphQL请求查询进行上下文分析。这是API开发运营团队的一个盲点,会显著增加合规失败的风险。

例如,如果开发人员不小心将访问凭据留在公共存储库中可用的代码中,则有可能被攻击者获取。而发送到应用程序的GraphQL查询(即使无效)也会告诉攻击者GraphQL是否正在使用中。攻击者还可以自动查询可能部署GraphQL的多个端点(例如/graphql、/query、/api、/playground、/console和/graphiql),而服务器响应则会向攻击者确认目标的准确位置。

但是,如果采用了正确的GraphQL安全策略,攻击者所依赖的自动查询将被标记为异常行为。通过标记针对多个端点(其中许多不存在)的无效查询和批量流量的保护措施,开发人员可以在漏洞利用升级之前检测并阻止(或缓解)攻击。

此外,限制应用程序的对象请求和操作数量/速率也是保护GraphQL API端点的有效措施(应在对象级别而不是调用级别完成)。通过部署正确的安全措施,即便攻击者找到GraphQL目标,API团队也能有效阻止攻击。

GraphQL安全优先级亟待提升

对于使用GraphQL的企业来说,了解GraphQL API和应用程序面临的独特威胁,并及早准备和部署相应的安全措施至关重要。

企业还应该意识到,只有在部署GraphQL的早期阶段就提高其安全优先级才能起到事半功倍的效果,只有通过正确的安全策略和流程主动监控流量的异常活动,同时保护访问控制(和其他已知的攻击途径),开发人员才可以安全地,大规模地发挥GraphQL的优势。

前一篇《工业和信息化部行政执法事项清单(2022年版)》公布,15项涉及数据安全
后一篇美国国防部服务器没密码,3TB敏感数据泄露