用于安全和隐私的可扩展数据分类

用于安全和隐私的可扩展数据分类

基于内容的数据分类是一个悬而未决的问题。 传统的数据丢失防护 (DLP) 系统通过对相关数据进行指纹识别并监控指纹识别端点来解决此问题。 鉴于 Facebook 存在大量不断变化的数据资源,这种方法不仅不可扩展,而且无法有效地确定数据所在的位置。 本文重点介绍一种端到端系统,旨在大规模检测 Facebook 中的敏感语义类型并自动实施数据存储和访问控制。

这里描述的方法是我们的​​第一个端到端隐私系统,它试图通过结合数据信号、机器学习和传统指纹技术来映射和分类 Facebook 上的所有数据来解决这个问题。 所描述的系统在生产环境中运行,在处理数十个存储库中的大量数据资源时,在各种隐私类别中实现了 2+ 的平均 F0,9 分数。 介绍 Facebook ArXiv 论文的翻译,该论文涉及基于机器学习的可扩展数据分类,以实现安全和隐私。

介绍

如今,组织以各种格式和位置收集和存储大量数据 [1],然后这些数据在许多地方使用,有时会复制或缓存多次,导致有价值且敏感的业务信息分散在许多企业数据中商店。 当组织需要满足某些法律或监管要求(例如遵守民事诉讼中的规定)时,有必要收集有关所需数据位置的数据。 当隐私法规规定组织在与未经授权的实体共享个人信息时必须屏蔽所有社会安全号码 (SSN) 时,自然的第一步就是在组织的数据存储中搜索所有 SSN。 在这种情况下,数据分类就变得至关重要[1]。 该分类系统将允许组织自动执行隐私和安全策略,例如启用访问控制策略、数据保留。 Facebook 正在推出我们在 Facebook 构建的系统,该系统使用多个数据信号、可扩展的系统架构和机器学习来发现敏感的语义数据类型。

数据发现和分类是查找和标记数据的过程,以便在需要时快速有效地检索相关信息。 目前的流程本质上是手动的,包括检查相关法律或法规,确定哪些类型的信息应被视为敏感信息以及不同的敏感级别是什么,然后相应地构建类别和分类策略[1]。 然后,数据丢失防护 (DLP) 对数据进行指纹识别并跟踪下游端点以获取指纹。 当处理具有 PB 级数据的重资产仓库时,这种方法根本无法扩展。

我们的目标是建立一个数据分类系统,可以扩展到稳健和瞬态的用户数据,而对数据类型或格式没有任何额外的限制。 这是一个大胆的目标,自然也伴随着挑战。 给定的数据记录可能有数千个字符长。

用于安全和隐私的可扩展数据分类
图 1. 线上和线下预测流程

因此,我们必须使用一组通用的特征来有效地表示它,这些特征稍后可以组合并轻松移动。 这些功能不仅应该提供准确的分类,还应该提供灵活性和可扩展性,以便将来轻松添加和发现新的数据类型。 其次,您需要处理大型离线表。 持久数据可以存储在数 PB 大小的表中。 这可能会导致扫描速度变慢。 第三,我们必须坚持对易失性数据进行严格的SLA分类。 这迫使系统变得高效、快速和准确。 最后,我们必须为易失性数据提供低延迟数据分类,以执行实时分类以及互联网用例。

本文描述了我们如何应对上述挑战,并提出了一个快速且可扩展的分类系统,该系统根据一组通用特征对所有类型、格式和来源的数据元素进行分类。 我们扩展了系统架构并创建了自定义机器学习模型来快速分类离线和在线数据。 本文的结构如下:第 2 部分介绍了系统的总体设计。 第 3 节讨论机器学习系统的各个部分。 第 4 节和第 5 节重点介绍了相关工作并概述了未来的工作方向。

建筑

为了应对持久性和 Facebook 规模的在线数据的挑战,分类系统有两个独立的流,我们将详细讨论。

可持续数据

最初,系统必须了解 Facebook 的许多信息资产。 对于每个存储库,都会收集一些基本信息,例如包含该数据的数据中心、包含该数据的系统以及位于特定数据存储库中的资产。 这将创建一个元数据目录,使系统能够有效地检索数据,而不会导致其他工程师使用的客户端和资源过载。

该元数据目录为所有扫描资产提供了权威来源,并允许您跟踪各种资产的状态。 使用此信息,根据从系统收集的数据和内部信息(例如上次成功扫描资产的时间和创建资产的时间,以及该资产过去的内存和 CPU 要求)来建立调度优先级(如果之前已被扫描过。 然后,对于每个数据资源(当资源可用时),调用作业来实际扫描资源。

每个作业都是一个编译的二进制文件,对每个资产可用的最新数据执行伯努利采样。 资产被分成单独的列,其中每列的分类结果都是独立处理的。 此外,系统还会扫描列中的任何饱和数据。 JSON、数组、编码结构、URL、base 64 序列化数据等都会被扫描。 这可以显着增加扫描执行时间,因为单个表可以在 blob 中包含数千个嵌套列 json.

对于数据资产中选择的每一行,分类系统从内容中提取浮动对象和文本对象,并将每个对象关联回从中获取该对象的列。 特征提取步骤的输出是数据资产中找到的每列的所有特征的映射。

标志有什么用?

属性的概念是关键。 我们可以传递直接从每个数据资源提取的原始字符串样本,而不是浮点和文本特征。 此外,机器学习模型可以直接在每个样本上进行训练,而不是仅尝试近似样本的数百个特征计算。 有几个原因:

  1. 隐私第一:最重要的是,特征的概念允许我们只在内存中存储我们检索到的那些模式。 这确保了我们出于单一目的存储样本,而绝不会通过我们自己的努力来记录它们。 这对于易失性数据尤其重要,因为服务在提供预测之前必须维护某种分类状态。
  2. 内存:某些样本可能有数千个字符长。 存储此类数据并将其传输到系统的某些部分会不必要地消耗许多额外的字节。 鉴于存在许多具有数千列的数据资源,这两个因素可以随着时间的推移结合起来。
  3. 特征聚合:特征通过一组特征清楚地表示每次扫描的结果,允许系统以方便的方式组合同一数据资源的先前扫描的结果。 这对于聚合多次运行中单个数据资源的扫描结果非常有用。

然后,这些特征被发送到预测服务,我们使用基于规则的分类和机器学习来预测每列的数据标签。 该服务依赖于规则分类器和机器学习,并选择从每个预测对象给出的最佳预测。

规则分类器是手动启发式方法,它们使用计算和系数将对象标准化为 0 到 100 的范围。一旦为与该数据关联的每种数据类型和列名称生成了这样的初始分数,它就不会包含在任何“禁令”中。列表”,规则分类器选择所有数据类型中最高的归一化分数。

由于分类的复杂性,仅依靠手动启发式方法会导致分类精度较低,尤其是对于非结构化数据。 为此,我们开发了一个机器学习系统来处理非结构化数据(例如用户内容和地址)的分类。 机器学习使得开始摆脱手动启发式方法并应用额外的数据信号(例如列名称、数据来源)成为可能,从而显着提高检测准确性。 稍后我们将深入探讨我们的机器学习架构。

预测服务存储每列的结果以及有关扫描时间和状态的元数据。 依赖此数据的任何消费者和下游流程都可以从每日发布的数据集中读取它。 该集聚合了所有这些扫描作业或实时数据目录 API 的结果。 发布的预测是自动执行隐私和安全策略的基础。

最后,在预测服务写入所有数据并存储所有预测后,我们的数据目录 API 可以实时返回资源的所有数据类型预测。 系统每天都会发布一个数据集,其中包含每项资产的所有最新预测。

数据不稳定

虽然上述流程是为持久性资产设计的,但非持久性流量也被视为组织数据的一部分,并且可能很重要。 因此,系统提供了一个在线 API,用于针对任何间歇性流量生成实时分类预测。 实时预测系统广泛应用于将出站流量、入站流量分类为机器学习模型和广告商数据。

这里 API 有两个主要参数:分组键和要预测的原始数据。 该服务执行与上述相同的对象检索,并针对相同的键将对象分组在一起。 持久性缓存也支持这些功能以进行故障恢复。 对于每个分组键,该服务确保在调用预测服务之前已看到足够的样本,并遵循上述过程。

优化

为了扫描某些存储,我们使用库和技术来优化从热存储 [2] 的读取,并确保其他用户访问同一存储时不会造成中断。

对于非常大的表(50+ PB),尽管进行了所有优化和内存效率,系统仍会在内存耗尽之前扫描和计算所有内容。 毕竟,扫描完全在内存中计算,并且在扫描期间不会存储。 如果大表包含数千列且数据块非结构化,则在对整个表执行预测时,作业可能会因内存资源不足而失败。 这将导致覆盖范围减少。 为了解决这个问题,我们优化了系统,使用扫描速度来衡量系统处理当前工作负载的能力。 我们使用速度作为预测机制来查看内存问题并预测计算特征图。 与此同时,我们使用的数据量比平常少。

数据信号

分类系统的好坏取决于数据信号的好坏。 在这里,我们将查看分类系统使用的所有信号。

  • 基于内容:当然,第一个也是最重要的信号是内容。 对我们扫描的每个数据资产进行伯努利采样,并根据数据内容提取特征。 很多迹象都来自于内容。 任意数量的浮动对象都是可能的,它们表示特定样本类型被看到的次数的计算。 例如,我们可能有样本中看到的电子邮件数量的迹象,或者样本中看到的表情符号的数量。 这些特征计算可以在不同的扫描中进行标准化和聚合。
  • 数据来源:当父表的内容发生更改时可以提供帮助的重要信号。 一个常见的例子是哈希数据。 当子表中的数据被哈希时,它通常来自父表,并且在父表中保持清晰。 当某些类型的数据无法清晰读取或从上游表转换而来时,沿袭数据有助于对某些类型的数据进行分类。
  • 注释:另一种有助于识别非结构化数据的高质量信号。 事实上,注释和来源数据可以协同工作,在不同的数据资产之间传播属性。 注释有助于识别非结构化数据的来源,而沿袭数据可以帮助跟踪该数据在整个存储库中的流动。
  • 数据注入是一种将特殊的、不可读的字符有意引入已知数据类型的已知源中的技术。 然后,每当我们扫描具有相同的不可读字符序列的内容时,我们就可以推断该内容来自该已知的数据类型。 这是另一个类似于注释的定性数据信号。 除了基于内容的检测有助于发现输入的数据。

测量指标

一个重要的组成部分是衡量指标的严格方法。 分类改进迭代的主要指标是每个标签的精确率和召回率,其中F2分数是最重要的。

为了计算这些指标,需要一种独立的方法来标记数据资产,该方法独立于系统本身,但可用于与其直接比较。 下面我们描述了如何从 Facebook 收集真实数据并用它来训练我们的分类系统。

收集可靠数据

我们将来自下面列出的每个来源的可靠数据积累到自己的表格中。 每个表负责聚合来自该特定源的最新观察值。 每个源都有数据质量检查,以确保每个源的观测值都是高质量的并包含最新的数据类型标签。

  • 日志平台配置:Hive 表中的某些字段填充有特定类型的数据。 这些数据的使用和传播是可靠的事实来源。
  • 手动标记:维护系统的开发人员以及外部标记人员接受过标记色谱柱的培训。 这通常适用于仓库中的所有类型的数据,并且可以成为某些非结构化数据(例如消息数据或用户内容)的主要事实来源。
  • 父表中的列可以被标记或注释为包含某些数据,并且我们可以在子表中跟踪该数据。
  • 获取执行线程:Facebook 中的执行线程携带特定类型的数据。 使用我们的扫描器作为服务架构,我们可以对具有已知数据类型的流进行采样,并通过系统发送它们。 系统承诺不会存储这些数据。
  • 示例表:已知包含整个数据集的大型配置单元表也可以用作训练数据并作为服务通过扫描仪。 这对于具有各种数据类型的表来说非常有用,因此随机对列进行采样相当于对该数据类型的整个集合进行采样。
  • 合成数据:我们甚至可以使用动态生成数据的库。 这对于简单的公共数据类型(例如地址或 GPS)非常有效。
  • 数据管理员:隐私计划通常使用数据管理员手动将策略分配给数据片段。 这是高度准确的事实来源。

我们将所有主要事实来源与所有数据合并到一个语料库中。 有效性的最大挑战是确保它能够代表数据仓库。 否则,分类引擎可能会过度训练。 为了解决这个问题,利用上述所有资源来确保训练模型或计算指标时的平衡。 此外,人类标记者统一对存储库中的不同列进行采样,并相应地标记数据,以便真实数据的收集保持公正。

持续集成

为了确保快速迭代和改进,始终实时测量系统性能非常重要。 我们可以衡量当今系统的每一项分类改进,因此我们可以根据数据从战术上指导未来的改进。 这里我们看看系统如何完成由有效数据提供的反馈循环。

当调度系统遇到具有可信来源标签的资产时,我们会调度两个任务。 第一个使用我们的生产扫描仪以及我们的生产能力。 第二个任务使用具有最新功能的最新构建扫描器。 每个任务将其输出写入自己的表,标记版本以及分类结果。

这就是我们实时比较候选版本和生产模型的分类结果的方法。

当数据集比较 RC 和 PROD 特征时,会记录预测服务的 ML 分类引擎的许多变体。 最近构建的机器学习模型、当前生产中的模型以及任何实验模型。 同样的方法允许我们“切片”模型的不同版本(与我们的规则分类器无关)并实时比较指标。 这样可以轻松确定机器学习实验何时准备好投入生产。

每天晚上,当天计算的 RC 特征都会发送到 ML 训练管道,其中模型会根据最新的 RC 特征进行训练,并根据地面实况数据集评估其性能。

每天早上,模型完成训练并自动发布为实验模型。 它会自动包含在实验列表中。

一些结果

超过 100 种不同类型的数据被高精度标记。 结构良好的类型(例如电子邮件和电话号码)的 f2 分数大于 0,95。 用户生成的内容和名称等免费数据类型的表现也非常好,F2 分数大于 0,85。

所有存储库中每天都会对大量持久性和易失性数据的单独列进行分类。 每天在 500 多个数据仓库中扫描超过 10 TB 的数据。 大多数这些存储库的覆盖率超过 98%。

随着时间的推移,分类变得非常高效,持久离线流中的分类作业从扫描资产到计算每列的预测平均需要 35 秒。

用于安全和隐私的可扩展数据分类
米。 2. 描述持续集成流程的图表,以了解如何生成 RC 对象并将其发送到模型。

用于安全和隐私的可扩展数据分类
图 3. 机器学习组件的高级图。

机器学习系统组件

在上一节中,我们深入研究了整个系统架构,重点介绍了规模、优化以及离线和在线数据流。 在本节中,我们将研究预测服务并描述为预测服务提供支持的机器学习系统。

对于 100 多种数据类型和一些非结构化内容(例如消息数据和用户内容),使用纯手动启发式方法可以提高子参数分类的准确性,尤其是对于非结构化数据。 为此,我们还开发了机器学习系统来处理非结构化数据的复杂性。 使用机器学习可以让您开始摆脱手动启发式方法,并使用特征和附加数据信号(例如列名称、数据来源)来提高准确性。

所实现的模型分别研究密集和稀疏对象上的矢量表示[3]。 然后将它们组合起来形成一个向量,该向量经过一系列批量归一化 [4] 和非线性步骤以产生最终结果。 最终结果是每个标签的 [0-1] 之间的浮点数,指示示例属于该敏感度类型的概率。 使用 PyTorch 作为模型使我们能够更快地行动,使团队外部的开发人员能够快速进行和测试更改。

在设计架构时,由于稀疏(例如文本)和密集(例如数字)对象固有的差异,分别对其进行建模非常重要。 对于最终的架构,执行参数扫描以找到学习率、批量大小和其他超参数的最佳值也很重要。 优化器的选择也是一个重要的超参数。 我们发现一个流行的优化器 Adam 通常会导致过度拟合,而具有以下特征的模型 SGD 更稳定。 我们必须将其他细微差别直接包含在模型中。 例如,静态规则可确保模型在特征具有特定值时做出确定性预测。 这些静态规则由我们的客户定义。 我们发现,将它们直接合并到模型中会产生更加独立和稳健的架构,而不是实施后处理步骤来处理这些特殊的边缘情况。 另请注意,这些规则在训练期间被禁用,以免干扰梯度下降训练过程。

问题

挑战之一是收集高质量、可靠的数据。 该模型需要每个类别的置信度,以便它可以学习对象和标签之间的关联。 在上一节中,我们讨论了系统测量和模型训练的数据收集方法。 分析表明,信用卡和银行帐号等数据类别在我们的仓库中并不常见。 这使得收集大量可靠数据来训练模型变得困难。 为了解决这个问题,我们开发了获取这些类别的合成地面实况数据的流程。 我们为敏感类型生成此类数据,包括 SSN, 信用卡号码 и 银行IBAN- 模型之前无法预测的数字。 这种方法允许处理敏感数据类型,而不会产生与隐藏实际敏感数据相关的隐私风险。

除了基本事实问题之外,我们正在研究一些开放的架构问题,例如 改变隔离 и 提早停止。 更改隔离对于确保当对网络的不同部分进行不同更改时,影响被隔离到特定类别并且不会对整体预测性能产生广泛影响非常重要。 改进早期停止标准也很重要,这样我们就可以在所有类别的稳定点停止训练过程,而不是在某些类别过度训练而其他类别不过度训练的点停止。

特征重要性

当一个新特征被引入模型时,我们想知道它对模型的整体影响。 我们还希望确保预测是人类可解释的,以便我们能够准确理解每种类型的数据使用了哪些特征。 为此,我们开发并推出了 按班级 PyTorch 模型的特征的重要性。 请注意,这与通常支持的整体特征重要性不同,因为它没有告诉我们哪些特征对于特定类很重要。 我们通过计算重新排列对象后预测误差的增加来衡量对象的重要性。 当交换值增加模型误差时,某个特征就“重要”了,因为在这种情况下,模型依赖该特征来进行预测。 当改组其值而使模型误差保持不变时,某个特征是“不重要的”,因为在这种情况下模型会忽略它[5]。

每个类别的特征的重要性使我们能够使模型具有可解释性,以便我们可以看到模型在预测标签时正在考虑什么。 例如,当我们分析 地址,那么我们保证与地址相关的符号,例如 地址行数,在每个类别的特征重要性表中排名靠前,因此我们人类的直觉与模型所学到的内容非常匹配。

评估

定义单一的成功指标非常重要。 我们选择了 F2 - 召回率和准确率之间的平衡(召回率偏差稍大)。 对于隐私用例来说,召回率比准确性更重要,因为对于团队来说,不要错过任何敏感数据(同时确保合理的准确性)至关重要。 我们模型的实际 F2 性能评估超出了本文的范围。 然而,通过仔细调整,我们可以为最重要的敏感类获得高 (0,9+) F2 分数。

相关工作

有许多算法可以使用各种方法对非结构化文档进行自动分类,例如模式匹配、文档相似性搜索和各种机器学习方法(贝叶斯、决策树、k-近邻等)[6]。 其中任何一个都可以用作分类的一部分。 然而,问题是可扩展性。 本文中的分类方法偏向于灵活性和性能。 这使我们能够在未来支持新的类并保持较低的延迟。

在数据指纹识别方面也有很多工作。 例如,[7]中的作者描述了一种专注于捕获敏感数据泄漏问题的解决方案。 基本假设是可以对数据进行指纹识别,以将其与一组已知的敏感数据进行匹配。 [8]中的作者描述了类似的隐私泄露问题,但他们的解决方案基于特定的Android架构,并且仅当用户操作导致个人信息共享或底层应用程序泄露用户数据时才进行分类。 这里的情况有些不同,因为用户数据也可能是高度非结构化的。 因此,我们需要一种比指纹识别更复杂的技术。

最后,为了应对某些类型敏感数据的数据短缺问题,我们引入了合成数据。 有大量关于数据增强的文献,例如,[9] 中的作者探讨了训练期间噪声注入的作用,并在监督学习中观察到了积极的结果。 我们的隐私保护方法有所不同,因为引入噪声数据可能会适得其反,因此我们专注于高质量的合成数据。

结论

在本文中,我们提出了一个可以对数据进行分类的系统。 这使我们能够创建系统来执行隐私和安全政策。 我们已经证明,可扩展的基础设施、持续集成、机器学习和高质量的数据保证在我们许多隐私计划的成功中发挥着关键作用。

未来的工作方向有很多。 这可能包括为未图示的数据(文件)提供支持,不仅对数据类型而且对敏感度级别进行分类,以及在训练期间通过生成准确的综合示例来使用自我监督学习。 反过来,这将帮助模型最大程度地减少损失。 未来的工作还可以集中在调查工作流程上,我们不仅限于检测,还提供各种侵犯隐私行为的根本原因分析。 这将有助于敏感性分析(即数据类型的隐私敏感性是高(例如用户 IP)还是低(例如 Facebook 内部 IP))。

参考书目

  1. 大卫·本·大卫、塔玛·多马尼和阿比盖尔·塔雷姆。 使用语义网络技术的企业数据分类。 编辑 Peter F.Ï Patel-Schneider、Yue Pan、Pascal Hitzler、Peter Mika、Lei Zhang、Jeff Z. Pan、Ian Horrocks 和 Birte Glimm, 语义网 – ISWC 2010,第 66-81 页,柏林,海德堡,2010 年。施普林格柏林海德堡。
  2. Subramanian Muralidhar、Wyatt Lloyd、Sabyasachi Roy、Cory Hill、Ernest Lin、Weiwen Liu、Satadru Pan、Shiva Shankar、Viswanath Sivakumar、Linpeng Tang 和 Sanjeev Kumar。 f4:Facebook 的温暖 BLOB 存储系统。 在 第 11 届 USENIX 操作系统设计与实现研讨会 (OSDI 14),第 383–398 页,科罗拉多州布鲁姆菲尔德,2014 年 XNUMX 月。USENIX 协会。
  3. 托马斯·米科洛夫、伊利亚·苏茨克韦尔、陈凯、格雷格·S·科拉多和杰夫·迪恩。 单词和短语及其组合的分布式表示。 在 C. J. C. Burges、L. Bottou、M. Welling、Z. Ghahramani 和 K. Q. Weinberger 编辑中, 神经信息处理系统的进展 26,第 3111-3119 页。 Curran Associates, Inc.,2013。
  4. 谢尔盖·约夫和克里斯蒂安·塞格迪。 批量归一化:通过减少内部协变量偏移来加速深度网络训练。 编辑弗朗西斯·巴赫和大卫·布莱伊: 第 32 届国际机器学习会议论文集,第37卷,共 机器学习研究论文集,第 448-456 页,法国里尔,07 年 09 月 2015-XNUMX 日。PMLR。
  5. 里奥·布雷曼. 随机森林。 马赫 学习。,45(1):5–32,2001 年 XNUMX 月。
  6. 泰尔·努普。 数据挖掘中的分类技术综述。
  7. X. Shu、D. Yao 和 E. Bertino。 敏感数据暴露的隐私保护检测。 IEEE信息取证与安全事务, 10(5):1092–1103, 2015.
  8. 杨哲民、杨民、张远、谷国飞、宁鹏和王晓阳。 实习生:分析Android中的敏感数据传输以进行隐私泄露检测。 第 1043–1054 页,11 年 2013 月。
  9. Qizhe Xie、Zihang Dai、Eduard H. Hovy、Minh-Thang Luong 和 Quoc V. Le。 无监督的数据增强。

用于安全和隐私的可扩展数据分类
了解如何通过参加 SkillFactory 在线课程从头开始获得受欢迎的职业或在技能和薪资方面升级的详细信息:

更多课程

来源: habr.com

添加评论