⠀⠀⠀⠀⠀⠀⠀⣤⣤⣄⣀⡀⠀⠀⠀⢀⣠⣤⣤⣄⡀⠀⠀⠀⢀⣀⣠⣤⣤⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠸⣿⣿⡿⠿⢿⣷⡄⢠⣿⣿⣿⣿⣿⣿⡄⢀⣾⡿⠿⢿⣿⣿⠇⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠈⠉⠀⠀⢸⣿⡇⢸⣿⣿⣿⣿⣿⣿⡇⢸⣿⡇⠀⠀⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⣠⣤⡀⠀⠀⠀⠀⠀⠀⠀⢸⣿⡇⢸⣿⣿⣿⣿⣿⣿⡇⢸⣿⡇⠀⠀⠀⠀⠀⠀⠀⢀⣤⣄⠀⠀⠀
⠸⣿⣿⣿⣿⣿⣿⣿⣿⣦⠀⢸⣿⡇⢸⣿⣿⣿⣿⣿⣿⡇⢸⣿⡇⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀⠀
⠀⠉⠉⠁⠀⠀⠀⠀⣿⣿⠀⢸⣿⡇⠀⠉⣿⣿⣿⣿⠉⠀⢸⣿⡇⠀⣿⣿⠀⠀⠀⠀⠈⠉⠉⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣀⣈⣻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣟⣁⣀⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠘⠿⠿⠿⠿⠿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠿⠿⠿⠿⠃⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢀⣤⣤⣤⣤⣤⣤⣴⣿⣿⣿⡇⢸⣿⡿⣿⣦⣤⣤⣤⣤⣤⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢸⣿⠋⠉⠉⠉⠉⠉⠉⢸⣿⡇⢸⣿⡇⠈⠉⠉⠉⠉⠉⠙⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⢰⣿⣿⣦⠀⢰⣿⣿⣦⠀⢸⣿⡇⢸⣿⡇⠀⣰⣿⣿⡆⠀⣴⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠈⠻⠿⠋⠀⠘⣿⣿⠃⠀⢸⣿⡇⢸⣿⡇⠀⠘⣿⣿⠃⠀⠙⠿⠟⠁⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣿⣦⣤⣼⣿⠃⠘⣿⣧⣄⣤⣿⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠛⠛⠁⠀⠀⠈⠛⠛⠛⠋⠀⠀⠀
⠀⠀⠀⠀⠀⠀ ⠀O C T O P I I⠀⠀⠀⠀
Copyright © 2023 RedHunt Labs Private Limited
Octopii 是一款个人身份信息(PII)扫描器,它使用光学字符识别(OCR)、正则表达式列表和自然语言处理(NLP)来搜索公开可访问位置中的身份证件、地址、电子邮件等图像、PDF 和文档中的 PII。
PII 泄露在网络安全领域经常被忽视。在 RedHunt Labs,我们始终致力于寻找不同且创新的方法来提供组织和服务所需的网络安全解决方案。我们遇到了大量服务器配置不当的组织。这导致员工和客户的 PII 不断泄露,使恶意方获得有关其来源、身份证号、联系方式和位置等敏感信息。
这就是我们创建 Octopii 的原因,它是一个用于演示和检测在互联网上自动发现和提取泄露的 PII 及敏感文档是多么容易的工具。
pip install -r requirements.txt 安装所有依赖。sudo apt install tesseract-ocr -y 或在 Arch Linux 上通过 sudo pacman -Syu tesseract 安装本地 Tesseract 辅助工具。python -m spacy download en_core_web_sm 安装本地 Spacy 语言定义。安装完成后,即可使用。
要运行 Octopii,请键入
python3 octopii.py <要扫描的位置>
其中 <要扫描的位置> 是一个文件或目录。
Octopii 目前支持通过文件系统路径、S3 URL 和 Apache 开放目录列表进行本地扫描。您也可以提供单个图像 URL 或文件作为参数。
我们提供了一个 dummy-pii/ 文件夹,其中包含供您测试 Octopii 的示例 PII。将其作为参数传递,您将得到以下输出
owais@artemis ~ $ python3 octopii.py dummy-pii/
在 dummy-pii/dummy-drivers-license-nebraska-us.jpg 中搜索 PII
{
"file_path": "dummy-pii/dummy-drivers-license-nebraska-us.jpg",
"pii_class": "内布拉斯加州驾驶执照",
"country_of_origin": "美国",
"faces": 1,
"identifiers": [],
"emails": [],
"phone_numbers": [
"4000002170"
],
"addresses": [
"内布拉斯加州"
]
}
在 dummy-pii/dummy-PAN-India.jpg 中搜索 PII
{
"file_path": "dummy-pii/dummy-PAN-India.jpg",
"pii_class": "永久账号",
"country_of_origin": "印度",
"faces": 0,
"identifiers": [],
"emails": [],
"phone_numbers": [],
"addresses": [
"印度"
]
}
...
会创建一个名为 output.txt 的文件,其中包含工具的输出。此文件会按顺序实时追加内容。
Octopii 使用 Tesseract 进行光学字符识别(OCR),并使用 NLTK 进行自然语言处理(NLP),以检测个人身份信息的字符串。通过以下步骤完成:
Octopii 扫描图像(jpg 和 png)和文档(pdf、doc、txt 等)。它支持三种来源:
图像通过 Python Imaging Library (PIL) 检测,并借助 OpenCV 打开。PDF 被转换为图像列表,并通过 OCR 进行扫描。基于文本的文件类型被读取为字符串,无需 OCR 即可扫描。
使用一种称为“Haar 级联”的二元分类图像检测技术来检测图像中的人脸。此仓库中提供了一个预训练的级联模型,其中包含供 OpenCV 使用的级联数据。可以在同一张 PII 图像中检测到多张人脸,并返回检测到的人脸数量。
然后对图像进行“清洗”以提取文本,经过以下图像转换步骤:

由于这些步骤会剥离图像数据(包括照片中的颜色),因此此图像清洗过程在人脸检测之后进行。
使用 Tesseract 从图像/文件中抓取所有文本字符串。然后将其分词为字符串列表,按换行符('\n')和空格(' ')分隔。乱码文本(例如 null 字符串和单个字符)会从该列表中丢弃,从而得到“可理解”的潜在单词列表。
然后将此单词列表输入相似度检查函数。此函数使用 Gestalt 模式匹配将 PII 文档中提取的每个单词与 definitions.json 中存在的关键词列表进行比较。每次清洗都会进行一次此检查。统计关键词列表中单词出现的次数,并据此得出置信度分数。当某个特定定义的关键词多次出现时,该定义获得最高分,并被选为预测的 PII 类别。
Octopii 还使用正则表达式检查敏感 PII 子串,例如电子邮件、电话号码和常见的政府 ID 唯一标识符。它还可以通过自然语言处理提取地理位置数据,例如地址和国家。
输出包含以下内容:
file_path:包含 PII 的文件的路径pii_class:该文件包含的 PII 类型country_of_origin:PII 的来源国家identifiers:可用于定位 PII 中提及的个人的唯一标识符、代码或号码emails 和 phone_numbers:文件中的联系信息addresses:PII 中的任何形式的地理位置数据。可用于三角定位个人的位置。点击此处 阅读如何为 Octopii 做出贡献。
……以及无数其他项目
本工具仅用于研究和教育目的。RedHunt Labs 及本项目的其他贡献者不对该工具的恶意使用承担任何责任。
Copyright © 2023 RedHunt Labs Private Limited.
作者:Owais Shaikh