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.md']
This commit is contained in:
@@ -6,11 +6,11 @@
|
||||
|
||||
Azure SQL은 **Azure 클라우드의 SQL Server 데이터베이스 엔진**을 사용하는 관리형, 안전하고 지능적인 제품군입니다. 이는 서버의 물리적 관리에 대해 걱정할 필요가 없으며, 데이터 관리에 집중할 수 있음을 의미합니다.
|
||||
|
||||
Azure SQL은 네 가지 주요 제공 사항으로 구성됩니다:
|
||||
Azure SQL은 네 가지 주요 제공 항목으로 구성됩니다:
|
||||
|
||||
1. **Azure SQL Server**: SQL Server 데이터베이스의 **배포 및 관리**를 위해 필요한 서버입니다.
|
||||
2. **Azure SQL Database**: Azure 클라우드에서 개별 데이터베이스를 호스팅할 수 있는 **완전 관리형 데이터베이스 서비스**입니다.
|
||||
3. **Azure SQL Managed Instance**: 대규모 전체 SQL Server 인스턴스 범위 배포를 위한 것입니다.
|
||||
3. **Azure SQL Managed Instance**: 더 큰 규모의 전체 SQL Server 인스턴스 범위 배포를 위한 것입니다.
|
||||
4. **Azure SQL Server on Azure VMs**: 운영 체제와 SQL Server 인스턴스에 대한 **제어**를 원하는 아키텍처에 가장 적합합니다.
|
||||
|
||||
### SQL Server 보안 기능
|
||||
@@ -19,28 +19,54 @@ Azure SQL은 네 가지 주요 제공 사항으로 구성됩니다:
|
||||
|
||||
- 공용 엔드포인트(특정 네트워크에 대한 접근 제한 가능).
|
||||
- 개인 엔드포인트.
|
||||
- 도메인 이름에 따라 연결을 제한할 수도 있습니다.
|
||||
- Azure 서비스가 접근할 수 있도록 허용할 수도 있습니다(예: 포털에서 쿼리 편집기를 사용하거나 Azure VM이 연결할 수 있도록 허용).
|
||||
- 도메인 이름에 따라 연결을 제한하는 것도 가능합니다.
|
||||
- Azure 서비스가 접근할 수 있도록 허용하는 것도 가능합니다(예: 포털에서 쿼리 편집기를 사용하거나 Azure VM이 연결하도록 허용).
|
||||
|
||||
**인증 방법:**
|
||||
|
||||
- Microsoft **Entra 전용** 인증: 서비스에 접근할 Entra 주체를 지정해야 합니다.
|
||||
- Microsoft **Entra-only** 인증: 서비스에 접근할 Entra 주체를 지정해야 합니다.
|
||||
- **SQL 및 Microsoft Entra** 인증: 사용자 이름과 비밀번호를 사용하는 전통적인 SQL 인증과 Microsoft Entra가 함께 사용됩니다.
|
||||
- **SQL 전용** 인증: 데이터베이스 사용자만을 통해 접근을 허용합니다.
|
||||
- **SQL만** 인증: 데이터베이스 사용자만을 통해 접근을 허용합니다.
|
||||
|
||||
SQL 인증이 허용되는 경우 관리 사용자(사용자 이름 + 비밀번호)를 지정해야 하며, Entra ID 인증이 선택된 경우 최소한 하나의 관리 접근 권한이 있는 주체를 지정해야 합니다.
|
||||
|
||||
**암호화:**
|
||||
|
||||
- "투명 데이터 암호화"라고 하며, 데이터베이스, 백업 및 로그를 정지 상태에서 암호화합니다.
|
||||
- 항상 기본적으로 Azure 관리 키가 사용되지만 고객 관리 암호화 키(CMEK)도 사용할 수 있습니다.
|
||||
- 항상 기본적으로 Azure 관리 키가 사용되지만, 고객 관리 암호화 키(CMEK)도 사용할 수 있습니다.
|
||||
**관리형 ID:**
|
||||
|
||||
- 시스템 및 사용자 관리 MI를 할당할 수 있습니다.
|
||||
- 암호화 키에 접근하는 데 사용됩니다(사용되는 경우 CMEK) 및 데이터베이스의 다른 서비스에 접근하는 데 사용됩니다.
|
||||
- 여러 UMI가 할당된 경우 사용할 기본 UMI를 지정할 수 있습니다.
|
||||
- 테넌트 간 접근을 위한 연합 클라이언트 ID를 구성할 수 있습니다.
|
||||
- 데이터베이스에서 접근할 수 있는 Azure 서비스의 몇 가지 예는 [이 문서 페이지](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-external-data-source-transact-sql)를 확인하세요.
|
||||
- 하나 이상의 UMI가 할당된 경우 사용할 기본 UMI를 지정할 수 있습니다.
|
||||
- 크로스 테넌트 접근을 위한 연합 클라이언트 ID를 구성할 수 있습니다.
|
||||
|
||||
SQL 데이터베이스에서 blob 저장소 내부의 정보에 접근하기 위한 몇 가지 명령:
|
||||
```sql
|
||||
-- Create a credential for the managed identity
|
||||
CREATE DATABASE SCOPED CREDENTIAL [ManagedIdentityCredential]
|
||||
WITH IDENTITY = 'Managed Identity';
|
||||
GO
|
||||
|
||||
-- Create an external data source pointing to the blob storage to access
|
||||
CREATE EXTERNAL DATA SOURCE ManagedIdentity
|
||||
WITH (
|
||||
TYPE = BLOB_STORAGE,
|
||||
LOCATION = 'https://testsqlidentity.blob.core.windows.net/sqlcontainer',
|
||||
CREDENTIAL = ManagedIdentityCredential
|
||||
);
|
||||
GO
|
||||
|
||||
-- Read a file from ths storage and return it
|
||||
SELECT *
|
||||
FROM OPENROWSET(
|
||||
BULK 'message.txt',
|
||||
DATA_SOURCE = 'ManagedIdentity',
|
||||
SINGLE_CLOB
|
||||
) AS DataFile;
|
||||
GO
|
||||
```
|
||||
**Microsoft Defender:**
|
||||
|
||||
- "잠재적인 데이터베이스 취약점을 완화하고 비정상적인 활동을 감지하는 데 유용합니다."
|
||||
@@ -54,16 +80,16 @@ SQL 인증이 허용되는 경우 관리 사용자(사용자 이름 + 비밀번
|
||||
|
||||
## Azure SQL Database
|
||||
|
||||
**Azure SQL Database**는 확장 가능하고 안전한 관계형 데이터베이스 솔루션을 제공하는 **완전 관리형 데이터베이스 플랫폼 서비스(PaaS)**입니다. 최신 SQL Server 기술을 기반으로 하며 인프라 관리의 필요성을 없애 클라우드 기반 애플리케이션에 인기 있는 선택입니다.
|
||||
**Azure SQL Database**는 **완전 관리형 데이터베이스 플랫폼 서비스(PaaS)**로, 확장 가능하고 안전한 관계형 데이터베이스 솔루션을 제공합니다. 최신 SQL Server 기술을 기반으로 하며 인프라 관리의 필요성을 없애, 클라우드 기반 애플리케이션에 인기 있는 선택입니다.
|
||||
|
||||
SQL 데이터베이스를 생성하려면 호스팅될 SQL 서버를 지정해야 합니다.
|
||||
|
||||
### SQL 데이터베이스 보안 기능
|
||||
|
||||
- **항상 최신 상태**: 최신 안정 버전의 SQL Server에서 실행되며 새로운 기능과 패치를 자동으로 받습니다.
|
||||
- **항상 최신 상태**: 최신 안정 버전의 SQL Server에서 실행되며 새로운 기능과 패치를 자동으로 수신합니다.
|
||||
- **상속된 SQL Server 보안 기능:**
|
||||
- 인증(SQL 및/또는 Entra ID)
|
||||
- 할당된 관리형 ID
|
||||
- 인증(SQ 및/또는 Entra ID)
|
||||
- 할당된 관리 ID
|
||||
- 네트워크 제한
|
||||
- 암호화
|
||||
- 백업
|
||||
@@ -75,27 +101,27 @@ SQL 데이터베이스는 **탄력적 풀**의 일부가 될 수 있습니다.
|
||||
|
||||
#### Azure SQL 열 수준 보안(마스킹) 및 행 수준 보안
|
||||
|
||||
**Azure SQL의 동적** 데이터 마스킹은 **민감한 정보를 보호하기 위해** 무단 사용자로부터 숨기는 기능입니다. 실제 데이터를 변경하는 대신 표시된 데이터를 동적으로 마스킹하여 신용 카드 번호와 같은 민감한 세부 정보가 가려지도록 합니다.
|
||||
**Azure SQL의 동적** 데이터 마스킹은 **민감한 정보를 보호하기 위해** 무단 사용자로부터 숨기는 기능입니다. 실제 데이터를 변경하는 대신, 표시된 데이터를 동적으로 마스킹하여 신용 카드 번호와 같은 민감한 세부 정보가 가려지도록 합니다.
|
||||
|
||||
**동적 데이터 마스킹**은 마스킹되지 않은 사용자(이 사용자들은 지정되어야 함)와 관리자를 제외한 모든 사용자에게 영향을 미칩니다. 동적 데이터 마스킹에서 면제되는 SQL 사용자를 지정하는 구성 옵션이 있으며, **관리자는 항상 제외됩니다**.
|
||||
|
||||
**Azure SQL 행 수준 보안(RLS)**은 **사용자가 볼 수 있거나 수정할 수 있는 행을 제어하는 기능**으로, 각 사용자가 자신과 관련된 데이터만 볼 수 있도록 보장합니다. 필터 또는 차단 조건으로 보안 정책을 생성함으로써 조직은 데이터베이스 수준에서 세밀한 접근을 시행할 수 있습니다.
|
||||
**Azure SQL 행 수준 보안(RLS)**은 **사용자가 볼 수 있거나 수정할 수 있는 행을 제어하는 기능**으로, 각 사용자가 자신과 관련된 데이터만 볼 수 있도록 보장합니다. 필터 또는 차단 술어로 보안 정책을 생성함으로써 조직은 데이터베이스 수준에서 세밀한 접근을 시행할 수 있습니다.
|
||||
|
||||
### Azure SQL Managed Instance
|
||||
### Azure SQL 관리 인스턴스
|
||||
|
||||
**Azure SQL Managed Instances**는 대규모 전체 SQL Server 인스턴스 범위 배포를 위한 것입니다. 최신 SQL Server 온프레미스(Enterprise Edition) 데이터베이스 엔진과 거의 100% 호환성을 제공하며, 일반적인 보안 문제를 해결하는 네이티브 가상 네트워크(VNet) 구현과 온프레미스 SQL Server 고객에게 유리한 비즈니스 모델을 제공합니다.
|
||||
**Azure SQL 관리 인스턴스**는 대규모 전체 SQL Server 인스턴스 범위 배포를 위한 것입니다. 최신 SQL Server 온프레미스(Enterprise Edition) 데이터베이스 엔진과 거의 100% 호환성을 제공하며, 일반적인 보안 문제를 해결하는 네이티브 가상 네트워크(VNet) 구현과 온프레미스 SQL Server 고객에게 유리한 비즈니스 모델을 제공합니다.
|
||||
|
||||
### Azure SQL 가상 머신
|
||||
|
||||
**Azure SQL Virtual Machines**는 **운영 체제를 제어**하고 SQL Server 인스턴스를 관리할 수 있게 해주며, SQL 서버를 실행하는 VM 서비스에서 VM이 생성됩니다.
|
||||
**Azure SQL 가상 머신**은 **운영 체제**와 SQL Server 인스턴스를 **제어할 수 있게 해줍니다**, SQL 서버를 실행하는 VM 서비스에서 VM이 생성됩니다.
|
||||
|
||||
SQL 가상 머신이 생성될 때 SQL 서버를 호스팅할 VM의 **모든 설정을 선택할 수 있습니다**(VM 수업에서 보여준 대로).
|
||||
- 이는 VM이 일부 VNet에 접근하고, **관리형 ID가 연결**될 수 있으며, 파일 공유가 마운트될 수 있음을 의미합니다… SQL에서 VM으로의 **피벗이 매우 흥미롭습니다**.
|
||||
- 또한 SQL이 특정 키 볼트에 접근할 수 있도록 **앱 ID 및 비밀을 구성**할 수 있으며, 이 키 볼트는 민감한 정보를 포함할 수 있습니다.
|
||||
SQL 가상 머신이 생성될 때 SQL 서버를 호스팅할 VM의 모든 설정을 **선택할 수 있습니다**(VM 수업에서 보여준 대로).
|
||||
- 이는 VM이 일부 VNet에 접근하고, **관리 ID가 연결**될 수 있으며, 파일 공유가 마운트될 수 있음을 의미합니다… SQL에서 VM으로의 **피벗이 매우 흥미롭습니다**.
|
||||
- 또한, SQL이 특정 키 볼트에 접근할 수 있도록 **앱 ID 및 비밀을 구성**할 수 있으며, 이 키 볼트에는 민감한 정보가 포함될 수 있습니다.
|
||||
|
||||
자동 SQL 업데이트, 자동 백업, Entra ID 인증 및 다른 SQL 서비스의 대부분 기능과 같은 것들을 구성할 수도 있습니다.
|
||||
|
||||
## Enumeration
|
||||
## 열거
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="az cli"}}
|
||||
@@ -232,7 +258,7 @@ Get-AzSqlVM
|
||||
{{#endtab}}
|
||||
{{#endtabs}}
|
||||
|
||||
추가적으로 데이터베이스 내에서 Dynamic Data Masking 및 Row Level 정책을 열거하려면, 다음 쿼리를 사용할 수 있습니다:
|
||||
추가로 데이터베이스 내에서 Dynamic Data Masking 및 Row Level 정책을 열거하고 싶다면, 다음과 같이 쿼리할 수 있습니다:
|
||||
```sql
|
||||
--Enumerates the masked columns
|
||||
SELECT
|
||||
@@ -278,7 +304,7 @@ $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를 사용할 수도 있습니다. 서버가 공용 연결을 허용하는지 아는 것이 중요합니다 `az sql server show --name <server-name> --resource-group <resource-group>` 그리고 방화벽 규칙이 우리의 IP가 접근할 수 있도록 허용하는지도 확인해야 합니다:
|
||||
```bash
|
||||
sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passworkd> -d <database>
|
||||
```
|
||||
@@ -304,7 +330,7 @@ sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passwork
|
||||
### Persistence
|
||||
|
||||
{{#ref}}
|
||||
../az-persistence/az-sql-persistance.md
|
||||
../az-persistence/az-sql-persistence.md
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user