サイバーセキュリティ啓発プラットフォーム。不審なSMS、メール、チャットメッセージ、またはリンクを貼り付けると、どの詐欺手法を検出したか、それぞれがなぜ重要なのか、次に何をすべきかを教えてくれます。
ライブデモ: https://threatripper.onrender.com(Renderの無料枠 — 無操作後の初回アクセスは起動に1分ほどかかる場合があります。)
これは教育用ツールであり、セキュリティ製品ではありません。アンチウイルスエンジン、マルウェアスキャン、送信者認証、ドメインレピュテーションサービスはありません。リンクが開かれることは決してありません。
目的と範囲。 Threatripperは、テキスト内の詐欺の指標を検出するための防御的・教育的ツールです。マルウェア、エクスプロイトコード、フィッシングキット、認証情報リスト、その他の攻撃的能力は含まれておらず、ネットワークリクエストを一切行いません。リポジトリ内のすべてのサンプルメッセージとドメインは、架空の予約済み
.example名を使用しており、検出ロジックを実演するためだけに存在します。自分自身と他者を守るためだけに使用してください。悪用はプロジェクトの目的に反します。詐欺は公式の窓口を通じて報告してください(制限事項を参照)。
4つのページ、ビルドステップなし、JavaScriptフレームワークなし、CDNなし:
| ページ | パス | 目的 |
|---|---|---|
| 分析 | / | メッセージやリンクを貼り付けると、スコア付きで説明された判定結果を取得 |
| 啓発 | /awareness.html | 7種類の詐欺ガイドと報告に関するアドバイス |
| クイズ | /quiz.html | サーバー側で採点される12のシナリオと解説 |
| 履歴 | /history.html | 最近の分析結果(識別子はすでに伏字化済み) |
分析は意図的に権威的ではなく説明可能なものになっています。スケール上のすべてのポイントは、重大度、信頼度、そしてなぜそれが重要なのかを説明する一文を伴う名前付きルールに対応しています。インターフェースは組み合わせボーナスを含む計算全体を表示するため、出力はただ信頼するのではなく、議論することができます。
行わないこと:
Python 3.11以降が必要です。
git clone <your-repo-url> threatripper
cd threatripper
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# Use "python3 -m pip", not a bare "pip": on a hardened distro (Kali, Debian,
# Fedora) pip may be an externally managed system binary that is blocked by
# PEP 668, and a bare "pip" will not resolve to the venv.
python3 -m pip install -r requirements.txt
python3 -m uvicorn backend.main:app --reload
http://127.0.0.1:8000 を開きます。
製品全体 — API、ルールカタログ、データベース、Web インターフェース — は、単一のオリジン上の単一プロセスから動作します。インタラクティブな API ドキュメントは /docs、生の OpenAPI スキーマは /openapi.json にあります。
テストを実行するには:
python3 -m pip install -r requirements-dev.txt
python3 -m pytest
同じ分析はターミナルからも実行できます。これは2つ目のフロントエンドであり、2つ目の実装ではありません。すべてのルール、スコア、説明、推奨アクションは、Webアプリが使用するのと同じ AnalysisService から取得されるため、両者が何が危険かについて食い違うことはありません。
サーバーもポートもネットワークも不要です。調査対象のメッセージがまさにインシデントである場合に役立ちます。
# Analyse a pasted message
./threatripper.sh "URGENT: your account will be closed, share the OTP"
# Or pipe it in, which is the natural way to use it
pbpaste | ./threatripper.sh
# A bare link
./threatripper.sh "http://verify-account.example/login"
# The API payload, for scripts
./threatripper.sh "share your OTP" --json | jq .result.risk_level
# Only fail when it is serious
./threatripper.sh --fail-on critical "see you tomorrow" ; echo $? # 0
./threatripper.sh --fail-on critical "your bank account will be suspended in 24 hours, verify at http://bank-verify.example/login and share the OTP" ; echo $? # 1
# Stored history, shared with the web app
./threatripper.sh history
./threatripper.sh history --level critical --json
# Analyse without keeping any record
./threatripper.sh "share your OTP" --no-store
インタラクティブ実行の開始時に、赤い THREATRIPPER バナーが ANSI Shadow フェイスで描画されて表示される。これは stderr に出力され、--json の場合や、出力がパイプまたはリダイレクトされる場合はスキップされるため、ログに残ったりパイプラインを壊したりすることはない。--no-color を指定するとバナーは維持されるが色は失われる。
ANSI Shadow の各グリフは East Asian の曖昧幅文字であるため、一部のターミナル — 典型的には CJK ロケールや、78 桁より狭いウィンドウ — では行が異なる幅で描画され、文字がずれてしまう。その場合、バナーは静かに純粋な ASCII フェイスにフォールバックする。選択は --banner shadow|ascii|none で上書きできる:
./threatripper.sh --banner shadow "message" # force the block letters
./threatripper.sh --banner ascii "message" # force the terminal-safe face
./threatripper.sh --banner none "message" # no banner at all
ウェブアプリと同様に、分析結果はデフォルトで共有履歴に追加されます —
同じマスキング済みプレビューが保存され、生のテキストは決して保存されません。記録を残さずに分析するには --no-store を指定してください。
./threatripper.sh analyze --help と ./threatripper.sh history --help で、すべてのオプションを確認できます。ランチャーはプロジェクトの .venv インタープリターを優先し、自身の場所を解決するため、どのディレクトリからでも、また virtualenv がアクティブかどうかに関係なく動作します。python3 -m backend.cli も同等です。
ターミナルツールはスクリプト内で使用されるため、「何か見つかったか?」という問いに、文章を解析することなく答えられる必要があります。
| コード | 意味 |
|---|---|
0 | 何も見つからなかった、または --fail-on のしきい値以下 |
1 | しきい値以上で何かが見つかった |
2 | コマンドラインが誤っていた |
3 | 分析対象が存在しなかった、または分析を実行できなかった |
しきい値のデフォルトは suspicious です。任意のバンド(low、suspicious、medium、high、critical)を --fail-on に指定して変更できます。
# Fail a deploy pipeline only on a serious finding
./threatripper.sh --fail-on critical "$MESSAGE" || echo "review this message"
利用エラーは意図的に検出結果とコードを共有しないため、スクリプトは「このメッセージは危険だ」と「フラグの入力が間違っている」を区別できます。認識されないリスク帯域も、すべて問題なしと報告するのではなく、非ゼロで終了します。
| スコア | レベル | 意味 |
|---|---|---|
| 0–20 | LOW | 詐欺の指標がほとんど、またはまったくない。安全を保証するものではない。 |
| 21–40 | SUSPICIOUS | 疑わしい特徴がいくつかある。独立して検証すること。 |
| 41–60 | MEDIUM | 複数の詐欺シグナルがある。このメッセージに基づいて行動しないこと。 |
| 61–80 | HIGH | 強い詐欺指標がある。敵対的なものとして扱うこと。 |
| 81–100 | CRITICAL | 進行中の詐欺試行を示す非常に強い指標がある。 |
id、category、severity、confidence、explanation を持ちます。suspicious_link 指標を生成します。/api/scoring で公開されています。URGENT: Your bank account will be SUSPENDED within 24 hours.
Verify now at http://kyc-update.example/verify
Share the OTP sent to your mobile. Do not tell your family.
| 指標 | カテゴリ | 重大度 | 寄与度 |
|---|---|---|---|
| OTPまたは確認コードの要求 | credential_request | 20 | 19.0 |
| 不審なリンク構造 | malicious_url | 20 | 18.0 |
| アカウント停止の脅迫 | threat | 15 | 12.8 |
| 事実を秘密にするよう指示 | isolation | 15 | 12.8 |
| KYC期限切れの圧力 | fake_kyc | 12 | 8.4 |
| 緊急性/今すぐ行動を促す表現 | urgency | 10 | 7.0 |
これは生の指標ポイントで78.0点であり、これに組み合わせボーナス(緊急性+脅迫、緊急性+認証情報、認証情報+リンク、および複数の脅迫カテゴリ)が加わり、100点の上限によってCRITICALに制限されます(この例は実際に値100で実行されます)。
埋め込まれたリンクは、構造上の不備ごとに1行ずつではなく、単一の suspicious_link 指標を生成することに注意してください。メッセージ内の単一のリンクは重大度20に制限されるため、1つの不完全なアドレスがそれ以外は普通のメッセージを支配することはありません。同じURLを単独で送信した場合は、完全に詳細に分析されます。
同じメッセージをインターフェースで表示すると、これらの各行がそのポイントとともに表示されます。計算を確認できます。