肖文棣,OWASP中国广东分会负责人、网安加社区特聘专家,现任某外企安全架构师,负责应用安全设计、管理和评审等工作。
上期已经就OWASP API Top 10 2023版本的前五大风险进行了分析(详情请点击:百家讲坛 | 肖文棣:API安全与实践(上)),本文将继续后面的五大风险进行分析。
API 6 服务器端请求伪造
描述
利用SSRF漏洞,攻击者需要找到一个接收URI作为参数的API端点,然后访问提供的URI。大多数常见编程语言的内置函数和库都存在URL解析不一致的问题。
只要API在未验证用户提供的URL的情况下获取远程资源,就会出现服务器端请求伪造(SSRF)的漏洞。SSRF允许攻击者强制应用程序将恶意请求发送到意想不到的目的地,越过防火墙或VPN的保护。
现代的应用程序开发使SSRF更加普遍和危险。
开发人员根据用户输入访问外部资源,如Webhook、从URL获取文件、自定义SSO和URL预览等。
云提供商、Kubernetes和Docker等现代技术在众所周知的路径上通过HTTP公开管理和控制通道。这些通道很容易成为SSRF攻击的目标。
示例场景
社交网络允许用户上传个人照片。用户可以选择从他们的机器上传图像文件,或者提供图像的URL。选择第二个,将触发以下API调用:
攻击者可以使用API端点发送恶意URL并在内部网络中启动端口扫描。
攻击者可以根据响应时间,判断端口是否打开。
建议
-
隔离网络中的资源获取机制:通常这些功能旨在检索远程资源而不是内部资源。
-
尽可能使用白名单。
-
对于远程源,用户应从指定的供应商(例如 Google Drive、百度云等)下载资源。
-
URL方案和端口要确定。
-
给定可接受的媒体类型。
-
禁用HTTP重定向。
-
使用经过良好测试和维护的URL解析器,以避免因URL解析不一致而导致的问题。
-
验证所有客户提供的输入数据。
-
不要向客户端发送原始响应。
测试用例
1. 测试应用程序是否容易受到服务器端请求伪造(SSRF)攻击。
2. 测试应用程序是否存在恶意文件上传漏洞。
3. 测试应用程序是否容易受到恶意远程代码执行的攻击。
开源解决方案
Blacklist3r是一种用于检测潜在的SSRF漏洞的工具,它可以扫描Web应用程序和API以查找潜在的SSRF攻击点。
Barideki是一种基于Python的SSRF漏洞扫描器,它可以扫描Web应用程序和API以查找潜在的SSRF漏洞。
API 7 安全性错误配置
描述
攻击者通常会尝试寻找未修补的漏洞、常见端点或未受保护的文件和目录,以获得未经授权的访问。
在以下情况下,API可能容易受到攻击:
-
API堆栈的任何部分都缺少安全强化措施,或者云服务的权限配置不当。
-
缺少最新的安全补丁,或者系统已过时。
-
启用了不必要的功能。
-
HTTP服务器链中的服务器处理传入请求的方式存在差异。
-
传输层安全性(TLS)缺失。
-
不向客户端发送安全或缓存控制指令。
-
跨域资源共享(CORS)策略缺失或设置不当。
-
错误消息包括堆栈跟踪,或公开其他敏感信息。
示例场景
API后端服务器维护由流行的第三方开源日志实用程序编写的访问日志,支持占位符扩展和JNDI(Java命名和目录接口)查找,默认情况下均启用。对于每个请求,都会使用以下模式将一个新条目写入日志文件:<method> <api_version>/<path> - <status_code>.
攻击者发出以下API请求,该请求被写入访问日志文件:
由于日志实用程序的不安全默认配置和宽松的网络出站策略,为了将相应的条目写入访问日志,同时扩展请求标头中的值,日志实用程序将从攻击者的对象“X-Api-Version”获取数据并执行Malicious.class对象远程控制服务器。
建议
-
可重复的强化过程可快速轻松地部署的环境。
-
审查和更新整个API堆栈的配置的任务。审查应包括:编排文件、API组件和云服务(例如S3存储桶权限)。
-
持续评估配置和设置在所有环境中的有效性的自动化流程。
-
确保从客户端到API服务器以及任何下游/上游组件的所有API通信都通过加密通信通道(TLS)进行,无论它是内部API还是面向公众的API。
-
具体说明每个API可以访问哪些HTTP方法:应禁用所有其他HTTP方法(例如HEAD)。
-
对预期从基于浏览器的客户端(例如Web应用程序前端)访问的API实施适当的跨域资源共享(CORS)策略。
-
确保HTTP服务器链中的所有服务器(例如负载平衡器、反向和正向代理以及后端服务器)以统一方式处理传入请求以避免不同步问题。
-
在适用的情况下,定义和实施所有API响应有效负载模式,包括错误响应,以防止异常跟踪和其他有价值的信息返回给攻击者。
测试用例
1. 测试应用程序是否易受常见错误配置的影响。
2. 测试应用程序是否存在已知漏洞。
3. 测试应用程序是否易受不安全默认设置的影响。
开源解决方案
Configuration Audit,对应用程序的配置文件进行审核,以检查其中的潜在安全漏洞,并建议如何纠正它们。其中包括可以使用的命令行工具和脚本,如OWASP Dependency-Check和PMD等。
安全配置管理平台,使用此平台可以管理应用程序的配置信息,并确保其安全。例如,使用HashiCorp的 Vault来管理安全凭证或使用Ansible Tower管理应用程序的配置文件。
API 8 缺乏对自动化威胁的保护
描述
攻击者利用了解到的API的业务模型,来查找敏感业务流以及自动访问这些业务流,从而损害业务。
自动化威胁变得更有利可图、更智能且更难防范,API通常是攻击者的目标。
随着时间的推移,传统的保护措施(例如速率限制和验证码)变得不那么有效。例如,操作僵尸网络的攻击者可以绕过速率限制,因为攻击者可以在几秒钟内从全球数千个位置或者IP地址轻松访问API。
易受攻击的API本身不一定有实现错误,只是简单地公开一个业务流程,例如买票或发表评论,而没有考虑如果以自动化方式过度使用这些功能会对业务造成怎样的损害。
示例场景
拼车应用程序提供推荐计划,用户可以邀请他们的朋友,并为每个加入该应用程序的朋友获得积分。这笔信用额度以后可以用作现金来预订服务。
攻击者通过编写脚本来自动执行注册过程来利用此流程,每个新用户都会向攻击者的钱包中添加信用。
攻击者以后可以享受免费乘车或出售信用过多的帐户以换取现金。
这就是所谓薅羊毛。
建议
缓解计划应分两层进行:
-
业务上:确定如果过度使用可能会损害业务的业务流程。
-
技术上:选择正确的保护机制来降低业务风险。
-
一些保护机制更简单,而另一些则更难实施。以下方法用于减缓自动威胁:
-
设备指纹识别:拒绝向意外客户端设备(例如无头浏览器)提供服务往往会使攻击者使用更复杂的解决方案,这会增加攻击者的成本。
-
人体检测:使用验证码或更高级的生物识别解决方案。
-
机器人模式检测:分析用户流以检测机器人模式(例如,用户在不到一秒内访问“添加到购物车”和“完成购买”功能)。
-
考虑阻止Tor出口节点和知名代理的IP地址。
-
保护和限制对机器直接使用的API的访问(例如开发人员和B2B API)。
测试用例
1. 测试应用程序是否容易受到自动化攻击。
2. 测试应用程序是否可以检测和响应恶意流量。
3. 测试应用程序是否可以保护自己免受恶意脚本的侵害。
开源解决方案
ModSecurity是一个开源的Web应用程序防火墙(WAF),可用于保护API免受自动化威胁的攻击。它可以检测并防止暴力破解、DDoS、机器人扫描和爬虫攻击等常见威胁。ModSecurity具有灵活的规则集,可以根据API的需求进行定制。
Fail2ban是一个开源的入侵防范系统(IPS),可用于保护API免受暴力破解和DDoS攻击等自动化威胁。它可以监视API的日志,并根据配置的规则集自动封锁攻击者的IP地址。
API 9 资产管理不当
描述
攻击者通常通过API的旧版本或未打补丁且使用较弱安全要求的端点进行未经授权的访问。攻击者可能会通过管理不善的第三方接口访问敏感数据。
API经常没有清晰的文档,包括:
1. API目的不明确,以下问题没有明确的答案:
-
API在哪个环境中运行(例如生产、暂存、测试、开发)?
-
谁应该拥有API的网络访问权限(例如公共、内部、合作伙伴)?
-
哪个API版本正在运行?
2. 没有文档或现有文档没有更新。
3. 每个API版本都没有下线计划。
4. 主机的资产丢失或过时。
示例场景
社交网络允许独立应用程序的开发人员与其集成。作为此过程的一部分,需要最终用户同意,因此社交网络可以与独立应用程序共享用户的个人信息。
社交网络和独立应用程序之间的数据流没有足够的限制或监控,允许独立应用程序不仅可以访问用户信息,还可以访问所有朋友的私人信息。
一家咨询公司构建了一个恶意应用程序并设法获得 270,000名用户的同意。由于该漏洞,该咨询公司设法访问了50,000,000名用户的私人信息。后来,咨询公司出于恶意目的出售这些信息。
建议
-
全部API资产记录在案,重点关注API环境(例如生产、暂存、测试、开发)、谁应该拥有主机的网络访问权限(例如公共、内部、合作伙伴)和 API版本。
-
资产综合服务并记录API的重要信息,例如API在系统中的作用、交换的数据(数据流)及其敏感性。
-
记录API的所有方面,例如身份认证、错误、重定向、速率限制、跨源资源共享(CORS)策略和端点,包括调用参数、请求和响应。
-
采用开放标准Open API自动生成文档。在CI/CD 管道中包含文档构建。
-
使API文档仅供获得API使用授权的人员使用。
-
对API的所有版本都要妥善保护,而不仅仅是当前生产版本。
-
避免将生产数据用于非生产API部署。如果不可避免的,这些端点应该得到与生产端点相同的安全保护。
-
当较新版本的API包含安全改进时,执行风险分析以告知旧版本所需的缓解措施。例如,是否可以在不破坏API兼容性的情况下向后移植改进,或者是否需要快速移除旧版本并强制所有客户端迁移到最新版本。
测试用例
1. 测试应用程序是否存在资产泄漏漏洞。
2. 测试应用程序是否容易受到未经授权访问资产数据的影响。
3. 测试应用程序是否容易受到资产数据操纵的影响。
开源解决方案
SwaggerHub是一个API设计和开发平台,可以帮助开发人员更好地管理他们的API资产。SwaggerHub包括一个集成的版本控制系统,允许用户跟踪API版本,并对其进行更改。
Kong是一个基于OpenResty的云原生API网关和服务网格。Kong提供了丰富的功能,如路由,负载平衡,插件等,以帮助开发人员更好地管理API资产。
API 10 API的不安全使用
描述
开发人员倾向于信任但不验证与外部或第三方API交互的端点。攻击者成功利用这些API中的安全漏洞可能会访问他们不应该访问的数据。
在以下情况下,API可能容易受到攻击:
-
通过未加密的通道与其他API交互。
-
在处理数据或将其传递给下游组件之前,没有正确验证和净化从其他API收集的数据。
-
盲目重定向。
-
不限制可用于处理第三方服务响应的资源数量。
-
不为与第三方服务的交互设置超时。
示例场景
API与第三方服务提供商集成,以安全地存储敏感的用户医疗信息。使用如下所示的HTTP请求通过安全连接发送数据:
攻击者找到了一种破坏第三方API的方法,攻击者开始以308永久重定向响应前一个请求。
由于API盲目重定向,API会重复包含用户敏感数据的完全相同的请求,但这次返回的对象是攻击者的服务器,从而导致敏感数据泄漏。
建议
-
在评估服务提供商时,评估他们的API安全状况。
-
确保所有API交互都通过安全通道(TLS)进行。
-
在使用之前始终验证并正确处理从集成API接收的数据。
-
维护一个白名单,只允许集成的API可能重定向到白名单的地址,不要盲目重定向。
测试用例
1. 测试应用是否存在通过API注入攻击的漏洞。
2. 测试应用程序是否容易通过API绕过身份验证。
3. 测试应用是否存在API会话劫持漏洞。
开源解决方案
OpenAPI Security是一个基于OpenAPI规范的API安全框架,可以帮助用户进行API设计和开发,以减少API的安全风险。OpenAPI Security提供了许多安全检查和控制,如身份认证、授权、输入验证和输出验证等。
API Fortress是一个基于云的解决方案,提供API测试和监控功能。API Fortress可以帮助用户进行身份验证和授权,同时对API请求进行输入验证和输出验证,防止恶意攻击。
总结
OWASP API Security Top 10 2023版本是最全面和最新的API最关键安全风险列表。该列表反映了不断变化的威胁形势,包括近年来出现的新风险。大家可以结合该列表去检查一下自己的API,看看是否有影响。
另外本文两篇都提供了开源解决方案,所以API安全首先是意识上的,然后才是对应的解决方案。希望大家共同努力,把API安全做好。
精彩回顾
原文始发于微信公众号(KK安全说):百家讲坛 | 肖文棣:API安全与实践(下)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论