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,47 +4,47 @@
|
||||
|
||||
## Azure SQL
|
||||
|
||||
Azure SQL is ’n familie van bestuurde, veilige en intelligente produkte wat die **SQL Server database engine in the Azure cloud** gebruik. Dit beteken jy hoef jou nie oor die fisiese administrasie van jou servers te bekommer nie, en jy kan fokus op die bestuur van jou data.
|
||||
Azure SQL is 'n familie van bestuurde, veilige en intelligente produkte wat die **SQL Server-databasis-enjin in die Azure-wolk** gebruik. Dit beteken jy hoef nie oor die fisiese administrasie van jou servers bekommerd te wees nie, en jy kan daarop fokus om jou data te bestuur.
|
||||
|
||||
Azure SQL bestaan uit vier hoofaanbiedinge:
|
||||
|
||||
1. **Azure SQL Server**: ’n server is nodig vir die **deployment and management** van SQL Server databases.
|
||||
2. **Azure SQL Database**: Dit is ’n **volledig-bestuurde database service**, wat jou toelaat om individuele databases in die Azure cloud te host.
|
||||
3. **Azure SQL Managed Instance**: Dit is vir groter skaal, volledige SQL Server instance-scoped deployments.
|
||||
4. **Azure SQL Server on Azure VMs**: Dit is die beste vir architectures waar jy **control over the operating system **en SQL Server instance wil hê.
|
||||
1. **Azure SQL Server**: 'n Server is nodig vir die **ontplooiing en bestuur** van SQL Server-databasisse.
|
||||
2. **Azure SQL Database**: Dit is 'n **volledig bestuurde databasisdiens**, wat jou toelaat om individuele databasisse in die Azure-wolk te huisves.
|
||||
3. **Azure SQL Managed Instance**: Dit is vir groter-skaal, volledige SQL Server-instansie-gebaseerde ontplooiings.
|
||||
4. **Azure SQL Server on Azure VMs**: Dit is die beste vir argitekture waar jy **beheer oor die bedryfstelsel **en SQL Server-instansie wil hê.
|
||||
|
||||
### SQL Server Security Features
|
||||
|
||||
**Network access:**
|
||||
**Netwerktoegang:**
|
||||
|
||||
- Public endpoint (kan toegang beperk tot spesifieke networks).
|
||||
- Public endpoint (kan toegang tot spesifieke netwerke beperk).
|
||||
- Private endpoints.
|
||||
- Dit is ook moontlik om connections te beperk op grond van domain names.
|
||||
- Dit is ook moontlik om Azure services toe te laat om daartoe toegang te verkry (soos om die Query editor in die portal te gebruik of om ’n Azure VM toe te laat om te connect).
|
||||
- As ’n SQL Server *Allow Azure services and resources to access this server* op "Enabled" gestel het, sal Azure outomaties ’n hidden firewall rule skep wat alle network traffic van Azure af toelaat om aan die SQL Server te connect — insluitend resources van enige tenant.
|
||||
- Dit beteken dat as jy geldige SQL credentials verkry, jy vanaf ’n Azure VM binne jou eie attacker‑controlled tenant aan die victim Azure SQL Server kan connect. [The MS docs explains this](https://learn.microsoft.com/en-us/azure/azure-sql/database/network-access-controls-overview?view=azuresql#allow-azure-services)
|
||||
- Dit is ook moontlik om verbindings op grond van domeinname te beperk.
|
||||
- Dit is ook moontlik om Azure-dienste toe te laat om toegang daartoe te verkry (soos om die Query editor in die portaal te gebruik of om 'n Azure VM toe te laat om te verbind).
|
||||
- Indien 'n SQL Server *Allow Azure services and resources to access this server* op "Enabled" gestel is, sal Azure outomaties 'n verborge firewall-reël skep wat alle netwerkverkeer wat vanaf Azure afkomstig is toelaat om aan die SQL Server te koppel — insluitend hulpbronne vanaf enige tenant.
|
||||
- Dit beteken dat indien jy geldige SQL credentials bekom, jy vanaf 'n Azure VM binne jou eie aanvaller-beheerde tenant aan die slagoffer se Azure SQL Server kan koppel. [The MS docs explains this](https://learn.microsoft.com/en-us/azure/azure-sql/database/network-access-controls-overview?view=azuresql#allow-azure-services)
|
||||
|
||||
**Authentication Methods:**
|
||||
|
||||
- Microsoft **Entra-only** authentication: Jy moet die Entra principals aandui wat toegang tot die service sal hê.
|
||||
- **Both SQL and Microsoft Entra** authentication: Tradisionele SQL authentication met username en password saam met Microsoft Entra.
|
||||
- **Only SQL** authentication: Laat toegang slegs via database users toe.
|
||||
- Slegs Microsoft **Entra-only** authentication: Jy moet die Entra-principals aandui wat toegang tot die diens sal hê.
|
||||
- **Both SQL and Microsoft Entra** authentication: Tradisionele SQL authentication met gebruikersnaam en wagwoord saam met Microsoft Entra.
|
||||
- **Only SQL** authentication: Laat slegs toegang via databasisgebruikers toe.
|
||||
|
||||
Let daarop dat as enige SQL auth toegelaat word, moet ’n admin user (username + password) aangedui word, en as Entra ID auth gekies word, moet minstens een principal met admin access ook aangedui word.
|
||||
Let daarop dat indien enige SQL auth toegelaat word, 'n admin-gebruiker (gebruikersnaam + wagwoord) aangedui moet word, en indien Entra ID auth gekies word, is dit ook nodig om ten minste een principal met admin-toegang aan te dui.
|
||||
|
||||
**Encryption:**
|
||||
|
||||
- Dit word “Transparent data encryption” genoem en dit encrypt databases, backups, en logs at rest.
|
||||
- Soos altyd word ’n Azure managed key by default gebruik, maar ’n customer managed encryption key (CMEK) kan ook gebruik word.
|
||||
- Dit word “Transparent data encryption” genoem en dit enkripteer databasisse, backups en logs wanneer dit nie gebruik word nie.
|
||||
- Soos altyd word 'n Azure managed key by verstek gebruik, maar 'n customer managed encryption key (CMEK) kan ook gebruik word.
|
||||
**Managed Identities:**
|
||||
|
||||
- Dit is moontlik om system en user managed MIs toe te ken.
|
||||
- Gebruik om toegang te verkry tot die encryption key (as ’n CMEK gebruik word) en ander services vanaf die databases.
|
||||
- Vir ’n paar voorbeelde van die Azure services waartoe vanaf die database toegang verkry kan word, kyk [this page of the docs](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-external-data-source-transact-sql)
|
||||
- As meer as een UMI toegewys is, is dit moontlik om die default een om te gebruik aan te dui.
|
||||
- Dit is moontlik om ’n federated client identity vir cross-tenant access te configure.
|
||||
- Dit is moontlik om system en user managed MIs toe te wys.
|
||||
- Word gebruik om toegang tot die encryption key te verkry (indien 'n CMEK gebruik word) en tot ander dienste vanaf die databasisse.
|
||||
- Vir enkele voorbeelde van die Azure-dienste waartoe vanaf die databasis toegang verkry kan word, raadpleeg [this page of the docs](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-external-data-source-transact-sql)
|
||||
- Indien meer as een UMI toegewys is, is dit moontlik om die verstek een wat gebruik moet word aan te dui.
|
||||
- Dit is moontlik om 'n federated client identity vir cross-tenant access op te stel.
|
||||
|
||||
Sommige commands om info binne ’n blob storage vanaf ’n SQL database te access:
|
||||
Enkele commands om toegang tot inligting binne 'n blob storage vanaf 'n SQL-databasis te verkry:
|
||||
```sql
|
||||
-- Create a credential for the managed identity
|
||||
CREATE DATABASE SCOPED CREDENTIAL [ManagedIdentityCredential]
|
||||
@@ -71,58 +71,58 @@ GO
|
||||
```
|
||||
**Microsoft Defender:**
|
||||
|
||||
- Useful for “mitigating potential database vulnerabilities, and detecting anomalous activities”
|
||||
- Ons sal oor Defender in sy eie lesing praat (dit kan in verskeie ander Azure-dienste geaktiveer word)
|
||||
- Nuttig vir “die versagting van potensiële databasis-kwesbaarhede en die opsporing van abnormale aktiwiteite”
|
||||
- Ons sal Defender in sy eie les bespreek (dit kan in verskeie ander Azure-dienste geaktiveer word)
|
||||
|
||||
**Backups:**
|
||||
- Backup frequency word in die retention policies bestuur.
|
||||
**Rugsteun:**
|
||||
- Rugsteunfrekwensie word in die retensiebeleide bestuur.
|
||||
|
||||
**Deleted databases:**
|
||||
- Dit is moontlik om DBs te restore wat uit bestaande backups deleted is.
|
||||
**Geskrapte databasisse:**
|
||||
- Dit is moontlik om databasisse wat uit bestaande rugsteun geskrap is, te herstel.
|
||||
|
||||
## Azure SQL Database
|
||||
|
||||
**Azure SQL Database** is ’n **fully managed database platform as a service (PaaS)** wat scalable en secure relational database solutions bied. Dit is gebou op die nuutste SQL Server technologies en verwyder die behoefte aan infrastructure management, wat dit ’n gewilde keuse maak vir cloud-based applications.
|
||||
**Azure SQL Database** is ’n **volledig bestuurde databasisplatform as ’n diens (PaaS)** wat skaalbare en veilige relasionele databasisoplossings verskaf. Dit is gebou op die nuutste SQL Server-tegnologieë en elimineer die behoefte aan infrastruktuurbestuur, wat dit ’n gewilde keuse vir wolkgebaseerde toepassings maak.
|
||||
|
||||
Om ’n SQL database te create, is dit nodig om die SQL server aan te dui waar dit gehost sal word.
|
||||
Om ’n SQL-databasis te skep, moet die SQL-bediener waarop dit gehuisves sal word, aangedui word.
|
||||
|
||||
### SQL Database Security Features
|
||||
|
||||
- **Always Up-to-Date**: Run op die nuutste stable version van SQL Server en ontvang nuwe features en patches automatisch.
|
||||
- **Inherited SQL Server security features:**
|
||||
- Authentication (SQL and/or Entra ID)
|
||||
- Assigned Managed Identities
|
||||
- Network restrictions
|
||||
- Encryption
|
||||
- Backups
|
||||
- **Altyd op datum**: Loop op die nuutste stabiele weergawe van SQL Server en ontvang outomaties nuwe funksies en pleisters.
|
||||
- **Geërfde SQL Server-sekuriteitsfunksies:**
|
||||
- Verifikasie (SQL en/of Entra ID)
|
||||
- Toegewysde Managed Identities
|
||||
- Netwerkbeperkings
|
||||
- Enkripsie
|
||||
- Rugsteun
|
||||
- …
|
||||
- **Data redundancy:** Options is local, zone, Geo of Geo-Zone redundant.
|
||||
- **Ledger:** Dit verifieer cryptographically die integrity van data, en verseker dat enige tampering gedetecteer word. Useful to financial, medical en enige organization wat sensitive data bestuur.
|
||||
- **Dataredundansie:** Opsies is plaaslik, sone-, Geo- of Geo-Sone-redundant.
|
||||
- **Ledger:** Dit verifieer die integriteit van data kriptografies, wat verseker dat enige peutery opgespoor word. Nuttig vir finansiële, mediese en enige organisasie wat sensitiewe data bestuur.
|
||||
|
||||
|
||||
’n SQL database could be part of ’n **elastic Pool**. Elastic pools is ’n cost-effective solution vir die bestuur van multiple databases deur configurable compute (eDTUs) en storage resources tussen hulle te share, met pricing gebaseer uitsluitlik op die resources allocated eerder as op die number of databases.
|
||||
’n SQL-databasis kan deel wees van ’n **Elastic Pool**. Elastic pools is ’n koste-effektiewe oplossing vir die bestuur van veelvuldige databasisse deur konfigureerbare compute (eDTUs) en stoorspasie tussen hulle te deel, met pryse wat uitsluitlik gebaseer is op die toegewysde hulpbronne eerder as die aantal databasisse.
|
||||
|
||||
#### Azure SQL Column Level Security (Masking) & Row Level Security
|
||||
|
||||
**Azure SQL's dynamic** data masking is ’n feature wat help om **sensitive information te protect deur dit te hide** vir unauthorized users. In plaas daarvan om die actual data te alter, mask dit dynamically die displayed data, en verseker dat sensitive details soos credit card numbers obscured is.
|
||||
**Azure SQL se dinamiese** datamaskering is ’n funksie wat help om **sensitiewe inligting te beskerm deur dit vir ongemagtigde gebruikers te verberg**. In plaas daarvan om die werklike data te verander, masker dit die vertoonde data dinamies, wat verseker dat sensitiewe besonderhede soos kredietkaartnommers verdoesel word.
|
||||
|
||||
Die **Dynamic Data Masking** affect op alle users behalwe die ones wat unmasked is (hierdie users need to be indicated) en administrators. Dit het die configuration option wat spesifiseer watter SQL users exempt is van dynamic data masking, met **administrators altyd excluded**.
|
||||
Die **Dynamic Data Masking** is van toepassing op alle gebruikers behalwe dié wat ontmasker is (hierdie gebruikers moet aangedui word) en administrateurs. Dit het ’n konfigurasie-opsie wat spesifiseer watter SQL-gebruikers van dinamiese datamaskering vrygestel is, met **administrateurs wat altyd uitgesluit word**.
|
||||
|
||||
**Azure SQL Row Level Security (RLS)** is ’n feature wat **beheer watter rows ’n user kan view of modify**, en verseker dat elke user net die data sien wat relevant is vir hulle. Deur security policies met filter of block predicates te create, kan organizations fine-grained access op die database level enforce.
|
||||
**Azure SQL Row Level Security (RLS)** is ’n funksie wat **beheer watter rye ’n gebruiker kan bekyk of wysig**, wat verseker dat elke gebruiker slegs die data sien wat vir hulle relevant is. Deur sekuriteitsbeleide met filter- of blokpredikate te skep, kan organisasies fynkorrelige toegang op databasisvlak afdwing.
|
||||
|
||||
### Azure SQL Managed Instance
|
||||
|
||||
**Azure SQL Managed Instances** is vir larger scale, entire SQL Server instance-scoped deployments. Dit provide near 100% compatibility met die latest SQL Server on-premises (Enterprise Edition) Database Engine, wat ’n native virtual network (VNet) implementation provide wat common security concerns address, en ’n business model favorable vir on-premises SQL Server customers.
|
||||
**Azure SQL Managed Instances** is bedoel vir groterskaalse ontplooiings wat op die hele SQL Server-instansie-omvang fokus. Dit bied byna 100% verenigbaarheid met die nuutste SQL Server Database Engine op die perseel (Enterprise Edition), wat ’n inheemse virtuele netwerk-implementering (VNet) verskaf wat algemene sekuriteitskwessies aanspreek, asook ’n sakemodel wat voordelig is vir SQL Server-kliënte op die perseel.
|
||||
|
||||
### Azure SQL Virtual Machines
|
||||
|
||||
**Azure SQL Virtual Machines** allows om die **operating system** en die SQL Server instance te control, aangesien ’n VM in die VM service spawned sal word wat die SQL server run.
|
||||
**Azure SQL Virtual Machines** laat jou toe om die **bedryfstelsel** en die SQL Server-instansie te beheer, aangesien ’n VM in die VM-diens geskep sal word waarop die SQL-bediener loop.
|
||||
|
||||
Wanneer ’n SQL Virtual Machine created word, is dit moontlik om **all the settings of the VM** te selected (soos in die VM lesing getoon) wat die SQL server sal host.
|
||||
- Dit beteken dat die VM some VNet(s) sal access, mag **Managed Identities attached** hê, kan file shares gemounted hê… wat ’n **pivoting from the SQL** na die VM super interesting maak.
|
||||
- Boonop is dit moontlik om ’n app id en secret te configure om **toelaat dat die SQL toegang kry tot ’n specific key vault**, wat sensitive info kan contain.
|
||||
Wanneer ’n SQL Virtual Machine geskep word, is dit moontlik om **al die instellings van die VM te kies** (soos in die VM-les getoon) wat die SQL-bediener sal huisves.
|
||||
- Dit beteken dat die VM toegang tot sommige VNet(s) sal hê, moontlik **Managed Identities daaraan geheg** kan hê, lêerdelings gemonteer kan hê … wat ’n **pivoting vanaf die SQL** na die VM uiters interessant maak.
|
||||
- Daarbenewens is dit moontlik om ’n app-id en secret te konfigureer om **die SQL toe te laat om toegang tot ’n spesifieke key vault te verkry**, wat sensitiewe inligting kan bevat.
|
||||
|
||||
Dit is ook moontlik om dinge soos **automatic SQL updates**, **automatic backups**, **Entra ID authentication** en die meeste features van die ander SQL services te configure.
|
||||
Dit is ook moontlik om dinge soos **outomatiese SQL-opdaterings**, **outomatiese rugsteun**, **Entra ID-verifikasie** en die meeste van die funksies van die ander SQL-dienste te konfigureer.
|
||||
|
||||
## Enumeration
|
||||
|
||||
@@ -261,7 +261,7 @@ Get-AzSqlVM
|
||||
{{#endtab}}
|
||||
{{#endtabs}}
|
||||
|
||||
Daarbenewens, as jy die Dynamic Data Masking en Row Level policies binne die database wil enumereer, kan jy die volgende query gebruik:
|
||||
Daarbenewens, indien jy die Dynamic Data Masking- en Row Level-beleide binne die databasis wil enumerate, kan jy navraag doen oor:
|
||||
```sql
|
||||
--Enumerates the masked columns
|
||||
SELECT
|
||||
@@ -286,9 +286,9 @@ JOIN sys.security_predicates AS sp2
|
||||
ON sp.object_id = sp2.object_id;
|
||||
|
||||
```
|
||||
### Koppel en run SQL queries
|
||||
### Koppel en voer SQL-navrae uit
|
||||
|
||||
Jy kan ’n connection string (wat credentials bevat) vind uit die voorbeeld van [enumerating an Az WebApp](az-app-services.md):
|
||||
Jy kan moontlik ’n connection string (wat credentials bevat) vind deur byvoorbeeld ’n Az WebApp te [enumerate](az-app-services.md):
|
||||
```bash
|
||||
function invoke-sql{
|
||||
param($query)
|
||||
@@ -307,11 +307,11 @@ $Connection.Close()
|
||||
|
||||
invoke-sql 'Select Distinct TABLE_NAME From information_schema.TABLES;'
|
||||
```
|
||||
Jy kan ook `sqlcmd` gebruik om toegang tot die databasis te verkry. Dit is belangrik om te weet of die server openbare verbindings toelaat `az sql server show --name <server-name> --resource-group <resource-group>`, en ook of die firewall-reël ons IP toelaat om toegang te verkry:
|
||||
Jy kan ook sqlcmd gebruik om toegang tot die databasis te verkry. Dit is belangrik om te weet of die bediener publieke verbindings toelaat `az sql server show --name <server-name> --resource-group <resource-group>`, en ook of die firewall-reël ons IP-adres toelaat om toegang te verkry:
|
||||
```bash
|
||||
sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passworkd> -d <database>
|
||||
```
|
||||
## References
|
||||
## Verwysings
|
||||
|
||||
- [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)
|
||||
|
||||
@@ -4,52 +4,52 @@
|
||||
|
||||
## Basiese Inligting
|
||||
|
||||
Azure Storage Accounts is fundamentele dienste in Microsoft Azure wat skaalbare, veilige, en hoogs beskikbare cloud **storage for various data types** verskaf, insluitend blobs (binary large objects), files, queues, en tables. Hulle dien as houers wat hierdie verskillende storage dienste saam onder een enkele namespace groepeer vir maklike bestuur.
|
||||
Azure Storage Accounts is fundamentele dienste in Microsoft Azure wat skaalbare, veilige en hoogs beskikbare cloud **storage vir verskeie datatipes** bied, insluitend blobs (binary large objects), files, queues en tables. Hulle dien as houers wat hierdie verskillende storage-dienste onder 'n enkele namespace groepeer vir maklike bestuur.
|
||||
|
||||
**Hoof konfigurasie opsies**:
|
||||
**Hoofkonfigurasie-opsies**:
|
||||
|
||||
- Elke storage account moet 'n **uniq name across all Azure** hê.
|
||||
- Elke storage account word ontplooi in 'n **region** of in 'n Azure extended zone
|
||||
- Dit is moontlik om die **premium** weergawe van die storage account te kies vir beter performance
|
||||
- Dit is moontlik om tussen **4 types of redundancy to protect** teen rack-, drive- en datacenter **failures** te kies.
|
||||
- Elke storage account moet 'n **unieke naam oor die hele Azure** hê.
|
||||
- Elke storage account word in 'n **region** of in 'n Azure extended zone ontplooi.
|
||||
- Dit is moontlik om die **premium**-weergawe van die storage account te kies vir beter werkverrigting.
|
||||
- Dit is moontlik om tussen **4 tipes redundancy te kies om** teen **failures** van racks, drives en datacenters te beskerm.
|
||||
|
||||
**Security configuration options**:
|
||||
**Security-konfigurasie-opsies**:
|
||||
|
||||
- **Require secure transfer for REST API operations**: Vereis TLS in enige kommunikasie met die storage
|
||||
- **Allows enabling anonymous access on individual containers**: Indien nie, sal dit in die toekoms nie moontlik wees om anonymous access te aktiveer nie
|
||||
- **Enable storage account key access**: Indien nie, sal access met Shared Keys verbied word
|
||||
- **Require secure transfer for REST API operations**: Vereis TLS in enige kommunikasie met die storage.
|
||||
- **Allows enabling anonymous access on individual containers**: Indien nie, sal dit nie moontlik wees om anonymous access in die toekoms te aktiveer nie.
|
||||
- **Enable storage account key access**: Indien nie, sal toegang met Shared Keys verbied word.
|
||||
- **Minimum TLS version**
|
||||
- **Permitted scope for copy operations**: Laat toe vanaf enige storage account, vanaf enige storage account van dieselfde Entra tenant of vanaf storage account met private endpoints in dieselfde virtual network.
|
||||
- **Permitted scope for copy operations**: Laat kopiëer vanaf enige storage account, vanaf enige storage account in dieselfde Entra tenant, of vanaf 'n storage account met private endpoints in dieselfde virtual network toe.
|
||||
|
||||
**Blob Storage options**:
|
||||
**Blob Storage-opsies**:
|
||||
|
||||
- **Allow cross-tenant replication**
|
||||
- **Access tier**: Hot (data wat gereeld access word), Cool en Cold (data wat selde access word)
|
||||
- **Access tier**: Hot (data wat gereeld benader word), Cool en Cold (data wat selde benader word)
|
||||
|
||||
**Networking options**:
|
||||
**Networking-opsies**:
|
||||
|
||||
- **Network access**:
|
||||
- Laat toe vanaf alle networks
|
||||
- Laat toe vanaf geselekteerde virtual networks en IP addresses
|
||||
- Disable public access en gebruik private access
|
||||
- **Private endpoints**: Dit laat 'n private connection na die storage account vanaf 'n virtual network toe
|
||||
- Laat toegang vanaf alle networks toe.
|
||||
- Laat toegang vanaf geselekteerde virtual networks en IP addresses toe.
|
||||
- Deaktiveer public access en gebruik private access.
|
||||
- **Private endpoints**: Dit laat 'n private verbinding vanaf 'n virtual network na die storage account toe.
|
||||
|
||||
**Data protection options**:
|
||||
**Data protection-opsies**:
|
||||
|
||||
- **Point-in-time restore for containers**: Laat toe om containers na 'n vroeër state te restore
|
||||
- Dit vereis dat versioning, change feed, en blob soft delete geaktiveer is.
|
||||
- **Enable soft delete for blobs**: Dit aktiveer 'n retention period in dae vir deleted blobs (selfs overwritten)
|
||||
- **Enable soft delete for containers**: Dit aktiveer 'n retention period in dae vir deleted containers
|
||||
- **Enable soft delete for file shares**: Dit aktiveer 'n retention period in dae vir deleted file shared
|
||||
- **Enable versioning for blobs**: Behou vorige versions van jou blobs
|
||||
- **Enable blob change feed**: Hou logs van create, modification, en delete changes to blobs
|
||||
- **Enable version-level immutability support**: Laat jou toe om 'n time-based retention policy op die account-level te stel wat op al die blob versions toegepas sal word.
|
||||
- **Point-in-time restore for containers**: Laat toe dat containers na 'n vroeëre toestand herstel word.
|
||||
- Dit vereis dat versioning, change feed en blob soft delete geaktiveer is.
|
||||
- **Enable soft delete for blobs**: Dit aktiveer 'n retention period in dae vir deleted blobs (selfs blobs wat oorskryf is).
|
||||
- **Enable soft delete for containers**: Dit aktiveer 'n retention period in dae vir deleted containers.
|
||||
- **Enable soft delete for file shares**: Dit aktiveer 'n retention period in dae vir deleted file shares.
|
||||
- **Enable versioning for blobs**: Behou vorige weergawes van jou blobs.
|
||||
- **Enable blob change feed**: Hou logs van create-, modification- en delete-veranderinge aan blobs.
|
||||
- **Enable version-level immutability support**: Laat jou toe om 'n time-based retention policy op account-vlak te stel wat op alle blob-weergawes van toepassing sal wees.
|
||||
- Version-level immutability support en point-in-time restore for containers kan nie gelyktydig geaktiveer word nie.
|
||||
|
||||
**Encryption configuration options**:
|
||||
**Encryption-konfigurasie-opsies**:
|
||||
|
||||
- **Encryption type**: Dit is moontlik om Microsoft-managed keys (MMK) of Customer-managed keys (CMK) te gebruik
|
||||
- **Enable infrastructure encryption**: Laat toe om die data dubbel te encrypt "for more security"
|
||||
- **Encryption type**: Dit is moontlik om Microsoft-managed keys (MMK) of Customer-managed keys (CMK) te gebruik.
|
||||
- **Enable infrastructure encryption**: Laat toe dat die data dubbel geënkripteer word "vir meer security".
|
||||
|
||||
### Storage endpoints
|
||||
|
||||
@@ -64,19 +64,19 @@ Azure Storage Accounts is fundamentele dienste in Microsoft Azure wat skaalbare,
|
||||
|
||||
### Public Exposure
|
||||
|
||||
If "Allow Blob public access" is **enabled** (disabled by default), when creating a container it's possible to:
|
||||
Indien "Allow Blob public access" **geaktiveer** is (by verstek gedeaktiveer), is dit moontlik om wanneer 'n container geskep word:
|
||||
|
||||
- Give **public access to read blobs** (you need to know the name).
|
||||
- **List container blobs** and **read** them.
|
||||
- Make it fully **private**
|
||||
- **Public access toe te ken om blobs te lees** (jy moet die naam ken).
|
||||
- **Container-blobs te lys** en dit te **lees**.
|
||||
- Dit heeltemal **private** te maak.
|
||||
|
||||
<figure><img src="https://lh7-rt.googleusercontent.com/slidesz/AGV_vUfoetUnYBPWQpRrWNnnlbqWpl8Rdoaeg5uBrCVlvcNDlnKwQHjZe8nUb2SfPspBgbu-lCZLmUei-hFi_Jl2eKbaxUtBGTjdUSDmkrcwr90VZkmuMjk9tyh92p75btfyzGiUTa0-=s2048?key=m8TV59TrCFPlkiNnmhYx3aZt" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Static website (`$web`) exposure & leaked secrets
|
||||
|
||||
- **Static websites** are served from the special `$web` container over a region-specific endpoint such as `https://<account>.z13.web.core.windows.net/`.
|
||||
- The `$web` container may report `publicAccess: null` via the blob API, but files are still reachable through the static site endpoint, so dropping config/IaC artifacts there can leak secrets.
|
||||
- Quick audit workflow:
|
||||
- **Static websites** word bedien vanaf die spesiale `$web` container oor 'n region-specific endpoint soos `https://<account>.z13.web.core.windows.net/`.
|
||||
- Die `$web` container kan `publicAccess: null` via die blob API rapporteer, maar files is steeds bereikbaar deur die static site endpoint, dus kan die plasing van config/IaC artifacts daar secrets leak.
|
||||
- Vinnige audit-workflow:
|
||||
```bash
|
||||
# Identify storage accounts with static website hosting enabled
|
||||
az storage blob service-properties show --account-name <acc-name> --auth-mode login
|
||||
@@ -87,53 +87,53 @@ az storage blob list --container-name '$web' --account-name <acc-name> --auth-mo
|
||||
# Pull suspicious files directly (e.g., IaC tfvars containing secrets/SAS)
|
||||
az storage blob download -c '$web' --name iac/terraform.tfvars --file /dev/stdout --account-name <acc-name> --auth-mode login
|
||||
```
|
||||
### Ouditering van anonieme blob-blootstelling
|
||||
### Oudit van anonieme blob-blootstelling
|
||||
|
||||
- **Vind storage accounts** wat data kan blootstel: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. As `allowBlobPublicAccess` `false` is, kan jy nie containers publiek maak nie.
|
||||
- **Inspekteer riskante accounts** om die vlag en ander swak settings te bevestig: `az storage account show --name <acc> --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`.
|
||||
- **Lys container-vlak blootstelling** waar die vlag geaktiveer is:
|
||||
- **Vind storage accounts** wat data kan blootstel: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. As `allowBlobPublicAccess` `false` is, kan jy nie houers publiek maak nie.
|
||||
- **Inspekteer riskante accounts** om die vlag en ander swak instellings te bevestig: `az storage account show --name <acc> --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`.
|
||||
- **Enumerate container-vlak-blootstelling** waar die vlag geaktiveer is:
|
||||
```bash
|
||||
az storage container list --account-name <acc> \
|
||||
--query '[].{name:name, access:properties.publicAccess}'
|
||||
```
|
||||
- `"Blob"`: anonieme lees toegang toegelaat **slegs wanneer blob name bekend is** (geen listing).
|
||||
- `"Container"`: anonieme **list + read** van elke blob.
|
||||
- `null`: private; authentication vereis.
|
||||
- **Bewys access** sonder credentials:
|
||||
- As `publicAccess` `Container` is, werk anonieme listing: `curl "https://<acc>.blob.core.windows.net/<container>?restype=container&comp=list"`.
|
||||
- Vir beide `Blob` en `Container`, werk anonieme blob download wanneer die naam bekend is:
|
||||
- `"Blob"`: anonieme leeswerk word **slegs toegelaat wanneer die blob-naam bekend is** (geen lysvorming nie).
|
||||
- `"Container"`: anonieme **lys + lees** van elke blob.
|
||||
- `null`: privaat; authentication word vereis.
|
||||
- **Bewys toegang** sonder credentials:
|
||||
- Indien `publicAccess` `Container` is, werk anonieme lysvorming: `curl "https://<acc>.blob.core.windows.net/<container>?restype=container&comp=list"`.
|
||||
- Vir beide `Blob` en `Container` werk anonieme blob-aflaai wanneer die naam bekend is:
|
||||
```bash
|
||||
az storage blob download -c <container> -n <blob> --account-name <acc> --file /dev/stdout
|
||||
# or via raw HTTP
|
||||
curl "https://<acc>.blob.core.windows.net/<container>/<blob>"
|
||||
```
|
||||
### Connect to Storage
|
||||
### Koppel aan Storage
|
||||
|
||||
As jy enige **storage** vind waartoe jy kan koppel, kan jy die tool [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) gebruik om dit te doen.
|
||||
As jy enige **storage** vind waaraan jy kan koppel, kan jy die hulpmiddel [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) daarvoor gebruik.
|
||||
|
||||
## Access to Storage <a href="#about-blob-storage" id="about-blob-storage"></a>
|
||||
## Toegang tot Storage <a href="#about-blob-storage" id="about-blob-storage"></a>
|
||||
|
||||
### RBAC
|
||||
|
||||
Dit is moontlik om Entra ID principals met **RBAC roles** te gebruik om toegang tot storage accounts te verkry, en dit is die aanbevole manier.
|
||||
Dit is moontlik om Entra ID-principals met **RBAC-rolle** te gebruik om toegang tot storage accounts te verkry, en dit is die aanbevole manier.
|
||||
|
||||
### Access Keys
|
||||
|
||||
Die storage accounts het access keys wat gebruik kan word om toegang daartoe te kry. Dit bied f**ull access to the storage account.**
|
||||
Die storage accounts het access keys wat gebruik kan word om toegang daartoe te verkry. Dit bied v**olle toegang tot die storage account.**
|
||||
|
||||
<figure><img src="../../../images/image (5).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### **Shared Keys & Lite Shared Keys**
|
||||
|
||||
Dit is moontlik om [**Shared Keys**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) te genereer wat met die access keys onderteken is om toegang tot sekere resources via 'n signed URL te authoriseer.
|
||||
Dit is moontlik om [**Shared Keys te genereer**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key), wat met die access keys onderteken is, om toegang tot sekere resources via ’n signed URL te magtig.
|
||||
|
||||
> [!NOTE]
|
||||
> Let daarop dat die `CanonicalizedResource`-deel die storage services resource (URI) verteenwoordig. En as enige deel in die URL ge-encode is, moet dit ook binne die `CanonicalizedResource` ge-encode wees.
|
||||
> Let daarop dat die `CanonicalizedResource`-deel die storage services-resource (URI) verteenwoordig. En indien enige deel van die URL geënkodeer is, moet dit ook binne die `CanonicalizedResource` geënkodeer word.
|
||||
|
||||
> [!NOTE]
|
||||
> Dit word by verstek deur `az` cli gebruik om requests te authenticate. Om dit te laat gebruik maak van die Entra ID principal credentials, dui die param `--auth-mode login` aan.
|
||||
> Dit word **by verstek deur `az` cli gebruik** om requests te authenticate. Om dit die Entra ID-principal credentials te laat gebruik, dui die param `--auth-mode login` aan.
|
||||
|
||||
- Dit is moontlik om 'n **shared key vir blob, queue en file services** te genereer deur die volgende information te onderteken:
|
||||
- Dit is moontlik om ’n **shared key vir blob-, queue- en file services te genereer** deur die volgende inligting te onderteken:
|
||||
```bash
|
||||
StringToSign = VERB + "\n" +
|
||||
Content-Encoding + "\n" +
|
||||
@@ -150,7 +150,7 @@ Range + "\n" +
|
||||
CanonicalizedHeaders +
|
||||
CanonicalizedResource;
|
||||
```
|
||||
- Dit is moontlik om 'n **shared key for table services** te genereer deur die volgende inligting te teken:
|
||||
- Dit is moontlik om ’n **gedeelde sleutel vir table services** te genereer deur die volgende inligting te onderteken:
|
||||
```bash
|
||||
StringToSign = VERB + "\n" +
|
||||
Content-MD5 + "\n" +
|
||||
@@ -158,7 +158,7 @@ Content-Type + "\n" +
|
||||
Date + "\n" +
|
||||
CanonicalizedResource;
|
||||
```
|
||||
- Dit is moontlik om 'n **lite shared key for blob, queue and file services** te genereer deur die volgende inligting te teken:
|
||||
- Dit is moontlik om ’n **lite shared key for blob, queue and file services** te genereer deur die volgende inligting te onderteken:
|
||||
```bash
|
||||
StringToSign = VERB + "\n" +
|
||||
Content-MD5 + "\n" +
|
||||
@@ -167,12 +167,12 @@ Date + "\n" +
|
||||
CanonicalizedHeaders +
|
||||
CanonicalizedResource;
|
||||
```
|
||||
- Dit is moontlik om 'n **lite shared key for table services** te genereer deur die volgende inligting te onderteken:
|
||||
- Dit is moontlik om ’n **lite shared key for table services** te genereer deur die volgende inligting te onderteken:
|
||||
```bash
|
||||
StringToSign = Date + "\n"
|
||||
CanonicalizedResource
|
||||
```
|
||||
Dan, om die sleutel te gebruik, kan dit gedoen word in die Authorization-kopskrif volgens die sintaksis:
|
||||
Dan kan die sleutel in die Authorization-header gebruik word volgens die volgende sintaksis:
|
||||
```bash
|
||||
Authorization="[SharedKey|SharedKeyLite] <AccountName>:<Signature>"
|
||||
#e.g.
|
||||
@@ -186,68 +186,68 @@ Content-Length: 0
|
||||
```
|
||||
### **Shared Access Signature** (SAS)
|
||||
|
||||
Shared Access Signatures (SAS) is veilige, tydsbeperkte URL's wat **spesifieke permissions gee om resources te access** in 'n Azure Storage account sonder om die account se access keys bloot te stel. Terwyl access keys volle administrative access tot alle resources gee, laat SAS fynkorrelige control toe deur permissions te spesifiseer (soos read of write) en 'n vervaltyd te definieer.
|
||||
Shared Access Signatures (SAS) is veilige, tydsbeperkte URL's wat **spesifieke toestemmings verleen om toegang tot hulpbronne** in 'n Azure Storage-rekening te verkry sonder om die rekening se access keys bloot te stel. Terwyl access keys volledige administratiewe toegang tot alle hulpbronne verskaf, laat SAS granulêre beheer toe deur toestemmings (soos lees of skryf) te spesifiseer en 'n vervaldatum te definieer.
|
||||
|
||||
#### SAS Types
|
||||
|
||||
- **User delegation SAS**: Dit word geskep vanaf 'n **Entra ID principal** wat die SAS sal sign en die permissions van die user na die SAS sal delegate. Dit kan net met **blob and data lake storage** gebruik word ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). Dit is moontlik om alle gegenereerde user delegated SAS te **revoke**.
|
||||
- Selfs al is dit moontlik om 'n delegation SAS met "meer" permissions te genereer as wat die user het. As die principal dit nie het nie, sal dit nie werk nie (no privesc).
|
||||
- **Service SAS**: Dit word gesign met een van die storage account **access keys**. Dit kan gebruik word om access tot spesifieke resources in 'n enkele storage service te gee. As die key hernu word, sal die SAS ophou werk.
|
||||
- **Account SAS**: Dit word ook met een van die storage account **access keys** gesign. Dit gee access tot resources oor 'n storage account services (Blob, Queue, Table, File) en kan service-level operations insluit.
|
||||
- **User delegation SAS**: Dit word vanaf 'n **Entra ID principal** geskep wat die SAS sal onderteken en die toestemmings van die gebruiker na die SAS sal delegeer. Dit kan slegs met **blob and data lake storage** gebruik word ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). Dit is moontlik om alle gegenereerde user delegated SAS te **revoke**.
|
||||
- Selfs al is dit moontlik om 'n delegation SAS met "meer" toestemmings as dié waaroor die gebruiker beskik, te genereer. As die principal dit egter nie het nie, sal dit nie werk nie (geen privesc).
|
||||
- **Service SAS**: Dit word met een van die storage account se **access keys** onderteken. Dit kan gebruik word om toegang tot spesifieke hulpbronne in 'n enkele storage service te verleen. As die key hernu word, sal die SAS ophou werk.
|
||||
- **Account SAS**: Dit word ook met een van die storage account se **access keys** onderteken. Dit verleen toegang tot hulpbronne oor 'n storage account se services (Blob, Queue, Table, File) en kan service-level operations insluit.
|
||||
|
||||
'n SAS URL wat deur 'n **access key** gesign is, lyk so:
|
||||
'n SAS URL wat deur 'n **access key** onderteken is, lyk soos volg:
|
||||
|
||||
- `https://<container_name>.blob.core.windows.net/newcontainer?sp=r&st=2021-09-26T18:15:21Z&se=2021-10-27T02:14:21Z&spr=https&sv=2021-07-08&sr=c&sig=7S%2BZySOgy4aA3Dk0V1cJyTSIf1cW%2Fu3WFkhHV32%2B4PE%3D`
|
||||
|
||||
'n SAS URL wat as 'n **user delegation** gesign is, lyk so:
|
||||
'n SAS URL wat as 'n **user delegation** onderteken is, lyk soos volg:
|
||||
|
||||
- `https://<container_name>.blob.core.windows.net/testing-container?sp=r&st=2024-11-22T15:07:40Z&se=2024-11-22T23:07:40Z&skoid=d77c71a1-96e7-483d-bd51-bd753aa66e62&sktid=fdd066e1-ee37-49bc-b08f-d0e152119b04&skt=2024-11-22T15:07:40Z&ske=2024-11-22T23:07:40Z&sks=b&skv=2022-11-02&spr=https&sv=2022-11-02&sr=c&sig=7s5dJyeE6klUNRulUj9TNL0tMj2K7mtxyRc97xbYDqs%3D`
|
||||
|
||||
Let op sommige **http params**:
|
||||
|
||||
- Die **`se`** param dui die **vervaldatum** van die SAS aan
|
||||
- Die **`sp`** param dui die **permissions** van die SAS aan
|
||||
- Die **`sp`** param dui die **toestemmings** van die SAS aan
|
||||
- Die **`sig`** is die **signature** wat die SAS valideer
|
||||
|
||||
#### SAS permissions
|
||||
|
||||
Wanneer 'n SAS gegenereer word, is dit nodig om die permissions aan te dui wat dit moet gee. Afhangend van die object waaroor die SAS gegenereer word, kan verskillende permissions ingesluit word. Byvoorbeeld:
|
||||
Wanneer 'n SAS gegenereer word, moet die toestemmings wat dit moet verleen, aangedui word. Afhangend van die objek waaroor die SAS gegenereer word, kan verskillende toestemmings ingesluit word. Byvoorbeeld:
|
||||
|
||||
- (a)dd, (c)reate, (d)elete, (e)xecute, (f)ilter_by_tags, (i)set_immutability_policy, (l)ist, (m)ove, (r)ead, (t)ag, (w)rite, (x)delete_previous_version, (y)permanent_delete
|
||||
|
||||
## SFTP Support for Azure Blob Storage
|
||||
|
||||
Azure Blob Storage ondersteun nou die SSH File Transfer Protocol (SFTP), wat veilige file transfer en management direk na Blob Storage moontlik maak sonder om custom solutions of third-party products te vereis.
|
||||
Azure Blob Storage ondersteun nou die SSH File Transfer Protocol (SFTP), wat veilige lêeroordrag en -bestuur direk na Blob Storage moontlik maak sonder dat pasgemaakte oplossings of third-party products nodig is.
|
||||
|
||||
### Key Features
|
||||
|
||||
- Protocol Support: SFTP werk met Blob Storage accounts wat met hierarchical namespace (HNS) gekonfigureer is. Dit organiseer blobs in directories en subdirectories vir makliker navigation.
|
||||
- Security: SFTP kan local user identities gebruik, maar dit ondersteun ook Microsoft Entra ID-gebaseerde access met Azure RBAC vir authorization. Dit beteken access kan gegee word met die gewone Blob Storage data-plane roles in plaas daarvan om local SFTP users te skep. Local users kan autentikeer via:
|
||||
- Protocol Support: SFTP werk met Blob Storage-rekeninge wat met hierarchical namespace (HNS) gekonfigureer is. Dit organiseer blobs in directories en subdirectories vir makliker navigasie.
|
||||
- Security: SFTP kan local user identities gebruik, maar dit ondersteun ook Microsoft Entra ID-based access met Azure RBAC vir authorization. Dit beteken dat toegang met die gewone Blob Storage data-plane roles verleen kan word, eerder as om local SFTP users te skep. Local users kan via die volgende authenticate:
|
||||
- Azure-generated passwords
|
||||
- Public-private SSH key pairs
|
||||
- Granular Permissions: Permissions soos Read, Write, Delete, en List kan aan local users toegewys word vir tot 100 containers.
|
||||
- Networking Considerations: SFTP connections word deur port 22 gemaak. Azure ondersteun network configurations soos firewalls, private endpoints, of virtual networks om SFTP traffic te secure.
|
||||
- Granular Permissions: Toestemmings soos Read, Write, Delete en List kan aan local users toegeken word vir tot 100 containers.
|
||||
- Networking Considerations: SFTP connections word deur port 22 gemaak. Azure ondersteun network configurations soos firewalls, private endpoints of virtual networks om SFTP traffic te beveilig.
|
||||
|
||||
### Setup Requirements
|
||||
|
||||
- Hierarchical Namespace: HNS moet geaktiveer wees wanneer die storage account geskep word.
|
||||
- Supported Encryption: Vereis Microsoft Security Development Lifecycle (SDL)-goedgekeurde cryptographic algorithms (bv. rsa-sha2-256, ecdsa-sha2-nistp256).
|
||||
- SFTP Configuration:
|
||||
- Skakel SFTP op die storage account aan.
|
||||
- Vir local-user access, skep local user identities met toepaslike permissions.
|
||||
- Vir local users, configureer home directories om hul beginligging binne die container te definieer.
|
||||
- Aktiveer SFTP op die storage account.
|
||||
- Vir local-user access, skep local user identities met toepaslike toestemmings.
|
||||
- Vir local users, konfigureer home directories om hul beginplek binne die container te definieer.
|
||||
|
||||
### Permissions
|
||||
|
||||
| Permission | Symbol | Description |
|
||||
| ---------------------- | ------ | ------------------------------------ |
|
||||
| **Read** | `r` | Lees file content. |
|
||||
| **Write** | `w` | Laai files op en skep directories. |
|
||||
| **List** | `l` | Lys contents van directories. |
|
||||
| **Delete** | `d` | Delete files of directories. |
|
||||
| **Create** | `c` | Skep files of directories. |
|
||||
| **Read** | `r` | Lees lêerinhoud. |
|
||||
| **Write** | `w` | Laai lêers op en skep directories. |
|
||||
| **List** | `l` | Lys die inhoud van directories. |
|
||||
| **Delete** | `d` | Delete lêers of directories. |
|
||||
| **Create** | `c` | Skep lêers of directories. |
|
||||
| **Modify Ownership** | `o` | Verander die owning user of group. |
|
||||
| **Modify Permissions** | `p` | Verander ACLs op files of directories. |
|
||||
| **Modify Permissions** | `p` | Verander ACLs op lêers of directories. |
|
||||
|
||||
## Enumeration
|
||||
|
||||
@@ -379,7 +379,7 @@ az storage account local-user list \
|
||||
{{#tab name="Az PowerShell" }}
|
||||
|
||||
<details>
|
||||
<summary>Az PowerShell enumerasie</summary>
|
||||
<summary>Az PowerShell-enumerasie</summary>
|
||||
```powershell
|
||||
# Get storage accounts
|
||||
Get-AzStorageAccount | fl
|
||||
@@ -442,7 +442,7 @@ New-AzStorageBlobSASToken `
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
### File Shares
|
||||
### Lêerdelings
|
||||
|
||||
{{#ref}}
|
||||
az-file-shares.md
|
||||
@@ -466,7 +466,7 @@ az-file-shares.md
|
||||
../az-persistence/az-storage-persistence.md
|
||||
{{#endref}}
|
||||
|
||||
## References
|
||||
## Verwysings
|
||||
|
||||
- [https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction](https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction)
|
||||
- [https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview](https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview)
|
||||
|
||||
Reference in New Issue
Block a user