800 万 GitHub 的用户信息是如何从 GeekedIn 的 MongoDB 中泄露的

浏览: 42 发布日期: 2016-12-10 分类: mongodb

首先,我们在文章的开篇对此事做一个清晰的说明:该事件并不代表GitHub的任何安全漏洞,仅仅是由于其他服务对GitHub网站数据的不恰当的抓取,无意中暴露出另一个服务的漏洞。我的数据,也可能是你的数据,如果你处在软件行业中,以及数百万人的数据被泄露。

星期六,在数据交易场景中弹出了一个字符,并给我发送一个名为geekedin.net_mirror_20160815.7z,大小为594M的文件。该文件貌似是一个我以前没听说过的网站——GeekedIn——从8月份到现在的一个MongoDB的备份文件。界面显示如下:

稍微检索一下,可以看到他们的总部位于巴塞罗那,是一个服务于开发者和雇佣者的专业技术平台。进一步检索,发现他们在波兰运行了两台MongoDB实例:

第二个IP地址是网站本身正在运行的IP地址,所有的点表示开始加入。直到我发现自己的数据,我才意识到发生了什么。这是我发现的信息:

{
    "_id": "5cb692d1-8fd5-44d7-8639-e680fb2b30f41454836589580",
    "_class": "com.geekedin.domain.entities.mongo.EDeveloper",
    "scores": [],
    "libraryScores": [],
    "compactLibraries": [],
    "name": "Troy Hunt",
    "email": "troyhunt@hotmail.com",
    "location": "Sydney",
    "country": "AU",
    "city": "0fab4eb2-c5d5-459d-a7c5-c50b845c12da1448621413411",
    "score": 0,
    "scanCompleted": false,
    "socialNetworks": [
        {
            "_id": "https://github.com/troyhunt",
            "socialNetwork": "other",
            "url": "https://github.com/troyhunt"
        },
        {
            "_id": "troyhunt",
            "socialNetwork": "github",
            "url": "https://github.com/troyhunt"
        },
        {
            "_id": "http://troyhunt.com",
            "socialNetwork": "other",
            "url": "http://troyhunt.com"
        }
    ],
    "locationPoint": {
        "x": 151.20732,
        "y": -33.86785
    },
    "yearsOfExperience": 0,
    "otherLocations": [],
    "extraEmails": [],
    "locateTryFailed": false,
    "locateTried": true,
    "beingLocated": false,
    "remoteLocateTried": true,
    "blogFindTried": false,
    "contactIsPossible": true,
    "freelancer": false,
    "compactLibrariesComputed": false,
    "compactLibrariesBeingComputed": false,
    "followersFound": false,
    "emailAddresses": [
        {
            "email": "troyhunt@hotmail.com",
            "type": "primary"
        }
    ]
}

下面是GitHub的引用。当我查看我GitHub的个人资料时,我确实有暴露了我的电子邮件地址以及位置。但我的个人资料实际上是相当稀疏的,像这样:

{
    "technology": "06405e50-a3b3-471d-a50d-17fc2cb4a9181448621393946",
    "library": "56623985e4b0cab0586c4d09",
    "score": 0,
    "lastCompute": {
        "sec": 1449279293,
        "usec": 262000
    },
    "endorsements": 0,
    "version": "0.3-SNAPSHOT"
},
{
    "technology": "06405e50-a3b3-471d-a50d-17fc2cb4a9181448621393946",
    "library": "56623e9ae4b0cab0586cb344",
    "score": 0,
    "lastCompute": {
        "sec": 1449279293,
        "usec": 262000
    },
    "endorsements": 0,
    "version": "0.1"
},
{
    "technology": "06405e50-a3b3-471d-a50d-17fc2cb4a9181448621393946",
    "library": "56623ab1e4b0cab0586c64ab",
    "score": 0,
    "lastCompute": {
        "sec": 1449279293,
        "usec": 262000
    },
    "endorsements": 0,
    "version": "1.0.0"
},
{
    "technology": "06405e50-a3b3-471d-a50d-17fc2cb4a9181448621393946",
    "library": "56623ee2e4b0cab0586cb624",
    "score": 0,
    "lastCompute": {
        "sec": 1449279293,
        "usec": 262000
    },
    "endorsements": 0,
    "version": "0.2"
}...

 

这个只是整个资料文件的一个小的快照,最终的文件要比我之前展示的要大好几百倍。上述数据存储在一个叫“scores”的集合中,显然,这是用户技术使用资料中的一部分。在这里,我不再深入更多的细节,因为我将告诉你如何快速的获取数据,这样你就能看到第一手数据的内容。另一个我不想深入更多细节的原因是虽然这是从GitHub公开的用户资料获取的数据,但我觉得像这样把用户资料聚齐起来是不对的。我不知道GitHub是否有暴露大批量获取这些公开资料的方式(例如,通过API),但是坦白的说,我开始闻到一点坏的味道了...

在我开始谈论该泄露事件之前,还有最后一件事:当我分析该数据集,发现了近820万个不同的电子邮件地址。这也是我所预期的GitHub上的账户数,但是有点奇怪的事情是有710万个邮件地址是以".xyzp.wzf"结尾的。当我更深入的对其进行分析时,我意识到这是GitHub账户未对外公开的电子邮件地址。例如,我的同事Niall Merrigan个人资料没有邮件地址,所以在数据集中他的邮件地址用 niallmerrigan@github.xyzp.wzf 表示。在该数据集中还有15000个@bitbucket.xyzp.wzf地址,虽然这部分地址占的百分比很小,但是很明显,它们是从多个数据源中获取的。

继续,鉴于我目所看到的数据,我决定直接联系GitHub,毕竟这些数据与他们有关,即使这些数据是从另一个服务泄露出来的。GitHub在处理安全事件方面有很好的跟踪记录,这不仅仅是他们有很丰富的经验,而是在他们处理这些问题的方式。例如2013年的40000个独立IP的暴力攻击以及(非常具有创造力)对中国Great Firewall(国家防火墙)的攻击。几个小时后,我与他们的一个联系人取得了联系,我首先建议他们考虑GeekedIn的做法是否是可接受的?其次,对于该事件,他们是否需要做任何的沟通。我关心的是,这里有一份巨大的“GitHub数据”(加上引号是因为虽然该数据是GitHub的,但是却不是来自于GitHub),我不想弄错数据的来源。特别是,如果该数据在交易者之间流通,那么只要有机会,就有人跳出来说:“嗨,我有GitHub泄露的数据”。

我们最终采取的方式是GitHub和我都直接到单独与GeekedIn联系。不过这有点困难。因为他们的网站上的Twitter帐户看起来是死的,网站上的联络单似乎也没有反应。我试图通过Twitter找到一个联系人,但是没起到任何作用,除了指向他们的网站的详细信息和antiliasoft.com网站的版权,其他都从谷歌返回404。 最后,我在同一个域名下找到了一个电子邮件地址,并且在昨天得到了回应,他们承认了该事件并承诺会保护数据。

我咨询GitHub,我是否可以在这篇文章分享该事件的某些东西,他们给我的反馈如下:

第三方经常会出于各种原因(例如研究或归档)抓取GitHub公开的数据。我们允许这种类型的抓取,只要是他们使用用户的个人信息仅限于与GitHub提供信息的相同目的。但是出于商业目的的信息抓取则违反了我们的隐私声明,我们不允许这种类型的使用。

所以很明显,这是不对的:

由于在某些数据中公开了自己的信息,但是我还是不希望我的数据以这种方式销售。再次说明,是的,你可以公开的获取每个人的基本信息,但是,从我的亲朋好友的一致反馈都是:共享这些信息“感觉是不对的”。这是错误的,不仅仅是商业化了我们信息,还包括这种不需要密码,就直接通过MongoDB将数据漂浮在数据商业圈中行为。到目前为止,这些数据可以HIBP中检索到。不过这次我做了一点小小的改动,这使得原始的数据变得可用。现在,我想谨慎处理这件事,因为这不是我通常做的事情,也不是我希望很快再做这样的事情。通常情况下,我们无法将源数据直接加载到HIBP中,我已经口头批评任何服务,因为这违反了服务本身。特别是,任何存储纯文本凭证都是非常鲁莽的,不幸的是,有很多服务都是这么做的。

这里有两方面的区别:首先,这是公开暴露的数据。它不应该被聚集在一个大文件中,更不应被泄露,但是,它是一个基于个人的数据,你可以在任何人的GigHub个人资料中查询到数据。第二,该事件的大部分观众都理解什么是一个大的JSON集合,也知道如何解释它。这些都是技术人员——像我一样的人——基于大括号的集合和JSON语法是他们经常说的语言。

还有第三个原因,对我来说,这是一个探索性的练习。我经常听到人们发现自己的信息泄露后,他们想知道什么信息被暴露了。我得到这个 - 他们想知道任何拥该数据的人知道什么 - 但它不是对我所做上面的事情的解释。 这是一个机会,没有涉及到敏感数据,其他人与我的风险是一致的。 我真的很好奇,想知道这方面的反馈,以及它对人们的(如果有的话)价值。

大警告时间:您只能看到自己的数据,并且只有电子邮件地址被转储。我知道,我们已经确定它是面向公众的数据,但我仍然想限制它的数据所有者是我自己。我这样做的方法是使用HIBP的现有通知服务,它已经有一种验证电子邮件地址的方法。 它的工作过程是这样的:

1、 跳转到haveibeenpwned.com/NotifyMe

2、 点击电子邮件中的链接以验证您的地址

3、 最后一步会给我或数百万人中的任何一个实际电子邮件地址泄漏人,显示了一个类似这样的页面:

当我切换到“显示geekedin原始数据”时,我获取到如下记录:

就是这样!再次声明,如果您的电子邮件地址已成功从GitHub提取,您就会在这里显示,我希望这对数百万从未预期自己信息会暴露在某些地方的用户是有用的。

 

 

来自:http://www.jointforce.com/jfperiodical/article/3753

 

返回顶部