接口常见安全漏洞说明

缺少对象级访问控制(数据越权)

漏洞评级:

可利用性:★★★ 普遍性:★★★ 危害性:★★★

漏洞描述:

攻击者可以通过操作请求中发送的对象的ID,导致未经授权访问敏感数据暴露。这个问题在基于API的应用程序中非常常见,因为服务器组件通常不完全跟踪客户机的状态,而是更多地依赖于从客户机发送的参数(如对象id)来决定访问哪些对象

具体表现:

没有检查已登录的用户是否有权对请求的对象执行请求的操作

漏洞危害:

未经授权的访问可能导致未经授权方的数据泄露、数据丢失或数据操纵。未经授权访问对象也可能导致完全接管帐户。

漏洞示例:

接口例子:/api/v1/user/{uid}/
业务描述:根据用户编号查询用户基本信息
攻击方法:攻击者获取所有的编号(或者指定编号),替换到url中的{uid}
攻击危害:攻击者利用此漏洞获取到其权限之外的数据

漏洞防御:

1、 在使用ID访问数据库记录时,最好不要使用从客户机发送的ID,而是使用存储在会话对象中的ID
2、 使用访问控制机制,检查登录的用户是否有权访问具体的数据,并使用随机和不可预测的值作为记录id的guid

缺少功能/资源级访问控制(功能越权)

漏洞评级:

可利用性:★★★ 普遍性:★★ 危害性:★★

漏洞描述:

攻击者向他们不应该访问的API服务发送合法的API调用请求,Api服务仍然可以给出正确的返回结果

具体表现:

1、 来自组X的用户是否可以通过简单猜测api服务URL和参数访问只应该向组Y的用户公开的函数
2、 用户可以通过简单地更改HTTP方法执行他们不应该访问的敏感操作(例如创建、修改或删除)

漏洞危害:

漏洞危害视可以被越权的接口而定,如:接口为获取所有用户信息接口,那此接口可以被任意调用意味着所有数据信息泄露

漏洞示例:

接口例子:/api/admin/v1/users/all
业务描述:管理员获取说有用户信息
攻击方法:攻击者通过分析接口层级关系或者使用网络嗅觉工具获取对应的接口,拿到接口后并尝试访问这些接口
攻击危害:所有用户基本信息泄露

漏洞防御:

1、强制机制默认情况下应该拒绝所有访问,要求为访问每个功能授予特定角色权限
2、确保所有管理控制器都继承自一个管理抽象控制器,该抽象控制器根据用户的组/角色实现访问控制检查。
3、确保常规控制器中的管理函数实现基于用户组和角色的访问控制检查

失效的身份验证

漏洞评级:

可利用性:★★★ 普遍性:★★ 危害性:★★

漏洞描述:

密钥是最流行的API身份验证机制,但是正确地管理它们并不容易。攻击者可以使用自动工具在公共存储库或移动应用程序上搜索API密钥。或通过枚举方式获取正确的秘钥,获得秘钥后也就获得了接口的访问权限

具体表现:

1、身份验证只依赖于访问令牌
2、相同的访问令牌对多个API或API版本有效

漏洞危害:

影响在很大程度上取决于秘钥对应的接口,范围从单个用户的敏感数据公开到完全的数据泄露,甚至是对多个系统和服务的控制

漏洞示例:

接口例子:/api/v1/users/{userid}
调用方式:入参({userid})+秘钥
业务描述:根据用户编号查看用户基本信息
攻击方法:攻击者获取所有的编号(或者指定编号),替换到url中的{ajbh},并尝试破解调用秘钥即可获取接口调用权限,并获取对应的数据
攻击危害:攻击者利用此漏洞获取到其权限之外的数据

漏洞防御:

1、 访问敏感数据的Api除了使用API密钥外,还应该使用其他形式的身份验证
2、 API密钥应该对应用程序(例如移动应用程序、IP地址)和它们适用的API集都有限制
2、 API密钥应该存储在安全的位置,且尽量不要为一个静态的秘钥

敏感信息泄露

漏洞评级:

可利用性:★★★ 普遍性:★★ 危害性:★★

漏洞描述:

接口在响应时对敏感信息没有进行有效加密,或者将不应该返回给用户的敏感信息暴露

具体表现:

用户的敏感信息在传递过程中没有被有效的加密

漏洞危害:

用户的敏感信息被暴露,危害的程度视具体暴露的敏感信息而定

漏洞示例:

接口例子:/api/v1/users/{userid}
业务描述:根据用户编号查看用户基本信息
攻击方法:攻击者通过网络嗅探工具分析流量并查看敏感数据
攻击危害:用户相关的基本信息被获取

漏洞防御:

1、 永远不要依赖客户端来执行敏感的数据过滤
2、 检查来自API的响应,确保它们只包含合法的数据
3、 在传输过程中对敏感信息进行有效混淆或非对称加密

缺乏资源以及使用限制

漏洞评级:

可利用性:★★ 普遍性:★★★ 危害性:★★★

漏洞描述:

API请求过于简单。不需要身份验证。攻击者可以从一台本地计算机或使用云计算资源执行多个并发请求。因为系统在响应API请求时会消耗网络、CPU、内存和存储等资源。

具体表现:

没有有效设置执行超时时间,应用最大可以使用的内存,每个客户机能使用的进程数,请求负载的大小等信息

漏洞危害:

系统整体资源耗尽,导致系统宕机或无法提供正常的业务服务

漏洞示例:

接口例子:/api/v1/mov
业务描述:上传视频信息
攻击方法:攻击者模拟多并发向此接口发送请求
攻击危害:上行带宽满载,其他上传功能无法正常使用,如果请求量过多,文书文件足够大存储资源也有被填满风险

漏洞防御:

1、限制客户端在定义的时间范围内调用API的频率
2、当超过定额或限流时,通过提供限额限额和重置限额的时间通知客户端
3、限制单应用节点可以调用资源,防止引发整个集群宕机

批量赋值或篡改

漏洞评级:

可利用性:★★ 普遍性:★★ 危害性:★★

漏洞描述:

接口中暴露了不应该被用户查看或篡改的数据

具体表现:

如果API服务自动将客户机参数转换为内部对象属性,而不考虑这些属性的敏感性和公开程度,那么它就很容易受到攻击。这可能允许攻击者更新他们不应该访问的对象属性

漏洞危害:

漏洞危害视可以被批量赋值很篡改的的接口数据而定

漏洞示例:

接口例子: /api/v1/users/{userid}
JSON object:{“user_name”:“用户名”,“tel”:电话号码,“type”:用户类型}
业务描述:用户通过接口修改自己的用户名和手机号
攻击方法:攻击者抓取并篡改请求参数,修改type字段达到提权的效果
攻击危害:获取管理员权限

漏洞防御:

1、明确并列出客户端应该更新的属性
2、使用内置功能或过滤器将客户端不应该访问的属性列入黑名单
3、如果可能,避免使用自动将客户机输入绑定到代码变量或内部对象的函

注入

漏洞评级:

可利用性:★★★ 普遍性:★★ 危害性:★★★

漏洞描述:

攻击者将通过任何可用的注入向量(如直接输入、参数、集成服务等)向API提供恶意数据,并期望将其发送给解释器。

具体表现:

1、客户端提供的数据不会被API验证、过滤或清理
2、来自外部系统(例如集成系统)的数据不会被API验证、过滤或清理
3、客户端提供的数据直接被使用或执行

漏洞危害:

注入会导致信息公开和数据丢失

漏洞示例:

接口例子:/api/v1/user/{uid}/
业务描述:根据用户编号查看用户基本信息
攻击方法:攻击者获尝试通过篡改请求数据数据,尝试让Api可以解析,如将接口拼装为/api/v1/user/{uid}‘or’1’='1,如Api端没有进行有效的过滤,那恒等条件很可能传输到数据库并被执行,这样整个所有的案件进行均可能被返回
攻击危害:攻击者利用此漏洞获取到其权限之外的数据

漏洞防御:

1、使用一个独立的、可靠的、积极维护的库执行数据验证
2、验证、筛选和清理所有客户端提供的数据或来自集成系统的其他数据
3、应该使用目标解释器的特定语法转义特殊字符
4、始终限制返回记录的数量,以防止在注入时大量泄漏
5、使用足够的过滤器验证传入数据,以只允许每个输入参数的有效值

版本或资源管理不当

漏洞评级:

可利用性:★★★ 普遍性:★★★ 危害性:★★

漏洞描述:

旧的API版本通常是未打补丁的,并且是一种简单的方法来破坏系统,而不必与可能用于保护最新API版本的最先进的安全机制作斗争

具体表现:

1、旧的或以前的API版本没有打补丁
2、每个API版本都没有下线计划
3、没有接口文档或现有文档没有更新
4、不清晰应该运行Api的哪个版本,并且不知道谁应该具备接口的访问权限

漏洞危害:

攻击者可以访问敏感数据,甚至通过连接到同一数据库的旧的、未打补丁的API版本接管服务器。

漏洞示例:

接口例子:/api/admin/v1/users/all
业务描述:管理员获取所有用户信息接口,因原来具有功能越权的漏洞,接口版本升级为v2修复越权问题,但v1接口没有删除或控制访问导致v1安全问题仍然存在
攻击方法:攻击者通过分析接口层级关系或者使用网络嗅觉工具获取对应的接口,拿到接口后并尝试访问这些接口
攻击危害:所有用户基本信息泄露

漏洞防御:

1、合理进行版本的管理,对于废弃接口合理管理
2、制定服务清单,清单中应该包含单不限于:服务的软件版本(服务以及包含api的版本),服务的运行环境,服务运行的最大最小实例数

猜你喜欢

转载自blog.csdn.net/CoreNote/article/details/103787212