内部フィッシングシミュレーションのためのGoPhish導入:本当に機能するセキュリティ意識向上プログラムの構築

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

ファイアウォールは設定済み。WAFも稼働中。IDSもトラフィックを監視している。それでも、「パスワードの有効期限が迫っています」という巧妙なメールのリンクを従業員がクリックしてしまうことは防げない。

フィッシングは依然としてデータ侵害の初期攻撃経路の第1位であり続けている。防御側が怠慢なのではなく、人間が最もパッチを当てにくい存在だからだ。業界データによれば、初回テストで20〜30%の従業員がシミュレーションのフィッシングリンクをクリックしてしまう。GoPhishを使って内部シミュレーションを実施することで、チームの現状を正確に把握し、憶測ではなく実際の数字に基づいたトレーニングを構築できる。

本記事では、Linux VPSへのGoPhishインストール、最初のキャンペーンのエンドツーエンド実施、そして結果を該当者向けのターゲット型トレーニングへと転換する方法を解説する。

アプローチの比較:フィッシングシミュレーションの実施方法

内部フィッシングシミュレーションを実施する主なアプローチは3つある。それぞれのトレードオフを理解することで、最適な方法を選択できる。

1. 有償SaaSプラットフォーム(KnowBe4、Proofpoint、Cofense)

事前構築済みのフィッシングテンプレート、自動トレーニング登録、詳細なコンプライアンスダッシュボードを備えたフル機能プラットフォーム。監査要件がある大企業に適している。欠点はコストで、ユーザーあたり年間15〜40ドル以上かかる。また、テストメールを送信するインフラの管理を他社に委ねることになる。

2. 手動レッドチーム演習

セキュリティチームがカスタムフィッシングメールを作成し、クリックを手動で追跡する。最大限のリアリティを実現できるが、人件費が大きくかかる。四半期ごとに500人の従業員をこの方法でテストするのは、ほとんどのチームにとって現実的ではない。

3. セルフホスト型オープンソース(GoPhish)

GoPhishはGoで書かれた無償のオープンソースフィッシングシミュレーションフレームワークだ。自社サーバーで運用し、送信ドメインを自社で管理し、キャンペーンのあらゆる部分を完全に把握できる。従業員50〜500人規模のチームであれば、ソフトウェアコストをほぼゼロに抑えながらプロフェッショナルグレードのシミュレーション機能を実現できる。

GoPhishのメリットとデメリット

GoPhishが優れている点

  • 無償かつオープンソース — シートライセンス不要。VPS1台で無制限のキャンペーンが可能。
  • インフラの完全制御 — 送信ドメイン、ランディングページサーバー、収集データはすべて自社管理。第三者にデータが渡ることはない。
  • REST API — キャンペーン作成を自動化し、結果をSIEMや内部ダッシュボードに連携できる。
  • シンプルなWeb UI — キャンペーンの設定、追跡、結果確認はすべてブラウザ上で完結。日常的な操作にCLIの知識は不要。
  • 詳細なトラッキング — メール開封、リンククリック、認証情報送信、フォームデータをユーザーごとに記録。

事前に知っておくべき制限事項

  • メール到達率は自己責任 — 送信ドメインのSPF、DKIM、DMARCの設定はすべて自分で行う必要がある。これを怠るとテストメールがスパムフォルダに入り、データが無意味になる。
  • トレーニングコンテンツ非搭載 — GoPhishはクリックした人を特定するが、トレーニングモジュールへの自動登録機能はない。外部トレーニングへのリンクを設置するか、クリック後のリダイレクト先を独自に構築する必要がある。
  • テンプレートライブラリが薄い — 組み込みのフィッシングテンプレートは最小限。ほとんどは自作することになる。
  • コンプライアンスレポート機能なし — SOC 2やISO 27001のエビデンスが必要な場合は、CSVをエクスポートしてレポートを自分でフォーマットする必要がある。

推奨セットアップ

実際に受信トレイに届くシミュレーションを実施するには、GoPhishのバイナリ以外に3つのものが必要だ。専用の送信ドメイン、適切なメール認証レコード、そしてランディングページサーバーのTLS証明書だ。

推奨インフラ構成は以下の通り:

  • Ubuntu 22.04またはDebian 12を実行するVPS(2 vCPU、2GB RAMで十分)
  • フィッシングテスト専用に取得したセカンダリドメイン — it-helpdesk-portal.comのようにそれらしいもの、または社内ツールを模したサブドメインパターン
  • VPSを指すMXレコードとSMTPレコード
  • 送信ドメインに設定したSPF、DKIM、DMARC
  • ランディングページ用のLet’s Encrypt TLS証明書

フィッシングテストに本番の会社ドメインは絶対に使用しないこと。送信レピュテーションが低下した場合、その影響を受けるのは使い捨てドメインであるべきだ——実際のメールが依存するインフラではなく。

GoPhishの管理者パスワードとサーバー認証情報の生成には、toolcraft.app/ja/tools/security/password-generatorのパスワードジェネレーターを使っている。完全にブラウザ内で動作し、データは一切送信されない。フィッシングインフラをアクティブにホストしているサーバーの認証情報を生成する際には、この点が重要になる。

実装ガイド

ステップ1:VPSへのGoPhishインストール

VPSにSSHで接続し、GitHubから最新のGoPhishリリースをダウンロードする。現在のバージョン番号はリリースページで確認すること——以下の例ではv0.12.1を使用している:

# GoPhishのダウンロードと展開
wget https://github.com/gophish/gophish/releases/latest/download/gophish-v0.12.1-linux-64bit.zip
unzip gophish-v0.12.1-linux-64bit.zip -d /opt/gophish
cd /opt/gophish
chmod +x gophish

起動前にconfig.jsonを編集して、管理パネルをlocalhostのみにバインドし(SSHトンネル経由でアクセスする)、フィッシングサーバーをポート80でリッスンするよう設定する:

{
  "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
  },
  "db_name": "sqlite3",
  "db_path": "gophish.db",
  "logging": {
    "filename": "",
    "level": ""
  }
}

GoPhishを起動し、初回起動時に表示される一時管理者パスワードを控えておく:

./gophish
# 出力例: Please login with the username admin and the password [生成されたパスワード]

ステップ2:送信ドメインの設定

フィッシングドメインに以下のDNSレコードを追加する。実際のサーバーIPとテストドメインに置き換えること:

# Aレコード
yourdomain.com.       300  IN  A     YOUR_VPS_IP

# MXレコード
yourdomain.com.       300  IN  MX 10 mail.yourdomain.com.

# SPF
yourdomain.com.       300  IN  TXT   "v=spf1 ip4:YOUR_VPS_IP ~all"

# DMARC
_dmarc.yourdomain.com. 300 IN  TXT   "v=DMARC1; p=none; rua=mailto:[email protected]"

DKIMの設定にはサーバー上でキーペアを生成する必要がある。opendkimをインストールして以下を実行:

apt install opendkim opendkim-tools -y
opendkim-genkey -t -s mail -d yourdomain.com
# mail.privateとmail.txtが生成される
cat mail.txt  # このTXTレコードの値をDNSに登録する

ステップ3:GoPhishで最初のキャンペーンを作成する

管理パネルにアクセスするためSSHトンネルを開く:

ssh -L 3333:127.0.0.1:3333 user@YOUR_VPS_IP

ブラウザでhttps://localhost:3333を開く。GoPhishでは、一度設定すれば再利用できる4つのオブジェクトを中心にキャンペーンを構成する:

  1. 送信プロファイル — SMTPサーバーの詳細:ホスト、ポート、認証情報、受信者に表示されるFromアドレス。
  2. メールテンプレート — フィッシングメールのHTML。効果的な出発点として、ITパスワードリセット通知、SharePointなど馴染みのあるツールからの共有ドキュメント通知、または人事部からの福利厚生更新案内などが挙げられる。
  3. ランディングページ — クリック後にユーザーが訪れるページ。自社の実際のログインページHTMLをインポートし、GoPhishのトラッキングピクセルを埋め込む。フォーム送信後は実際のトレーニングページにリダイレクトするよう設定する。
  4. ユーザー&グループ — 4列のCSVでターゲットリストをインポートする。
# users.csvのフォーマット例
First Name,Last Name,Email,Position
John,Smith,[email protected],Developer
Sarah,Lee,[email protected],Accountant
Mike,Jones,[email protected],HR Manager

ステップ4:結果の解釈とトレーニングの構築

キャンペーン期間が終了したら——ほとんどのチームには72時間が適切——GoPhishはユーザーごとの詳細を提供する:メール開封、リンククリック、認証情報送信。記録のためにすぐにCSVをエクスポートしておくこと。

リスクレベルに応じてフォローアップを分類する:

  • 認証情報を送信した — 最高リスク。これらのユーザーには、トレーニング動画のリンクを送るだけでなく、直接対話が必要だ。実際の侵害が発生した場合に備え、インシデントレスポンス手順を事前に整備しておくことも重要だ。
  • クリックしたが送信しなかった — 中リスク。偽ログインページを見分けることに特化したモジュールが、この具体的なギャップに対処する。
  • 開封したがクリックしなかった — 低リスク。それを認めること。リンクにカーソルを合わせてURLを確認する人たちは、まさに望ましい行動をとっている。
  • 開封しなかった — まずスパムフォルダを確認すること。メールが正常に配信されていた場合、このグループは非常に慎重であるか、メール自体を完全に無視している可能性があり、それはまた別の種類のリスクを生む。

90日後に同じグループに対して同一のキャンペーンテンプレートを実施する。クリック率の低下が測定可能な成果となる。セキュリティ予算の話し合いが生じた際に、経営陣に提示すべき数字がこれだ。

ステップ5:APIを使った定期キャンペーンの自動化

GoPhishのREST APIを使えば、キャンペーンをプログラムでスケジュールするのは簡単だ。requestsを使ったPythonの最小構成例:

import requests
import json

API_KEY = "GoPhishのAPIキー"
BASE_URL = "https://localhost:3333/api"

headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json"
}

# 全キャンペーンを取得
response = requests.get(
    f"{BASE_URL}/campaigns/",
    headers=headers,
    verify=False  # 管理パネルの自己署名証明書のため
)

campaigns = response.json()
for c in campaigns:
    print(f"キャンペーン: {c['name']} | ステータス: {c['status']}")

ここから少し手を加えるだけで、四半期ごとにキャンペーンを自動作成し、人事システムから最新の従業員リストを取得し、キャンペーン期間終了時にSlack通知を送るcronジョブへと発展させることができる。

責任あるシミュレーションの実施

最初のテストメールを送る前に、経営陣と人事部から書面による承認を得ること。対象となる従業員、部門、正確な実施期間を明確に文書化する。その文書を30秒以内に取り出せる場所に保管しておくこと。なぜなら、ある時点で役員がITヘルプデスクに不審なメールを報告する電話をかけてくることがある——そしてそれはあなたのメールだ。準備した書類があれば、その瞬間は気まずいものから日常的なものへと変わる。

実施前に正しい目的を周知しておくこと。このプログラムの目的は人を失敗させて恥をかかせることではなく、ギャップを発見して埋めることだ。プログラムが存在する理由を理解した人は、フォローアップトレーニングを真剣に受け取る。不意打ちを食らったと感じた人は防御的になり、不審なメールの報告をしなくなる——これはまさに目指している方向と逆だ。

GoPhishは測定レイヤーを提供してくれる。実際の行動変容は、結果をどのように伝えるか、誰がトレーニングを設計するか、そしてプログラムをどれだけ継続的に実施するかにかかっている。クリック率はただの数字だ。それをどう活用するかがプログラムそのものなのだ。

Share: