CrowdStrike Falcon Agent の影響を受けた Azure VM の復旧
はじめに
2024年07月19日 13:09 (日本時間)に CrowdStrike から配信されたアップデートによって影響を受けた Azure VM (Windows) の復旧をする
事象について
Technical Details: Falcon Content Update for Windows Hosts
各種復旧方法について
CrowdStrike やマクニカから復旧方法の案内が出ています。
この Scrap では Azure VM (Windows 2019) について言及していますが、その他の復旧方法については以下リンクより確認してください。
CrowdStrike
REMEDIATION AND GUIDANCE HUB: FALCON CONTENT UPDATE FOR WINDOWS HOSTS
マクニカ
復旧対象
- OS: WindowsServer:2019-Datacenter
- Size: Standard D2s v4
- Disk: Premium SSD LRS 128GiB
復旧方法
Microsoft よりガイダンスされている Recovery options for Azure Virtual Machines (VM) affected by CrowdStrike Falcon agent を参考に復旧します。
ガイダンスの中では以下の方法が案内されています。
回復オプション
- ブート構成を変更し、Azure VM の再起動による復旧
追加の回復オプション
上記の回復オプションで復旧できなかった場合、以下の方法で復旧を試みることができます。
- バックアップからの復元
- レスキュー VM を作成し修正スクリプトを適用後、影響を受けた VM の Disk を差し替える
- レスキュー VM を作成し手動で問題のファイルを削除後、影響を受けた VM の Disk を差し替える
回復オプション
Microsoft は CrowdStrike と協力してブート構成を調整することで、影響を受けた VM が修正された CrowdStrike のシグネチャファイルをダウンロードすることに成功したようです。
そのため、ユーザーにとっては Azure リソースに複数の変更を加えることなく復旧できそうでとてもライトな復旧方法です。
まず、私たちはこの復旧オプションを試みるために、Microsoft に対してブート構成の調整を許可する必要があります。
ブート構成の適用を Microsoft へ要求する
- Azure Portal で「サポートとヘルプ」を開き、サポートリクエストの作成を行います。
- 「Need Help Recovering your VM from CrowdStrike incident?」の表示が確認できます。
- 「Yes」ボタンをクリックすることで、サブスクリプションを選択できますので続けます。
- 説明に
I need help recovering from CrowdStrike incident.
が記述されたリクエスト画面が表示されますので、重要度や連絡方法、サポート言語を設定してリクエストします。
追加の回復オプション - バックアップからの復元
Azure portal で Azure VM データを復元する方法 #復元ポイントを選択 を参考に復元できます。
後日バックアップ取得後から障害発生時までのデータをサルベージすることを考えていたので、私は既存の置き換えではなく、新しい VM を作成する方法を用いて復旧しました。
追加の回復オプション - レスキュー VM を作成し修正スクリプトを適用後、影響を受けた VM の Disk を差し替える
この回復オプションでは、az vm repair
コマンドを利用してレスキュー VM を作成し、修復スクリプト win-crowdstrike-fix-bootloop を実行して、問題の CrowdStrike のファイルを削除します。
この時、影響のあった VM からコピーされた Disk に対して修復スクリプトが実行されています。
修復スクリプト実行後、修正を適用した Disk と問題の VM の Disk を差し替えることで復旧を試みます。
レスキュー VM の作成
レスキュー VM を作成します。
レスキュー VM は repair-${BROKENVMNAME}
という名前で作成されます。
RG や VNET, Subnet, NSG, NIC も同様に repair-
から始まるリソースが作成されます。
# $RGNAME = 影響を受けた Azure VM と同一のリソースグループ
# $BROKENVMNAME = 影響を受けた Azure VM の名前
az vm repair create -g $RGNAME -n $BROKENVMNAME --verbose
# 暗号化された VM の場合は以下のコマンドを用いる
az vm repair create -g $RGNAME -n $BROKENVMNAME -unlock-encrypted-vm --verbose
作成時、レスキュー VM の admin username と password, Public IP アドレスの要否が聞かれます。
私の環境ではデータディスクがドライブに割り当てられなかったため、手作業でデータディスクをドライブに割り当てるために Public IP アドレスは yes にします。
Repair VM admin username:
Repair VM admin password:
Confirm Repair VM admin password:
Does repair vm requires public ip? (y/n):y
データディスクを手作業でドライブに割り当て
作成されたレスキュー VM の Public IP アドレスを取得し、RDP で接続します。
この時、 NSG はすべての IP アドレスから RDP を受け入れる設定が行われています。必要に応じて NSG の設定を変更してください。
リモートデスクトップ後、ドライブ文字を変更する を参考にドライブに割り当てを行ってください。
今回は E ドライブとして割り当てしました。
修復スクリプトの実行
そのまま E ドライブにアクセスし該当ファイルを手作業で削除しても良いのですが、オペレーションミスを避けるために az vm repair
コマンドで提供されている修正スクリプトに頼ります。
以下の az vm repair
コマンドを利用して修復スクリプトを実行することで \Windows\System32\drivers\CrowdStrike\C-00000291*.sys
に該当するファイルを削除できます。
私の環境では 1 分ほどで完了しました。
az vm repair run -g $RGNAME -n $BROKENVMNAME --run-id win-crowdstrike-fix-bootloop --run-on-repair --verbose
修正を適用した Disk と問題の VM の Disk を差し替え
az vm repair restore -g $RGNAME -n $BROKENVMNAME --verbose
上記の az コマンドで以下の流れを全て行えます。
- レスキュー VM から Disk のデタッチ
- 影響を受けた VM の OS ディスクをスワップ
- レスキュー VM の削除
レスキュー VM の削除については以下のように確認が行われます。
役目を終えたので yes で削除してもらいます。
Continue with clean-up and delete resources? (y/n):y
この時、スワップ時に影響を受けた VM デタッチされた Disk は残っていますので復旧を確認出来たら削除を検討しましょう。
影響を受けた VM を開始
VM を起動し、復旧できたか確かめます。
ドライブの割り当てを行なったことで修正スクリプトによって問題のファイルを削除でき、無事に起動しました。
連携先のサーバーからも接続が確認でき、復旧できていました。
その他
Azure サービス正常性
Azure のサービス正常性に Virtual Machines startup failures due to CrowdStrike Falcon Agent update Issue
というタイトルで情報が出ていました。