SOC Prime Bias: クリティカル

12 Jan 2026 12:59 UTC

BlueDelta(APT28)資格情報フィッシング:無料ホスティングとNgrokを利用

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon フォローする
BlueDelta(APT28)資格情報フィッシング:無料ホスティングとNgrokを利用
shield icon

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アナリストに警告を出します。悪意のあるページを隔離し、影響を受けたユーザーアカウントを隔離し、パスワードリセットを強制し、横移動を確認するためにログをレビューします。同じインフラを使用する他のページの脅威ハントを行い、ブロックリストを更新します。

攻撃フロー

シミュレーションの実行

前提条件:テレメトリー&ベースラインのプレフライトチェックが通過している必要があります。

理由:このセクションは、検出ルールをトリガーするように設計された敵の技術(TTP)の正確な実行を詳述します。コマンドとナラティブは、特定されたTTPを直接反映し、検出ロジックによって期待される正確なテレメトリーを生成することを目的とします。抽象的または無関係な例は誤診につながります。

  • 攻撃ナラティブ&コマンド:

    1. 初期のフィッシング配信: 攻撃者は短縮URLを含むフィッシングメールを送り、それが悪意のある webhook.site ページにリダイレクトします。
    2. 被害者の操作: 被害者がリンクをクリックすると、ブラウザはリダイレクトをたどり、HTTP GET リクエストを行います。 https://webhook.site/e8ae3bbd-ab02-46b7-b84c-f5f4baa5d7c7.
    3. 資格情報キャプチャページ: ページにはJavaScriptがホストされており、入力された資格情報を盗んで同じWebhook URLにPOSTしますが、プロキシは初期のGETリクエストのみを記録し、それがルールを発火するのに十分です。
    4. このテスト用に、PowerShellの Invoke-WebRequest を使って、正確な悪意のある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."