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 319696d71..2f29ee816 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-sql.md +++ b/src/pentesting-cloud/azure-security/az-services/az-sql.md @@ -4,45 +4,47 @@ ## Azure SQL -Azure SQL, **Azure bulutundaki SQL Server veritabanı motorunu** kullanan yönetilen, güvenli ve akıllı ürünler ailesidir. Bu, sunucularınızın fiziksel yönetimiyle ilgili endişelenmenize gerek olmadığı ve verilerinizi yönetmeye odaklanabileceğiniz anlamına gelir. +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, dört ana teklifi içerir: +Azure SQL dört ana tekliften oluşur: -1. **Azure SQL Server**: SQL Server veritabanlarının **dağıtımı ve yönetimi** için bir sunucu gereklidir. -2. **Azure SQL Database**: Bu, Azure bulutunda bireysel veritabanlarını barındırmanıza olanak tanıyan **tamamen yönetilen bir veritabanı hizmetidir**. -3. **Azure SQL Managed Instance**: Bu, daha büyük ölçekli, tüm SQL Server örneği kapsamındaki dağıtımlar içindir. -4. **Azure SQL Server on Azure VMs**: Bu, **işletim sistemi** ve SQL Server örneği üzerinde **kontrol** istediğiniz mimariler için en iyisidir. +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. -### SQL Server Güvenlik Özellikleri +### SQL Server Security Features -**Ağ erişimi:** +**Network access:** -- Kamu uç noktası (erişimi belirli ağlarla sınırlayabilir). -- Özel uç noktalar. -- Alan adlarına dayalı bağlantıları kısıtlamak da mümkündür. -- Azure hizmetlerinin erişimine izin vermek de mümkündür (örneğin, portalda Sorgu düzenleyicisini kullanmak veya bir Azure VM'nin bağlanmasına izin vermek için). +- 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) -**Kimlik Doğrulama Yöntemleri:** +**Authentication Methods:** -- Microsoft **Entra-only** kimlik doğrulaması: Hizmete erişimi olacak Entra ilkelerini belirtmeniz gerekir. -- **Hem SQL hem de Microsoft Entra** kimlik doğrulaması: Kullanıcı adı ve şifre ile birlikte geleneksel SQL kimlik doğrulaması. -- **Sadece SQL** kimlik doğrulaması: Erişimi yalnızca veritabanı kullanıcıları aracılığıyla sağlamak. +- 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. -Herhangi bir SQL kimlik doğrulamasına izin verilirse, bir yönetici kullanıcısı (kullanıcı adı + şifre) belirtilmelidir ve Entra ID kimlik doğrulaması seçilirse, en az bir yönetici erişimine sahip ilkenin de belirtilmesi gerekir. +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. -**Şifreleme:** +**Encryption:** -- “Şeffaf veri şifrelemesi” olarak adlandırılır ve veritabanlarını, yedeklemeleri ve dinlenme halindeki günlükleri şifreler. -- Her zamanki gibi, varsayılan olarak bir Azure yönetilen anahtar kullanılır, ancak bir müşteri yönetilen şifreleme anahtarı (CMEK) de kullanılabilir. -**Yönetilen Kimlikler:** +- 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. +**Managed Identities:** -- Sistem ve kullanıcı yönetilen MI'ler atamak mümkündür. -- Şifreleme anahtarına (CMEK kullanılıyorsa) ve veritabanlarından diğer hizmetlere erişmek için kullanılır. -- Veritabanından erişilebilecek Azure hizmetlerinin bazı örnekleri için [bu belge sayfasına](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-external-data-source-transact-sql) bakın. -- Birden fazla UMI atandığında, kullanılacak varsayılan olanı belirtmek mümkündür. -- Çapraz kiracı erişimi için bir federasyon istemci kimliği yapılandırmak mümkündür. +- 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. +- Cross-tenant access için federated client identity yapılandırmak mümkündür. -Bir SQL veritabanından bir blob depolama içindeki bilgilere erişmek için bazı komutlar: +Bir SQL database içinden bir blob storage'daki info'ya erişmek için bazı commands: ```sql -- Create a credential for the managed identity CREATE DATABASE SCOPED CREDENTIAL [ManagedIdentityCredential] @@ -69,57 +71,58 @@ GO ``` **Microsoft Defender:** -- Potansiyel veritabanı güvenlik açıklarını azaltmak ve anormal aktiviteleri tespit etmek için faydalıdır. -- Defender hakkında kendi dersinde konuşacağız (birçok diğer Azure hizmetinde etkinleştirilebilir). +- “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) -**Yedeklemeler:** -- Yedekleme sıklığı, saklama politikalarında yönetilmektedir. +**Backups:** +- Backup sıklığı retention policies içinde yönetilir. -**Silinmiş veritabanları:** -- Mevcut yedeklerden silinmiş DB'leri geri yüklemek mümkündür. +**Deleted databases:** +- Mevcut backups üzerinden silinmiş DB'leri restore etmek mümkündür. ## Azure SQL Database -**Azure SQL Database**, ölçeklenebilir ve güvenli ilişkisel veritabanı çözümleri sunan **tamamen yönetilen bir veritabanı platformu olarak hizmet (PaaS)**'dir. En son SQL Server teknolojileri üzerine inşa edilmiştir ve altyapı yönetimi gereksinimini ortadan kaldırarak bulut tabanlı uygulamalar için popüler bir seçim haline gelmiştir. +**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. -Bir SQL veritabanı oluşturmak için, barındırılacağı SQL sunucusunu belirtmek gerekmektedir. +Bir SQL database oluşturmak için, onun barındırılacağı SQL server'ı belirtmek gerekir. -### SQL Veritabanı Güvenlik Özellikleri +### SQL Database Security Features -- **Her Zaman Güncel**: En son kararlı SQL Server sürümünde çalışır ve yeni özellikler ile yamaları otomatik olarak alır. -- **Devralınan SQL Server güvenlik özellikleri:** -- Kimlik doğrulama (SQL ve/veya Entra ID) -- Atanmış Yönetilen Kimlikler -- Ağ kısıtlamaları -- Şifreleme -- Yedeklemeler +- **Always Up-to-Date**: En son stable SQL Server sürümünde çalışır ve yeni features ile patches'i otomatik alır. +- **Inherited SQL Server security features:** +- Authentication (SQL and/or Entra ID) +- Assigned Managed Identities +- Network restrictions +- Encryption +- Backups - … -- **Veri yedekliliği:** Seçenekler yerel, bölge, Coğrafi veya Coğrafi-Bölge yedekli. -- **Defter:** Verilerin bütünlüğünü kriptografik olarak doğrular, herhangi bir müdahalenin tespit edilmesini sağlar. Finansal, tıbbi ve hassas verileri yöneten herhangi bir organizasyon için faydalıdır. +- **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. -Bir SQL veritabanı, **esnek Havuz**'un bir parçası olabilir. Esnek havuzlar, yapılandırılabilir hesaplama (eDTUs) ve depolama kaynaklarını paylaşarak birden fazla veritabanını yönetmek için maliyet etkin bir çözümdür; fiyatlandırma yalnızca tahsis edilen kaynaklara dayanmaktadır, veritabanı sayısına değil. -#### Azure SQL Sütun Seviyesi Güvenlik (Maskeleme) & Satır Seviyesi Güvenlik +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. -**Azure SQL'in dinamik** veri maskeleme özelliği, **hassas bilgileri yetkisiz kullanıcılardan gizleyerek korumaya yardımcı olur**. Gerçek verileri değiştirmek yerine, görüntülenen verileri dinamik olarak maskeleyerek, kredi kartı numaraları gibi hassas ayrıntıların gizli kalmasını sağlar. +#### Azure SQL Column Level Security (Masking) & Row Level Security -**Dinamik Veri Maskeleme**, maskelemeyen (bu kullanıcılar belirtilmelidir) ve yöneticiler dışındaki tüm kullanıcıları etkiler. Dinamik veri maskelemeden muaf olan SQL kullanıcılarını belirten bir yapılandırma seçeneği vardır; **yöneticiler her zaman hariçtir**. +**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 Satır Seviyesi Güvenlik (RLS)**, bir kullanıcının hangi satırları görüntüleyebileceğini veya değiştirebileceğini **kontrol eden** bir özelliktir; her kullanıcının yalnızca kendileriyle ilgili verileri görmesini sağlar. Filtre veya engelleme yargıları ile güvenlik politikaları oluşturarak, organizasyonlar veritabanı düzeyinde ince ayar erişim uygulayabilirler. +**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**. -### Azure SQL Yönetilen Örnek +**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 Yönetilen Örnekler**, daha büyük ölçekli, tüm SQL Server örneği kapsamındaki dağıtımlar içindir. En son SQL Server yerel (Enterprise Edition) Veritabanı Motoru ile neredeyse %100 uyumluluk sağlar; bu, yaygın güvenlik endişelerini ele alan yerel sanal ağ (VNet) uygulaması sunar ve yerel SQL Server müşterileri için uygun bir iş modeli sağlar. +### Azure SQL Managed Instance -### Azure SQL Sanal Makineleri +**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 Sanal Makineleri**, **işletim sistemini** ve SQL Server örneğini kontrol etme imkanı sunar; çünkü bir VM, SQL sunucusunu çalıştıran VM hizmetinde oluşturulacaktır. +### Azure SQL Virtual Machines -Bir SQL Sanal Makinesi oluşturulduğunda, SQL sunucusunu barındıracak VM'nin **tüm ayarlarını seçmek mümkündür** (VM dersinde gösterildiği gibi). -- Bu, VM'nin bazı VNet'lere erişeceği, **Yönetilen Kimliklerin eklenmiş olabileceği**, dosya paylaşımlarının bağlanabileceği anlamına gelir... bu da SQL'den VM'ye **geçişi** oldukça ilginç hale getirir. -- Ayrıca, SQL'in belirli bir anahtar kasasına erişmesine **izin vermek için** bir uygulama kimliği ve sırrı yapılandırmak mümkündür; bu, hassas bilgileri içerebilir. +**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. -Ayrıca, **otomatik SQL güncellemeleri**, **otomatik yedeklemeler**, **Entra ID kimlik doğrulaması** ve diğer SQL hizmetlerinin çoğu özelliği gibi şeyleri yapılandırmak da mümkündü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. + +Ayrıca **automatic SQL updates**, **automatic backups**, **Entra ID authentication** ve diğer SQL services'in çoğu feature'ı da configure edilebilir. ## Enumeration @@ -258,7 +261,7 @@ Get-AzSqlVM {{#endtab}} {{#endtabs}} -Ayrıca, veritabanındaki Dinamik Veri Maskesi ve Satır Düzeyi politikalarını listelemek istiyorsanız, sorgulayabilirsiniz: +Ayrıca, eğer veritabanı içindeki Dynamic Data Masking ve Row Level politikalarını enumerate etmek istiyorsanız, şu sorguyu kullanabilirsiniz: ```sql --Enumerates the masked columns SELECT @@ -283,9 +286,9 @@ JOIN sys.security_predicates AS sp2 ON sp.object_id = sp2.object_id; ``` -### Bağlanın ve SQL sorguları çalıştırın +### Bağlan ve SQL sorguları çalıştır -Örnek [bir Az WebApp'ı numaralandırma](az-app-services.md) ile bir bağlantı dizesi (kimlik bilgilerini içeren) bulabilirsiniz: +Örnek olarak [enumerating an Az WebApp](az-app-services.md) üzerinden bir connection string (credentials içeren) bulabilirdiniz: ```bash function invoke-sql{ param($query) @@ -304,7 +307,7 @@ $Connection.Close() invoke-sql 'Select Distinct TABLE_NAME From information_schema.TABLES;' ``` -Veritabanına erişmek için sqlcmd de kullanabilirsiniz. Sunucunun kamu bağlantılarına izin verip vermediğini bilmek önemlidir `az sql server show --name --resource-group `, ayrıca güvenlik duvarı kuralının IP'mizin erişmesine izin verip vermediğini de kontrol etmelisiniz: +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: ```bash sqlcmd -S .database.windows.net -U -P -d ``` @@ -315,19 +318,19 @@ sqlcmd -S .database.windows.net -U -P