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

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 来实现,我没试。

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

12189 次点击
所在节点    微博
58 条回复
ctt
2017-10-11 15:16:46 +08:00
自从微博全站支持 https 之后,我登出了一段时间,然后再开始只用 https 就没被搞鬼过。
ittianyu
2017-10-11 16:24:55 +08:00
我表示几年没用微博了,今年四月份那会,突然收到异地登陆的通知,2333,怎么看都不是 cookies 问题,而且也有 V 友碰到同样问题,难道是密码泄漏?有点担心这个,密码被我改成 随机码了
mornlight
2017-10-11 16:38:02 +08:00
@ittianyu #42 也有被异地登录的情况,这个目前没找到原因。
hjc4869
2017-10-11 16:39:48 +08:00
微博自己是干过这种事情的,而且不止加关注,还会转发+点赞,之前就曝光过有博主人都死了几年了账号还在转发蓝 V 的推广。
不过这个只是针对 inactive 的账号,针对 active 的账号的更有可能是楼主这种情况,被劫持了。
mornlight
2017-10-11 17:05:21 +08:00
@hjc4869 是的,对于非活跃帐号的问题我没有足够的信息,无法做出判断,如果微博自己做手脚我也不意外。对于每天都登录的这种活跃帐号我更倾向于认为有人在中间搞鬼。
caonan
2017-10-11 17:57:26 +08:00
这是今天看过最爽的一篇文,解开谜底的那一刻心脏猛跳,楼主犀利耶!
happywowwow
2017-10-11 22:40:04 +08:00
`被运营商劫持`
根据都没看到石锤证据也能说这话
有罪推论满分
mornlight
2017-10-11 23:32:25 +08:00
@happywowwow #47 你再看看标题。
dangge
2017-10-12 21:48:48 +08:00
Maipo 用户, Share (一个第三方安卓微博 app )用户,最近一个月没有活跃,偶然上了一次微博看了下发现被加了一页关注.
改过一次密码后用 chrome 登录了手机网页版微博.
同时授权了 Maipo 客户端后,第二天重现自动关注.
不做结论,只说现状.
哦对了,上海电信.
mornlight
2017-10-12 22:10:28 +08:00
@dangge #49 我和我认识的另一个朋友按这个帖子里说的思路处理以后,这几天都没有再出现加关注的问题。同样上海电信。
to2false
2017-10-16 09:13:47 +08:00
只用官方客户端和 web 版的表示两天之内给我关注了三波
livc
2017-10-24 18:49:57 +08:00
所以应该咋办?我给 Chrome 添加了 weibo.com 的 HSTS,其他终端需要退出登录吗?使用第三方客户端怎么办?
mornlight
2017-10-25 13:12:53 +08:00
@livc #52 稳妥起见,加 HSTS 后,修改一次密码,所有终端重新登录一遍。正常使用没关系。
livc
2017-11-03 15:41:38 +08:00
@mornlight #49 那其他终端重新登录是不是要用流量登录?用 Wi-Fi 的话还是被劫持吧?
mornlight
2017-11-03 16:04:04 +08:00
@livc #54 仅有登录操作没关系的。
88080398
2017-12-16 12:15:34 +08:00
新注册的手机号,用的是 emore 第三方微博,一直没有被强行加关注过。

知道昨天在 V2 看到某个帖子介绍 m.weibo.cn/beta 的时候,用安卓浏览器登录了一下,结果今天早上起来被强加了一个关注,删除之后,中午发现又被强加了两个关注。

在登录历史里发现了两个在安卓设备上的 moliza 和 chrome44 的登录记录,现在已经退出。
mojorrisme
2020-02-27 02:19:06 +08:00
作为在微博灰产边缘徘徊几年的小辣鸡!!!!觉得楼主分析很正确
mornlight
2020-02-27 09:59:34 +08:00

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

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

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

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

© 2021 V2EX