Az - Azure Network

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks

Basic Information

Azure надає віртуальні мережі (VNet), що дозволяють користувачам створювати ізольовані мережі в межах Azure cloud. У цих VNet ресурси, такі як віртуальні машини, додатки, бази даних… можуть безпечно розміщуватися та керуватися. Мережеві можливості в Azure підтримують як внутрішню взаємодію в хмарі (між Azure services), так і підключення до зовнішніх мереж та інтернету.
Крім того, можливо підключати VNet до інших VNet та до локальних мереж (on-premise).

Virtual Network (VNET) & Subnets

Azure Virtual Network (VNet) — це уявлення вашої власної мережі в cloud, що забезпечує логічну ізоляцію в середовищі Azure, присвячену вашій підписці. VNets дозволяють створювати та керувати віртуальними приватними мережами (VPNs) в Azure, розміщуючи ресурси, такі як Virtual Machines (VMs), бази даних та application services. Вони дають повний контроль над налаштуваннями мережі, включно з діапазонами IP-адрес, створенням підмереж, маршрутними таблицями та мережевими шлюзами.

Subnets — це підрозділи всередині 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 servers.
  • Subnet-2: 10.0.1.0/24 for database servers.

Enumeration

Щоб перелічити всі VNet та підмережі в обліковому записі Azure, можна використовувати 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 в межах Azure Virtual Network (VNet). Вона містить набір правил безпеки, які можуть вказувати які порти відкривати для вхідного та вихідного трафіку за портом джерела, IP джерела, портом призначення, і можна призначити пріоритет (чим менший номер пріоритету, тим вищий пріоритет).

NSG можуть бути асоційовані з підмережами та NIC.

Приклади правил:

  • Вхідне правило, яке дозволяє HTTP-трафік (порт 80) з будь-якого джерела до ваших веб-серверів.
  • Вихідне правило, яке дозволяє лише SQL-трафік (порт 1433) до конкретного діапазону IP-адрес призначення.

Enumeration

# 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 — це керований файрвол зі збереженням стану, який фільтрує трафік (L3–L7) для потоків east-west та north-south. Розгорнутий на рівні VNet, він централізує інспекцію для всіх підмереж і автоматично масштабується для забезпечення доступності.

Доступні SKU: Basic, Standard, та 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

Перерахування

# 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 Таблиці маршрутів (UDR) дозволяють перевизначати маршрутизацію за замовчуванням, визначаючи префікси призначення (наприклад, 10.0.0.0/16 або 0.0.0.0/0) та наступний хоп (Віртуальна мережа, Інтернет, Віртуальний шлюз мережі або Віртуальний пристрій).

Маршрути застосовуються на рівні підмережі; всі VMs у цій підмережі слідують таблиці.

Приклад:

  • Для трафіку, спрямованого в Інтернет, використовуйте маршрут за замовчуванням 0.0.0.0/0 з Інтернетом як наступним хопом.
  • Щоб інспектувати вихідний трафік, направте 0.0.0.0/0 на IP-адресу Network Virtual Appliance (NVA).

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’s Azure backbone network. Фактично це інтегрує сервіс у ваш VNet. Така конфігурація підвищує безпеку, оскільки дані не потрапляють у публічний інтернет.

Private Link можна використовувати з різними Azure services, такими як Azure Storage, Azure SQL Database та custom services, shared via Private Link. Він надає безпечний спосіб споживати сервіси зсередини вашого власного VNet або навіть з різних Azure subscriptions.

Caution

NSGs do not apply to private endpoints, which clearly means that associating an NSG with a subnet that contains the Private Link will have no effect.

Example:

Розглянемо сценарій, де у вас є Azure SQL Database, до якої ви хочете безпечно підключатися з вашого VNet. Зазвичай це могло б вимагати проходження через публічний інтернет. За допомогою Private Link ви можете створити private endpoint у вашому VNet, який підключається безпосередньо до служби Azure SQL Database. Цей endpoint робить базу даних ніби частиною вашого VNet, доступною через private IP address, забезпечуючи тим самим безпечний і приватний доступ.

Enumeration

# 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 має Virtual Network Link до service Private DNS zone (наприклад, privatelink.blob.core.windows.net), Azure примушує вирішувати імена хостів для ресурсів, зареєстрованих через Private Link, цього типу сервісу через цю зону. Якщо в зоні відсутній необхідний A record для ресурсу, до якого робочі навантаження все ще звертаються через його публічну кінцеву точку, DNS-перетворення повертає NXDOMAIN, і клієнти ніколи не досягають публічної IP-адреси, спричиняючи availability DoS без безпосереднього торкання самого ресурсу.

Abuse flow (control-plane DoS):

  1. Отримати RBAC, який дозволяє створювати Private Endpoints або змінювати Private DNS zone links.
  2. Створити Private Endpoint для того ж типу сервісу в іншому VNet (Azure автоматично створює service Private DNS zone і зв’язує її з тим VNet).
  3. Зв’язати ту service Private DNS zone з постраждалим VNet.
  4. Оскільки постраждалий VNet тепер примушує вирішення через Private DNS zone, і в цій зоні не існує A record для цільового ресурсу, розв’язування імен не вдається, і навантаження не може дістатися до (все ще публічної) кінцевої точки. Це стосується будь-якого сервісу, що підтримує Private Link (storage, Key Vault, ACR, Cosmos DB, Function Apps, OpenAI тощо).

Discovery at scale (Azure Resource Graph):

  • VNETs, пов’язані з blob Private DNS zone (примусове вирішення для 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 services через пряме з’єднання. Увімкнувши Service Endpoints, ресурси у вашому VNet можуть безпечно підключатися до Azure services, таких як Azure Storage і Azure SQL Database, через магістральну мережу Azure. Це особливо корисно в поєднанні з Network Security Groups (NSGs) для детального контролю трафіку.

Приклад:

  • Якщо в VNET для Storage Account і Service Endpoint увімкнено, можна дозволити вхідний трафік тільки з VNET у межах фаєрволу storage account, забезпечуючи безпечне з’єднання без необхідності public IP-доступу до storage service.

Service Endpoints не вимагають приватних IP-адрес для сервісів і натомість покладаються на магістральну мережу Azure для безпечного з’єднання. Вони легші в налаштуванні порівняно з Private Links, але не забезпечують такого ж рівня ізоляції та детальності управління як Private Links.

Перерахування

# 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 рекомендує використовувати Private Links у docs:

Service Endpoints:

  • Трафік з вашого VNet до служби Azure проходить по магістральній мережі Microsoft Azure, оминаючи публічний інтернет.
  • Endpoint — це пряме з’єднання зі службою Azure і не надає приватної IP-адреси для служби всередині VNet.
  • Сама служба все ще доступна через свій публічний endpoint ззовні вашого VNet, якщо ви не налаштуєте брандмауер служби для блокування такого трафіку.
  • Відносини «один-до-одного» між підмережею та службою Azure.
  • Дешевше, ніж Private Links.

Private Links:

  • Private Link відображає служби Azure у вашому VNet через private endpoint, який є мережевим інтерфейсом з приватною IP-адресою всередині вашого VNet.
  • До служби Azure звертаються за цією приватною IP-адресою, що робить її подібною до частини вашої мережі.
  • Служби, підключені через Private Link, доступні лише з вашого VNet або підключених мереж; немає доступу через публічний інтернет.
  • Це дозволяє встановити безпечне з’єднання до служб Azure або до ваших власних служб, розміщених в Azure, а також до служб, якими діляться інші.
  • Надає більш детальний контроль доступу через private endpoint у вашому VNet, на відміну від ширшого контролю доступу на рівні підмережі з service endpoints.

Підсумовуючи, хоча і Service Endpoints, і Private Links забезпечують безпечне підключення до служб Azure, Private Links забезпечують вищий рівень ізоляції та безпеки, гарантуючи приватний доступ до служб без їхнього виставлення в публічний інтернет. Service Endpoints, з іншого боку, простіші у налаштуванні для загальних випадків, коли потрібен простий, безпечний доступ до служб Azure без необхідності приватної IP-адреси у VNet.

Azure Front Door (AFD) & AFD WAF

Azure Front Door — масштабований і безпечний вхідний пункт для швидкої доставки ваших глобальних веб-застосунків. Він об’єднує різні сервіси, такі як прискорення застосунків, SSL offloading та безпека на рівні додатку (через Web Application Firewall - WAF). Він побудований на концепції edge POP (Point of Presence) локацій по всьому світу, щоб наблизити ваші застосунки до користувачів.

Azure Front Door надає глобально розподілену мережу edge-локацій для маршрутизації та прискорення вхідного трафіку до ваших веб-застосунків (в Azure чи поза ним), покращує продуктивність та підвищує безпеку.

Приклад:

  • Для глобальної e-commerce платформи з користувачами по всьому світу, Azure Front Door може кешувати статичний контент на edge-локаціях та пропонувати SSL offloading, зменшуючи затримки та забезпечуючи більш відзивчивий досвід користувача. Додатково він надає WAF для захисту ваших застосунків від поширених веб-уразливостей (наприклад SQL injection або XSS).

Azure Front Door також пропонує інтелектуальне балансування навантаження, маршрутизуючи трафік до найближчого доступного бекенду на основі перевірок стану (health probes) та затримок, забезпечуючи стабільну продуктивність і доступність. Інтеграція WAF допомагає захиститися від поширених веб-загроз.

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 та Azure Application Gateway WAF

Azure Application Gateway — це балансувальник навантаження веб‑трафіку, який дає змогу керувати трафіком до ваших веб‑застосунків. Він пропонує Layer 7 load balancing, SSL termination, та web application firewall (WAF) в ролі сервісу Application Delivery Controller (ADC). Ключові можливості включають маршрутизацію на основі URL, прив’язку сесій на основі cookie та відвантаження secure sockets layer (SSL), що є критично важливим для застосунків, які потребують складних можливостей балансування навантаження, таких як глобальна маршрутизація та маршрутизація на основі шляхів.

Приклад:

Розгляньте сценарій, коли у вас є інтернет-магазин, який містить кілька піддоменів для різних функцій, наприклад облікових записів користувачів та обробки платежів. Azure Application Gateway може маршрутизувати трафік до відповідних веб‑серверів на основі URL‑шляху. Наприклад, трафік на example.com/accounts може бути спрямований до сервісу облікових записів користувачів, а трафік на example.com/pay — до сервісу обробки платежів.\ І захищати ваш вебсайт від атак за допомогою можливостей WAF.

Enumeration

# 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 можуть спілкуватися з ресурсами в іншому VNet, використовуючи приватні IP-адреси, ніби вони знаходяться в одній мережі.
VNet Peering також можна використовувати з on-prem мережами шляхом налаштування site-to-site VPN або Azure ExpressRoute.

Azure Hub and Spoke — це мережева архітектура, яка використовує VNet peering для створення центрального Hub VNet, що підключається до кількох Spoke VNets. У хабі зазвичай розміщуються спільні сервіси (наприклад, фаєрволи, DNS або Active Directory), тоді як Spoke VNets хостять робочі навантаження додатків. Такий дизайн спрощує управління, підвищує безпеку завдяки централізованому контролю та зменшує дублювання.

Приклад:

Велика організація з кількома відділами (Finance, HR, IT) може створити Hub VNet with shared services, наприклад фаєрволи та DNS-сервери. Кожен відділ може мати власний Spoke VNet, який підключається до Hub через peering. Це дозволяє відділам безпечно взаємодіяти та використовувати спільні сервіси без експонування своїх ресурсів у публічному інтернеті.

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

Site-to-Site VPN

Site-to-Site VPN в Azure встановлює захищене та постійне з’єднання між вашою on-premises мережею та вашою Azure Virtual Network (VNet), що дозволяє ресурсам, таким як VMs в Azure, виглядати так, ніби вони перебувають у вашій локальній мережі. Це з’єднання створюється через VPN gateway, який шифрує трафік між двома мережами.

Приклад:

Компанія з головним офісом у Нью-Йорку має on-premises дата-центр, який потрібно безпечно підключити до свого VNet в Azure, що розміщує її віртуалізовані робочі навантаження. Налаштувавши Site-to-Site VPN, компанія забезпечує шифроване з’єднання між on-premises серверами та 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 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) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks