Translated ['', 'src/pentesting-cloud/azure-security/az-services/az-sql.

This commit is contained in:
Translator
2026-07-13 14:07:16 +00:00
parent a4814970ef
commit 5221306157
@@ -4,45 +4,47 @@
## Azure SQL
Azure SQL 是一系列托管、安全智能的产品,使用 **Azure 中的 SQL Server 数据库引擎**。这意味着不必担心服务器的物理管理,可以专注于管理的数据。
Azure SQL 是一托管、安全的、智能的产品,它们使用 **Azure cloud 中的 SQL Server database engine**。这意味着不必担心服务器的物理管理,可以专注于管理的数据。
Azure SQL 由四个主要产品组成:
Azure SQL 由四个主要服务组成:
1. **Azure SQL Server**需要一个服务器来进行 SQL Server 数据库的 **部署和管理**
2. **Azure SQL Database**:这是一个 **完全托管的数据库服务**允许您在 Azure 云中托管单个数据库
3. **Azure SQL Managed Instance**:适用于更大规模整个 SQL Server 实例范围的部署。
4. **Azure SQL Server on Azure VMs**:最适合希望 **控制操作系统** 和 SQL Server 实例的架构。
1. **Azure SQL Server**部署和管理 SQL Server databases 需要一个 server
2. **Azure SQL Database**:这是一个 **fully-managed database service**可让你在 Azure cloud 中托管单个 databases
3. **Azure SQL Managed Instance**:适用于更大规模整个 SQL Server instance 级别的部署。
4. **Azure SQL Server on Azure VMs**:最适合希望 **control over the operating system** 和 SQL Server instance 的架构。
### SQL Server 安全特性
### SQL Server Security Features
**网络访问:**
**Network access:**
- 公共端点(可限制访问特定网络)。
- 私有端点
- 也可以根据域名限制连接。
- 也可以允许 Azure 服务访问(例如使用门户中的查询编辑器或允许 Azure VM 连接)。
- Public endpoint(可限制对特定 networks 的访问)。
- Private endpoints
- 也可以根据 domain names 限制连接。
- 也可以允许 Azure services 访问(例如在 portal 中使用 Query editor或允许 Azure VM 连接)。
- 如果某个 SQL Server 将 *Allow Azure services and resources to access this server* 设置为 "Enabled"Azure 会自动创建一条隐藏的 firewall rule,允许所有来自 Azure 的 network traffic 连接到该 SQL Server —— 包括来自任何 tenant 的 resources。
- 这意味着如果你获得了有效的 SQL credentials,你可以从自己 attackercontrolled tenant 中的 Azure VM 连接到受害者的 Azure SQL Server。[MS docs 解释了这一点](https://learn.microsoft.com/en-us/azure/azure-sql/database/network-access-controls-overview?view=azuresql#allow-azure-services)
**身份验证方法:**
**Authentication Methods:**
- Microsoft **Entra-only** 身份验证:您需要指明将访问该服务的 Entra 主体
- **SQL Microsoft Entra** 身份验证:传统的 SQL 身份验证,使用用户名和密码以及 Microsoft Entra。
- ** SQL** 身份验证:仅允许通过数据库用户访问。
- Microsoft **Entra-only** authentication:你需要指定可以访问该 service 的 Entra principals
- **Both SQL and Microsoft Entra** authentication:传统的 SQL authentication,使用 username 和 password,并同时支持 Microsoft Entra。
- **Only SQL** authentication:仅允许通过 database users 访问。
注意,如果允许任何 SQL 身份验证,则需要指一个管理员用户(用户名 + 密码),如果选择 Entra ID 身份验证,则还需要指明至少一个具有管理员访问权限的主体
注意,如果允许任何 SQL auth,就需要指一个 admin userusername + password);如果选择 Entra ID auth,也需要至少指定一个具有 admin 访问权限的 principal
**加密:**
**Encryption:**
- 这被称为“透明数据加密”,它对数据库、备份和静态日志进行加密。
- 和往常一样,默认使用 Azure 托管密钥,但也可以使用客户管理的加密密钥(CMEK
**托管身份:**
- 它称为 “Transparent data encryption”,会对静态的 databases、backups 和 logs 进行加密。
- 一如既往,默认使用 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,可以指明要使用的默认 UMI
- 可以为跨租户访问配置联合客户端身份
- 可以分配 system 和 user managed MIs
- 用于访问 encryption key(如果使用 CMEK以及数据库中的其他 services
- 有关可从 database 访问的 Azure services 示例,请查看 [this page of the docs](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-external-data-source-transact-sql)
- 如果分配了多个 UMI,可以指定默认使用的那个
- 可以配置 federated client identity 以实现 cross-tenant access
一些从 SQL 数据库访问 blob 存储内部信息的命令:
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 服务中启用)
- 对于“缓解潜在数据库漏洞,以及检测异常活动”很有用
- 我们在单独的课程中讲解 Defender(它可以在其他多个 Azure 服务中启用)
**备份:**
- 备份频率在保留策略中管理。
**Backups:**
- Backup 频率由 retention policies 管理。
**已删除的数据库:**
- 可以从现有备份中恢复已删除的数据库
**Deleted databases:**
- 可以从现有 backups 中恢复已删除的 DBs
## Azure SQL 数据库
## Azure SQL Database
**Azure SQL 数据库** 是一个 **完全托管的数据库平台即服务 (PaaS)**,提供可扩展安全的关系数据库解决方案。它基于最新的 SQL Server 技术,消除了基础设施管理的需要,使其成为基于云的应用程序的热门选择。
**Azure SQL Database** 是一个**fully managed database platform as a service (PaaS)**,提供可扩展安全的关系数据库解决方案。它基于最新的 SQL Server technologies 构建,并消除了基础设施管理的需要,因此成为云端应用的热门选择。
要创建 SQL 数据库,需要指明将要托管的 SQL 服务器
要创建一个 SQL database,需要指定它将托管在哪个 SQL server 上
### SQL 数据库安全特性
### SQL Database Security Features
- **始终保持最新**运行在最新稳定版 SQL Server 上,并自动接收新功能和补丁。
- **继承的 SQL Server 安全特性:**
- 身份验证 (SQL 和/或 Entra ID)
- 分配的托管身份
- 网络限制
- 加密
- 备份
- **Always Up-to-Date**: 运行在最新稳定版 SQL Server 上,并自动接收新功能和补丁。
- **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:** 它通过加密方式验证数据完整性,确保任何篡改都能被检测到。对金融、医疗以及任何管理敏感数据的组织都很有用。
SQL 数据库可以是 **弹性池** 的一部分。弹性池是一种经济高效的解决方案,通过在多个数据库之间共享可配置的计算 (eDTUs) 和存储资源来管理多个数据库,定价仅基于分配的资源,而不是数据库的数量。
#### Azure SQL 列级安全 (掩码) 和行级安全
A SQL database 可以是 **elastic Pool** 的一部分。Elastic pools 是一种高性价比方案,通过在多个数据库之间共享可配置的 compute (eDTUs) 和 storage resources 来管理它们,且定价仅基于分配的 resources,而不是数据库数量。
**Azure SQL 的动态** 数据掩码是一项功能,帮助 **通过隐藏敏感信息****保护敏感信息**。它不是改变实际数据,而是动态掩盖显示的数据,确保像信用卡号码这样的敏感细节被遮蔽。
#### Azure SQL Column Level Security (Masking) & Row Level Security
**动态数据掩码** 影响所有用户,除了未被掩盖的用户(这些用户需要被指明)和管理员。它具有配置选项,指定哪些 SQL 用户免于动态数据掩码,**管理员始终被排除在外**
**Azure SQL's dynamic** data masking 是一项帮助**通过隐藏敏感信息来保护它**的功能,防止未授权用户查看。它不会更改实际数据,而是动态地对显示的数据进行 masking,确保信用卡号等敏感细节被遮蔽
**Azure SQL 行级安全 (RLS)** 是一项功能,**控制用户可以查看或修改哪些行**,确保每个用户仅看到与他们相关的数据。通过创建带有过滤或阻止谓词的安全策略,组织可以在数据库级别实施细粒度访问控制
**Dynamic Data Masking** 会影响除未被 masked 的用户(这些用户需要被指明)以及 administrators 之外的所有用户。它有一个配置选项,用于指定哪些 SQL users 不受 dynamic data masking 影响,且 **administrators 始终被排除在外**
### Azure SQL 托管实例
**Azure SQL Row Level Security (RLS)** 是一项**控制用户可以查看或修改哪些 rows** 的功能,确保每个用户只看到与自己相关的数据。通过创建带有 filter 或 block predicates 的 security policies,组织可以在 database 级别实施细粒度访问控制。
**Azure SQL 托管实例** 适用于更大规模的、整个 SQL Server 实例范围的部署。它提供与最新的 SQL Server 本地(企业版)数据库引擎近 100% 的兼容性,提供本地虚拟网络 (VNet) 实现,解决常见的安全问题,并为本地 SQL Server 客户提供有利的商业模式。
### Azure SQL Managed Instance
### Azure SQL 虚拟机
**Azure SQL Managed Instances** 适用于更大规模、整个 SQL Server instance-scoped 的部署。它提供与最新的 SQL Server on-premises (Enterprise Edition) Database Engine 几乎 100% 的兼容性,并提供原生 virtual network (VNet) 实现,以解决常见的安全问题,同时商业模式也更适合 on-premises SQL Server 客户。
**Azure SQL 虚拟机** 允许 **控制操作系统** 和 SQL Server 实例,因为虚拟机将在运行 SQL Server 的虚拟机服务中生成。
### Azure SQL Virtual Machines
创建 SQL 虚拟机时,可以 **选择虚拟机的所有设置**(如虚拟机课程中所示),这些设置将托管 SQL Server。
- 这意味着虚拟机将访问某些 VNet,可能会有 **附加的托管身份**,可以挂载文件共享……使得 **从 SQL 到虚拟机的跳板非常有趣**
- 此外,可以配置应用 ID 和密钥,以 **允许 SQL 访问特定的密钥保管库**,该保管库可能包含敏感信息。
**Azure SQL Virtual Machines** 允许**控制 operating system** 和 SQL Server instance,因为会在 VM service 中启动一台运行 SQL server 的 VM
还可以配置诸如 **自动 SQL 更新**、**自动备份**、**Entra ID 身份验证** 和其他 SQL 服务的大多数功能
创建 SQL Virtual Machine 时,可以**选择 VM 的所有设置**(如 VM 课程中所示),该 VM 将承载 SQL server
- 这意味着该 VM 将访问某些 VNet(s),可能已附加 **Managed Identities**,可能挂载了 file shares……这使得从 SQL 到 VM 的 **pivoting** 非常有趣。
- 此外,还可以配置 app id 和 secret,让 **SQL 访问特定的 key vault**,其中可能包含敏感信息。
## 枚举
也可以配置诸如 **automatic SQL updates**、**automatic backups**、**Entra ID authentication** 以及其他 SQL services 中的大多数功能。
## Enumeration
{{#tabs}}
{{#tab name="az cli"}}
@@ -258,7 +261,7 @@ Get-AzSqlVM
{{#endtab}}
{{#endtabs}}
此外,如果您想在数据库中枚举动态数据掩码和行级策略,可以查询:
此外,如果你想枚举数据库中的 Dynamic Data Masking 和 Row Level policies,你可以查询:
```sql
--Enumerates the masked columns
SELECT
@@ -285,7 +288,7 @@ ON sp.object_id = sp2.object_id;
```
### 连接并运行 SQL 查询
可以从示例 [枚举 Az WebApp](az-app-services.md) 中找到连接字符串(包含凭):
可以从示例 [enumerating an Az WebApp](az-app-services.md) 中找到一个连接字符串(包含凭):
```bash
function invoke-sql{
param($query)
@@ -304,11 +307,11 @@ $Connection.Close()
invoke-sql 'Select Distinct TABLE_NAME From information_schema.TABLES;'
```
您还可以使用 sqlcmd 访问数据库。了解服务器是否允许公共连接很重要 `az sql server show --name <server-name> --resource-group <resource-group>`,以及防火墙规则是否允许我们的 IP 访问:
You can also use sqlcmd to access the database. 了解服务器是否允许 public connections `az sql server show --name <server-name> --resource-group <resource-group>` 很重要,同时也要确认 firewall rule 是否允许我们的 IP 访问:
```bash
sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passworkd> -d <database>
```
## 参考文献
## References
- [https://learn.microsoft.com/en-us/azure/azure-sql/azure-sql-iaas-vs-paas-what-is-overview?view=azuresql](https://learn.microsoft.com/en-us/azure/azure-sql/azure-sql-iaas-vs-paas-what-is-overview?view=azuresql)
- [https://learn.microsoft.com/en-us/azure/azure-sql/database/single-database-overview?view=azuresql](https://learn.microsoft.com/en-us/azure/azure-sql/database/single-database-overview?view=azuresql)
@@ -321,13 +324,13 @@ sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passwork
../az-privilege-escalation/az-sql-privesc.md
{{#endref}}
## 后期利用
## 后渗透
{{#ref}}
../az-post-exploitation/az-sql-post-exploitation.md
{{#endref}}
### 持久
### 持久
{{#ref}}
../az-persistence/az-sql-persistence.md