热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DLP数据泄露检测原理浅析

最近团队在部署DLP,作为一个技术人员对于黑盒看不到的地方还是充满了好奇心。多次咨询乙方人员DLP的算法原理是什么,他们都以商业秘密为由避而不谈,不得已只能自己查资料学习,于是有了下面的浅见。身为甲方,虽然不需要开发DLP产品,但是也有必要弄明白DLP基本的原理。俗话说工欲善其事必先利其器,只有在懂这个工具的原理之后才能更加灵活地使用这个工具,即使出现意外情况也能快速排错,越接近底层,越接近真相。根据DLP的实际用途,本文将DLP检测分为2部分,泄露关键字检测和近似重复文档检测。

一、为什么要知道DLP的原理


最近团队在部署DLP,作为一个技术人员对于黑盒看不到的地方还是充满了好奇心。多次咨询乙方人员DLP的算法原理是什么,他们都以商业秘密为由避而不谈,不得已只能自己查资料学习,于是有了下面的浅见。


身为甲方,虽然不需要开发DLP产品,但是也有必要弄明白DLP基本的原理。俗话说工欲善其事必先利其器,只有在懂这个 工具 的原理之后才能更加灵活地使用这个工具,即使出现意外情况也能快速排错,越接近底层,越接近真相。


二、DLP常用的算法有哪些


根据DLP的实际用途,本文将DLP检测分为2部分,泄露关键字检测和近似重复文档检测。


(一)  泄露关键字检索


这一部分比较简单,在DLP后台配置一些敏感关键字或者正则表达式如mobile号、Bank card号、ID号等等。然后结合其他综合检测手法比如敏感词命中的次数、命中的频率、泄露的源等来判断是否存在泄露行为进而告警。


(二)  近似重复文档检测


对获取到的从企业内部发送到企业外部的文档信息,需要检测这些信息中是否包含有企业机密文档库中的内容信息,如果判定是泄漏内容,需要对该信息进行拦截,避免产生泄漏事件。


a)  TF-IDF算法


首先介绍下TF-IDF算法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度即权重(weight)。TF(Term Frequency,缩写为TF)也就是词频,即一个词在文中出现的次数。IDF(逆文档频率 Inverse Document Frequency,缩写为IDF),有了词频还不能完整的反映这个词在重要性,我们还需要计算这个词的权重。


举个简单的例子就能明白,假如现在有一份疑似文档,我们要 排序 出来文档中的重要的词语。假定文章有1000个词语,”的”、”公司”、”财报”、”工资”分别出现50、8、5、9次,那么它们的词频分别为,0.05、0.008、0.005、0.009,很显然”的”是汉语常用字它并不能代表什么意思,所以词频并不能标识”的”在文章中的重要性。那么这个时候我们要计算一下这些词语的逆文档频率,google搜索”的”,有14,560,000,000个条搜索记录,我们暂且把这个当成中文语料库文档总数。然后搜索其他词查出包含该词的文档数分别为,3,420,000,000、 52,300,000、212,000,000,通过下面公式可以计算出这几个词语的TF-IDF。


DLP数据泄露检测原理浅析


DLP数据泄露检测原理浅析


DLP数据泄露检测原理浅析


从该表中可以明显看出在这个文档中”财报”、”工资”是重要的词语也即很有可能是敏感数据。















































词语 文章中出现次数 包含该词的文档数 TF IDF TF-IDF
50 14,560,000,000 0.05 0 0
公司 8 3,420,000,000 0.008 0.63 0.0050
财报 5 52,300,000 0.005 2.44 0.0122
工资 9 212,000,000 0.009 1.84 0.0166

 b)simhash算法


上面通过TF-IDF算法我们可以获取到排名前20个权重词和对应的权重。接下来如何判断两个文档内容的相似度呢?如果我们仅仅是根据这20个词来做hash比较又或者通过其他摘要来做hash比较。显然,即使存在微小差别的不同文档也会得到完全不同的散列值。而我们在相似性检测的目的,不仅仅是判定两篇文档是否完全相同,更主要是的确定二者之间的相似程度高低。因此,我们需要这样一个哈希函数,当输入的文本内容较为相近时,得到的指纹间距离也较为相近。


具有哈希算法的降维优势,又因局部敏感特性而体现相似程度simhash算法正适合本文的研究需求。接下来通过一个 python 的demo来演示下simhash的基本原理。


Simhash算法是基于关键词序列和权重的计算过程,经过文本特征(关键词息)提取、指纹生成和指纹索引匹配三个数据处理步骤。首先,该算法通过hash函数将文本的多个特征关键词映射到特定维数的向量空间中,得到一组以词语信息为编码的向量;接着,通过对词向量进行加权处理,生成带有权值的向量模型;然后,把所有的向量按对应维度累加在一起,根据各维度上的正负方向,确定对应编码位置的取值,由此得到文本的simhash指纹,即完成了文本信息的降维压缩过程。最后根据二进制字符串比对的海明距离方法,计算两个指纹间的相似度,重合的位数越多,则指纹间相似度越高,也就代表着对应文本相似度越高。而在大规模文本检测系统中,不再仅仅是比较两个指纹的距离,需要同海量的指纹码进行比较匹配。


Simhash基本原理:


(1) 通过TF-IDF算法我们可以获取到排名前20个权重词(feature)


和对应的权重(weight),形成长度20的**(feature:weight)


(2)对每个词进行hash,得到一个64位的的二进制hash


(3)hash中”1”替换成+ weight, ”0”替换成-weight,形成一个列表。


(4)20个列表进行相加


(5)相加后的列表,如果元素为负值的时候用0替换这个元素,反之用1替换。这样就得到这个文档的simhash值了。


(6)两个文档都进行上面5个步骤的操作,最终生成两个simhash。两个simhash取异或,看其中的1是否超过一个阀值(比如3),如果超过阀值我们认为相似度不大。


这里我们通过一个python的demo来演示下。


首先选取三段内容,content2在content的基础上改了一些词语,实际工作中有的人为了外传文档也喜欢用这种掩耳盗铃的方式。Content3则是另外一个与content内容完全不相关的文档内容。


 cOntent=”’ 年度企业年度财务分析报告20xx年,通过财务管理规定、内部控制会计制度和银行账户短信银行业务 (账户动帐实时信息和异常预警通知)的建立及执行,已做到会计、出纳分设,帐、款分管,预留银行印鉴和转账、现金支票分别保管,并记有银行存款日记账,按时与银行进行核对,有效杜绝了每笔业务及会计、出纳业务一人经办,最大限度保证财政资金使用安全、规范、有效。全年完成一般预算收入xx万元,为年初预算数xx万元的xx%,较上年完成的xx万元增收xx万元,增长xx%。
”’content2=”’年度公司年度财务分析报告2020年,通过财务管理决定、内部控制会计制度和银行账户短信银行业务 (账户动帐实时信息和异常预警通知)的建立及执行,已做到会计、出纳分设,帐、款分管,预留银行印鉴和转账、现金支票分别保管,并记有银行存款日记账,按时与银行进行核对,有效禁止了每笔业务及会计、出纳业务一人经办,最大限度保证财政资金使用安全、规范、有效。全年完成一般预算赚钱xx万元,为年初预算数xx万元的xx%,较上年完成的xx万元增收xx万元,增长xx%。
”’content3=”’2018年公司财务报告,计划财务部认真完成了全年财务核算,并及时提供了各项准确有效的财务数据,基本上满足了公司及外部有关单位对我部的财务要求。下面向集团公司汇报一下计划财务部xx年的工作情况。今后,计划财务部的工作重点,主要还是加强管理,严格执行中央、省以及公司各项规定,对集团公司的财务进行积极有效的监督管理。 ”’

1、通过jieba.cut进行中文分词,将文档内容分为一个个的词语。


2、jieba.analyse.set_stop_words,设置一些需要被过滤的词语,比如无意义的“的”、”啊”等


3、jieba.analyse.extract_tags ,这里执行TF-IDF算法将前20位的权重词以及权重提取出来。


DLP数据泄露检测原理浅析


4、遍历所有权重词,计算64位hash


DLP数据泄露检测原理浅析


5、判断hash中为0则替换成-weight ,为1则替换成+weight


6、20个列表进行相加得到list1


DLP数据泄露检测原理浅析


7、相加后的列表,如果元素为负数则用0替换,反之用1替换。得到了simhash就是这个文档的simhash了。


DLP数据泄露检测原理浅析 8、两个文档的simhash做异或计算,并判断运算后的结果”1”有几个即可得到两个文档的海明距离。


DLP数据泄露检测原理浅析


运算结果:


content:
xx0000000000110110100100011110110000101100000100110010101100010010
xx%1010110010111101101010010100110000000000000011100110010100010110
万元0010001101111011101000011111110101010110010100101000110000010100
出纳0010010101000111011000101001110100010101001010010001100111011111
会计0010001111111000101100000110010110010110111000010011100101101101
预算0100010101011011010000110010001000000100011111110011111100011001
银行0100001110111101011100001000101111001101111110100101001100101100
账户 0100000000101111111100001000000111000101000001011101001111000111
现金支票0001100100110110111101101001001000010100011110011110111101101000
年度0010101011110011110110110110001100000101110101110000100011111000
20xx0100001011001110111001011100101110100111000111110101100101100010
会计制度0000011011101010001001010100101111100010101011110111111111010011
动帐0010010110010110100000101111100011010010011101010101101111101010
印鉴0010010111110001011101100011011010100101010101001011110000100110
记有0011111110000101110111001101101100010111111010010011000000011011
日记账1010110011010010111111111111110101011111101100100110011001111000
有效0010111011011010111100010101111111101110110111110011011010010001
每笔0011000100000110101001011100010011001100100011111101001010111011
业务0010001110000100010001011110010101010111010111110010011101101101
完成0010100110100001100001011101010111011001011000000111010110110110
[-50-42 10 -50 -26 -14 -16 4 0 -6 20 24 -8 16 26 2 30 0
14 4-40 -26 -24 18 24 26 2 -14 18 18-20 8 -18 -14 -26 -12
-20 42-20 -12 -26 0 -10 16 -2 -8 20 26 -34 -12 14 2 18 -8
6 28-22 -10 -12 24 -4 -4 12 -16]

content2:


xx0000000000110110100100011110110000101100000100110010101100010010
xx%1010110010111101101010010100110000000000000011100110010100010110
万元0010001101111011101000011111110101010110010100101000110000010100
出纳0010010101000111011000101001110100010101001010010001100111011111
会计0010001111111000101100000110010110010110111000010011100101101101
预算0100010101011011010000110010001000000100011111110011111100011001
银行0100001110111101011100001000101111001101111110100101001100101100
账户0100000000101111111100001000000111000101000001011101001111000111
现金支票0001100100110110111101101001001000010100011110011110111101101000
年度0010101011110011110110110110001100000101110101110000100011111000
20200100001011001110111001011100101110101010010101110101001101110100
会计制度0000011011101010001001010100101111100010101011110111111111010011
动帐0010010110010110100000101111100011010010011101010101101111101010
印鉴0010010111110001011101100011011010100101010101001011110000100110
记有0011111110000101110111001101101100010111111010010011000000011011
日记账1010110011010010111111111111110101011111101100100110011001111000
有效0010111011011010111100010101111111101110110111110011011010010001
每笔0011000100000110101001011100010011001100100011111101001010111011
业务0010001110000100010001011110010101010111010111110010011101101101
完成0010100110100001100001011101010111011001011000000111010110110110
[-50-42 10 -50 -26 -14 -16 4 0 -6 20 24 -8 16 26 2 30 0
14 4-40 -26 -24 18 24 26 2 -14 18 18-20 8 -18 -14 -26 -12
-16 38-20 -16 -26 4 -10 16 -6 -8 20 26 -34 -12 14 2 14 -8
10 28-22 -10 -12 28 -4 0 8 -16]

content3:


财务部0111110111001111111000000111101011101110010101001000110001111110
财务0100000000101110000111101100100101110101011011101001010001000101
集团公司0100010101000010110110011000111011000111000001111111100100001000
计划0011111101111111000010101001111001011000110001000000101010110011
认真完成1110001010110100110000100010011000001110011111011011100101101011
20180100001011001110111001011100101110101010100001010001101000110101
xx0000000000110110100100011110110000101100000100110010101100010010
我部0010110010011000100000000011001010110100010001001100100000011001
各项规定1111111000101100011000110011110100110010011011101111001001001111
有效0010111011011010111100010101111111101110110111110011011010010001
公司0010010100000110110011111000101111100111110011101101111010111110
财务报告1010110001111011011010001001000110001101011101010011001011011110
财务数据1010110001111011011010001001000101001011111100111001001110000101
核算0010111101100100101110110110101010100110001011110100100100111101
监督管理 0010011101001010100110101001010111101000101000111010110100110001
严格执行1001101011111110000011110100011100101001110101001110110100010010
工作0010101010110010110100111101110011001011010011100110110100110001
汇报0011000100111101001101111010100010101111101010000001011010110010
外部0010100010000011000001111011111111111000110010001100100100101000
各项0010011000110100110000111100100001100001100111010110011101110111
[-46 -6 32-28 10 20 -12 -14 -10 8 8 -8 28 28 42-26 20 12
-12 -18 -8 -36 4 -4 14 4 -10 4 40 -8 16 -8 14 18 34 -34
22 22 12 -16 -20 34 -20 -12 -12 52 -2-12 22 -22 -12 -2 30 -2
-14 -16 -42 -14 6 28 0 4 4 12]

结论:


  r12:两个文档相似,海明距离为 1
r13:两个文档不相似,海明距离为 35

完整python脚本:


jiebajieba.analysenumpy npjsonsimhash:

__init__(self, content):
self.simhash = self.simhash(content)
__str__(self):
str(self.simhash)
simhash(self, content):
seg = jieba.cut(content)
jieba.analyse.set_stop_words()
keyWord = jieba.analyse.extract_tags(
.join(seg), topK=20, withWeight=, allowPOS=()) # keyList = []
feature, weight keyWord:
weight = int(weight * 20)
feature = self.string_hash(feature)
temp = []
i feature:
(i == ):
temp.append(weight)
:
temp.append(-weight)keyList.append(temp)
list1 = np.sum(np.array(keyList), axis=0)
print(list1)
(keyList == []): #
simhash = i list1:
(i > 0):
simhash = simhash + :
simhash = simhash + simhash
string_hash(self, source):
source == :
0
:
x = ord(source[0]) <<7
m = 1000003
mask = 2 ** 128 - 1
c source:
x = ((x * m) ^ ord(c)) & mask
x ^= len(source)
x == -1:
x = -2
x = bin(x).replace(, ).zfill(64)[-64:]
print(source, x)
str(x)hammingDis(self, com):
t1 = + self.simhash
t2 = + com.simhash
n = int(t1, 2) ^ int(t2, 2)
i = 0
n:
n &= (n - 1)
i += 1
i>3:
% (i)
:
% (i)
cOntent=content2=content3=simhash1=simhash(content)
simhash2=simhash(content2)
simhash3=simhash(content3)
r12=simhash1.hammingDis(simhash2)
r13=simhash1.hammingDis(simhash3)print(,r12)print(,r13)

*本文作者:hackeryeah,转载请注明来自FreeBuf.COM




以上所述就是小编给大家介绍的《DLP数据泄露检测原理浅析》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 我们 的支持!




推荐阅读
  • 本文深入探讨了Python中的高阶函数和Lambda表达式的使用方法,结合实际案例解析其应用场景,帮助开发者更好地理解和运用这些强大的工具。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 探索电路与系统的起源与发展
    本文回顾了电路与系统的发展历程,从电的早期发现到现代电子器件的应用。文章不仅涵盖了基础理论和关键发明,还探讨了这一学科对计算机、人工智能及物联网等领域的深远影响。 ... [详细]
  • FinOps 与 Serverless 的结合:破解云成本难题
    本文探讨了如何通过 FinOps 实践优化 Serverless 应用的成本管理,提出了首个 Serverless 函数总成本估计模型,并分享了多种有效的成本优化策略。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 本文探讨了在Java多线程环境下,如何确保具有相同key值的线程能够互斥执行并按顺序输出结果。通过优化代码结构和使用线程安全的数据结构,我们解决了线程同步问题,并实现了预期的并发行为。 ... [详细]
  • 本文提供了一系列Python编程基础练习题,涵盖了列表操作、循环结构、字符串处理和元组特性等内容。通过这些练习题,读者可以巩固对Python语言的理解并提升编程技能。 ... [详细]
  • 本文深入探讨了 Redis 的两种持久化方式——RDB 快照和 AOF 日志。详细介绍了它们的工作原理、配置方法以及各自的优缺点,帮助读者根据具体需求选择合适的持久化方案。 ... [详细]
  • 本文介绍如何使用 Python 的 xlrd 库读取 Excel 文件,并将其数据处理后存储到数据库中。通过实际案例,详细讲解了文件路径、合并单元格处理等常见问题。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • 精选多款高效实用软件及工具推荐
    本文介绍并推荐多款高效实用的软件和工具,涵盖系统优化、网络加速、多媒体处理等多个领域,并提供安全可靠的下载途径。 ... [详细]
author-avatar
lidasi
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有