API安全为何与众不同(及其重要性)
加入Detectify两个月后,我意识到:API安全与Web应用安全完全是两码事。说实话?我认为很多团队还没有意识到这一点。
API无处不在(但你可能不知道它们在哪里)
让我们看看现代应用程序。你的移动应用?API。关键SaaS集成?API。复杂的结账流程?可能涉及五个或更多相互通信的API调用。从根本上说,现代应用程序只是API与其他API通信,并在顶层叠加了花哨的UI。
但让我感到意外的是:许多公司甚至没有完整的API清单。你试图保护一个连边界都看不到的防线。我见过:
- 影子API:没人记得部署的旧端点
- 僵尸API:从未关闭的测试/预发布端点
- 合作伙伴API:扩展你攻击面的第三方集成
你看不到的东西,怎么保护?
攻击向量完全不同
当我们讨论Web漏洞时,通常处理的是XSS、CSRF、点击劫持——这些会影响用户看到的内容或诱骗他们点击不该点击的东西。API漏洞则是完全不同的野兽。我们谈论的是身份验证损坏、API暴露过多数据、弱速率限制、注入攻击。
这些攻击完全绕过了UI。攻击者不需要诱骗用户点击恶意内容。他们只需要理解你的API契约并找到弱点。仅此而已。可怕的部分?他们可以自动化所有这些操作。
身份验证…嗯…很复杂
Web应用通常使用基于会话的cookie身份验证。这相当标准,大多数框架都能很好地处理,并且有众所周知的模式可循。API呢?这里就变得混乱了。OAuth、JWT、API密钥、双向TLS、自定义承载令牌…有太多不同的方法,每种方法都有自己的漏洞模式。我深入研究了OWASP API安全Top 10,说实话,身份验证问题很严重。损坏的对象级授权、损坏的函数级授权…这些东西有可怕的长名称,但它们无处不在。尽管每个人都知道它们,但它们仍然经常在生产环境中出现。
为什么这很重要?
API攻击以惊人的速度增长,原因如下:
- 自动化容易:API返回结构化数据,比HTML更容易解析,适合自动化。这对开发人员很好,但对攻击者来说更完美
- 弱速率限制:由于API需要处理高流量,速率限制通常较弱
- 文档即蓝图:API文档对开发人员很好,但也作为完美的攻击蓝图,向对手展示了确切的攻击位置
这正是我们在Detectify不断增强API扫描能力的原因,因为理解这些盲点是修复它们的第一步。
你的团队如何处理这个问题?
我们很想听听其他团队是如何解决这个复杂问题的:
- 你如何维护所有端点的完整、最新清单,包括"僵尸"端点?
- 当你有数百个不同的端点和身份验证方法时,你的大规模授权测试策略是什么?
- 你如何进行API版本控制和弃用,而不会在旧版本中意外留下关键安全漏洞?
- 哪些API安全挑战让你夜不能寐?
常见问题解答
问:Web应用安全和API安全的主要区别是什么?
答:Web应用安全通常关注面向用户的漏洞,如XSS,而API安全关注的是身份验证损坏和弱访问控制等缺陷,攻击者可以通过直接与API端点交互来利用这些缺陷,绕过UI。
问:什么是影子和僵尸API?
答:影子API是被遗忘但仍部署的旧端点,而僵尸API是测试或预发布端点,从未关闭,两者都在组织不知情的情况下扩展了攻击面。
问:为什么API攻击容易自动化?
答:API攻击容易自动化,因为API返回结构化数据(如JSON或XML),脚本或机器人解析和操作这些数据比解析和操作更复杂多变的HTML页面结构要容易得多。