API面临的安全威胁,以及相关软件开发、运营和保护解决方案。

互联网商业创新和传统企业数字化转型都离不开API经济或API战略,可以说,API就是传统行业价值链全面数字化的关键环节,API连接的已经不仅仅是系统和数据,还有企业内部职能部门、客户和合作伙伴,甚至整个商业生态(行业和市场)。但是API面临的安全威胁,却很容易被决策者忽视或轻视。本文介绍了API面临的安全威胁,以及相关软件开发、运营和保护解决方案。

API为软件和开发社区带来许多便利和好处,例如文档完备、可公开获取、标准化、无处不在、高效且易于使用等。现在,攻击者正利用API来实施自动化的“高效攻击”,从Web应用程序到云计算服务都是目标。例如,我们知道开发人员可以使用API将诸如Web注册表单之类的资源连接到许多不同的后端系统。但是,包括后端更新等任务的灵活性也为自动攻击提供了机会。

API的安全难题或者说悖论在于,尽管大多数安全从业者会建议隐藏资源减少暴露面和攻击面,但业务上成功部署的API却倾向使资源更加开放和可用。API的安全困局实际上也是现代IT面临的一个共性问题。对于安全团队而言,这意味着制定平衡的、良好的API风险缓解策略尤为重要。

图示:API面临的安全威胁

OWASP清单:十大API安全风险

除了专注于通用软件应用程序的安全风险外,OWASP还为API开发人员提供了有用的指导,以降低其实施中的安全风险。鉴于OWASP组织在软件社区中的突出地位,我们在这里有必要回顾一下2019年OWASP 10大API安全风险(内容取自OWASP网站):

01 损坏的对象级别授权

API倾向于暴露那些处理对象识别的端点,造成了广泛的攻击面访问控制问题。在每个能够访问用户输入数据的功能中,都应考虑对象级别授权检查。

02 损坏的用户身份验证

身份验证机制通常实施不正确,从而使攻击者可以破坏身份验证令牌或利用实施缺陷来临时或永久地假冒其他用户的身份。损害系统识别客户端/用户的能力会整体损害API安全性。

03 数据泄露过多

开发人员倾向于公开所有对象属性而不考虑其个体敏感性,依靠客户端执行数据过滤并显示。

04 缺乏资源和速率限制

通常,API不会对客户端/用户可以请求的资源大小或数量施加任何限制。这不仅会影响API服务器的性能,从而导致拒绝服务(DoS),而且还为诸如暴力破解之类的身份验证漏洞敞开了大门。

05 功能级别授权已损坏

具有不同层级、分组和角色的复杂访问控制策略,以及管理功能和常规功能之间的模糊不清,往往会导致授权缺陷。通过利用这些问题,攻击者可以访问其他用户的资源和/或管理功能。

06 批量分配

将客户端提供的数据(例如JSON)绑定到数据模型,而没有基于白名单的适当属性过滤,通常会导致批量分配。无论是猜测对象属性、浏览其他API端点、阅读文档或在请求有效负载中提供其他对象属性,都是攻击者可以修改权限之外的对象属性。

07 安全性配置错误

最常见的安全配置错误是不安全的默认配置、不完整或临时配置、开放的云存储、错误配置的HTTP标头,不必要的HTTP方法、跨域资源共享(CORS)以及包含敏感信息的冗长错误消息导致的。

08 注入

当不受信任的数据作为命令或查询的一部分发送到解释器时会发生注入缺陷,例如SQL、NoSQL的命令注入等。攻击者的恶意数据可能会诱使解释器执行非预期的命令,或未经授权访问数据。

09 资产管理不当

与传统的Web应用程序相比,API倾向于公开更多的端点,这使得文档的准确性和及时更新显得尤为重要。健康的主机和最新的API版本能够有效减轻诸如API版本过期以及调试端点暴露之类的安全问题。

10 日志和监控不足

日志和监控不足,再加上事件响应的缺失或无效集成,使攻击者可以进一步攻击系统,长期驻留,并横向移动到更多系统以篡改、提取或破坏数据。大量入侵调查研究表明,检测到入侵的平均时间超过200天,而且入侵检测警告通常来自外部第三方,而不是企业内部安全流程或监控来检测。

API的五个通用安全要求

正如OWASP清单所示,网络安全社区开始发现,面向公众的API往往暴露出大量常见的规范问题。以下是针对API的五项通用网络安全要求,这些要求适用于从传统软件到互联网新应用的各个领域:

能见度

关于API可见性的谚语是:知识就是力量。应用程序开发人员和用户需要知道正在发布哪些API、如何以及何时更新它们、谁在访问它们以及如何访问它们。了解用户的API使用范围是确保API安全的第一步。

访问控制

API访问权限通常是不受严格控制的,这可能导致意外暴露。确保向不同用户授予适当的API访问权限是一项至关重要的安全要求,访问者必须与企业的身份和访问管理(IAM)系统进行协调。

Bot缓解措施

在某些环境中,多达90%的应用程序流量(例如,账户登录或注册、购物车结账)是由自动化Bot生成的。必须了解和管理流量配置文件,包括区分好Bot和坏Bot,防止自动攻击的同时又不会阻止合法流量。有效的补充措施包括实施Bot白名单、黑名单和速率限制策略,以及特定于用例和相应API端点的地理围栏。

防止漏洞利用

API通过消除Web表单或移动应用程序来简化攻击过程,从而使攻击者更容易利用目标漏洞。因此,保护API端点免遭业务逻辑滥用和其他漏洞利用是关键的API安全缓解要求。

数据防泄漏

防止由于编程错误或安全控制漏洞而产生的API暴露或非授权访问,是防止数据泄露或丢失的一项至关重要的安全要求。许多API攻击都是专门为获取对后端服务器和系统提供的关键数据的访问而设计的。

API社区继续致力于就最佳安全方法达成更标准化的协议。例如OAUTH之类的行业组织提出了非常有用的API安全性标准要求。最可能的进展是,软件安全社区将在未来几年中继续完善其对各种API安全要求的理解和见解。因此,我们有望看到这一领域的持续发展。

展开阅读全文

本文系作者在时代Java发表,未经许可,不得转载。

如有侵权,请联系nowjava@qq.com删除。

编辑于

关注时代Java

关注时代Java