BlueDelta(APT28)資格情報フィッシング:無料ホスティングとNgrokを利用
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
APT28/Fancy Bearとしても知られるGRU系のグループ、BlueDeltaは、2025年2月から9月の間に複数の資格情報収集キャンペーンを実施しました。これらのキャンペーンでは、偽のOutlook、Google、Sophos VPNのログインページをホスティングするために、無料のホスティングとトンネリングサービスが使用され、取得した資格情報を流出させました。誘引には正当なPDFドキュメントと地域特有の言語が使用され、信頼性を高めていました。この作戦は、トルコ、北マケドニア、ウズベキスタンのエネルギー、核研究、政府、公的機関を対象としていました。
調査
Recorded FutureのInsikt Groupは、Webhook.site、InfinityFree、Byet Internet Services、ngrokなどのサービスでホストされている十数件のフィッシングページを収集しました。ページ上のJavaScriptがユーザー名、パスワード、被害者の識別情報を捕捉し、攻撃者が制御するWebhookへビーコンを送信した後、被害者を正規のポータルにリダイレクトしました。複数のバリアントがコードを再利用し、変数名を修正してデプロイを合理化しました。インフラストラクチャは短命で、ShortURL.atのようなリンク短縮サービスが利用されました。
緩和策
既知の無料ホスティングとトンネリングドメインをブロックし、Webhookサービスへの出力トラフィックを監視し、すべての外部アカウントでMFAを強制します。OWA、Google、VPNポータルを模倣するフィッシングページについてユーザーに教育し、特にPDF誘引が添付されている場合に注意を促します。既知の悪意のあるURLに対してネットワークフィルタリングを実施し、疑わしいPDFリンクを検出するためにメールセキュリティ制御を適用します。
対応
既知のWebhookエンドポイントへのHTTP POSTが観察され、資格情報収集ページが読み込まれたときに、SOCアナリストに警告を出します。悪意のあるページを隔離し、影響を受けたユーザーアカウントを隔離し、パスワードリセットを強制し、横移動を確認するためにログをレビューします。同じインフラを使用する他のページの脅威ハントを行い、ブロックリストを更新します。
graph TB %% クラス定義 classDef action fill:#99ccff classDef service fill:#ffcc99 classDef tool fill:#cccccc %% ノード – 偵察(Reconnaissance) recon_info[“<b>アクション</b> – <b>T1591 被害組織情報の収集</b>: 公開されているメールアドレスや、標的研究者の組織情報を収集する。”] class recon_info action recon_roles[“<b>アクション</b> – <b>T1591.004 役割の特定</b>: エネルギー分析官、シンクタンク研究員、セキュリティ担当者などの職務内容を特定する。”] class recon_roles action %% ノード – リソース開発(Resource Development) resource_dev[“<b>アクション</b> – <b>T1583.006 Webサービス型インフラの取得</b>: 使い捨てドメインを登録し、無料のホスティング/トンネリングサービス(Webhook.site、InfinityFree、Byet、ngrok、shorturl.at)を利用する。”] class resource_dev service %% ノード – フィッシング(Phishing) phishing[“<b>アクション</b> – <b>T1566.001 スピアフィッシング(添付ファイル)</b>: 複数のURLを経由してリダイレクトされる短縮された悪意のあるリンクを含む、細工されたメールを送信する。”] class phishing action %% ノード – 難読化(Obfuscation) html_smuggling[“<b>アクション</b> – <b>T1027.006 HTMLスマグリング</b>: 最初のリダイレクトで、meta-refresh を使用して正規のPDF誘導ファイルを一時的に埋め込んだHTMLを配信する。”] class html_smuggling action %% ノード – 認証情報の窃取(Credential Harvesting) credential_forge[“<b>アクション</b> – <b>T1606 Web認証情報の偽造 / T1056.003 Webポータル入力キャプチャ</b>: 偽装されたログインページ(OWA、Google、Sophos VPN)が JavaScript を使って認証情報を取得する。”] class credential_forge tool %% ノード – 入力キャプチャ・ビーコン web_capture_beacon[“<b>アクション</b> – <b>T1056.003 Webポータル入力キャプチャ</b>: JavaScript がページ閲覧ビーコンおよび入力された認証情報を攻撃者のWebhookに送信する。”] class web_capture_beacon tool %% ノード – データ流出(Exfiltration) exfil_webhook[“<b>アクション</b> – <b>T1567.004 Webhook経由のデータ流出</b>: 取得したデータをJSON形式で攻撃者管理のWebhook(webhook.site、ngrok-free.app)にPOST送信する。”] class exfil_webhook service %% ノード – コマンド&コントロール(C2) c2_webprotocol[“<b>アクション</b> – <b>T1071.001 アプリケーション層プロトコル(Web)</b>: 標準的なWeb通信をC2通信に利用する。”] class c2_webprotocol service c2_webservice[“<b>アクション</b> – <b>T1102.002 Webサービス双方向通信</b>: Webhookサービスを介して永続的な双方向通信チャネルを維持する。”] class c2_webservice service %% ノード – トンネリング(Tunneling) protocol_tunnel[“<b>アクション</b> – <b>T1572 プロトコルトンネリング</b>: ngrokトンネルを利用して、ローカルのデータ流出エンドポイントをインターネットに公開する。”] class protocol_tunnel tool %% ノード – 流出後のリダイレクト post_redirect[“<b>アクション</b> – 流出後リダイレクト: データ取得後、被害者を正規の文書やVPNポータルにリダイレクトし、疑念を避ける。”] class post_redirect action %% 接続 – フロー recon_info –>|leads_to| recon_roles recon_roles –>|leads_to| resource_dev resource_dev –>|enables| phishing phishing –>|triggers| html_smuggling html_smuggling –>|delivers| credential_forge credential_forge –>|captures| web_capture_beacon web_capture_beacon –>|sends_to| exfil_webhook exfil_webhook –>|supports| c2_webprotocol c2_webprotocol –>|uses| c2_webservice c2_webservice –>|relies_on| protocol_tunnel protocol_tunnel –>|facilitates| post_redirect
攻撃フロー
検出
WebsiteHookエンドポイント経由のマルウェア配布の可能性(プロキシ経由)
表示
WebsiteHookエンドポイント経由のマルウェア配布の可能性(DNS経由)
表示
ポートトンネリングサービスの可能性(DNS経由)
表示
サードパーティサービス/ツールを経由したデータ侵入/流出/C2の可能性(プロキシ経由)
表示
検出すべきIOC(DestinationIP):GRUに関連するBlueDeltaによる資格情報収集の進化
表示
検出すべきIOC(SourceIP):GRUに関連するBlueDeltaによる資格情報収集の進化
表示
WebhookサイトによるBlueDeltaの資格情報収集キャンペーンの検出 [ウェブサーバー]
表示
シミュレーションの実行
前提条件:テレメトリー&ベースラインのプレフライトチェックが通過している必要があります。
理由:このセクションは、検出ルールをトリガーするように設計された敵の技術(TTP)の正確な実行を詳述します。コマンドとナラティブは、特定されたTTPを直接反映し、検出ロジックによって期待される正確なテレメトリーを生成することを目的とします。抽象的または無関係な例は誤診につながります。
-
攻撃ナラティブ&コマンド:
- 初期のフィッシング配信: 攻撃者は短縮URLを含むフィッシングメールを送り、それが悪意のある
webhook.siteページにリダイレクトします。 - 被害者の操作: 被害者がリンクをクリックすると、ブラウザはリダイレクトをたどり、HTTP GET リクエストを行います。
https://webhook.site/e8ae3bbd-ab02-46b7-b84c-f5f4baa5d7c7. - 資格情報キャプチャページ: ページにはJavaScriptがホストされており、入力された資格情報を盗んで同じWebhook URLにPOSTしますが、プロキシは初期のGETリクエストのみを記録し、それがルールを発火するのに十分です。
- このテスト用に、PowerShellの
Invoke-WebRequestを使って、正確な悪意のあるURLを要求し、同じプロキシログエントリを再現します。
- 初期のフィッシング配信: 攻撃者は短縮URLを含むフィッシングメールを送り、それが悪意のある
-
リグレッションテストスクリプト:
# ------------------------------------------------- # BlueDelta Webhook Site Access Simulation (TC-20260109-9X3BZ) # ------------------------------------------------- $maliciousUrls = @( "https://webhook.site/e8ae3bbd-ab02-46b7-b84c-f5f4baa5d7c7", "https://webhook.site/3791f8c0-1308-4c5b-9c82-0dc416aeb9c4" ) foreach ($url in $maliciousUrls) { try { Write-Host "Requesting malicious URL: $url" Invoke-WebRequest -Uri $url -UseBasicParsing -Method GET -TimeoutSec 10 | Out-Null Write-Host "✅ Request sent." } catch { Write-Warning "Request to $url failed: $_" } } -
クリーンアップコマンド:
# Flush proxy cache (if applicable) to avoid residual entries net stop "Squid Service" net start "Squid Service" # Remove any temporary files created by the script (none in this case) Write-Host "Cleanup complete."