扫描文本文件以查找敏感(或非敏感)数据。

txtferret的Python项目详细描述


txtferret

使用python识别和分类文本文件中的数据。

说明

定义:txtferret

  • 像黄鼠狼一样的哺乳动物,以啮齿动物为食…显然还有社保号码, 信用卡号码,或您的文本或gzip文本文件中的任何其他数据。

使用自定义正则表达式和健全性检查(例如:luhnaccount number算法)查找 通过命令行在几乎任何大小的文件中存储敏感数据。

为什么使用txtferret?看看这是怎么发生的?下面一节。

目录

  • 快速启动
  • 配置
  • 为什么会这样?
  • 开发

快速启动

PYPI

  1. 安装它

    $ pip3 install txtferret
    
  2. < > >

    回购

    1. 克隆它。
      $ git clone git@github.com:krayzpipes/txt-ferret.git
      $ cd txt-ferret
      
    2. 安装环境。
      $ python3.7 -m venv venv
      $ source venv/bin/activate
      
    3. 安装它。
      (venv) $ python setup.py install
      
    4. < > >

      运行它

      • 文件大小示例:

        # Decent sized file.
        
        $ ls -alh | grep my_test_file.dat
        -rw-r--r--  1 mrferret ferrets  19G May  711:15 my_test_file.dat
        
      • 正在扫描文件。

        # Scan the file.# Default behavior is to mask the string that was matched.
        
        $ txtferret scan my_test_file.dat
        2019:05:20-22:18:01:-0400 Beginning scan for /home/mrferret/Documents/test_file_1.dat
        2019:05:20-22:18:18:-0400 PASSED sanity and matched regex - /home/mrferret/Documents/test_file_1.dat - Filter: fake_ccn_account_filter, Line 712567, String: 1001020304050607080942019:05:20-22:19:09:-0400 Finished scan for /home/mrferret/Documents/test_file_1.dat
        2019:05:20-22:19:09:-0400 SUMMARY:
        2019:05:20-22:19:09:-0400   - Matched regex, failed sanity: 22019:05:20-22:19:09:-0400   - Matched regex, passed sanity: 12019:05:20-22:19:09:-0400 Finished in 78 seconds (~1 minutes).
        
      • 用分隔符扫描文件。

        # Break up each line of a CSV into columns by declaring a comma for a delimiter.# Scan each field in the row and return column numbers as well as line numbers.
        
        $ txtferret scan --delimiter , test_file_1.csv
        2019:05:20-21:41:57:-0400 Beginning scan for /home/mrferret/Documents/test_file_1.csv
        2019:05:20-21:44:34:-0400 PASSED sanity and matched regex - /home/mrferret/Documents/test_file_1.csv - Filter: fake_ccn_account_filter, Line 712567, String: 100102030405060708094, Column: 1712019:05:20-21:49:16:-0400 Finished scan for /home/mrferret/Documents/test_file_1.csv
        2019:05:20-21:49:16:-0400 SUMMARY:
        2019:05:20-21:49:16:-0400   - Matched regex, failed sanity: 22019:05:20-21:49:16:-0400   - Matched regex, passed sanity: 12019:05:20-21:49:16:-0400 Finished in 439 seconds (~7 minutes).
        
        • 扫描目录中的所有文件。将结果写入文件并stdout
        # Uses multiprocessing to speed up scans of a bulk group of files
        
        $ txtferret scan -o bulk_testing.log --bulk ../test_files/
        2019:06:09-15:15:27:-0400 Detected non-text file '/home/mrferret/Documents/test_file_1.dat.gz'... attempting GZIP mode (slower).
        2019:06:09-15:15:27:-0400 Detected non-text file '/home/mrferret/Documents/test_file_2.dat.gz'... attempting GZIP mode (slower).
        2019:06:09-15:15:27:-0400 Beginning scan for /home/mrferret/Documents/test_file_1.dat.gz
        2019:06:09-15:15:27:-0400 Beginning scan for /home/mrferret/Documents/test_file_2.dat.gz
        2019:06:09-15:15:27:-0400 Beginning scan for /home/mrferret/Documents/test_file_3.dat
        2019:06:09-15:15:27:-0400 PASSED sanity and matched regex - /home/mrferret/Documents/test_file_2.dat.gz - Filter: fake_ccn_account_filter, Line 4, String: 1001020304050607080942019:06:09-15:15:27:-0400 Finished scan for /home/mrferret/Documents/test_file_2.dat.gz
        2019:06:09-15:16:04:-0400 PASSED sanity and matched regex - /home/mrferret/Documents/test_file_3.dat - Filter: fake_ccn_account_filter, Line 712567, String: 1001020304050607080942019:06:09-15:16:51:-0400 PASSED sanity and matched regex - /home/mrferret/Documents/test_file_1.dat.gz - Filter: fake_ccn_account_filter, Line 712567, String: 1001020304050607080942019:06:09-15:17:15:-0400 Finished scan for /home/mrferret/Documents/test_file_3.dat
        2019:06:09-15:19:24:-0400 Finished scan for /home/mrferret/Documents/test_file_1.dat.gz
        2019:06:09-15:19:24:-0400 SUMMARY:
        2019:06:09-15:19:24:-0400   - Scanned 3 file(s).
        2019:06:09-15:19:24:-0400   - Matched regex, failed sanity: 162019:06:09-15:19:24:-0400   - Matched regex, passed sanity: 32019:06:09-15:19:24:-0400   - Finished in 236 seconds (~3 minutes).
        2019:06:09-15:19:24:-0400 FILE SUMMARIES:
        2019:06:09-15:19:24:-0400 Matches: 1 passed sanity checks and 2 failed, Time Elapsed: 236 seconds / ~3 minutes - /home/mrferret/Documents/test_file_1.dat.gz
        2019:06:09-15:19:24:-0400 Matches: 1 passed sanity checks and 3 failed, Time Elapsed: 0 seconds / ~0 minutes - /home/mrferret/Documents/test_file_2.dat.gz
        2019:06:09-15:19:24:-0400 Matches: 1 passed sanity checks and 2 failed, Time Elapsed: 107 seconds / ~1 minutes - /home/mrferret/Documents/test_file_3.dat
        

      配置

      有两种方法可以配置TXT雪貂。您可以通过创建 自定义配置文件(基于默认的yaml文件),或者可以通过 cli开关。

      • cli交换机将始终获胜/优先。
      • 用户定义的配置文件总是优于默认配置。
      • 如果cli交换机在用户文件配置中未定义任何设置,则 将应用设置。

      txt ferret附带了一个默认配置,您可以将其转储到任何目录中 你希望并改变它或使用它作为参考。如果你改变文件,你必须 使用适当的cli开关指定它,以便脚本使用它。见 下面的cli部分。

      (venv) $ txtferret dump-config /file/to/write/to.yaml
      

      配置文件有两个部分:过滤器设置

      过滤器

      过滤器是带有一些元数据的正则表达式。您可以使用此元数据 对正则表达式匹配项执行健全性检查以筛选出误报。(前)卢恩 信用卡号的算法)。您还可以屏蔽匹配字符串的输出 记录到文件或显示在终端上。

      $ pip3 install txtferret
      
      0
      • 标签:
        • 当有问题的筛选器匹配字符串时,这将显示在日志中。
      • 图案:
        • 将用于查找文件中数据的正则表达式。
        • 正则表达式必须与标准库中的pythonre模块兼容。
        • 确保正则表达式只包含一个且仅包含一个捕获组。例如, 如果要捕获电话号码:
          • 不要这样做:'(555-(867 555)-5309)
          • 这样做:'(555-(?:867 555)-5309)'
          • 前一个示例有两个捕获组,内部和外部。
          • 后者有一个捕获组(外部)。内部是一个非捕获 通过使用启动捕获组定义的组?:
        • 注意:如果加载自定义筛选器时遇到问题,请尝试添加 正则表达式的单引号。
      • 替换:
        • 允许您定义在传递到健全性检查之前从字符串中删除的字符。
        • 必须是有效的正则表达式。
        • 如果丢失或为空,默认替换为[\w\u]
      • 理智:
        • 这是与此筛选器一起使用的算法,用于验证数据的真实性 寻找。例如,16位数字可能只是一个随机数D不是信用卡。放 通过luhn算法的数字将验证它们可能是一个帐号,并且 减少误报。
        • 只要算法存在,也可以传递表示算法的字符串列表 在图书馆里。如果没有,请添加它并发出拉取请求!
      • 掩码:
        • 索引:
          • 这是匹配字符串中掩蔽开始的位置。
          • 用于屏蔽匹配字符串的字符串。
      • 类型:
        • 这基本上是对使用此筛选器查找的"类型"数据的描述。

      设置

      $ pip3 install txtferret
      
      1
      • 批量
        • 此设置可通过cli参数-b--bulk
        • 访问。
        • 使用这些开关时,请传递要扫描的目录,而不是单个文件名。
        • 示例:
        $ pip3 install txtferret
        
        2
      • 遮罩
        • 如果设置为true,则在输出期间,将使用过滤器中定义的掩码值来屏蔽数据。
        • 如果没有为筛选器设置掩码,程序将使用默认掩码值进行掩码。
        • 默认设置为"true"。
        • cli-可以使用-m开关打开屏蔽功能'
        $ pip3 install txtferret
        
        3
      • 日志级别:
        • 这是您要使用的日志级别。info将只为 已匹配并通过相关的健全性检查。调试将记录两个匹配/选中的筛选器 以及匹配但未通过健全性检查的筛选器。
        • cli-使用-l开关可以更改日志级别:
        $ pip3 install txtferret
        
        4
      • 总结
        • 如果设置为true,脚本将只输出三个数据点的列表:
          • 未通过健全性检查的匹配数。
          • 通过健全性检查的匹配数。
          • 完成文件搜索所需的时间。
        • cli-开关将启动摘要。
        $ pip3 install txtferret
        
        5
      • 输出文件
        • 将绝对路径添加到要在其中写入结果的文件。
        • cli-使用-o开关设置输出文件。
        $ pip3 install txtferret
        
        6
      • 显示匹配项
        • 如果设置为"否",则它将在输出中将匹配的字符串全部编校在一起。 请注意,除非是故意的,否则不要通过cli开关覆盖此设置。
      • 分隔符
        • 定义分隔符。此分隔符将用于将TXT文件中的每一行拆分为 柱。脚本的输出将为您提供regex在其中匹配的列 添加到行号。
        • 注意:按列搜索会大大减慢脚本速度,因为您正在应用 表达式指向每一列而不是整行。
        • 您可以使用后跟代码的b来定义字节码分隔符。例如,b1将 使用头的开头作为分隔符(\x01以十六进制表示)
        • cli-使用-d开关设置分隔符并扫描每列而不是行。
        $ pip3 install txtferret
        
        7
      • 忽略列
        • 如果未设置分隔符设置或开关,则忽略此设置。
        • 添加整数列表,txtferret将跳过这些列。
        • 如果配置了ignore_columns:[2,6]并且csv行是hello,world,how,are,you,doing,today,则 worlddoing不会被扫描,但会被忽略。
        • 这在列数据集中特别有用,当你知道有一个专栏充满了误报。
      • 文件编码
        • 两种用途:
          • 用于将分隔符的值编码为文件的适当编码。
          • 用于在应用于健全性检查之前对文件中匹配的数据进行编码。
        • 默认值为'utf-8'

      为什么会这样?< >

      商业数据丢失预防(DLP)产品有一些缺点:

      • 他们常常依赖于上下文。如果商业解决方案每次都发出警报,那就太吵了 匹配16位字符串,因为并非所有客户都处理信用卡数据。
      • 许多供应商没有处理超过1 GB的大文件的廉价方法。更不能应付 大小为许多GB的文件。
      • 有些DLP解决方案只会根据前几兆字节对数据文件进行分类。
      • 许多dlp解决方案都是黑匣子,无法让你说出他们在寻找什么。 在你的数据中,或者他们如何知道他们在看什么。

      txtferret是在意识到这些限制之后诞生的。它不是完美的,但它是一个伟大的 可与DLP解决方案配对的健全性检查。以下是它设计的一些功能:

      • 几乎没有大小限制
        • 只要你能将任何大小的文件放在驱动器上,就可以对其运行。
        • 是蟒蛇…所以…对大文件没有速度保证,但至少它最终会完成。 我们发现txtferret可以在1到3分钟内扫描我们系统上约20gb的文件。
      • 可定制
        • 定义自己的正则表达式,并将它们与健全性检查配对。例如,使用 内置的luhn算法将筛选出许多信用卡号码的误报。匹配的 信用卡号将首先通过luhn算法运行。如果不通过,则丢弃。
      • 不需要上下文
        • 是的,这会对某些文件造成很多误报;但是, 如果您处理的文件不包含"visa"或"cve"等上下文,则需要 从某处开始。
      • 有用的输出
        • 指示找到字符串的行。
        • 如果定义了分隔符,则指示哪一列(例如:CSV文件使用逗号)。
        • 您可以选择屏蔽输出数据,以确保不放置敏感数据 输入日志文件或输出到终端。
      • 免费
        • 无合同
        • 每GB扫描的数据不允许有无耻的许可。
      • 你可以做出贡献!

      释放量

      版本0.2.1-2019-08-11

      • 修复了v0.2.0中引入的允许密钥错误

      版本0.2.0-2019-08-05
      • 因为tokenize是一个谎言,所以将tokenize更改为mask。是掩蔽。
        • 用"掩码"开关替换了"无标记化"开关。
      • 默认情况下已关闭遮罩。

      版本0.1.3-2019-08-05
      • 增加了多编码支持的文件编码设置。
        • 以字节为单位读取,默认情况下采用'utf-8'编码。

      版本0.1.2-2019-08-01

      • 修复了读取gzip文件时regex的错误。

      版本0.1.1-2019-07-30

      • 替换选项添加到筛选器中。

      版本0.1.0-2019-07-30

      • 删除了配置覆盖选项。
      • 添加了"忽略"列设置。

      版本0.0.4-2019-06-09
      • 通过--bulk开关添加了批量文件扫描。
      • 为批量扫描添加了多处理功能。
      < H4>版本0.0.3-2019-06-01

      • 添加了gzip检测和支持。

      开发

      关于开发的一些信息。

      运行测试

      $ pip3 install txtferret
      
      8

      贡献

      过程

      1. 创建问题。
      2. 分开回购。
      3. 做你的工作。
      4. 编写测试
      5. 提出请求。
        • 最好在拉取请求中包含问题。
      6. < > >

        样式

        • 黑色用于格式化。
        • 皮棉。

        许可证

        请参见许可证

        欢迎加入QQ群-->: 979659372 Python中文网_新手群

        推荐PyPI第三方库


热门话题
如何使用java获取相同XML标记的值?   多线程多线程notifywait问题java Intelij   java Hibernate多态HQL SELECT语句   java流获取总记录计数并分配回对象   java Tapestry,区域内循环   azure active directory使用msgraphsdkjava实现组$filter查询   JavaM2E正在从eclipse添加源文件夹   java如何正确指定类<?>使用泛型的参数   Spring中的java@RequestMapping无法让辅助控制器接管   java Mondrian试图优化细分市场。奇怪地加载,导致部分或完全空结果   在Java中玩一个简单的3x3骰子游戏   java如何在LDAP查询中使用like运算符?   java使用for循环为多个图像视图设置图像资源   spring如何设置Java HTTP客户端的密码?   java是一个创建空间子字符串的oops   java随机颜色网格