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

This commit is contained in:
Translator
2026-07-17 06:10:09 +00:00
parent a4f8666c73
commit c08d678871
2 changed files with 142 additions and 142 deletions
@@ -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)