diff --git a/src/pentesting-cloud/azure-security/az-services/az-sql.md b/src/pentesting-cloud/azure-security/az-services/az-sql.md index 2f29ee816..49277e1e2 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-sql.md +++ b/src/pentesting-cloud/azure-security/az-services/az-sql.md @@ -4,47 +4,47 @@ ## Azure SQL -Azure SQL, **Azure cloud içindeki SQL Server database engine** kullanan yönetilen, secure ve intelligent ürünlerden oluşan bir ailedir. Bu, sunucularınızın fiziksel yönetimiyle uğraşmanız gerekmediği ve verilerinizi yönetmeye odaklanabileceğiniz anlamına gelir. +Azure SQL, **Azure cloud'daki SQL Server database engine'ini** kullanan managed, güvenli ve akıllı ürünlerden oluşan bir ailedir. Bu, sunucularınızın fiziksel yönetimiyle ilgilenmenize gerek olmadığı ve verilerinizi yönetmeye odaklanabileceğiniz anlamına gelir. -Azure SQL dört ana tekliften oluşur: +Azure SQL dört ana offering'den oluşur: -1. **Azure SQL Server**: SQL Server databases için **deployment ve management** amacıyla bir server gerekir. -2. **Azure SQL Database**: Bu, Azure cloud içinde tekil databases barındırmanıza olanak tanıyan **fully-managed database service**'tir. -3. **Azure SQL Managed Instance**: Bu, daha büyük ölçekli, tüm SQL Server instance-scoped deployments için kullanılır. -4. **Azure SQL Server on Azure VMs**: Bu, **operating system** ve SQL Server instance üzerinde **control** istediğiniz architectures için en uygunudur. +1. **Azure SQL Server**: SQL Server database'lerinin **deployment ve yönetimi** için bir server gereklidir. +2. **Azure SQL Database**: Azure cloud'da ayrı database'leri barındırmanıza olanak tanıyan **fully-managed bir database service**'tir. +3. **Azure SQL Managed Instance**: Daha büyük ölçekli, tüm SQL Server instance kapsamındaki deployment'lar içindir. +4. **Azure VM'lerde Azure SQL Server**: **İşletim sistemi **ve SQL Server instance'ı üzerinde kontrol sahibi olmak istediğiniz architecture'lar için en iyi seçenektir. ### SQL Server Security Features **Network access:** -- Public endpoint (erişimi belirli networks ile sınırlayabilir). -- Private endpoints. -- Domain names based connections'ları kısıtlamak da mümkündür. -- Azure services'in buna erişmesine izin vermek de mümkündür (portal içindeki Query editor'ü kullanmak veya bir Azure VM'nin bağlanmasına izin vermek gibi). -- Eğer bir SQL Server üzerinde *Allow Azure services and resources to access this server* "Enabled" ise, Azure otomatik olarak Azure'dan kaynaklanan tüm network traffic'in SQL Server'a bağlanmasına izin veren gizli bir firewall rule oluşturur — herhangi bir tenant'taki resources dahil. -- Bu, geçerli SQL credentials elde ederseniz, kendi attacker‑controlled tenant'ınız içindeki bir Azure VM'den victim Azure SQL Server'a bağlanabileceğiniz anlamına gelir. [MS docs bunu açıklar](https://learn.microsoft.com/en-us/azure/azure-sql/database/network-access-controls-overview?view=azuresql#allow-azure-services) +- Public endpoint (erişimi belirli network'lerle sınırlandırabilir). +- Private endpoint'ler. +- Domain name'lere dayalı bağlantıları kısıtlamak da mümkündür. +- Azure service'lerinin buna erişmesine izin vermek de mümkündür (örneğin portal'daki Query editor'ı kullanmak veya bir Azure VM'nin bağlanmasına izin vermek için). +- Bir SQL Server'da *Allow Azure services and resources to access this server* ayarı "Enabled" olarak belirlenmişse Azure, Azure'dan kaynaklanan tüm network trafiğinin SQL Server'a bağlanmasına izin veren gizli bir firewall rule'ı otomatik olarak oluşturur — buna herhangi bir tenant'taki resource'lar da dahildir. +- Bu, geçerli SQL credential'larını elde ederseniz, kendi attacker-controlled tenant'ınızın içindeki bir Azure VM'den victim Azure SQL Server'a bağlanabileceğiniz anlamına gelir. [MS docs bunu açıklamaktadır](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: Service'e erişimi olacak Entra principals'ı belirtmeniz gerekir. -- **Both SQL and Microsoft Entra** authentication: Microsoft Entra ile birlikte username ve password kullanan geleneksel SQL authentication. -- **Only SQL** authentication: Yalnızca database users üzerinden erişime izin verilir. +- Microsoft **Entra-only** authentication: Service'e erişecek Entra principal'larını belirtmeniz gerekir. +- **Hem SQL hem de Microsoft Entra** authentication: Microsoft Entra'nın yanı sıra username ve password ile geleneksel SQL authentication. +- **Yalnızca SQL** authentication: Yalnızca database user'ları üzerinden erişime izin verir. -Eğer herhangi bir SQL auth'e izin veriliyorsa, bir admin user (username + password) belirtilmelidir ve Entra ID auth seçildiyse, admin access'e sahip en az bir principal da belirtilmelidir. +Herhangi bir SQL auth'ına izin verilirse bir admin user'ın (username + password) belirtilmesi gerekir; Entra ID auth seçilirse admin erişimine sahip en az bir principal'ın da belirtilmesi gerekir. **Encryption:** -- Buna “Transparent data encryption” denir ve databases, backups ve logs'u at rest halinde encrypt eder. -- Her zamanki gibi varsayılan olarak bir Azure managed key kullanılır, ancak customer managed encryption key (CMEK) de kullanılabilir. +- “Transparent data encryption” olarak adlandırılır ve database'leri, backup'ları ve log'ları at rest durumunda encrypt eder. +- Her zaman olduğu gibi varsayılan olarak bir Azure managed key kullanılır; ancak customer managed encryption key (CMEK) de kullanılabilir. **Managed Identities:** -- System ve user managed MIs atamak mümkündür. -- Encryption key'e erişmek için kullanılır (eğer bir CMEK kullanılıyorsa) ve databases içinden diğer services'e erişmek için de kullanılır. -- Database'den erişilebilen Azure services örnekleri için [docs'taki bu sayfaya](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-external-data-source-transact-sql) bakın -- Birden fazla UMI atanmışsa, kullanılacak default olanı belirtmek mümkündür. +- System ve user managed MI'leri atamak mümkündür. +- Encryption key'e (CMEK kullanılıyorsa) ve database'lerden diğer service'lere erişmek için kullanılır. +- Database'den erişilebilen Azure service'lerine dair bazı örnekler için [docs'un bu sayfasına](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-external-data-source-transact-sql) bakın. +- Birden fazla UMI atanmışsa kullanılacak varsayılanı belirtmek mümkündür. - Cross-tenant access için federated client identity yapılandırmak mümkündür. -Bir SQL database içinden bir blob storage'daki info'ya erişmek için bazı commands: +SQL database'inden bir blob storage içindeki bilgilere erişmek için bazı command'ler: ```sql -- Create a credential for the managed identity CREATE DATABASE SCOPED CREDENTIAL [ManagedIdentityCredential] @@ -71,58 +71,58 @@ GO ``` **Microsoft Defender:** -- “potansiyel database güvenlik açıklarını azaltmak ve anormal aktiviteleri tespit etmek” için faydalıdır -- Defender hakkında kendi dersimizde konuşacağız (diğer birkaç Azure service içinde etkinleştirilebilir) +- “Olası database vulnerabilities durumlarını azaltmak ve anormal aktiviteleri tespit etmek” için kullanışlıdır. +- Defender hakkında kendi lesson bölümümüzde konuşacağız (birkaç başka Azure service içinde de etkinleştirilebilir). **Backups:** -- Backup sıklığı retention policies içinde yönetilir. +- Backup frequency, retention policies içinde yönetilir. **Deleted databases:** -- Mevcut backups üzerinden silinmiş DB'leri restore etmek mümkündür. +- Mevcut backups kullanılarak silinmiş DB'leri restore etmek mümkündür. ## Azure SQL Database -**Azure SQL Database** **tam yönetilen bir database platform as a service (PaaS)**'tir ve ölçeklenebilir, güvenli relational database çözümleri sağlar. En yeni SQL Server teknolojileri üzerine kuruludur ve infrastructure yönetimi ihtiyacını ortadan kaldırarak cloud tabanlı applications için popüler bir seçenek haline gelir. +**Azure SQL Database**, ölçeklenebilir ve güvenli relational database çözümleri sağlayan **fully managed database platform as a service (PaaS)** ürünüdür. En yeni SQL Server teknolojileri üzerine kuruludur ve infrastructure management ihtiyacını ortadan kaldırır; bu nedenle cloud tabanlı uygulamalar için popüler bir tercihtir. -Bir SQL database oluşturmak için, onun barındırılacağı SQL server'ı belirtmek gerekir. +Bir SQL database oluşturmak için, database'in üzerinde barındırılacağı SQL server'ı belirtmek gerekir. ### SQL Database Security Features -- **Always Up-to-Date**: En son stable SQL Server sürümünde çalışır ve yeni features ile patches'i otomatik alır. +- **Always Up-to-Date**: SQL Server'ın en güncel stable version'ı üzerinde çalışır ve yeni feature'ları ve patch'leri otomatik olarak alır. - **Inherited SQL Server security features:** -- Authentication (SQL and/or Entra ID) +- Authentication (SQL ve/veya Entra ID) - Assigned Managed Identities - Network restrictions - Encryption - Backups - … -- **Data redundancy:** Seçenekler local, zone, Geo veya Geo-Zone redundant. -- **Ledger:** Verinin bütünlüğünü cryptographically doğrular ve herhangi bir tampering'in tespit edilmesini sağlar. financial, medical ve sensitive data yöneten her organization için faydalıdır. +- **Data redundancy:** Local, zone, Geo veya Geo-Zone redundant seçenekleri bulunur. +- **Ledger:** Verilerin bütünlüğünü cryptographic olarak doğrulayarak herhangi bir tampering durumunun tespit edilmesini sağlar. Financial, medical ve sensitive data yöneten diğer kuruluşlar için kullanışlıdır. -Bir SQL database bir **elastic Pool** parçası olabilir. Elastic pools, birden fazla database'i yönetmek için compute (eDTUs) ve storage kaynaklarını aralarında paylaşan, maliyet açısından verimli bir çözümdür; fiyatlandırma yalnızca ayrılan kaynaklara dayanır, database sayısına değil. +Bir SQL database **elastic Pool**'un parçası olabilir. Elastic pools, birden fazla database'i aralarında configurable compute (eDTUs) ve storage resources paylaşarak yönetmek için cost-effective bir çözümdür. Pricing, database sayısı yerine yalnızca ayrılan resources temel alınarak belirlenir. #### Azure SQL Column Level Security (Masking) & Row Level Security -**Azure SQL's dynamic** data masking, sensitive bilgileri yetkisiz users'tan gizleyerek korumaya yardımcı olan bir özelliktir. Gerçek veriyi değiştirmek yerine, gösterilen veriyi dinamik olarak maskeler ve credit card numbers gibi sensitive detayların gizlenmesini sağlar. +**Azure SQL'ın dynamic** data masking özelliği, **sensitive information'ı unauthorized users'tan gizleyerek korumaya** yardımcı olur. Gerçek data'yı değiştirmek yerine görüntülenen data'yı dynamic olarak maskeler ve credit card numbers gibi sensitive detayların gizlenmesini sağlar. -**Dynamic Data Masking**, unmasked olanlar (bu users belirtilmelidir) ve administrators dışındaki tüm users'ı etkiler. Configuration option, dynamic data masking'den muaf tutulacak hangi SQL users'ın olduğunu belirtir; **administrators her zaman hariç tutulur**. +**Dynamic Data Masking**, unmasked olan users (bu users belirtilmelidir) ve administrators dışındaki tüm users'ı etkiler. Hangi SQL users'ın dynamic data masking'den muaf olduğunu belirten bir configuration seçeneğine sahiptir; **administrators her zaman hariç tutulur**. -**Azure SQL Row Level Security (RLS)**, bir user'ın hangi rows'u görebileceğini veya modify edebileceğini kontrol eden bir özelliktir ve her user'ın yalnızca kendisiyle ilgili veriyi görmesini sağlar. Filter veya block predicates ile security policies oluşturarak organizations database seviyesinde fine-grained access uygulayabilir. +**Azure SQL Row Level Security (RLS)**, bir user'ın hangi rows'ları görüntüleyebileceğini veya değiştirebileceğini **kontrol eden** ve her user'ın yalnızca kendisiyle ilgili data'yı görmesini sağlayan bir feature'dır. Filter veya block predicates içeren security policies oluşturularak kuruluşlar database seviyesinde fine-grained access uygulayabilir. ### Azure SQL Managed Instance -**Azure SQL Managed Instances**, daha büyük ölçekli, tüm SQL Server instance-scoped deployments içindir. En güncel on-premises SQL Server (Enterprise Edition) Database Engine ile neredeyse %100 compatibility sağlar; native virtual network (VNet) implementation sunar, yaygın security concerns'ları ele alır ve on-premises SQL Server müşterileri için uygun bir business model sağlar. +**Azure SQL Managed Instances**, daha büyük ölçekli, tüm SQL Server instance kapsamındaki deployment'lar içindir. En güncel SQL Server on-premises (Enterprise Edition) Database Engine ile neredeyse %100 compatibility sağlar. Ayrıca yaygın security endişelerini gideren native bir virtual network (VNet) implementation'ı ve on-premises SQL Server müşterileri için uygun bir business model sunar. ### Azure SQL Virtual Machines -**Azure SQL Virtual Machines**, **operating system** ve SQL Server instance üzerinde **kontrol** sağlar; çünkü SQL server'ı çalıştıran VM service içinde bir VM spawn edilir. +**Azure SQL Virtual Machines**, SQL Server'ı çalıştıran bir VM, VM service içinde spawn edileceği için **operating system'i** ve SQL Server instance'ını **kontrol etmeye** olanak tanır. -Bir SQL Virtual Machine oluşturulduğunda, SQL server'ı barındıracak VM'nin **tüm settings'lerini seçmek** mümkündür (VM dersinde gösterildiği gibi). -- Bu, VM'nin bazı VNet'lere erişeceği, ona **Managed Identities attached** olabileceği, file shares mount edilmiş olabileceği anlamına gelir… bu da **SQL'den VM'ye pivoting** yapmayı çok ilginç hale getirir. -- Ayrıca, SQL'nin belirli bir key vault'a erişmesine izin vermek için bir app id ve secret configure etmek mümkündür; bu key vault sensitive info içerebilir. +Bir SQL Virtual Machine oluşturulduğunda, SQL server'ı barındıracak **VM'in tüm settings'lerini seçmek** mümkündür (VM lesson bölümünde gösterildiği gibi). +- Bu, VM'in bazı VNet'lere erişebileceği, kendisine **Managed Identities attach edilmiş** olabileceği, file shares mount edilmiş olabileceği anlamına gelir… Bu durum SQL'den VM'e **pivoting yapmayı** oldukça ilginç hale getirir. +- Ayrıca SQL'in belirli bir key vault'a erişmesine **izin vermek** için bir app id ve secret configure etmek mümkündür; bu key vault sensitive info içerebilir. -Ayrıca **automatic SQL updates**, **automatic backups**, **Entra ID authentication** ve diğer SQL services'in çoğu feature'ı da configure edilebilir. +**automatic SQL updates**, **automatic backups**, **Entra ID authentication** ve diğer SQL services'lerin çoğundaki feature'lar gibi seçenekleri configure etmek de mümkündür. ## Enumeration @@ -261,7 +261,7 @@ Get-AzSqlVM {{#endtab}} {{#endtabs}} -Ayrıca, eğer veritabanı içindeki Dynamic Data Masking ve Row Level politikalarını enumerate etmek istiyorsanız, şu sorguyu kullanabilirsiniz: +Ek olarak, veritabanı içindeki Dynamic Data Masking ve Row Level policies öğelerini enumerate etmek isterseniz şu sorguyu çalıştırabilirsiniz: ```sql --Enumerates the masked columns SELECT @@ -286,9 +286,9 @@ JOIN sys.security_predicates AS sp2 ON sp.object_id = sp2.object_id; ``` -### Bağlan ve SQL sorguları çalıştır +### Bağlanın ve SQL sorgularını çalıştırın -Örnek olarak [enumerating an Az WebApp](az-app-services.md) üzerinden bir connection string (credentials içeren) bulabilirdiniz: +Örnek olarak bir [Az WebApp enumerate ederken](az-app-services.md) bağlantı dizesi (kimlik bilgilerini içeren) bulabilirsiniz: ```bash function invoke-sql{ param($query) @@ -307,11 +307,11 @@ $Connection.Close() invoke-sql 'Select Distinct TABLE_NAME From information_schema.TABLES;' ``` -Ayrıca veritabanına erişmek için sqlcmd kullanabilirsiniz. Sunucunun public connections'a izin verip vermediğini `az sql server show --name --resource-group ` ile, ayrıca firewall rule'un IP'mize erişim izni verip vermediğini bilmek önemlidir: +Veritabanına erişmek için `sqlcmd` de kullanabilirsiniz. Sunucunun genel bağlantılara izin verip vermediğini `az sql server show --name --resource-group ` komutuyla ve ayrıca firewall kuralının IP adresimizin erişmesine izin verip vermediğini bilmek önemlidir: ```bash sqlcmd -S .database.windows.net -U -P -d ``` -## Referanslar +## Kaynaklar - [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) diff --git a/src/pentesting-cloud/azure-security/az-services/az-storage.md b/src/pentesting-cloud/azure-security/az-services/az-storage.md index e033ea5a8..3e50022ff 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-storage.md +++ b/src/pentesting-cloud/azure-security/az-services/az-storage.md @@ -4,54 +4,54 @@ ## Temel Bilgiler -Azure Storage Accounts, Microsoft Azure içinde, blobs (binary large objects), files, queues ve tables dahil olmak üzere çeşitli veri türleri için ölçeklenebilir, güvenli ve yüksek erişilebilir cloud **storage** sağlayan temel hizmetlerdir. Bunlar, bu farklı storage hizmetlerini kolay yönetim için tek bir namespace altında gruplayan container'lar olarak görev yapar. +Azure Storage Accounts, Microsoft Azure'da blob'lar (binary large objects), dosyalar, kuyruklar ve tablolar dahil olmak üzere çeşitli veri türleri için ölçeklenebilir, güvenli ve yüksek oranda kullanılabilir cloud **storage sağlayan temel hizmetlerdir**. Kolay yönetim için bu farklı storage hizmetlerini tek bir namespace altında gruplandıran container'lar olarak görev yaparlar. **Ana yapılandırma seçenekleri**: -- Her storage account, tüm Azure genelinde **benzersiz bir ada** sahip olmalıdır. -- Her storage account bir **region** içinde veya bir Azure extended zone içinde deploy edilir -- Daha iyi performans için storage account'un **premium** sürümünü seçmek mümkündür -- Rack, drive ve datacenter **failures**'larına karşı koruma sağlamak için **4 tür redundancy** arasından seçim yapmak mümkündür. +- Her storage account'un **tüm Azure genelinde benzersiz bir adı** olmalıdır. +- Her storage account bir **region** veya Azure extended zone içinde dağıtılır. +- Daha iyi performans için storage account'un **premium** sürümünü seçmek mümkündür. +- Rack, drive ve datacenter **arızalarına** karşı koruma sağlamak için **4 redundancy türü arasından** seçim yapmak mümkündür. -**Güvenlik yapılandırma seçenekleri**: +**Güvenlik yapılandırması seçenekleri**: -- **REST API operations için secure transfer zorunlu kıl**: storage ile yapılan herhangi bir iletişimde TLS zorunlu kılar -- **Bireysel container'larda anonymous access etkinleştirmeye izin verir**: Aksi halde, gelecekte anonymous access etkinleştirmek mümkün olmaz -- **storage account key access etkinleştir**: Aksi halde, Shared Keys ile access yasaklanır -- **Minimum TLS version** -- **copy operations için izin verilen scope**: Herhangi bir storage account'tan, aynı Entra tenant içindeki herhangi bir storage account'tan veya aynı virtual network içindeki private endpoints'e sahip storage account'tan izin ver +- **REST API işlemleri için güvenli aktarım gerektir**: Storage ile yapılan tüm iletişimlerde TLS gerektirir. +- **Ayrı container'larda anonymous access etkinleştirilmesine izin verir**: Aksi takdirde gelecekte anonymous access etkinleştirmek mümkün olmaz. +- **Storage account key access'i etkinleştir**: Etkin değilse Shared Keys ile access yasaklanır. +- **Minimum TLS sürümü** +- **Copy işlemleri için izin verilen kapsam**: Herhangi bir storage account'tan, aynı Entra tenant içindeki herhangi bir storage account'tan veya aynı virtual network içinde private endpoint'lere sahip storage account'lardan izin verir. **Blob Storage seçenekleri**: -- **Cross-tenant replication'a izin ver** -- **Access tier**: Hot (sık erişilen data), Cool ve Cold (nadiren erişilen data) +- **Tenant'lar arası replication'a izin ver** +- **Access tier**: Hot (sık erişilen veriler), Cool ve Cold (nadiren erişilen veriler) **Networking seçenekleri**: - **Network access**: -- Tüm networks'ten izin ver -- Seçili virtual networks ve IP addresses'lerden izin ver +- Tüm network'lerden izin ver +- Seçilen virtual network'lerden ve IP adreslerinden izin ver - Public access'i devre dışı bırak ve private access kullan -- **Private endpoints**: Bir virtual network'ten storage account'a private connection sağlar +- **Private endpoint'ler**: Bir virtual network'ten storage account'a private connection sağlar. **Data protection seçenekleri**: -- **Container'lar için point-in-time restore**: Container'ları daha önceki bir state'e geri yüklemeye izin verir -- Versioning, change feed ve blob soft delete etkinleştirilmiş olmasını gerektirir. -- **Blobs için soft delete etkinleştir**: Silinen (üzerine yazılanlar dahil) blobs için gün cinsinden bir retention period etkinleştirir -- **Container'lar için soft delete etkinleştir**: Silinen container'lar için gün cinsinden bir retention period etkinleştirir -- **File shares için soft delete etkinleştir**: Silinen file shared için gün cinsinden bir retention period etkinleştirir -- **Blobs için versioning etkinleştir**: Blobs'larınızın önceki sürümlerini korur -- **Blob change feed etkinleştir**: Blobs üzerindeki create, modification ve delete değişikliklerinin loglarını tutar -- **Version-level immutability support etkinleştir**: Account-level'da tüm blob sürümlerine uygulanacak time-based retention policy ayarlamanıza izin verir. -- Version-level immutability support ve container'lar için point-in-time restore aynı anda etkinleştirilemez. +- **Container'lar için point-in-time restore**: Container'ları önceki bir duruma geri yüklemeyi sağlar. +- Versioning, change feed ve blob soft delete'in etkinleştirilmesini gerektirir. +- **Blob'lar için soft delete'i etkinleştir**: Silinen blob'lar (üzerine yazılanlar dahil) için gün cinsinden bir retention period etkinleştirir. +- **Container'lar için soft delete'i etkinleştir**: Silinen container'lar için gün cinsinden bir retention period etkinleştirir. +- **File share'ler için soft delete'i etkinleştir**: Silinen file share'ler için gün cinsinden bir retention period etkinleştirir. +- **Blob'lar için versioning'i etkinleştir**: Blob'larınızın önceki sürümlerini korur. +- **Blob change feed'i etkinleştir**: Blob'larda oluşturma, değiştirme ve silme değişikliklerinin log'larını tutar. +- **Version-level immutability desteğini etkinleştir**: Tüm blob sürümlerine uygulanacak, account-level üzerinde time-based retention policy ayarlamanızı sağlar. +- Version-level immutability desteği ile container'lar için point-in-time restore aynı anda etkinleştirilemez. -**Encryption yapılandırma seçenekleri**: +**Encryption yapılandırması seçenekleri**: -- **Encryption type**: Microsoft-managed keys (MMK) veya Customer-managed keys (CMK) kullanmak mümkündür -- **Infrastructure encryption etkinleştir**: Veri için "daha fazla güvenlik" amacıyla çift encryption yapılmasına izin verir +- **Encryption türü**: Microsoft-managed keys (MMK) veya Customer-managed keys (CMK) kullanmak mümkündür. +- **Infrastructure encryption'ı etkinleştir**: Verileri "daha fazla güvenlik için" double encrypt etmeyi sağlar. -### Storage endpoints +### Storage endpoint'leri | Storage Service | Endpoint | | --- | --- | @@ -64,19 +64,19 @@ Azure Storage Accounts, Microsoft Azure içinde, blobs (binary large objects), f ### Public Exposure -Eğer "Allow Blob public access" **etkinleştirilmişse** (varsayılan olarak devre dışı), bir container oluşturulurken şunlar mümkündür: +"Allow Blob public access" **etkinse** (varsayılan olarak devre dışıdır), bir container oluşturulurken şunlar yapılabilir: -- Blobs'ları okumak için **public access** verin (adı bilmeniz gerekir). -- Container blobs'larını **listeleyin** ve onları **okuyun**. -- Tamamen **private** yapın +- **Blob'ları okumak için public access verilebilir** (adı bilmeniz gerekir). +- **Container blob'ları listelenebilir** ve **okunabilir**. +- Tamamen **private** yapılabilir.
### Static website (`$web`) exposure & leaked secrets -- **Static websites** özel `$web` container'ından `https://.z13.web.core.windows.net/` gibi bölgeye özgü bir endpoint üzerinden sunulur. -- `$web` container'ı blob API üzerinden `publicAccess: null` döndürebilir, ancak dosyalar static site endpoint'i üzerinden yine de erişilebilir durumdadır; bu yüzden oraya config/IaC artifacts bırakmak secrets leak'e yol açabilir. -- Hızlı audit workflow: +- **Static website'ler**, `https://.z13.web.core.windows.net/` gibi region'a özel bir endpoint üzerinden özel `$web` container'ından sunulur. +- `$web` container'ı blob API üzerinden `publicAccess: null` bildirebilir, ancak dosyalara static site endpoint'i üzerinden hâlâ erişilebilir; bu nedenle config/IaC artifact'lerini buraya bırakmak secret'ların leak olmasına neden olabilir. +- Hızlı audit workflow'u: ```bash # Identify storage accounts with static website hosting enabled az storage blob service-properties show --account-name --auth-mode login @@ -87,53 +87,53 @@ az storage blob list --container-name '$web' --account-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 --auth-mode login ``` -### Anonim blob exposure denetimi +### Anonymous blob exposure denetimi -- **Veri ifşa edebilen storage account'ları bulun**: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Eğer `allowBlobPublicAccess` `false` ise container'ları public yapamazsınız. -- **Riskli account'ları inceleyin**: flag'i ve diğer zayıf ayarları doğrulamak için: `az storage account show --name --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`. -- **Flag etkin olduğunda container seviyesindeki exposure'ı enumerate edin**: +- Veri expose edebilen **storage account'ları bulun**: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. `allowBlobPublicAccess` `false` ise container'ları public yapamazsınız. +- Flag'i ve diğer zayıf ayarları doğrulamak için **riskli account'ları inceleyin**: `az storage account show --name --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`. +- Flag'in etkin olduğu yerlerde **container-level exposure'ı enumerate edin**: ```bash az storage container list --account-name \ --query '[].{name:name, access:properties.publicAccess}' ``` -- `"Blob"`: anonim okuma **yalnızca blob adı bilindiğinde** izinlidir (listeleme yok). -- `"Container"`: her blob için anonim **listeleme + okuma**. -- `null`: özel; kimlik doğrulama gerekir. -- **Kimlik bilgileri olmadan erişimi kanıtla**: -- Eğer `publicAccess` `Container` ise, anonim listeleme çalışır: `curl "https://.blob.core.windows.net/?restype=container&comp=list"`. -- Hem `Blob` hem de `Container` için, ad biliniyorsa anonim blob indirme çalışır: +- `"Blob"`: yalnızca blob adı biliniyorsa anonymous okumaya izin verilir (listeleme yoktur). +- `"Container"`: her blob için anonymous **listeleme + okuma**. +- `null`: private; authentication gereklidir. +- **Erişimi credentials olmadan kanıtlayın:** +- `publicAccess` değeri `Container` ise anonymous listeleme çalışır: `curl "https://.blob.core.windows.net/?restype=container&comp=list"`. +- Hem `Blob` hem de `Container` için, adı biliniyorsa anonymous blob indirme çalışır: ```bash az storage blob download -c -n --account-name --file /dev/stdout # or via raw HTTP curl "https://.blob.core.windows.net//" ``` -### Connect to Storage +### Storage'a Bağlan -Eğer bağlanabileceğiniz herhangi bir **storage** bulursanız, bunu yapmak için [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) aracını kullanabilirsiniz. +Bağlanabileceğiniz herhangi bir **storage** bulursanız, bunu yapmak için [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) aracını kullanabilirsiniz. -## Access to Storage +## Storage'a Erişim ### RBAC -**RBAC roles** ile Entra ID principals kullanarak storage accounts’a erişmek mümkündür ve bu önerilen yöntemdir. +Storage hesaplarına erişmek için **RBAC rollerine** sahip Entra ID principal'larını kullanmak mümkündür ve önerilen yöntem budur. ### Access Keys -Storage accounts, erişim için kullanılabilecek access keys’e sahiptir. Bu, storage account’a **tam erişim sağlar.** +Storage hesaplarında, hesaba erişmek için kullanılabilecek access key'ler bulunur. Bu, **storage hesabına tam erişim** sağlar.
### **Shared Keys & Lite Shared Keys** -[**Shared Keys oluşturmak**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) mümkündür; bunlar access keys ile imzalanır ve signed URL aracılığıyla belirli resources’a erişimi yetkilendirir. +Bir signed URL aracılığıyla belirli kaynaklara erişimi yetkilendirmek için access key'lerle imzalanmış [**Shared Keys oluşturmak**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) mümkündür. > [!NOTE] -> `CanonicalizedResource` kısmının storage services resource (URI) temsil ettiğini unutmayın. Ve URL’de herhangi bir bölüm encoded ise, `CanonicalizedResource` içinde de encoded olmalıdır. +> `CanonicalizedResource` bölümünün storage services kaynağını (URI) temsil ettiğini unutmayın. URL'deki herhangi bir bölüm encode edilmişse `CanonicalizedResource` içinde de encode edilmelidir. > [!NOTE] -> Bu, istekleri authenticate etmek için varsayılan olarak **`az` cli** tarafından kullanılır. Bunu Entra ID principal credentials kullanacak şekilde yapmak için `--auth-mode login` parametresini belirtin. +> Bu yöntem, istekleri authenticate etmek için **varsayılan olarak `az` cli tarafından kullanılır**. Entra ID principal kimlik bilgilerini kullanmasını sağlamak için `--auth-mode login` parametresini belirtin. -- Şu bilgileri imzalayarak blob, queue ve file services için bir **shared key** oluşturmak mümkündür: +- Aşağıdaki bilgileri imzalayarak **blob, queue ve file servisleri için bir shared key** oluşturmak mümkündür: ```bash StringToSign = VERB + "\n" + Content-Encoding + "\n" + @@ -150,7 +150,7 @@ Range + "\n" + CanonicalizedHeaders + CanonicalizedResource; ``` -- Aşağıdaki bilgileri imzalayarak **table services için shared key** oluşturmak mümkündür: +- Aşağıdaki bilgileri imzalayarak **table services için paylaşılan bir anahtar** oluşturmak mümkündür: ```bash StringToSign = VERB + "\n" + Content-MD5 + "\n" + @@ -158,7 +158,7 @@ Content-Type + "\n" + Date + "\n" + CanonicalizedResource; ``` -- Aşağıdaki bilgileri imzalayarak blob, queue ve file services için bir **lite shared key** oluşturmak mümkündür: +- Aşağıdaki bilgileri imzalayarak **blob, queue ve file services için bir lite shared key** oluşturmak mümkündür: ```bash StringToSign = VERB + "\n" + Content-MD5 + "\n" + @@ -167,12 +167,12 @@ Date + "\n" + CanonicalizedHeaders + CanonicalizedResource; ``` -- Şu bilgileri imzalayarak **table services için lite shared key** oluşturmak mümkündür: +- Aşağıdaki bilgileri imzalayarak **table services için lite shared key** oluşturmak mümkündür: ```bash StringToSign = Date + "\n" CanonicalizedResource ``` -Ardından, key'i kullanmak için, Authorization header içinde aşağıdaki syntax ile yapılabilir: +Ardından, anahtarı kullanmak için Authorization header içinde şu sözdizimi izlenerek kullanılabilir: ```bash Authorization="[SharedKey|SharedKeyLite] :" #e.g. @@ -186,68 +186,68 @@ Content-Length: 0 ``` ### **Shared Access Signature** (SAS) -Shared Access Signatures (SAS), Azure Storage hesabındaki resource**lara** erişmek için **belirli permissions veren** secure, zaman sınırlı URL’lerdir ve account's access keys açığa çıkarmadan çalışır. Access keys tüm resources için tam administrative access sağlarken, SAS izinleri (read veya write gibi) belirtip bir expiration time tanımlayarak granular control sağlar. +Shared Access Signatures (SAS), bir Azure Storage hesabındaki **resource**'lara, hesabın access key'lerini açığa çıkarmadan erişim için **belirli izinler tanıyan**, güvenli ve süre sınırlı URL'lerdir. Access key'leri tüm resource'lara tam yönetici erişimi sağlarken SAS, izinleri (okuma veya yazma gibi) belirleyip bir sona erme zamanı tanımlayarak ayrıntılı kontrol sağlar. #### SAS Types -- **User delegation SAS**: Bu, SAS’i imzalayan ve permissions’ları user’dan SAS’e delege eden bir **Entra ID principal** üzerinden oluşturulur. Yalnızca **blob and data lake storage** ile kullanılabilir ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). Oluşturulan tüm user delegated SAS’leri **revoke** etmek mümkündür. -- Kullanıcının sahip olduğundan daha “fazla” permissions ile bir delegation SAS üretmek mümkün olsa da, principal bunlara sahip değilse çalışmaz (no privesc). -- **Service SAS**: Bu, storage account **access keys**’den biri kullanılarak imzalanır. Tek bir storage service içinde belirli resources’a erişim vermek için kullanılabilir. Key yenilenirse, SAS çalışmayı durdurur. -- **Account SAS**: Bu da storage account **access keys**’den biriyle imzalanır. Bir storage account services (Blob, Queue, Table, File) genelindeki resources’a erişim verir ve service-level operations içerebilir. +- **User delegation SAS**: SAS'ı imzalayacak ve izinleri user'dan SAS'a devredecek bir **Entra ID principal** üzerinden oluşturulur. Yalnızca **blob and data lake storage** ile kullanılabilir ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). Oluşturulan tüm user delegated SAS'ları **revoke** etmek mümkündür. +- Kullanıcının sahip olduğundan "daha fazla" izin içeren bir delegation SAS oluşturmak mümkün olsa bile, principal bu izinlere sahip değilse çalışmaz (no privesc). +- **Service SAS**: Storage account **access keys**'lerinden biri kullanılarak imzalanır. Tek bir storage service içindeki belirli resource'lara erişim sağlamak için kullanılabilir. Key yenilenirse SAS çalışmayı durdurur. +- **Account SAS**: Bu da storage account **access keys**'lerinden biriyle imzalanır. Bir storage account içindeki service'ler (Blob, Queue, Table, File) genelindeki resource'lara erişim sağlar ve service-level operation'ları içerebilir. -Bir **access key** ile imzalanmış SAS URL’si şöyle görünür: +Bir **access key** ile imzalanmış SAS URL'si şu şekildedir: - `https://.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` -Bir **user delegation** olarak imzalanmış SAS URL’si şöyle görünür: +**User delegation** olarak imzalanmış bir SAS URL'si şu şekildedir: - `https://.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` -Bazı **http params** notları: +Bazı **http params**: -- **`se`** parametresi SAS’in **expiration date**’ini belirtir -- **`sp`** parametresi SAS’in **permissions**’unu belirtir -- **`sig`** SAS’i doğrulayan **signature**’dır +- **`se`** parametresi SAS'ın **expiration date**'ini belirtir +- **`sp`** parametresi SAS'ın **permissions**'larını belirtir +- **`sig`**, SAS'ı doğrulayan **signature**'dır #### SAS permissions -Bir SAS oluştururken, hangi permissions’ları vereceğinin belirtilmesi gerekir. SAS’in üretildiği objeye bağlı olarak farklı permissions’lar dahil edilebilir. Örneğin: +Bir SAS oluşturulurken, tanıması gereken izinlerin belirtilmesi gerekir. SAS'ın oluşturulduğu objeye bağlı olarak farklı izinler dahil edilebilir. Örneğin: - (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 ## Azure Blob Storage için SFTP Support -Azure Blob Storage artık SSH File Transfer Protocol (SFTP) desteği sunuyor; bu da custom solutions veya third-party products gerektirmeden doğrudan Blob Storage’a secure file transfer ve management yapılmasını sağlar. +Azure Blob Storage artık SSH File Transfer Protocol'ü (SFTP) destekleyerek, custom solution'lar veya third-party product'lar gerektirmeden doğrudan Blob Storage'a güvenli dosya transferi ve yönetimi sağlar. ### Key Features -- Protocol Support: SFTP, hierarchical namespace (HNS) ile yapılandırılmış Blob Storage accounts ile çalışır. Bu, blobs’ları daha kolay navigation için directories ve subdirectories içine organize eder. -- Security: SFTP local user identities kullanabilir, ancak authorization için Azure RBAC ile Microsoft Entra ID-based access de destekler. Bu, access’in local SFTP users oluşturmak yerine alışılmış Blob Storage data-plane roles ile verilebileceği anlamına gelir. Local users aşağıdaki yollarla authenticate olabilir: -- Azure-generated passwords -- Public-private SSH key pairs -- Granular Permissions: Read, Write, Delete ve List gibi permissions’lar local users’a en fazla 100 containers için atanabilir. -- Networking Considerations: SFTP connections port 22 üzerinden yapılır. Azure, SFTP traffic’i güvenceye almak için firewalls, private endpoints veya virtual networks gibi network configurations destekler. +- Protocol Support: SFTP, hierarchical namespace (HNS) ile yapılandırılmış Blob Storage account'larıyla çalışır. Bu, daha kolay navigation için blob'ları directory ve subdirectory'ler halinde organize eder. +- Security: SFTP local user identity'lerini kullanabilir; ancak authorization için Azure RBAC ile Microsoft Entra ID tabanlı access'i de destekler. Bu, local SFTP user'ları oluşturmadan, alışılmış Blob Storage data-plane role'larıyla access verilebileceği anlamına gelir. Local user'lar şu yöntemlerle authenticate olabilir: +- Azure-generated password'lar +- Public-private SSH key pair'leri +- Granular Permissions: Read, Write, Delete ve List gibi permission'lar, en fazla 100 container için local user'lara atanabilir. +- Networking Considerations: SFTP connection'ları port 22 üzerinden yapılır. Azure, SFTP traffic'ini güvence altına almak için firewall, private endpoint veya virtual network gibi network configuration'larını destekler. ### Setup Requirements -- Hierarchical Namespace: storage account oluşturulurken HNS etkinleştirilmelidir. -- Supported Encryption: Microsoft Security Development Lifecycle (SDL) onaylı cryptographic algorithms gerektirir (ör. rsa-sha2-256, ecdsa-sha2-nistp256). +- Hierarchical Namespace: HNS, storage account oluşturulurken etkinleştirilmelidir. +- Supported Encryption: Microsoft Security Development Lifecycle (SDL) onaylı cryptographic algorithm'ları (ör. rsa-sha2-256, ecdsa-sha2-nistp256) gerektirir. - SFTP Configuration: -- storage account üzerinde SFTP etkinleştirin. -- local-user access için, uygun permissions’lara sahip local user identities oluşturun. -- local users için, container içindeki başlangıç konumlarını tanımlamak üzere home directories yapılandırın. +- Storage account üzerinde SFTP'yi etkinleştirin. +- Local-user access için uygun permission'lara sahip local user identity'leri oluşturun. +- Local user'lar için container içindeki başlangıç konumlarını tanımlayan home directory'leri yapılandırın. ### 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` | Dosya içeriğini okur. | +| **Write** | `w` | Dosyaları upload eder ve directory'ler oluşturur. | +| **List** | `l` | Directory'lerin içeriklerini listeler. | +| **Delete** | `d` | Dosyaları veya directory'leri siler. | +| **Create** | `c` | Dosyalar veya directory'ler oluşturur. | +| **Modify Ownership** | `o` | Sahip user'ı veya group'u değiştirir. | +| **Modify Permissions** | `p` | Dosya veya directory'ler üzerindeki ACL'leri değiştirir. | ## Enumeration @@ -442,31 +442,31 @@ New-AzStorageBlobSASToken ` {{#endtab }} {{#endtabs }} -### File Shares +### Dosya Paylaşımları {{#ref}} az-file-shares.md {{#endref}} -## Privilege Escalation +## Yetki Yükseltme {{#ref}} ../az-privilege-escalation/az-storage-privesc.md {{#endref}} -## Post Exploitation +## Sömürü Sonrası {{#ref}} ../az-post-exploitation/az-blob-storage-post-exploitation.md {{#endref}} -## Persistence +## Kalıcılık {{#ref}} ../az-persistence/az-storage-persistence.md {{#endref}} -## References +## Referanslar - [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)