Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
FARO — FARO - 文档敏感性检测器 | Kitploit
工具/GitHubGitHub/gradiant/faro
静态分析漏洞分析配置审计数据泄露信息收集秘密检测机器学习学习与教育
GitHubgradiant/faro

FARO

FARO - 文档敏感性检测器

查看仓库
108204年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

FARO(文档敏感度检测器)

FARO LOGO

目录

  • 这是什么
  • 这里有什么?
  • 使用 Docker 运行 FARO
  • 在宿主机上运行 FARO
    • 前提条件
    • 虚拟环境
    • 依赖项
    • NER 模型
    • FARO Spider
    • 单个文件检测
  • 技术细节
    • FARO 实体检测器
    • 配置
    • 支持的输入文件格式
    • 技术
    • 测试
    • 安装 Git-LFS
    • FARO 检测附加参数
    • 已知问题
  • 贡献者

这是什么

FARO 是一个用于检测组织中文档敏感信息的工具。它面向那些希望追踪组织内部敏感文档,但又不愿花费大量时间和金钱配置复杂数据保护工具的小公司和特定用户。

FARO 从文档中提取敏感指标(例如文档 ID、货币数量、个人电子邮件),并根据文档中指标的出现频率和类型为文档分配敏感度评分(从低到高)。

目前,该工具的所有功能均适用于西班牙语编写的文档,但可以轻松扩展以支持更多语言。

该工具由 TEGRA R&D 网络安全中心 开发。

这里有什么?

该项目包含以下文件夹:

  • faro/ : 这是 FARO 模块,包含主要功能。
  • config/: Yaml 配置文件存放于此。每种语言有一个 yaml 文件(外加一个 nolanguage.yaml 为未检测到的语言提供基本功能),以及一个所有语言通用配置的 yaml 文件 config/commons.yaml。
  • models/: 此文件夹用于放置 FARO 模型。
  • faro_detection.py: 用于对单个文件进行独立操作的 FARO 启动器。
  • faro_spider.sh: 用于批量处理的脚本。
  • docker_build_faro.sh: 用于在 Linux 和 Mac OS 上构建 FARO Docker 镜像的脚本。
  • docker_build_faro.bat: 用于在 Windows 上构建 FARO Docker 镜像的脚本。
  • docker_run_faro.sh: 用于在 Linux 和 Mac OS 上运行 FARO 容器的脚本。
  • docker_run_faro.bat: 用于在 Windows 上运行 FARO 容器的脚本。
  • CHANGELOG: FARO 变更日志。

使用 Docker 运行 FARO

FARO 可以作为独立容器使用 Docker 运行。您可以自行构建镜像,也可以从 Docker Hub 仓库 获取。

从 Docker Hub 获取 FARO 镜像

假设您的系统已安装并运行 Docker,执行以下命令从 Docker Hub 获取 最新的 FARO 镜像。

docker pull gradiant/faro

要运行 Docker 镜像,请使用脚本 docker_run_faro.sh(Linux/Mac OS)或 docker_run_faro.bat(Windows)。您可以在项目根目录或最新发布版中找到它们。

构建 FARO 镜像

假设您的系统已安装并运行 Docker,按以下步骤构建 FARO 镜像。

Linux 和 Mac OS

./docker_build_faro.sh

Windows

docker_build_faro.bat

运行 FARO 容器

项目根目录提供了一些脚本来运行 FARO 容器。为了方便,您可以复制这些脚本并在任何地方使用。"output" 文件夹将在您当前目录下创建。

Linux 和 Mac OS

./docker_run_faro.sh <your folder with files>

Windows

docker_run_faro.bat <your folder with files>

我们通过 tika 的 tesseract 集成添加了 OCR 支持。可以通过使用环境变量文件对 OCR 过程进行一些自定义,该文件的路径需要作为脚本的第二个参数提供。我们提供了一个带注释的示例作为模板 此处

./docker_run_faro.sh <your folder with files> <path to env file>

例如:

./docker_run_faro.sh ../data docker_faro_env_example.list

结果

FARO 在当前文件夹中创建一个 "output" 文件夹,并将执行结果存储在两个文件中:

  • output/scan.$CURRENT_TIME.csv: 一个 csv 文件,包含文档的评分以及每个文件中指标的出现频率。
filepath,score,person_position_organization,monetary_quantity,signature,personal_email,mobile_phone_number,financial_data,document_id,custom_words,meta:content-type,meta:author,meta:pages,meta:lang,meta:date,meta:filesize,meta:num_words,meta:num_chars,meta:ocr
/Users/test/code/FARO_datasets/quick_test_data/Factura_NRU_0_1_001.pdf,high,0,0,0,0,0,0,1,4,application/pdf,Powered By Crystal,1,es,,85739,219,1185,False
/Users/test/code/FARO_datasets/quick_test_data/Factura_Plancha.pdf,high,0,6,0,0,0,0,2,8,application/pdf,Python PDF Library - http://pybrary.net/pyPdf/,1,es,,77171,259,1524,True
/Users/test/code/FARO_datasets/quick_test_data/20190912-FS2019.pdf,high,0,3,0,0,0,0,1,2,application/pdf,FPDF 1.6,1,es,2019-09-12T20:08:19Z,1545,62,648,False
  • output/scan.$CURRENT_TIME.entity: 一个 json 文件,包含文件中提取的指标(分解后)的列表。例如:
{"filepath": "/Users/test/code/FARO_datasets/quick_test_data/Factura_NRU_0_1_001.pdf", "entities": {"custom_words": {"facturar": 3, "total": 1}, "prob_currency": {"12,0021": 1, "12,00": 1, "9,92": 1, "3,9921": 1, "3,99": 1, "3,30": 1, "15,99": 1, "13,21": 1, "1.106.166": 1, "1,00": 1, "99,00": 1}, "document_id": {"89821284M": 1}}, "datetime": "2019-12-11 14:19:17"}
{"filepath": "/Users/test/code/FARO_datasets/quick_test_data/Factura_Plancha.pdf", "entities": {"document_id": {"H82547761": 1, "21809943D": 2}, "custom_words": {"factura": 2, "facturar": 2, "total": 2, "importe": 2}, "monetary_quantity": {"156,20": 4, "2,84": 2, "0,00": 2, "159,04": 2, "32,80": 4, "191,84": 2}, "prob_currency": {"1,00": 6, "189,00": 2}}, "datetime": "2019-12-11 14:19:27"}
{"filepath": "/Users/test/code/FARO_datasets/quick_test_data/20190912-FS2019.pdf", "entities": {"document_id": {"C-01107564": 1}, "custom_words": {"factura": 1, "total": 1}, "monetary_quantity": {"3,06": 1, "0,64": 1, "3,70": 1}}, "datetime": "2019-12-11 14:19:33"}

在宿主机上运行 FARO

注意:仅限 Linux 和 Mac OS X

前提条件

该模式需要一些操作系统和库才能正常工作。

  • Linux 或 Mac OS
  • Java 1.7 或更高版本
  • virtualenv(非必需,但强烈推荐)
  • GNU parallel(用于加速爬虫脚本。您可以在此处查看有关该工具的更多信息 here)
  • 已安装 git lfs。

虚拟环境

建议使用单独的虚拟环境。使用 virtualenv 实例化虚拟环境。

virtualenv -p `which python3` <yourenvname>

要激活终端上的虚拟环境,只需输入:

source <yourenvname>/bin/activate

依赖项

启动系统最简单的方法是安装依赖项,如下所示:

pip install -r requirements.txt

依赖项列表如下:

  • SpaCy(至少包含西班牙语语言模型)
  • numpy
  • scipy
  • sklearn
  • gensim
  • sklearn-crfsuite
  • fuzzywuzzy
  • tika
  • gensim
  • pyyaml
  • pandas

以下依赖项用于测试:

  • mox
  • unittest-xml-reporting

NER 模型

FARO 依赖于多个 ML 模型才能工作。

detection:
    nlp_model : es_core_news_sm
    crf_ner_list: models/crf_professions_v1.joblib
    personal_email_detection: models/email_detector.joblib
    target_list: models/legal.txt
    crf_ner_classic: models/crf_classic_step1.joblib,models/crf_classic_step2.joblib,models/crf_classic_step3.joblib,models/crf_classic_step4.joblib,models/crf_classic_step5.joblib
    corp_mail_list: models/corp_mail_list.txt

在我们的仓库中,由于模型体积较大,我们通过 Git LFS 管理模型。如果您已安装 git-lfs,则在首次克隆仓库时应自动下载模型。

如果您想手动下载模型,请从项目根目录执行以下命令。

git lfs pull

检查 config/es.yml 文件中的路径是否指向模型。

FARO Spider

我们的爬虫是一个脚本,用于递归分析文件夹中的文档,并将分析结果存储在文件中。

./faro_spider.sh <your folder with files>

添加 OCR 后,可以通过环境变量自定义 FARO 执行的一些配置:

  • FARO_DISABLE_OCR:如果找到此变量(任意值),FARO 将不会对文档执行 OCR
  • FARO_REQUESTS_TIMEOUT:如果 tika 服务器没有响应,FARO 超时前等待的秒数(默认:60)
  • FARO_PDF_OCR_RATIO:用于混合文档(文本和图像)的 PDF 在强制 OCR 时的字节/字符比(默认:150 字节/字符)

日志配置也可以通过环境变量进行配置:

  • FARO_LOG_LEVEL:Faro 日志级别(默认:INFO)
  • FARO_LOG_FILE:Faro 日志文件(默认:None)。使用 Docker 时,请确保将其设置在 output 文件夹内,以便在宿主机上持久化。

单个文件检测

您可以使用我们的 faro_detection.py 脚本对单个文件执行 FARO 检测

./faro_detection.py -i <your_file>

将生成两个输出文件,路径为 <your_file>.entity 和 <your_file>.score。

a) <your_file>.entity:一个 json 文件,包含按类型排序的实体列表及其出现次数(实体检测器模块的输出):

{"LOC": {"Pontevedra": 1}, "MONEY": {"1.000 euros": 2}, "PER": {"Betty Corti\u00f1as": 1, "Eva Expósito": 1, "Belén Portela": 1, "Marta Rivadulla": 1, "Miguel Rivas": 1}, "PROF": {"el tutor": 1}, "ORG": {"Centro de Recursos Educativos": 1}}

b) <your_file>.score:一个 json 文件,包含实体类型及其在文本中出现的次数。该 json 还包含属性 "score" 中的敏感度评分(可以是 "low"、"medium" 和 "high")。

{"score": "high", "summary": {"monetary_quantity": 1, "person_position": 1, "mobile_phone_number": 1, "personal_email": 1, "credit_account_number": 2}}

有关可以传递给检测脚本的附加参数的信息,请查看此处。

技术细节

FARO 实体检测器

FARO 实体检测器执行两个步骤:

  1. 提取敏感指标:指标是实体和其他文本元素(例如货币数量),它们很可能出现在敏感文档中。

指标列表如下:

  • person_position_organization:这是从文档中提取并链接在一起的一组实体(人、职位、组织)。

  • monetary_quantity:货币数量(目前仅支持欧元和美元)。

  • signature:输出文档的签署人

  • personal_email:非企业邮箱(例如不是 info@ rrhh@ 等)

  • mobile_phone_number:手机号码(过滤掉非手机号码)

  • financial_data:信用卡和 IBAN 账号

  • document_id:西班牙 NIF 和 CIF。

这些句子的唯一计数被收集到 json 对象中,并作为下一步的输入。

  1. 对文档的敏感度进行评分:应用分类规则(使用阈值)对阶段 1 中提取的指标进行敏感度评分。

应用以下规则:

  • 每个敏感度级别为敏感度指标设置阈值。文档必须至少满足其中一个阈值(最小值和最大值)才能获得该评分。

  • 如果文档中出现不同的敏感度阈值(当前配置为三个),即使不满足该级别的所有阈值,文档的敏感度评分也会升级。

下载工具