現代のサイバーセキュリティにおいて、フィッシング攻撃は依然として重大な脅威です。組織のセキュリティ意識を高め、従業員の対応能力を向上させるために、フィッシングシミュレーション訓練は非常に有効な手段となります。Gophishは、この訓練を支援するために設計された、強力かつ柔軟なオープンソースツールキットです。このガイドでは、Gophishの基本的な使い方からキャンペーンの実施、結果の分析までを詳しく解説します。さあ、Gophishの世界へ飛び込みましょう!🚀
1. Gophishとは?
Gophishは、企業やペネトレーションテスター(侵入テスト専門家)向けに開発されたオープンソースのフィッシングフレームワークです。ユーザーフレンドリーなインターフェースを備え、実際のフィッシング攻撃を模倣した訓練キャンペーンを簡単に設定・実行できます。
主な目的は、組織内の従業員がフィッシングメールを識別し、適切に対応する能力を測定・向上させることです。Gophishを使用することで、以下のようなメリットがあります。
- 従業員のセキュリティ意識向上: リアルな訓練を通じて、フィッシング攻撃の手口を学び、警戒心を高めることができます。
- 脆弱性の特定: どの従業員や部署がフィッシング攻撃に対して脆弱であるかを特定し、的を絞った対策を講じることができます。
- 訓練効果の測定: キャンペーンの結果を追跡・分析し、訓練プログラムの効果を定量的に評価できます。
- コスト効率: オープンソースであるため、ライセンス費用なしで利用できます。
- カスタマイズ性: メールテンプレートやランディングページを自由にカスタマイズし、組織の状況に合わせた訓練シナリオを作成できます。
⚠️ 倫理的な利用に関する注意:
Gophishは強力なツールですが、その使用は必ず倫理的な範囲内で行われるべきです。訓練目的であっても、対象者の同意を得ずにフィッシングシミュレーションを行うことは、プライバシーの侵害や信頼関係の損失につながる可能性があります。必ず、組織のポリシーに従い、適切な承認プロセスを経て実施してください。訓練の目的は罰することではなく、学びと意識向上にあることを忘れないでください。
2. Gophishのインストールとセットアップ
Gophishのセットアップは比較的簡単です。主に以下の方法があります。
2.1. 事前ビルド済みバイナリを使用する方法 (推奨)
最も簡単な方法は、Gophishの公式サイトまたはGitHubリリースページから、お使いのオペレーティングシステム(Windows, macOS, Linux)に対応したビルド済みバイナリをダウンロードすることです。
- Gophish GitHubリリースページにアクセスし、最新バージョンの適切なZIPファイルをダウンロードします。 (例: `gophish-v0.12.1-linux-64bit.zip`)
- ダウンロードしたZIPファイルを解凍します。
- ターミナル(Linux/macOS)またはコマンドプロンプト(Windows)を開き、解凍したディレクトリに移動します。
- (Linux/macOSの場合) 実行権限を付与します:
- Gophishを実行します: (Windowsの場合は `gophish.exe`)
- 初回起動時、コンソールに管理画面へのURL (デフォルト: `https://127.0.0.1:3333`) と初期ログイン情報(ユーザー名: `admin`、パスワード: ランダム生成される文字列)が表示されます。
- ブラウザで管理画面URLにアクセスし、表示された認証情報でログインします。初回ログイン後、パスワードの変更を求められますので、必ず変更してください。
🔥 ポートの競合に注意:
Gophishはデフォルトで管理画面用にポート `3333`、フィッシングサーバー(ランディングページ用)にポート `80` を使用します。これらのポートが他のアプリケーションで使用されている場合、起動時にエラーが発生します (`address already in use` など)。その場合は、`config.json` ファイルを編集してポート番号を変更する必要があります。
2.2. Dockerを使用する方法
Dockerがインストールされている環境であれば、Dockerイメージを利用するのが便利です。環境の分離やアップデートが容易になります。
- 公式Dockerイメージをプルします:
- コンテナを実行します: ポートの競合がある場合は、ホスト側のポート番号を変更してください (例: `-p 3334:3333 -p 8080:80`)。
- ブラウザで `https://
:3333` (または指定したポート) にアクセスします。 - 初回ログイン時のデフォルト認証情報は `admin` / `gophish` です(バージョン0.10.1以前の場合。以降はコンテナログで確認)。ログイン後、必ずパスワードを変更してください。
2.3. ソースからビルドする方法
開発者や特定のカスタマイズが必要な場合は、ソースコードからビルドすることも可能です。Go言語の開発環境 (バージョン1.10以上) とCコンパイラ (gccなど) が必要です。
- Go言語環境をセットアップします。
- リポジトリをクローンします:
- ソースディレクトリに移動します:
- ビルドを実行します:
- カレントディレクトリに `gophish` バイナリが生成されます。以降の実行方法はバイナリ版と同じです。
2.4. 設定ファイル (config.json)
Gophishのルートディレクトリにある `config.json` ファイルで、様々な設定を変更できます。主な設定項目は以下の通りです。
キー | デフォルト値 | 説明 |
---|---|---|
admin_server.listen_url |
127.0.0.1:3333 |
管理サーバーがリッスンするIPアドレスとポート。リモートアクセスを許可する場合は `0.0.0.0:3333` などに変更。 |
admin_server.use_tls |
true |
管理サーバーでTLS (HTTPS) を使用するかどうか。 |
admin_server.cert_path |
gophish_admin.crt |
管理サーバー用TLS証明書ファイルのパス。 |
admin_server.key_path |
gophish_admin.key |
管理サーバー用TLS秘密鍵ファイルのパス。 |
phish_server.listen_url |
0.0.0.0:80 |
フィッシングサーバー(ランディングページ)がリッスンするIPアドレスとポート。 |
phish_server.use_tls |
false |
フィッシングサーバーでTLS (HTTPS) を使用するかどうか。実際の訓練では信頼性を高めるために `true` にし、証明書を設定することを強く推奨します。 |
phish_server.cert_path |
example.crt |
フィッシングサーバー用TLS証明書ファイルのパス。 |
phish_server.key_path |
example.key |
フィッシングサーバー用TLS秘密鍵ファイルのパス。 |
db_name |
sqlite3 |
使用するデータベースの種類 (`sqlite3` または `mysql`)。 |
db_path |
gophish.db |
データベースファイルのパス(SQLite3の場合)または接続文字列(MySQLの場合)。MySQLの例: root:password@(127.0.0.1:3306)/gophish?charset=utf8&parseTime=True&loc=Local |
contact_address |
"" |
メールヘッダーに追加される連絡先アドレス(オプション)。 |
💡 ヒント:
config.json
にはデータベースの認証情報などが含まれるため、ファイルパーミッションを適切に設定し(例: `chmod 640 config.json`)、不正なアクセスから保護してください。
フィッシングサーバーをインターネットに公開する場合は、ファイアウォールの設定やTLS証明書の適切な構成(Let’s Encrypt などを使用)が不可欠です。
3. Gophishの主要コンポーネント
Gophishのキャンペーンは、いくつかのコンポーネントを組み合わせて作成されます。各コンポーネントの役割を理解することが重要です。
3.1. Sending Profiles (送信プロファイル)
フィッシングメールを送信するためのSMTPサーバー設定を定義します。Gmail、Microsoft 365、SendGridなどの外部SMTPサービスや、自社で運用するSMTPサーバーを指定できます。
- 名前 (Name): プロファイルの識別名。
- インターフェースタイプ (Interface Type): 通常は SMTP を選択。
- From: 送信元として表示されるメールアドレス(例: `noreply@your-training-domain.com`)。
- ホスト (Host): SMTPサーバーのアドレスとポート(例: `smtp.gmail.com:587`)。
- ユーザー名 (Username): SMTP認証用のユーザー名。
- パスワード (Password): SMTP認証用のパスワードまたはアプリパスワード。
- ヘッダー (Headers): カスタムメールヘッダーを追加できます (オプション)。
3.2. Landing Pages (ランディングページ)
ユーザーがフィッシングメール内のリンクをクリックした際に表示されるWebページです。多くの場合、正規のログインページや情報入力フォームを模倣して作成されます。
- 名前 (Name): ランディングページの識別名。
- HTMLコンテンツ: ページのHTMLコード。GophishのHTMLエディタで直接作成するか、既存のWebサイトからHTMLをインポート (`Import Site`機能) できます。
- キャプチャするデータ (Capture Submitted Data): チェックを入れると、ページ内のフォーム (
<form>
) から送信されたデータを記録します。 - パスワードをキャプチャ (Capture Passwords): チェックを入れると、`type=”password”` の入力フィールドのデータを記録します。
- リダイレクト先 (Redirect to): データ送信後にユーザーをリダイレクトさせるURL (例: 正規のログインページや「訓練完了」ページ)。
3.3. Email Templates (メールテンプレート)
送信するフィッシングメールの内容を定義します。実際のフィッシングメールを模倣して作成します。
- 名前 (Name): テンプレートの識別名。
- インポート (Import Email): 既存のメールファイル (.eml) をインポートしてテンプレートのベースにすることができます。
- 件名 (Subject): メールの件名。
- HTML / テキスト: メールの本文。HTML形式とプレーンテキスト形式の両方を用意できます。HTMLエディタでリッチなメールを作成可能です。
- トラッキング画像の追加 (Add Tracking Image): チェックを入れると、メール開封を検知するための透明な1×1ピクセルの画像(Webビーコン)を埋め込みます。
- 添付ファイル (Attachments): ファイルを添付できます(悪意のあるファイルの添付は避け、訓練目的の無害なファイルを使用してください)。
テンプレート内では、テンプレート変数を使用して、ユーザーごとにパーソナライズされたメールを作成できます。
変数 | 説明 |
---|---|
{{.FirstName}} |
受信者の名 |
{{.LastName}} |
受信者の姓 |
{{.Position}} |
受信者の役職 |
{{.Email}} |
受信者のメールアドレス |
{{.URL}} |
キャンペーンで設定されたランディングページへの一意なリンク |
{{.Tracker}} |
開封トラッキング用画像のURL (手動で埋め込む場合) |
{{.From}} |
送信プロファイルで設定された送信元アドレス |
{{.RID}} |
各受信者の一意な識別子 (Result ID) |
例: こんにちは、{{.LastName}} さん。アカウントの確認が必要です: {{.URL}}
3.4. Users & Groups (ユーザーとグループ)
フィッシングキャンペーンの対象となる受信者を管理します。ユーザーをグループ化することで、特定の部署や役職を対象としたキャンペーンを容易に実施できます。
- グループ作成 (New Group): 新しいグループを作成します。
- ユーザー追加: 手動で一人ずつユーザー情報(名, 姓, メールアドレス, 役職)を入力するか、CSVファイルを使って一括でインポート (`Bulk Import Users`) できます。
- CSVテンプレート: Gophishが提供するCSVテンプレートをダウンロードして使用すると便利です。
4. フィッシングキャンペーンの作成と実行
必要なコンポーネント(送信プロファイル、ランディングページ、メールテンプレート、ユーザーグループ)を準備したら、いよいよキャンペーンを作成して実行します。
- 左側のメニューから Campaigns をクリックし、New Campaign ボタンを押します。
- キャンペーン設定 を入力します:
- Name: キャンペーンの識別名 (例: 「2025年第2四半期 全社訓練」)。
- Email Template: 使用するメールテンプレートを選択します。
- Landing Page: 使用するランディングページを選択します。
- URL: メールテンプレート内の
{{.URL}}
変数に挿入されるURL。これはGophishサーバーのフィッシングサーバーアドレス(多くの場合、Gophishサーバー自身のIPアドレスまたはホスト名)である必要があり、受信者がアクセスできる必要があります。HTTPSを使用する場合は `https://your-gophish-domain.com` のように指定します。 - Launch Date: キャンペーンを開始する日時。デフォルトは即時開始です。未来の日時を指定して予約することも可能です。
- Send Emails By (Optional): メール送信を完了する日時。指定すると、Launch Dateからこの日時までの間に、メールが均等に分散されて送信されます。短時間に大量送信するのを避けたい場合に有効です。
- Sending Profile: メール送信に使用する送信プロファイルを選択します。
- Groups: キャンペーンの対象とするユーザーグループを選択します(複数選択可)。
- すべての設定を確認したら、Launch Campaign ボタンをクリックします。確認ダイアログが表示されるので、再度確認してローンチします。
キャンペーンが開始されると、自動的にキャンペーン結果ページにリダイレクトされます。
5. ダッシュボードと結果の分析
キャンペーン実行後、Gophishはリアルタイムで結果を収集し、ダッシュボードやキャンペーン詳細ページに表示します。これらのデータを分析することで、訓練の効果測定や改善点の特定が可能になります。
5.1. ダッシュボード (Dashboard)
Gophishにログインすると最初に表示される画面で、現在進行中および完了したキャンペーン全体の概要を把握できます。グラフや統計情報により、全体の傾向を視覚的に理解するのに役立ちます。
5.2. キャンペーン結果ページ (Campaign Results)
特定のキャンペーンを選択すると、そのキャンペーンの詳細な結果が表示されます。
- タイムライン (Timeline): キャンペーン中に発生したイベント(メール送信、開封、クリック、データ送信、報告)が時系列で表示されます。
- 集計結果:
- Email Sent: 送信されたメールの総数。
- Email Opened: 開封されたメールの数(トラッキング画像が読み込まれた数)。
- Clicked Link: メール内のリンクがクリックされた数。
- Submitted Data: ランディングページでデータが送信された数。
- Email Reported: ユーザーによって(もし報告機能があれば)フィッシングメールとして報告された数。
- 詳細テーブル (Details): 各受信者ごとの詳細なステータスが表示されます。
- Status: 現在のステータス(Sent, Opened, Clicked, Submitted, Reported)。
- Reported: 報告されたかどうか。
- IP Address: イベントが発生した際のIPアドレス。
- Browser / OS: イベントが発生した際のブラウザとOSの情報(User-Agentから推定)。
- Modified Date: 最後にステータスが更新された日時。
- Details: Submitted Dataがあった場合、送信された内容を確認できます(パスワードキャプチャを有効にしている場合は注意が必要です)。
5.3. 結果の分析と活用
収集されたデータを分析し、以下のようなインサイトを得て、今後の対策に活かしましょう。
- 開封率 (Opened / Sent): メールの件名や送信元アドレスがどれだけユーザーの注意を引いたかを示します。
- クリック率 (Clicked / Opened または Clicked / Sent): メール本文の内容やリンクの配置が、ユーザーのクリックをどれだけ誘発したかを示します。
- データ送信率 (Submitted / Clicked): ランディングページがどれだけ説得力があり、ユーザーに情報を入力させたかを示します。
- 部署・役職別の傾向: 特定のグループが高いクリック率やデータ送信率を示していないか確認します。もしそうであれば、そのグループに対する追加の教育や注意喚起が必要かもしれません。
- 時間帯による傾向: 特定の時間帯に開封やクリックが多い場合、その時間帯の業務状況やユーザーの心理状態が影響している可能性があります。
- 失敗パターンの特定: どのような種類のメール(例: パスワードリセット要求、緊急の通知、魅力的なオファー)にユーザーが引っかかりやすいかを特定します。
分析結果に基づき、以下のようなアクションを検討します。
- 追加の教育・訓練: クリック率やデータ送信率が高かったグループや、特定の攻撃パターンに弱かった従業員に対して、追加のトレーニングを実施します。
- セキュリティポリシーの見直し: 技術的な対策(メールフィルタリング強化、多要素認証の導入など)や、インシデント報告プロセスの改善を検討します。
- 次回の訓練計画への反映: 今回の結果を踏まえ、次回のフィッシングシミュレーションのシナリオや難易度を調整します。
6. 高度な機能とカスタマイズ
6.1. Gophish API
GophishはAPIファーストで設計されており、Web UIのほぼ全ての操作はRESTful JSON APIを通じて行うことができます。これにより、以下のような自動化や連携が可能になります。
- キャンペーンの自動作成・実行
- 外部システムとの結果連携
- カスタムレポートの生成
- 他のセキュリティツールとの統合
APIキーは設定 (Settings) ページで生成・管理できます。公式ドキュメントには詳細なAPIリファレンスがあり、Pythonクライアントライブラリも提供されています。
6.2. Webhook
キャンペーン中に特定のイベント(メール開封、クリック、データ送信など)が発生した際に、指定したURLにリアルタイムで通知(HTTP POSTリクエスト)を送信する機能です。これにより、外部システムでイベントを即座に検知し、自動的なアクション(例: SIEMへのログ送信、インシデント対応ワークフローのトリガー)を実行できます。Webhookは設定 (Settings) ページで設定します。
6.3. ソースコードのカスタマイズ
Gophishはオープンソースであるため、Go言語の知識があれば、ソースコードを直接変更して、特定のニーズに合わせた機能を追加・変更することも可能です。GitHubリポジトリで開発に参加することもできます。
7. セキュリティに関する考慮事項とベストプラクティス
Gophishを利用したフィッシング訓練を効果的かつ安全に実施するためには、いくつかの重要な点に注意する必要があります。
- 倫理と同意: 前述の通り、必ず組織のポリシーと関連法規を遵守し、適切な承認と(可能な限り)従業員への事前通知を行った上で実施してください。目的は罰ではなく教育であることを明確に伝えることが重要です。
- Gophishサーバーの保護:
- 管理画面へのアクセスは信頼できるネットワークからのみ許可し、強力なパスワードと可能であれば多要素認証(リバースプロキシ経由などで実装)を使用します。
config.json
へのアクセス権を適切に制限します。- Gophishを実行するサーバー自体を適切に保護し、OSやミドルウェアのアップデートを怠らないでください。
- 不要なポートはファイアウォールで閉じます。
- 訓練用ドメインとIPレピュテーション:
- 訓練専用のドメインを取得し、通常の業務ドメインとは明確に区別します。
- SPF, DKIM, DMARCレコードを適切に設定し、メールの到達性を高め、送信元ドメインの信頼性を確保します。
- 送信IPアドレスのレピュテーションが低下しないよう、送信量やペースに注意します。必要であれば専用のSMTPリレーサービスを利用します。
- データ管理:
- 訓練で収集したデータ(特にフォームから送信された情報)は機密情報として扱い、アクセスを制限し、不要になったら安全に削除します。
- パスワードのキャプチャは、そのリスクと必要性を慎重に検討した上で有効にしてください。キャプチャした場合の保管と削除に関する厳格なルールが必要です。
- 現実的なシナリオと段階的難易度:
- 訓練シナリオは、組織が実際に遭遇する可能性のある脅威を反映させます。
- 最初は比較的簡単なシナリオから始め、徐々に難易度を上げていくことで、従業員の学習効果を高めます。
- 過度に巧妙で、ほとんどの人が見分けられないような訓練は、従業員のフラストレーションを高めるだけで逆効果になる可能性があります。
- 報告プロセスの確立: 従業員が不審なメール(訓練メールを含む)を安全かつ簡単に報告できる明確なプロセスを確立し、周知します。
- フィードバックと継続的な改善: 訓練結果を従業員にフィードバックし(個人を特定しない形が望ましい場合もある)、継続的な学習の機会を提供します。訓練プログラム自体も定期的に見直し、改善します。
8. まとめ
Gophishは、組織のフィッシング対策能力を強化するための非常に強力で柔軟なオープンソースツールです。インストールからキャンペーンの作成、実行、結果分析まで、直感的なインターフェースで比較的容易に行うことができます。
しかし、その効果を最大限に引き出し、安全に運用するためには、倫理的な配慮、適切なサーバー管理、現実的なシナリオ設計、そして継続的な分析と改善が不可欠です。
このガイドが、Gophishを効果的に活用し、組織全体のセキュリティ意識向上に貢献するための一助となれば幸いです。フィッシングの脅威に立ち向かうために、Gophishを使った訓練をぜひ始めてみてください! 💪🛡️