SOC Prime Bias: High

21 Sep 2026 19:58 UTC

レジストリに保存されたPowerShellがメモリ内で暗号通貨マイニングを起動

Author Photo
SOC Prime Team linkedin icon フォローする
レジストリに保存されたPowerShellがメモリ内で暗号通貨マイニングを起動
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

概要

多段階感染チェーンは高度な難読化技術を用いて、暗号通貨マイナーを展開します。この攻撃はペイロードをレジストリに格納し、ステガノグラフィを用いたPNGおよびWAVファイルとともにDNS TXTレコードを利用して次の段階を提供します。最終ペイロードは直接メモリに.NETアセンブリをロードし、XMRigエコシステムを通じて暗号通貨のマイニングを実行します。

調査

アナリストは繰り返されるPowerShell実行アラートを調査し、階層化されたペイロード隠蔽戦略を発見しました。感染チェーンは、画像のピクセルデータや音声ファイルのニブルなど、非伝統的なコンテナから悪意のあるコンテンツを再構築します。実行はレジストリに格納されたPowerShellスクリプトから複数の段階を経て進行し、最終的にはメモリに直接.NET暗号通貨マイナーをロードします。

緩和策

組織は厳格なPowerShell実行ポリシーを施行し、ペイロードストレージに関連する不審なレジストリ変更を監視すべきです。EDRソリューションはメモリ内.NETアセンブリの読み込みと異常なDNS TXTレコードクエリを検出すべきです。また、WinRing0.sysなどの無許可のカーネルモードドライバーを防ぐためにアプリケーション許可リストの実装が必要です。 WinRing0.sys の読み込みを防ぐ。

対応

悪意のある活動が検出された場合、影響を受けたホストは直ちに隔離し、さらなるC2通信と暗号通貨マイニングを停止すべきです。対策担当者は、無許可のスケジュールタスク、WMIサブスクリプション、およびMicrosoft Defenderの除外の法医学的チェックを行うべきです。また、ネットワークログは既知のC2ドメインや疑わしいDNS-over-HTTPSクエリに対してもレビューされるべきです。

攻撃の流れ

この部分はまだ更新中です。

検出

疑わしいPowerShell文字列 (via powershell)

SOCプライムチーム
2026年9月21日

PowerShellから疑わしい.NETメソッドを呼び出す (via powershell)

SOCプライムチーム
2026年9月21日

疑わしいプロセスによって作成されたイメージファイル (via file_event)

SOCプライムチーム
2026年9月21日

DoHとDNSコマンドとコントロールチャネル (via proxy)

SOCプライムチーム
2026年9月21日

IOC(HashMd5)を検出:レジストリ格納PowerShellからメモリ内暗号通貨マイニングへの多段階感染チェーン

SOCプライムAIルール
2026年9月21日

IOC(SourceIP)を検出:レジストリ格納PowerShellからメモリ内暗号通貨マイニングへの多段階感染チェーン

SOCプライムAIルール
2026年9月21日

IOC(DestinationIP)を検出:レジストリ格納PowerShellからメモリ内暗号通貨マイニングへの多段階感染チェーン

SOCプライムAIルール
2026年9月21日

DNS-over-HTTPSとHTTP/HTTPS POST C2通信を検出 [Windowsネットワーク接続]

SOCプライムAIルール
2026年9月21日

レジストリを基にしたPowerShell実行のためのWMI永続イベントサブスクリプション [Windowsレジストリエベント]

SOCプライムAIルール
2026年9月21日

PowerShell難読化と秘密裏の実行 [Windows Powershell]

SOCプライムAIルール
2026年9月21日

シミュレーション実行

  • 攻撃の流れ&コマンド: 攻撃者は、侵害されたホストに長期的な持続性を確立しようとします。一般的な「Run」キーを使用する代わりに、より目立たないWMI永続イベントサブスクリプションを選択します。攻撃者はWMI CommandLineEventConsumerを作成します。このコンシューマーは powershell.exeを実行するように設定されています。コマンドラインの静的解析を回避するため、実際の悪意のあるペイロードや設定は非標準のレジストリパスに保存されます: HKLM:Softwareuf42a9660377vstdfehzr。WMIイベントがトリガーされると(ここではシステムイベントでシミュレーション)、PowerShellプロセスが起動し、その特定のレジストリキーを参照し、検出ルールをトリガーします。

  • リグレッションテストスクリプト:

    # シミュレーションスクリプト: WMIレジストリを基にしたPowerShell実行
    # このスクリプトはルールをトリガーするために必要な特定のレジストリキーとWMIサブスクリプションを作成します。
    
    $regPath = "HKLM:Softwareuf42a9660377"
    $regValueName = "vstdfehzr"
    $regValueData = "Invoke-Expression (Get-ItemProperty -Path '$regPath$regValueName').Payload"
    
    # 1. 疑わしいレジストリキーと値を作成
    if (-not (Test-Path $regPath)) {
        New-Item -Path $regPath -Force | Out-Null
    }
    New-ItemProperty -Path $regPath -Name $regValueName -Value "Write-Host '悪意のあるペイロードがトリガーされました!'" -PropertyType String -Force | Out-Null
    
    # 2. WMI永続イベントサブスクリプションを作成
    # 一般的なイベント(例:システムの稼働時間/起動)にトリガーするフィルターを使用するか、コンシューマー作成によってシミュレーション
    $filterName = "Win32_LocalTimeFilter"
    $consumerName = "Win32_CommandLineConsumer"
    $subscriptionName = "WmiPersistenceSubscription"
    
    # フィルターを作成(シミュレーション目的で毎分トリガー)
    $filterArgs = @{
        Name = $filterName
        QueryLanguage = "WQL"
        Query = "SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_LocalTime'"
    }
    $filter = Set-WmiInstance -Class __EventFilter -Arguments $filterArgs
    
    # コンシューマーを作成(特定のレジストリパスを参照するPowerShellコマンド)
    $commandLine = "powershell.exe -Command `"$regValueData`""
    $consumerArgs = @{
        Name = $consumerName
        CommandLineTemplate = $commandLine
    }
    $consumer = Set-WmiInstance -Class CommandLineEventConsumer -Arguments $consumerArgs
    
    # フィルターとコンシューマーをバインド
    Set-WmiInstance -Class __FilterToConsumerBinding -Arguments @{
        Filter = $filter
        Consumer = $consumer
    }
    
    Write-Host "[+] シミュレーション: WMIサブスクリプションとレジストリキーが正常に作成されました。"
    Write-Host "[+] WMIイベントがPowerShell実行をトリガーするのを待っています…"
    # 注:実際の環境ではイベントを待ちます。
    # テスト目的では、ルールはしばしば*作成*または*イベントトリガー*を探します。
  • クリーンアップコマンド:

    # クリーンアップスクリプト
    Write-Host "[!] シミュレーションアーティファクトをクリーンアップ中…"
    
    # 1. WMIサブスクリプションを削除
    Get-WmiObject -Namespace rootsubscription -Class __EventFilter -Filter "Name='Win32_LocalTimeFilter'" | Remove-WmiObject
    Get-WmiObject -Namespace rootsubscription -Class CommandLineEventConsumer -Filter "Name='Win32_CommandLineConsumer'" | Remove-WmiObject
    Get-WmiObject -Namespace rootsubscription -Class __FilterToConsumerBinding | Where-Object { $_.Filter -match "Win32_LocalTimeFilter" } | Remove-WmiObject
    
    # 2. レジストリキーを削除
    Remove-Item -Path "HKLM:Softwareuf42a9660377" -Recurse -Force
    
    Write-Host "[+] クリーンアップ完了。"