大数据脱敏方案调研

佳境Shmily 2020-10-20 13:19:00
技术

大数据脱敏方案调研

背景

  大数据发展速度飞快,大数据的价值也有目共睹,在大数据技术领域,对于分析性能,实时性等方面都有了很大的突破,但数据安全问题在数据业务建立初期很难被重视,而数据规模壮大后才开始重视,以致大多数企业大数据平台安全管控能力普遍缺失。。现今数据安全问题频发,而且一旦发生就会对公司造成很严重的利益甚至声誉损害。
  数据安全引发的问题代价极高,后果严重,而我们又不能保证服务器永远不会被攻击,所以,及时止损才是关键,大数据脱敏正是这关键的一个环节。有了数据脱敏,就可以随时保护用户隐私,防止重要信息泄露,即使服务器被攻击或有内鬼,也不担心敏感数据被带走。看来既要防外贼又要防内鬼,任重道远啊…
  所以数据脱敏是大数据处理链路中重要的一环,建立大数据脱敏体系平台迫在眉睫。

数据脱敏

定义

  数据脱敏(Data Masking),又称数据漂白、数据去隐私化或数据变形。对敏感信息通过脱敏规则进行数据的变形,模糊化,伪装从而实现敏感隐私数据 的可靠保护。数据脱敏后,就可以在开发、测试和其它非生产环境以及外包环境中安全地使用脱敏后的真实数据集。

目标

  1. 针对大数据敏感数据信息,设计并落实敏感数据安全解决方案,实现敏感数据的模糊化,确保敏感数据信息安全可靠
  2. 通过大数据平台安全方案的建设,填补大数据平台数据安全防护方面的空缺,有效降低大数据安全管控方面的风险
  3. 发生数据泄露时风险可控
  4. 可管控的数据脱敏平台,结合用户认证和权限管理以及隐私数据级别实现基于审批模式的数据访问
  5. 数据分析与数据脱敏是矛盾的,要做到同时兼顾数据安全和数据使用,保证数据安全的同时最大化数据的分析价值
  6. 做到数据审计,发生数据泄露时方便快速定位泄露原因

难点

  1. 海量存量数据已经形成
  2. 主要涉及系统和数仓两个层面,应用多,应用环境复杂
  3. 主动发现敏感数据困难

原则

  1. 脱敏通常多数情况是不可逆的,但也有要求可以恢复原始数据的场景
  2. 脱敏后数据通常应具有原数据的特征,适用于开发和测试环境,而不是无意义的字符串,比如银行卡号前四位表示银行名称脱敏后这四位也保持不变;数据要求高时,可能要做到脱敏后数据与原始数据频率分布一致,字段唯一性等
  3. 数据关联关系要保留业务规则关联性保证,如主键外键数据脱敏后在另一个表仍然能关联到,如账户类数据往往会贯穿主体的所有关系和行为信息需要特别注意保证所有相关主体信息的一致性
  4. 所有可能生成敏感数据的非敏感字段同样需要脱敏,要面对根据非敏感字段能推导出敏感信息的场景
  5. 脱敏过程自动化可重复,脱敏结果稳定准确,多次脱敏后数据始终一致

数据脱敏流程

分为敏感数据发现->敏感数据梳理->脱敏方案制定->脱敏任务执行

敏感数据发现

敏感数据发现分为人工和自动两种,一般是以自动为主结合人工辅助。人工可以指定数据脱敏规则、敏感数据特征和不同数据的脱敏策略。自动识别是根据人工指定的敏感数据特征,借助敏感数据信息库和分词系统自动识别敏感信息,相对于人工方式,自动识别可以减少工作量和防止疏漏。敏感数据发现是一个闭环过程,不断优化和完善敏感数据信息库。

敏感数据梳理

在敏感数据发现的基础上,梳理敏感数据列,敏感数据关联关系,不同类型数据的不同脱敏方式,保证清晰的脱敏后关联关系。
敏感信息字段的名称、敏感级别、字段类型、字段长度、赋值规范等内容在这一过程中明确,用于下面脱敏策略制定的依据。

脱敏方案制定

针对不同业务的数据脱敏需求,在已有脱敏算法基础上定制脱敏策略。该步主要通过脱敏策略复用不同脱敏算法实现。

脱敏任务执行

安排脱敏任务,定时跑批,并行处理,断点续延,容错…

脱敏算法

有几种通用算法,也有要根据业务需求和数据来定制的脱敏算法如k-匿名,L-多样性,数据抑制,数据扰动,差分隐私等…

脱敏规则

分为可恢复不可恢复两种类型的脱敏规则
目标:建立数据脱敏规则算法库

替代

用伪装数据完全替换源数据中的敏感数据,替代是最常用的数据脱敏方法
具体操作:

随机变换

对待脱敏数据通过随机函数调整,是一种常用脱敏方法
随机函数逻辑:

混洗

对敏感字段数据跨行随机互换来破坏原有数据实现脱敏
特点:保证了字段的数据范围,数据特征和业务含义,但牺牲了安全性,有被还原的可能
例子:20201024 -> 20180112

加密

加密待脱敏的数据,使用方通过不同的密钥来解密得到原始数据,使用较少
特点:不保证数据特征和业务含义,存在安全隐患如密钥泄露和加密强度不够,耗费集群算力
例子:abc -> TH3Wwi2wif51ga

遮挡

对敏感数据用*或x等字符遮挡从而加密数据,是常用脱敏方式
特点:保持数据特征格式,脱敏效果好
例子:18612346666 -> 186xxxx66xx

Hash映射

将数据映射为Hash值
特点:不能保证数据特征和业务含义,可以将长度不一的数据变为相同长度
例子:zwdwf -> 710057965

偏移

类似于加盐,对数据增加一个固定的偏移量
特点:隐藏数值的部分特征
例子:253 -> 1253

截断

只保留数据的某几位,其余位截断
例子:0421-88888 -> 0421

唯一值映射

将数据映射为唯一的一个值,通过映射表找回原有的值

局部混淆

前几位不变,后面位置数据混淆

脱敏环境

数据脱敏环境细分为生产环境和非生产环境(开发、测试、预发布、外包、数据分析等)
根据脱敏环境的具体场景将脱敏分为:

大数据脱敏技术方案

先上一个总体的脑图:数据脱敏脑图XMIND

批量数据脱敏

  1. 先将数据同步到数据仓库的一个中间表,然后通过一些自定义的脱敏函数udf进行数据脱敏,然后将未脱敏的中间表删除或通过权限管控起来即可。对于存量数据也是经过UDF处理后得到脱敏数据。
    alt DataMasking-1
    手机号脱敏UDF示例:

    package top.shmily.qjj;
    import org.apache.hadoop.hive.ql.exec.Description;
    import org.apache.hadoop.hive.ql.exec.UDF;
    // 上传udf jar到集群 hdfs dfs -put udf-1.0-SNAPSHOT-jar-with-dependencies.jar /tmp/udf_path/
    // 修改文件权限 hdfs dfs -chmod -R 777 hdfs:///tmp/udf_path/
    // 注册udf函数 create function tmp.pul as 'top.shmily.qjj.PhoneUnlookUdf' using jar 'hdfs:///tmp/udf_path/udf-1.0-SNAPSHOT-jar-with-dependencies.jar
    public class PhoneUnlookUdf extends UDF {
    //重写evaluate方法
    public String evaluate(String phone){
    if (phone.length() == 11){
    String res = phone.substring(0, 3) + "****" + phone.substring(7, phone.length());
    return res;
    } else {
    return phone;
    }
    }
    }
  2. 使用ApacheRanger进行数仓Hive表数据进行脱敏
    Apache Ranger对Hive数据支持两种脱敏方式:行过滤(Row Filter)和列屏蔽(Column Masking)。它可对Select结果进行行列级别数据脱敏,从而达到对用户屏蔽敏感信息的目的。
    脱敏更多的是用到Ranger的列屏蔽,可用不同策略对不同列脱敏,列屏蔽支持的策略:
    Redact策略: 用x屏蔽所有字母字符,用n屏蔽所有数字字符。
    Partial mask-show last 4 策略: 仅显示最后四个字符,其他用x代替。
    Partial mask-show first 4 策略: 仅显示前四个字符,其他用x代替。
    Hash策略: 用值的哈希值替换原值。
    Nullify策略: 用NULL值替换原值。
    Unmasked策略: 原样显示。
    Date-show only year策略: 仅显示日期字符串的年份部分,并将月份和日期默认为01/01。
    Custom策略: 可使用任何有效Hive UDF(返回与被屏蔽的列中的数据类型相同的数据类型)来自定义策略。
    但Ranger对系统各个组件依赖较严格,版本有差异都会编译失败,可以参考Ranger的Plugin中权限相关实现类的实现方法,利用Ranger的思想自己编写权限控制和脱敏逻辑。
    Ranger实现脱敏的方式在RangerWiki有详细说明:Row level filtering and column-masking using Apache Ranger policies in Apache Hive

  3. 使用Apache ShardingSphere实现数据脱敏
      Apache ShardingSphere是一套开源的分布式数据库中间件解决方案由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(规划中)这3款相互独立,却又能够混合部署配合使用的产品组成。它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。
      数据脱敏模块属于ShardingSphere分布式数据治理这一核心功能下的子功能模块。它通过对用户输入的SQL进行解析,并依据用户提供的脱敏配置对SQL进行改写,从而实现对原文数据进行加密,并将原文数据(可选)及密文数据同时存储到底层数据库。在用户查询数据时,它又从数据库中取出密文数据,并对其解密,最终将解密后的原始数据返回给用户。Apache ShardingSphere分布式数据库中间件自动化&透明化了数据脱敏过程,让用户无需关注数据脱敏的实现细节,像使用普通数据那样使用脱敏数据。此外,无论是已在线业务进行脱敏改造,还是新上线业务使用脱敏功能,ShardingSphere都可以提供一套相对完善的解决方案。
      具体可参考详细文档官网
      

  4. 修改ThriftServer源码,在ThriftServer端使用Antlr4解析SQL,匹配脱敏规则库后针对敏感字段自动套用UDF并提交执行。(JDBC端修改不知道是不是也可行,感觉ThriftServer源码改起来更简单点)
    通过修改SparkThriftServer源码实现数据脱敏的方法见我的另一篇博客:实现基于Spark的数据脱敏

实时数据脱敏

  1. 实时数据结合历史数据通过中间件进入Flink或Storm程序,这时只有实时数据,不适用基于全量数据的脱敏算法,所以结合历史数据和相应算法进行实时脱敏。
    alt DataMasking-2

数据安全审计

数据安全审计,目前业界常用的就是ELK(Es+LogStash+Kibana),下面是用于大数据审计的流程
alt DataMasking-3

总结

  1. 脱敏的过程就是一个在数据安全性和数据可用性之间平衡的过程
  2. 选择或设计一种既能满足开发测试外包的要求,又能保证安全性的脱敏算法特别重要
  3. 脱敏后数据的关联关系和业务关系不能被破坏
  4. 要结合数据、业务需求实际情况制定适合的脱敏规则

参考

美团技术团队
数据脱敏
大数据脱敏方案
数据脱敏原理及方法简析
手机号码脱敏
Apache ShardingSphere数据脱敏全解决方案详解