五大API安全漏洞及缓解措施
API流量约占全球互联网流量的83%,是数字经济的“关键基础设施”,同时也是最热门的攻击目标之一。
随着云计算、物联网、移动互联网和人工智能技术的快速普及,API安全已经成为当下企业和互联网面临的最严峻的网络安全挑战之一,根据Gartner的研究,2022年,超过九成Web应用程序遭到的攻击来自API,而不是人类用户界面。
根据Wallarm的最新报告,API攻击数量在2022年暴增两倍,API漏洞数量下半年比上半年增长了78%,API漏洞利用时间(漏洞CVE发布到漏洞利用POC发布之间的时间)从二季度的58天骤减到四季度的-3天,2023年API安全将延续这一趋势。
面对日趋恶化的API安全态势,安全团队需要重点排查和缓解以下五个API关键漏洞:
一、弱认证
身份验证用于核实用户或设备是否是其声称的身份,防止没有正确权限的人员或设备访问信息和资源。如果身份验证流程容易被绕过或入侵(例如弱密码或容易猜到的密码),攻击者可以临时甚至永久伪装成合法用户。
措施
强制使用强密码和多因素身份验证来访问敏感资源(如银行帐户),减少帐户接管的可能性。更重要的是确保密码和身份验证流程按预期工作。这需要广泛的测试,特别是会话cookie的管理,因为会话cookie很容易引入可利用漏洞。会话cookie应该是完全随机且不可预测的,并在每次成功登录或更改访问级别后刷新。任何未经正确身份验证访问资源的尝试都应收到“401未经授权”响应状态代码。限制登录尝试失败的次数,超出后帐户将被锁定。可使用API密钥来识别用户,但不进行身份验证或授权,因为密钥太容易暴露和滥用。
二、错误的对象级授权
API通常公开用于访问资源的对象。当这些端点上没有正确实施访问控制时,攻击者可以查看或操作他们不应该访问的资源。此漏洞影响所有类型的API架构,包括SOAP、REST和GraphQL。
例如,攻击者更改请求的用户ID,以查看是否返回有关其他用户的信息,这可能导致未经授权访问数据。值得注意的是,2019年Uber的API中发现了此漏洞,该API使司机只需更改用户ID即可访问其他司机的数据。如果数据修改函数也缺乏正确实施的授权检查,攻击者还可能更改或删除数据,甚至完全接管另一个用户的帐户。
措施
对象标识符应该是随机且不可预测的,而不是可以轻松猜测的可预测的顺序值。服务器端检查还应验证以下内容:
用户有权访问请求的对象。
用户拥有对对象执行特定操作所需的权限。
三、注入漏洞
当API收到用户提交的数据但在处理请求之前未对其进行分析和验证时,攻击者可以发送恶意数据或命令来触发注入攻击。数据库查询和操作系统命令都可以通过XML、JSON、跨站点脚本(XSS)、SQL和NoSQL注入来访问数据或未经授权执行恶意命令。
措施
与其创建自己的函数来验证和清理传入数据,不如调用专业白名单库来确保数据是所需的类型和长度,对每个传入请求运行这些检查,并删除意外的字符、参数以及已知的注入命令。
四、过多的数据暴露
数据暴露是API的常见漏洞,即API响应请求时返回的数据远远多于完成请求所需的数据。这通常是因为开发人员编写从表中返回整行数据的代码比仅返回所需特定字段更简单。例如,消息传递应用程序上的个人资料页面可能仅仅会显示某人的姓名和年龄,但API请求往往会返回存储的有关该用户的所有信息,而不仅仅是根据其出生日期计算的该用户的姓名和年龄。
尽管应用程序可能会过滤响应并仅显示姓名和年龄,但攻击者很容易读取和收集请求中返回的其他详细信息,包括个人身份信息,例如出生日期、电子邮件地址和位置。这种敏感数据的公开可能会违反数据访问策略规则和相关数据安全法规。
措施
API响应仅返回满足请求所需的数据,具体来说就是API进行的数据库查询应仅获取相关记录和字段。API文档应说明满足请求所需的数据,确保数据库查询与请求的字段和记录匹配。请记住,客户端应用只能筛选用户可见的数据,而不能筛选它接收的数据。
五、安全配置错误
API运行在复杂的基础架构上,资源配置会根据需求自动扩展和缩减。如果未在每一层正确配置安全控制,则敏感数据和系统可能会面临风险。常见的错误配置包括未修补的设备和应用程序、不安全的默认配置、未加密的数据传输以及开放和不安全的云存储和服务。
措施
API应仅公开HTTPS端点。但是,由于HTTPS端点对互联网开放,因此正确设置速率限制,控制请求速率和请求的资源数量也很重要,否则将受到DoS和暴力攻击。禁用未使用的HTTP方法(如TRACE),并添加相应的HTTP响应安全标头,如X-Content-Type-Options:nosniff,以防止XSS和X-Frame-Options:deny以防止点击劫持尝试。此外,API请求生成的任何错误消息都应仅包含最少的信息,以确保不会泄露有关系统的敏感数据,例如关于错误的详细技术信息。
如何提高API整体安全性
要想避免API成为“攻击门户”,关键是身份与访问管理。这意味着启动身份验证和授权检查,不是一次性,而是通过零信任策略持续进行。
同样重要的是基于威胁建模进行API设计,在API开发阶段就整合安全控制,例如强身份控制和访问管理功能,以缓解已知风险。此外还需要测试这些控件是否能在DevOps工作流中发挥作用。
攻击者在利用API漏洞实施网络攻击之前,可能会花费数天时间进行侦察。企业应部署全面的API流量日志记录和监控,以便在造成损害之前发现并阻止攻击。建议使用最新的API清单,并定期查看安全控制和配置是否正确有效。
对于高度分布式的API基础设施来说,传统的基于边界的安全方法不足以阻止攻击。容器、微服务、云存储和持续集成/持续交付管道的定期安全审计对于防止未使用或遗忘的接入点至关重要。
最后,也是最重要的:API开发应该“安全挂帅”,强调“安全优先”而不是速度优先,这是从根本上减少甚至消除API安全漏洞的关键。
END
相关阅读