LokiBotの10年後: 最新キャンペーンの分析
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
LokiBotは、ブラウザ、暗号通貨ウォレット、その他の機密アプリケーションから資格情報を収集するために構築された長期間稼働しているインフォスティーラーです。この最近のキャンペーンは、マルスパムを通じて配信される難読化されたJScript添付ファイルから始まる複数段階の実行チェーンに依存しています。マルウェアはプロセス注入とAPIハッシュ化を使用して視認性を低下させ、盗まれたデータをコマンド・アンド・コントロールインフラストラクチャに送信します。
調査
調査では、複数段階のLokiBotサンプルを検討し、JScript添付ファイルからPowerShellローダー、次に.NETインジェクタ、最終的にはLokiBotペイロードに至るまでの進展を追跡しました。アナリストは、チェーン全体でのConfuserEx保護、XORベースの復号化、およびリフレクティブローディング技術の使用を特定しました。調査ではさらに、マルウェアのカスタムAPIハッシュアプローチと欠陥のあるレジストリベースの永続性方法についても説明しました。
緩和策
組織は、配信前に悪意のあるJScript添付ファイルとマルスパムをブロックするために強力なメールフィルタリングを導入すべきです。 wscript.exe and powershell.exe によって生成される不審な子プロセスの監視もまた重要です。さらに、信頼できない.NETアセンブリの実行を制限し、Windows Runキーへの異常な変更に注意を払うことによって、露出を減少させることができます。
対応策
LokiBotが検出された場合、影響を受けたエンドポイントを即座に隔離してさらなるデータ窃盗と指令通信を停止します。調査官は、元の侵入点を特定し資格情報漏洩の範囲を評価するためにフォレンジック分析を行うべきです。感染したホストからアクセスされたすべてのアカウントは全パスワードリセットを受け、関連するJScriptおよびPowerShellアーティファクトのために環境をスキャンするべきです。
攻撃フロー
検出
可能な持続点 [ASEPs – Software/NTUSER Hive] (レジストリイベント経由)
表示
隠れたPowerShellコマンドライン経由の実行の可能性 (cmdline経由)
表示
LOLBAS WScript / CScript (プロセス生成経由)
表示
不審なPowershell文字列 (PowerShell経由)
表示
LokiBot C2通信 – HTTPリクエスト経由 [Windowsネットワーク接続]
表示
aspnet_compiler.exeでのLokiBotプロセス注入の検出[Windowsプロセス生成]
表示
Base64 PowerShellスクリプトと.NETアセンブリロードによるLokiBot実行の検出[Windows PowerShell]
表示
シミュレーション実行
前提条件: テレメトリ&ベースライン事前チェックが合格している必要があります。
理由: このセクションでは、検出ルールをトリガーするように設計された敵の技術的手法の正確な実行を詳細に説明します。コマンドと説明は、識別されたTTP(戦術、技術、手法)を直接反映し、検出ロジックによって期待される正確なテレメトリを生成することを目的としています。抽象的または無関係な例は、誤診を引き起こします。
-
攻撃の説明とコマンド: 敵はJScriptファイル経由で初期アクセスを成功させました。検出可能な
.dllファイルをディスクにドロップしないようにするため、Base64エンコードされた文字列を含むPowerShellコマンドを実行します。このスクリプトはデコード後、.NETリフレクション機能を使用して[System.Reflection.Assembly]::Loadを呼び出して、悪意のあるペイロードを直接現在のプロセスメモリに引き込みます。この「ファイルレス」アプローチはLokiBotの特徴です。 -
リグレッションテストスクリプト:
# LokiBotシミュレーションスクリプト # このスクリプトは検出ルールで定義された正確な文字列に一致するように設計されています。 # 1. Base64コンポーネントをシミュレートする $encodedCommand = "Base64エンコードされたPowerShellスクリプト" $dummyPayload = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("DummyPayload")) # 2. 検出ルールと同じ文字列を使用してアセンブリロードコンポーネントをシミュレートする # これはシミュレーションなので「ペイロード」が実際のアセンブリではないため、try/catchを使用します。 try { Write-Host "エンコードされたステージを実行中..." Write-Output $encodedCommand # これは検出ルールの主要トリガになる行です $trigger = "[System.Reflection.Assembly]::Load" Write-Host "アセンブリをロードしようとしています: $trigger" # Invoke-Expressionを使用してScriptBlockTextに表示されるようにします Invoke-Expression "Write-Host 'トリガー中: $trigger'" } catch { Write-Error "シミュレーションがトリガ文字列を実行できませんでした。" } -
クリーンアップコマンド:
# シミュレーションスクリプトによる永久的な変更はありません。 # 単にコンソールをクリアし、存在する潜在プロセスがないことを確認します。 Clear-Host Write-Host "シミュレーションクリーンアップ完了。ファイルはドロップされませんでした。"