您现在的位置: 华盟网 >> Hack >> 牧马天地 >> 正文

[组图]新型钓鱼-利用OAuth钓鱼

2016/5/4 作者:CSNS-Lab 来源: 网络收集
导读 从近年来很多著名的攻击事件来看,有很大一部分是从钓鱼攻击开始的,企业由于没有对用户进行双因子认证,使得攻击者通过钓鱼获取到了用户名密码后就能直接进入内网。

       

  这篇文章要阐述的是一种更为难以防御的攻击方法–通过盗取email的权限而不是盗取用户名和密码来进行攻击。比如通过盗取email OAuth认证的token,再利用api去读取邮件从而绕过双因子验证。

  在这篇文章中,我们选择的IDP(资源提供者)为Office 365和Windows Live,类似的你也可以选择Twitter, Facebook,Google等。

  鱼叉式网络钓鱼攻击及对策

  钓鱼攻击通过诱骗用户在伪造的网站上输入信息来获取他们的数据,比如要盗取用户的Office365账号,则这个站点就模拟成Office365的登录站点,如果要获取用户的Apple ID,则这个站点就伪装成Apple登录站点,以此类推。如下图为Apple ID的钓鱼站点。

      

  你可以使用以下的两种方式来诱骗受害者访问这个钓鱼站点:1、最常用的方法–垃圾邮件钓鱼,通过向大量的用户发送带有诱骗性的邮件,目标通常都是随机的,内容也是随机的;2、定向钓鱼攻击,此时的目标是经过筛选的,所以邮件的内容会极具相关性,这也是APT活动时常用的手法。如下图为针对特定用户的钓鱼攻击。

       

  为了防止网络钓鱼攻击,鱼叉式网络钓鱼、垃圾邮件钓鱼,安全专家提出了多种多样的对策。

  [1]意识:通过向用户宣传钓鱼攻击的各种知识,提高他们的安全意识,从而避免被钓鱼。

  [2]反钓鱼技术:通过谷歌浏览器的智能识别钓鱼网站功能和开启IE的Smart Screen筛选器功能来规避钓鱼攻击。但是当我们谈到定向的钓鱼攻击时,这样的拦截技术就显得无用武之地了。

  [3]双因子身份验证:通过3个因素来进行身份的认证,第一个为密码(password),第二个为电话,第三个为生物识别。有些公司会使用生物识别技术或者通过存储在USB设备上的有数字证书保护的智能卡来进行用户认证。

  但是以上的防护措施对于防护盗取OAuth攻击一点作用都没有!

  简单的介绍一下OAuth

  OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的。

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

      

  [1]申请授权

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

       

  如上图为钓鱼邮件伪装成Spotify官方,发起授权申请。

       

  上图为用户点击链接后,跳转到LIVE进行授权许可。

  [2]获取授权

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

        

  上图为用户未登录,网站会要求用户登录。

       

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

  [3]获取权限

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

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

       

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

  讲完了上面的基础知识后,接下来开始进入攻击阶段,分成以下几部分:

  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需要我们可控,并且一直监听所有的请求。

      

  上图为创建一个名为”Sappo”的应用。

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

        

  创建一个申请授权的链接(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要送到哪里去。

       

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

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

        

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

        

  就像上面你看到的,这是一个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。

        

  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为例,我们所申请的权限足以操作邮件服务。

        

        

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

      

  如果你要撤销此类授权,需要到Office 365的配置中,找到这个这个应用,然后点击取消授权。

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

  同样的,只要用户点击了YES后,就会给我们的应用授权,在我们获取到accessToken之后,就能以API的方式去请求用户的数据了。当然,上面也说过,虽然Windows Live的权限申请中有包含email,但是目前却是不可访问的,不过之后应该就会支持了。

          

          

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

        

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

  能够获取到什么样的数据取决于授权方设定了哪些权限允许被申请。现在最大的问题是,我们以前都是教育大家说钓鱼网站会通过让用户填入账号密码,然后盗取你的数据,但是现在的情况却不是这样子的。就像上面说过的,这次的OAuth钓鱼,授权是在Windows这个域名下的,是被浏览器认定为绿色标志的,而且也没有要求输入账号密码(指已登录的用户,未登录用户输入的账号密码也是登录该网站,于钓鱼网站无关),这与我们之前的认知完全不一样。在这样的情况下,即使是专业人士,也不一定能识别攻击。

  怎么办?从用户的角度来看,给应用授权的时候一定要十分小心,并且对给予应用授予的权限要仔细斟酌。从授权方来看,虽说方便但是还是要对应用所能申请的权限进行一定的限制,否则再方便的应用,没有了安全性,谁还敢用?另外,可以通过一些手段来对应用进行限制,比如当用户从总门户进来时,才可以进行解密然后浏览数据,而当api到来时,看到的数据都是加密的。

  这个是他们的演讲视频

  https://www.youtube.com/watch?v=NUT76cJZ4ko

                  微信群名称:华盟黑白之道二群     华盟-黑白之道⑦QQ群: 9430885

  • 上一篇Hack:

  • 下一篇Hack: 没有了
  • 网友评论
      验证码
     

    关注

    分享

    0

    讨论

    2

    猜你喜欢

    论坛最新贴