巧妙に作り込まれた長期フィッシング作戦が、サーバーレス・モジュール型のキャンペーンへと進化しています。GitHub Pagesを武器に活用し、メキシコの銀行利用者から決済カード情報、認証情報、顧客識別子を詐取するものです。
このキャンペーンの中核となるのは、オペレーターが金融機関ごとのランディングページを生成するために使用するセレクターパネルを搭載したフィッシングキットです。
それらのランディングページは少なくとも12の金融機関を詐称しており、被害者の誘引効果を最大化するためにデスクトップとモバイルの両インターフェースに対応しています。
単一のドメインに依存するのではなく、オペレーターはキットを100以上のGitHub Pagesリポジトリに展開し、それぞれが多様なディレクトリパス(例:/cancelacion/、/soporte/、/mb1/)でクローンページを公開しています。これにより冗長性を高め、テイクダウンを回避し、個別リポジトリが削除された際の迅速な再展開を可能にしています。
Group-IBの研究者らがこのキャンペーンを特定したところ、その持続性・規模・運用上の規律は、GitHub Pagesによる分散ホスティング、難読化されたクライアントサイドスクリプト、そして窃取データの外部送信に特にSheetBest等のサードパーティAPIを組み合わせた再利用可能なフィッシングキットに起因するとしています。
技術的には、攻撃は多段階で展開されます。被害者はまず信頼感を醸成する偽装ページへ誘導され、次に正規の銀行ログインフローを模倣した認証情報詐取フォームへとリダイレクトされます。
モジュール型フィッシングキットによるGitHub Pages悪用
各ページにはJavaScriptのsubmitリスナーが仕込まれており、e.preventDefault()を呼び出してフォームの入力値をJSONにシリアライズし、SheetBest APIエンドポイントにPOSTします。
これらのリクエストはリアルタイムで攻撃者が管理するGoogleスプレッドシートに書き込まれるため、コマンド&コントロールサーバーを維持する必要がありません。
Group-IBはこのキャンペーンに関連する複数のSheetBestエンドポイントを特定しており、すべてが同一のバックエンドIPに解決されることを確認しています。また、複数のテンプレートにわたって同一の送信ロジックが再利用されていることも観測しており、これは多対一のデータ収集モデルを支える集中型サーバーレス外部送信バックエンドの存在を強く示すものです。
検出をさらに困難にするため、フィッシングページはロジックをHTMLに直接埋め込むのではなく、ランダム化されたパスを通じて難読化された外部JavaScriptを読み込みます。
これにより、表示ページを変えることなくペイロードを差し替えることが可能となり、シグネチャベースの検出を無効化しています。また、一部のケースではハードコードされたTelegramボットトークンとチャットIDを使用してリアルタイムで窃取した認証情報を転送しており、外部送信チャネルの運用上の柔軟性を示しています。
リポジトリのメタデータとコミット履歴からは、1年以上にわたって複数のオペレーターアカウントによる積極的なメンテナンスが行われていることがわかり、継続的なコミット、テンプレートの更新、エンドポイントのローテーションが確認されています。
展開にはJekyllベースのGitHub Pagesビルドとオートメーションのためのgithub Actionsが活用されており、ページにはメッセージングアプリ向けの説得力あるリンクプレビューを生成するOpen Graphメタデータも含まれています。
robots noindex,nofollow指定により、これらのページはオーガニック検索での発見を意図していないことが確認されており、SMS・WhatsApp・Telegram・ソーシャルメディアを通じたターゲット配信を目的としています。リンクプレビューはこれらのチャネルでクリック率を大幅に向上させる効果があります。
このキャンペーンは、脅威アクターが信頼性の高いクラウドプラットフォームの信頼性・HTTPS・展開の容易さを悪用して大規模かつ耐久性の高いフィッシングを展開するという成熟しつつあるトレンドを改めて浮き彫りにしています。
GitHub PagesやSheetBestといったサービスを悪用することで、攻撃者はインフラのフットプリントを最小化し、帰属特定やテイクダウン対応を一層困難にしています。
防御側への示唆は明確です。従来のブロックリストやドメインブラックリストでは不十分です。
金融機関およびセキュリティチームは、振る舞いベースの検出、開発者・ホスティングプラットフォーム全体にわたるブランド詐称の継続的監視、サービスプロバイダーとの迅速なテイクダウン連携、そして業界横断的なインテリジェンス共有を優先すべきです。
侵害の痕跡(IOC)
| # | ホスト名 | 件数 |
|---|---|---|
| 1 | soporte-index25.github[.]io | 2 |
| 2 | soporte-index09.github[.]io | 2 |
| 3 | sntdr-soporte25.github[.]io | 1 |
| 4 | sntdr-soporte25.github[.]io | 1 |
| 5 | 07-soporte.github[.]io | 2 |
| 6 | soporte2507.github[.]io | 2 |
| 7 | soporte160625.github[.]io | 3 |
| 8 | soporte250324.github[.]io | 2 |
| 9 | soporte74.github[.]io | 4 |
| 10 | soporte-bm1.github[.]io | 1 |
| 11 | soporte-r5.github[.]io | 3 |
| 12 | api.sheetbest.com | 2 |
| 13 | soporte0625.github[.]io | 2 |
| 14 | soporte200525.github[.]io | 2 |
| 15 | soporte2650.github[.]io | 1 |
| 16 | soporte-bn1.github[.]io | 1 |
| 17 | soporte-b2.github[.]io | 1 |
| 18 | soporte-index.github[.]io | 2 |
| 19 | soporte-c1.github[.]io | 1 |
| 20 | soporte-b4.github[.]io | 1 |
| 21 | sntndr25-soporte.github[.]io | 2 |
| 22 | sntndr-soporte0825.github[.]io | 2 |
| 23 | 0825-soporte.github[.]io | 2 |
| 24 | soporte-07-25.github[.]io | 2 |
| 25 | soporte-0725.github[.]io | 2 |
| 26 | 0725soporte.github[.]io | 2 |
| 27 | soporte0725-3.github[.]io | 2 |
| 28 | soporte0725.github[.]io | 2 |
| 29 | soporteyatencionf.github[.]io | 2 |
| 30 | 0725-soporte.github[.]io | 2 |
| 31 | soporte-y-atencion.github[.]io | 1 |
| 32 | soporter03.github[.]io | 1 |
| 33 | respaldo94.github[.]io | 2 |
| 34 | soporte-index05.github[.]io | 1 |
| 35 | soporte-b1.github[.]io | 1 |
| 36 | soporte0625.github[.]io | 2 |
| 37 | soporte250324.github[.]io | 2 |
| 38 | fldsmdfr-94.github[.]io | 2 |
| 39 | support-vh.github[.]io | 1 |
注意: IPアドレスおよびドメインは誤解析やハイパーリンク化を防ぐため、意図的にdefang処理(例:[.])を施しています。MISP・VirusTotal・SIEMなどの管理された脅威インテリジェンスプラットフォーム内でのみ、元の形式に戻してご使用ください。
翻訳元: https://gbhackers.com/modular-phishing-kit-uses-github-pages/