
⠀⠀⠀⠀⠀⠀⠀⣤⣤⣄⣀⡀⠀⠀⠀⢀⣠⣤⣤⣄⡀⠀⠀⠀⢀⣀⣠⣤⣤⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠸⣿⣿⡿⠿⢿⣷⡄⢠⣿⣿⣿⣿⣿⣿⡄⢀⣾⡿⠿⢿⣿⣿⠇⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠈⠉⠀⠀⢸⣿⡇⢸⣿⣿⣿⣿⣿⣿⡇⢸⣿⡇⠀⠀⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⣠⣤⡀⠀⠀⠀⠀⠀⠀⠀⢸⣿⡇⢸⣿⣿⣿⣿⣿⣿⡇⢸⣿⡇⠀⠀⠀⠀⠀⠀⠀⢀⣤⣄⠀⠀⠀
⠸⣿⣿⣿⣿⣿⣿⣿⣿⣦⠀⢸⣿⡇⢸⣿⣿⣿⣿⣿⣿⡇⢸⣿⡇⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀⠀
⠀⠉⠉⠁⠀⠀⠀⠀⣿⣿⠀⢸⣿⡇⠀⠉⣿⣿⣿⣿⠉⠀⢸⣿⡇⠀⣿⣿⠀⠀⠀⠀⠈⠉⠉⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣀⣈⣻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣟⣁⣀⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠘⠿⠿⠿⠿⠿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠿⠿⠿⠿⠃⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢀⣤⣤⣤⣤⣤⣤⣴⣿⣿⣿⡇⢸⣿⡿⣿⣦⣤⣤⣤⣤⣤⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢸⣿⠋⠉⠉⠉⠉⠉⠉⢸⣿⡇⢸⣿⡇⠈⠉⠉⠉⠉⠉⠙⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⢰⣿⣿⣦⠀⢰⣿⣿⣦⠀⢸⣿⡇⢸⣿⡇⠀⣰⣿⣿⡆⠀⣴⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠈⠻⠿⠋⠀⠘⣿⣿⠃⠀⢸⣿⡇⢸⣿⡇⠀⠘⣿⣿⠃⠀⠙⠿⠟⠁⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣿⣦⣤⣼⣿⠃⠘⣿⣧⣄⣤⣿⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠛⠛⠁⠀⠀⠈⠛⠛⠛⠋⠀⠀⠀
⠀⠀⠀⠀⠀⠀ ⠀O C T O P I I⠀⠀⠀⠀
Copyright © 2023 RedHunt Labs Private Limited
Octopii は、光学式文字認識(OCR)、正規表現リスト、自然言語処理(NLP)を使用して、画像、PDF、文書内の政府発行ID、住所、メールアドレスなどの個人識別情報(PII)を公開されている場所から検索するツールです。
PII の漏洩は、サイバーセキュリティの分野でしばしば見落とされがちです。RedHunt Labs では、組織やサービスが必要とするサイバーセキュリティソリューションを、常に独創的かつ革新的な方法で提供することに取り組んでいます。私たちは、サーバーの設定が誤っている組織に数多く遭遇してきました。その結果、従業員や顧客の PII が常に漏洩し、悪意のある者にその出身地、ID番号、連絡先、所在地に関する機密情報が渡ってしまうのです。
そこで私たちは、PII の漏洩や機密文書がインターネット上でいかに簡単に自動発見・抽出されるかを示し、検出するためのツール、Octopii を開発しました。
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やファイルを引数として指定することもできます。
テスト用のサンプル PII を含む dummy-pii/ フォルダを用意しました。これを引数として渡すと、次のような出力が得られます。
owais@artemis ~ $ python3 octopii.py dummy-pii/
Searching for PII in dummy-pii/dummy-drivers-license-nebraska-us.jpg
{
"file_path": "dummy-pii/dummy-drivers-license-nebraska-us.jpg",
"pii_class": "Nebraska Driver's License",
"country_of_origin": "United States",
"faces": 1,
"identifiers": [],
"emails": [],
"phone_numbers": [
"4000002170"
],
"addresses": [
"Nebraska"
]
}
Searching for PII in dummy-pii/dummy-PAN-India.jpg
{
"file_path": "dummy-pii/dummy-PAN-India.jpg",
"pii_class": "Permanent Account Number",
"country_of_origin": "India",
"faces": 0,
"identifiers": [],
"emails": [],
"phone_numbers": [],
"addresses": [
"INDIA"
]
}
...
output.txt というファイルが作成され、ツールの出力が保存されます。このファイルにはリアルタイムで順次追記されます。
Octopii は、Tesseract による光学式文字認識(OCR)と NLTK による自然言語処理(NLP)を使用して、個人識別情報の文字列を検出します。これは以下の手順で行われます。
Octopii は画像(jpg、png)と文書(pdf、doc、txt など)をスキャンします。3つのソースをサポートしています。
画像は Python Imaging Library (PIL) で検出され、OpenCV で開かれます。PDF は画像のリストに変換され、OCR でスキャンされます。テキストベースのファイルタイプは文字列として読み込まれ、OCR なしでスキャンされます。
「Haar cascade」として知られる二値分類画像検出技術を使用して、画像内の顔を検出します。このリポジトリには、OpenCV が使用するカスケードデータを含む、事前学習済みのカスケードモデルが同梱されています。同一の PII 画像内で複数の顔を検出でき、検出された顔の数が返されます。
画像は、以下の画像変換手順でテキスト抽出のために「クリーニング」されます。

これらの手順では画像データ(写真の色を含む)が削除されるため、この画像クリーニング処理は顔検出の後に行われます。
Tesseract を使用して、画像/ファイルからテキスト文字列をすべて取得します。その後、改行文字('\n')とスペース(' ')で分割され、文字列のリストにトークン化されます。null 文字列や単一文字などの文字化けしたテキストはこのリストから破棄され、潜在的な単語の「理解可能な」リストが生成されます。
この単語リストは類似性チェッカー関数に渡されます。この関数は Gestalt パターンマッチングを使用して、PII 文書から抽出された各単語を definitions.json に含まれるキーワードリストと比較します。このチェックはクリーニングごとに1回行われます。キーワードリストからの単語が出現する回数がカウントされ、これが信頼度スコアの算出に使用されます。特定の定義のキーワードがこれらのスキャンで繰り返し出現すると、その定義が最高スコアを獲得し、予測された PII クラスとして選択されます。
Octopii はまた、正規表現を使用して、電子メール、電話番号、一般的な政府発行 ID の一意の識別子などの機密性の高い PII 部分文字列もチェックします。自然言語処理を使用して、住所や国などの地理位置情報データを抽出することもできます。
出力は以下の内容で構成されます。
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