攻击数亿个账户,黑客利用OAuth2.0疯狂作恶

news2024/11/13 14:53:17

一、OAuth协议介绍

OAuth是一种标准授权协议,它允许用户在不需要向第三方网站或应用提供密码的情况下向第三方网站或应用授予对存储于其他网站或应用上的信息的 委托访问
权限。OAuth通过访问令牌来实现这一功能。

1.发展历史

OAuth协议始于2006年Twitter公司OpenID项目,该公司的一位合作伙伴希望通过OpenID来实现委派认证,在经过研究后他们发现还没有一项关于API委派访问的开放标准,于是他们在2006年成立了OAuth讨论组,并且在当年的12月就发布了OAuth1.0协议。2010年4月,IETF将OAuth1.0纳入标准协议,编号为rfc5849,2012年OAuth2.0发布。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G4CcgHvo-1690883115484)(https://image.3001.net/images/20230423/1682229368_6444c87868ee42190c96f.png!small)]

2.OAuth角色

OAuth协议中定义了4个角色:

  • 资源所有者

拥有向受保护资源授权能力的实体,我们可以理解为用户。

  • 资源服务器

存储受保护资源的服务器,可以接收带access_token的请求并返回受保护的资源。

  • 客户端

代表资源所有者请求受保护资源的应用即第三方的应用。

  • 授权服务器

在资源所有者通过认证后向客户端签发access_token的服务器。

v2-03a31d76b9162e267b807a1eb3a0297b_720w.webp

3.抽象流程

下面这张图描述了OAuth协议中四个角色的交互过程。

A.客户端向资源所有者请求授权。

B.客户端接收到授权凭证,这里的授权凭证是一个代表资源所有者授权的凭证。

C.客户端与授权服务器交互并提交授权凭证。

D.授权服务器对客户端进行认证并验证授权凭证,如果有效,则颁发访问令牌。E.客户端使用访问令牌向资源服务器请求受保护资源。

F.资源服务器验证访问令牌,如果有效,向客户端返回受保护的资源。v2-69cdd72d7f27f37d9b4ef1e0ac814f4c_720w.webp

4.相关概念

授权模式

授权模式指的是客户端向授权服务器获取访问令牌(Access Token)的方式,RFC6749中定义了四种授权模式及一种拓展机制。

授权码模式

授权码是客户端获取访问令牌的一个临时凭据,授权码模式也是四种授权模式中最安全的一种。在授权码模式中,用户授权后,认证服务器向客户端生成授权码,客户端再利用授权码向认证服务器请求访问令牌。

隐式授权模式

隐式授权是一种简化的授权码模式,在隐式授权模式中,认证服务器没有向客户端签发授权码这一步骤,直接向客户端颁发访问令牌。

密码授权模式

密码模式主要应用于高度可信的客户端中,用户需要向客户端提供自己的用户名和密码,客户端再利用用户名和密码向认证服务器请求访问令牌。

客户端凭据

客户端凭据的主要应用场景是其访问的资源为相对固定的受保护资源,客户端仅代表自身去向资源服务器请求资源。

访问令牌

访问令牌是用于访问受保护资源的凭据,访问令牌一般都会包含用户身份、访问范围、有效时间等信息。

刷新令牌

刷新令牌是用于获取访问令牌的凭据,主要是在访问令牌过期后用来向认证服务器请求新的访问令牌。

5.OAuth客户端

客户端也是OAuth协议中非常重要的一个概念,客户端代表第三方应用身份,在OAuth协议中规定客户端需要向认证服务器进行注册,协议没有规定注册的具体方法,但是规定了客户端需要提供的一些参数。

  • 客户端标识符(client_id), 每个客户端都应该有一个唯一标识符,用于识别该客户端并与其他客户端区分开来。
  • 客户端密钥(client_secret), 每个客户端还应该有一个密钥,用于与 OAuth 服务端进行身份验证和通信。
  • 授权类型(grant_type), 客户端应该指定它所使用的授权类型,例如授权码、隐式授权、密码授权或客户端凭证授权。
  • 回调URL(redirect_uri), 客户端应该指定一个回调 URL,OAuth 服务端将在用户授权后将授权码或令牌发送到该 URL。
  • 可接受的响应类型(response_type), 客户端应该指定它所接受的响应类型,例如 code、token或其他拓展响应类型。
  • 可接受的范围(scope), 客户端应该指定它所接受的范围,即客户端所请求的访问权限。
  • 其他元数据, 客户端还可以指定其他元数据,例如客户端名称、描述、图标等。

6.授权码模式

授权码模式是应用最多的OAuth授权模式,下图描述了授权码模式中各个角色之间的交互流程。

A.客户端通过指示资源所有者的用户代理到授权端点。客户端包括它的客户端标识符、请求的范围、本地状态和授权服务器将向其发送的重定向
URI一旦授予(或拒绝)访问权限,用户代理就会返回。

B.授权服务器验证资源所有者(通过用户代理)并确定资源所有者是否授予或拒绝客户端的访问请求。

C.如果资源所有者授予访问权限,则授权服务器使用之前提供的重定向 URI。

D.客户端利用上一步接收到的授权码向认证服务器请求访问令牌,并且客户端需要向认证服务器进行身份验证。

E.认证服务器验证客户端,验证授权代码,并确保重定向 URI接收到的与用于重定向客户端的 URI 相匹配。如果验证通过,授权服务器响应访问令牌和刷新令牌。

v2-ba230446e4fab37862b5b16b9e8be7a6_720w.webp

二、OAuth攻击面

身份基础设施的底层均绕不开身份认证协议这一关键技术,但是在OAuth协议实际应用中也暴露了许多安全风险,主要包括以下几个攻击面。

  1. 认证绕过

第三方应用登录是OAuth的一个典型应用案例,但是如果使用了错误的实现方式就会造成认证绕过的后果。以下是某个应用的第三方登录实现逻辑。

首先APP通过OAuth拿到用户的OpenId,拿到OpenId之后APP再调用登录接口并以OpenID为参数,服务端在数据库中查询到OpenId对应的用户随即返回该用户的session。

整个过程中应用仅仅使用了OpenId作为鉴权的参数,但是由于OpenId是一个相对固定的参数,一旦泄露出去,这里就会产生认证绕过的风险。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7bhbDTYV-1690883115486)(https://image.3001.net/images/20230423/1682229923_6444caa3c72d16263a232.png!small)]

  1. 开放重定向

开放重定向是只攻击者可以通过控制请求参数使用户重定向到任意地址的攻击,在OAuth中导致开放重定向的罪魁祸首是对redirect_uri参数没有经过校验,由于认证服务器会通过重定向将用户授权凭据传递给客户端,攻击者通常会利用这种攻击手法来窃取用户授权凭据。

v2-049f8a451dd37005190e0739410c7ea2_720w.webp

3.SSRF

导致SSRF的一个重要原因是OAuth客户端的注册过程,OAuth客户端注册通常会向认证服务器提供一些包含客户端信息的元数据,其中一些参数以url的形式提供给认证服务器,包括重定向地址、log地址、jwks等,如果服务器在服务端对这些地址发起web请求,这里就会出现SSRF漏洞。

v2-f0a04bed0c945518c7fbede6a24b9066_720w.webp

4.参数注入

参数注入主要包括SQL注入和XSS,OAuth协议交互和客户端注册中涉及到多种参数传递过程,如果在服务端没有进行恰当的过滤和验证,很有可能就会出现参数注入漏洞,比如在一些OAuth实现中直接将客户端注册填写的redirect_url渲染到html页面,或者是将code参数直接用字符串拼接的方式带入到SQL查询语句中,这些不安全的实现都会导致意外的事故。

5.会话投毒

会话投毒攻击一般出现在授权访问的过程中,主流的OAuth服务实现一般有以下几个流程:

1.客户端校验,对传递过来的客户端参数包括client_id、redirect_uri、scpoe等参数进行合法性校验。

2.用户认证,认证服务器向资源所有者进行身份验证,主要是利用表单等方式对用户身份进行验证。

3.向用户询问是或否授权,在这个步骤中会向用户展示客户端信息及授权范围,并向用户展示授权按钮。

4.将用户授权凭据通过重定向传递给第三方客户端。

以上几个步骤中客户端校验、用户认证、授权逻辑通常都是在三个接口中独立实现,三个接口需要维持的一些状态参数会存储到session中。

比如在第一步客户端校验通过后将redirect_uri存储在session中,在通过验证后并授权之后再从session中取出redirect_uri并将用户重定向到这个地址。

在这个过程中,如果攻击者在自己的页面制作一个合法的客户端授权请求、但是在后台偷偷发送自己注册的恶意客户端授权请求,session里面的内容就会被刷新,用户再授权之后就会将授权凭据重定向到攻击者的客户端地址。

三、OAuth攻击案例

针对OAuth的攻击案例在现实中也是层出不穷,以下是一些漏洞和攻击的典型案例。

1.CVE-2021-26715

CVE-2021-26715是OAuth的开源实现MITREid
Connect中存在的一个SSRF漏洞、该漏洞的主要原因是其在服务端通过http请求客户端logo地址展示给用户。

首先注册客户端,向客户端传递一个恶意的logo地址

v2-941160bb60bfde1dc012ee30cdea550c_720w.webp

再通过接口获取客户端logo

v2-52ce478f8710a23c9bed1ae5b744cfdd_720w.webp

接收到的是恶意地址的内容。根据api地址定位到相关代码内容

v2-04058c7ea6f617d9f3daccb1f0f40462_720w.webp

api对应的方法是

org.mitre.openid.connect.web.ClientAPI#getClientLogo

getClientLogo方法中通过

InMemoryClientLogoLoadingService#getLogo

方法,传入客户端实体类获取客户端logo图像

v2-a26d5d7dec26b2ae7699ea48b4702dc7_720w.webp

最终在

org.mitre.openid.connect.service.impl.InMemoryClientLogoLoadingService类中可以看到构造http请求向logo地址发起的http请求。

2.redirect_uri

这是一个通过redirect_uri地址绕过防护进行开放重定向攻击的案例,白帽黑客kuzu7shiki在hackerone上披露的一份报告显示,kuzu7shiki发现了pixiv提供的OAuth服务中的一个漏洞,正常的OAuth认证参数构造如下:

[https://oauth.secure.pixiv.net/v2/auth/authorize?client_id=a1Z7w6JssUQkw5Hid0uIDeuesue9&redirect_uri=https%3A%2F%2Fbooth.pm%2Fusers%2Fauth%2Fpixiv%2Fcallback&response_type=code&scope=read-
works+read-favorite-users+read-friends+read-profile+read-email+write-
profile&state=%3A1a38b53563599621ce25094661b1c4458ddb52d79d771149](https://link.zhihu.com/?target=https%3A//oauth.secure.pixiv.net/v2/auth/authorize%3Fclient_id%3Da1Z7w6JssUQkw5Hid0uIDeuesue9%26redirect_uri%3Dhttps%253A%252F%252Fbooth.pm%252Fusers%252Fauth%252Fpixiv%252Fcallback%26response_type%3Dcode%26scope%3Dread-
works%2Bread-favorite-users%2Bread-friends%2Bread-profile%2Bread-
email%2Bwrite-
profile%26state%3D%253A1a38b53563599621ce25094661b1c4458ddb52d79d771149)

kuzu7shiki将redirect_uri改成以下这种形式:

redirect_uri=https%3A%2F%2Fbooth.pm%2Fusers%2Fauth%2Fpixiv%2Fcallback/…/…/…/…/ja/items/4503924

在用户授权后认证服务器将用户重定向到地址:

https%3A%2F%2Fbooth.pm/ja/items/4503924

booth.pm是一个购物平台、items/4503924为商品详情页面,这个页面的内容是商家可以控制的,这个漏洞的关键点在于pixiv没有对重定向地址进行严格校验,如果攻击者注册一个商家账户并在商品页面植入类似Google
Analytics的访问统计插件,用户在授权之后,授权凭据就会暴露在攻击者的统计数据中。

3.OAuth钓鱼

这是国外安全公司fortra发布的一篇关于利用OAuth钓鱼对Office365应用进行钓鱼的攻击案例。

Office365可以理解为一个在线版的office应用,主要包含文档、表格、邮件等功能,并且其API支持OAuth委托认证。攻击者钓鱼的主要手法是向用户发送一个假冒的内部文档。

v2-541ea3e06162b9cd0e5aad793a85e4eb_720w.webp

实际上链接是

httpps://http://login.microsoftonline.com/common/oauth2/v2.0/authorize?%20client_id=fc5d3843-d0e8-4c3f-b0ee-6d407f667751&response_type=id_token+code&redirect_uri=https%3A%2F%2Fofficemtr.com%3A8081%2Foffice&scope=offline_access%20contacts.read%20user.read%20mail.read%20notes.read.all%20mailboxsettings.readwrite%20Files.ReadWrite.All%20openid%20profile&state=12345Ajtwmd&response_mode=%20form_post&nonce=YWxsYWh1IGFrYmFy

这里可以很明显看出来是一个OAuth认证链接,受害者在点击该链接后会跳出登录界面

v2-c45bbe6b96b66f5f02da2549476a54dc_720w.webp

受害者输入用户密码后进行授权

一旦用户点击授权,用户凭据将会被发送到攻击者的恶意客户端地址,并且攻击者拥有授权范围的所有能力,包括读取联系人、操作邮件、文档等等。

4.o365-attack-toolkit

o365-attack-
toolkit是github上一个针对office365进行攻击的开源工具,这个工具主要也是利用了Office365服务api支持OAuth认证的特性。

v2-d732caea1f7becfb13ff50945e5e29bb_720w.webp

工具主要包含了钓鱼页面、后端服务、以及管理接口三个部分,钓鱼页面负责对受害者进行钓鱼攻击,后端服务利用Microsoft Graph
API请求用户存储在office365服务中的数据,管理界面为攻击者提供用户及资产的可视化管理的功能。以下是这款工具的一些主要功能界面:

①用户管理

v2-dcc52ac41153a13e076402e06a310fce_720w.webp

②邮件搜索

v2-ff1ed2773aee2cc55ee7e33b1a7035da_720w.webp

③文件搜索

v2-1143d3165e4b9319da9bb2b407af010c_720w.webp

,后端服务利用Microsoft Graph
API请求用户存储在office365服务中的数据,管理界面为攻击者提供用户及资产的可视化管理的功能。以下是这款工具的一些主要功能界面:

①用户管理

如果你对网络安全入门感兴趣,那么你点击这里👉CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

如果你对网络安全感兴趣,学习资源免费分享,保证100%免费!!!(嘿客入门教程)

👉网安(嘿客)全套学习视频👈

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

img

img

👉网安(嘿客红蓝对抗)所有方向的学习路线****👈

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

img

学习资料工具包

压箱底的好资料,全面地介绍网络安全的基础理论,包括逆向、八层网络防御、汇编语言、白帽子web安全、密码学、网络安全协议等,将基础理论和主流工具的应用实践紧密结合,有利于读者理解各种主流工具背后的实现机制。

在这里插入图片描述

面试题资料

独家渠道收集京东、360、天融信等公司测试题!进大厂指日可待!
在这里插入图片描述

👉嘿客必备开发工具👈

工欲善其事必先利其器。学习客常用的开发软件都在这里了,给大家节省了很多时间。

这份完整版的网络安全(客)全套学习资料已经上传至CSDN官方,朋友们如果需要点击下方链接也可扫描下方微信二v码获取网络工程师全套资料【保证100%免费】

如果你有需要可以点击👉CSDN大礼包:《嘿客&网络安全入门&进阶学习资源包》免费分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/821609.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python爬虫遇到URL错误解决办法大全

在进行Python爬虫任务时,遇到URL错误是常见的问题之一。一个错误的URL链接可能导致爬虫无法访问所需的网页或资源。为了帮助您解决这个问题,本文将提供一些实用的解决方法,并给出相关代码示例,希望对您的爬虫任务有所帮助。 一、…

mysql进阶-触发器

在实际开发中,我们经常会遇到这样的情况:有 2 个或者多个相互关联的表,如 商品信息 和 库存信息 分别存放在 2 个不同的数据表中,我们在添加一条新商品记录的时候,为了保证数据的完整性,必须同时 在库存表中…

牛客网Verilog刷题——VL41

牛客网Verilog刷题——VL41 题目答案 题目 请设计一个可以实现任意小数分频的时钟分频器,比如说8.7分频的时钟信号,注意rst为低电平复位。提示:其实本质上是一个简单的数学问题,即如何使用最小公倍数得到时钟周期的分别频比。设小…

23种设计模式详解与示例代码(详解附DEMO)

设计模式在Java中的应用与实现 🚀🚀🚀1.创建型模式1. 工厂方法模式(Factory Pattern)2.抽象工厂模式(Abstract Factory Pattern)3. 单例模式(Singleton Pattern)4.原型模…

Bug解决:ModuleNotFoundError: No module named ‘taming‘

from taming.modules.vqvae.quantize import VectorQuantizer2 as VectorQuantizer ModuleNotFoundError: No module named taming 在安装 taming-transformers时,出现了以下两个报错: 报错一: from taming.modules.vqvae.quantize import V…

使用langchain与你自己的数据对话(四):问答(question answering)

之前我已经完成了使用langchain与你自己的数据对话的前三篇博客,还没有阅读这三篇博客的朋友可以先阅读一下: 使用langchain与你自己的数据对话(一):文档加载与切割使用langchain与你自己的数据对话(二):向量存储与嵌入使用langc…

2023CRM如何选型?有哪些特点需要注意?

企业管理中客户关系管理系统被认为是至关重要的一环。随着市场竞争加剧和科技不断发展,企业面临着各种选择,如何选择适合自己的CRM系统变得非常重要。本文将为您介绍2023CRM选型最新指南。 首先,应该了解CRM系统的分类,根据自己的…

LeetCode每日一题——1331.数组序号转换

题目传送门 题目描述 给你一个整数数组 arr ,请你将数组中的每个元素替换为它们排序后的序号。 序号代表了一个元素有多大。序号编号的规则如下: 序号从 1 开始编号。一个元素越大,那么序号越大。如果两个元素相等,那么它们的…

【Python机器学习】实验07 K-means无监督聚类

文章目录 聚类K-means 聚类1 准备数据2 给定聚类中心,计算每个点属于哪个聚类,定义函数实现3 根据已有的数据的标记,来重新更新聚类中心,定义相应的函数4 初始化聚类中心,定义相应的函数5 定义K-means算法6 绘制各个聚…

windwos server 2008 更新环境,且vs_redis 安装失败

KB2919442 下载地址:https://www.microsoft.com/zh-cn/download/confirmation.aspx?id42153 KB2919355 下载地址:https://www.microsoft.com/zh-cn/download/confirmation.aspx?id42153 安装步骤:先安装442,后安装355

C++ 对象的生存期

对象(包括简单变量)都有诞生和消失的时刻。对象诞生到结束的这段时间就是它的生存期。在生存期内,对象将保持它的状态(即数据成员的值),变量也将保持它的值不变,直到它们被更新为止。对象的生存…

windows下安装anaconda、pycharm、cuda、cudnn、PyTorch-GPU版本

目录 一、anaconda安装及虚拟环境创建 1.anaconda的下载 2.Anaconda的安装 3.创建虚拟环境 3.1 环境启动 3.2 切换镜像源 3.3环境创建 3.4 激活环境 3.5删除环境 二、pycharm安装 1.pycharm下载 2.pycharm的安装 三、CUDA的安装 1.GPU版本和CUDA版本、cudnn版本、显卡…

布瑞特单圈绝对值旋转编码器串口数据读取

布瑞特单圈绝对值旋转编码器串口数据读取 数据手册:http://briter.net/col.jsp?id109 (2.1版本RS485说明书通信协议 单圈.pdf) 绝对式编码器为布瑞特BRT38-ROM16384-RT1,采用RS485通信。 该绝对式编码器共有5根线:红、黄、黑、绿、白 由…

解决 MyBatis-Plus + PostgreSQL 中的 org.postgresql.util.PSQLException 异常

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

计算机网络期末复习要点(谢希仁第8版)抱佛脚通用

熬夜苦肝4天,拿下! 课本是谢希仁的计算机网络,第8版。 本文原创!禁止转载。 复习建议:本博客不一定能涵盖你们考试的重点,所以不是走到穷途末路的同学还是应该多多回归课本,课本每章后面都有…

DRM几个重要的结构体及panel开发

一、DRM Linux下的DRM框架内容众多,结构复杂。本文将简单介绍下开发过程中用到的几个结构体。这几个结构体都在之前文章里面开发DRM驱动时用到的,未用到的暂不介绍。 DRM中的KMS包含Framebuffer、CRTC,ENCODER,CONNECTOR&#xff…

ARM处理器 指令(读写内存、状态寄存器、软中断、协处理器……)

一、数据处理指令1)数学运算数据运算指令的格式数据搬移指令立即数伪指令加法指令带进位的加法指令减法指令带借位的减法指令逆向加法指令乘法指令数据运算指令的扩展 2)逻辑运算按位与指令按位或指令按位异或指令左移指令右移指令位清零指令 3&#xff…

弱监督语义分割伪标签可视化(把单通道灰度图转为voc格式语义分割标签的彩色形式)

一、目的 以图片2007_001960为例,voc数据集中的原图和对应的语义分割标签分别如下: 图1 图2 图像级标签WSSS任务第一阶段最后生成的pseudo mask如下: 图3 我们的…

【100天精通python】Day22:字符串常用操作大全

目录 专栏导读 一、 字符串常用操作 1 拼接字符串 2 计算字符串长度 3 截取字符串 4 分割合并字符串 5 检索字符串 6 字母的大小写转换 7 去除字符串的空格和特殊字符 8 格式化字符串 二 、字符串编码转换 2.1 使用encode()方法编码 2.2 使用decoder()方法编码 专栏…

深度学习笔记-暂退法(Drop out)

背景 在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象。在训练神经网络的时候经常会遇到过拟合的问题,过拟合具体表现在:模型在训练数据上损失函数较小,预…