捨てられた拡張機能名:Azure VMAccess命名の混乱、パスワードリセット、および検出ギャップ

Image

シニア脅威研究エンジニア

Image

4月初旬、Sysdig脅威研究チーム(TRT)はAzure VMパスワードリセットおよびVMAccess命名プロセスにおける検出フローを特定しました。このフローにより、攻撃者はAzure VM拡張機能に任意の名前を割り当てることができ、読み取り/書き込みアクセスを取得し、パスワードを変更し、検出されることなく被害者の環境に永続化する機能を持ちます。さらに、Sysdig TRTは、Azure脅威マトリックスで文書化されたこの検出に関するテレメトリが、イベントがトリガーされた際に発火しなかったことを発見しました。特定された時点で、これらの問題を直ちにMicrosoftに報告しました。彼らの公式な対応は以下の通りです:

「調査の結果、リソース名は常にユーザーが指定するものであるため、これはセキュリティ脆弱性と考えられません。」

このレポートはSysdig TRTの調査結果を詳述し、検出推奨事項を探ります。

攻撃対象としてのVM拡張機能

Azure VM拡張機能は、仮想マシンで実行され、展開後の構成と管理タスクを実行するプログラムです。これらはVM上で昇格された権限で実行され、Azure制御プレーンを通じて展開されます。つまり、適切なARM(Azure Resource Manager)権限を持つ者は誰でも、OSレベルのアクセスを必要とせずにVMにコードまたは構成の変更をプッシュできます。

セキュリティ研究者はVM拡張機能の悪用を広く文書化しています。NetSPIはCustomScriptExtensionおよびRunCommandなどの拡張機能をAzure環境でのラテラルムーブメントとコード実行に使用することに関する研究を公開しています。Microsoft自体のAzure脅威マトリックスマッピングはVM拡張機能を実行と永続化のベクトルとして認識しています。さらに、Sysdig Secureのようなエンタープライズクラウドセキュリティツールは、疑わしい拡張機能の展開についてアラートを発行する検出ルールを備えています。

VMAccess拡張機能は特に機密性が高いものです。VM上のパスワードとSSHキーをリセットし、このフローを通じて、攻撃者はパスワードをリセットして環境内で永続化を維持することができます。Linuxでは、拡張機能の種類はVMAccessForLinuxです(パブリッシャー:Microsoft.OSTCExtensions)。Windowsでは、VMAccessAgentです(パブリッシャー:Microsoft.Compute)。これらは2つの異なるパブリッシャーからの2つの異なる拡張機能かもしれませんが、概念的には同じ操作です。

VMAccess検出ルールは通常、アクティビティログのresourceIdまたはentityフィールド内の拡張機能リソース名に一致し、enablevmaccessVMAccessForLinux、またはVMAccessAgentのような文字列を探します。

Azure VM上のパスワードリセット検出のフロー

理論的には、Azure VMのパスワードリセットは簡単なはずです。Azure Resource Manager(ARM)制御プレーン経由で実行され、Microsoft.Compute/virtualMachines/extensions/writeとしてAzureアクティビティログに書き込まれます。パスワードリセットを有効にするVM拡張機能には既知の名前があります。名前に一致する検出ルールを作成して完了です。しかし、理論的に真実は実際には常に真実ではありません。

VM拡張機能は単一の既知の名前を持つだけではありません。互いに交換可能に使用する3つ以上の名前を持っています。そして、パスワードをリセットするために使用されるツールに応じて、どの検出ルールも一致しない名前を含め、完全に任意の名前を持つことができることが判明しました。つまり、ここでの命名の創造性に制限はありません。

さらに複雑にするために、成功した拡張機能書き込みのアクティビティログには、拡張機能パブリッシャーまたはタイプが含まれていません。唯一の識別情報は、呼び出し元が制御するリソース名と汎用操作文字列です。VM拡張機能を書き込むことができる任意の攻撃者は、認証情報をリセットし、操作に任意の名前を付けることができます。デフォルト検出ルールはこれを見ることはありません。

VM上のホストおよびネットワークレベルのログ(例:Windowsイベントログと/var/log)もデフォルトではAzureに渡されません。代わりに、各VMに対して構成する必要があります。つまり、VMの制御を失った場合、事前に追加ログを設定していない限り、Azureは攻撃者がVM内で何をしているかについての通知を行いません。

Azure脅威マトリックスによると、ユーザーはこのパスワードリセットを「Validate Deployment」の操作名を含むイベント経由で検出することになっており、Properties_dに「vmaccesswindowspasswordreset」があります。しかし、この検出は2026年4月のSysdig TRTが実行したテスト中に決して発火しませんでした。

3つのチーム、3つの名前

VM拡張機能がARM APIを通じて展開されるとき、URLは次のパターンに従います:

PUT .../virtualMachines/{vm}/extensions/{name}

最後の{name}セグメントは拡張機能リソース名であり、アクティビティログに表示される値です。3つのMicrosoftツールはその名前が何であるべきかについて異なります。

Azureポータル

ポータルは常に、既にインストールされているものに関わらず、LinuxおよびWindows VM両方で、リソース名enablevmAccessでVMAccessを展開します。

Azure CLI

azure-cli/src/azure-cli/azure/cli/command_modules/vm/custom.pyのAzure CLIソースコードは、2016年7月2日以来、同じenablevmAccess値をハードコードしています(PR #482):

# ポータルと同じ名前を使用して、両方のCLIとポータルから更新できるようにします# (VMは同じ拡張機能に対して複数のハンドラーを許可しません)_ACCESS_EXT_HANDLER_NAME = 'enablevmaccess'

ただし、2017年3月(PR #2395)、CLIチームは_get_extension_instance_name()という関数を追加しました。これはVMが既に別の名前でインストールされた拡張機能を持っているかどうかをチェックし、そうであれば、ハードコードされた定数の代わりにその名前を再利用します。理由は「そうでなければ、VMエージェントは2つ以上のハンドラーを拒否する可能性があります。」つまり、CLIはVMの履歴に応じてenablevmaccessまたはVMAccessAgentを送信する可能性があります。

ドキュメント

VMAccessの公式Microsoft Learnドキュメントは、任意のCLI、PowerShell、またはARMテンプレートの例でenablevmaccessを使用していません。2016年4月の最初のバージョンのドキュメントに遡ると(コミット2fde0e40bf)、すべての例は拡張機能の種類の名前を使用しています:Linux用VMAccessForLinux、Windows用VMAccessAgent

文字列enablevmaccessは2025年3月までドキュメントに表示されず、その後も逐語的なAzureエラーメッセージのトラブルシューティングテーブル内の一部としてのみ表示されました。推奨事項ではなく。

ドキュメントはCLI定数の3ヶ月前のものであり、命名慣例の断片化の明確な系統を示しています。

課題

Azureは制約を強制します:VM上のハンドラータイプごとの1つの拡張機能リソース。ポータルがVMAccessをenablevmAccessとしてインストールし、ユーザーが後でドキュメントに従ってVMAccessForLinuxとして展開する場合、Azureは400 BadRequestで要求を拒否します:「複数のVMExtensionsはハンドラーごとにサポートされていません。」

ただし、名前は任意です。クロスツール テストにより、拡張機能リソース名がツール別に異なることが確立されました。これにより、Sysdig TRTが次に探索した質問につながりました:Azureは名前を検証していますか?

VMAccess拡張機能は、既存のVMAccessハンドラーなしでクリーンなLinux VMにAZ CLIを通じて展開されました。完全に任意のリソース名を使用して:

az rest --method PUT \
  --url ".../extensions/my-custom-name-12345?api-version=2024-07-01" \
  --body '{
    "location": "eastus",
    "properties": {
      "publisher": "Microsoft.OSTCExtensions",
      "type": "VMAccessForLinux",
      "typeHandlerVersion": "1.5",
      "autoUpgradeMinorVersion": true,
      "settings": {},
      "protectedSettings": {
        "username": "azureuser",
        "password": "********"
      }
    }
  }'

Azureはmy-custom-name-12345を受け入れ、パスワードはリセットされ、拡張機能がインストールされました。それを捕捉することになっていた検出はアラートを発火しませんでした。

アクティビティログが示すもの

このパスワード リセットの成功のアクティビティログエントリは、以下の通りです(短縮版):

{
"operationName": {
"value": "Microsoft.Compute/virtualMachines/extensions/write"  },
"resourceId": ".../extensions/my-custom-name-12345",
"status": {
"value": "Succeeded"  },
"properties": {
"entity": ".../extensions/my-custom-name-12345",
"message": "Microsoft.Compute/virtualMachines/extensions/write"  }
}

拡張機能パブリッシャー(Microsoft.OSTCExtensions)とタイプ(VMAccessForLinux)は、成功した拡張機能の書き込みのアクティビティログに存在しません。唯一の識別情報は、任意の呼び出し元が制御するリソース名と汎用操作名Microsoft.Compute/virtualMachines/extensions/writeです。

検出ギャップ

アクティビティログ、resourceId、またはentityフィールド内の既知の拡張機能名に一致する検出ルールは、別の拡張機能リソース名を選択するだけで回避できます。

たとえば、Microsoft.Compute/virtualMachines/extensions/write権限を持つ攻撃者は:

  1. VMAccessを使用してVMパスワードをリセットします
  2. 拡張機能に任意の名前を付けます。例えば、AzureMonitorUpdatecompliance-check、またはその他の無害な文字列
  3. アクティビティログは任意の名前と汎用extensions/write操作のみを表示します
  4. enablevmaccessVMAccessForLinux、またはVMAccessAgentに一致する検出ルールは発火しません

全体として、このAzure制御プレーンテレメトリはMITRE ATT&CKテクニックT1036(マスカレード)の明確な例です。

Microsoftはまた、Azure脅威マトリックステクニックAZT501.3:Azure VM Local Administrator Manipulationを通じてこのアクティビティを検出するための追加のガイダンスを提供しています。彼らのドキュメントによると:「成功したリセット後、ログ「Validate Deployment」が作成されます。具体的には、スコープ内で、パスワードリセットが「VMAccessWindowsPasswordReset」で言及されます。また、2つの予想されるイベントを含むログテーブルもあります。前に記載したMicrosoft.Compute/virtualMachines/extensions/writeイベント、および2番目のイベント:Microsoft.Resources/deployments/validate/action

Image

Image

ただし、このアクティビティのテスト中に、Microsoft.Resources/deployments/validate/actionイベントは決して発生しませんでした。つまり、Microsoft提供の検出に関するガイダンスはここで有効ではありませんでした。

推奨事項

resourceIdパス内の拡張機能リソース名も信頼できない検出シグナルです。代わりに、以下の代替案を検討してください:

  • 一致させる – 操作名で。Microsoft.Compute/virtualMachines/extensions/writeは命名に関わらずすべての拡張機能展開をキャプチャします。有効ですが、エンジニアはこのようなことをしばしば行うため、ノイズが多くなり、偽陽性を生成します。
  • 関連付ける – Azure Resource GraphまたはExtensions APIと。Microsoft.Compute/virtualMachines/extensionsのクエリは、インストールされた任意の拡張機能の実際のパブリッシャーとタイプを返します。
  • アラート – 機密VMへの任意の拡張機能書き込み。本番環境または高価値のVMの場合、リソース名に関わらず、任意の拡張機能展開は調査を保証します。

結論

Microsoftのポータル、CLI、およびドキュメントチーム間の命名の矛盾は、最終的には、より深い課題に帰結しました。拡張機能リソース名は、検証されていない、呼び出し元が制御する文字列で、セマンティック的な意味がありません。MSFTが提供する検出ガイダンスは効果がありません。この矛盾は、検出ルールが複数のツール表面からのテレメトリに一致する必要があったときにのみ可視化され、それらのルールは自明に回避可能であることが判明しました。モダンなマルチクラウド組織は複雑で、クラウドとのレガシーな相互接続に関連する追加の問題は引き続き発生します。

開示タイムライン

この調査結果は2026年4月7日にMicrosoft Security Response Center(MSRC)に報告されました。2026年5月11日、Microsoftは「調査の結果、リソース名は常にユーザーが指定するものであるため、これはセキュリティ脆弱性と見なされない」と結論付けました。

付録:脅威ハンターのための既知のAzure VM拡張機能名

拡張機能リソース名(/virtualMachines/{vm}/extensions/{name}{name}セグメント)はアクティビティログに表示されるものです。Azureはそれを検証または制約しません。以下の名前はMicrosoft自体のツールがデフォルトで使用するものです。このリストにない拡張機能リソース名は外れ値であり、調査価値があります。

機能

VM OS

拡張機能の種類

パブリッシャー

既知のデフォルトリソース名

パスワード/SSHリセット

Linux

VMAccessForLinux

Microsoft.OSTCExtensions

enablevmAccess, VMAccessForLinux

パスワード/RDPリセット

Windows

VMAccessAgent

Microsoft.Compute

enablevmAccess, VMAccessAgent

任意のスクリプト実行

Linux

CustomScript

Microsoft.Azure.Extensions

CustomScript, customScript, config-app

任意のスクリプト実行

Windows

CustomScriptExtension

Microsoft.Compute

CustomScriptExtension, config-app

任意のスクリプト実行

Linux

RunCommandLinux

Microsoft.CPlat.Core

RunCommandLinux, RunCommand

任意のスクリプト実行

Windows

RunCommandWindows

Microsoft.CPlat.Core

RunCommandWindows, RunCommand

Entra IDログイン

Linux

AADSSHLoginForLinux

Microsoft.Azure.ActiveDirectory

AADSSHLoginForLinux, AADSSHLogin

Entra IDログイン

Windows

AADLoginForWindows

Microsoft.Azure.ActiveDirectory

AADLoginForWindows, AADLogin

証明書取得

Linux

KeyVaultForLinux

Microsoft.Azure.KeyVault

KeyVaultForLinux, KVVMExtensionForLinux

証明書取得

Windows

KeyVaultForWindows

Microsoft.Azure.KeyVault

KeyVaultForWindows, KVVMExtensionForWindows

ADドメイン参加

Windows

JsonADDomainExtension

Microsoft.Compute

joindomain, JsonADDomainExtension, JoinDomain

ディスク暗号化

Linux

AzureDiskEncryptionForLinux

Microsoft.Azure.Security

AzureDiskEncryptionForLinux

ディスク暗号化

Windows

AzureDiskEncryption

Microsoft.Azure.Security

AzureDiskEncryption

構成強制

Linux

DSCForLinux

Microsoft.OSTCExtensions

DSCForLinux

構成強制

Windows

DSC

Microsoft.Powershell

Microsoft.Powershell.DSC, DSC

ポリシー/コンプライアンス監査

Linux

ConfigurationForLinux

Microsoft.GuestConfiguration

AzurePolicyforLinux, ConfigurationForLinux

ポリシー/コンプライアンス監査

Windows

ConfigurationforWindows

Microsoft.GuestConfiguration

AzurePolicyforWindows, ConfigurationforWindows

監視エージェント

Linux

AzureMonitorLinuxAgent

Microsoft.Azure.Monitor

AzureMonitorLinuxAgent

監視エージェント

Windows

AzureMonitorWindowsAgent

Microsoft.Azure.Monitor

AzureMonitorWindowsAgent

監視エージェント(非推奨)

Linux

OmsAgentForLinux

Microsoft.EnterpriseCloud.Monitoring

OmsAgentForLinux, OMS.Linux

監視エージェント(非推奨)

Windows

MicrosoftMonitoringAgent

Microsoft.EnterpriseCloud.Monitoring

MicrosoftMonitoringAgent, MMAExtension

依存関係追跡

Linux

DependencyAgentLinux

Microsoft.Azure.Monitoring.DependencyAgent

DependencyAgentLinux, DAExtension

依存関係追跡

Windows

DependencyAgentWindows

Microsoft.Azure.Monitoring.DependencyAgent

DependencyAgentWindows, DAExtension

ネットワーク監視

Linux

NetworkWatcherAgentLinux

Microsoft.Azure.NetworkWatcher

AzureNetworkWatcherExtension, NetworkWatcherAgentLinux

ネットワーク監視

Windows

NetworkWatcherAgentWindows

Microsoft.Azure.NetworkWatcher

AzureNetworkWatcherExtension, NetworkWatcherAgentWindows

診断(非推奨)

Linux

LinuxDiagnostic

Microsoft.Azure.Diagnostics

LinuxDiagnostic

診断(非推奨)

Windows

IaaSDiagnostics

Microsoft.Azure.Diagnostics

Microsoft.Insights.VMDiagnosticsSettings, IaaSDiagnostics

VMバックアップスナップショット

Linux

VMSnapshotLinux

Microsoft.Azure.RecoveryServices

VMSnapshotLinux

VMバックアップスナップショット

Windows

VMSnapshot

Microsoft.Azure.RecoveryServices

VMSnapshot

マルウェア対策

Windows

IaaSAntimalware

Microsoft.Azure.Security

IaaSAntimalware

デスクトップ背景情報

Windows

BGInfo

Microsoft.Compute

BGInfo

GPUドライバー

Linux

NvidiaGpuDriverLinux

Microsoft.HpcCompute

NvidiaGpuDriverLinux

GPUドライバー

Windows

NvidiaGpuDriverWindows

Microsoft.HpcCompute

NvidiaGpuDriverWindows

クラウド検出と応答

翻訳元: https://webflow.sysdig.com/blog/the-expendable-extension-name-azure-vmaccess-naming-chaos-password-resets-and-a-detection-gap

ソース: webflow.sysdig.com