揭秘Facebook数据收集:用ELK技术栈分析你的隐私档案

本文通过技术手段深入分析Facebook收集的用户数据,详细介绍了使用ELK技术栈处理Facebook存档JSON文件的方法,揭示了第三方网站如何通过Facebook Pixel等技术共享用户行为数据。

我敢打赌大多数Facebook用户并不清楚平台真正了解他们多少信息。

如果我告诉你,你可以在短短5分钟内可视化这些数据呢?

这是一个关于我如何通过编程方式探索 https://facebook.com/dyi 的故事。我将展示如何自己操作,并一起探索我(经过审查的)Facebook数据。

(文章开头展示经过审查的数据样本,文末提供开源代码)

最近遇到的一些令人毛骨悚然的广告——这些广告肯定与我手机旁当面交谈的内容100%相关(对大家来说并不新鲜,但他们太无耻了)——让我开始思考Facebook究竟知道我什么。

我感谢Facebook至今带来的所有好处,也欣赏这家公司。他们做了一些了不起的事情,本文的目的是通过真实案例让你了解广告世界的运作方式。归根结底,像任何其他免费软件产品一样——如果你不为之付费,你的数据就是他们业务的关键组成部分。

我在Facebook的存档中发现了一些关于我的有趣"Facebook相关数据",我相信你也会感兴趣。

不知道他们是怎么得到的,但我们可以一起猜测……这与金钱有关。无论是他们购买的还是自己收集的。

合规性——争取你的权利

如果希望在全球扩张或进入欧洲或加利福尼亚市场,大型(以及小型)公司必须遵守最新的隐私法律。Facebook作为广告寡头垄断的最大参与者之一(仅次于Google),允许用户随时免费下载自己的数据。

于是我创建了一个新存档。几个小时后,我收到了一个链接到我的邮箱。

HTML文件包含 https://www.facebook.com/your_information 的离线版本。这很不错,但在页面间跳转几分钟后,我明白一定有更好(更高效)的方法。

于是我查看了JSON文件,其中包含HTML版本缺少的大量信息。HTML版本更精简,显然让人们——即使像我这样的技术人员——更难真正理解数据并看清全貌。

你可以选择HTML版本,或非常详细的JSON输出存档。我两个都要了。真正有趣的数据深藏在JSON版本中。

Facebook存档JSON版本比HTML版本更详细

于是我下载了他们的JSON格式,并专注于在HTML5网络界面中无法完全看到的数据(而且有很多)。就像有更多内容要展示——但尽管这是所有数据的离线片段,网络界面封装了部分事件。

我想在眼前看到完整的画面。我觉得使用图表、数字和线条比通过他们的网站/HTML存档能更好地理解它。在一个屏幕上看到会很酷。我需要流式传输这些数据并在某处建立索引……我绝不会逐文件或逐页查看所有内容。

数据索引(技术细节——可跳过)

对于技术爱好者,让我详细说明。

我选择使用由ELK(Elastic + LogStash + Kibana)组件组成的docker堆栈。我实现了一个自定义LogStash文件流,用于预处理从下载的ZIP存档中有趣的JSON文件到ElasticSearch。

然后我拆分包含多个元素的记录(事件、点击、喜欢、通知、市场商品点击等),以便可以轻松查询真实的Facebook对象(就像它们在GraphQL中建立索引一样),并使用我感兴趣的字段创建ElasticSearch索引。

堆栈中的ElasticSearch服务将索引我在Facebook服务器上发生的所有与我的数据相关的事件。稍后,我们将使用Kibana可视化数据并进行研究。

Compose文件(可以使用Kompose转换为Kubernetes服务)在文末提供。

我运行了docker-compose up,一切开始运行。一些样本通过ElasticSearch后,我使用一键手动创建了索引模式。

最后,使用Kibana,我开始处理这些数据片段,并理解了我面对的是什么。

找到正确的起点

关于我的数据量惊人。我指的不是Facebook从其服务中收集的明显数据……很多数据来自其他地方。我必须集中精力,数据太多了。

让我们看看我创建的广告和业务仪表板,它仅涵盖Facebook与300多家公司的部分关系。

所以,我的问题是:他们关于我买卖什么?

多年免费使用他们的产品(Facebook、Instagram、WhatsApp)后,他们一定很了解我。

结果

Facebook大部分信息来自第三方应用程序和服务。我甚至不需要实际拥有Facebook、Instagram或WhatsApp账户连接到这些应用程序中的任何一个就能被识别。

我必须以某种方式使数据可见:

他们知道在300多个网站上发生的每一个数字事件,这些网站我确实在使用或曾经使用过,而没有登录Facebook或以任何方式与之相关。

他们知道我如何为每项服务付费,我安装或更改了什么应用程序,以及我访问了什么网站,这要归功于Facebook Pixel技术和其他"伟大的、尊重隐私"的工具。

另一个重要问题出现了——Facebook内部谁能真正看到这些数据?

我敢打赌你也至少使用过以下一项:

  • Spotify
  • Airbnb
  • Zoom
  • 食品配送服务(如Wolt)
  • 域名注册商
  • 航空和旅行社
  • 购物网站
  • 许多登陆页面
  • 社交/音乐/视频流媒体平台

尽管如此,Facebook拥有我在各种网站上的浏览历史。别再担心偶尔删除它了。

你相信吗?好吧,这里有一些来自我个人仪表板的例子。

Facebook知道我吃东西,每当我订购外卖时

食品配送服务日志——第三方cookie无处不在——Facebook记录了我的购物车事件。我没有登录。

他们知道我在300多个网站上的个人用户流程,从登录到购物车和结账。

他们知道我查看哪些网站,即使在查看预览时也是如此。

他们知道我在哪里、如何以及何时飞行和旅行——我的预订机票/住宿被记录。

结账和支付详细事件——每个块是一个独特的交易。每种颜色是不同类型的事件。

他们(显然)知道我的音乐品味。来自Spotify,而不是页面喜欢。

Spotify向Facebook发送了许多事件。

还有"CUSTOM"数据事件——一些他们宁愿不命名的讨厌数据——让我问为什么?CUSTOM到底是什么?

“CUSTOM”——这部分数据是私有的,Facebook不共享它。存档中几乎1/5的事件类型是CUSTOM,我不知道它们是什么意思。

我几乎忘记了最珍贵的宝石:“advertisers_who_uploaded_a_contact_list_with_your_information.json”

如果这还不够,我还可以在文件中找到"profile_information.json"。

这个profile_information文件包含关于我的所有顶级事实,元组中有一些0时间戳值,好像它被优化存储用于数据科学项目、实验和查询。

就像Facebook提供的尽职调查!关系、兴趣、技能等。把它看作你的基本档案信息,其中包含Facebook在其用户界面中不使用或不支持的历史和内部数据。这些字段由计算机使用,为计算机服务,以定制你的广告(或把它们卖给出价最高的人)。

我还有更多要覆盖的内容,但我为好奇的人们(那些读完文章的人)启动了一个开源框架,以便你可以下载数据并立即在计算机上可视化。

当你在存档中找到我未提及的更有趣文件时,向流水线添加新数据非常容易,我相信你可以发现它。这篇博客文章将有第二部分!

我做什么(关于我) Avi Lumelsky——我是一名软件工程师/安全研究员。我主要专注于隐私、深度学习和网络安全领域。我将在未来的文章中介绍进展。希望你喜欢这篇文章。

你也可以阅读我上一篇关于Google网络钓鱼POC的文章。

代码请 代码可在 https://github.com/avilum/facebook-archive-analyzer 获取。非常欢迎你在GitHub上关注我,这里。

随意评论、留下问题或反馈,当然——分享就是关怀。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计