周辺およびエンドポイントログを介してアキラランサムウェアのキルチェーンを追跡する
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
この記事は、Akiraランサムウェア作戦に関連する最近の侵入について記述しています。攻撃者は、無効にされたローカルSSL VPNアカウントをブルートフォースすることで初期アクセスを取得し、その後資格情報の発見、Kerberoasting、RDPを介した横方向移動へと移行しました。暗号化を開始する前にログを消去し、シャドウコピーを削除しました。特に、この一連の流れはファイアウォールsyslogデータとWindows EVTXログを通じて確認でき、エンドポイントの検出ツールには依存していません。この報告は、境界とエンドポイントのテレメトリを組み合わせてランサムウェア活動を初期段階で露出できる方法を強調しています。
調査
調査は、SSL VPNファイアウォールログとドメインコントローラおよびメンバーサーバーから収集されたWindowsイベントログエクスポートにのみ依存していました。以下のイベントIDを含む 4624, 4688, 4769, 1102、そして 7036 を相関させて、初期アクセスから最終的な影響に至るまでの完全なキルチェーンを再構築しました。観察された技術には、資格情報の詰め込み、ドメインの発見、Kerberoasting、RDP認証、ログのクリア、シャドウコピーの削除が含まれていました。侵入をマッピングするためにメモリイメージやEDRテレメトリは必要ありませんでした。
緩和策
報告書はリモートアクセスセキュリティの強化、MFAの施行、ファイアウォールアクセスリストから無効なアカウントの削除、認証ロックアウトポリシーの強化を推奨しています。また、イベントID 4688 で詳細なプロセス監査を全システムで有効にし、セキュリティログの保持期間を延ばし、重要なログを外部ストレージに転送するよう助言しています。RC4ベースのKerberosチケット、 vssadmin シャドウコピーの削除、および -EncodedCommandを使用する予期しないPowerShellコマンドを特にカバーする検出コンテンツが必要です。一貫した時間同期も信頼性のある相関には不可欠です。
対応策
識別された指標のいずれかが検出された場合、対応者は直ちに危険にさらされたVPNアカウントを隔離し、影響を受けたシステムを隔離する必要があります。関連するファイアウォールとEVTXログを保存し、資格情報をリセットし、危険にさらされたアカウントを無効化し、利用可能な場合はクリーンなバックアップからシャドウコピーを復元します。追加の持続性またはフォローオン活動を特定するための完全な法医学的レビューを実施し、ランサムウェア対応手順を発動します。利害関係者には速やかに通知し、必要な場合は公開の開示も検討すべきです。
"graph TB %% Class definitions classDef phase fill:#ffcc99 classDef tool fill:#c2f0c2 %% Node definitions phase_initial_access["<b>フェーズ</b> – 初期アクセス<br/><b>技術</b> – T1133 外部リモートサービス<br/><b>説明</b>: 妥協したローカルアカウントを使用してSSL VPNに対する資格情報スタッフィング。"] class phase_initial_access phase tech_valid_accounts["<b>技術</b> – T1078 有効なアカウント<br/><b>説明</b>: 盗まれた資格情報を使用してVPNにログイン。"] class tech_valid_accounts phase phase_discovery["<b>フェーズ</b> – 発見<br/><b>技術</b> – T1482 ドメイン信頼発見<br/><b>説明</b>: nltestを使用してドメイン信頼を列挙。"] class phase_discovery phase tech_account_discovery["<b>技術</b> – T1087 アカウント発見<br/><b>説明</b>: net.exeおよびwhoamiを介してグループとユーザーを列挙。"] class tech_account_discovery phase phase_credential_access["<b>フェーズ</b> – 資格情報アクセス<br/><b>技術</b> – T1558.003 Kerberoasting<br/><b>説明</b>: RC4サービスチケットを要求し、サービスアカウントのパスワードをクラック。"] class phase_credential_access phase phase_lateral_movement["<b>フェーズ</b> – 横方向移動<br/><b>技術</b> – T1021.001 リモートサービス リモートデスクトッププロトコル<br/><b>説明</b>: RDPを使用してサーバーおよびドメインコントローラに横移動。"] class phase_lateral_movement phase phase_persistence["<b>フェーズ</b> – 永続性と特権の昇格<br/><b>技術</b> – T1136 アカウント作成<br/><b>説明</b>: 非デフォルトOUで新しいサービスアカウントを作成し、特権グループに追加。"] class phase_persistence phase phase_execution["<b>フェーズ</b> – 実行<br/><b>技術</b> – T1059.001 PowerShell<br/><b>説明</b>: -EncodedCommandでPowerShellスクリプトを実行。<br/><b>技術</b> – T1059.003 Windowsコマンドシェル<br/><b>説明</b>: cmd.exeを使用して様々なコマンドを実行。"] class phase_execution phase phase_defense_evasion["<b>フェーズ</b> – 防御の回避<br/><b>技術</b> – T1070.001 Windowsイベントログのクリア<br/><b>説明</b>: Windowsイベントログをクリア。<br/><b>技術</b> – T1562 防御の低下<br/><b>説明</b>: sc.exeまたはnet stopを使用してセキュリティサービスを停止。"] class phase_defense_evasion phase phase_impact["<b>フェーズ</b> – 影響<br/><b>技術</b> – T1490 システムリカバリの阻害<br/><b>説明</b>: vssadminでシャドウコピーを削除。<br/><b>技術</b> – T1565.001 保存データの改変<br/><b>説明</b>: ディスク上のファイルを暗号化。"] class phase_impact phase tool_ssl_vpn["<b>ツール</b> – SSL VPNクライアント"] class tool_ssl_vpn tool tool_nltest["<b>ツール</b> – nltestユーティリティ"] class tool_nltest tool tool_net["<b>ツール</b> – net.exeユーティリティ"] class tool_net tool tool_whoami["<b>ツール</b> – whoamiコマンド"] class tool_whoami tool tool_powershell["<b>ツール</b> – PowerShell"] class tool_powershell tool tool_cmd["<b>ツール</b> – cmd.exe"] class tool_cmd tool tool_sc["<b>ツール</b> – sc.exeコマンド"] class tool_sc tool tool_vssadmin["<b>ツール</b> – vssadminユーティリティ"] class tool_vssadmin tool %% Connections showing flow phase_initial_access –>|リードしている| tech_valid_accounts tech_valid_accounts –>|リードしている| phase_discovery phase_discovery –>|リードしている| tech_account_discovery tech_account_discovery –>|リードしている| phase_credential_access phase_credential_access –>|リードしている| phase_lateral_movement phase_lateral_movement –>|リードしている| phase_persistence phase_persistence –>|リードしている| phase_execution phase_execution –>|リードしている| phase_defense_evasion phase_defense_evasion –>|リードしている| phase_impact %% Tool usage edges phase_initial_access –>|使用する| tool_ssl_vpn phase_discovery –>|使用する| tool_nltest phase_discovery –>|使用する| tool_net phase_discovery –>|使用する| tool_whoami phase_execution –>|使用する| tool_powershell phase_execution –>|使用する| tool_cmd phase_defense_evasion –>|使用する| tool_sc phase_impact –>|使用する| tool_vssadmin "
攻撃フロー
検出
可能性のある管理アカウントまたはグループの列挙(コマンドライン経由)
表示
可能性のあるアカウントまたはグループの列挙/操作(コマンドライン経由)
表示
疑わしいドメイン信頼の発見(コマンドライン経由)
表示
疑わしいVSSADMINアクティビティ(コマンドライン経由)
表示
RDPベースの横方向移動とドメインレベル特権昇格の検出 [Microsoft Windowsセキュリティイベントログ]
表示
SSLVPNブルートフォースと資格情報スタッフィングの検出 [ファイアウォール]
表示
シミュレーション実行
前提条件: テレメトリ&ベースライン事前フライトチェックが合格していること。
根拠: このセクションでは、検出ルールをトリガーするために設計された敵の技術(TTP)の正確な実行を詳細に記載します。コマンドとナarrativeは特定されたTTPを直接反映し、検出ロジックによって期待される正確なテレメトリ生成を目的としている必要があります。
-
攻撃の語り&指揮:
- 情報収集(T1087): 攻撃者は妥協された内部システムからユーザー名を列挙し、資格情報詰め込みリストを作成します(例:
users.txt). - ブルートフォースループ(T1021.001 / T1078.001): 既知のホスティングプロバイダーに属する妥協された外部IP範囲を使用して(例:
203.0.113.45)、攻撃者は1時間以内に50以上の失敗したSSLVPN認証試行を開始します。各試行はリストから異なるパスワードを使用し、単一の被害者アカウントを狙います。 - 成功した資格情報詰め込み: リストを使い切った後、正しいパスワードが見つかり、攻撃者は同じIPから成功裏にログインし、「successful_auth」条項を満たします。
- 回避 (オプション – T1070.001): 攻撃者はログイン後にVPN機器のセキュリティログをクリアし、痕跡を隠します(このルールではカバーしていません)。
- 情報収集(T1087): 攻撃者は妥協された内部システムからユーザー名を列挙し、資格情報詰め込みリストを作成します(例:
-
回帰テストスクリプト: を利用したBashスクリプト(Linux攻撃者ボックスで動作)。実際の環境に合わせて変数を調整します。
を利用したBashスクリプト(Linux攻撃者ボックスで動作)。実際の環境に合わせて変数を調整します。#!/usr/bin/env bash # —————————————————————— # Sigmaルールをトリガーするために設計されたSSLVPNブルートフォース/資格情報つめこみをシミュレートする # —————————————————————— VPN_ENDPOINT=”https://vpn.example.com/remote/auth” USERNAME=”victim_user” PASSWORD_LIST=”passwords.txt” # 1行に1つのパスワード SOURCE_IP=”203.0.113.45″ # VPNにルーティング可能である必要があります # 単一のログイン試行を実行する関数 attempt_login() { local pwd=”$1″ # –silentを使用して煩雑さを避け、–write-outを使用してHTTPコードを取得 curl –silent –output /dev/null –write-out “%{http_code}” –user “$USERNAME:$pwd” “$VPN_ENDPOINT” } # 1. 失敗した試行を55回生成する(速度 ~1/秒) echo “失敗した試行を開始…” count=0 while IFS= read -r pwd && [ $count -lt 55 ]; do http_code=$(attempt_login “$pwd”) echo “試行 $((count+1)): HTTP $http_code (期待される401)” ((count++)) sleep 1 # 1時間内に収める done < “$PASSWORD_LIST” # 2. 正しいパスワードでの成功したログイン(ファイル中の最後の行と仮定) echo “成功したログインを実行する…” correct_pwd=$(tail -n1 “$PASSWORD_LIST”) http_code=$(attempt_login “$correct_pwd”) echo “成功した試行: HTTP $http_code (期待される200)” echo “シミュレーション終了。”#!/usr/bin/env bash # ------------------------------------------------------------------ # Simulate SSLVPN brute‑force / credential stuffing to trigger Sigma rule # ------------------------------------------------------------------ VPN_ENDPOINT="https://vpn.example.com/remote/auth" USERNAME="victim_user" PASSWORD_LIST="passwords.txt" # one password per line SOURCE_IP="203.0.113.45" # must be routable to the VPN # Function to perform a single login attempt attempt_login() { local pwd="$1" # Using --silent to avoid clutter; --write-out to capture HTTP code curl --silent --output /dev/null --write-out "%{http_code}" --user "$USERNAME:$pwd" "$VPN_ENDPOINT" } # 1. Generate 55 failed attempts (rate ~1/sec) echo "Starting failed attempts..." count=0 while IFS= read -r pwd && [ $count -lt 55 ]; do http_code=$(attempt_login "$pwd") echo "Attempt $((count+1)): HTTP $http_code (expected 401)" ((count++)) sleep 1 # keep within 1‑hour window done < "$PASSWORD_LIST" # 2. Successful login with correct password (assume last line in file) echo "Performing successful login..." correct_pwd=$(tail -n1 "$PASSWORD_LIST") http_code=$(attempt_login "$correct_pwd") echo "Successful attempt: HTTP $http_code (expected 200)" echo "Simulation complete." -
クリーンアップコマンド: 一時ファイルを削除し、ファイアウォールのレート制限をリセットします(変更があった場合)。
#!/usr/bin/env bash # SSLVPNブルートフォースシミュレーションの後処理 # もしその場で生成された一時パスワードリストがあれば削除 if [ -f passwords.txt ]; then shred -u passwords.txt echo "passwords.txtを削除しました" fi # テスト用に使用された一時的なiptablesルールをオプションでリセット sudo iptables -D INPUT -s 203.0.113.45 -j DROP 2>/dev/null || true echo "クリーンアップ完了。"