Az - Azure 网络

Tip

学习并练习 AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

基本信息

Azure 提供 虚拟网络 (VNet),允许用户在 Azure 云中创建 隔离的 网络。在这些 VNet 中,像虚拟机、应用程序、数据库等资源可以被安全地托管和管理。Azure 的网络既支持云内(Azure 服务之间)的通信,也支持与外部网络和互联网的连接。
此外,可以将 VNets 与其他 VNets 以及本地 (on-premise) 网络互联。

虚拟网络 (VNET) 与 子网

Azure 虚拟网络 (VNet) 是你在云端网络的表示形式,为你的订阅专属的 Azure 环境提供 逻辑隔离。VNet 允许你在 Azure 中配置和管理虚拟私有网络 (VPN),承载诸如 虚拟机 (VMs)、数据库和应用服务 等资源。它们提供对网络设置的 完全控制,包括 IP 地址范围、子网创建、路由表和网络网关。

子网 是 VNet 内的划分单元,由特定的 IP 地址范围 定义。通过将 VNet 划分为多个子网,可以根据你的网络架构来组织和保护资源。
默认情况下,同一 Azure 虚拟网络 (VNet) 内的所有子网 可以相互通信,没有任何限制。

Example:

  • MyVNet 的 IP 地址范围为 10.0.0.0/16。
  • Subnet-1: 10.0.0.0/24 用于 web 服务器。
  • Subnet-2: 10.0.1.0/24 用于 数据库 服务器。

枚举

要列出 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)

一个 网络安全组 (NSG) 用于过滤位于 Azure Virtual Network (VNet) 内的 Azure 资源的进出网络流量。它包含一组 安全规则,可以基于源端口、源 IP、目标端口 指定 应为入站和出站流量打开哪些端口,并且可以为规则分配优先级(优先级数字越小,优先级越高)。

NSGs 可以关联到 子网和 NICs。

规则示例:

  • 一条入站规则,允许来自任意来源的 HTTP 流量(端口 80)到你的 Web 服务器。
  • 一条出站规则,仅允许到特定目标 IP 地址范围的 SQL 流量(端口 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 是一个 托管的、有状态的 firewall,用于过滤流量 (L3–L7) 的 east-west 和 north-south 流向。部署在 VNet level,它集中对所有子网进行检查并 auto-scales 以提高可用性。

Available SKUs: Basic, Standard, and Premium:

指标/功能选项 1选项 2选项 3
推荐使用场景需求有限的小/中型企业 (SMBs)通用企业使用,Layer 3–7 过滤高度敏感环境(例如支付处理)
性能最高 250 Mbps 吞吐量最高 30 Gbps 吞吐量最高 100 Gbps 吞吐量
威胁情报仅告警告警并阻断(恶意 IP/域名)告警并阻断(高级威胁情报)
L3–L7 过滤基本过滤跨协议的有状态过滤具备高级检测的有状态过滤
高级威胁防护不可用基于威胁情报的过滤包括 Intrusion Detection and Prevention System (IDPS)
TLS 检查不可用不可用支持入站/出站 TLS 终止
可用性固定后端(2 VMs)自动扩展自动扩展
易管理性基础控制通过 Firewall Manager 管理通过 Firewall Manager 管理

枚举

# 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 路由表

Azure Route Tables (UDR) 允许通过定义目标前缀(例如 10.0.0.0/160.0.0.0/0)和下一跳(Virtual Network, Internet, Virtual Network Gateway, or Virtual Appliance)来覆盖默认路由。

路由在子网级别应用;该子网中的所有 VMs 都遵循该表。

示例:

  • 对于面向互联网的流量,使用默认 0.0.0.0/0 并将下一跳设置为 Internet
  • 要检查出站流量,可将 0.0.0.0/0 路由到 Network Virtual Appliance (NVA) 的 IP。

枚举

# 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 服务启用私有访问,通过确保你的 Azure virtual network (VNet) 与该服务之间的流量完全在 Microsoft’s Azure backbone network 内部传输。它实际上将服务引入到你的 VNet 中。该设置通过不将数据暴露到公共互联网来增强安全性。

Private Link 可与多种 Azure 服务配合使用,例如 Azure Storage、Azure SQL Database,以及通过 Private Link 共享的自定义服务。它为在你自己的 VNet 内或甚至来自不同 Azure 订阅中使用这些服务提供了一种安全的方式。

Caution

NSGs 不适用于 private endpoints,这意味着将 NSG 关联到包含 Private Link 的子网不会产生任何效果。

示例:

设想一种场景:你有一个 Azure SQL Database,想从你的 VNet 安全访问。通常这可能需要经过公共互联网。使用 Private Link,你可以在你的 VNet 中创建一个 private endpoint,直接连接到 Azure SQL Database 服务。该 endpoint 会使数据库看起来像是你自己的 VNet 的一部分,可通过 private IP address 访问,从而确保安全和私密的访问。

枚举

# 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

当一个 VNet 对某个 service Private DNS zone(例如 privatelink.blob.core.windows.net)有 Virtual Network Link 时,Azure forces hostname resolution 将该服务类型的 Private Link 注册资源的主机名解析通过该 zone。如果该 zone 对于仍然通过其公共端点访问的资源缺少必要的 A record,DNS 解析会返回 NXDOMAIN,客户端永远到达不到公共 IP,从而在不接触资源本身的情况下造成availability DoS

Abuse flow (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 现在被强制通过 Private DNS zone 解析,而该 zone 中对目标资源不存在 A record,名称解析失败,工作负载无法到达(仍为公共的)端点。该情况适用于任何支持 Private Link 的服务(storage, Key Vault, ACR, Cosmos DB, Function Apps, OpenAI 等)。

Discovery at scale (Azure Resource Graph):

  • VNETs linked to the blob Private DNS zone (forced resolution for 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 connections (如果添加上面的链接可能会中断):
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 services,比如 Azure Storage 和 Azure SQL Database,通过 Azure 骨干网络。当与 Network Security Groups (NSGs) 结合以进行细粒度流量控制时,这一点尤其有用。

示例:

  • 如果在 VNET 中为 Storage Account 和 Service Endpoint 启用,就可以在 storage account firewall 中仅允许来自 VNET 的入站流量,从而强制通过 安全连接,而无需为 storage service 开放公共 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 recommends using Private Links in the docs:

Service Endpoints:

  • 从你的 VNet 到 Azure 服务的流量通过 Microsoft Azure 骨干网络传输,绕过公共互联网。
  • 该 endpoint 是与 Azure 服务的直接连接,但不会为服务在 VNet 内提供私有 IP。
  • 除非你配置服务的防火墙阻止此类流量,否则该服务仍可通过其公共端点从 VNet 外部访问。
  • 子网与 Azure 服务之间是一对一的关系。
  • 成本低于 Private Links。

Private Links:

  • Private Link 通过 private endpoint 将 Azure 服务映射到你的 VNet,private endpoint 是在 VNet 内具有私有 IP 地址的网络接口。
  • 通过该私有 IP 访问 Azure 服务,使其看起来像是你网络的一部分。
  • 通过 Private Link 连接的服务只能从你的 VNet 或已连接的网络访问;该服务无法通过公共互联网访问。
  • 它实现了与 Azure 服务或你在 Azure 上托管的自有服务的安全连接,以及与他人共享的服务的连接。
  • 它通过在 VNet 中的 private endpoint 提供更细粒度的访问控制,而不是像 Service Endpoints 那样在子网级别提供更宽泛的访问控制。

In summary, while both Service Endpoints and Private Links provide secure connectivity to Azure services, Private Links offer a higher level of isolation and security by ensuring that services are accessed privately without exposing them to the public internet. Service Endpoints, on the other hand, are easier to set up for general cases where simple, secure access to Azure services is required without the need for a private IP in the VNet.

Azure Front Door (AFD) & AFD WAF

Azure Front Door 是一个可扩展且安全的入口,用于全局 web 应用的快速交付。它结合了诸如 application acceleration、SSL offloading、和 application layer security(通过 Web Application Firewall - WAF) 等多种服务。它基于全球的 edge POP (Point of Presence) 节点,将你的应用更接近用户。

Azure Front Door provides a globally distributed network of edge locations to route and accelerate incoming traffic to your web applications (in Azure or elsewhere), improve performance, and enhance security.

Example:

  • 对于面向全球用户的电商平台,Azure Front Door 可以在边缘节点缓存静态内容 并提供 SSL offloading,从而减少延迟并提升响应速度。此外,它提供 WAF 来保护你的应用免受常见的网页漏洞(如 SQL injection 或 XSS)的攻击。

Azure Front Door 还通过基于健康探测和延迟将流量路由到最近的可用后端来提供 smart load balancing,以确保一致的性能和可用性。通过集成 WAF,它有助于防护常见的 web 威胁。

Enumeration

# 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 应用程序的流量。它在 Application Delivery Controller (ADC) 作为服务中提供 Layer 7 负载均衡、SSL 终止和 Web 应用防火墙 (WAF) 功能。主要功能包括基于 URL 的路由、基于 cookie 的会话亲和性,以及 secure sockets layer (SSL) 卸载,这些对于需要复杂负载均衡能力(例如全局路由和基于路径的路由)的应用非常关键。

示例:

设想一个场景:你有一个电子商务网站,包含多个子域以承担不同功能,例如用户账户和支付处理。Azure Application Gateway 可以 根据 URL 路径将流量路由到相应的 Web 服务器。例如,指向 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 的一项功能,允许不同的 Virtual Networks (VNets) 直接且无缝地相互连接。通过 VNet peering,某个 VNet 中的资源可以使用私有 IP 地址与另一个 VNet 中的资源通信,仿佛它们处于同一网络。
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。每个部门可以拥有自己的 Spoke VNet,并通过 peering 连接到 Hub。这样各部门就可以安全地通信并使用共享服务,而无需将其资源暴露到公共互联网。

Enumeration

# 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

站点到站点 VPN

在 Azure 中,站点到站点 VPN 建立了一条安全且持久的连接,从你的本地网络到你的 Azure Virtual Network (VNet),使得 Azure 内的资源(例如 VMs)看起来仿佛在你的本地网络上。该连接通过一个对两网络间流量进行加密的 VPN gateway来建立。

示例:

一家总部位于纽约的企业,其本地数据中心需要与托管虚拟化工作负载的 Azure VNet 建立安全连接。通过设置一个 站点到站点 VPN,公司可以确保本地服务器与 Azure VMs 之间的连接被加密,从而让两端的资源像在同一局域网内一样被安全访问。

枚举

# 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 ExpressRoute 将其本地数据中心直接连接到 Azure,以便进行大规模数据传输,例如每日备份和实时数据分析,同时提高隐私性和传输速度。

枚举

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

参考资料

Tip

学习并练习 AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks