安全路透社
当前位置:安全路透社 > 网络转载 > 正文

案例分析:利用OAuth实施钓鱼

OAuth百科

OAUTH(Open Authorization)协议为用户资源的授权提供了一个安全的、开放而又简易的标准。同时,任何第三方都可以使用OAUTH认证服务,任何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP、JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。互联网很多服务如Open API,很多大公司如Google,Yahoo,Microsoft等都提供了OAUTH认证服务,这些都足以说明OAUTH标准逐渐成为开放资源授权的标准。

OAuth授权有如下几个阶段,如图:

图片.png

第一步:申请授权

在这一步,网站向IDP发起授权请求。比如说你想要从Office365获取用户的某些权限,那么你需要生成一个带有你想要请求的权限的链接,而权限则需要通过SCOPES这个参数来传递。

图片.png

钓鱼邮件伪装成Spotify官方,发起授权申请,这个类似网络钓鱼。

图片.png

用户点击链接后,跳转到LIVE进行授权许可(当然,你保持一定的警惕的话,应该不会上当)。

第二步:获取授权

当用户点击链接后会跳转到IDP(Microsoft, Google等)的授权接口,如果你还没登录,网站会要求你先登录,如果已登录,页面中会有个选择按钮让你选,YES或者NO,这个选择是将权限授予应用的最后一道屏障。

图片.png

上图就是用户未登录,网站要求用户登录的情况。

图片.png

上图为已登录的情况下,网站向用户发出询问,是否要给应用授权。

第三步:获取权限

如果用户在上一步中点击了YES,IDP就会生成AuthCode给应用。

应用会将自己的ApplicationID、secret、用户的AuthCode一并发送给授权服务器,如果这三个参数确认无误,服务器就会返回一个accessToken给应用,然后应用带着这个accessToken就能获取资源服务器上用户的资源(SCOPES中申请的权限)。

图片.png

上图为你已允许授权的应用。

其实,整个攻击大致可以分为以下几个步骤:

1、创建一个应用Sappo

2、利用该应用创建一个申请授权的链接(SCOPE)

3、用户给应用Sappo授权后,获取AuthCode

4、利用AuthCode获取accessToken

5、使用accessToken以API请求的方式获取所有资源

下面来讲一讲具体的实施步骤。

一、创建一个应用

我们将在Microsoft平台上创建一个名为”Sappo”的应用,通过该应用来盗取Office365和Windows Live用户的数据。

首先,我们登录Outlook账号,访问apps.dev.microsoft.com,创建一个新的应用,然后我们会获取到该应用的Application ID和Secret,同时我们也需要设定一个end–point来回收后面服务器返回的AuthCode和accessToken,这个end-point需要我们可控,并且一直监听所有的请求。

图片.png

上图为创建的”Sappo”应用

Sappo这个框架的作用就是利用授权accessToken来获取用户的数据。为了更直观的演示整个过程,接下来在Sappo上创建一个app,用来作为end-point,我们将这个app命名为”MS PRO O365 AntiSpam”,目的是模仿AntiSpam Pro免费版,这样用户在查看的时候,才不会产生怀疑。

图片.png

二、创建一个申请授权的链接(SCOPE)

为了获取权限,用户会被url重定向至Microsoft,该url要包含如下格式数据:

GET

https://login.microsoftonline.com/common/oauth2/authorize/common/oauth2/authorize?scope=[scope_list]&response_type=[code]&client_id=[client_id]&redirect_uri=[redirect_uri]

通过client_id来指明是哪个应用申请授权,通过scope来指明申请的是哪些权限,通过redirect_uri来指明返回的AuthCode要送到哪里去。

图片.png

上图为应用被允许申请的Windows Live权限,其中有一些允许通过API来读写邮件,但实际上真正操作的时候是会被禁止的。

图片.png

上图为Windows Live中更多的允许应用和OneDrive、OneNote进行交互的授权。

scope_O365.jpg

上图为Office365中允许API进行邮件读写删除的授权

一旦设置好链接,就可以通过邮件进行发送了。我们选择使用Microsoft的邮箱账号来进行邮件的发送,并且将邮件的内容伪装成像来自AntiSpam Pro一样。我们在上面建立的app中已经集成了这样的功能,这里还需要选定一个攻击对象,如下图。

图片.png

最后发出去的邮件是下面这样子的。

图片.png

用户收到这封邮件后,如果他点击了链接,用户就会被重定向到授权页面。

图片.png

就像上面你看到的,这是一个web钓鱼,并不要求用户输入用户名和密码,而且页面是在Microsoft的域名下,是来自https的请求,并且证书也是绿标的。

三、获取accessToken

当用户点击YES授权后,AuthCode会被传送到先前设定的Redirect‐URI,接下来应用就可以通过如下的格式去申请获取accessToken:

POST common / oauth2 / HTTP / 1.1 token

Host: https://login.microsoftonline.com

Content‐Type: application/x‐www‐form‐urlencoded

grant_type=[ authorization_code ]&code=[ authCode ]

&client_id=[ client_id ]&client_secret=[ secret ]

&redirect_uri=[ redirect_uri ]

;client_id为应用的Application ID,secret为当前应用的secret,如果AuthCode验证通过了,则accessToken会被发给已经设定的redirect_uri。

图片.png

如上图,accessToken是以JWT (JSON Web token)的格式返回的,是一串经过URL编码后再BASE64编码的字符串,其中包含3部分:Header、Payload、Signature。经过解码后的数据如下图所示:

图片.png

scp中规定了我们的应用已经申请的权限。

每次向IDP发起API请求资源时都要附带上accessToken的原始数据,格式如下:

Https://login.microsoftonline.com/common/oauth2/authorize GET

HTTP / 1.1

Host: login.microsoftonline.com

Authorization: Bearer [ access_token ]

四、使用API获取用户在IDP的数据

在用户点击了授权之后,我们在sappo上搭建的应用能够自动实现获取authCode并转化为access_token,这时候我们只要操作一下界面就能以API的形式向IDP申请获取数据。

以Office365为例,再这例中,我们拥有足够的权限来操作邮件服务。

20160611094934271.png

20160611094934275.jpg

20160611094934276.png

如上图,我们可以查看用户的邮件,当然我们也能以用户的身份对外发送邮件。

如果你要撤销此类授权怎么办?这就需要你到Office 365的配置中,找到相关应用,点击取消授权,就可以成功撤销授权了。

接下来我们再以Windows Live为例,和之前的Office 365 步骤差不多,唯一不同的是,这里需要把申请的权限换成Windows Live设定的。

同样地,用户点击了YES后,就会给我们的应用授权,在我们获取到accessToken之后,就能以API的方式去请求用户的数据了。我们还需要注意的就是,虽然Windows Live的权限申请中有包含email,但是目前是不可以访问的。

20160611094934278.png

20160611094935279.png

20160611094935281.jpg

虽然邮件不能访问,但是我们可以去看看用户存储在OneDrive上的数据,只要点击上面的”OneDrive storage”, app就会向资源服务器自动发起请求,我们就能进到该用户的OneDrive中了,然后你就可以进行一系列操作,就像使用自己的账户一样。

20160611094935285.jpg

同样的如果你要撤销此类授权,需要到”应用和服务”选项中,找到这个应用,然后点击取消授权。点击进入这个应用后,你就能看到这个应用已经申请的权限。

其实,这个案例颠覆了我们队网络钓鱼的传统观念,我们之前会说钓鱼网站会通过让用户填入账号密码,然后盗取你的数据,但这个例子就是一个很好的佐证。我想,就算是专业的安全人士也不一定能在第一时间识别出来。所以,我们在给应用授权的时候,一定要十分小心。万事都要从安全性出发,没有了安全性,估计也没有人敢用你的产品和服务吧?

当然,如何对应用进行限制,也是值得我们进行深入研究的。

 *参考来源:youtube,elladodelmal,转载请注明来自FreeBuf.COM

未经允许不得转载:安全路透社 » 案例分析:利用OAuth实施钓鱼

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册