
Certstreamを使用したフィッシング検出ツール
Certificate Transparency Log (CTL) に報告された不審なTLS証明書の発行を、CertStream API を介してほぼリアルタイムで検出します。「不審」とは、設定ファイルに基づいてドメイン名のスコアが特定のしきい値を超えたものを指します。
これは動作するPoCです。ニーズに合わせてコードを自由に修正・調整してください。👍

このスクリプトはPython2またはPython3で正常に動作します。いずれの場合も、ソースコードをクローンまたはダウンロードした後、以下のコマンドで依存パッケージをインストールしてください。
pip install -r requirements.txt
Phishing Catcherは、シンプルなYAML設定ファイルを使用して、TLS証明書のコモンネームまたはSANフィールド(つまり証明書のドメイン名)に含まれる文字列に数値スコアを割り当てます。デフォルトの設定ファイル suspicious.yaml には適切なデフォルト値が含まれていますが、上書きファイル external.yaml を編集することで、含まれる文字列や各文字列に割り当てるスコアを調整・追加できます。
デフォルトの suspicious.yaml とユーザーが変更可能な external.yaml の両方の設定ファイルには、keywords と tlds という2つのYAMLディクショナリが含まれています。ディクショナリのキーは文字列、値は、発行された証明書のドメイン名にその文字列が見つかった場合に割り当てるスコアです。例:
keywords:
'login': 25
ここでは、TLS証明書のドメイン名に汎用的なキーワード login が見つかった場合、スコア 25 が追加されます。この値を大きくすると、文字列 login を含むドメインに対する疑念のレベルが上がり、これらの証明書発行をより厳しく精査できるようになります。
ただし、Phishing Catcherによって不審と報告されるためには、特定の証明書に割り当てられたスコアが以下のしきい値以上(>=)である必要があります。
| スコア | 報告されるレベル |
|---|---|
| 65 | 潜在的 |
| 80 | 可能性が高い |
| 90 | 疑わしい |
💡 スコアリングアルゴリズムの詳細については、ソースコード内の
score_domain()関数を参照してください。
設定が完了したら、スクリプトを実行するだけで使用できます。
$ ./catch_phishing.py

MacOSを実行している場合、または異なるOSバージョンでphishing_catcherのインストールが難しい場合は、ツールをDocker化することが選択肢の一つです。
docker build . -t phishing_catcher

GNU GPLv3
このツールが役に立った場合は、コーヒーを一杯おごっていただけると嬉しいです。