Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
cuddlephish — ペネトレーションテスター向けの武器化されたBrowser-in-the-Middle (BitM) | Kitploit
ツール/GitHubGitHub/fkasler/cuddlephish
フィッシングツールウェブアプリケーション悪用フィッシングペネトレーションテストソーシャルエンジニアリングレッドチーミング
GitHubfkasler/cuddlephish

cuddlephish

ペネトレーションテスター向けの武器化されたBrowser-in-the-Middle (BitM)

リポジトリを見る
673804ヶ月前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CuddlePhish

phishy

ペネトレーションテスター向けの、多ユーザー対応ブラウザ・イン・ザ・ミドル(BitM)攻撃ツールです。この攻撃は、多くの高価値ウェブアプリケーションで多要素認証をバイパスするために使用できます。セッショントークンを使用しないアプリケーションでも機能するため、従来のトークン窃取攻撃では悪用できなかったアプリケーションにも対応します。これはソーシャルエンジニアリングツールであり、ターゲットサービスの技術的な欠陥を悪用するものではありません。

QuickStart(クイックスタート)

このツールは専用のウェブサーバーです。Debian 11(Bullseye)Linuxサーバー上で動作するように設計されており、管理機能を保護するためにパブリックIP情報に依存しています。ローカルでテストするにはかなりの手間が必要になることを想定してください。

警告:ChromiumはARMではサポートされていません。技術的にはARM用のChromiumバイナリを強制的に使用することは可能ですが、puppeteer-extraの追加機能や保護機能はすべて失われます。

このセットアップ例では、Caddyを使用してTLS、SNIを処理し、各リクエストに'X-Real-IP'などのカスタムヘッダーを追加しています。CuddlephishでCaddyを使用する必要はなく、NginxやApacheなどでも同じリバースプロキシを設定できます。Dockerで簡単にインストールでき、ほとんどのドメインレジストラ向けにLetsencrypt証明書を管理するプラグインがあるため、私はCaddyが好きです。サンプルのCaddyfileは、Gandi用の設定方法を示しています。お使いのレジストラのドキュメントを確認してください。

Docker、Node、XVFB、およびその他の依存関係をインストールします:

root@kitploit:~
git clone https://github.com/fkasler/cuddlephish
cd cuddlephish
sudo bash install_deps.sh

その後、Dockerを使用して、お使いのレジストラ用のワイルドカード証明書プラグインを備えたCaddyをビルドできます。例はGandi用です。ドキュメントはこちらで、DNSプロバイダーモジュールのリストはこちらで確認できます。ビルド前に、Dockerfileをお使いのレジストラ用に変更できます:

root@kitploit:~
sudo docker build -t caddy .

次に、Caddyfileを編集してドメインとGandi(または他のレジストラ)のAPIキーを置き換え、Caddyを起動します。screenまたはtmuxウィンドウで起動し、後で別のウィンドウでNodeサーバーを実行できるようにすることをお勧めします:

root@kitploit:~
sudo docker run -p 80:80 -p 443:443 -p 2019:2019 -v $PWD/Caddyfile:/etc/caddy/Caddyfile --network=host caddy:latest

Caddyが80番と443番ポートでトラフィックを処理しているので、いよいよツールを実行できます!

Nodeの依存関係をインストールします:

root@kitploit:~
npm install

いくつかの設定調整: 重要な手順:サンプルのconfig.jsonを変更して、管理者アクセス用の承認済みパブリックIPを追加してください。このIPのホワイトリストが、「/admin」ウェブインターフェースへのアクセスを制御します。また、デフォルトのソケットキーをより安全なものに変更する必要があります。

デフォルトではログインをターゲットにする設定はされていないため、追加する必要があります。この手順を簡単にするための 'add_target.js' スクリプトがあります。スクリプトを実行し、プロンプトが表示されたらターゲットにしたいログインポータルのURLを貼り付けてください:

root@kitploit:~
node add_target.js

これにより、サービス名、タブのタイトル、ファビコンが取得され、エントリが 'targets.json' に追加されます。このスクリプトは複数回実行でき、新しいターゲットが追加されます。スクリプトはドメインに基づいてサービス名を付けますが、トップレベルは除かれます。したがって、'https://www.example.com/login.php' の場合、実行時にターゲットを指定する際のサービス名は 'example' になります。

実行!

root@kitploit:~
node index.js example

数秒後、最初の自動化されたChromeインスタンスがWebSocket経由でチェックインしたときに、コンソールにメッセージが表示されます。これで、フィッシングサイトへの訪問者は、ターゲットのログインページのように見えるが、実際には自動化されたブラウザインスタンスのビデオフィードであるものを見ることができます。また、ブラウザインスタンスと対話し、あなたの代わりにログインすることもできます。

config.json で管理者IPを正しく設定していれば、特別な '/admin' ウェブインターフェースを表示して、ユーザーの追跡、キーログの表示、ログイン済みブラウザインスタンスの制御の引き継ぎ、Cookieの窃取、不要なブラウザインスタンスの削除などができます。

注意:管理者ページには、犠牲者がいない限り何も表示されません。犠牲者が現れると、そのブラウザインスタンスが管理UIに表示されます。

トラブルシューティング(「白いページしか表示されない」場合)

「真っ白なページ」に関する問題を何度か報告いただいていますが、これは多くの可能性がある問題の症状であり、それ自体が問題ではありません。漠然とした症状名で問題を報告しないでください。代わりに、ユーザー側で白いページが表示される場合は、まず以下を確認してください:

  • ターゲットサービスのタブのタイトルに特殊文字が含まれていないか確認してください。自動化ブラウザにストリーミングするタブを指定するために「--auto-select-desktop-capture-source」を使用しています。このオプションは、タイトルに特殊文字が含まれていると失敗します。ただし、タブタイトル全体が一致する必要はなく、一意の一致に十分なサブ文字列があれば大丈夫です。
  • 同様に、ターゲットサービスが自動化ブラウザに302リダイレクトなどを送信し、WebRTCブロードキャストが犠牲者に開始される前にタブのタイトルが変更される場合、「--auto-select-desktop-capture-source」は失敗します。add_target.js がこの情報をどのように取得しているかを確認し、index.js で同様の処理と console.log() 文を追加して、タイトルがWebRTCネゴシエーション前に変更されていないか確認してください。
  • cuddlephish HTMLが読み込まれているか、フロントエンドの開発者コンソールに明らかなJavaScriptエラーがないかを確認してください。サンプルのCaddy設定には、curlなどのユーザーエージェント文字列に対する基本的なブロックがあります。少なくとも、タブのタイトルとファビコンが偽装されていることを確認してください。
  • サーバーからサンプルSTUNサービスとポート(stun.l.google.com:19302)にアクセスできることを確認してください。
  • 作業しているネットワークがSTUNを許可していることを確認してください。STUNは「フルコーンNAT」、「(アドレス)制限付きコーンNAT」、「ポート制限付きコーンNAT」でのみ機能します。「対称NAT」では機能しません。
  • テスト犠牲者ブラウザからサンプルSTUNサービスとポート(stun.l.google.com:19302)にアクセスできることを確認してください。https://icetest.info/ を使用してみてください。
  • ネットワークがサンプルSTUNサーバーに到達できない場合は、到達可能なものに変更してください。ネットワークがSTUNを許可していない場合は、cuddlephishおよびブロードキャストHTMLページにTURNサーバーの設定例があります。自分でTURNサーバーをセットアップするか、有料のものを利用する必要があります。注:TURNサーバーは、フィッシング被害者をブラウザインスタンスに接続する可能性が最も高いです。

大まかに言えば、フロントエンドに白いページしか表示されない場合、「Start WebRTC」→「Select Tab to Broadcast」→「Negotiate ICE with Victim's Browser」→「Stream Video」というデータフローのチェーンのどこかで障害が発生していることを意味します。上記のトラブルシューティング手順は、このプロセスを通じてデータを追跡するのに役立ちます。正常に動作している場合、サーバーには次のようなログストリームが表示されるはずです:

troubleshoot

これらの手順が問題解決に役立つことを願っています。いつものように、問題を一貫して再現するための十分な情報が、さらなる調査のために問題を提出するための前提条件です。

管理機能

ペイロード送信:

JavaScript経由で犠牲者のシステムにペイロードを手動でダウンロードさせます。各ターゲットは最初、テストペイロードとして 'payload.txt' を持っています。targets.json のファイルの場所を変更して、カスタムペイロードを送信してください。

ユーザーを追い出す:

window.location を変更して犠牲者を実際のログインポータルに送ります。ユーザーは強制的に再認証されているように見え、あなたがコントロールを奪っているのを見るのを防ぎます。コードを変更すれば、この一般的な手法で他の派手なこともできるかもしれません ;)

乗っ取り:

管理ポータルから直接ブラウザインスタンスを操作できます。インスタンスの制御を停止するには、ESCAPEキーを押します。注意:これによりフィッシング被害者から制御が奪われ、先に追い出さない限り、あなたの操作を見ることができます。ご注意ください。

制御を戻す:

自動化ブラウザインスタンスの制御をユーザーに手動で戻すことができます。これは、ITを装ったソーシャルエンジニアリングのシナリオで役立ちます。ユーザーにヘルプセッションを開始すると伝え、制御を奪ってターゲットサービスに移動し、制御を戻してログインさせ、再び制御を奪うなどができます。

Cookieを取得:

ブラウザインスタンスからすべてのCookieとローカルストレージアイテムを抽出し、JSONファイルとしてダウンロードします。この認証情報をローカルシステムのブラウザインスタンスに注入するには、プロジェクト内の 'stealer.js' スクリプトを使用します。これはサーバーではなく自分のマシンで実行することを意図しているため、使用するにはプロジェクトのNodeコンポーネントをシステムにインストールする必要もあります。

root@kitploit:~
node stealer.js ~/Downloads/cuddle_asdf1234.json

インスタンスを削除:

不要になったブラウザインスタンスを強制終了します。ユーザーが完全にログインしてくれない場合、WebRTC接続が失敗した場合、セッションがタイムアウトした場合などに、管理ポータルから役に立たないブラウザインスタンスをクリーンアップできます。

キーログとユーザーデータに関する注意:

各ブラウザは、独自のランダムな「ブラウザID」と、プロジェクトの "user_data" フォルダ内の対応するユーザーデータディレクトリとともに生成されます。'stealer.js' が機能しない場合、そのインスタンスのユーザーデータも複製する必要があるかもしれません。これは、「このブラウザを記憶する」機能が実装方法に応じてターゲットとなるサービスで役立つことがあります。

各ユーザーデータディレクトリには、犠牲者ユーザーの完全なキーログが記録された keylog.txt もあります。管理ポータルの一般的なキーログはバックスペースなどを考慮しようとしますが、この keylog.txt には記録されたすべてのキーストロークが含まれます。

Phishmonger 統合

pm.json の例:

root@kitploit:~
{
  "tacking_id": "id",
  "logging_endpoint": "https://www.phishmongerserver.com/create_event",
  "admin_cookie": "admin_cookie=s3cret",
  "post_url_search": "ppsecure"
}

内部動作

このツールは、フィッシングサイトの訪問者を、フィッシングサーバー上で動作する自動化されたChromeブラウザとペアリングすることで機能します。攻撃者が制御するChromeインスタンスのビデオフィードがWebRTC経由でフィッシング被害者にストリーミングされ、ユーザーが行ったすべてのマウス操作とキーボード入力が、被害者のブラウザから関連するChromeインスタンスに転送されます。サーバーはWebSocketを使用して被害者を追跡し、ブラウザとペアリングし、WebRTCビデオフィードを仲介し、ユーザー入力をマン・イン・ザ・ミドルします。新しい訪問者ごとに、サーバーは新しいChromeインスタンスを生成します。各Chromeインスタンスを駆動するためにChrome Devtools Protocol(CDP)を使用しているため、「Storage.getCookie」などのAPIを使用して、ユーザーがログインした後に対象サイトのセッションCookieを抽出できます。また、いつでも介入して各Chromeインスタンスを直接駆動でき、被害者にリモートコントロールを提供するのと同じ方法を利用できます。

Nodeサーバーは以下のことを行います:

  • xvfbインスタンスを仮想スクリーンとして使用して新しいブラウザ(「空のフィッシュボウル」)を起動し、タブをターゲットのログインページに移動します
  • 自動化ブラウザの新しいタブにカスタムウェブページ broadcast.html をロードし、WebRTCセットアップスクリプトを含めます
  • ブラウザがWebSocket経由でチェックインします
  • 被害者がサイトにアクセスし、WebSocket経由でチェックインします
  • 被害者とブラウザをペアリングし、WebSocket経由でWebRTCビデオストリームを仲介し、次の被害者のために新しいブラウザを生成します
  • ブラウザはランダムなIDで追跡され、管理者がブラウザインスタンスを「乗っ取ったり」、インスタンスから認証情報を抽出できるようにします

Q and A(質疑応答)

なぜこんな危険なものをリリースするのですか?(別名、Black Hatで話すたびに母がする質問)

私の理解では、この手法は理論化され、数年も前から武器化されてきたものです(Shoutoutsの項を参照)。したがって、脅威アクターはこの手法を利用でき、おそらくしばらくの間利用してきたでしょうが、攻撃的なセキュリティ専門家はこの手法を簡単に再現する方法を持っておらず、その存在に気づいていない可能性もあります。このツールをリリースする意図は、ペネトレーションテスターやレッドチームがBitMを実際の作戦で使用し、その潜在的な影響を示し、ネットワーク防御者が実際の脅威に備えるのを助けることです。

この種の攻撃からサービスを防御するにはどうすればよいですか?

まず、この攻撃はユーザーを悪意のあるウェブサイトに訪問させるソーシャルエンジニアリングに依存していることを理解してください。ドメインホワイトリスト化は、これや他の種類のソーシャルエンジニアリングを防ぐのに大いに役立ちます。ウェブサービスのすべての認証情報データ(パスワード、OTP、SMS、PhoneFactor、プッシュ通知など)をユーザーに任せている場合、この攻撃に対して脆弱になる可能性があります。したがって、この攻撃を阻止するためには、ユーザーが管理しない認証情報データを活用する必要があります。例えば、クライアントTLS証明書はクライアントデバイスに発行でき、実際のウェブサービスでのみ有効です。証明書はブラウザとオペレーティングシステムによって管理され、攻撃者のサーバーが犠牲者のTLS証明書のコピーを入手する方法はありません。別の方法として、U2FやFIDO2をYubiKeyなどのハードウェアと併用して、必要な認証情報データの一部を管理することもできます。ハッカーのウェブサイトが犠牲者のコンピューターに接続されたYubiKeyとやり取りする方法はありません。

CaddyにはDockerを使用しているのに、Nodeサーバーには使用していないのはなぜですか?

私はまだDockerの達人ではありません(まだ)。シンプルなDocker化されたセットアップを思いついたら、プルリクエストを送ってください。

その馬鹿げた名前は何ですか?

Cuttlefish(コウイカ)をもじったもので、周囲に溶け込むことができる凄い海の生き物です。Phishing(フィッシング)もかかっていて、攻撃を実行するのにソーシャルエンジニアリングが必要だからです。さらに、ユニークで遊び心があり馬鹿げているように意図的にスペルミスされています。この面白いツール名が、ペンテストレポートで重大リスクの所見と一緒に言及されることを考えると、私は嬉しくなります。

謝辞(Shoutouts)

私はこの手法と実装を独自に考案しましたが、後に他の研究者が先に発見していたことを知りました。彼らはそれぞれ、ウェブベースのVNCクライアントを使用して同様の結果を達成するアプローチをとっていました。これは直感的なアプローチであり、ブラウザだけでなく他のソフトウェアに対するMitM攻撃を実行するのにも適用できるかもしれません(VPN-in-the-browser?)。ぜひチェックしてみてください:

Franco Tommasi, Christian Catalano & Ivan Taurino https://link.springer.com/article/10.1007/s10207-021-00548-5

@mrd0x https://mrd0x.com/bypass-2fa-using-novnc/

また:

Daniel Aaron @majordmg には、WebRTCのプロトタイプの初期段階を手伝っていただき感謝します。

RJ Stallkamp @Z3rO-C00L には、管理インターフェースの修正とスタイリング、そして素晴らしい新しいロゴに対して多大な感謝を捧げます。

ツールをダウンロード