5

正式开源!字节安全团队自研敏感信息保护方案 GoDLP

 2 years ago
source link: https://juejin.cn/post/7071106601939271687
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

为什么要自研 DLP:

随着信息技术的飞速发展,互联网已成为日常办公、通讯交流和协作互动的必备工具和途径。与此同时,随着数据经济的大规模增长,也频频引发数据泄露、数据滥用等严重数据安全事件。

对拥有海量数据和信息的字节跳动来说,数据的存储安全和传输安全有着更高的要求。外加字节的业务模型之多、脱敏需求复杂,当前 DLP 产品在敏感信息的识别规则和高效率脱敏处理上无法达到需求。

为了更好保障字节跳动旗下的数据安全和隐私安全,字节跳动安全团队自主研发了一套敏感数据保护方案——GoDLP。作为字节跳动在数据脱敏保护方向成功的实践案例,字节安全团队希望用开源的方式向大家分享我们的研究成果,与行业一同成长。

字节的 DLP 是怎样的?

GoDLP 的介绍

GoDLP 提供了一系列针对敏感数据的识别和处置方案, 其中包括敏感数据识别算法,数据脱敏处理方式,业务自定义的配置选项和海量数据处理能力。GoDLP 能够应用多种隐私合规标准,对原始数据进行分级打标、判断敏感级别和实施相应的脱敏处理。

GoDLP 的能力如何?

GoDLP 能够广泛支持结构化(JSON 数据、KV 数据、golang map)和非结构化数据(多语言字符串)。

  • 可实现敏感数据自动发现
    • GoDLP 内置多种敏感数据识别规则,可覆盖市面 80%以上识别规则,最大程度识别敏感数据

图片

  • 灵活的敏感数据脱敏处理
    • GoDLP 支持多种脱敏算法,用户可自行根据需求进行脱敏处理

图片

  • 业务自定义配置选项
    • 除默认的敏感信息识别和处理规则外,业务可根据实际情况,配置自定义的 YAML 规则,GoDLP 能够根据传入的配置选项,完成相应的数据处理任务。

图片

GoDLP 的性能表现

下方数据是在开启全部敏感数据类型情况下的结果:

  • 针对 1K 的文件,用时需 4.1 毫秒,占用 128.6k 的内存
  • 1M 的文件,用时为 4.1s,内存占用 118.6 MB
序号文件大小执行时间内存占用11K4.1ms128.6KB210K41.4ms1257.4KB3100K406.9ms12.3MB41M4.1s118.6MB

测试环境:8 核虚拟机,Linux,amd64,Intel(R)Xeon(R)[email protected];代码版本:v2.0.0

GoDLP 在字节的实践

当前 GoDLP 已在字节跳动进行了丰富的实践。已接入的业务线涵盖抖音、电商、飞书、火山引擎、云安全、财经、教育、游戏等诸多业务线。

如何使用 GoDLP

git 开源项目地址:github.com/bytedance/g…

第一步,使用go get 命令安装 godlp 模块。

go get github.com/bytedance/godlp@latest
复制代码

第二步,参考 README 中的 API 文档进行敏感数据操作。

如下代码会对字符串进行脱敏,更详细 API 例子可以参考源代码中的 mainrun/mainrun.go 文件。

package main

import (
        "fmt"
        dlp "github.com/bytedance/godlp"
)
func dlpDemo() {
        caller := "replace.your.caller"
        if eng, err := dlp.NewEngine(caller); err == nil {
                eng.ApplyConfigDefault()
                fmt.Printf("DLP %s Demo:\n\n", eng.GetVersion())
                inStr := `我的邮件是[email protected],
18612341234是我的电话
你家住在哪里啊? 我家住在北京市海淀区北三环西路43号,
mac地址 06-06-06-aa-bb-cc
收件人:张真人  手机号码:13900000000`
                if outStr, _, err := eng.Deidentify(inStr); err == nil {
                        fmt.Printf("\t1. Deidentify( inStr: %s )\n", inStr)
                        fmt.Printf("\toutStr: %s\n", outStr)
                        //eng.ShowResults(results)
                        fmt.Println()
                }
                eng.Close()
        } else {
                fmt.Println("[dlp] NewEngine error: ", err.Error())
        }
}
func main() {
        dlpDemo()
}
复制代码

第三步,编译运行,会获得如下效果。

% go run main.go
DLP v1.2.15 Demo:

        1. Deidentify( inStr: 我的邮件是[email protected],
18612341234是我的电话
你家住在哪里啊? 我家住在北京市海淀区北三环西路43号,
mac地址 06-06-06-aa-bb-cc
收件人:张真人  手机号码:13900000000 )
        outStr: 我的邮件是a***@********,
186******34是我的电话
你家住在哪里啊? 我家住在北京市海淀区北三环西路**号淀区北三环西路**号,
mac地址 06-06-06-**-**-**
收件人:张******  手机号码:139******00
复制代码

GoDLP 会长期维护更新,欢迎各位同行一起沟通交流。

感谢与交流

GoDLP 项目从立项开始,一路走来,离不开其中辛苦付出的开发同学们,这里向为 GoDLP 写下代码的字节跳动内部同学,致以最诚挚的感谢。

欢迎大家通过 GitHub 加入字节官方 GoDLP 交流群,进行后续的交流和反馈。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK