一、OAuth协议介绍
OAuth是一种标准授权协议,它允许用户在不需要向第三方网站或应用提供密码的情况下向第三方网站或应用授予对存储于其他网站或应用上的信息的委托访问权限。OAuth通过访问令牌来实现这一功能。
1.发展历史
OAuth协议始于2006年Twitter公司OpenID项目,该公司的一位合作伙伴希望通过OpenID来实现委派认证,在经过研究后他们发现还没有一项关于API委派访问的开放标准,于是他们在2006年成立了OAuth讨论组,并且在当年的12月就发布了OAuth1.0协议。2010年4月,IETF将OAuth1.0纳入标准协议,编号为rfc5849,2012年OAuth2.0发布。
2.OAuth角色
OAuth协议中定义了4个角色:
- 资源所有者
拥有向受保护资源授权能力的实体,我们可以理解为用户。
- 资源服务器
存储受保护资源的服务器,可以接收带access_token的请求并返回受保护的资源。
- 客户端
代表资源所有者请求受保护资源的应用即第三方的应用。
- 授权服务器
在资源所有者通过认证后向客户端签发access_token的服务器。
3.抽象流程
下面这张图描述了OAuth协议中四个角色的交互过程。
A.客户端向资源所有者请求授权。
B.客户端接收到授权凭证,这里的授权凭证是一个代表资源所有者授权的凭证。
C.客户端与授权服务器交互并提交授权凭证。
D.授权服务器对客户端进行认证并验证授权凭证,如果有效,则颁发访问令牌。E.客户端使用访问令牌向资源服务器请求受保护资源。
F.资源服务器验证访问令牌,如果有效,向客户端返回受保护的资源。
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 相匹配。如果验证通过,授权服务器响应访问令牌和刷新令牌。
二、OAuth攻击面
身份基础设施的底层均绕不开身份认证协议这一关键技术,但是在OAuth协议实际应用中也暴露了许多安全风险,主要包括以下几个攻击面。
1.认证绕过
第三方应用登录是OAuth的一个典型应用案例,但是如果使用了错误的实现方式就会造成认证绕过的后果。以下是某个应用的第三方登录实现逻辑。
首先APP通过OAuth拿到用户的OpenId,拿到OpenId之后APP再调用登录接口并以OpenID为参数,服务端在数据库中查询到OpenId对应的用户随即返回该用户的session。
整个过程中应用仅仅使用了OpenId作为鉴权的参数,但是由于OpenId是一个相对固定的参数,一旦泄露出去,这里就会产生认证绕过的风险。
2.开放重定向
开放重定向是只攻击者可以通过控制请求参数使用户重定向到任意地址的攻击,在OAuth中导致开放重定向的罪魁祸首是对redirect_uri参数没有经过校验,由于认证服务器会通过重定向将用户授权凭据传递给客户端,攻击者通常会利用这种攻击手法来窃取用户授权凭据。
3.SSRF
导致SSRF的一个重要原因是OAuth客户端的注册过程,OAuth客户端注册通常会向认证服务器提供一些包含客户端信息的元数据,其中一些参数以url的形式提供给认证服务器,包括重定向地址、log地址、jwks等,如果服务器在服务端对这些地址发起web请求,这里就会出现SSRF漏洞。
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地址
再通过接口获取客户端logo
接收到的是恶意地址的内容。根据api地址定位到相关代码内容
api对应的方法是
org.mitre.openid.connect.web.ClientAPI#getClientLogo
getClientLogo方法中通过
InMemoryClientLogoLoadingService#getLogo
方法,传入客户端实体类获取客户端logo图像
最终在
org.mitre.openid.connect.service.impl.InMemoryClientLogoLoadingService类中可以看到构造http请求向logo地址发起的http请求。
2.redirect_uri
这是一个通过redirect_uri地址绕过防护进行开放重定向攻击的案例,白帽黑客kuzu7shiki在hackerone上披露的一份报告显示,kuzu7shiki发现了pixiv提供的OAuth服务中的一个漏洞,正常的OAuth认证参数构造如下:
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委托认证。攻击者钓鱼的主要手法是向用户发送一个假冒的内部文档。
实际上链接是
这里可以很明显看出来是一个OAuth认证链接,受害者在点击该链接后会跳出登录界面
受害者输入用户密码后进行授权
一旦用户点击授权,用户凭据将会被发送到攻击者的恶意客户端地址,并且攻击者拥有授权范围的所有能力,包括读取联系人、操作邮件、文档等等。
4.o365-attack-toolkit
o365-attack-toolkit是github上一个针对office365进行攻击的开源工具,这个工具主要也是利用了Office365服务api支持OAuth认证的特性。
工具主要包含了钓鱼页面、后端服务、以及管理接口三个部分,钓鱼页面负责对受害者进行钓鱼攻击,后端服务利用Microsoft Graph API请求用户存储在office365服务中的数据,管理界面为攻击者提供用户及资产的可视化管理的功能。以下是这款工具的一些主要功能界面:
①用户管理
②邮件搜索
③文件搜索
题外话
初入计算机行业的人或者大学计算机相关专业毕业生,很多因缺少实战经验,就业处处碰壁。下面我们来看两组数据:
- 2023届全国高校毕业生预计达到1158万人,就业形势严峻;
- 国家网络安全宣传周公布的数据显示,到2027年我国网络安全人员缺口将达327万。
一方面是每年应届毕业生就业形势严峻,一方面是网络安全人才百万缺口。
6月9日,麦可思研究2023年版就业蓝皮书(包括《2023年中国本科生就业报告》《2023年中国高职生就业报告》)正式发布。
2022届大学毕业生月收入较高的前10个专业
本科计算机类、高职自动化类专业月收入较高。2022届本科计算机类、高职自动化类专业月收入分别为6863元、5339元。其中,本科计算机类专业起薪与2021届基本持平,高职自动化类月收入增长明显,2022届反超铁道运输类专业(5295元)排在第一位。
具体看专业,2022届本科月收入较高的专业是信息安全(7579元)。对比2018届,电子科学与技术、自动化等与人工智能相关的本科专业表现不俗,较五年前起薪涨幅均达到了19%。数据科学与大数据技术虽是近年新增专业但表现亮眼,已跻身2022届本科毕业生毕业半年后月收入较高专业前三。五年前唯一进入本科高薪榜前10的人文社科类专业——法语已退出前10之列。
“没有网络安全就没有国家安全”。当前,网络安全已被提升到国家战略的高度,成为影响国家安全、社会稳定至关重要的因素之一。
网络安全行业特点
1、就业薪资非常高,涨薪快 2021年猎聘网发布网络安全行业就业薪资行业最高人均33.77万!
2、人才缺口大,就业机会多
2019年9月18日《中华人民共和国中央人民政府》官方网站发表:我国网络空间安全人才 需求140万人,而全国各大学校每年培养的人员不到1.5W人。猎聘网《2021年上半年网络安全报告》预测2027年网安人才需求300W,现在从事网络安全行业的从业人员只有10W人。
行业发展空间大,岗位非常多
网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…
职业增值潜力大
网络安全专业具有很强的技术特性,尤其是掌握工作中的核心网络架构、安全技术,在职业发展上具有不可替代的竞争优势。
随着个人能力的不断提升,所从事工作的职业价值也会随着自身经验的丰富以及项目运作的成熟,升值空间一路看涨,这也是为什么受大家欢迎的主要原因。
从某种程度来讲,在网络安全领域,跟医生职业一样,越老越吃香,因为技术愈加成熟,自然工作会受到重视,升职加薪则是水到渠成之事。
黑客&网络安全如何学习
今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。
1.学习路线图
攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。
内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试基础、漏洞详解、计算机基础知识等,都是网络安全入门必知必会的学习内容。
(都打包成一块的了,不能一一展开,总共300多集)
因篇幅有限,仅展示部分资料,需要保存下方图片,微信扫码即可前往获取
3.技术文档和电子书
技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。
因篇幅有限,仅展示部分资料,需要保存下方图片,微信扫码即可前往获取
4.工具包、面试题和源码
“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。
还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。
因篇幅有限,仅展示部分资料,需要保存下方图片,微信扫码即可前往获取
最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。
这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。
参考解析:深信服官网、奇安信官网、Freebuf、csdn等
内容特点:条理清晰,含图像化表示更加易懂。
内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…
因篇幅有限,仅展示部分资料,需要保存下方图片,微信扫码即可前往获取