15 KiB
Az - SQL
{{#include ../../../banners/hacktricks-training.md}}
Azure SQL
Azure SQL은 Azure 클라우드의 SQL Server 데이터베이스 엔진을 사용하는 관리형, 안전하고 지능적인 제품군입니다. 이는 서버의 물리적 관리에 대해 걱정할 필요가 없으며, 데이터 관리에 집중할 수 있음을 의미합니다.
Azure SQL은 세 가지 주요 제공 사항으로 구성됩니다:
- Azure SQL Database: 이는 완전 관리형 데이터베이스 서비스로, Azure 클라우드에서 개별 데이터베이스를 호스팅할 수 있습니다. 고유한 데이터베이스 패턴을 학습하고 맞춤형 추천 및 자동 조정을 제공하는 내장 지능을 제공합니다.
- Azure SQL Managed Instance: 이는 대규모 전체 SQL Server 인스턴스 범위 배포를 위한 것입니다. 최신 SQL Server 온프레미스(Enterprise Edition) 데이터베이스 엔진과 거의 100% 호환성을 제공하며, 일반적인 보안 문제를 해결하는 네이티브 가상 네트워크(VNet) 구현과 온프레미스 SQL Server 고객에게 유리한 비즈니스 모델을 제공합니다.
- Azure SQL Server on Azure VMs: 이는 서비스로서의 인프라(IaaS)이며, 온프레미스에서 실행되는 서버처럼 운영 체제 및 SQL Server 인스턴스에 대한 제어를 원하는 마이그레이션에 가장 적합합니다.
Azure SQL Database
Azure SQL Database는 **완전 관리형 데이터베이스 플랫폼으로서의 서비스(PaaS)**로, 확장 가능하고 안전한 관계형 데이터베이스 솔루션을 제공합니다. 최신 SQL Server 기술을 기반으로 하며, 인프라 관리의 필요성을 없애 클라우드 기반 애플리케이션에 인기 있는 선택이 됩니다.
주요 기능
- 항상 최신 상태: 최신 안정 버전의 SQL Server에서 실행되며, 새로운 기능과 패치를 자동으로 수신합니다.
- PaaS 기능: 내장된 고가용성, 백업 및 업데이트.
- 데이터 유연성: 관계형 및 비관계형 데이터(예: 그래프, JSON, 공간 및 XML)를 지원합니다.
구매 모델 / 서비스 계층
- vCore 기반: 컴퓨팅, 메모리 및 스토리지를 독립적으로 선택합니다. 일반 목적, 비즈니스 크리티컬(OLTP 앱에 대한 높은 복원력 및 성능) 및 최대 128TB 스토리지까지 확장 가능합니다.
- DTU 기반: 컴퓨팅, 메모리 및 I/O를 고정 계층으로 묶습니다. 일반 작업에 대한 균형 잡힌 리소스.
- 표준: 일반 작업에 대한 균형 잡힌 리소스.
- 프리미엄: 요구가 많은 작업에 대한 높은 성능.
배포 모델
Azure SQL Database는 다양한 요구에 맞는 유연한 배포 옵션을 지원합니다:
- 단일 데이터베이스:
- 전용 리소스를 가진 완전히 격리된 데이터베이스.
- 마이크로서비스 또는 단일 데이터 소스가 필요한 애플리케이션에 적합합니다.
- 탄력적 풀:
- 여러 데이터베이스가 풀 내에서 리소스를 공유할 수 있습니다.
- 여러 데이터베이스에 걸쳐 변동하는 사용 패턴을 가진 애플리케이션에 비용 효율적입니다.
확장 가능한 성능 및 풀
- 단일 데이터베이스: 각 데이터베이스는 격리되어 있으며 전용 컴퓨팅, 메모리 및 스토리지 리소스를 가집니다. 리소스는 다운타임 없이 동적으로(상향 또는 하향) 확장할 수 있습니다(1–128 vCores, 32GB–4TB 스토리지, 최대 128TB).
- 탄력적 풀: 여러 데이터베이스 간에 리소스를 공유하여 효율성을 극대화하고 비용을 절감합니다. 전체 풀에 대해 리소스도 동적으로 확장할 수 있습니다.
- 서비스 계층 유연성: 일반 목적 계층에서 단일 데이터베이스로 작게 시작합니다. 필요에 따라 비즈니스 크리티컬 또는 하이퍼스케일 계층으로 업그레이드합니다.
- 확장 옵션: 동적 확장 또는 자동 확장 대안.
내장 모니터링 및 최적화
- 쿼리 저장소: 성능 문제를 추적하고, 주요 리소스 소비자를 식별하며, 실행 가능한 추천을 제공합니다.
- 자동 조정: 자동 인덱싱 및 쿼리 계획 수정과 같은 기능으로 성능을 사전 최적화합니다.
- 텔레메트리 통합: Azure Monitor, Event Hubs 또는 Azure Storage를 통한 모니터링을 지원하여 맞춤형 통찰력을 제공합니다.
재해 복구 및 가용성
- 자동 백업: SQL Database는 데이터베이스의 전체, 차등 및 트랜잭션 로그 백업을 자동으로 수행합니다.
- 시점 복원: 백업 보존 기간 내의 과거 상태로 데이터베이스를 복구합니다.
- 지리적 중복성
- 페일오버 그룹: 지역 간 자동 페일오버를 위해 데이터베이스를 그룹화하여 재해 복구를 간소화합니다.
Azure SQL Managed Instance
Azure SQL Managed Instance는 SQL Server와 거의 100% 호환성을 제공하는 플랫폼으로서의 서비스(PaaS) 데이터베이스 엔진으로, 대부분의 관리 작업(예: 업그레이드, 패치, 백업, 모니터링)을 자동으로 처리합니다. 최소한의 변경으로 온프레미스 SQL Server 데이터베이스를 클라우드 솔루션으로 마이그레이션할 수 있습니다.
서비스 계층
- 일반 목적: 표준 I/O 및 대기 시간 요구 사항이 있는 애플리케이션을 위한 비용 효율적인 옵션입니다.
- 비즈니스 크리티컬: 중요한 작업을 위한 낮은 I/O 대기 시간을 가진 고성능 옵션입니다.
고급 보안 기능
- 위협 보호: 의심스러운 활동 및 SQL 인젝션 공격에 대한 고급 위협 보호 경고. 준수를 위한 데이터베이스 이벤트 추적 및 로깅을 위한 감사.
- 액세스 제어: 중앙 집중식 ID 관리를 위한 Microsoft Entra 인증. 세분화된 액세스 제어를 위한 행 수준 보안 및 동적 데이터 마스킹.
- 백업: 시점 복원 기능이 있는 자동 및 수동 백업.
Azure SQL Virtual Machines
Azure SQL Virtual Machines는 온프레미스에서 실행되는 서버처럼 운영 체제 및 SQL Server 인스턴스에 대한 제어를 원하는 마이그레이션에 가장 적합합니다. 다양한 머신 크기와 다양한 SQL Server 버전 및 에디션을 선택할 수 있습니다.
주요 기능
자동 백업: SQL 데이터베이스에 대한 백업 예약. 자동 패치: 유지 관리 창 동안 Windows 및 SQL Server 업데이트 설치를 자동화합니다. Azure Key Vault 통합: SQL Server VM에 대해 Key Vault를 자동으로 구성합니다. 클라우드 방어자 통합: 포털에서 SQL에 대한 Defender 추천을 확인합니다. 버전/에디션 유연성: VM을 재배포하지 않고 SQL Server 버전 또는 에디션 메타데이터를 변경합니다.
보안 기능
Microsoft Defender for SQL: 보안 통찰력 및 경고. Azure Key Vault 통합: 자격 증명 및 암호화 키의 안전한 저장. Microsoft Entra (Azure AD): 인증 및 액세스 제어.
Enumeration
{{#tabs}} {{#tab name="az cli"}}
# List Servers
az sql server list # --output table
## List Server Usages
az sql server list-usages --name <server_name> --resource-group <resource_group>
## List Server Firewalls
az sql server firewall-rule list --resource-group <resource_group> --server <server_name>
## List of Azure Active Directory administrators in a server.
az sql server ad-admin list --resource-group <resource_group> --server <server_name>
## Gets an advanced threat protection
az sql server advanced-threat-protection-setting show --resource-group <resource_group> --name <server_name>
## Get server's auditing policy.
az sql server audit-policy show --resource-group <resource_group> --name <server_name>
## Gets a server's secure connection policy.
az sql server conn-policy show --resource-group <resource_group> --server <server_name>
## Gets a list of server DNS aliases for a server.
az sql server dns-alias list --resource-group <resource_group> --server <server_name>
## List of server keys.
az sql server key list --resource-group <resource_group> --server <server_name>
## Gets a server encryption protector.
az sql server tde-key show --resource-group <resource_group> --server <server_name>
# List Databases in a SQL server
az sql db list --server <server_name> --resource-group <resource_group> #--output table
## Get details of a specific database
az sql db show --name <database_name> --server <server_name> --resource-group <resource_group>
## List database usages
az sql db list-usages --name <database_name> --server <server_name> --resource-group <resource_group>
## List of operations performed on the database.
az sql db op list --database <database_name> --server <server_name> --resource-group <resource_group>
## List sql database classification
az sql db classification list --name <database_name> --server <server_name> --resource-group <resource_group>
## List long-term retention backups for a SQL database
az sql db ltr-backup list --database <database_name> --server <server_name> --resource-group <resource_group>
## List long-term retention policy
az sql db ltr-policy --name <database_name> --server <server_name> --resource-group <resource_group>
## List long-term retention policy
az sql db str-policy --name <database_name> --server <server_name> --resource-group <resource_group>
## List the replicas of a database and their replication status
az sql db replica list-links --name <database_name> --server <server_name> --resource-group <resource_group>
## List deleted SQL databases
az sql db list-deleted --server <server_name> --resource-group <resource_group>
## List database usages
az sql db list-usages --name <database_name> --server <server_name> --resource-group <resource_group>
## List restorable dropped databases in a SQL server
az sql db list-deleted --server <server_name> --resource-group <resource_group>
## List advanced threat protection setting show
az sql db advanced-threat-protection-setting --name <database_name> --server <server_name> --resource-group <resource_group>
# List all elastic pools in a SQL server
az sql elastic-pool list --server <server_name> --resource-group <resource_group> #--output table
## List all databases in a specific elastic pool
az sql elastic-pool show --name <elastic_pool_name> --server <server_name> --resource-group <resource_group>
## List of databases in an elastic pool.
az sql elastic-pool list-dbs --name <elastic_pool_name> --server <server_name> --resource-group <resource_group>
# List all managed Instances
az sql mi list
az sql mi show --resource-group <res-grp> --name <name>
az sql midb list
az sql midb show --resource-group <res-grp> --name <name>
# Lis all sql VM
az sql vm list
az sql vm show --resource-group <res-grp> --name <name>
{{#endtab}}
{{#tab name="Az PowerShell"}}
# List Servers
Get-AzSqlServer -ResourceGroupName "<resource-group-name>"
# List All Databases in a SQL Server
Get-AzSqlDatabase -ServerName "<server_name>" -ResourceGroupName "<resource_group>"
# Get Details of a Specific Database
Get-AzSqlDatabase -Name "<database_name>" -ServerName "<server_name>" -ResourceGroupName "<resource_group>"
# List Operations Performed on the Database
Get-AzSqlDatabaseActivity -DatabaseName "<database_name>" -ServerName "<server_name>" -ResourceGroupName "<resource_group>"
# List SQL Database Classification
Get-AzSqlDatabaseSensitivityClassification -DatabaseName "<database_name>" -ServerName "<server_name>" -ResourceGroupName "<resource_group>"
# List Long-Term Retention Backups for a SQL Database
Get-AzSqlDatabaseLongTermRetentionBackup -ResourceGroupName "<resource_group>" -Location "<location>"
# List Replicas of a Database and Their Replication Status
Get-AzSqlDatabaseReplicationLink -DatabaseName "<database_name>" -ServerName "<server_name>" -ResourceGroupName "<resource_group>"
# List Deleted SQL Databases
Get-AzSqlDeletedDatabaseBackup -ServerName "<server_name>" -ResourceGroupName "<resource_group>"
# List All Elastic Pools in a SQL Server
Get-AzSqlElasticPool -ServerName "<server_name>" -ResourceGroupName "<resource_group>"
# List All Databases in a Specific Elastic Pool
Get-AzSqlElasticPoolDatabase -ElasticPoolName "<elastic_pool_name>" -ServerName "<server_name>" -ResourceGroupName "<resource_group>"
# List all managed Instances
Get-AzSqlInstance
Get-AzSqlInstance -ResourceGroupName <ResourceGroupName> -Name <ManagedInstanceName>
# List All Databases in a SQL Managed Instance
Get-AzSqlInstanceDatabase -ResourceGroupName <ResourceGroupName> -InstanceName <ManagedInstanceName>
# Lis all sql VM
Get-AzSqlVM
{{#endtab}} {{#endtabs}}
SQL 쿼리 연결 및 실행
예제 Az WebApp 열거하기에서 연결 문자열(자격 증명 포함)을 찾을 수 있습니다:
function invoke-sql{
param($query)
$Connection_string = "Server=tcp:supercorp.database.windows.net,1433;Initial Catalog=flag;Persist Security Info=False;User ID=db_read;Password=gAegH!324fAG!#1fht;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
$Connection = New-Object System.Data.SqlClient.SqlConnection $Connection_string
$Connection.Open()
$Command = New-Object System.Data.SqlClient.SqlCommand
$Command.Connection = $Connection
$Command.CommandText = $query
$Reader = $Command.ExecuteReader()
while ($Reader.Read()) {
$Reader.GetValue(0)
}
$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가 접근할 수 있도록 허용하는지도 확인해야 합니다:
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/database/single-database-overview?view=azuresql
- https://learn.microsoft.com/en-us/azure/azure-sql/managed-instance/sql-managed-instance-paas-overview?view=azuresql
- https://learn.microsoft.com/en-us/azure/azure-sql/virtual-machines/windows/sql-server-on-azure-vm-iaas-what-is-overview?view=azuresql
Privilege Escalation
{{#ref}} ../az-privilege-escalation/az-sql-privesc.md {{#endref}}
Post Exploitation
{{#ref}} ../az-post-exploitation/az-sql-post-exploitation.md {{#endref}}
{{#include ../../../banners/hacktricks-training.md}}