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

This commit is contained in:
Translator
2026-07-13 14:07:13 +00:00
parent 387422eb8a
commit dfe2ab4099
@@ -4,45 +4,47 @@
## Azure SQL
Azure SQLは、**Azureクラウド内のSQL Serverデータベースエンジン**を使用する管理された、安全で、インテリジェントな製品のファミリーです。これにより、サーバーの物理的な管理を心配する必要なく、データの管理に集中できます。
Azure SQL は、**Azure cloud の SQL Server database engine** を使用する、managed で secure、かつ intelligent な製品群です。つまり、サーバーの物理的な管理を気にする必要なく、データの管理に集中できます。
Azure SQLは、4つの主要な提供物で構成されています
Azure SQL には、主に次の 4 つの提供形態があります:
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 の **deployment と management** に必要な server です。
2. **Azure SQL Database**: これは **fully-managed database service** で、Azure cloud 上に個別の database を host できます。
3. **Azure SQL Managed Instance**: より大規模な、SQL Server instance スコープ全体の deployment 向けです。
4. **Azure SQL Server on Azure VMs**: **operating system** と SQL Server instance の両方を **control** したい architecture に最適です。
### SQL Server Security Features
**ネットワークアクセス:**
**Network access:**
- 公開エンドポイント(特定のネットワークへのアクセスを制限できます)。
- プライベートエンドポイント
- ドメイン名に基づいて接続を制限することも可能です。
- Azureサービスがアクセスできるようにすることも可能です(ポータル内のクエリエディタを使用するためや、Azure VMが接続できるようにするため)。
- Public endpoint(特定の network に access を制限可能)。
- Private endpoints
- domain names に基づいて connection を制限することも可能です。
- Azure services に access を許可することも可能です(portal の Query editor を使う場合や、Azure VM から connect させる場合など)。
- SQL Server で *Allow Azure services and resources to access this server* が "Enabled" に設定されている場合、Azure は Azure から発生するすべての network traffic が SQL Server に connect できるように、hidden firewall rule を自動的に作成します — これには任意の tenant の resource も含まれます。
- つまり、有効な SQL credentials を入手できれば、自分の attackercontrolled tenant 内の Azure VM から victim の Azure SQL Server に connect できます。 [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 への access を持つ Entra principals を指定する必要があります。
- **Both SQL and Microsoft Entra** authentication: Microsoft Entra と並行して、username と password を使う従来の SQL authentication です
- **Only SQL** authentication: database users 経由の access のみを許可します。
SQL認証が許可されている場合、管理者ユーザー(ユーザー名 + パスワード)を指定する必要があり、Entra ID認証が選択されている場合は、管理アクセスを持つ少なくとも1つのプリンシパルを指定する必要があります
SQL auth が許可されている場合は admin userusername + password)を指定する必要があり、Entra ID auth が選択されている場合は admin access を持つ principal を少なくとも 1 つ指定する必要がある点に注意してください
**暗号化:**
**Encryption:**
- 「透過的データ暗号化」と呼ばれ、データベース、バックアップ、およびログを静止状態で暗号化します。
- 常に、デフォルトでAzure管理キーが使用されますが、顧客管理暗号化キー(CMEKも使用できます。
**管理されたID:**
- これは “Transparent data encryption” と呼ばれ、database、backup、log を at rest で encrypt します。
- いつものように、既定では 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)を確認してください
- 1つ以上のUMIが割り当てられている場合、使用するデフォルトのUMIを指定することが可能です。
- クロステナントアクセスのために、フェデレーテッドクライアントIDを構成することが可能です。
- system managed MI と user managed MI を割り当てることが可能です。
- encryption keyCMEK が使用されている場合)や、database から他の service に access するために使用されます。
- database から access できる Azure services の例については [この docs のページ](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-external-data-source-transact-sql) を確認してください
- 複数の UMI が割り当てられている場合、使用する default のものを指定できます。
- cross-tenant access のために federated client identity を configure することが可能です。
SQLデータベースからBlobストレージ内の情報にアクセスするためのいくつかのコマンド:
SQL database から blob storage 内の info に access するためのいくつかの commands:
```sql
-- Create a credential for the managed identity
CREATE DATABASE SCOPED CREDENTIAL [ManagedIdentityCredential]
@@ -69,57 +71,58 @@ GO
```
**Microsoft Defender:**
- データベースの潜在的な脆弱性を軽減し、異常な活動を検出するのに役立ちます。
- Defenderについては別のレッスンで説明します(他のいくつかのAzureサービスで有効できます)
- “mitigating potential database vulnerabilities, and detecting anomalous activities” に有用
- Defender については別のレッスンで説明します(他の Azure サービスで有効できます)
**バックアップ:**
- バックアップの頻度は保持ポリシーで管理されます。
**Backups:**
- Backup frequency は retention policies で管理されます。
**削除されたデータベース:**
- 既存のバックアップから削除されたDBを復元することが可能です。
**Deleted databases:**
- 既存の backups から削除された DB を restore できます。
## Azure SQL Database
**Azure SQL Database**は、**完全に管理されたデータベースプラットフォームとしてのサービス (PaaS)** であり、スケーラブルで安全なリレーショナルデータベースソリューションを提供します。最新のSQL Server技術に基づいて構築されており、インフラ管理の必要がなく、クラウドベースのアプリケーションに人気の選択肢となっています。
**Azure SQL Database** 、スケーラブルで安全なリレーショナル database ソリューションを提供する、**fully managed database platform as a service (PaaS)** です。最新の SQL Server technologies 上に構築されており、infrastructure management が不要なため、cloud-based applications でよく使われます。
SQLデータベースを作成するには、ホストされるSQLサーバーを指定する必要があります。
SQL database を作成するには、ホストされる SQL server を指定する必要があります。
### SQL Database Security Features
- **常に最新**: 最新の安定版SQL Serverで実行され、新機能やパッチを自動的に受け取ります。
- **継承されたSQL Serverのセキュリティ機能:**
- 認証 (SQLおよび/またはEntra ID)
- 割り当てられたマネージドID
- ネットワーク制限
- 暗号化
- バックアップ
- **Always Up-to-Date**: 最新の安定版 SQL Server で動作し、新機能と 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:** データの整合性を暗号的に検証し、改ざんが検出されるようにします。financial、medical、その他 sensitive data を管理する organization に有用です。
SQLデータベースは**エラスティックプール**の一部である可能性があります。エラスティックプールは、複数のデータベースを管理するためのコスト効果の高いソリューションで、構成可能なコンピュート (eDTUs) とストレージリソースを共有し、価格はデータベースの数ではなく、割り当てられたリソースに基づいています。
SQL database は **elastic Pool** の一部にできます。Elastic pools は、設定可能な compute (eDTUs) と storage resources を複数の databases 間で共有することで、コスト効率よく管理するソリューションであり、pricing は databases の数ではなく割り当てられた resources のみに基づきます。
#### Azure SQL Column Level Security (Masking) & Row Level Security
**Azure SQLの動的**データマスキングは、**機密情報を保護する**ための機能で、無許可のユーザーから隠します。実際のデータを変更するのではなく、表示されるデータを動的にマスクし、クレジットカード番号などの機密情報が隠されることを保証します。
**Azure SQL's dynamic** data masking は、**機密情報を隠すことでそれを保護**する feature です。実際の data を変更する代わりに、表示される data を動的に mask し、credit card numbers のような sensitive details が見えないようにします。
**動的データマスキング**は、マスクされていないユーザー(これらのユーザーは指定する必要があります)と管理者を除くすべてのユーザーに影響します。動的データマスキングから免除されるSQLユーザーを指定する構成オプションがあり、**管理者は常に除外されます**
**Dynamic Data Masking** は、mask 解除済みの users(これらの users は明示する必要があります)と administrators を除くすべての users に影響します。どの SQL users を dynamic data masking の対象外にするかを指定する configuration option があり、**administrators は常に除外**されます。
**Azure SQL Row Level Security (RLS)**は、**ユーザーが表示または変更できるを制御する**機能で、各ユーザーが自分に関連するデータのみを表示できるようにします。フィルターまたはブロック述語を使用してセキュリティポリシーを作成することで、組織はデータベースレベルでの細かいアクセス制御を強制できます。
**Azure SQL Row Level Security (RLS)** は、**ユーザーがどの rows を view または modify できるを制御**し、各 user が自分に関連する data のみを見るようにする feature です。filter または block predicates を使った security policies を作成することで、organization は database level で細かな access control を適用できます。
### Azure SQL Managed Instance
**Azure SQL Managed Instances**は、大規模なSQL Serverインスタンススコープの展開向けです。最新のSQL Serverオンプレミス(Enterprise Edition)データベースエンジンとの互換性がほぼ100%で、一般的なセキュリティの懸念に対処するネイティブの仮想ネットワーク(VNet)実装を提供し、オンプレミスのSQL Server顧客にとって有利なビジネスモデルを提供します。
**Azure SQL Managed Instances** は、より大規模なSQL Server instance 全体にスコープされた deployments 向けです。最新の SQL Server on-premises (Enterprise Edition) Database Engine とほぼ 100% の compatibility を提供し、native virtual network (VNet) implementation により一般的な security concerns に対応し、on-premises SQL Server customers にとって有利な business model を提供します。
### Azure SQL Virtual Machines
**Azure SQL Virtual Machines**は、**オペレーティングシステム**とSQL Serverインスタンスを制御できるようにします。VMサービスでSQLサーバーを実行するVMが生成されます。
**Azure SQL Virtual Machines** では、**operating system** と SQL Server instance を**制御**できます。VM service 上で SQL server を実行する VM が spawn されるためです。
SQL仮想マシンが作成されると、SQLサーバーをホストするVMの**すべての設定を選択することが可能です**(VMレッスンに示されているように)
- これは、VMがいくつかのVNetにアクセスし、**マネージドIDが添付されている可能性があり、ファイル共有がマウントされる**ことを意味します… SQLからVMへの**ピボットが非常に興味深い**です。
- さらに、特定のキーコンテナにアクセスするためにSQLが**アプリIDとシークレットを構成する**ことも可能で、そこには機密情報が含まれている可能性があります。
SQL Virtual Machine を作成するとき、**VM lesson で示したように**、SQL server をホストする VM の**すべての settings を選択**できます
- つまり、その VM はいくつかの VNet にアクセスしていたり、**Managed Identities attached** されていたり、file shares が mounted されていたりする可能性があります… そのため、**SQL から VM への pivoting** は非常に興味深いです。
- さらに、app id と secret を設定して、**SQL が特定の key vault にアクセスすることを許可**できます。そこには sensitive info が含まれている可能性があります。
自動SQL更新、自動バックアップ、Entra ID認証、その他のSQLサービスのほとんどの機能などを構成することも可能です。
また、**automatic SQL updates**、**automatic backups**、**Entra ID authentication**、および他の SQL services の多くの features も設定できます。
## Enumeration
@@ -258,7 +261,7 @@ Get-AzSqlVM
{{#endtab}}
{{#endtabs}}
データベース内でダイナミックデータマスキングおよび行レベルポリシーを列挙したい場合は、次のクエリを実行できます:
さらに、データベース内で Dynamic Data Masking と Row Level policies を列挙したい場合は、次のようにクエリできます:
```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)から接続文字列(資格情報を含む)を見つけることができます
例として [enumerating an Az WebApp](az-app-services.md) から接続文字列(認証情報を含む)を見つけられる場合があります:
```bash
function invoke-sql{
param($query)
@@ -304,30 +307,30 @@ $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 を使ってデータベースにアクセスすることもできます。サーバーが 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)
- [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/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](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}}
### 永続性
### Persistence
{{#ref}}
../az-persistence/az-sql-persistence.md