All Posts

那个上传的通讯录有毒!

近期,一则智联招聘员工倒卖个人简历信息的新闻在网上传播《5元一份!16万份简历被盗卖,“智联招聘”多名员工涉案》,个人隐私保护和网络信息安全的话题又一次被拾起。随着越来越多的个人信息电子化,信息安全的保护愈加重要,信息泄漏背后有人为的因素,也有信息系统建设安全设施不健全的因素。 前段时间看到一个黑产界在抖音进行精准营销的例子:抖音的推荐机制里,会经常请求用户手机的通讯录发现新用户或者把自己发布的视频推荐给通讯录里的新用户。黑产大佬呢,这时候,手握无数用户手机号码,做好手机号码归类,就可以尝试进行营销。举个例子,黑产手上有一批打着家长标签的手机号码,把这些号码导入到手机通讯录,用这个手机注册一个抖音用户,只发布育儿商品视频,那么这些视频会被精准的推荐给通讯录里的抖音用户(那些打着家长标签的号码),转化率也是可想而知。 现如今传说中的黑产界流通着各种不同线上线下渠道收集到的数据。你通过中介卖了一个房子,可能后面几年时不时会有电话打过来跟你说在哪有个新楼盘要不要考虑一下。你在汽车APP上尝试对车辆进行一次二手车估价,可能后面几个月你会不断收到不同地方打来的,询问你是否要卖车的电话。据网上消息报道,2018年年中,华住酒店集团有5亿条用户信息疑似遭到泄露,来自圆通和顺丰的总计十几亿条个人信息在暗网被出售。2019年央视3·15晚会也介绍了个人隐私信息通过手机App泄露的案例。 那么手机号都是怎么被泄漏的呢?除了一部分内部人员利益因素的有意售卖,或者不慎使用了恶意APP之外,有相当一部分数据是因为系统的信息安全建设不到位导致的数据泄漏。有存在系统漏洞被完整拖库的,也有接口保护不完善被恶意利用的,这里面也不乏拥有数亿用户的大平台产品。 举个大家熟悉的微博的例子。很久很久以前,国家刚开始执行社交网络实名制,各大社交网络平台的解决方案是让用户绑定手机号,通过运营商对手机号的实名登记完成。于是乎短时间各个人的微博账号都关联上了手机号。另一方面,为了进一步拓展社交关系网络,微博开始收集用户的通讯录数据,向用户推荐他还没有在微博上建立联系的通讯录里的好友。这个功能出发点挺好,然而刚刚上线那会,接口保护不完善遇到了可能产品设计者也没想到的功能滥用: 简单的,比如你有个陌生的未接来电,你想查一下是谁,利用微博这个功能可以这么查:你把这个手机号在通讯录里存一下,走一遍微博的上传通讯录&推荐通讯录好友功能,如果这个手机号也绑定了微博,微博就会给你找出来对应的微博账号。 再进一步呢,这是个通讯录的上传功能,天生就自带了批量查询属性,加上早期接口防范机制不健全(现已修复),于是乎前几年存着一种批量爬取微博手机号的漏洞: 如下图,我们知道运营商的手机号是分地区分配的,知道一个前缀可以查运营商和归属地,比如1817823这个前缀是中国电信分配给了广西柳州的手机号,符合这个前缀号段的号有1万个(手机号共11位),把这1万个号分成10个通讯录,每个通讯录1000个联系人,做十次通讯录上传&推荐通讯录好友的功能,便可以找出这1万个号码里对应的微博账号。在接口保护机制不健全的情况下,一个每秒只发10个请求的脚本(10 QPS对于微博这个体量的访问量来说是非常不可见的),相当于每秒完成1万个手机号的查询,跑一个小时便是3千多万个手机号,数量非常可观。 老实的微博大哥看着乐观的运营数据以为收集了好多用户通讯录,殊不知自己因为这种有毒的通讯录在一次次的往外吐着自己的用户数据。 系统漏洞并不偏好于产品的核心功能,实际上往往一些不起眼的地方的漏洞也会带来很大的损失,而这些不起眼的地方经常会是开发过程中最容易被忽视的地方。一些新的APP开发有时候为了赶时间上线,容易忽视这些不可见的安全方面加固的工作投入,以至于后期出现严重的问题。 防止接口被滥用的方法主要有几个方面: 通过接口签名和密钥保护(比如,白盒加密)的方法尽可能的防止签名方法和密钥泄漏被脚本实现调用; 加强输入参数的有效性校验,拒绝不符合期望的输入请求; 频次控制,对单个来源IP单个接口在短时间内的访问次数限制; 人机挑战,当检测到异常访问时,可以通过人机挑战的方式(比如输入滑块验证码,做基本算数题等)来要求调用方证明自身不是机器; 接口设计上仅输出必要的信息,避免过多的暴露信息而被利用; 线上无小事,防范于未然。