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-stor
This commit is contained in:
@@ -4,47 +4,47 @@
|
||||
|
||||
## Azure SQL
|
||||
|
||||
Azure SQL je porodica upravljanih, bezbednih i inteligentnih proizvoda koji koriste **SQL Server database engine u Azure cloud-u**. To znači da ne morate da brinete o fizičkoj administraciji svojih servera, i možete da se fokusirate na upravljanje svojim podacima.
|
||||
Azure SQL je porodica managed, bezbednih i inteligentnih proizvoda koji koriste **SQL Server database engine u Azure cloud-u**. To znači da ne morate da brinete o fizičkoj administraciji servera i možete da se usredsredite na upravljanje svojim podacima.
|
||||
|
||||
Azure SQL se sastoji od četiri glavne ponude:
|
||||
|
||||
1. **Azure SQL Server**: Server je potreban za **deployment i management** SQL Server baza podataka.
|
||||
2. **Azure SQL Database**: Ovo je **fully-managed database service**, koja vam omogućava da hostujete pojedinačne baze podataka u Azure cloud-u.
|
||||
3. **Azure SQL Managed Instance**: Ovo je za veće sisteme, celokupne SQL Server instance-scoped deployments.
|
||||
4. **Azure SQL Server on Azure VMs**: Ovo je najbolje za arhitekture gde želite **control over the operating system **i SQL Server instancu.
|
||||
1. **Azure SQL Server**: Server je potreban za **deployment i upravljanje** SQL Server bazama podataka.
|
||||
2. **Azure SQL Database**: Ovo je **potpuno managed database service**, koji vam omogućava da hostujete pojedinačne baze podataka u Azure cloud-u.
|
||||
3. **Azure SQL Managed Instance**: Namenjen je deployment-ima većeg obima, koji obuhvataju čitav SQL Server instance-scope.
|
||||
4. **Azure SQL Server on Azure VMs**: Najpogodniji je za arhitekture u kojima želite **kontrolu nad operativnim sistemom **i SQL Server instancom.
|
||||
|
||||
### SQL Server Security Features
|
||||
|
||||
**Network access:**
|
||||
**Mrežni pristup:**
|
||||
|
||||
- Public endpoint (može da ograniči pristup na određene mreže).
|
||||
- Private endpoints.
|
||||
- Takođe je moguće ograničiti konekcije na osnovu domain names.
|
||||
- Takođe je moguće dozvoliti Azure services da pristupe (na primer, da bi se koristio Query editor u portalu ili da bi se omogućilo Azure VM-u da se poveže).
|
||||
- Ako je na SQL Server-u podešeno *Allow Azure services and resources to access this server* na "Enabled", Azure će automatski kreirati skriveno firewall pravilo koje dozvoljava sav network traffic koji dolazi iz Azure da se poveže na SQL Server — uključujući resurse iz bilo kog tenant-a.
|
||||
- To znači da, ako dobijete validne SQL credentials, možete da se povežete na žrtvin Azure SQL Server sa Azure VM-a unutar sopstvenog tenant-a pod kontrolom napadača. [MS docs to objašnjavaju](https://learn.microsoft.com/en-us/azure/azure-sql/database/network-access-controls-overview?view=azuresql#allow-azure-services)
|
||||
- Javni endpoint (pristup može da se ograniči na određene mreže).
|
||||
- Privatni endpoint-i.
|
||||
- Takođe je moguće ograničiti konekcije na osnovu imena domena.
|
||||
- Takođe je moguće dozvoliti Azure servisima da mu pristupe (na primer, da bi se koristio Query editor na portalu ili da bi se omogućilo povezivanje Azure VM-a).
|
||||
- Ako je za SQL Server opcija *Allow Azure services and resources to access this server* podešena na „Enabled“, Azure će automatski kreirati skriveno firewall pravilo koje dozvoljava celokupnom mrežnom saobraćaju koji potiče iz Azure-a da se poveže na SQL Server — uključujući resurse iz bilo kog tenant-a.
|
||||
- To znači da, ako dođete do validnih SQL credentials, možete da se povežete na victim Azure SQL Server sa Azure VM-a unutar sopstvenog attacker-controlled tenant-a. [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:**
|
||||
**Metode autentikacije:**
|
||||
|
||||
- Microsoft **Entra-only** authentication: Morate da navedete Entra principals koji će imati pristup servisu.
|
||||
- **Both SQL and Microsoft Entra** authentication: Tradicionalna SQL autentikacija sa username i password, zajedno sa Microsoft Entra.
|
||||
- **Only SQL** authentication: Dozvoljava pristup samo preko database users.
|
||||
- Microsoft **Entra-only** autentikacija: Potrebno je navesti Entra principals koji će imati pristup servisu.
|
||||
- **Both SQL and Microsoft Entra** autentikacija: Tradicionalna SQL autentikacija pomoću username-a i password-a, zajedno sa Microsoft Entra autentikacijom.
|
||||
- **Only SQL** autentikacija: Dozvoljen je pristup samo putem database users.
|
||||
|
||||
Imajte na umu da, ako je dozvoljena bilo koja SQL auth, mora da bude naveden admin user (username + password), a ako je izabran Entra ID auth, takođe je potrebno navesti bar jedan principal sa admin access.
|
||||
Imajte na umu da, ako je dozvoljen bilo koji SQL auth, mora da se navede admin user (username + password), a ako je izabran Entra ID auth, takođe je potrebno navesti najmanje jedan principal sa admin pristupom.
|
||||
|
||||
**Encryption:**
|
||||
**Enkripcija:**
|
||||
|
||||
- Zove se “Transparent data encryption” i enkriptuje databases, backups i logs at rest.
|
||||
- Kao i uvek, po default-u se koristi Azure managed key, ali može da se koristi i customer managed encryption key (CMEK).
|
||||
- Zove se „Transparent data encryption“ i šifruje baze podataka, backup-e i logove u stanju mirovanja.
|
||||
- Kao i uvek, Azure managed key se podrazumevano koristi, ali može da se koristi i customer managed encryption key (CMEK).
|
||||
**Managed Identities:**
|
||||
|
||||
- Moguće je dodeliti system i user managed MIs.
|
||||
- Moguće je dodeliti system i user managed MI-jeve.
|
||||
- Koriste se za pristup encryption key-u (ako se koristi CMEK) i drugim servisima iz baza podataka.
|
||||
- Za neke primere Azure servisa kojima može da se pristupi iz baze pogledajte [ovu stranicu docs](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-external-data-source-transact-sql)
|
||||
- Ako je dodeljeno više od jednog UMI-ja, moguće je navesti koji je defaultni za korišćenje.
|
||||
- Moguće je konfiguristi federated client identity za cross-tenant access.
|
||||
- Za neke primere Azure servisa kojima se može pristupiti iz baze podataka pogledajte [this page of the docs](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-external-data-source-transact-sql)
|
||||
- Ako je dodeljeno više od jednog UMI-ja, moguće je navesti podrazumevani koji će se koristiti.
|
||||
- Moguće je konfigurisati federated client identity za cross-tenant pristup.
|
||||
|
||||
Neke komande za pristup info unutar blob storage iz SQL baze:
|
||||
Neke komande za pristup informacijama unutar blob storage-a iz SQL baze podataka:
|
||||
```sql
|
||||
-- Create a credential for the managed identity
|
||||
CREATE DATABASE SCOPED CREDENTIAL [ManagedIdentityCredential]
|
||||
@@ -71,58 +71,58 @@ GO
|
||||
```
|
||||
**Microsoft Defender:**
|
||||
|
||||
- Korisno za “mitigating potential database vulnerabilities, and detecting anomalous activities”
|
||||
- Pričaćemo o Defender-u u posebnoj lekciji (može da bude omogućen u nekoliko drugih Azure servisa)
|
||||
- Koristan je za „ublažavanje potencijalnih ranjivosti baza podataka i otkrivanje anomalnih aktivnosti“
|
||||
- O Defender-u ćemo govoriti u posebnoj lekciji (može biti omogućen u nekoliko drugih Azure servisa)
|
||||
|
||||
**Backups:**
|
||||
- Frekvencija backup-a se upravlja u retention policies.
|
||||
- Učestalost pravljenja backup-a određuje se pravilima zadržavanja.
|
||||
|
||||
**Deleted databases:**
|
||||
- Moguće je restore-ovati DBs koje su obrisane iz postojećih backup-a.
|
||||
- Moguće je vratiti baze podataka koje su obrisane, koristeći postojeće backup-e.
|
||||
|
||||
## Azure SQL Database
|
||||
|
||||
**Azure SQL Database** je **fully managed database platform as a service (PaaS)** koja pruža skalabilna i bezbedna relacijska database rešenja. Izgrađena je na najnovijim SQL Server tehnologijama i eliminiše potrebu za infrastructure management-om, što je čini popularnim izborom za cloud-based aplikacije.
|
||||
**Azure SQL Database** je **potpuno upravljana database platforma kao servis (PaaS)** koja pruža skalabilna i bezbedna relaciona database rešenja. Izgrađena je na najnovijim SQL Server tehnologijama i eliminiše potrebu za upravljanjem infrastrukturom, što je čini popularnim izborom za cloud aplikacije.
|
||||
|
||||
Da bi se kreirala SQL database potrebno je navesti SQL server na kojem će biti hostovana.
|
||||
Za kreiranje SQL database potrebno je navesti SQL server na kom će biti hostovana.
|
||||
|
||||
### SQL Database Security Features
|
||||
|
||||
- **Always Up-to-Date**: Radi na najnovijoj stabilnoj verziji SQL Server-a i automatski prima nove features i patches.
|
||||
- **Always Up-to-Date**: Pokreće najnoviju stabilnu verziju SQL Server-a i automatski prima nove funkcije i zakrpe.
|
||||
- **Inherited SQL Server security features:**
|
||||
- Authentication (SQL and/or Entra ID)
|
||||
- Authentication (SQL i/ili Entra ID)
|
||||
- Assigned Managed Identities
|
||||
- Network restrictions
|
||||
- Encryption
|
||||
- Backups
|
||||
- …
|
||||
- **Data redundancy:** Opcije su local, zone, Geo ili Geo-Zone redundant.
|
||||
- **Ledger:** Kriptografski verifikuje integritet podataka, obezbeđujući da se svako tampering otkrije. Korisno za finansijske, medicinske i bilo koje organization koje upravlja sensitive data.
|
||||
- **Data redundancy:** Opcije su local, zone, Geo ili Geo-Zone redundantne.
|
||||
- **Ledger:** Kriptografski proverava integritet podataka, čime osigurava da se svako neovlašćeno menjanje otkrije. Korisno je za finansijske, medicinske i sve organizacije koje upravljaju osetljivim podacima.
|
||||
|
||||
|
||||
SQL database može biti deo **elastic Pool**. Elastic pools su cost-effective rešenje za upravljanje više databases deljenjem configurable compute (eDTUs) i storage resources među njima, uz cenu zasnovanu isključivo na dodeljenim resursima, a ne na broju databases.
|
||||
SQL database može biti deo **elastic Pool-a**. Elastic pools su isplativo rešenje za upravljanje većim brojem baza podataka deljenjem podesivih compute (eDTUs) i storage resursa među njima, pri čemu se cena zasniva isključivo na dodeljenim resursima, a ne na broju baza podataka.
|
||||
|
||||
#### Azure SQL Column Level Security (Masking) & Row Level Security
|
||||
|
||||
**Azure SQL's dynamic** data masking je feature koji pomaže da **zaštiti sensitive information tako što je skriva** od unauthorized users. Umesto menjanja stvarnih podataka, on dinamički maskira prikazane podatke, obezbeđujući da se osetljivi detalji kao što su brojevi kreditnih kartica prikriju.
|
||||
**Azure SQL's dynamic** data masking je funkcija koja pomaže u **zaštiti osetljivih informacija tako što ih sakriva** od neovlašćenih korisnika. Umesto menjanja stvarnih podataka, ona dinamički maskira prikazane podatke, čime osigurava da osetljivi detalji, kao što su brojevi kreditnih kartica, budu sakriveni.
|
||||
|
||||
**Dynamic Data Masking** utiče na sve users osim onih koji su unmasked (ovi users moraju biti navedeni) i administrators. Ima konfiguracionu opciju koja određuje koji SQL users su izuzeti iz dynamic data masking, pri čemu su **administrators uvek isključeni**.
|
||||
**Dynamic Data Masking** utiče na sve korisnike osim onih kod kojih je masking uklonjen (ovi korisnici moraju biti navedeni) i administratora. Ima opciju konfiguracije koja određuje koji SQL korisnici su izuzeti od dynamic data masking-a, pri čemu su **administratori uvek izuzeti**.
|
||||
|
||||
**Azure SQL Row Level Security (RLS)** je feature koji **kontroliše koje rows user može da vidi ili menja**, obezbeđujući da svaki user vidi samo podatke relevantne za njega. Kreiranjem security policies sa filter ili block predicates, organization mogu da primene fine-grained access na nivou database.
|
||||
**Azure SQL Row Level Security (RLS)** je funkcija koja **kontroliše koje redove korisnik može da vidi ili menja**, čime osigurava da svaki korisnik vidi samo podatke relevantne za njega. Kreiranjem security policies sa filter ili block predicates, organizacije mogu da sprovedu granularnu kontrolu pristupa na nivou database-a.
|
||||
|
||||
### Azure SQL Managed Instance
|
||||
|
||||
**Azure SQL Managed Instances** su za veće scale, kompletne SQL Server instance-scoped deployments. Pruža skoro 100% kompatibilnost sa najnovijim SQL Server on-premises (Enterprise Edition) Database Engine-om, što obezbeđuje native virtual network (VNet) implementation koja rešava uobičajene security concerns, i business model povoljan za on-premises SQL Server customers.
|
||||
**Azure SQL Managed Instances** namenjene su deployment-ima većeg obima, koji obuhvataju čitave SQL Server instance. Pružaju gotovo 100% kompatibilnost sa najnovijim SQL Server on-premises (Enterprise Edition) Database Engine-om, koji pruža nativnu implementaciju virtual network-a (VNet) za rešavanje uobičajenih bezbednosnih problema, kao i poslovni model povoljan za on-premises SQL Server korisnike.
|
||||
|
||||
### Azure SQL Virtual Machines
|
||||
|
||||
**Azure SQL Virtual Machines** omogućavaju da se **kontroliše operating system** i SQL Server instance, jer će VM biti spawn-ovan u VM servisu koji pokreće SQL server.
|
||||
**Azure SQL Virtual Machines** omogućavaju **kontrolu operativnog sistema** i SQL Server instance, pošto se u VM servisu pokreće VM sa SQL serverom.
|
||||
|
||||
Kada se kreira SQL Virtual Machine moguće je **izabrati sve settings VM-a** (kao što je prikazano u lekciji o VM-u) koji će hostovati SQL server.
|
||||
- To znači da će VM pristupati nekim VNet(s), može imati **Managed Identities attached** na njega, može imati montirane file shares… što čini **pivoting from the SQL** ka VM-u super interesantnim.
|
||||
- Pored toga, moguće je konfigurisati app id i secret da bi se **omogućilo SQL-u da pristupi određenom key vault-u**, koji može sadržati sensitive info.
|
||||
Prilikom kreiranja SQL Virtual Machine moguće je **izabrati sva podešavanja VM-a** (kao što je prikazano u VM lekciji) koji će hostovati SQL server.
|
||||
- To znači da će VM pristupati određenim VNet-ovima, da će možda imati **Managed Identities attached** na njega, da mogu biti mountovani file share-ovi… što čini **pivoting od SQL-a** ka VM-u veoma interesantnim.
|
||||
- Takođe, moguće je konfigurisati app id i secret kako bi se **SQL-u omogućio pristup određenom key vault-u**, koji može sadržati osetljive informacije.
|
||||
|
||||
Takođe je moguće konfigurisati stvari kao što su **automatic SQL updates**, **automatic backups**, **Entra ID authentication** i većinu features drugih SQL servisa.
|
||||
Takođe je moguće konfigurisati stvari kao što su **automatic SQL updates**, **automatic backups**, **Entra ID authentication** i većinu funkcija drugih SQL servisa.
|
||||
|
||||
## Enumeration
|
||||
|
||||
@@ -261,7 +261,7 @@ Get-AzSqlVM
|
||||
{{#endtab}}
|
||||
{{#endtabs}}
|
||||
|
||||
Dodatno, ako želite da enumerišete Dynamic Data Masking i Row Level policies unutar baze podataka, možete da izvršite upit:
|
||||
Dodatno, ako želite da izlistate Dynamic Data Masking i Row Level policies unutar baze podataka, možete izvršiti upit:
|
||||
```sql
|
||||
--Enumerates the masked columns
|
||||
SELECT
|
||||
@@ -288,7 +288,7 @@ ON sp.object_id = sp2.object_id;
|
||||
```
|
||||
### Povezivanje i pokretanje SQL upita
|
||||
|
||||
Možete pronaći connection string (koji sadrži credentials) iz primera [enumerating an Az WebApp](az-app-services.md):
|
||||
Možete pronaći string za povezivanje (koji sadrži kredencijale) u primeru [enumerating an Az WebApp](az-app-services.md):
|
||||
```bash
|
||||
function invoke-sql{
|
||||
param($query)
|
||||
@@ -307,18 +307,18 @@ $Connection.Close()
|
||||
|
||||
invoke-sql 'Select Distinct TABLE_NAME From information_schema.TABLES;'
|
||||
```
|
||||
Takođe možete da koristite sqlcmd za pristup bazi podataka. Važno je znati da li server dozvoljava javne konekcije `az sql server show --name <server-name> --resource-group <resource-group>`, kao i da li firewall rule dopušta da naš IP pristupi:
|
||||
Možete takođe koristiti sqlcmd za pristup bazi podataka. Važno je znati da li server dozvoljava javne konekcije `az sql server show --name <server-name> --resource-group <resource-group>`, kao i da li pravilo firewall-a dozvoljava našoj IP adresi pristup:
|
||||
```bash
|
||||
sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passworkd> -d <database>
|
||||
```
|
||||
## References
|
||||
## Reference
|
||||
|
||||
- [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
|
||||
## Eskalacija privilegija
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-sql-privesc.md
|
||||
|
||||
@@ -4,52 +4,52 @@
|
||||
|
||||
## Osnovne informacije
|
||||
|
||||
Azure Storage Accounts su fundamentalne usluge u Microsoft Azure koje obezbeđuju skalabilan, bezbedan i visoko dostupan cloud **storage za različite tipove podataka**, uključujući blobs (binary large objects), files, queues i tables. One služe kao kontejneri koji grupišu ove različite storage servise zajedno pod jednim namespace-om radi lakšeg upravljanja.
|
||||
Azure Storage Accounts su osnovne usluge u okviru Microsoft Azure platforme koje pružaju skalabilan, bezbedan i visoko dostupan cloud **storage za različite tipove podataka**, uključujući blobs (binarne velike objekte), files, queues i tables. Oni služe kao kontejneri koji grupišu ove različite storage usluge pod jednim namespace-om radi jednostavnog upravljanja.
|
||||
|
||||
**Glavne opcije konfiguracije**:
|
||||
|
||||
- Svaki storage account mora imati **jedinstveno ime na nivou celog Azure-a**.
|
||||
- Svaki storage account se deployuje u **region** ili u Azure extended zone
|
||||
- Moguće je izabrati **premium** verziju storage account-a za bolje performanse
|
||||
- Moguće je izabrati jednu od **4 vrste redundancy** za zaštitu od rack, drive i datacenter **failures**.
|
||||
- Svaki storage account mora imati **jedinstveno ime u okviru celog Azure-a**.
|
||||
- Svaki storage account se deploy-uje u **regionu** ili Azure extended zone-u
|
||||
- Moguće je izabrati **premium** verziju storage account-a radi boljih performansi
|
||||
- Moguće je izabrati između **4 tipa redundancy-ja radi zaštite** od **otkaza** rack-ova, diskova i data centara.
|
||||
|
||||
**Opcije sigurnosne konfiguracije**:
|
||||
**Opcije bezbednosne konfiguracije**:
|
||||
|
||||
- **Require secure transfer for REST API operations**: Zahteva TLS u svakoj komunikaciji sa storage-om
|
||||
- **Allows enabling anonymous access on individual containers**: Ako nije omogućeno, kasnije neće biti moguće uključiti anonymous access
|
||||
- **Enable storage account key access**: Ako nije omogućeno, access preko Shared Keys će biti zabranjen
|
||||
- **Allows enabling anonymous access on individual containers**: Ako nije omogućeno, ubuduće neće biti moguće omogućiti anonymous access
|
||||
- **Enable storage account key access**: Ako nije omogućeno, pristup pomoću Shared Keys će biti zabranjen
|
||||
- **Minimum TLS version**
|
||||
- **Permitted scope for copy operations**: Dozvoli sa bilo kog storage account-a, sa bilo kog storage account-a iz istog Entra tenant-a ili sa storage account-a sa private endpoints u istoj virtual network.
|
||||
- **Permitted scope for copy operations**: Dozvoljava kopiranje sa bilo kog storage account-a, sa bilo kog storage account-a iz istog Entra tenant-a ili sa storage account-a sa private endpoint-ima u istoj virtual network.
|
||||
|
||||
**Blob Storage opcije**:
|
||||
|
||||
- **Allow cross-tenant replication**
|
||||
- **Access tier**: Hot (podaci kojima se često pristupa), Cool i Cold (podaci kojima se retko pristupa)
|
||||
|
||||
**Mrežne opcije**:
|
||||
**Opcije umrežavanja**:
|
||||
|
||||
- **Network access**:
|
||||
- Dozvoli sa svih mreža
|
||||
- Dozvoli sa izabranih virtual networks i IP adresa
|
||||
- Dozvoli pristup sa svih networks
|
||||
- Dozvoli pristup sa izabranih virtual networks i IP adresa
|
||||
- Onemogući public access i koristi private access
|
||||
- **Private endpoints**: Omogućava privatnu konekciju ka storage account-u iz virtual network
|
||||
- **Private endpoints**: Omogućava private konekciju ka storage account-u iz virtual network-a
|
||||
|
||||
**Opcije zaštite podataka**:
|
||||
|
||||
- **Point-in-time restore for containers**: Omogućava vraćanje kontejnera u ranije stanje
|
||||
- Zahteva da budu uključeni versioning, change feed i blob soft delete.
|
||||
- **Enable soft delete for blobs**: Omogućava retention period u danima za obrisane blobs (čak i ako su overwrite-ovani)
|
||||
- **Enable soft delete for containers**: Omogućava retention period u danima za obrisane kontejnere
|
||||
- **Enable soft delete for file shares**: Omogućava retention period u danima za obrisane file shared
|
||||
- **Enable versioning for blobs**: Održava prethodne verzije tvojih blobs
|
||||
- **Enable blob change feed**: Čuva logove create, modification i delete promena nad blobs
|
||||
- **Enable version-level immutability support**: Omogućava da se na nivou account-a postavi time-based retention policy koja će se primeniti na sve blob verzije.
|
||||
- Version-level immutability support i point-in-time restore for containers ne mogu biti omogućeni istovremeno.
|
||||
- **Point-in-time restore for containers**: Omogućava vraćanje containers-a u prethodno stanje
|
||||
- Zahteva da budu omogućeni versioning, change feed i blob soft delete.
|
||||
- **Enable soft delete for blobs**: Omogućava period zadržavanja u danima za obrisane blobs (čak i one koji su overwritten)
|
||||
- **Enable soft delete for containers**: Omogućava period zadržavanja u danima za obrisane containers
|
||||
- **Enable soft delete for file shares**: Omogućava period zadržavanja u danima za obrisane file shares
|
||||
- **Enable versioning for blobs**: Održava prethodne verzije vaših blobs
|
||||
- **Enable blob change feed**: Čuva logs o kreiranju, izmenama i brisanju blobs
|
||||
- **Enable version-level immutability support**: Omogućava postavljanje time-based retention policy-ja na nivou account-a, koja će se primenjivati na sve verzije blobs.
|
||||
- Version-level immutability support i point-in-time restore for containers ne mogu biti istovremeno omogućeni.
|
||||
|
||||
**Opcije enkripcije**:
|
||||
**Opcije konfiguracije encryption-a**:
|
||||
|
||||
- **Encryption type**: Moguće je koristiti Microsoft-managed keys (MMK) ili Customer-managed keys (CMK)
|
||||
- **Enable infrastructure encryption**: Omogućava double encrypt podataka "for more security"
|
||||
- **Enable infrastructure encryption**: Omogućava dvostruko encryption podataka „radi veće bezbednosti“
|
||||
|
||||
### Storage endpoints
|
||||
|
||||
@@ -64,18 +64,18 @@ Azure Storage Accounts su fundamentalne usluge u Microsoft Azure koje obezbeđuj
|
||||
|
||||
### Public Exposure
|
||||
|
||||
Ako je "Allow Blob public access" **omogućen** (podrazumevano je onemogućen), pri kreiranju kontejnera moguće je:
|
||||
Ako je opcija „Allow Blob public access“ **omogućena** (podrazumevano je onemogućena), prilikom kreiranja container-a moguće je:
|
||||
|
||||
- Dati **public access za čitanje blobs** (moraš da znaš ime).
|
||||
- **Listati container blobs** i **čitati** ih.
|
||||
- Omogućiti **public access za čitanje blobs** (potrebno je znati ime).
|
||||
- **Izlistati blobs u container-u** i **čitati** ih.
|
||||
- Učiniti ga potpuno **private**
|
||||
|
||||
<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** se serviraju iz specijalnog `$web` kontejnera preko endpoint-a specifičnog za region, kao što je `https://<account>.z13.web.core.windows.net/`.
|
||||
- `$web` kontejner može da prijavi `publicAccess: null` preko blob API-ja, ali su fajlovi i dalje dostupni kroz static site endpoint, pa ubacivanje config/IaC artefakata tamo može leak-ovati secrets.
|
||||
- **Static websites** se serviraju iz posebnog `$web` container-a preko endpoint-a specifičnog za region, kao što je `https://<account>.z13.web.core.windows.net/`.
|
||||
- `$web` container može prijaviti `publicAccess: null` putem blob API-ja, ali su files i dalje dostupni preko static site endpoint-a, pa postavljanje config/IaC artifacts tamo može dovesti do toga da secrets procure.
|
||||
- Brzi audit workflow:
|
||||
```bash
|
||||
# Identify storage accounts with static website hosting enabled
|
||||
@@ -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
|
||||
```
|
||||
### Auditing anonymous blob exposure
|
||||
### Provera anonimne izloženosti blobova
|
||||
|
||||
- **Pronađi storage accounts** koje mogu da izlože podatke: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Ako je `allowBlobPublicAccess` `false`, ne možeš da učiniš kontejnere javnim.
|
||||
- **Proveri rizične accounts** da potvrdiš flag i ostale slabe postavke: `az storage account show --name <acc> --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`.
|
||||
- **Enumerate container-level exposure** gde je flag omogućen:
|
||||
- **Pronađite storage accounts** koji mogu izložiti podatke: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Ako je `allowBlobPublicAccess` `false`, ne možete učiniti kontejnere javnim.
|
||||
- **Proverite rizične naloge** da biste potvrdili zastavicu i druga slaba podešavanja: `az storage account show --name <acc> --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`.
|
||||
- **Izlistajte izloženost na nivou kontejnera** tamo gde je zastavica omogućena:
|
||||
```bash
|
||||
az storage container list --account-name <acc> \
|
||||
--query '[].{name:name, access:properties.publicAccess}'
|
||||
```
|
||||
- `"Blob"`: anonimni reads dozvoljeni **samo kada je naziv blob-a poznat** (nema listanja).
|
||||
- `"Container"`: anonimni **list + read** svakog blob-a.
|
||||
- `null`: private; authentication required.
|
||||
- **Prove access** without credentials:
|
||||
- If `publicAccess` is `Container`, anonimno listanje radi: `curl "https://<acc>.blob.core.windows.net/<container>?restype=container&comp=list"`.
|
||||
- For both `Blob` and `Container`, anonimni blob download radi kada je naziv poznat:
|
||||
- `"Blob"`: anonimno čitanje je dozvoljeno **samo kada je naziv blob-a poznat** (nema listanja).
|
||||
- `"Container"`: anonimno **listanje + čitanje** svakog blob-a.
|
||||
- `null`: privatno; potrebna je autentifikacija.
|
||||
- **Dokažite pristup** bez kredencijala:
|
||||
- Ako je `publicAccess` postavljen na `Container`, anonimno listanje funkcioniše: `curl "https://<acc>.blob.core.windows.net/<container>?restype=container&comp=list"`.
|
||||
- I za `Blob` i za `Container`, anonimno preuzimanje blob-a funkcioniše kada je naziv poznat:
|
||||
```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
|
||||
### Povezivanje sa Storage
|
||||
|
||||
Ako pronađeš bilo koji **storage** na koji možeš da se povežeš, možeš koristiti alat [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) za to.
|
||||
Ako pronađete bilo koji **storage** na koji možete da se povežete, možete koristiti alat [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) da to uradite.
|
||||
|
||||
## Access to Storage <a href="#about-blob-storage" id="about-blob-storage"></a>
|
||||
## Pristup Storage-u <a href="#about-blob-storage" id="about-blob-storage"></a>
|
||||
|
||||
### RBAC
|
||||
|
||||
Moguće je koristiti Entra ID principals sa **RBAC roles** za pristup storage account-ovima i to je preporučeni način.
|
||||
Moguće je koristiti Entra ID principals sa **RBAC roles** za pristup storage nalozima i to je preporučeni način.
|
||||
|
||||
### Access Keys
|
||||
|
||||
Storage account-ovi imaju access keys koji mogu da se koriste za pristup. Ovo obezbeđuje f**ull access to the storage account.**
|
||||
Storage nalozi imaju access keys koji se mogu koristiti za pristup. Ovo obezbeđuje p**un pristup storage nalogu.**
|
||||
|
||||
<figure><img src="../../../images/image (5).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### **Shared Keys & Lite Shared Keys**
|
||||
|
||||
Moguće je [**generate Shared Keys**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) potpisane sa access keys za autorizaciju pristupa određenim resursima preko signed URL.
|
||||
Moguće je [**generisati Shared Keys**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) potpisane access keys vrednostima radi autorizacije pristupa određenim resursima putem potpisanog URL-a.
|
||||
|
||||
> [!NOTE]
|
||||
> Imaj na umu da deo `CanonicalizedResource` predstavlja storage services resurs (URI). Ako je bilo koji deo u URL encoded, treba da bude encoded i unutar `CanonicalizedResource`.
|
||||
> Imajte na umu da deo `CanonicalizedResource` predstavlja resurs storage servisa (URI). Ako je bilo koji deo URL-a kodiran, trebalo bi da bude kodiran i unutar `CanonicalizedResource`.
|
||||
|
||||
> [!NOTE]
|
||||
> Ovo se **koristi podrazumevano od strane `az` cli** za autentifikaciju requests. Da bi koristio Entra ID principal credentials, navedi param `--auth-mode login`.
|
||||
> Ovo se **podrazumevano koristi u `az` cli** za autentifikaciju zahteva. Da biste koristili credentials Entra ID principala, navedite parametar `--auth-mode login`.
|
||||
|
||||
- Moguće je generate **shared key for blob, queue and file services** potpisivanjem sledećih informacija:
|
||||
- Moguće je generisati **shared key za blob, queue i file servise** potpisivanjem sledećih informacija:
|
||||
```bash
|
||||
StringToSign = VERB + "\n" +
|
||||
Content-Encoding + "\n" +
|
||||
@@ -150,7 +150,7 @@ Range + "\n" +
|
||||
CanonicalizedHeaders +
|
||||
CanonicalizedResource;
|
||||
```
|
||||
- Moguće je generisati **shared key za table services** potpisivanjem sledećih informacija:
|
||||
- Moguće je generisati **deljeni ključ za table services** potpisivanjem sledećih informacija:
|
||||
```bash
|
||||
StringToSign = VERB + "\n" +
|
||||
Content-MD5 + "\n" +
|
||||
@@ -167,12 +167,12 @@ Date + "\n" +
|
||||
CanonicalizedHeaders +
|
||||
CanonicalizedResource;
|
||||
```
|
||||
- Moguće je generisati **lite shared key for table services** potpisivanjem sledećih informacija:
|
||||
- Moguće je generisati **lite shared key za table services** potpisivanjem sledećih informacija:
|
||||
```bash
|
||||
StringToSign = Date + "\n"
|
||||
CanonicalizedResource
|
||||
```
|
||||
Zatim, da bi se koristio key, to se može uraditi u Authorization header-u koristeći sledeću sintaksu:
|
||||
Zatim, za korišćenje ključa, to se može uraditi u Authorization zaglavlju prateći sintaksu:
|
||||
```bash
|
||||
Authorization="[SharedKey|SharedKeyLite] <AccountName>:<Signature>"
|
||||
#e.g.
|
||||
@@ -186,76 +186,76 @@ Content-Length: 0
|
||||
```
|
||||
### **Shared Access Signature** (SAS)
|
||||
|
||||
Shared Access Signatures (SAS) su bezbedni, vremenski ograničeni URL-ovi koji **grant specific permissions to access resource**s u Azure Storage nalogu bez otkrivanja access keys naloga. Dok access keys obezbeđuju pun administrativni pristup svim resursima, SAS omogućava granularnu kontrolu određivanjem permissions (kao što su read ili write) i definisanjem vremena isteka.
|
||||
Shared Access Signatures (SAS) su bezbedni URL-ovi sa vremenskim ograničenjem koji **dodeljuju određene dozvole za pristup resurs**ima u Azure Storage nalogu, bez izlaganja access ključeva naloga. Dok access ključevi pružaju potpuni administrativni pristup svim resursima, SAS omogućava granularnu kontrolu navođenjem dozvola (kao što su read ili write) i definisanjem vremena isteka.
|
||||
|
||||
#### SAS Types
|
||||
#### Tipovi SAS-a
|
||||
|
||||
- **User delegation SAS**: Ovo se kreira iz **Entra ID principal** koji će potpisati SAS i delegirati permissions sa korisnika na SAS. Može se koristiti samo sa **blob and data lake storage** ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). Moguće je **revoke** sve generisane user delegated SAS.
|
||||
- Čak i ako je moguće generisati delegation SAS sa „više” permissions nego što korisnik ima. Međutim, ako principal nema ta permissions, neće raditi (no privesc).
|
||||
- **Service SAS**: Ovo se potpisuje koristeći jedan od storage account **access keys**. Može se koristiti za davanje pristupa određenim resursima u okviru jednog storage service-a. Ako se key obnovi, SAS će prestati da radi.
|
||||
- **Account SAS**: Takođe se potpisuje sa jednim od storage account **access keys**. Daje pristup resursima kroz storage account services (Blob, Queue, Table, File) i može uključivati service-level operations.
|
||||
- **User delegation SAS**: Kreira se iz **Entra ID principal-a**, koji potpisuje SAS i delegira dozvole sa user-a na SAS. Može se koristiti samo sa **blob i data lake storage** ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). Moguće je **opozvati** sve generisane user delegated SAS-ove.
|
||||
- Iako je moguće generisati delegation SAS sa "više" dozvola nego što ih user ima, ako ih principal nema, SAS neće raditi (nema privesc-a).
|
||||
- **Service SAS**: Potpisuje se pomoću jednog od access ključeva storage naloga. Može se koristiti za odobravanje pristupa određenim resursima u okviru jedne storage service. Ako se ključ obnovi, SAS će prestati da radi.
|
||||
- **Account SAS**: Takođe se potpisuje pomoću jednog od access ključeva storage naloga. Omogućava pristup resursima kroz services storage naloga (Blob, Queue, Table, File) i može uključivati operacije na nivou service-a.
|
||||
|
||||
A SAS URL potpisan sa **access key** izgleda ovako:
|
||||
SAS URL potpisan pomoću **access key-a** izgleda ovako:
|
||||
|
||||
- `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`
|
||||
|
||||
A SAS URL potpisan kao **user delegation** izgleda ovako:
|
||||
SAS URL potpisan kao **user delegation** izgleda ovako:
|
||||
|
||||
- `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`
|
||||
|
||||
Note some **http params**:
|
||||
Obratite pažnju na neke **http params**:
|
||||
|
||||
- **`se`** param označava **expiration date** SAS-a
|
||||
- **`sp`** param označava **permissions** SAS-a
|
||||
- Parametar **`se`** označava **datum isteka** SAS-a
|
||||
- Parametar **`sp`** označava **dozvole** SAS-a
|
||||
- **`sig`** je **signature** koja validira SAS
|
||||
|
||||
#### SAS permissions
|
||||
|
||||
Kada se generiše SAS, potrebno je navesti permissions koje treba da dodeljuje. U zavisnosti od objekta nad kojim se SAS generiše, mogu biti uključene različite permissions. Na primer:
|
||||
Prilikom generisanja SAS-a potrebno je navesti permissions koje treba da dodeli. U zavisnosti od objekta za koji se SAS generiše, mogu biti uključene različite permissions. Na primer:
|
||||
|
||||
- (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
|
||||
## SFTP podrška za Azure Blob Storage
|
||||
|
||||
Azure Blob Storage sada podržava SSH File Transfer Protocol (SFTP), omogućavajući bezbedan transfer fajlova i upravljanje direktno ka Blob Storage bez potrebe za custom solutions ili third-party products.
|
||||
Azure Blob Storage sada podržava SSH File Transfer Protocol (SFTP), omogućavajući bezbedan prenos datoteka i upravljanje njima direktno u Blob Storage-u, bez potrebe za custom rešenjima ili third-party proizvodima.
|
||||
|
||||
### Key Features
|
||||
### Ključne funkcije
|
||||
|
||||
- Protocol Support: SFTP radi sa Blob Storage nalozima konfigurisanih sa hierarchical namespace (HNS). Ovo organizuje blobs u directories i subdirectories radi lakše navigacije.
|
||||
- Security: SFTP može koristiti local user identities, ali takođe podržava Microsoft Entra ID-based access sa Azure RBAC za authorization. To znači da se access može dodeliti kroz uobičajene Blob Storage data-plane roles umesto kreiranja lokalnih SFTP korisnika. Local users mogu da se autentifikuju preko:
|
||||
- Azure-generated passwords
|
||||
- Public-private SSH key pairs
|
||||
- Granular Permissions: Permissions kao što su Read, Write, Delete, i List mogu se dodeliti local users za do 100 containers.
|
||||
- Networking Considerations: SFTP connections se uspostavljaju preko porta 22. Azure podržava network konfiguracije kao što su firewalls, private endpoints, ili virtual networks za zaštitu SFTP traffic-a.
|
||||
- Podrška za protokol: SFTP radi sa Blob Storage nalozima konfigurisanima sa hierarchical namespace (HNS). Ovo organizuje blob-ove u direktorijume i poddirektorijume radi lakše navigacije.
|
||||
- Bezbednost: SFTP može koristiti local user identitete, ali podržava i pristup zasnovan na Microsoft Entra ID-u sa Azure RBAC-om za autorizaciju. To znači da se pristup može dodeliti pomoću uobičajenih Blob Storage data-plane uloga, umesto kreiranja local SFTP user-a. Local user-i mogu da se autentifikuju pomoću:
|
||||
- Lozinki koje generiše Azure
|
||||
- SSH key parova sa public i private ključem
|
||||
- Granularne permissions: Permissions kao što su Read, Write, Delete i List mogu se dodeliti local user-ima za najviše 100 container-a.
|
||||
- Razmatranja u vezi sa networking-om: SFTP konekcije se ostvaruju preko porta 22. Azure podržava network konfiguracije kao što su firewall-ovi, private endpoint-i ili virtual network-ovi radi zaštite SFTP saobraćaja.
|
||||
|
||||
### Setup Requirements
|
||||
### Zahtevi za podešavanje
|
||||
|
||||
- Hierarchical Namespace: HNS mora biti omogućen prilikom kreiranja storage account-a.
|
||||
- Supported Encryption: Zahteva Microsoft Security Development Lifecycle (SDL)-approved cryptographic algorithms (npr. rsa-sha2-256, ecdsa-sha2-nistp256).
|
||||
- SFTP Configuration:
|
||||
- Omogućite SFTP na storage account-u.
|
||||
- Za local-user access, kreirajte local user identities sa odgovarajućim permissions.
|
||||
- Za local users, konfigurišite home directories da definišete njihovu početnu lokaciju unutar container-a.
|
||||
- Hierarchical Namespace: HNS mora biti omogućen prilikom kreiranja storage naloga.
|
||||
- Podržano encryption: Zahteva kriptografske algoritme odobrene prema Microsoft Security Development Lifecycle (SDL) standardu (npr. rsa-sha2-256, ecdsa-sha2-nistp256).
|
||||
- SFTP konfiguracija:
|
||||
- Omogućite SFTP na storage nalogu.
|
||||
- Za local-user pristup, kreirajte local user identitete sa odgovarajućim permissions.
|
||||
- Za local user-e, konfigurišite home direktorijume kako biste definisali njihovu početnu lokaciju unutar container-a.
|
||||
|
||||
### Permissions
|
||||
|
||||
| Permission | Symbol | Description |
|
||||
| ---------------------- | ------ | ------------------------------------ |
|
||||
| **Read** | `r` | Read file content. |
|
||||
| **Write** | `w` | Upload files and create directories. |
|
||||
| **List** | `l` | List contents of directories. |
|
||||
| **Delete** | `d` | Delete files or directories. |
|
||||
| **Create** | `c` | Create files or directories. |
|
||||
| **Modify Ownership** | `o` | Change the owning user or group. |
|
||||
| **Modify Permissions** | `p` | Change ACLs on files or directories. |
|
||||
| **Read** | `r` | Čitanje sadržaja datoteke. |
|
||||
| **Write** | `w` | Upload datoteka i kreiranje direktorijuma. |
|
||||
| **List** | `l` | Prikaz sadržaja direktorijuma. |
|
||||
| **Delete** | `d` | Brisanje datoteka ili direktorijuma. |
|
||||
| **Create** | `c` | Kreiranje datoteka ili direktorijuma. |
|
||||
| **Modify Ownership** | `o` | Promena user-a ili grupe koji su vlasnici. |
|
||||
| **Modify Permissions** | `p` | Promena ACL-ova na datotekama ili direktorijumima. |
|
||||
|
||||
## Enumeration
|
||||
## Enumeracija
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
|
||||
<details>
|
||||
<summary>az cli enumeration</summary>
|
||||
<summary>az cli enumeracija</summary>
|
||||
```bash
|
||||
# Get storage accounts
|
||||
az storage account list #Get the account name from here
|
||||
@@ -442,19 +442,19 @@ New-AzStorageBlobSASToken `
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
### File Shares
|
||||
### Deljeni fajlovi
|
||||
|
||||
{{#ref}}
|
||||
az-file-shares.md
|
||||
{{#endref}}
|
||||
|
||||
## Privilege Escalation
|
||||
## Eskalacija privilegija
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-storage-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
## Post Exploitation
|
||||
## Post exploitation
|
||||
|
||||
{{#ref}}
|
||||
../az-post-exploitation/az-blob-storage-post-exploitation.md
|
||||
@@ -466,7 +466,7 @@ az-file-shares.md
|
||||
../az-persistence/az-storage-persistence.md
|
||||
{{#endref}}
|
||||
|
||||
## References
|
||||
## Reference
|
||||
|
||||
- [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