MindAPIAPI安全思维导图简介

admin 2022年4月23日09:05:06安全闲碎评论14 views6190字阅读20分38秒阅读模式

MindAPIAPI安全思维导图简介

MindAPIAPI安全思维导图简介
随着应用程序驱动的普及,API接口已经是Web应用、移动互联网等领域的重要组成部分,由于对API接口的访问与控制伴随着数据的传输,其中不乏大量的用户隐私数据以及重要文件数据。若没有保护好提供服务的API,将会对用户个人隐私以及企业带来威胁和安全风险。

安全研究员DavidSopas发布了一个新的开源项目:MindAPI,这是一个思维导图,为API安全研究提供了丰富易用的资源。
本文从三个方面来介绍该思维导图:常见的API框架、OWASP API Security TOP10以及API安全防护实践。
MindAPIAPI安全思维导图简介

常见的API框架

MindAPIAPI安全思维导图简介


上图可以清晰看到API框架的发展史,二十年前,REST的出现取代SOAP,如今,GraphQL的出现使得对接口的操作更加高效灵活,许多API使用者们为之欢呼。


下面依次简单介绍一下RPC、SOAP、REST、GraphQL四种API架构。


RPC:调用另一个系统的函数

RPC(远程过程调用)是一种规范,它允许在不同的上下文中远程执行一个函数,它的调用流程如下图所示:

MindAPIAPI安全思维导图简介


客户端调用一个远程过程,将参数和附加信息序列化为消息,并将消息发送到服务器。服务器在收到消息后,对其内容进行反序列化,执行请求的操作,并将结果发回给客户端。服务器存根和客户端存根负责参数的序列化和反序列化。

简单直接的交互、易于添加新函数、高性能的优势使得即使是八十年代就开始使用的它到如今也不会过时。


SOAP:使数据作为服务可用

SOAP全称Simple Object Access Protocol,简单对象访问协议,是一个高度标准化的网络通讯协议,是基于XML格式的RPC示例。它独立于语言和平台,内置错误处理,可绑定到各种协议,并且拥有一系列的安全拓展,因此SOAP体系结构最常用于企业内部或与其信任的合作伙伴的内部集成。但是不可避免的是繁冗的XML格式所带来的带宽消耗以及仅使用POST方式发送请求的繁琐的消息更新机制。


REST :使数据作为资源可用

REST全称REpresentational State Transfer,表述性无状态传输,它的定义不像SOAP那样严格,RESTful体系结构遵守六个约束:统一接口、无状态、缓存、客户端-服务器架构、分层系统、按需编码。它的核心是服务器端将资源发布为URI,客户端通过URI访问资源,并通过HTTP请求对资源进行操作,如下所示:

MindAPIAPI安全思维导图简介

通常的安全控制做法是所有从客户端发出的请求都经过代理服务器,由代理服务器指定安全策略,代理服务器一般根据(URI,HTTPMethod)两元组来决定HTTP请求的安全合法性。REST与SOAP的安全策略对比如下:


MindAPIAPI安全思维导图简介

REST安全策略

MindAPIAPI安全思维导图简介

SOAP安全策略

可以看到,代理服务器必须对SOAP消息体解码才能知道当前的HTTP请求具体做的是什么,这也是REST取代SOAP成为赢家的原因之一。


GraphQL :仅请求所需要的数据

REST API 需要被多次调用才能返回所需要的资源。所以,GraphQL被发明了,并改变了这一切游戏的规则,GraphQL是一种用于查询API的语言,它描述了如何进行精确的数据请求,允许客户端向服务器发出调用时任意构造数据,停止了无用的往返,不再关心嵌套的资源、响应数据的大小,更加灵活。


MindAPIAPI安全思维导图简介


不过,GraphQL不再使用HTTP缓存语义,需要额外自定义缓存,并且一个请求中嵌套字段太多会导致系统过载,因此,对于复杂的查询,REST仍然是更好的选择。

MindAPIAPI安全思维导图简介

OWASP API Security TOP 10 -2019

API在现代应用程序的体系结构中扮演着非常重要的角色。由于创建安全意识和创新的速度不同,所以重点关注常见的API安全弱点是很重要的。OWASP API Security Top 10的主要目标是培训那些参与API开发和维护的人员,例如开发人员、设计人员、架构师、管理人员或组织。



TOP 1 ·  对象级授权机制失效


API安全中排名第一的问题是水平越权问题,该问题在基于API的应用中非常普遍,因为服务器通常不会完整地跟踪用户的状态,而是依赖用户请求参数中的对象ID来决定访问哪些目标对象,通过篡改对象ID,包括修改值、值的类型、请求方法类型等方式,重新提交请求查看响应中是否存在敏感数据的泄露,这已经成为最普遍、且影响广泛的API攻击。


下面我们来看看攻击案例场景:

通过监控可穿戴设备的网络流量,其HTTP PATCH请求中的自定义请求头部字段X-User-Id:54796引起注意。通过替换X-User-Id字段的值为54795,攻击者便可接收到成功的HTTP响应,并可以修改其他用户的账户数据。

TOP 2 ·  用户认证机制失效


排名第二的是身份认证问题,API的认证机制是一个复杂且容易使人迷惑的机制。实现认证和授权有多种途径,但时下最流行的是“基于令牌(token-based)”的方法,其中最常用的便是JWT、OAuth2.0。


MindAPIAPI安全思维导图简介
JWT


JSON WebToken(缩写JWT)分为三个部分:头部(header)、载荷(payload)、签名(signature),当我们拿到一个JWT通过base64url解密如下所示:


MindAPI--API安全思维导图简介


因此可总结针对JWT安全问题如下:


1、Header部分

• 是否支持修改算法为none/对称加密算法

• 删除签名

• 插入错误信息

• KID字段是否有目录遍历/SQL注入/命令注入

• jwk元素是否可信

• 是否强制使用白名单上的加密算法


这里重点介绍一下KID参数。它是JWT头部的一个可选字段,开发人员可以用它标识认证token的某一密钥。由于此字段是由用户控制的,因此攻击者可能会操纵它并导致危险的后果。



01
目录遍历

   由于KID通常用于从文件系统中检索密钥文件,因此,如果在使用前不清理KID,文件系统可能会遭到目录遍历攻击。这样,攻击者便能够在文件系统中指定任意文件作为认证的密钥。

例如,攻击者可以强行设定应用程序使用公开可用文件作为密钥,并用该文件给HMAC加密的token签名。


MindAPI--API安全思维导图简介


02
SQL注入

    KID也可以用于在数据库中检索密钥。如果可以在KID参数上进行SQL注入,攻击者便能使用该注入返回任意值。


MindAPIAPI安全思维导图简介


上面这个注入会导致应用程序返回字符串“key”(因为数据库中不存在名为“aaaaaaa”的密钥)。然后使用字符串“key”作为密钥来认证token。


03
命令注入

   有时,将KID参数直接传到不安全的文件读取操作可能会让一些命令注入代码流中。攻击者只需在输入的KID文件名后面添加命令,即可执行系统命令:


MindAPIAPI安全思维导图简介


2、Payload部分

• 是否存在敏感信息

• 检查过期策略,比如exp , iat


3、Signature部分

• 检查是否强制检查签名

• 密钥是否可以爆破

• 是否可以通过其他方式拿到密钥


4、其他

• 重放

• 通过匹配校验的时间做时间攻击

• 修改算法RS256为HS256

• 弱密钥破解

MindAPIAPI安全思维导图简介
OAuth2.0


OAuth2.0是目前最流行的授权机制,用来授权第三方应用,获取部分用户数据。协议在使用过程中的不规范,没有严格遵循协议的安全相关指导可能造成如下问题:


1、绑定劫持

攻击者抓取认证请求构造恶意url,并诱骗已经登录的用户点击(比如通过邮件或者QQ等方式),认证成功后用户的帐号会同攻击者的帐号绑定到一起。OAuth2.0提供了state参数用于防御CSRF,认证服务器在接收到的state参数按原样返回给redirect_uri,客户端收到该参数并验证与之前生成的值是否一致。


2、授权劫持

根据OAuth的认证流程,用户授权凭证会由服务器转发到redirect_uri对应的地址,如果攻击者伪造redirect_uri为自己的地址,然后诱导用户发送该请求,之后获取的凭证就会发送给攻击者伪造的回调地址。攻击者使用该凭证即可登录用户账号,造成授权劫持。


3、越权访问

scope参数表示申请的权限范围,通过拦截请求修改scope参数值,例如将Scope:read改为Scope:write,就把原本可读的权限越权修改成可写的权限。

具体案例参考如下:

https://coolshell.cn/articles/11021.html

TOP 3 ·  数据过度暴露风险


这个问题比较容易理解,字面上的意思即是问题所在。API接口被调用时返回了大量数据,很多数据可能都是不必要的,可能导致越权查看敏感信息,该类问题的测试发现可从以下三点考虑:

  • API是否从具有敏感数据的数据库返回完整的数据对象;

  • 将客户端数据与API响应进行比较,以检查客户端是否完成过滤;

  • 使用Burp、ZAP等工具嗅探流量分析API的响应,是否能获取不应该返回给用户的多余的敏感数据。

TOP·  资源竞争风险


利用简单的API请求,无需身份认证,即可使用单一的本地计算机或云计算资源来执行多个并发请求。这个问题偏向于资源竞争,通常,API不会对客户端/用户请求的资源大小或者数量施加任何限制,这不仅会影响API服务器的性能,从而导致拒绝服务,而且还为诸如暴力破解之类的身份验证漏洞敞开了大门。

例如:攻击者通过向/api/v1/images发送POST请求来上传大尺寸的图像。在上传完成后,API将创建多个不同大小的缩略图。由于上传的图像过大,可用内存在创建缩略图时被耗尽,API将无法响应。服务器可通过设置最大可分配内存、执行超时时长、暴力破解检查等操作来防范该类问题。

TOP·  功能级授权机制失效


该问题与问题一相似,都是授权方面的问题,但是失效的功能级授权是垂直越权,具有不同层级、分组和角色的复杂访问控制策略,以及管理功能和常规功能之间的模糊不清,往往会导致授权缺陷,攻击者可以访问其他用户的资源或管理功能。查找该类问题的最佳方法是对授权机制进行深入分析,同时牢记用户层次结构,应用程序中的不同角色或组,该类问题可通过如下几点进行判断:

  • 普通用户是否能访问管理端点;

  • 用户是否可以通过简单修改HTTP方法来执行未授权的敏感操作(如,从GET到DELETE);

  • 通过简单猜测端点URL和参数进行未授权访问。

TOP·  属性批量分配风险


现代应用程序中的对象可能包含许多属性,其中一些属性应由客户端直接更新,而某些敏感属性则不应该更新,批量分配通常就是由于将客户端提供的数据绑定到数据模型,而没有基于白名单的适当属性过滤导致的。API端点自动将客户端参数转换为内部对象属性,而不考虑这些属性的敏感性和暴露程度,与权限相关的属性(如user.isadmin、user.isvip)应仅由管理员设置、与流程相关的属性(如user.cash)应在流程验证后内部设置、内部属性(如article.created_time)仅应在应用程序内部设置。

TOP·  安全配置错误


从网络层到应用层,在API的任何层级都可能发生安全配置错误。攻击者通常会试图查找未修补的缺陷、公共端点或未受保护的文件和目录,以获取对系统未经授权的访问或了解。最常见的安全配置错误是不安全的默认配置、不完整或临时配置、开放的云存储、错误配置的HTTP标头,不必要的HTTP方法、跨域资源共享(CORS)以及包含敏感信息的冗长错误消息导致的。

TOP·  资产管理不当


与传统的Web应用程序相比,API倾向于公开更多的端点,这使得文档的准确性和及时更新显得尤为重要。资产文档的更新不及时,资产盘点和下线策略的缺乏,都是资产管理不当的范畴,该类问题(如暴露测试接口地址、未下线的旧接口)的发现,可以通过以下三种方式:一是捕风捉影,通过检测所有流量包来查找;二是按图索骥,通过JS等信息收集方式发现去寻找并构造API;三是无中生有,通过猜解、遍历方式去获取接口。


TOP 9 ·  注入风险


MindAPI--API安全思维导图简介


如上所示,注入是web漏洞中最重要的一种形式,简单来说就是用户的的参数变成了解释代码的一部分,可导致命令注入,SQL注入,LDAP注入,XML注入等,轻则造成数据泄露,重则导致系统被远程控制。

该类问题通常是由如下原因导致的:

  • API未对客户端提供的数据进行验证、过滤或净化;

  • 客户端提供的数据直接使用或拼接到数据库查询语句、OS命令中;

  • API不对来自外部系统(如集成系统)的数据进行验证、过滤或净化。

下面举个例子,某控制设备的固件提供了一个接口/api/CONFIG/restore,期望将appId作为multipart参数进行传送。通过反编译,攻击者发现appId没有经过任何处理直接传送到系统调用中执行。


MindAPI--API安全思维导图简介


攻击者使用以下命令就可关闭任何使用带有该缺陷固件的设备:


MindAPI--API安全思维导图简介



TOP 10 ·  日志和监视不足


日志和监控不足,再加上事件响应的缺失或无效集成,使攻击者可以进一步攻击系统,长期驻留,并横向移动到更多系统以篡改、提取或破坏数据。该类问题存在如下特点:

  • 没有生成任何日志、日志级别没有正确设置或日志消息缺失足够的细节信息

  • 没有对日志进行持续监视

  • 不能保证日志的完整性(日志注入)

    MindAPIAPI安全思维导图简介MindAPIAPI安全思维导图简介


如上所示,用户输入val值为twentyone%0a%0aINFO:+User+logged+out%3dbadguy,便可插入恶意日志信息。

MindAPIAPI安全思维导图简介

API安全防护实践

上面介绍了API常见的安全问题,那么我们如何做到API安全防护?下面列出了一些最常见的加强API安全性的方法:


  • 使用令牌。建立可信的身份,再通过使用分配给这些身份的令牌来控制对服务和资源的访问。  

  • 使用加密和签名。通过 TLS 等方式加密数据。要求使用签名,确保只有拥有权限的用户才能解密和修改数据。

  • 识别漏洞。确保操作系统、网络、驱动程序和 API 组件保持最新状态。了解如何全面实现协同工作,使用嗅探器来检测安全问题并跟踪数据泄露。

  • 使用配额和限流。对 API 的调用频率设置限额,并跟踪其使用记录。如果 API 调用数量增多,表明它可能正被滥用,也可能是编程出了错。指定限流规则,防止 API 出现调用激增和拒绝服务攻击。

  • 使用 API 网关。API 网关担当主要的 API 流量策略执行点,好的网关既能帮助验证流量的使用者身份,也能控制和分析API 使用情况。

如今API安全已经成为提供API服务的企业之间以及企业内部都需要关注的一个安全问题,对于开发人员来说,在设计和开发阶段需要对API的安全性进行良好的构建和设计,需遵守API安全开发规范;对于管理人员来说,应该使用API管理平台对API服务所面临的风险进行检测和防护。


参考资料:

https://dsopas.github.io/MindAPI/play/

https://levelup.gitconnected.com/comparing-api-architectural-styles-soap-vs-rest-vs-graphql-vs-rpc-84a3720adefa

http://www.owasp.org.cn/OWASP-CHINA/owasp-project/owasp-api-security-top-104e2d6587987976ee/

https://www.redhat.com/zh/topics/security/api-security


END




新威胁驱动下的APP安全评估能力实践

  历

小白训练营|Android应用签名介绍

  史

小白训练营|Android常用的两种跳转协议概述学习

  文

Android端的Hook之旅

  章

MindAPI--API安全思维导图简介

原文始发于微信公众号(vivo千镜):MindAPI--API安全思维导图简介

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月23日09:05:06
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  MindAPIAPI安全思维导图简介 http://cn-sec.com/archives/904690.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: