关于国内云服务器做微信认证全程 HTTPS 的情况下,数据仍然泄露,这种情况大家遇到过吗?(新版本,格式正确版本) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sxpcrazy
V2EX    信息安全

关于国内云服务器做微信认证全程 HTTPS 的情况下,数据仍然泄露,这种情况大家遇到过吗?(新版本,格式正确版本)

  •  
  •   sxpcrazy 2017-05-17 22:55:05 +08:00 5106 次点击
    这是一个创建于 3078 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这几天在做微信公众号的网页授权,发现一个惊天秘密,不知道是不是算是个秘密,搜了下发现没有人说这种事情,所以发出来看看是不是我的个例。

    UPDATE:下班前发的之前的旧主题,没想到发出来格式和我写的完全不一样,想编辑当时赶着回家就没弄,结果现在不能编辑了,只好把格式正确的重新发一遍了,已经看过挫格式的版本的辛苦你们了,此版本除了格式外,就是最后加了一些感想和疑问,其他没了,看过旧版本的可以直接跳到最后看附加的感想和疑问

    我先说下涉及的几个节点:

    • A:我在阿里云上的网站,主要用来给自己的服务做授权代理。( HTTPS )
    • B:我在阿里云上的网站,业务网站,通过调用 A 获得用户 openid 来做用户身份认证。( HTTP )
    • C:腾讯微信鉴权网站,参见:微信文档->微信网页授权(https://api.weixin.qq.com/sns/oauth2/)( HTTPS )
    • D:用户
    • E:恶意访问者(目前不明身份,只知道地址全部来自上海电信,去 abuseipdb.com 搜了下,大部分都有被报告过)

    事件流程如下:

    1. D--->B 进行业务请求,其中页面上有按钮进行身份认证,也就是登录
    2. 进行鉴权代理认证,A 认证成功会带一个 TOKEN 回到 B,B 会使用 TOKEN 去 A 获取 openid
     D |FORM POST (A) |HEAD LOCATION |其中带了 URL,此 URL 为服务器生成每次不同,位于 A 下的地址 (C) |微信认证成功 |HEAD LOCATION |这个过程微信服务器带了 CODE 然后回调 URL (A) |根据 CODE 获取 AccessToken 及 openid,此为服务器通过直接通信 C 获取 |为了安全,保存了 openid 产生了随机 TOKEN |HEAD LOCATION B 

    整个过程结束,本来很简单的事情。A 一开始不是 HTTPS 的,后来我为了安全想要将 A 部署成 HTTPS,配置证书的时候查看了下 Apache 日志,这一看不要紧,发现了惊天大秘密。

    当我进行过上述过程后,(A)生成的 URL 会被不明来历的(E)调用多次,请注意,这里 URL 是(A)每次生成的,里面带有随机串,而且这个地址直接通过客户端 REDIRECT LOCATION 到(C),这个过程都是 HTTPS 的,但是就算是这样的过程,仍然会有人知道这个地址是什么,这是在 iOS 的微信客户端里面发生的事情,区别是(E)使用的是 URL 原始地址,而不是带了 CODE 的(C)的回调地址,也就是我传递给(C)的 redirect_uri 参数,这个参数是绝对不应该被任何人知道的,但就是被知道了。这种调用会发生 1-2 次,经过多次测试只发现了最多 2 次,不知道是否还有更多次,使用的是不同的 IP 和多种 Agent

    怪事还有呢,这同时还会有很多(E)访问 B 的回调地址,也就是带了(A)生成的 TOKEN 的地址,当然了这个过程是不加密的,也没啥好说的,但同样证明了数据监听的存在,至少在电信的链路层有监听。

    我不知道这个事情大家有没有遇到过,所以在这里问问大家。

    (E)的 ip 列表和 agent 如下:

    101.226.33.223 - - [17/May/2017:17:44:20 +0800] "GET /test.php?token=a8312b4a-94de-4e8e-a2c6-5cd0401df139&type=wxOid HTTP/1.1" 200 942 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.4.6 (KHTML, like Gecko) Mobile/14D27 MicroMessenger/6.5.5 NetType/WIFI Language/en"

    101.226.99.197 - - [17/May/2017:17:44:22 +0800] "GET /test.php?token=a8312b4a-94de-4e8e-a2c6-5cd0401df139&type=wxOid HTTP/1.1" 200 942 "" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12H143 Safari/600.1.4"

    101.226.33.237 - - [17/May/2017:18:30:05 +0800] "GET /test.php?token=28a02056-6092-4f15-a38d-501400aa1fde&type=wxOid HTTP/1.1" 200 942 "" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12H143 Safari/600.1.4"

    101.226.51.227 - - [17/May/2017:18:31:05 +0800] "GET /test.php?token=293c9baa-8866-45d5-813d-b7845c4702df&type=wxOid HTTP/1.1" 200 942 "-" "Mozilla/5.0 (Linux; Android 6.0.1; OPPO R9s Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile MQQBrowser/6.9 TBS/036906 Safari/537.36 MicroMessenger/6.5.4.1000 NetType/4G Language/zh_CN"

    180.163.2.118 - - [17/May/2017:18:31:08 +0800] "GET /test.php?token=293c9baa-8866-45d5-813d-b7845c4702df&type=wxOid HTTP/1.1" 200 942 "" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12H143 Safari/600.1.4"

    101.226.66.172 - - [17/May/2017:18:31:05 +0800] "GET /api/v1/weixin/code?key=4d77d444-a07d-4c12-81b2-704f7959c4f1&type=oid HTTP/1.1" 404 3267 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.27.400 QQBrowser/9.0.2524.400"

    61.151.226.189 - - [17/May/2017:18:31:07 +0800] "GET /api/v1/weixin/code?key=4d77d444-a07d-4c12-81b2-704f7959c4f1&type=oid HTTP/1.1" 404 3571 "" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12H143 Safari/600.1.4"

    101.226.65.105 - - [17/May/2017:18:36:02 +0800] "GET /api/v1/weixin/code?key=2e3e977a-2009-4414-86c7-f3ceef4e5d8f&type=oid HTTP/1.1" 404 3535 "" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12H143 Safari/600.1.4"


    这种情况其他人遇到过吗?或者你们可以看看你们的微信认证服务器是不是也有这种问题存在。刚才想了下,这个事情应该是发生在客户端的网关这边,因为服务器间的直接 HTTP/HTTPS 行为都没有被重复发送过。

    如果真的是在电信网关做的 SSL 中间人攻击,不管是为了收集信息做坏事也好,还是为了监控信息也好。国内的 HTTPS 环境根本没有信任可言啊,感觉除了用 VPN 能安全点,在这样的基础环境下信息安全根本就是扯淡啊。

    10 条回复    2017-11-26 01:30:40 +08:00
    kmahyyg
        1
    kmahyyg  
       2017-05-18 00:11:31 +08:00 via Android
    mitn 目前没遇到 遇到过移动的 replay attack
    sxpcrazy
        2
    sxpcrazy  
    OP
       201705-18 00:44:18 +08:00
    @kmahyyg 也是 HTTPS 连接的情况?能具体说说嘛?
    imn1
        3
    imn1  
       2017-05-18 07:18:55 +08:00
    zoues
        4
    zoues  
       2017-05-18 08:36:27 +08:00 via iPhone
    中间有 HTTP 的过程
    yushiro
        5
    yushiro  
       2017-05-18 09:24:06 +08:00 via iPhone
    看了好几遍,也许理解了 lz 的描述。
    1、通篇没有看到有提到 state 参数,不知道楼主是否用到了。
    2、看似 A 站是负责所有微信授权的,那为什么要暴露给用户 D,我以为的流程不应该是 D-》 B ( B-》 A-》 B )-》 D,拿到微信授权 url 的嘛。等到授权成功,还是从 B 向 A 发起请求,这个过程 A 对用户是完全透明的,AB 之间可以内网通讯。
    3、“权鉴代理认证”是指 B 访问 A 需要的特殊认证,不通过的话 A 就不会被任何人调用?看日志这样的格式,我随便自己组几个 guid 发到 A,是否也能真实的产生结果?
    sxpcrazy
        6
    sxpcrazy  
    OP
       2017-05-18 10:54:36 +08:00
    @imn1 那个主题的情况和我的不太一样,毕竟他是存在外部链接的,而且最后也没讨论出什么结果。
    sxpcrazy
        7
    sxpcrazy  
    OP
       2017-05-18 10:55:31 +08:00
    @zoues 中间的 A C 的跳转都是 HTTPS 的,理论上不应该被任何除了客户端和服务器端的第三方知道通讯内容。
    sxpcrazy
        8
    sxpcrazy  
    OP
       2017-05-18 11:03:48 +08:00
    @yushiro
    1、A 生成的给微信的 redirect_url 里面已经带了类似 state 参数的随机字符串,并且用过一次就失效了,所以 E 的攻击对我并没有什么用处,我只是觉得这个现象太不正常了,看看其他人有没有遇到过,最好是有人知道是什么原因造成的,如果真的是 HTTPS 被中间人攻击泄露内容,这个网络环境 TTMD 差了。
    2、A 比如暴露给 D 的原因是,微信只允许一个域名可以进行网页授权,授权必须通过微信客户端内部访问 C 来做到,C 也只能跳转到 A,这是 OAuth2 基本的规则,但我们的业务会有很多域名,不能每个都去申请新的公众号,所以用 A 来做统一的网页授权再跳回到 B 业务。
    3、B 访问 A 是通过 A 带回来的 TOKEN,相当于一个临时密钥,每一个密钥只对应唯一的一次鉴权,使用一次立即失效,随便自己组的 UUID 在 A 并不存在,所以只有 404,日志里面我已经将我自己的 IP 日志部分去掉了,因为我自己是第一次访问,都是 200 成功的,后续的非法请求全部失败了。
    sxpcrazy
        9
    sxpcrazy  
    OP
       2017-05-19 09:35:57 +08:00
    这里还真是冷清啊,没人关注信息安全吗?难道这问题都没人遇到过?我发现只要不做微信认证,做其它的访问都不会有 replay attack,难道是 微信 里面的搞得鬼?
    nmdx
        10
    nmdx  
       2017-11-26 01:30:40 +08:00 via iPhone
    忽然看到这个主题。。。E 是微信强制转码入口。。每个在微信发来的白名单以外的链接都会被强 x
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2361 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 90ms UTC 15:55 PVG 23:55 LAX 08:55 JFK 11:55
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86