mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['', 'src/pentesting-cloud/azure-security/az-services/az-sql.
This commit is contained in:
@@ -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,你可以从自己 attacker‑controlled 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 user(username + 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
|
||||
|
||||
Reference in New Issue
Block a user