【转】OWASP API安全 TOP10

伴随企业数字化程度的加深,API成为软件世界数据交互的“通用语言”,其数量迎来爆发式增长。同时,API的广泛应用也为运维可见性、安全性提出了新的挑战。针对API这种“易攻难守”的新兴资产的安全治理显得愈发重要。

OWASP为强调API安全的重要性,在2019年首次提出了API Security Top 10。后随着安全产业实践加深,于2023年发布了API Security Top 10(候选版)的内容更新。该更新内容进一步强调了API攻击场景与Web攻击的差异化,突出API权限管理、资产管理、业务风控及供应链问题。

API通常包含如下组成要素:通信协议、域名、版本号、路径、请求方式、请求参数、响应参数、接口文档等。

API它是程序开发的基础,特别是系统API函数,通过系统自带的API函数可以快速实现程序开发的功能,现在高级语言也都是基于语言特性进行封装各种便于程序开发的API接口,这样就减少了开发者对具体功能的实现,只要直接调用API函数就可以快速实现功能了。但是API的虽然方便了开发,但是也同样存在和暴露出很多安全的风险问题。API的安全风险有被直接HOOK风险、安全漏洞风险、安全攻击风险。

API安全它是由多种安全规则相互交叉,它主要表现是以下三部分:

信息安全: 聚焦于信息保护,这种保护包括信息的创建、存储、传输、落还、以及最终销毁的生命周期。网络安全: 解决服务两方面问题,如何保护通过网络传播的数据流以及如何防止未授权的网络。应用安全: 确保设计和部署的应用可以对抗攻击、防止误用。

API安全风险
API 在开发、部署过程中,不可避免会产生各种安全漏洞,这些漏洞通常存在于通信协议、请求方式、请求参数、响应参数、访问行为等环节,面临外部、内部威胁。例如,外部攻击者利用API未授权访问非法获取数据、API参数校验不严谨而被非法篡改。应对外部威胁的同时,API也面临着内部威胁。

API 接口在设计之初未对 API 接口访问频率做限制,使攻击者在短时间内可以进行访问大量 API 接口,这就产生了高频访问行为,这在很短的时间就可以完成如营销作弊、恶意注册等攻击,甚至可能带来 CC 攻击。
 

主要变化如下图所示:

1. 针对身份认证漏洞,越来越多的服务提供商开始将身份认证范围从对人的认证变为对“人+机”的认证。这意味着除了对用户身份进行验证外,还需结合设备、环境等其他因素来进行身份认证。这种方式相比传统的单一身份认证方式更安全可靠,可以有效避免伪造、冒用等攻击手段。

2. 增加了“服务端请求伪造漏洞”(SSRF)内容,说明这是一种非常危险的安全漏洞,攻击者可以利用该漏洞窃取敏感信息、发起内网攻击、进行DoS攻击等,同时表明了在服务端请求处理过程中,输入验证与过滤的重要性。加强对SSRF漏洞的防范,可以有效提高应用程序的安全性。

3. 随着人工智能、机器学习等技术的发展,自动化攻击手段也变得越来越普遍和复杂。自动化攻击可以通过机器学习算法、大数据分析、自动化工具等方式,快速、准确地扫描目标系统漏洞或发起攻击,对系统造成严重威胁。增加了“缺少对自动化威胁的防护”内容,说明在实际应用中,很多企业缺乏对自动化攻击的防护措施,存在一定的安全风险。而不安全的第三方API可能会导致系统遭受攻击,企业需要加强安全意识,选择可信赖的服务提供商,进行充分的安全测试和验证,限制API的权限并监控API的使用情况,可以保障系统的安全性。

这些趋势变化说明了在信息化和数字化快速发展的时代,传统的身份验证方式已经无法满足日益增长的安全需求,需要采用更多元化、智能化的身份认证方式来提高系统、服务、数据的安全性。

以下是本次API Security Top 10 2023版的详细解析:

1. 对象级别授权失效(Broken Object Level Authorization):无变化
对象级授权是一种访问控制机制,其作用是校验用户是否能够访问特定的对象。这种授权通常在代码层面实现,以确保用户只能访问他们有权利访问的对象。但是,如果API存在“失效的对象级授权”漏洞,攻击者就可以通过改变请求中的对象ID来绕过授权限制,从而获取敏感数据或者完全掌控账户。这个漏洞在基于API的应用程序中非常普遍,因为服务器通常无法跟踪完整的用户状态,而是依赖于请求参数中的对象ID来决定哪些对象可以被用户访问。

场景案例:

在线文档存储服务允许用户上传、查看、编辑和删除他们的文件。当用户想要删除一个文件时,系统会将对应文件的ID传递给API,以便系统确定要删除哪个文件。

因为在线文档存储服务在删除文件时只依赖文件的ID,没有进行其他的权限检查,所以用户有可能会能够删除其他用户上传的文档。也就是说,如果攻击者知道其他用户文档的ID,那么他们就可以利用这个漏洞来删除其他用户的文件。

2. 身份认证失效(Broken Authentication):更新,从对用户本身的认证,将范围扩展到“人机”范围。

身份验证机制是保护API安全的重要措施,它可以防止未经授权的用户访问系统。但是,有些实现方式可能不够严格或者考虑不完全,使得攻击者有可能破坏或伪造身份验证令牌,或者利用漏洞来盗用其他用户的身份。

场景案例:

用户要更新他们账户关联的电子邮件地址,那么客户端需要发送一个特殊的API请求:

由于API没有要求用户提供当前的密码来确认身份,攻击者就有可能通过窃取身份验证令牌来伪装成其他用户。他们也可能会在更新受害者账户的电子邮件地址时实施攻击,从而接管受害者的账户。

3. 对象属性级别授权失效(Broken Object Property Level Authorization):更新,将之前“过度的数据暴露(Excessive Data Exposure)”和“批量分配(Mass Assignment)”的内容进行了合并。

对象属性级别授权失效是指在访问控制系统中,授权规则没有按照预期的要求来实现,这可能会导致安全漏洞。通常,在访问控制系统中,对象属性级别授权非常重要,它可以确保用户只能够访问他们具有权限的资源和信息。如果这个授权失效了,攻击者就有可能访问到他们没有权限访问的信息或资源,从而对系统构成威胁。

场景案例:

在基于短视频的社交网络中,有一些限制性内容需要进行过滤和审查。即使上传的视频被系统拦截了,用户还是可以通过以下API请求来修改视频的描述信息。

这就意味着,如果用户上传不良内容的视频并通过修改描述信息的方式绕过系统审查。

4. 资源消耗无限制(Unrestricted Resource Consumption):更新,涉及到应用层DoS,强调了后果(后端资源耗竭/云平台欠费等)。

API请求需要使用网络、CPU、内存和存储等资源,如果没有对客户端/用户可以请求的资源大小或数量进行限制,就可能会导致API服务器性能下降,最终引起拒绝服务攻击(DoS)。攻击者可以发送大量请求来消耗API服务器的资源,甚至通过暴力破解方式来突破安全措施,从而造成损失。

场景案例:

攻击者会发送一个POST请求到/api/v1/images,上传大图片。API在收到这个请求后,会创建多个缩略图,每个缩略图大小不同。然而,由于上传的图片太大了,API在创建缩略图的过程中用尽了所有可用的内存,导致系统变得无响应。

5. 功能级授权失效(Broken Function Level Authorization):无变化。

攻击者可以利用漏洞来发送一些本不允许他们访问的API请求,这可能会导致一些合法的API请求被暴露给未经授权的匿名用户或普通用户。由于API有着固定的结构和操作方式,攻击者更容易发现其中的缺陷(例如将HTTP方法从GET替换为PUT,或者将URL中的“用户”字符串更改为“管理员”),从而利用这些漏洞来突破系统安全限制。

场景案例:

在某些只允许邀请用户注册的应用程序中,移动应用程序会触发一些API调用,以便用户能够加入。这个响应会返回一个包含邀请详细信息(如用户角色和电子邮件)的JSON文件,攻击者会复制这个请求,并改变HTTP方法和参数。攻击者就利用这个漏洞来冒充管理员身份,并通过发送新的邀请来获取管理员权限。

最后攻击者使用操纵的请求来创建自己的管理员帐户,并获得对系统的完全访问权限。

6. 服务端请求伪造(Server Side Request Forgery):新增。
攻击者利用漏洞或安全控制不严格的应用程序,向目标服务器发送伪造的请求,并从中获取敏感信息或执行未经授权的操作。攻击者可以通过找到需要提供URI(即URL地址)作为参数的API端点来实施这种攻击,然后访问提供的URI。成功地利用此漏洞可能会导致内部服务枚举(例如端口扫描)或信息泄露,并可能绕过防火墙或其他安全机制。在某些情况下,它可能导致DoS或服务器被用作隐藏恶意活动的代理。

场景案例:

在某些社交网络中,用户可以上传个人资料图片。当用户要上传图片时,他们可以选择两种方式:一是从本地计算机上传图片文件,二是提供一个图片的URL链接。如果用户选择了第二种方式,那么会触发以下API调用。

攻击者可以通过发送恶意的URL链接来入侵使用API终结点的内部网络。

攻击者可以通过检查API返回响应的时间来判断系统中某个端口是否打开或关闭。如果端口是打开状态,那么API响应请求会很快回复,反之则会花费更长的时间进行响应。攻击者可以利用这种方式来获取有关目标系统的信息,从而更好地计划他们的攻击策略。

7. 安全配置错误(Security Misconfiguration):无变化。

安全配置错误是最常见的安全问题,这通常是由于不安全的默认配置、不完整的临时配置、开源云存储、错误的HTTP标头配置以及包含敏感信息的详细错误信息所造成的。安全配置错误不仅会暴露敏感用户数据,还包括系统细节,而这些细节可能导致服务器完全被控制。

这些错误配置可能存在于API资源、传输协议或应用程序基础架构中。包括如:未强制执行HTTPS、不必要的HTTP方法、错误配置的HTTP标头、未净化处理的输入导致数据受损、数据泄露、详细冗长的错误消息、临时配置、跨域资源共享、缺少安全补丁等。

场景案例:

API后端服务器使用了一些流行的第三方编写的访问日志来记录用户请求和响应信息。这些记录工具支持占位符扩展和JNDI查找,每个请求都会产生一个新的日志条目,记录下请求的详细信息,例如请求时间、请求类型、请求者IP地址等。这些日志数据可以帮助开发人员进行调试和性能优化,并且也可以用于安全审计和故障排除。

攻击者发出以下API请求,该请求将写入访问权限日志文件:

由于日志记录实用程序的默认配置不够安全,并且网络出站策略太宽松,攻击者可以将恶意代码写入API请求中,然后通过访问日志记录工具来执行恶意代码。

8. 缺少对自动化威胁的防护(Lack Of Protection From Automated Threats):新增,原版“注入(Injection)”被删除。

缺少对自动化威胁的防护意味着在网络安全系统中缺乏有效的机制来检测和防御自动化攻击,这可能会导致重大安全风险。自动化攻击是指使用自动化工具和技术,如恶意软件、蠕虫病毒、僵尸网络等,对计算机系统、网络设备和应用程序进行攻击。这些攻击通常可以通过大规模的、自动化的方式进行,从而产生更广泛和更严重的影响。例如,操作僵尸网络的攻击者绕过速率限制,因为他们可以从数千个位置/IP轻松访问API。

场景案例:

一家科技公司宣布即将发布一款新的游戏机,这款产品的需求非常大,库存数量有限。攻击者通过自动化威胁方式,将恶意代码插入到自动购买该新游戏机并完成交易的程序中。在游戏机发布当天,攻击者利用分布在不同IP地址上的恶意代码,先于其他人购买了大部分的游戏机股票。因为API没有实现适当的保护措施,所以攻击者可以轻松地抢占其他人的股票。之后,攻击者以更高的价格将这些游戏机转售到另一个平台上。

9. 存量资产管理不当(Improper Assets Management):更新,强调了“未下线的老版本API/临时调用API”风险的暴露面。

存量资产管理不当是指企业没有对其现有的IT资源(包括硬件、软件、网络设备等)进行有效管理和监控。这会导致一些旧的或者不再使用的IT资源没有被及时清理,而这些资源可能存在安全漏洞,被黑客利用入侵企业系统。此外,未经管理的存量资产也可能使企业面临更高的运营成本和维护难度。

场景案例:

社交网络允许独立应用程序的开发人员与之集成,这个过程需要用户同意分享他们的个人信息。然而,社交网络和独立应用程序之间的数据流缺乏监控和限制,这使得独立应用程序可以访问用户信息,甚至是用户朋友的私人信息。

一家咨询公司建立了一个恶意应用程序,并成功地获取了270,000个用户的授权。由于这个漏洞,咨询公司能够访问50,000,000名用户的私人信息。最终,该咨询公司因为恶意目的出售了这些信息,给用户带来了巨大的隐私风险。

10. 不安全的第三方API(Unsafe Consumption Of APIS):新增,原来“日志和监控不足(Insufficient Logging&Monitoring)”被删除。

不安全的第三方API是指企业使用的来自第三方供应商的API存在一些安全漏洞或者没有被充分保护,这使得黑客可以利用它们来入侵企业系统或者窃取用户数据。第三方API可能会因为开发者的错误、不安全的默认配置或者未经验证的代码而导致安全漏洞。

场景案例:

API与第三方服务提供商集成了用户的医疗敏感信息。数据使用HTTP通过安全链接发送请求如下:

攻击者找到了一种破坏第三方API的方法,使用308重定向响应与上一个类似的请求。

由于API盲目地遵循第三方重定向,攻击者可以在其中插入恶意代码。这使得API会重复发送用户的请求和敏感数据到攻击者的服务器上,而不是原来的目标服务器上。攻击者可以利用这些数据进行各种恶意行为,例如窃取用户信息、入侵企业网络等。

从以上最新的API Security Top 10(候选版),可以看到,现在API安全和传统的Web安全有很大区别,一方面需要在设计和开发阶段,对API的安全性进行良好的构建和设计;另一方面还需要在进入运维阶段后,针对API进行专项型的防护,根据API的特点构建全生命周期的防护体系,从而更好地应对各类风险,做到未雨绸缪、防患于未然。

API安全测试
API安全测试主要是对其API的安全性、正确性和可靠性进行测试,以确保产品符合安全要求。它的测试需要包含用户访问、加密和身份验证。API 安全测试从定义要测试的 API 开始。测试工具使用各种规范格式(包括 OpenAPI v2/v3、Postman Collections 和 HAR 文件)提供有关 API 的输入和输出的信息。

API安全测试是一个很复杂的领域,API 的安全测试为手动、自动和混合活动带来了新的挑战。通常API安全测试需要静态分析工具和动态分析工具相结合,在API安全测试中可以基于常见API安全漏洞如 SQL 和 OS 命令注入、授权/身份认证旁路、路径遍历问题和 OWASP Top 10 API 漏洞进行重点安全测试。

静态分析工具,可以有效地识别特定于语言的软件安全问题,或者众所周知的注入攻击类别,继续对API繁重的代码库有效,但前提是这些工具也对用于公开这些API路由的库和平台进行建模。

在API安全测试的时候,也推荐使用OWASP Zap 和Postman 进行API安全测试,同时下面的几个github是可以值得借鉴应用的。

1.github.com/roottusk/va…

https://link.juejin.cn/?target=https%3A%2F%2Fgithub.com%2Froottusk%2Fvapi

2、API endpoint爆破

github.com/danielmiess…

跳转提示-稀土掘金

3、越权的测试

github.com/PortSwigger…

API安全应用
API安全应用应重点通过API的安全漏洞,然后进行做API安全对抗方案的研发和策略制定,API安全应用同时应满足机密性(确保信息只能被指定的用户访问)、完整性(防止未授权的创造、修改和删除)、可用性(当用户需要访问API时、确保是可用的)。

API安全在应用安全方面可以重点关注语言的安全的编码规则、熟悉软件常见的安全漏洞、加强管理访问API的系统和应用凭证。

例如加强对一些系统内部自带的敏感操作的API函数进行保护,可用自实现的方式防止被直接挂钩系统函数而破坏了功能流程。

API安全中在网络安全方面可以重点关注防火墙、负载均衡、反向代理等并使用安全的通信协议(例如https)确保通信中数据安全。

在API安全实践应用中可以遵循以下的一些规则,提高API安全性。

1.每个 API 都应该使用传输层安全(TLS)来防止数据泄露。虽然这引入了证书管理的复杂性,但现代平台正在转向集成证书解决方案以简化采用。
2.对于具有已知身份的内部用户,API密钥可用于简化对API的访问,而无需 OAuth2 的复杂性,只要密钥得到安全管理。

3、不要将任何 API 密钥提交到源代码存储库,如有必要,请使用秘密管理解决方案。

4、使用授权中间件来标准化访问控制并避免损坏的功能级授权漏洞。

5、确保对 API 密钥使用精细的权限,以避免提供不必要或意外的访问权限。

6、如果你开发的软件有特别复杂的授权要求,请考虑使用标准库,不要重新发明轮子并增加复杂性和维护问题。

7、使用标准授权模式降低复杂性,同时利用客户端进行密集处理,减少给客户端返回数据量。

8、在软件中强化对日志记录的实施,并确保采用标准模式,有利用后续日志信息的审查和优化。
 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值