Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/

This commit is contained in:
Translator
2025-01-06 23:57:00 +00:00
parent f62b7c0409
commit 5a7d83b019
4 changed files with 40 additions and 38 deletions

View File

@@ -34,7 +34,7 @@
]
}
```
Ve ele geçirme, **şablonun yüklendiği andan** **şablonun dağıtıldığı ana** kadar olan **küçük bir zaman penceresi** olduğu için mümkündür. Bir saldırgan, hesabında **bir lambda fonksiyonu** oluşturabilir ve bu fonksiyon **bir bucket bildirimi gönderildiğinde tetiklenecek** ve **o bucket'ın** **içeriğini ele geçirecektir**.
Ve ele geçirme, **şablonun yüklendiği andan** **şablonun dağıtıldığı ana** kadar olan **küçük bir zaman penceresi** olduğu için mümkündür. Bir saldırgan, hesabında **bir lambda fonksiyonu** oluşturabilir ve bu fonksiyon **bir bucket bildirimi gönderildiğinde tetiklenecek** ve **o bucket'ın içeriğini ele geçirecektir**.
![](<../../../images/image (174).png>)
@@ -43,18 +43,18 @@ Daha fazla bilgi için orijinal araştırmaya bakın: [https://rhinosecuritylabs
### `s3:PutObject`, `s3:GetObject` <a href="#s3putobject-s3getobject" id="s3putobject-s3getobject"></a>
Bunlar **S3'e nesne yüklemek ve almak için** gereken izinlerdir. AWS içindeki (ve dışındaki) çeşitli hizmetler, **konfigürasyon dosyalarını** depolamak için S3 depolamasını kullanır.\
Bunlar **S3'e nesne yüklemek ve almak için** gereken izinlerdir. AWS içindeki (ve dışındaki) çeşitli hizmetler, **konfigürasyon dosyalarını** saklamak için S3 depolamasını kullanır.\
Onlara **okuma erişimi** olan bir saldırgan, üzerinde **hassas bilgiler** bulabilir.\
Onlara **yazma erişimi** olan bir saldırgan, **verileri değiştirerek bazı hizmetleri kötüye kullanabilir ve ayrıcalıkları artırmaya çalışabilir**.\
Bunlar bazı örneklerdir:
- Eğer bir EC2 örneği **kullanıcı verilerini bir S3 bucket'ında** depoluyorsa, bir saldırgan bunu **EC2 örneği içinde rastgele kod çalıştırmak için değiştirebilir**.
- Eğer bir EC2 örneği **kullanıcı verilerini bir S3 bucket'ında** saklıyorsa, bir saldırgan bunu **EC2 örneği içinde rastgele kod çalıştırmak için değiştirebilir**.
### `s3:PutObject`, `s3:GetObject` (isteğe bağlı) terraform durum dosyası üzerinden
[terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) durum dosyalarının bulut sağlayıcılarının blob depolama alanlarına kaydedilmesi oldukça yaygındır, örneğin AWS S3. Bir durum dosyasının dosya uzantısı `.tfstate`dir ve bucket adları genellikle terraform durum dosyalarını içerdiğini gösterir. Genellikle, her AWS hesabının durum dosyalarını saklamak için böyle bir bucket'ı vardır. Ayrıca genellikle, gerçek dünya hesaplarında neredeyse her geliştiricinin `s3:*` ve bazen hatta iş kullanıcılarının `s3:Put*` erişimi vardır.
[Terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) durum dosyalarının bulut sağlayıcılarının blob depolama alanlarına kaydedilmesi oldukça yaygındır, örneğin AWS S3. Bir durum dosyasının dosya uzantısı `.tfstate`dir ve bucket adları genellikle terraform durum dosyalarını içerdiğini gösterir. Genellikle, her AWS hesabının durum dosyalarını saklamak için böyle bir bucket'ı vardır. Ayrıca genellikle, gerçek dünya hesaplarında neredeyse her geliştiricinin `s3:*` ve bazen hatta iş kullanıcılarının `s3:Put*` erişimi vardır.
Bu nedenle, bu dosyalar üzerindeki izinlere sahipseniz, `terraform` ayrıcalıklarıyla, çoğu zaman `AdministratorAccess` ile, pipeline'da RCE elde etmenizi sağlayan bir saldırı vektörü vardır; bu da sizi bulut hesabının yöneticisi yapar. Ayrıca, `terraform`'un meşru kaynakları silmesini sağlayarak bir hizmet reddi saldırısı yapmak için bu vektörü kullanabilirsiniz.
Yani, bu dosyalar üzerindeki izinlere sahipseniz, `terraform` ayrıcalıklarıyla pipeline'da RCE elde etmenizi sağlayan bir saldırı vektörü vardır - çoğu zaman `AdministratorAccess`, sizi bulut hesabının yöneticisi yapar. Ayrıca, `terraform`'un meşru kaynakları silmesini sağlayarak bir hizmet reddi saldırısı yapmak için bu vektörü kullanabilirsiniz.
Doğrudan kullanılabilir istismar kodu için *Terraform Güvenliği* sayfasının *Terraform Durum Dosyalarını Kötüye Kullanma* bölümündeki açıklamayı takip edin:
@@ -150,7 +150,7 @@ aws s3api put-bucket-acl --bucket <bucket-name> --access-control-policy file://a
```
### `s3:GetObjectAcl`, `s3:PutObjectAcl`
Bir saldırgan, bu izinleri kullanarak kendisine belirli nesneler üzerinde daha fazla erişim sağlayabilir.
Bir saldırgan, bu izinleri kullanarak kendisine belirli nesneler üzerinde daha fazla erişim sağlamak için kötüye kullanabilir.
```bash
# Update bucket object ACL
aws s3api get-object-acl --bucket <bucekt-name> --key flag

View File

@@ -12,7 +12,7 @@ Azure App hizmetleri hakkında daha fazla bilgi için kontrol edin:
### Microsoft.Web/sites/publish/Action, Microsoft.Web/sites/basicPublishingCredentialsPolicies/read, Microsoft.Web/sites/config/read, Microsoft.Web/sites/read
Bu izinler, bir web uygulaması içinde **SSH shell** elde etmeyi sağlar. Ayrıca uygulamayı **debug** etmeye de olanak tanır.
Bu izinler, bir web uygulaması içinde **SSH shell** almayı sağlar. Ayrıca uygulamayı **debug** etmeye de olanak tanır.
- **Tek komutla SSH**:
```bash
@@ -34,7 +34,7 @@ ssh root@127.0.0.1 -p 39895
```
- **Uygulamayı Hata Ayıklama**:
1. VScode'da Azure uzantısını yükleyin.
2. Uzantıya Azure hesabınızla giriş yapın.
2. Uzantıda Azure hesabınızla oturum açın.
3. Abonelik içindeki tüm Uygulama hizmetlerini listeleyin.
4. Hata ayıklamak istediğiniz Uygulama hizmetini seçin, sağ tıklayın ve "Hata Ayıklamayı Başlat" seçeneğini seçin.
5. Uygulama hata ayıklama etkin değilse, uzantı bunu etkinleştirmeye çalışacaktır ancak hesabınızın bunu yapabilmesi için `Microsoft.Web/sites/config/write` iznine ihtiyacı vardır.
@@ -94,7 +94,7 @@ az webapp deployment list-publishing-profiles --name <app-name> --resource-group
}
]
```
Not edin ki **kullanıcı adı her zaman aynıdır** (FTP'de uygulamanın adı başta eklenmiş olsa da) ama **şifre hepsi için aynıdır**.
Not edin ki **kullanıcı adı her zaman aynıdır** (FTP'de uygulamanın adı başta eklenir) ama **şifre hepsi için aynıdır**.
Ayrıca, **SCM URL'si `<app-name>.scm.azurewebsites.net`**.
@@ -116,7 +116,7 @@ az webapp deployment list-publishing-credentials --name <app-name> --resource-gr
"type": "Microsoft.Web/sites/publishingcredentials"
}
```
Not edin ki **kimlik bilgileri aynı**dır önceki komutta.
Not edin ki **kimlik bilgileri aynıdır** önceki komutla.
- Başka bir seçenek, **kendi kimlik bilgilerinizi ayarlamak** ve bunları kullanmaktır:
```bash
@@ -124,7 +124,7 @@ az webapp deployment user set \
--user-name hacktricks \
--password 'W34kP@ssw0rd123!'
```
Sonra, bu kimlik bilgilerini **SCM ve FTP platformlarına erişmek için** kullanabilirsiniz. Bu, kalıcılığı sağlamak için de harika bir yoldur.
Sonra, bu kimlik bilgilerini **SCM ve FTP platformlarına erişmek için** kullanabilirsiniz. Bu, sürekliliği sağlamak için de harika bir yoldur.
SCM platformuna **web üzerinden erişmek için `<SCM-URL>/BasicAuth`** adresine gitmeniz gerektiğini unutmayın.
@@ -155,7 +155,7 @@ az rest --method PUT \
Geçerli SCM kimlik bilgilerine sahip olmak, **kod yayınlamak** için mümkündür. Bu, aşağıdaki komut kullanılarak yapılabilir.
Bu python örneği için https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart adresinden repoyu indirebilir, istediğiniz **değişiklikleri** yapabilir ve ardından **şu komutu çalıştırarak zipleyebilirsiniz: `zip -r app.zip .`**.
Bu python örneği için https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart adresinden repoyu indirebilir, istediğiniz **değişiklikleri** yapabilir ve ardından **zip'leyebilirsiniz: `zip -r app.zip .`**.
Ardından, aşağıdaki komut ile bir web uygulamasında **kod yayınlayabilirsiniz**:
```bash
@@ -163,7 +163,7 @@ curl -X POST "<SMC-URL>/api/publish?type=zip" --data-binary "@./app.zip" -u '<us
```
### Webjobs: Microsoft.Web/sites/publish/Action | SCM kimlik bilgileri
Bahsedilen Azure izni, SCM kimlik bilgileriyle de gerçekleştirilebilecek birkaç ilginç eylemi gerçekleştirmeye olanak tanır:
Bahsedilen Azure izni, SCM kimlik bilgileri ile de gerçekleştirilebilecek birkaç ilginç eylemi gerçekleştirmeye olanak tanır:
- **Webjobs** günlüklerini oku:
```bash
@@ -205,7 +205,7 @@ curl -X PUT \
```
### Microsoft.Web/sites/write, Microsoft.Web/sites/read, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
Bu izinler, **yönetilen bir kimlik atamaya** olanak tanır, bu nedenle eğer bir App hizmeti daha önce tehlikeye atıldıysa, bu saldırganın App hizmetine yeni yönetilen kimlikler atamasına ve **yetkileri yükseltmesine** olanak tanır.
Bu izinler, **yönetilen bir kimlik atamaya** olanak tanır, bu nedenle eğer bir App hizmeti daha önce tehlikeye atıldıysa, bu saldırgana App hizmetine yeni yönetilen kimlikler atama ve **yetkileri artırma** imkanı verecektir.
```bash
az webapp identity assign --name <app-name> --resource-group <res-group> --identities /subscriptions/<subcripttion-id>/resourceGroups/<res_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managed-identity-name>
```
@@ -256,8 +256,8 @@ https://graph.microsoft.com/v1.0/me/drive/root/children
- İzin kullanarak **`Microsoft.Web/sites/config/list/action`**:
- `az webapp deployment list-publishing-credentials --name <app-name> --resource-group <res-group>`
- `az rest --method POST --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/config/metadata/list?api-version=2022-03-01" --resource "https://management.azure.com"`
- Uygulama **yerel bir git deposu** kullanacak şekilde yapılandırılmışsa, **depolamayı klonlamak** ve **değişiklikleri itmek** mümkündür:
- İzin kullanarak **`Microsoft.Web/sites/sourcecontrols/read`**: `az webapp deployment source show --name <app-name> --resource-group <res-group>` ile git deposunun URL'sini alabilirsiniz, ancak bu, uygulamanın SCM URL'si ile aynı olacaktır ve yol `/<app-name>.git` şeklindedir (örneğin, `https://pythonwebapp-audeh9f5fzeyhhed.scm.canadacentral-01.azurewebsites.net:443/pythonwebapp.git`).
- Eğer uygulama **yerel bir git deposu** kullanacak şekilde yapılandırılmışsa, **depolamayı klonlamak** ve **değişiklikleri itmek** mümkündür:
- İzin kullanarak **`Microsoft.Web/sites/sourcecontrols/read`**: `az webapp deployment source show --name <app-name> --resource-group <res-group>` ile git deposunun URL'sini alabilirsiniz, ancak bu, uygulamanın SCM URL'si ile aynı olacak ve `/<app-name>.git` yolunu içerecektir (örneğin, `https://pythonwebapp-audeh9f5fzeyhhed.scm.canadacentral-01.azurewebsites.net:443/pythonwebapp.git`).
- SCM kimliğini almak için aşağıdaki izne ihtiyacınız var:
- **`Microsoft.Web/sites/publishxml/action`**: Ardından `az webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>` komutunu çalıştırın.
- **`Microsoft.Web/sites/config/list/action`**: Ardından `az webapp deployment list-publishing-credentials --name <name> --resource-group <res-group>` komutunu çalıştırın.
@@ -266,11 +266,11 @@ https://graph.microsoft.com/v1.0/me/drive/root/children
> `Microsoft.Web/sites/config/list/action` iznine ve SCM kimlik bilgilerine sahip olmanın, daha önceki bir bölümde belirtildiği gibi, bir web uygulamasına dağıtım yapmanın her zaman mümkün olduğunu unutmayın (üçüncü taraf bir sağlayıcı kullanacak şekilde yapılandırılmış olsa bile).
> [!WARNING]
> Aşağıdaki izinlere sahip olmanın, web uygulaması farklı bir şekilde yapılandırılmış olsa bile **rastgele bir konteyneri çalıştırmanın** de mümkün olduğunu unutmayın.
> Aşağıdaki izinlere sahip olmanın, web uygulaması farklı bir şekilde yapılandırılmış olsa bile, **rastgele bir konteyneri çalıştırmanın da mümkün olduğunu** unutmayın.
### `Microsoft.Web/sites/config/Write`, `Microsoft.Web/sites/config/Read`, `Microsoft.Web/sites/config/list/Action`, `Microsoft.Web/sites/Read`
Bu, bir web uygulaması tarafından kullanılan **konteyneri değiştirmeye** izin veren izinler setidir. Bir saldırgan bunu kötü niyetli bir konteyner çalıştırmak için kötüye kullanabilir.
Bu, bir web uygulaması tarafından kullanılan **konteyneri değiştirmeye** olanak tanıyan izinler setidir. Bir saldırgan bunu kötü niyetli bir konteyner çalıştırmak için kötüye kullanabilir.
```bash
az webapp config container set \
--name <app-name> \

View File

@@ -12,39 +12,39 @@
### Farklı Planlar
- **Flex Tüketim Planı**: Talebe göre fonksiyon örneklerini ekleyip kaldırarak **dinamik, olay odaklı ölçekleme** sunar ve kullanım başına ödeme modeli ile çalışır. **Sanal ağ** ve **önceden sağlanmış örnekler** ile soğuk başlangıçları azaltarak, konteyner desteği gerektirmeyen **değişken iş yükleri** için uygundur.
- **Geleneksel Tüketim Planı**: Fonksiyonlar çalıştığında yalnızca hesaplama kaynakları için **ödeme yaptığınız** varsayılan sunucusuz seçenektir. Gelen olaylara göre otomatik olarak ölçeklenir ve **soğuk başlangıç optimizasyonları** içerir, ancak konteyner dağıtımlarını desteklemez. Otomatik ölçekleme gerektiren **kesintili iş yükleri** için idealdir.
- **Premium Plan**: **Tutarlı performans** için tasarlanmıştır, soğuk başlangıçları ortadan kaldırmak için **önceden ısıtılmış işçiler** sunar. **Uzun süreli yürütme süreleri, sanal ağ** sunar ve **özel Linux görüntülerini** destekler, bu da onu yüksek performans ve gelişmiş özellikler gerektiren **misyon kritik uygulamalar** için mükemmel hale getirir.
- **Özel Plan**: Öngörülebilir faturalama ile özel sanal makinelerde çalışır ve manuel veya otomatik ölçeklemeyi destekler. Aynı planda birden fazla uygulama çalıştırmaya olanak tanır, **hesaplama izolasyonu** sağlar ve **App Service Environments** aracılığıyla **güvenli ağ erişimi** sağlar, bu da onu tutarlı kaynak tahsisi gerektiren **uzun süreli uygulamalar** için ideal hale getirir.
- **Konteyner Uygulamaları**: **Konteynerleştirilmiş fonksiyon uygulamalarını** yönetilen bir ortamda, mikro hizmetler ve API'lerle birlikte dağıtmayı sağlar. Özel kütüphaneleri, eski uygulama geçişini ve **GPU işleme** desteğini içerir, Kubernetes küme yönetimini ortadan kaldırır. **Olay odaklı, ölçeklenebilir konteynerleştirilmiş uygulamalar** için idealdir.
- **Geleneksel Tüketim Planı**: Fonksiyonlar çalıştığında yalnızca hesaplama kaynakları için ödeme yaptığınız varsayılan sunucusuz seçenektir. Gelen olaylara göre otomatik olarak ölçeklenir ve **soğuk başlangıç optimizasyonları** içerir, ancak konteyner dağıtımlarını desteklemez. Otomatik ölçekleme gerektiren **kesintili iş yükleri** için idealdir.
- **Premium Plan**: **Tutarlı performans** için tasarlanmıştır, soğuk başlangıçları ortadan kaldırmak için **önceden ısıtılmış işçiler** sunar. **Uzun süreli yürütme süreleri, sanal ağ** sunar ve **özel Linux görüntülerini** destekler, bu da yüksek performans ve gelişmiş özellikler gerektiren **misyon kritik uygulamalar** için mükemmeldir.
- **Özel Plan**: Öngörülebilir faturalama ile özel sanal makinelerde çalışır ve manuel veya otomatik ölçeklemeyi destekler. Aynı planda birden fazla uygulama çalıştırmaya olanak tanır, **hesaplama izolasyonu** sağlar ve **App Service Environments** aracılığıyla **güvenli ağ erişimi** sağlar, bu da tutarlı kaynak tahsisi gerektiren **uzun süreli uygulamalar** için idealdir.
- **Konteyner Uygulamaları**: **Konteynerleştirilmiş fonksiyon uygulamalarını** yönetilen bir ortamda, mikro hizmetler ve API'lerle birlikte dağıtmayı sağlar. Özel kütüphaneleri, eski uygulama geçişini ve **GPU işleme** destekler, Kubernetes küme yönetimini ortadan kaldırır. **Olay odaklı, ölçeklenebilir konteynerleştirilmiş uygulamalar** için idealdir.
### **Depolama Kovalari**
Yeni bir konteynerleştirilmemiş Function App oluşturduğunuzda (ancak çalıştırılacak kodu veriyorsanız), **kod ve diğer Fonksiyon ile ilgili veriler bir Depolama hesabında saklanacaktır**. Varsayılan olarak, web konsolu her fonksiyon için kodu saklamak üzere yeni bir tane oluşturacaktır.
Yeni bir konteynerleştirilmemiş Function App oluşturduğunuzda (ancak çalıştırılacak kodu veriyorsanız), **kod ve diğer Fonksiyon ile ilgili veriler bir Depolama hesabında saklanacaktır**. Varsayılan olarak, web konsolu her fonksiyon için kodu saklamak üzere yeni bir tane oluşturur.
Ayrıca, kova içindeki kodu (farklı formatlarda saklanabileceği) değiştirdiğinizde, **uygulamanın kodu yeni olanla değiştirilecek ve bir sonraki fonksiyon çağrıldığında çalıştırılacaktır**.
Ayrıca, kova içindeki kodu (saklanabileceği farklı formatlarda) değiştirdiğinizde, **uygulamanın kodu yeni olanla değiştirilir ve bir sonraki fonksiyon çağrıldığında çalıştırılır**.
> [!CAUTION]
> Bu, bir saldırganın **bu kovaya yazma erişimi** olması durumunda **kodun tehlikeye atılmasına ve Fonksiyon Uygulamasındaki yönetilen kimliklere yetki yükseltmesine** olanak tanıdığı için saldırganlar açısından çok ilginçtir.
>
> Bununla ilgili daha fazla bilgi **yetki yükseltme bölümünde** bulunmaktadır.
> Bununla ilgili daha fazla bilgi **yetki yükseltme bölümünde**.
Ayrıca, **`azure-webjobs-secrets`** konteynerinde depolama hesabında saklanan **master ve fonksiyon anahtarlarını** bulmak da mümkündür; bu anahtarlar **`<app-name>`** klasöründeki JSON dosyalarında bulunabilir.
Fonksiyonların ayrıca kodu uzaktan bir konumda saklamaya da izin verdiğini unutmayın; sadece URL'yi belirtmeniz yeterlidir.
Fonksiyonlar ayrıca kodu uzaktan bir konumda saklamanıza da olanak tanır; sadece URL'yi belirtmeniz yeterlidir.
### Ağ
HTTP tetikleyicisi kullanarak:
- **İnternetten bir fonksiyona erişim** vermek mümkündür; bu, herhangi bir kimlik doğrulama gerektirmeden veya IAM tabanlı erişim vermeden yapılabilir. Ancak bu erişimi kısıtlamak da mümkündür.
- **Tüm İnternet'ten bir fonksiyona erişim** vermek mümkündür; bu, herhangi bir kimlik doğrulama gerektirmeden veya IAM tabanlı erişim vermeden yapılabilir. Ancak bu erişimi kısıtlamak da mümkündür.
- **Bir iç ağdan (VPC)** bir Function App'a **erişim vermek veya kısıtlamak** da mümkündür.
> [!CAUTION]
> Bu, bir saldırganın **internet üzerinden maruz kalan bir zayıf Fonksiyondan iç ağlara geçiş yapma** olasılığı olduğu için saldırganlar açısından çok ilginçtir.
> Bu, bir saldırganın İnternete açık bir zayıf Fonksiyondan **iç ağlara geçiş yapma** olasılığı olduğu için saldırganlar açısından çok ilginçtir.
### **Function App Ayarları & Ortam Değişkenleri**
Bir uygulama içinde ortam değişkenlerini yapılandırmak mümkündür; bu değişkenler hassas bilgiler içerebilir. Ayrıca, varsayılan olarak **`AzureWebJobsStorage`** ve **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** (diğerleri arasında) gibi env değişkenleri oluşturulur. Bu değişkenler özellikle ilginçtir çünkü **uygulamanın verilerini içeren depolama hesabını kontrol etmek için TAM izinlere sahip hesap anahtarını içerir**. Bu ayarlar, Depolama Hesabından kodu çalıştırmak için de gereklidir.
Bir uygulama içinde ortam değişkenlerini yapılandırmak mümkündür; bu değişkenler hassas bilgiler içerebilir. Ayrıca, varsayılan olarak **`AzureWebJobsStorage`** ve **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** (diğerleri arasında) gibi env değişkenleri oluşturulur. Bu değişkenler, uygulamanın verilerini içeren depolama hesabını kontrol etmek için **TAM izinlere sahip hesap anahtarını** içerdiği için özellikle ilginçtir. Bu ayarlar, Depolama Hesabından kodu çalıştırmak için de gereklidir.
Bu env değişkenleri veya yapılandırma parametreleri, Fonksiyonun kodu nasıl çalıştırdığını da kontrol eder; örneğin, **`WEBSITE_RUN_FROM_PACKAGE`** varsa, bu, uygulamanın kodunun bulunduğu URL'yi belirtir.
@@ -58,14 +58,14 @@ Bir **Windows** fonksiyonunda NodeJS kullanıldığında kod **`C:\home\site\www
[**VM'ler**](vms/index.html) gibi, Fonksiyonların **2 tür Yönetilen Kimliği** olabilir: Sistem atanan ve Kullanıcı atanan.
**Sistem atanan** olan, **yalnızca atanan fonksiyon** tarafından kullanılabilecek bir yönetilen kimliktir; **kullanıcı atanan** yönetilen kimlikler ise **herhangi bir diğer Azure hizmeti tarafından kullanılabilecek** yönetilen kimliklerdir.
**Sistem atanan** olan, yalnızca atandığı fonksiyon tarafından kullanılabilen bir yönetilen kimliktir; **kullanıcı atanan** yönetilen kimlikler ise **herhangi bir diğer Azure hizmeti tarafından kullanılabilen** yönetilen kimliklerdir.
> [!NOTE]
> [**VM'ler**](vms/index.html) gibi, Fonksiyonların **1 sistem atanan** yönetilen kimliği ve **birden fazla kullanıcı atanan** yönetilen kimliği olabilir, bu nedenle fonksiyonu tehlikeye attığınızda hepsini bulmaya çalışmak her zaman önemlidir; çünkü bir Fonksiyondan birden fazla yönetilen kimliğe yetki yükseltebilirsiniz.
>
> Eğer bir sistem yönetilen kimliği kullanılmıyorsa ancak bir veya daha fazla kullanıcı yönetilen kimliği bir fonksiyona eklenmişse, varsayılan olarak herhangi bir token alamazsınız.
> Eğer bir sistem yönetilen kimliği kullanılmıyorsa ancak bir veya daha fazla kullanıcı yönetilen kimliği bir fonksiyona bağlıysa, varsayılan olarak herhangi bir token alamazsınız.
[**PEASS scriptlerini**](https://github.com/peass-ng/PEASS-ng) kullanarak, varsayılan yönetilen kimlikten token almak mümkündür. Ya da bunları **manuel olarak** almak için aşağıdaki gibi yapabilirsiniz:
[**PEASS scriptlerini**](https://github.com/peass-ng/PEASS-ng) kullanarak, varsayılan yönetilen kimlikten token alabilirsiniz. Ya da bunları **manuel olarak** alabilirsiniz; bu konuda daha fazla bilgi için:
{% embed url="https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#azure-vm" %}
@@ -86,8 +86,8 @@ Bir fonksiyon içinde bir **HTTP tetikleyici** kullanarak bir uç nokta oluştur
- **Fonksiyon Anahtarları:** Fonksiyon anahtarları varsayılan veya kullanıcı tanımlı olabilir ve yalnızca bir Function App içindeki **belirli fonksiyon uç noktalarına** erişim sağlamak için tasarlanmıştır; bu, uç noktalar üzerinde daha ince ayarlı bir erişim sağlar.
- **Ana Bilgisayar Anahtarları:** Ana bilgisayar anahtarları, varsayılan veya kullanıcı tanımlı olabilir ve **FUNCTION erişim seviyesine sahip bir Function App içindeki tüm fonksiyon uç noktalarına** erişim sağlar.
- **Master Anahtar:** Master anahtar (`_master`), tüm fonksiyon uç noktalarına (ADMIN erişim seviyesi dahil) erişim sağlayan yükseltilmiş izinler sunan bir yönetim anahtarıdır. Bu **anahtar iptal edilemez.**
- **Sistem Anahtarları:** Sistem anahtarları, **belirli uzantılar tarafından yönetilir** ve iç bileşenler tarafından kullanılan webhook uç noktalarına erişim için gereklidir. Örnekler arasında, sistem anahtarlarını kullanarak ilgili API'leri güvenli bir şekilde etkileşimde bulunan Olay Grid tetikleyicisi ve Dayanıklı Fonksiyonlar bulunur.
- **Master Anahtar:** Master anahtar (`_master`), tüm fonksiyon uç noktalarına (ADMIN erişim seviyesi dahil) erişim sağlayan yönetim anahtarıdır. Bu **anahtar iptal edilemez.**
- **Sistem Anahtarları:** Sistem anahtarları, **belirli uzantılar tarafından yönetilir** ve iç bileşenler tarafından kullanılan webhook uç noktalarına erişim için gereklidir. Örnekler arasında sistem anahtarlarını güvenli bir şekilde kendi API'leriyle etkileşimde bulunmak için kullanan Olay Grid tetikleyicisi ve Dayanıklı Fonksiyonlar bulunur.
> [!TIP]
> Bir anahtar kullanarak bir fonksiyon API uç noktasına erişim örneği:
@@ -96,7 +96,7 @@ Bir fonksiyon içinde bir **HTTP tetikleyici** kullanarak bir uç nokta oluştur
### Temel Kimlik Doğrulama
Uygulama Hizmetlerinde olduğu gibi, Fonksiyonlar da **SCM** ve **FTP** ile bağlanmak için temel kimlik doğrulamayı destekler; bu, Azure tarafından sağlanan bir **kullanıcı adı ve şifreyi URL'de** kullanarak kod dağıtımına olanak tanır. Bununla ilgili daha fazla bilgi:
Uygulama Hizmetlerinde olduğu gibi, Fonksiyonlar da **SCM** ve **FTP** ile bağlanmak için temel kimlik doğrulamayı destekler; bu, Azure tarafından sağlanan bir **kullanıcı adı ve şifre ile URL** kullanarak kod dağıtımına olanak tanır. Bununla ilgili daha fazla bilgi için:
{{#ref}}
az-app-services.md
@@ -104,7 +104,7 @@ az-app-services.md
### Github Tabanlı Dağıtımlar
Bir fonksiyon bir Github deposundan oluşturulduğunda, Azure web konsolu, bu depo güncellendiğinde fonksiyonun kodunu otomatik olarak güncellemek için **belirli bir depoda bir Github İş Akışı oluşturmayı** sağlar. Aslında, bir Python fonksiyonu için Github Action yaml'ı şöyle görünür:
Bir fonksiyon bir Github reposundan oluşturulduğunda, Azure web konsolu, bu depo güncellendiğinde fonksiyonun kodunu otomatik olarak güncellemek için **belirli bir depoda bir Github İş Akışı oluşturmayı** sağlar. Aslında, bir Python fonksiyonu için Github Action yaml'ı şöyle görünür:
<details>
@@ -192,14 +192,14 @@ package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
```
</details>
Ayrıca, bir **Managed Identity** de oluşturulur, böylece depodaki Github Action Azure'a bu kimlik ile giriş yapabilir. Bu, **Managed Identity** üzerinde bir Federated kimlik bilgisi oluşturarak yapılır ve **Issuer** `https://token.actions.githubusercontent.com` ile **Subject Identifier** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>` izin verilir.
Ayrıca, bir **Managed Identity** de oluşturulur, böylece depodaki Github Action Azure'a bu kimlik ile giriş yapabilir. Bu, **Managed Identity** üzerinde bir Federated kimlik bilgisi oluşturarak yapılır ve **Issuer** `https://token.actions.githubusercontent.com` ile **Subject Identifier** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>` belirlenir.
> [!CAUTION]
> Bu nedenle, o depoyu ele geçiren herkes, işlevi ve ona bağlı Managed Identities'i ele geçirebilir.
### Konteyner Tabanlı Dağıtımlar
Tüm planlar konteyner dağıtımına izin vermez, ancak izin verenler için yapılandırma konteynerin URL'sini içerecektir. API'de **`linuxFxVersion`** ayarı şöyle bir şeye sahip olacaktır: `DOCKER|mcr.microsoft.com/...`, web konsolunda ise yapılandırma **image settings** olarak gösterilecektir.
Tüm planlar konteyner dağıtımına izin vermez, ancak izin verenler için yapılandırma konteynerin URL'sini içerecektir. API'de **`linuxFxVersion`** ayarı şöyle bir şey olacaktır: `DOCKER|mcr.microsoft.com/...`, web konsolunda ise yapılandırma **image settings** olarak gösterilecektir.
Ayrıca, **kaynak kodu işlevle ilgili depolama** hesabında saklanmayacaktır çünkü bu gerekli değildir.