对微博被恶意加关注问题的一点分析和猜测

2017-10-11 02:33:22 +08:00
 mornlight

起因

我是微博重度用户。

在国庆节前后几天,我遭遇了一轮又一轮的被动加关注问题,刚开始以为自己不小心泄露了密码,因为之前很长时间我都没有遇到过这类问题,先从自己身上找原因。然后就是既定流程:修改密码 -> 在安全中心退出所有已登录设备 -> 清空所有第三方授权。

然后,好像并没有什么用。

很多人认为是微博内部故意设计了一套策略,强行给用户塞关注来赚黑心钱,但我认为这个说法站不住脚,微博这两年市值和营收一直涨,不需要冒风险捞这种钱。

于此同时,我看了我身边的一些人身上也发生了同样的问题,以及 V2EX 里也有多个人发帖:

微博还会自动帮你关注人的?

新浪微博被 wt.weidaogou.com.cn 等垃圾推广号包围了

微博自动关注一些垃圾营销号, 没有办法解决吗?

大家惊讶地发现彼此遇到的可能是同一波人,被强加的关注有很高的重叠率,套路也都类似,要么是发表各种 copy 来的文章、视频不知名营销号,要么就直接脸都不要直接给你发硬广。

思考

镇定下来,再次思考一下,到底哪个地方出了问题?哪个地方能出问题?

从技术实现上看,能给我的微博帐号加关注的,通常只有三个途径:1. 我的帐号被盗,能直接被别人登录上去。2. 我使用的第三方客户端等可以通过微博开放平台走 OAuth 拿到 access token,然后权限被滥用。3. 我在浏览器上使用 Web 版微博时,cookies 被泄露。这个可能性最大,因为很早就听说过做微博黑产的,和运营商合作后劫持微博的流量,给用户塞关注,挣钱不要太容易。

我首先排除掉了盗号这一途径,一方面我修改后的密码是 1Password 生成的随机密码,没可能被碰撞或猜出来,另一方面我登录时刻意看过是 HTTPS,可以认为这个流程中不会泄露密码给其他人。我的电脑使用习惯良好,中木马的可能性也几乎没有。

然后考虑第三方授权的问题,我在第一次修改密码清空所有授权后,再次把授权给出去的只有我 Mac 上的客户端 Maipo 和手机上的几个微博客户端:WeicoPro,Cosmos,微博国际版,微博官方版。

微博官方版和国际版可以信任,排除掉,然后看 Weico 和 Cosmos,接上 Charles,抓所有的请求下来看,没有发现它们会往其他地方上传敏感信息,微博的 api 接口也是 HTTPS。

解不开 Maipo 的 HTTPS 请求,尴尬。难道这个客户端里 Pin 了公钥?有点不科学。先不管了,反正走的是 HTTPS 就行。只是有一个 http 请求不太正常,但这是授权成功后发往开发者服务器的请求,里面即使带了 access_token 其实也没关系,因为其他人没有开发者手上的 secret key 啥也干不了。

我目前在使用的这几个客户端要么官方,要么老牌,要么开发者是我信任的,几乎可以排除它们的嫌疑。

控制变量,缩小范围

那么,只剩第三种可能了。我用的 Web 版微博在某个地方泄露了 cookies,导致我的帐号被临时性盗用。但是我作为一个好歹有一些信息安全基础的人,在今年 8 月份微博主站上了 HTTPS 后,就一直用的 HTTPS,哪里还能被偷到 cookie 呢?

想不明白,那先放一放,做点其他的尝试:再次走一遍修改密码取消授权的流程,然后只在 Web 版和官方 App 上使用微博,其他地方一律不再登录。

这样尝试了 3 天后,我没有再遇到加关注的问题。

和我预期的不一致,这好像是在刁难我胖虎了。

看起来这事和微博 Web 版没有关系?我错怪 Web 版了?

那就把非官方客户端一个个恢复使用,首先是 Mac 上的 Maipo

使用 Maipo 一天后,加关注的问题又来了。看起来 Maipo 会引入这个问题。

可是 Maipo 的开发者是微博员工,他是最不可能在背地里利用微博干坏事的,而且从其他人的反馈看,他们没有使用 Maipo 也遭遇了这个问题。我无法把原因归结到 Maipo 身上。

又思考了一天,以前 debug 代码的经验突然给了我另一个想法:Maipo 的某些行为会触发 Web 版微博泄露 cookie,这不是单方面的谁的问题,而是两者同时存在时才会产生的问题。

找了一圈,Maipo 里能和 Web 版产生关系的,我只能找到一个操作:View on Weibo.com

这个是在 Maipo 里对某一条微博进行的动作,执行后会在浏览器里打开这条微博的链接。开启浏览器的抓包,尝试做一次 View on Weibo.com

我发现了什么! Maipo 打开微博的链接是 HTTP 的,虽然访问后会 301 跳转到 HTTPS,但这个 HTTP 请求仍然会携带上浏览器在 weibo.com 域下的所有 cookie

在 Charlse 里看到请求头的那一瞬间,好像所有的谜团都解开了一样。

结论

那么,这一切都可以有一个合理的解释了:

微博黑产在运营商线路上劫持 http://weibo.com 的 HTTP 请求,窃取用户 cookie,然后通过 cookie 给用户加关注。

虽然微博主站已经上了 HTTPS,但用户登录后的 cookie 没有设置 secure,导致用户访问 HTTP 链接时虽然会被 301 到 HTTPS 上,但也会携带有效 cookie 出去,被运营商劫持。

清除授权、修改密码都没有用,只要你登录后在某个特定场景访问到了 HTTP 的微博链接,那就很可能中招。只是在微博 Web 版站内的话没问题,因为默认都是 HTTPS 了,但是你的浏览器书签、别人发给你的链接、旧的外链、其他应用生成的链接都可能还是 HTTP 的。

需要注意的是,以上的结论来自于对比实验和技术可行性分析后的猜测,没有任何的实锤证据可以证明结论的正确性。微博官方应该可以根据访问记录查出来,我没法查,只能合理假设。

防御措施

不指望微博会给 cookie 设置 secure 了或者上 HSTS ( HTTP Strict Transport Security ) 了,他们有业务上的考虑。但是作为用户,肯定还是有办法解决问题的。比较彻底的做法是在家里路由器层级上自己劫持微博的 HTTP 请求,直接 301 到 HTTPS,比较 geek。

更简单的做法是,自己往 Chrome 浏览器的 HSTS 列表里加入 weibo.com 域名:

在 Chrome 里打开 chrome://net-internals/#hsts

Add weibo.com

Query weibo.com ,能查询到就可以了。如下图:

weibo.com 加到 HSTS 里后,Chrome 再遇到 HTTP 的微博链接,会直接在浏览器内部就跳转到 HTTPS,请求不传到外面去,可以保证通讯安全。然后,你就不要在其他的浏览器或电脑上登录微博了。

我平时用的都是 Chrome,Safari 我没找到哪里可以自己添加 HSTS,Firefox 好像可以修改配置文件夹里的 SiteSecurityServiceState.txt 来实现,我没试。

被这个问题困扰的同学可以试试看,我这边是有效的,不知道其他人情况如何,欢迎反馈结果。

12153 次点击
所在节点    微博
58 条回复
ryd994
2017-10-11 02:37:56 +08:00
Set-Cookie: mycookie=somevalue; path=/securesite/; Expires=12/12/2010; secure; httpOnly
onlyhot
2017-10-11 05:21:07 +08:00
虽然不用微博,但是文章很赞!
Trim21
2017-10-11 05:29:12 +08:00
套路真深啊……
赶紧设置个 hsts 去
carlclone
2017-10-11 06:00:31 +08:00
这很 geek
SnowzTail
2017-10-11 06:33:57 +08:00
感谢!
des
2017-10-11 07:39:10 +08:00
改密码触发了规则?

最好的方法难道不是用 https 注册一个账户,然后不登录,半年之后再来看嘛?
AdamChrist
2017-10-11 08:05:45 +08:00
厉害了...点赞
zirconium
2017-10-11 08:12:16 +08:00
点赞(。ò ∀ ó。)
sadpast
2017-10-11 08:15:38 +08:00
别骗自己了,我的账户没有任何授权,也没有被盗,放了几个月没有用依然如此。
stanjia
2017-10-11 08:38:33 +08:00
清空状态,又上角退出登录, 删除收藏 和历史记录。
你会发现你的世界清净了许多,再也不用为哪个明星和哪个明星结婚的事儿操心了.
CEBBCAT
2017-10-11 09:10:49 +08:00
真,真的吗?话说微博为什么不出面澄清呢?
lcatt
2017-10-11 09:16:18 +08:00
虽然不用微博,但是文章很赞!+1
x86
2017-10-11 09:23:51 +08:00
指不定就是自己卖粉,又不是没做过这事
tghgffdgd
2017-10-11 09:33:53 +08:00
这没法解释连我自己都没办法关注的情况下被关注。

https://www.v2ex.com/t/396491
learnshare
2017-10-11 09:51:31 +08:00
有一定的道理,但不一定是这个原因

1. 这波关注是大范围的,可能微博主动采取了措施,或者相关责任人看见新闻停手了;
2. 有内鬼卖刷粉服务;
3. 微博测试一下新功能。
Hilong
2017-10-11 09:56:21 +08:00
从来没用过 web 版的,只用官方手机 app 的也出现这种情况。这种是因为什么呢
mengyaoss77
2017-10-11 10:06:56 +08:00
分析的很厉害,看看楼下怎么说吧。
大部分人还是不太信任微博的,谁都不嫌钱多吧。
terrytw
2017-10-11 10:14:36 +08:00
这个还要讨论和思考么
微博从创立的一开始就会帮助用户自动关注各类垃圾账户
把长期未登录的账号做成官方僵尸号
mornlight
2017-10-11 10:27:12 +08:00
@terrytw 是的,长期未使用的帐号可能变成官方僵尸号拿去充粉,这个我觉得微博做得出来。这些天中招的很多是活跃帐号,不太相信是官方故意的。
mornlight
2017-10-11 10:28:30 +08:00
@des 不活跃帐号可能是另外的问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/396631

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX