PureLogs、PawsRunnerステガノグラフィーを通じて配信
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
このキャンペーンは、環境変数を設定し起動するJavaScriptローダーを運ぶTXZアーカイブを含むフィッシングメールに依存しています。 conhost.exe をヘッドレスモードで。ローダーはPawsRunnerとして知られる.NETアセンブリを復号し、ステガノグラフィ技術を使用して隠された暗号化コンテンツを含むPNG画像を取得します。これらの画像から、マルウェアは最終ペイロードであるPureLogs.NETインフォスティーラーを抽出します。動作を開始すると、PureLogsはHTTPSを介してリモートのコマンド&コントロールサーバーに接続し、ブラウザの認証情報とシステム情報を流出させます。
調査
分析により、JavaScriptローダーがプロセスの環境変数からコマンドを取得し、隠しウィンドウフラグを使用してPowerShellを起動し、AESで暗号化されたペイロードを復号して.NETリフレクションを通じて実行することが示されました。PawsRunnerはネットワークAPIとユーザーエージェント文字列を3つずつ切り替えてPNGファイルを取得し、次に iTXt and IEND チャンクを解析して隠されたデータを見つけ、RC4で次の段階を復号します。PureLogsは次にTripleDESとGzipを使用してダウンローダーDLLをロードし、特定のエンドポイントにTLS保護されたHTTPリクエストを行い、被害者システムからブラウザ関連のデータを広範に収集します。
緩和策
組織はメールゲートウェイでTXZファイルをブロックし、 conhost.exe 見えないウィンドウで実行されているインスタンスを監視し、-w hidden フラグで起動されたPowerShellを検出するべきです。また、セキュリティチームはPawsRunnerとPureLogsの署名を展開し、特定されたコマンド&コントロールドメインとIPアドレスへのアウトバウンドトラフィックを制限し、未署名の.NETアセンブリの実行を制限するべきです。可能であれば、疑わしい受信画像ファイルに対してステガノグラフィー検出を適用するべきです。 flag. Security teams should also deploy signatures for both PawsRunner and PureLogs, restrict outbound traffic to the identified command-and-control domain and IP address, and limit execution of unsigned .NET assemblies. Where possible, steganography detection should be applied to suspicious inbound image files.
対応
この活動が検出された場合、影響を受けたエンドポイントを隔離し、怪しい conhost.exe およびPowerShellのプロセスを終了し、システムからドロップされた.NETバイナリを削除します。妥協された認証情報は無効化し、多要素認証を強制し、保存されたブラウザのパスワードをリセットします。調査担当者はさらに、追加のコマンド&コントロール通信が発生していないことを確認するためにネットワークフォレンジックスを実行し、再感染を防ぐために対策を適用するべきです。
攻撃フロー
検出
隠されたPowerShellコマンドラインでの実行の可能性 (cmdline経由)
表示
LOLBAS WScript / CScript (プロセス生成経由)
表示
疑わしい.NETメソッドのPowerShellからの呼び出し (powershell経由)
表示
PowerShell難読化インジケータの可能性 (powershell経由)
表示
LOLBAS Conhost (cmdline経由)
表示
PureLogsを検出するためのIOC (HashSha256): PawsRunnerステガノグラフィーによる配信
表示
PureLogsを検出するためのIOC (SourceIP): PawsRunnerステガノグラフィーによる配信
表示
PureLogsを検出するためのIOC (DestinationIP): PawsRunnerステガノグラフィーによる配信
表示
環境変数からのPowerShell AES復号化 [Windows PowerShell]
表示
隠されたConhostとPowerShell経由での悪意のあるプロセス実行の検出 [Windowsプロセス作成]
表示
シミュレーション実行
前提条件: テレメトリー&ベースラインの事前チェックが合格している必要があります。
-
攻撃のシナリオとコマンド
- ステージ1 – 暗号化されたペイロードの準備
- 攻撃者は小さなダミーペイロード (
「秘密」) を作成し、既知のキーを使用してAES-256で暗号化し、Base64エンコードした暗号文を環境変数に保存します。ENC_PAYLOAD.
- 攻撃者は小さなダミーペイロード (
- ステージ2 – PowerShell復号ローダーの実行
- 1行で
ENC_PAYLOADを読み込み、Base64文字列をデコードし、.NETのAesCryptoServiceProviderを構築し、キー/IVを導入、データを復号し、オプションでプレーンテキストを実行します。
- 1行で
- ステージ3 – 検出テレメトリーの生成
- PowerShellコマンドに「AES」という語が含まれており (例:
New-Object System.Security.Cryptography.AesCryptoServiceProvider), detection ruleを満たすEventID 4104としてログに記録されます。
- PowerShellコマンドに「AES」という語が含まれており (例:
- ステージ1 – 暗号化されたペイロードの準備
-
回帰テストスクリプト
# ------------------------------------------------- # PowerShell AES Decryption Simulation (検出をトリガー) # ------------------------------------------------- # 1. 固定された256ビットキーとIVの定義 (デモ目的) $key = [byte[]](0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10, 0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20) $iv = [byte[]](0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0) # 2. プレーンテキストペイロード (例) $plain = [System.Text.Encoding]::UTF8.GetBytes("秘密のデータ") # 3. AESを使用してペイロードを暗号化 (CBC, PKCS7) $aes = [System.Security.Cryptography.AesCryptoServiceProvider]::new() $aes.Key = $key $aes.IV = $iv $aes.Mode = [System.Security.Cryptography.CipherMode]::CBC $aes.Padding = [System.Security.Cryptography.PaddingMode]::PKCS7 $encryptor = $aes.CreateEncryptor() $cipherBytes = $encryptor.TransformFinalBlock($plain,0,$plain.Length) $cipherB64 = [Convert]::ToBase64String($cipherBytes) # 4. 暗号文を環境変数に保存 # 5. 復号ローダー - ログに記録される正確な行 ("AES"を含む) $loader = @" `$enc = [System.Environment]::GetEnvironmentVariable('ENC_PAYLOAD') `$bytes = [Convert]::FromBase64String(`$enc) `$aes = New-Object System.Security.Cryptography.AesCryptoServiceProvider `$aes.Key = $($key -join ',') `$aes.IV = $($iv -join ',') `$decryptor = `$aes.CreateDecryptor() `$plain = `$decryptor.TransformFinalBlock(`$bytes,0,`$bytes.Length) `$result = [System.Text.Encoding]::UTF8.GetString(`$plain) Write-Output `"Decrypted: `$result`" "@ # ローダーを実行 (EventID 4104としてキャプチャされます) Invoke-Expression $loader -
クリーンアップコマンド
# 環境変数を削除 # セッションから一時変数をクリア Remove-Variable -Name key,iv,plain,cipherBytes,cipherB64,loader -ErrorAction SilentlyContinue
シミュレーション後の検証
- 実行 検証クエリ (上記のKQL例) ただしフィルタリングは必要です
ScriptBlockTextに"AES"を含むもの検出が発動したことを確認します。 - SIEMでアラートの詳細を確認し、アラート名がルールと一致していること (もし定義されている場合) および深刻度が 高.
として報告されていることを確認します
- 終結の言葉
- このルールは、単純な「AES」使用シナリオを成功裏に検出します。
対抗者は単語を分割することで回避できます (例えば、対抗者は単語を分割することで回避できます (例えば、 - , .NETクラスを反射を経由してロードする、または復号化をコンパイルされたバイナリ内で行う)。 行動インジケータの 強化によって、
AesCryptoServiceProvider環境変数の暗号文としての使用、高エントロピーの文字列、オブジェクトの生成、およびその後のオブジェクトの生成、およびその後の