来源:Alfred数据室
日前,疑似“陕西普通话成绩查询网(sxpth.cn)”由于网站的程序员把所有考生信息(包括照片、身份证、准考证号、院校等)通过硬编码的方式直接写进了网页源代码里,导致大量考生信息泄漏。
该网站在之后被查明是一个假冒官方的网站。不过这种 “Serverless无服务器”的架构方式受到了程序员的群嘲,也引起了大众对于个人数据泄漏的担心。
虽然以上这种低级的错误,相信绝大多数稍有水平的程序员都不会犯。然而,目前确实还存在着很多由于开发者数据安全意识不强造成的数据泄漏,其中最明显例子的就是在GitHub上。
今年4月22日哔哩哔哩源代码GitHub泄漏门估计大家都还记忆犹新,更久远一些的Uber 5700万司机与乘客数据泄漏,估计大家也还有印象,但是如果你以为GitHub上只会由于程序员的不小心偶尔泄漏某些大公司的源代码或者数据,那你就大错特错了。
为了让大家了解由于开发者的数据安全意识不强(很多时候是无意的)而导致的在GitHub平台上的数据泄漏,我们对此进行了一番研究,得出的结果可谓是触目惊心:你的身份证、住址、电话等个人隐私信息,邮箱账号、密码、银行卡号等敏感信息,个人或企业的数据库,可能都在GitHub上以公开信息的形式裸奔。
一、什么是GitHub
GitHub是目前最大的软件源代码托管平台,类似于代码的云仓库。简单来说,假如开发者小A开发了一款坦克大战的游戏,他能够最终靠GitHub把这款游戏的源代码开源出来,供全世界的开发者参考和学习。
当然,为了这款游戏更完善,全世界的开发者也能够最终靠GitHub提出自己的修改版本,大家一起完善这款游戏。GitHub由于本身具备代码开源共享的属性,吸引了超过四千万的用户,保存了超过1亿个代码存放的仓库。
代码开源共享促进了开发者的学习和交流,也成为了开发者的一大主流价值观。大家越来越愿意把自己写好的代码文件提交到GitHub上供其他人参考和学习,然而在提交的过程中,很可能就无意识地把一些代码中的敏感信息和文件一并共享了出来。
二、个人邮箱账号密码泄漏
开发者不小心共享出来的东西有哪些呢?最常见的就是各种账号和密码,特别是通过硬编码方式写入代码文件里面的个人邮箱账号密码。这些提交到GitHub平台共享出来的账号密码,任何人通过关键字搜索都可以获取到,相当于直接公开。
我们在GitHub通过关键字搜索发现,包含网易、QQ、新浪、Gmail、Outlook、Hotmail、Yahoo等各种邮箱的账号和密码在GitHub平台上都存在公开泄漏。以下是通过关键字搜索得出的各主流邮箱账号和密码存在于代码文件中的数量:
可见单单Gmail就存在1350.9万个,当然这1350.9万个结果当中,有些只是代码文件中包含了关键字,有些账号对应的密码已被安全意识较强的开发者提交GitHub前就删除掉了。但是如果只按5%的账号密码有效比率来估计的话,这里面列出来的邮箱中,就存在139万个邮箱的账号密码存在公开泄漏。
三、个人简历信息泄漏
程序员都比较喜欢鼓捣属于自己的个人网站,在这些个人网站里面通常会放上自己的介绍或者简历,以便获取更好的机会。同时,他们之中有些人也比较喜欢把自己的建站代码开源到GitHub上。这样一来,在GitHub搜索跟“简历(resume)”相关的关键词时,无数份程序员的简历数据就出来了。
这些简历里面,不但包含了个人的姓名、电话、微信号、邮箱,还包括生日、学历、毕业院校、工作经历、所在城市等。虽然很多人感觉自己的这些信息被人看到的几率也不高,但是如果被有心人士批量获取下来的话,那么下回接到能够准确说出你姓名、生日和经历等对你个人隐私信息了如指掌的推销电话的时候,就不要太惊讶了。
四、身份证号、家庭住址等个人隐私信息泄漏
看到这里你可能会想:前面两项的泄漏都集中在一些程序员的身上,可能跟我们关系并不大呀。客官且慢,请往下看。
在提倡网络实名制的今天,有些网站注册的时候动不动就要填自己的身份证号码进行实名认证。但是,一些网站对于个人隐私信息的保护却做得不怎么好。当我们使用跟“身份证”相关的关键字进行GitHub搜索的时候,结果出现了大量包含姓名、身份证号、家庭住址等个人隐私信息的数据表。这些个人隐私信息明显是需要被严格加密保护的,却被分享到了公开的平台上。
类似于以上的这些被开源共享出来的个人隐私信息数据数不胜数。有些数据表除了个人隐私信息之外,通常还包括了更多与个人有关的详细信息。在我们使用关键字进行搜索期间,在这些开源文件中还意外发现大连市某知名企业董事长及高管的身份证、住址等个人隐私信息都被公开了。
我们再往深处想一下,这些涉及个人身份证、家庭住址等敏感信息的数据会被开源到GitHub公开出来,如果数据持有方是企业的话,说明有些企业对个人隐私信息数据严重缺乏管理和保护机制,如果数据持有方是个人的话,抛开数据安全保护意识不说,这些个人数据来源于哪里,也是一个大问题。
再从另一方面看,这些能被不小心开源到GitHub的个人隐私信息数据其实只是个人隐私信息数据中的冰山一角,可以想象这背后的冰山有多大。可能你我提交的个人隐私信息,早就在互联网上被转手、交易、裸奔好多回了。
五、卡号和密码泄漏
以上都是关乎个人隐私信息的,可能你会“破罐子破摔”地觉得已经没什么所谓了,反正自己的个人隐私信息早就已经在裸奔了,又不涉及具体的利益。客官且慢,请往下看。
在我们使用跟“卡号”相关的关键词进行GitHub搜索的时候,得出了大量的卡号以及对应的密码搜索结果。这里面的卡包括各种购物卡、礼品卡、充值卡、各种平台的会员卡等。里面甚至出现了银行卡卡号和密码,而且密码竟然几乎都是明文密码!
六、API秘钥、云服务器、云数据库泄漏
当然,2019年的数据泄漏,裸奔的不只是你的个人隐私信息,还有各种API秘钥、个人和企业的云服务器秘钥、个人和企业的云数据库地址和密码。
API秘钥泄漏的话,可能被别有用心的人窃用,导致高额的服务费。云服务器、云数据库泄漏的话,可能被别人非法登录,轻则被获取到云服务器、云数据库里存储的个人或企业的全部数据,重则被恶意删库。有时候真的不是黑客太狡猾,而是开发者太大意了。
为了弄清楚开发者开源到GitHub上的各种秘钥泄漏有多严重,来自美国北卡罗莱纳州立大学的一个团队进行了深入的研究,他们使用近六个月的时间(2017年10月31日至2018年4月20日)扫描了GitHub上13%的代码库,总共包含数10亿个代码文件,发现超过10万个代码库泄漏了秘钥,每天有数千个新的秘钥在泄漏。[1]
这些秘钥,来自于Twitter、Facebook、亚马逊、谷歌、YouTube、PayPal等等主流的平台。研究显示,6%的秘钥在上传到GitHub后一小时之内被删除掉,说明只有6%的开发者马上意识到了这样的一个问题并采取了措施。在上传到GitHub 1天之内,只有12%的秘钥被删除掉,16天之内,只有19%的秘钥被删除掉,这说明1天之内没有删除掉的秘钥,基本上都会在GitHub上长期存在,长期公开泄漏。
这说明,绝大部分提交秘钥到GitHub的开发者是并不知道、事后也没有意识到自己把秘钥通过这种方式公开了的。
该研究还把这些秘钥所在的文件拓展名进行了分类,看这些秘钥都藏在哪些类型的文件里。结果表明,超过50%的秘钥都藏在专门用于储存秘钥或者凭证的文件里(如拓展名为。key的文件),接近30%的秘钥嵌在源代码文件里(如拓展名为。py的文件),约8%在数据表里(如拓展名为。csv的文件),约2%在配置文件里(如拓展名为。conf的文件)。
这说明,大部分的秘钥泄漏的原因是把秘钥直接写死在源代码里面。莫非真的应了那句话:最危险的地方就是最安全的地方?
该研究还通过假设检验的方法证明,把秘钥提交到GitHub这种泄密方法,跟开发者自身的经验、GitHub使用时长并无太大关系。也就是说,这是一个新手、老手都可能犯的错误。
由于该研究涉及的主要是美国的企业,那么中国企业的云服务器、云数据库等,是否也被无意中公开泄漏了呢?我们在GitHub通过关键字检索发现,这一情况在我国有过之而无不及,包括阿里云、腾讯云、百度云在内的国内主要云服务提供商,其提供给个人或者其它企业使用的云服务器、云数据库都存在公开泄漏。
要知道,这些公开了主机、端口号、用户名及密码的云数据库,任何人利用这些信息都是可以连接上的,跟裸奔没有区别。一旦被别有用心的人获取到,数据库里面存储的包含企业、客户、用户个人信息的所有数据表、所有详细的经营数据都会处于危险之中。
这些云数据库在GitHub上的数量可能有多少呢?以MySQL云数据库为例子,我们通过关键字搜索了阿里云、腾讯云、百度云潜在泄漏的MySQL云数据库数量:
最多的是阿里云,存在31128个潜在泄漏的MySQL云数据库。如果按照5%的有效比率保守估计的话,都存在超过1678个个人或者企业的MySQL云数据库存在泄漏!
七、现在能怎么办呢?
看完以上的情况,真是让人不寒而栗。2019年的数据泄漏,个人数据、企业数据都在裸奔,而企业数据里面又可能包含大量的个人数据。那现在能怎么办呢?
Alfred看来,这事儿必须从政府加强数据保护立法、企业加强数据保护制度建设、开发者加强数据安全意识培训、GitHub平台加强提交前敏感信息检测提醒四方面着手。
加强数据保护立法,是从根源上解决数据保护问题的方法。欧盟2018年5月生效的GDPR(《通用数据保护条例》)是一个很好的例子。我国最近颁布的《密码法》也是一个很好的开端。
企业方面需要加强数据保护制度建设,明确数据的获取、操作、管理流程和相关权限,对开发者做好数据安全意识培训。毕竟一项由IBM Security发起的Ponemon研究所2019年7月公布的第7次资料外泄的调查报告数据显示,数据外泄近50%来自内部。[2]
那么对于普通人而言呢?这篇文章警示着大家要好好保护好自己的个人隐私信息,别用个人隐私信息换取一时的方便。
八、声明
本文所引用的所有数据或例子,均为GitHub上已公开的数据。为避免数据进一步泄漏,我们把所有敏感的信息都打上了马赛克。Alfred数据室并未获取和使用这些密码、秘钥,并且已尽可能通知相关代码仓库的上传者。
引用
[1] Michael Meli, et al。How Bad Can It Git? Characterizing Secret Leakage in Public GitHub Repositories。 Network and Distributed Systems Security (NDSS) Symposium, 2019。
[2]Ponemon Institute。Cost of a Data Breach Report 2019.IBM Security, 2019。