近期,曾通过链接重定向方法劫持川普Twitter的比利时黑客@securinti,发现了从Facebook查找注册用户手机号码的方法,我们一起来看看。以下是@securinti发表的博客:
上个月,我发现,通过Facebook可以轻而易举地获取到一些比利时名人和政治家的手机号码。目前,尽管这种方法貌似只对像比利时这样只有1120万人左右的小国家有效,但这种简单而有效的方法,却会让很多人的用户隐私受到影响。
当我把这个情况向Facebook的安全团队报告之后,却得到了一个失望的回复,他们竟然认为这根本不是一个安全问题。
但我觉得用户隐私至上,所以,在此我就公开来谈谈这个问题。
如果在Facebook设置中,其隐私一栏,其“谁可以通过手机查找到我”(Who can look you up using the phone number you provided?)是everyone状态,那么可能就能通过我的方法查找出你的手机号码。
这里存在两方面的问题:
首先,该选项的everyone状态是默认设置; 其次,即使你在个人资料中将手机号码设置为“个人可见”(Only me),但只要“Who can look you up using the phone number you provided?”是“everyone”状态,一样存在手机号码泄露问题。
“通过手机查找到我”本质上来说,是想查找你的人已经知道你的手机号码,而他可以通过你的手机号码查看到你的Facebook账户,但在这里的选项中,根本没有“only me”。
为了方便登录和找回密码,Facebook会不断地提醒用户绑定手机号码,但如果你的Facebook账号绑定了手机号码,那么你的手机号码可能就存在泄露隐患。
在这里我需要用到的是Faceook在2013年推出的搜索引擎Graph Search,当你在搜索框中输入一个手机号码之后,可能就会得到一个相关用户:
这样的方式,如果手工测试的话,费时又麻烦,而且在执行了1000次左右的搜索之后,Facebook就会作出查询限制;当然,即使是用botnet方式,估计Facebook也会有相应限制措施。
为了验证,我以查找比利时内政部长Jan Jambon的手机号码为例进行测试。
基于此,我必须找到一种批量测试电话号码的方法,测试的位数越少,获取的手机号码可能就越多,查找到目标的可能性也就越大。所以,可以使用Facebook的密码重置功能排除掉手机号码最后两位:
如04PPXXXX50,这就是一个典型的比利时手机号码,其中X为0-10的任意数字,PP为运营商代号号码。
而且,不同的电话运营商都有的固定的号段,如0468、047、048和049:
由于Proximus是比利时政府通讯业务的主要服务商,所以大部份政府部门雇员都使用047号段,所以我就专门写了个程序来枚举这个号段的目标号码,如有10000种号码组合的0479号段,以下是自动生成的号码表:
之后,向Facebook“好友查找”功能中导入以上生成的号码表进行查找,此时,找到了以”Jan”开头的大量用户,但他们都不是Jan Jambon。(在出现的Facebook反馈结果中,会提示说:You have 500 file_upload contacts on…,可以不用管)
之后,以这种方法,在继续尝试了0479号段之后,终于发现了目标账户使用的运营商代号和号段:0477,现在的号码为:0477XXXX50,目标范围逐渐缩小,目标号码就在这剩下的10000种组合中。
最后,需要解决的就是一些简单的数学问题了,我们先测试10000种可能中的一半号码,即0477 0000 50 — 0477 5000 50,可以看出目标账户出现在这个范围中:
这意味着目标账户手机号码的第5位只可能是0,1,2,3,4中的一位,所以再继续使用半分测试法进行,先对0477 0000 50 – 0477 2500 50进行测试,可以看到目标账户未出现在这个区间:
那么,最后就剩下0477 2500 50 – 0477 5000 50区间了,使用之前的方法,继续在1250、750、325、162和81区间进行半分测试,一直可以测试到40个号码,20个号码,10个号码到最终的5个号码,之后,发现目标。
其实如果最后剩下40个可能的号码,我们都可以手动进行验证
我尝试着将这个问题告知了比利时内政部长Jan Jambon,而他表示并不知道Facebook泄露了他的手机号码,只要不存在滥用情况,他自己也不介意。
另外,我们还与一家当地电台合作,在直播中拨打了一位比利时知名人士的手机,并告知他我们可以通过Facebook找出他的手机号码,我们就此聊得非常愉快,之后他便从Facebook上删除了绑定的手机号码。
有人指出,利用PayPal可以发现用户的后四位手机号码,所以如果目标用户把PayPal和手机绑定的话,利用以上我的方法,可以发现很多国家受影响的用户个人手机号码。有兴趣的话,可以自行尝试。
由于Facebook隐私安全项“who can look me up by phone(通过手机号查找到我)”的默认设置为“everyone”,所以你的手机号码都会存在泄露风险。
对于一些小国家来说,由于移动运营商提供的手机号码段空间范围较小,所以通过Facebook来查找目标用户电话号码相对来说比较容易。
Facebook在个人资料中提供的将手机号码设置为“only me”(对自己可见)”其实并没有什么用。
一些小国家绑定了手机号码的Facebook用户,如果没有修改默认的隐私设置,可能会受此问题影响。如果目标手机号码低于十位数,而通信运营商号段范围空间较小,以上测试方法就容易实现。
点击这里,检查“who can look me up by phone(通过手机号码查找到我)”查看设置,如果设置成了“Everyone”则受此影响。
这是一个很矛盾的问题,因为双因素身份验证功能需要用到手机号码,而目前这也算是一种比较安全的账户防护措施,所以可行的方法还是将“who can look me up by phone(通过手机号码查找到我)”设置为“only friends“(仅对好友可见)。