Gophish:Linuxで社内フィッシングシミュレーションシステムを自作してセキュリティテストと教育を行う

Security tutorial - IT technology blog
Security tutorial - IT technology blog

背景:「実際の攻撃体験」がトレーニングスライドより効果的な理由

数年間のsysadmin経験で気づいたことがあります。従業員が2時間のセキュリティ研修を受けても、2週間後にはメールで届いたフィッシングリンクをクリックしてしまう——という現実です。理論的なトレーニングだけでは不十分で、実際に体験して初めて記憶に定着するのです。

そこで使い始めたのが Gophish — 社内でフィッシングシミュレーションを自主運用するためのオープンソースツールです。年間数千ドルかかる外部サービスを契約する代わりに、会社のVPSに自分でデプロイしてキャンペーンを実行することができます。

Gophishを使うと、実用的なことが色々できます:

  • 管理下でなりすましフィッシングメールを作成する
  • 実在するログインページをクローンしてランディングページを構築する
  • 誰がクリックし、誰がフォームを送信し、誰が不審なメールを積極的に報告したかを追跡する
  • 部門別の脆弱性分析レポートをエクスポートする

免責事項:社内利用のみを対象とし、必ず経営陣からの書面による許可を取得してください。この範囲を超えた使用は法律違反となります。

LinuxへのGophishインストール

システム要件

  • Ubuntu 20.04以上またはDebian 11以上(systemd対応ディストリビューションであれば可)
  • 最低1 CPU、1GB RAM — ただし2GBあるとより快適
  • 専用ドメインまたはサブドメイン(キャンペーンの信憑性を高めるため推奨)
  • ポート3333(管理パネル)、80/443(フィッシングサーバー)

ダウンロードとインストール

Gophishはバイナリ形式で配布されており、ランタイムや追加の依存関係は不要です:

# Gophish実行用の専用ユーザーを作成する(最小権限の原則)
sudo useradd -r -s /bin/false gophish

# ディレクトリを作成する
sudo mkdir -p /opt/gophish
cd /opt/gophish

# バイナリをダウンロードする(最新バージョンはgithub.com/gophish/gophish/releasesで確認)
wget https://github.com/gophish/gophish/releases/download/v0.12.1/gophish-v0.12.1-linux-64bit.zip

unzip gophish-v0.12.1-linux-64bit.zip
rm gophish-v0.12.1-linux-64bit.zip

# 権限を設定する
sudo chown -R gophish:gophish /opt/gophish
sudo chmod +x /opt/gophish/gophish

起動前のconfig.json設定

config.jsonを開いて、正しいインターフェースにバインドするよう設定を変更します:

{
  "admin_server": {
    "listen_url": "127.0.0.1:3333",
    "use_tls": true,
    "cert_path": "gophish_admin.crt",
    "key_path": "gophish_admin.key"
  },
  "phish_server": {
    "listen_url": "0.0.0.0:80",
    "use_tls": false,
    "cert_path": "example.crt",
    "key_path": "example.key"
  },
  "db_name": "sqlite3",
  "db_path": "gophish.db"
}

管理サーバーを127.0.0.1にバインドしているため、SSHトンネル経由でのみアクセスできます。管理パネルをインターネットに公開することは絶対に避けてください。ローカルマシンからはSSHトンネルでアクセスします:

ssh -L 3333:127.0.0.1:3333 user@your-server-ip

systemdサービスの作成

sudo nano /etc/systemd/system/gophish.service
[Unit]
Description=Gophish Phishing Framework
After=network.target

[Service]
Type=simple
User=gophish
WorkingDirectory=/opt/gophish
ExecStart=/opt/gophish/gophish
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable gophish
sudo systemctl start gophish

# 初回起動時、ログから一時パスワードを取得する
sudo journalctl -u gophish | grep -i "password"

初回ログイン後は、すぐに管理者パスワードを変更してください。サーバー用の強力なパスワードの生成にはtoolcraft.appのパスワードジェネレーターをよく使っています — 100%ブラウザ上で動作するため、生成時にパスワードがネットワーク経由で漏洩する心配がありません。

詳細設定:初めてのフィッシングキャンペーンを構築する

1. Sending Profile — SMTP設定

SMTP設定の誤りは、キャンペーンが最初から失敗する最大の原因です — メールがインボックスに届かなかったり、ユーザーが見る前にスパムフィルターに引っかかったりします。実用的な選択肢:

  • Mailgun/SendGrid:セットアップが簡単、無料トライアルあり、配信性能が高い
  • 社内SMTP:会社に独自のメールサーバーがある場合 — メールの信頼性が格段に高まる
  • VPS + Postfix:完全な自己管理が可能だが、スパム判定を避けるためSPF/DKIMの慎重な設定が必要

管理パネルにて:Sending Profiles → New Profile

Name: Internal SMTP
Interface Type: SMTP
Host: smtp.mailgun.org:587
Username: [email protected]
Password: [SMTPパスワード]
From: IT Security Team <[email protected]>

Send Test Emailをクリックして、実際のキャンペーンを作成する前に動作確認をしてください。

2. Landing Page — なりすましページ

Gophishには実際のURLからランディングページをインポートする機能があり、非常に便利です:

  1. Landing Pages → New Pageに移動する
  2. なりすましたいログインページのURLを入力する(例:Office 365のログインページや社内システム)
  3. Import Siteをクリックする
  4. Capture Submitted DataCapture Passwordsをオンにする
  5. 送信後のリダイレクトURL:本物のログインページに転送してユーザーに即座に気づかれないようにする

3. Email Templates

テンプレートは説得力があるように見せながら、注意深いユーザーが気づけるようないくつかのサインも残しておく必要があります:

<!-- 例:給与確認を装ったHRなりすましメール -->
Subject: 【重要】6月分給与情報の確認(6月30日まで)

<p>{{.FirstName}} 様、</p>
<p>人事部より、6月分の給与処理にあたりアカウント情報の確認をお願いしております。
ログインして<strong>2026年6月30日</strong>までに更新をお済ませください。</p>
<p><a href="{{.URL}}">こちらから今すぐ確認する</a></p>

Gophishは{{.URL}}をパーソナライズされたトラッキングリンクに、{{.FirstName}}をターゲットリストの名前に自動的に置き換えます。

4. Users & Groups — ターゲットリスト

CSVで従業員リストをインポートします:

First Name,Last Name,Email,Position
Yamada,Taro,[email protected],Developer
Suzuki,Hanako,[email protected],Accountant
Tanaka,Ichiro,[email protected],Manager

Users & Groups → New Groupに移動して、CSVをアップロードします。

5. キャンペーンの開始

  1. Campaigns → New Campaignに移動する
  2. 名前を入力し、Email Template、Landing Page、Sending Profile、User Groupを選択する
  3. Launch Date:月曜日の朝に設定するのがおすすめ — 週明けは気が緩んでいることが多い
  4. URL:フィッシングサーバーのドメインを入力する(http://phish.yourdomain.com
  5. Launch Campaignをクリックする

結果の確認 & モニタリング

リアルタイムダッシュボード

ダッシュボードを開くと、メールがインボックスに届いた瞬間から誰かがなりすましページにパスワードを入力するまで、すべての動きをリアルタイムで確認できます。追跡される5つのイベント:

  • Email Sent:メールが正常に送信された
  • Email Opened:ユーザーがメールを開封した(非表示のトラッキングピクセル経由)
  • Clicked Link:メール内のリンクをクリックした
  • Submitted Data:ランディングページに情報を入力した
  • Email Reported:不審なメールを積極的に報告した

約50人のチームで実施したキャンペーンでは、かなり衝撃的な結果が出ました:

  • 約70%がメールを開封
  • 約35%がリンクをクリック
  • 約20%がフォームを送信(なりすましページに情報を入力)
  • 不審なメールを積極的に報告したのはわずか3人

これは例外ではありません。多くの企業セキュリティ調査によると、初回実施時のクリック率は通常20〜40%に達します。だからこそ、一度きりではなく定期的にシミュレーションを実施することが重要なのです。

APIでデータを取得して詳細分析する

# GophishにはフルのREST APIが備わっている
curl -k -H "Authorization: Bearer YOUR_API_KEY" \
  https://127.0.0.1:3333/api/campaigns/1/results

返されるJSONをもとに、Pythonスクリプトを書いて部門別、職種別、または日中のクリック時間帯別に分析できます — 経営層への報告時に非常に有効なデータとなります。

キャンペーン後:最も重要なステップ

シミュレーションは適切なフォローアップがあって初めて意味を持ちます。キャンペーン終了後:

  1. 全従業員に通知メールを送る:これはセキュリティテストだったこと、誰が引っかかり誰が引っかからなかったかを伝える
  2. 引っかかったグループにすぐトレーニングを実施する:そのメールの具体的なサインを指摘し、抽象的な説明にとどまらない
  3. 正しく報告した人を称える:適切なセキュリティ行動を表彰する文化を作ることは、罰則と同様に重要
  4. 次回キャンペーンのスケジュールを立てる:理想は四半期ごとに1回、テンプレートを変えて従業員が慣れないようにする

実践的なアドバイス:最初からテンプレートを凝りすぎないこと。初回キャンペーンは見抜きやすいテンプレートでベースラインを確立し、その後徐々に難易度を上げていくのが効果的です。

Gophishサーバー自体のセキュリティ対策

キャンペーンを実行するサーバー自体がセキュリティの弱点にならないようにしましょう:

# Firewall:必要なポートのみ開放する
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 外部からの管理パネルへのアクセスをブロックする
sudo ufw deny 3333/tcp
# SSHをオフィスのIPアドレスのみに制限する
sudo ufw allow from YOUR_OFFICE_IP to any port 22
sudo ufw enable

キャンペーン終了後は、フィッシングサーバーをシャットダウンするか、ランディングページを「これは社内セキュリティテストシステムです」という通知ページに切り替えて、遅れてアクセスした人が混乱しないようにしましょう。

Share: