diff --git a/src/pentesting-cloud/azure-security/az-services/az-sql.md b/src/pentesting-cloud/azure-security/az-services/az-sql.md index 946f0b721..c6a337ba7 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-sql.md +++ b/src/pentesting-cloud/azure-security/az-services/az-sql.md @@ -4,45 +4,47 @@ ## Azure SQL -Azure SQL - це сімейство керованих, безпечних та інтелектуальних продуктів, які використовують **движок бази даних SQL Server в хмарі Azure**. Це означає, що вам не потрібно турбуватися про фізичне адміністрування ваших серверів, і ви можете зосередитися на управлінні вашими даними. +Azure SQL — це сімейство керованих, безпечних і інтелектуальних продуктів, які використовують **SQL Server database engine в Azure cloud**. Це означає, що вам не потрібно турбуватися про фізичне адміністрування ваших серверів, і ви можете зосередитися на керуванні вашими даними. Azure SQL складається з чотирьох основних пропозицій: -1. **Azure SQL Server**: Сервер потрібен для **розгортання та управління** базами даних SQL Server. -2. **Azure SQL Database**: Це **повністю керована служба бази даних**, яка дозволяє вам розміщувати окремі бази даних в хмарі Azure. -3. **Azure SQL Managed Instance**: Це для масштабних, повних розгортань SQL Server. -4. **Azure SQL Server на Azure VMs**: Це найкраще для архітектур, де ви хочете **контроль над операційною системою** та екземпляром SQL Server. +1. **Azure SQL Server**: Сервер потрібен для **розгортання та керування** SQL Server databases. +2. **Azure SQL Database**: Це **повністю керований database service**, який дозволяє розміщувати окремі databases в Azure cloud. +3. **Azure SQL Managed Instance**: Це для більших за масштабом розгортань у межах всього SQL Server instance-scoped. +4. **Azure SQL Server on Azure VMs**: Це найкраще для архітектур, де ви хочете **контроль над operating system **і SQL Server instance. ### SQL Server Security Features -**Доступ до мережі:** +**Network access:** -- Публічний кінцевий пункт (можна обмежити доступ до конкретних мереж). -- Приватні кінцеві пункти. -- Також можливо обмежити з'єднання на основі доменних імен. -- Також можливо дозволити службам Azure отримувати доступ (наприклад, для використання редактора запитів у порталі або для дозволу підключення Azure VM). +- Public endpoint (можна обмежити доступ до певних networks). +- Private endpoints. +- Також можна обмежити connections на основі domain names. +- Також можна дозволити Azure services доступатися до нього (наприклад, щоб використовувати Query editor у portal або дозволити Azure VM підключатися). +- Якщо в SQL Server для *Allow Azure services and resources to access this server* встановлено "Enabled", Azure автоматично створить приховане firewall rule, яке дозволяє весь network traffic, що походить з Azure, підключатися до SQL Server — включно з resources з будь-якого tenant. +- Це означає, що якщо ви отримаєте valid SQL credentials, ви можете підключитися до victim Azure SQL Server з Azure VM у вашому власному attacker‑controlled tenant. [The MS docs explains this](https://learn.microsoft.com/en-us/azure/azure-sql/database/network-access-controls-overview?view=azuresql#allow-azure-services) -**Методи аутентифікації:** +**Authentication Methods:** -- Аутентифікація **тільки для Microsoft Entra**: Вам потрібно вказати принципи Entra, які матимуть доступ до служби. -- **Аутентифікація як SQL, так і Microsoft Entra**: Традиційна SQL аутентифікація з ім'ям користувача та паролем разом з Microsoft Entra. -- **Тільки SQL** аутентифікація: Дозволяє доступ лише через користувачів бази даних. +- Microsoft **Entra-only** authentication: Вам потрібно вказати Entra principals, які матимуть доступ до service. +- **Both SQL and Microsoft Entra** authentication: Traditional SQL authentication з username and password разом із Microsoft Entra. +- **Only SQL** authentication: Дозволити доступ лише через database users. -Зверніть увагу, що якщо дозволена будь-яка SQL аутентифікація, потрібно вказати адміністративного користувача (ім'я користувача + пароль), а якщо вибрана аутентифікація Entra ID, також потрібно вказати принаймні одного принципа з адміністративним доступом. +Зверніть увагу, що якщо дозволено будь-який SQL auth, потрібно вказати admin user (username + password), а якщо вибрано Entra ID auth, також потрібно вказати щонайменше один principal з admin access. -**Шифрування:** +**Encryption:** -- Це називається "Прозоре шифрування даних" і шифрує бази даних, резервні копії та журнали в спокої. -- Як завжди, за замовчуванням використовується керований ключ Azure, але також може бути використаний ключ шифрування, керований клієнтом (CMEK). -**Керовані ідентичності:** +- Це називається “Transparent data encryption”, і воно encrypts databases, backups, and logs at rest. +- Як завжди, за замовчуванням використовується Azure managed key, але також можна використовувати customer managed encryption key (CMEK). +**Managed Identities:** -- Можливо призначити системні та користувацькі керовані MI. -- Використовується для доступу до ключа шифрування (якщо використовується CMEK) та інших служб з бази даних. -- Для деяких прикладів служб Azure, до яких можна отримати доступ з бази даних, перегляньте [цю сторінку документації](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-external-data-source-transact-sql) -- Якщо призначено більше ніж одну UMI, можливо вказати за замовчуванням ту, що потрібно використовувати. -- Можливо налаштувати федеративну клієнтську ідентичність для доступу між орендарями. +- Можна призначати system and user managed MIs. +- Використовується для доступу до encryption key (якщо використовується CMEK) та інших services з databases. +- Для деяких прикладів Azure services, до яких можна отримати доступ із database, перегляньте [this page of the docs](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-external-data-source-transact-sql) +- Якщо призначено більше ніж один UMI, можна вказати default one to use. +- Можна налаштувати federated client identity для cross-tenant access. -Деякі команди для доступу до інформації всередині блоб-сховища з бази даних SQL: +Some commands to access info inside a blob storage from a SQL database: ```sql -- Create a credential for the managed identity CREATE DATABASE SCOPED CREDENTIAL [ManagedIdentityCredential] @@ -69,59 +71,60 @@ GO ``` **Microsoft Defender:** -- Корисний для “зменшення потенційних вразливостей бази даних та виявлення аномальних активностей” -- Ми поговоримо про Defender в окремому уроці (його можна активувати в кількох інших службах Azure) +- Корисний для “mitigating potential database vulnerabilities, and detecting anomalous activities” +- Про Defender ми поговоримо в окремому уроці (його можна увімкнути в кількох інших Azure services) -**Резервні копії:** -- Частота резервного копіювання керується політиками зберігання. +**Backups:** +- Частота backup керується в retention policies. -**Видалені бази даних:** -- Можливо відновити БД, які були видалені з існуючих резервних копій. +**Deleted databases:** +- Можна restore DBs, які були deleted, з наявних backups. ## Azure SQL Database -**Azure SQL Database** є **повністю керованою платформою бази даних як послуга (PaaS)**, яка надає масштабовані та безпечні рішення реляційних баз даних. Вона побудована на останніх технологіях SQL Server і усуває потребу в управлінні інфраструктурою, що робить її популярним вибором для хмарних додатків. +**Azure SQL Database** — це **fully managed database platform as a service (PaaS)**, яка надає масштабовані та безпечні relational database рішення. Вона побудована на найновіших SQL Server technologies і усуває потребу в infrastructure management, що робить її популярним вибором для cloud-based applications. -Щоб створити SQL базу даних, потрібно вказати SQL сервер, на якому вона буде розміщена. +Щоб створити SQL database, потрібно вказати SQL server, на якому вона буде hosted. -### Функції безпеки SQL бази даних +### SQL Database Security Features -- **Завжди актуальна**: Працює на останній стабільній версії SQL Server і автоматично отримує нові функції та патчі. -- **Спадкові функції безпеки SQL Server:** -- Аутентифікація (SQL та/або Entra ID) -- Призначені керовані ідентичності -- Обмеження мережі -- Шифрування -- Резервні копії +- **Always Up-to-Date**: Працює на найновішій stable версії SQL Server і автоматично отримує нові features та patches. +- **Inherited SQL Server security features:** +- Authentication (SQL and/or Entra ID) +- Assigned Managed Identities +- Network restrictions +- Encryption +- Backups - … -- **Резервування даних:** Варіанти - локальне, зональне, гео або гео-зональне резервування. -- **Леджер:** Він криптографічно перевіряє цілісність даних, забезпечуючи виявлення будь-якого підроблення. Корисно для фінансових, медичних та будь-яких організацій, що управляють чутливими даними. +- **Data redundancy:** Опції: local, zone, Geo або Geo-Zone redundant. +- **Ledger:** Cryptographically verifies integrity of data, ensuring that any tampering is detected. Корисно для financial, medical і будь-якої organization, що керує sensitive data. -SQL база даних може бути частиною **еластичного пулу**. Еластичні пулу є економічно вигідним рішенням для управління кількома базами даних шляхом спільного використання налаштовуваних обчислювальних (eDTUs) та сховищ ресурсів між ними, з ціноутворенням, що базується виключно на виділених ресурсах, а не на кількості баз даних. -#### Azure SQL Безпека на рівні стовпців (Маскування) та Безпека на рівні рядків +SQL database може бути частиною **elastic Pool**. Elastic pools — це cost-effective рішення для керування кількома databases шляхом спільного використання configurable compute (eDTUs) і storage resources між ними, з pricing, що базується лише на allocated resources, а не на number of databases. -**Динамічне** маскування даних Azure SQL є функцією, яка допомагає **захистити чутливу інформацію, приховуючи її** від несанкціонованих користувачів. Замість того, щоб змінювати фактичні дані, вона динамічно маскує відображувані дані, забезпечуючи, щоб чутливі деталі, такі як номери кредитних карток, були приховані. +#### Azure SQL Column Level Security (Masking) & Row Level Security -**Динамічне маскування даних** впливає на всіх користувачів, крім тих, хто не підлягає маскуванню (ціх користувачів потрібно вказати) та адміністраторів. Є опція конфігурації, яка вказує, які SQL користувачі звільнені від динамічного маскування даних, при цьому **адміністратори завжди виключені**. +**Azure SQL's dynamic** data masking — це feature, яка допомагає **protect sensitive information by hiding it** від unauthorized users. Замість зміни actual data, вона динамічно masks displayed data, забезпечуючи, що sensitive details, як-от credit card numbers, приховані. -**Безпека на рівні рядків Azure SQL (RLS)** є функцією, яка **контролює, які рядки користувач може переглядати або змінювати**, забезпечуючи, щоб кожен користувач бачив лише дані, що стосуються його. Створюючи політики безпеки з предикатами фільтрації або блокування, організації можуть забезпечити детальний доступ на рівні бази даних. +**Dynamic Data Masking** affects to all users except the ones that are unmasked (these users need to be indicated) and administrators. It has the configuration option that specifies which SQL users are exempt from dynamic data masking, with **administrators always excluded**. -### Azure SQL Керовані екземпляри +**Azure SQL Row Level Security (RLS)** — це feature, яка **controls which rows a user can view or modify**, забезпечуючи, що кожен user бачить only the data relevant to them. Створюючи security policies з filter або block predicates, organizations можуть enforce fine-grained access на database level. -**Azure SQL Керовані екземпляри** призначені для масштабних, повних розгортань SQL Server. Вони забезпечують майже 100% сумісність з останнім SQL Server на місцях (Enterprise Edition) Database Engine, який надає рідну реалізацію віртуальної мережі (VNet), що вирішує поширені проблеми безпеки, та бізнес-модель, вигідну для клієнтів SQL Server на місцях. +### Azure SQL Managed Instance -### Azure SQL Віртуальні машини +**Azure SQL Managed Instances** призначені для larger scale, entire SQL Server instance-scoped deployments. Вони надають near 100% compatibility з latest SQL Server on-premises (Enterprise Edition) Database Engine, що provides native virtual network (VNet) implementation, яка addresses common security concerns, і business model, favorable for on-premises SQL Server customers. -**Azure SQL Віртуальні машини** дозволяють **контролювати операційну систему** та екземпляр SQL Server, оскільки ВМ буде запущена в службі ВМ, що працює на SQL сервері. +### Azure SQL Virtual Machines -Коли створюється SQL Віртуальна машина, можливо **вибрати всі налаштування ВМ** (як показано в уроці ВМ), які будуть хостити SQL сервер. -- Це означає, що ВМ буде отримувати доступ до деяких VNet(ів), може мати **прикріплені керовані ідентичності**, може мати змонтовані файлові спільноти… що робить **поворот з SQL** на ВМ дуже цікавим. -- Більше того, можливо налаштувати ідентифікатор програми та секрет для **дозволу SQL доступу до конкретного сховища ключів**, яке може містити чутливу інформацію. +**Azure SQL Virtual Machines** дозволяють **control the operating system** і SQL Server instance, оскільки VM буде spawn у VM service з running SQL server. -Також можливо налаштувати такі речі, як **автоматичні оновлення SQL**, **автоматичні резервні копії**, **аутентифікацію Entra ID** та більшість функцій інших служб SQL. +Коли створюється SQL Virtual Machine, можна **selected all the settings of the VM** (як показано в VM lesson), яка буде hosting SQL server. +- Це означає, що VM буде accessing some VNet(s), може мати до неї **Managed Identities attached**, може мати file shares mounted… що робить **pivoting from the SQL** до VM дуже цікавим. +- Крім того, можна configure app id and secret, щоб **allow the SQL to access an specific key vault**, який може містити sensitive info. -## Перерахування +Також можна configure такі речі, як **automatic SQL updates**, **automatic backups**, **Entra ID authentication** і більшість features інших SQL services. + +## Enumeration {{#tabs}} {{#tab name="az cli"}} @@ -258,7 +261,7 @@ Get-AzSqlVM {{#endtab}} {{#endtabs}} -Додатково, якщо ви хочете перерахувати Dynamic Data Masking та Row Level policies у базі даних, ви можете виконати запит: +Крім того, якщо ви хочете перерахувати Dynamic Data Masking і Row Level policies у межах database, ви можете виконати запит: ```sql --Enumerates the masked columns SELECT @@ -283,9 +286,9 @@ JOIN sys.security_predicates AS sp2 ON sp.object_id = sp2.object_id; ``` -### Підключення та виконання SQL запитів +### Підключення та виконання SQL-запитів -Ви можете знайти рядок підключення (що містить облікові дані) з прикладу [перерахування Az WebApp](az-app-services.md): +Ви можете знайти рядок підключення (що містить credentials) з прикладу [enumerating an Az WebApp](az-app-services.md): ```bash function invoke-sql{ param($query) @@ -304,7 +307,7 @@ $Connection.Close() invoke-sql 'Select Distinct TABLE_NAME From information_schema.TABLES;' ``` -Ви також можете використовувати sqlcmd для доступу до бази даних. Важливо знати, чи дозволяє сервер публічні з'єднання `az sql server show --name --resource-group `, а також чи дозволяє правило брандмауера нашій IP-адресі доступ: +Також можна використовувати sqlcmd для доступу до бази даних. Важливо знати, чи сервер дозволяє публічні з’єднання `az sql server show --name --resource-group `, а також чи правило firewall дозволяє нашій IP-адресі доступ: ```bash sqlcmd -S .database.windows.net -U -P -d ``` @@ -321,13 +324,13 @@ sqlcmd -S .database.windows.net -U -P