Az - Azure ネットワーク

Tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

基本情報

Azure は 仮想ネットワーク (VNet) を提供しており、ユーザは Azure クラウド内に 隔離された ネットワーク を作成できます。これらの VNet 内では、仮想マシン、アプリケーション、データベースなどのリソースを安全にホストおよび管理できます。Azure のネットワーキングはクラウド内(Azure サービス間)の通信と外部ネットワークやインターネットへの接続の両方をサポートします。
さらに、VNet を他の VNet やオンプレミス ネットワークと 接続 することも可能です。

Virtual Network (VNet) & サブネット

Azure Virtual Network (VNet) はクラウド上の自分のネットワークを表現するもので、サブスクリプションに紐付いた Azure 環境内で 論理的な分離 を提供します。VNet を使うことで、Azure 上に仮想プライベートネットワーク (VPN) をプロビジョニング・管理し、Virtual Machines (VMs)、データベース、アプリケーションサービスなどのリソースをホストできます。IP アドレス範囲、サブネット作成、ルートテーブル、ネットワークゲートウェイなどを含む ネットワーク設定の完全な制御 を提供します。

サブネット は VNet 内の細分化で、特定の IP アドレス範囲 によって定義されます。VNet を複数のサブネットに分割することで、ネットワークアーキテクチャに応じてリソースを整理・保護できます。
デフォルトでは、同一の Azure Virtual Network (VNet) 内のすべてのサブネットは制限なく 相互に通信可能 です。

Example:

  • MyVNet with an IP address range of 10.0.0.0/16.
  • Subnet-1: 10.0.0.0/24 for Web サーバー.
  • Subnet-2: 10.0.1.0/24 for データベースサーバー.

列挙

Azure アカウント内のすべての VNet とサブネットを一覧表示するには、Azure Command-Line Interface (CLI) を使用できます。手順は以下の通り:

# List VNets
az network vnet list --query "[].{name:name, location:location, addressSpace:addressSpace}"

# List subnets of a VNet
az network vnet subnet list --resource-group <ResourceGroupName> --vnet-name <VNetName> --query "[].{name:name, addressPrefix:addressPrefix}" -o table

ネットワーク セキュリティ グループ (NSG)

A Network Security Group (NSG) は、Azure Virtual Network (VNet) 内の Azure リソースへのおよびからのネットワークトラフィックをフィルタリングします。これは一連の セキュリティルール を保持しており、ソースポート、ソース IP、宛先ポートごとに インバウンドおよびアウトバウンドのどのポートを開くか を指定でき、優先度(数値が小さいほど優先度が高い)を割り当てることも可能です。

NSGs can be associated to サブネットおよび NICs.

ルール例:

  • 任意の送信元から Web サーバーへの HTTP トラフィック(port 80)を許可するインバウンドルール。
  • 特定の宛先 IP アドレス範囲への SQL トラフィック(port 1433)のみを許可するアウトバウンドルール。

列挙

# List NSGs
az network nsg list --query "[].{name:name, location:location}" -o table
az network nsg show --name <nsg-name>

# Get NSG rules
az network nsg rule list --nsg-name <NSGName> --resource-group <ResourceGroupName> --query "[].{name:name, priority:priority, direction:direction, access:access, protocol:protocol, sourceAddressPrefix:sourceAddressPrefix, destinationAddressPrefix:destinationAddressPrefix, sourcePortRange:sourcePortRange, destinationPortRange:destinationPortRange}" -o table

# Get NICs and subnets using this NSG
az network nsg show --name <NSGName> --resource-group <ResourceGroupName> --query "{subnets: subnets, networkInterfaces: networkInterfaces}"

Azure Firewall

Azure Firewall は マネージドでステートフルなファイアウォール で、east-west および north-south フローのトラフィック(L3–L7)をフィルタリングします。VNet レベルにデプロイされ、すべてのサブネットの検査を集中化し、可用性のために自動スケールします。

Available SKUs: Basic, Standard, and Premium:

Criteria/FeatureOption 1Option 2Option 3
Recommended Use Caseニーズが限定的な中小企業 (SMBs)一般的なエンタープライズ向け、Layer 3–7 フィルタリング高度に機密性の高い環境(例:決済処理)
Performance最大 250 Mbps スループット最大 30 Gbps スループット最大 100 Gbps スループット
Threat Intelligenceアラートのみアラートとブロック(悪意ある IP/ドメイン)アラートとブロック(高度な脅威インテリジェンス)
L3–L7 Filtering基本的なフィルタリングプロトコル横断のステートフルフィルタリング高度な検査を伴うステートフルフィルタリング
Advanced Threat Protection利用不可脅威インテリジェンスベースのフィルタリング侵入検知および防止システム (IDPS) を含む
TLS Inspection利用不可利用不可インバウンド/アウトバウンドの TLS 終端をサポート
Availability固定バックエンド(2 VMs)オートスケーリングオートスケーリング
Ease of Management基本的なコントロールFirewall Manager による管理Firewall Manager による管理

Enumeration

# List Azure Firewalls
az network firewall list --query "[].{name:name, location:location, subnet:subnet, publicIp:publicIp}" -o table

# Get network rules of a firewall
az network firewall network-rule collection list --firewall-name <FirewallName> --resource-group <ResourceGroupName> --query "[].{name:name, rules:rules}" -o table

# Get application rules of a firewall
az network firewall application-rule collection list --firewall-name <FirewallName> --resource-group <ResourceGroupName> --query "[].{name:name, rules:rules}" -o table

# Get nat rules of a firewall
az network firewall nat-rule collection list --firewall-name <FirewallName> --resource-group <ResourceGroupName> --query "[].{name:name, rules:rules}" -o table

Azure ルートテーブル (UDR)

Azure Route Tables (UDR) は、宛先プレフィックス(例: 10.0.0.0/160.0.0.0/0)とネクストホップ(Virtual Network, Internet, Virtual Network Gateway, または Virtual Appliance)を定義して、デフォルトのルーティングを上書きできます。

ルートはサブネット単位で適用されます。該当サブネット内のすべての VMs がそのテーブルに従います。

例:

  • インターネット方向のトラフィックには、デフォルトの 0.0.0.0/0 を使用し、ネクストホップを Internet にします。
  • アウトバウンドトラフィックを検査するには、0.0.0.0/0 を Network Virtual Appliance (NVA) の IP にルートします。

Enumeration

# List Route Tables
az network route-table list --query "[].{name:name, resourceGroup:resourceGroup, location:location}" -o table

# List routes for a table (summary)
az network route-table route list --resource-group <ResourceGroupName> --route-table-name <RouteTableName> --query "[].{name:name, addressPrefix:addressPrefix, nextHopType:nextHopType, nextHopIpAddress:nextHopIpAddress}" -o table

# List routes for a table (full)
az network route-table route list --resource-group <ResourceGroupName> --route-table-name <RouteTableName>

Azure Private Link は、Azure のサービスで、Azure services へのプライベートアクセスを可能にし、あなたの Azure virtual network (VNet) とサービス間のトラフィックが Microsoft の Azure バックボーンネットワーク内だけを通るようにするサービスです。実質的にサービスをあなたの VNet 内に取り込む形になります。この構成により、データがパブリックインターネットにさらされないためセキュリティが向上します。

Private Link は、Azure Storage、Azure SQL Database、Private Link を介して共有されるカスタムサービスなど、さまざまな Azure サービスで利用できます。自身の VNet 内から、あるいは別の Azure サブスクリプションからでもサービスを安全に利用する方法を提供します。

Caution

NSGs は private endpoints には適用されません。つまり、Private Link を含むサブネットに NSG を関連付けても効果はありません。

例:

自分の VNet から安全にアクセスしたい Azure SQL Database があるシナリオを考えてみてください。通常はパブリックインターネットを経由する可能性があります。Private Link を使うと、Azure SQL Database サービスに直接接続する VNet 内の private endpoint を作成できます。このエンドポイントにより、データベースはあたかも自分の VNet の一部であるかのように振る舞い、private IP アドレスでアクセスできるため、安全かつプライベートに利用できます。

列挙

# List Private Link Services
az network private-link-service list --query "[].{name:name, location:location, resourceGroup:resourceGroup}" -o table

# List Private Endpoints
az network private-endpoint list --query "[].{name:name, location:location, resourceGroup:resourceGroup, privateLinkServiceConnections:privateLinkServiceConnections}" -o table

When a VNet has a Virtual Network Link to a service Private DNS zone (e.g., privatelink.blob.core.windows.net), Azure forces hostname resolution for Private Link registered resources of that service type through the zone. If the zone lacks the required A record for a resource that workloads still access via its public endpoint, DNS resolution returns NXDOMAIN and clients never reach the public IP, causing an availability DoS without touching the resource itself.

悪用フロー(control-plane DoS):

  1. Private Endpoints を作成したり Private DNS zone links を変更したりできる RBAC を獲得する。
  2. 別の VNet に同じサービス種別の Private Endpoint を作成する(Azure が自動的に service Private DNS zone を作成し、それをその VNet にリンクする)。
  3. その service Private DNS zone を被害者の VNet にリンクする。
  4. 被害者の VNet は現在 forces resolution via the Private DNS zone になっており、そのゾーンに対象リソースの A レコードが存在しないため、名前解決が失敗し、ワークロードは(依然として公開されている)エンドポイントに到達できなくなる。これは Private Link–supported な任意のサービス(storage, Key Vault, ACR, Cosmos DB, Function Apps, OpenAI, など)に適用される。

大規模発見(Azure Resource Graph):

  • blob Private DNS zone にリンクされた VNETs(PL-registered blob endpoints に対する強制解決):
resources
| where type == "microsoft.network/privatednszones/virtualnetworklinks"
| extend
zone = tostring(split(id, "/virtualNetworkLinks")[0]),
vnetId = tostring(properties.virtualNetwork.id)
| join kind=inner (
resources
| where type == "microsoft.network/privatednszones"
| where name == "privatelink.blob.core.windows.net"
| project zoneId = id
) on $left.zone == $right.zoneId
| project vnetId
  • Storage accounts が public endpoint 経由で到達可能だが、Private Endpoint 接続がない(上のリンクを追加すると壊れる可能性があります):
Resources
| where type == "microsoft.storage/storageaccounts"
| extend publicNetworkAccess = properties.publicNetworkAccess
| extend defaultAction = properties.networkAcls.defaultAction
| extend vnetRules = properties.networkAcls.virtualNetworkRules
| extend ipRules = properties.networkAcls.ipRules
| extend privateEndpoints = properties.privateEndpointConnections
| where publicNetworkAccess == "Enabled"
| where defaultAction == "Deny"
| where (isnull(privateEndpoints) or array_length(privateEndpoints) == 0)
| extend allowedVnets = iif(isnull(vnetRules), 0, array_length(vnetRules))
| extend allowedIps = iif(isnull(ipRules), 0, array_length(ipRules))
| where allowedVnets > 0 or allowedIps > 0
| project id, name, vnetRules, ipRules

Azure Service Endpoints

Azure Service Endpoints は、仮想ネットワークのプライベートアドレス空間と VNet の識別情報を Azure サービスへ直接接続で拡張します。Service Endpoints を有効にすることで、VNet 内のリソースは Azure バックボーン ネットワークを介して Azure Storage や Azure SQL Database のような Azure サービスに安全に接続できます。これは、Network Security Groups (NSGs) と組み合わせて細かなトラフィック制御を行う場合に特に有用です。

例:

  • VNET 上で Storage アカウントと Service Endpoint が 有効 な場合、storage account firewall で VNET からのみ のインバウンドトラフィックを許可でき、ストレージサービスに対するパブリック IP アクセスを必要とせずに 安全な接続 を強制できます。

Service Endpoints はサービスに対して プライベート IP アドレスを必要としません。代わりに Azure バックボーンに依存して安全な接続を実現します。Private Links と比較して セットアップは簡単 ですが、Private Links が提供するのと 同等の分離性と粒度は提供しません

Enumeration

# List Virtual Networks with Service Endpoints
az network vnet list --query "[].{name:name, location:location, serviceEndpoints:serviceEndpoints}" -o table

# List Subnets with Service Endpoints
az network vnet subnet list --resource-group <ResourceGroupName> --vnet-name <VNetName> --query "[].{name:name, serviceEndpoints:serviceEndpoints}"

# List Service Endpoints for a Subnet
az network vnet subnet show --resource-group <ResourceGroupName> --vnet-name <VNetName> --name <SubnetName> --query "serviceEndpoints"

Microsoft は docs で Private Links の使用を推奨しています:

Service Endpoints:

  • VNet から Azure サービスへのトラフィックは Microsoft Azure のバックボーン ネットワーク上を移動し、パブリックインターネットを経由しません。
  • エンドポイントは Azure サービスへの直接接続であり、VNet 内でサービスに対するプライベート IP を提供しません。
  • サービス自体は、サービスのファイアウォールでそのようなトラフィックをブロックするように構成しない限り、VNet の外部からそのパブリックエンドポイント経由で引き続きアクセス可能です。
  • サブネットと Azure サービスの関係は一対一です。
  • Private Links よりコストが低いです。

Private Links:

  • Private Link は、VNet 内のプライベート IP を持つネットワークインターフェイスである private endpoint を介して Azure サービスを VNet にマップします。
  • Azure サービスはこのプライベート IP アドレスを使用してアクセスされるため、あたかもあなたのネットワークの一部であるかのように見えます。
  • Private Link 経由で接続されたサービスは、あなたの VNet または接続されたネットワークからのみアクセス可能であり、サービスへのパブリックインターネット経由のアクセスはありません。
  • Azure サービスや Azure 上でホストされている自分のサービスへの安全な接続、また他者と共有されたサービスへの接続を可能にします。
  • Service Endpoints のサブネットレベルでのより粗いアクセス制御と比べ、VNet 内の private endpoint を介してより細かいアクセス制御を提供します。

まとめると、Service Endpoints と Private Links の両方が Azure サービスへのセキュアな接続を提供しますが、Private Links はサービスをパブリックインターネットにさらすことなくプライベートにアクセスさせることで、より高い分離性とセキュリティを提供します。一方で Service Endpoints は、VNet 内にプライベート IP が不要で、一般的なケースで Azure サービスへの簡単かつセキュアなアクセスが必要な場合に設定が容易です。

Azure Front Door (AFD) & AFD WAF

Azure Front Door は、グローバルな web アプリケーションの fast delivery に向けた、スケーラブルでセキュアなエントリポイントです。これは application acceleration, SSL offloading, and application layer security(Web Application Firewall - WAF を通じて)などのさまざまなサービスを 組み合わせ ています。世界中の edge POP (Point of Presence) ロケーションの概念に基づき、アプリケーションをユーザーにより近づけます。

Azure Front Door は、グローバルに分散したエッジロケーションのネットワークを提供し、あなたの web アプリケーション(in Azure or elsewhere)への着信トラフィックを route and accelerate して、パフォーマンスを改善し、セキュリティを強化します。

例:

  • グローバルにユーザーがいる e-commerce プラットフォームの場合、Azure Front Door はエッジロケーションで静的コンテンツをキャッシュできSSL offloading を提供してレイテンシを低減し、より応答性の高いユーザー体験を実現します。さらに WAF により、SQL injection や XSS のような一般的な web 脆弱性からアプリケーションを保護します。

Azure Front Door はまた、ヘルスプローブとレイテンシに基づいてトラフィックを最も近い利用可能なバックエンドへルーティングすることで、smart load balancing を提供し、一貫したパフォーマンスと可用性を確保します。WAF を統合することで、一般的な web 脅威からの保護にも寄与します。

列挙

# List Azure Front Door profiles
az afd profile list --query "[].{name:name, location:location, resourceGroup:resourceGroup}" -o table

# List AFD endpoints
az afd endpoint list --profile-name <ProfileName> --resource-group <ResourceGroupName> --query "[].{name:name, hostName:hostName, state:resourceState}" -o table

# Classic Azure Front Door (v1) profiles
az network front-door list --query "[].{name:name, resourceGroup:resourceGroup, location:location}" -o table

# Classic Azure Front Door WAF policies
az network front-door waf-policy list --query "[].{name:name, resourceGroup:resourceGroup, location:location}" -o table

Azure Application Gateway and Azure Application Gateway WAF

Azure Application Gateway は、Web トラフィックのロードバランサーで、Web アプリケーションへのトラフィックを管理できるサービスです。アプリケーション配信コントローラ (ADC) として、Layer 7 のロードバランシング、SSL 終端、および web application firewall (WAF) 機能をサービスとして提供します。主な機能には、URL ベースのルーティング、クッキーによるセッションアフィニティ、secure sockets layer (SSL) のオフロードなどがあり、グローバルルーティングやパスベースのルーティングのような複雑な負荷分散機能を必要とするアプリケーションにとって重要です。

例:

例えば、ユーザーアカウントや決済処理など異なる機能ごとに複数のサブドメインを持つ e コマースサイトがあるとします。Azure Application Gateway は URL パスに基づいて適切なウェブサーバーへトラフィックをルーティングできます。例えば、example.com/accounts へのトラフィックはユーザーアカウントサービスへ、example.com/pay へのトラフィックは決済処理サービスへ振り分けることができます。
また、WAF 機能を使ってサイトを攻撃から保護できます。

列挙

# List the Web Application Firewall configurations for your Application Gateways
az network application-gateway waf-config list --gateway-name <AppGatewayName> --resource-group <ResourceGroupName> --query "[].{name:name, firewallMode:firewallMode, ruleSetType:ruleSetType, ruleSetVersion:ruleSetVersion}" -o table

VNet Peering & HUB and Spoke トポロジー

VNet Peering

VNet Peering は Azure の機能で、異なる仮想ネットワーク(VNets)を直接かつシームレスに接続できるようにします。VNet peering を通じて、ある VNet のリソースは別の VNet のリソースとプライベート IP アドレスを使って通信でき、まるで同じネットワークにあるかのように振る舞います
VNet Peering は、site-to-site VPN や Azure ExpressRoute を設定することでオンプレミスネットワークと併用することもできます。

Azure Hub and Spoke は VNet peering を活用して中央の Hub VNet を作り、複数の Spoke VNets に接続するネットワークアーキテクチャです。Hub には通常ファイアウォール、DNS、Active Directory などの共有サービスが配置され、Spoke はアプリケーションのワークロードをホストします。この設計により管理が簡素化され、中央集権的な制御によってセキュリティが向上し、冗長性が削減されます。

例:

複数の部門(Finance、HR、IT)を持つ大企業は、ファイアウォールや DNS サーバーのような共有サービスを備えた Hub VNet を作成できます。各部門はピアリングを通じて Hub に接続される 自身の Spoke VNet を持つことができ、部門間で安全に通信し共有サービスを利用できる一方で、リソースをパブリックインターネットにさらす必要がなくなります。

列挙

# List all VNets in your subscription
az network vnet list --query "[].{name:name, location:location, addressSpace:addressSpace}" -o table

# List VNet Peerings
az network vnet peering list --resource-group <ResourceGroupName> --vnet-name <VNetName> --query "[].{name:name, remoteVnetId:remoteVirtualNetwork.id, allowForwardedTraffic:allowForwardedTraffic, allowGatewayTransit:allowGatewayTransit}"

# List Shared Resources (e.g., Azure Firewall) in the Hub
az network firewall list --query "[].{name:name, location:location, resourceGroup:resourceGroup}" -o table

Site-to-Site VPN

A Site-to-Site VPN in Azure establishes a secure and オンプレミスのネットワークから Azure Virtual Network (VNet) への永続的な接続, enabling resources such as VMs within Azure to appear as if they are on your local network. This connection is established through a トラフィックを暗号化する VPN gateway between the two networks.

例:

ニューヨークに本社を置く企業が、仮想化されたワークロードをホストする Azure の VNet に安全に接続する必要があるオンプレミスのデータセンターを持っているとします。Site-to-Site VPN を設定することで、オンプレミスのサーバーと Azure VMs 間の通信を暗号化して接続を確保でき、両環境のリソースにまるで同一のローカルネットワーク上にあるかのように安全にアクセスできるようになります。

Enumeration

# List VPN Gateways
az network vnet-gateway list --query "[].{name:name, location:location, resourceGroup:resourceGroup}" -o table

# List VPN Connections
az network vpn-connection list --gateway-name <VpnGatewayName> --resource-group <ResourceGroupName> --query "[].{name:name, connectionType:connectionType, connectionStatus:connectionStatus}" -o table

Azure ExpressRoute

Azure ExpressRoute は、オンプレミスのインフラストラクチャと Azure のデータセンター間に対して、プライベートで専用の高速接続を提供するサービスです。この接続は接続プロバイダーを介して行われ、パブリックインターネットを経由しないため、通常のインターネット接続よりも信頼性が高く、速度が速く、レイテンシが低く、セキュリティが強化されます。

例:

多国籍企業は大量のデータと高いスループット要件のため、Azure サービスへの一貫して信頼性の高い接続を必要としています。同社はオンプレミスのデータセンターを直接 Azure に接続するために Azure ExpressRoute を選択し、日次バックアップやリアルタイムデータ分析などの大規模なデータ転送を、より高いプライバシーと速度で実現します。

列挙

# List ExpressRoute Circuits
az network express-route list --query "[].{name:name, location:location, resourceGroup:resourceGroup, serviceProviderName:serviceProviderName, peeringLocation:peeringLocation}" -o table

参考資料

Tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする