Az - Function Apps
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Azure Functions, daha az kod yazmanıza, daha az altyapı yönetmenize ve maliyetleri düşürmenize olanak tanıyan sunucusuz bir çözümdür. Sunucuları dağıtma ve bakımını yapma konusunda endişelenmek yerine, bulut altyapısı uygulamalarınızın çalışmasını sağlamak için gereken tüm güncel kaynakları sağlar.
Azure portalında, Azure Functions ile Azure API Management arasında entegrasyon sağlanır ve HTTP tetikleyici fonksiyon uç noktalarının REST API'leri olarak açığa çıkarılmasına olanak tanır. Bu şekilde açığa çıkarılan API'ler, RESTful API'lere standart, dil bağımsız bir arayüz sağlayan bir OpenAPI tanımı kullanılarak tanımlanır.
Flex Tüketim planı, esnek hesaplama seçenekleri ile dinamik, olay odaklı ölçeklendirme sunar. Talebe bağlı olarak otomatik olarak fonksiyon örneklerini ekler veya kaldırır, böylece kaynakların verimli kullanımı ve maliyet etkinliği sağlanır. Bu plan, artırılmış güvenlik için sanal ağ desteği sunar ve önceden tahsis edilmiş örnekler ile soğuk başlangıçları azaltmanıza olanak tanır. Değişken iş yükleri yaşayan ve konteyner desteği olmadan hızlı ölçeklendirme gerektiren uygulamalar için idealdir.
Azure Functions için geleneksel Tüketim planı, yalnızca fonksiyonlarınız çalıştığında hesaplama kaynakları için ödeme yaptığınız varsayılan sunucusuz barındırma seçeneğidir. Gelen olay sayısına bağlı olarak otomatik olarak ölçeklenir, bu da kesintili veya öngörülemeyen iş yükleri olan uygulamalar için son derece maliyet etkin hale getirir. Konteyner dağıtımlarını desteklemese de, soğuk başlangıç sürelerini azaltmak için optimizasyonlar içerir ve altyapıyı yönetme yükü olmadan otomatik ölçeklendirme gerektiren geniş bir sunucusuz uygulama yelpazesi için uygundur.
Azure Functions için Premium plan, tutarlı performans ve gelişmiş özellikler gerektiren uygulamalar için tasarlanmıştır. Soğuk başlangıçları ortadan kaldırarak ve işlevlerin hareketsizlik dönemlerinden sonra bile zamanında çalışmasını sağlayarak talebe bağlı olarak önceden ısıtılmış işçiler kullanarak otomatik olarak ölçeklenir. Bu plan, daha güçlü örnekler, uzatılmış yürütme süreleri sunar ve sanal ağ bağlantısını destekler. Ayrıca, özel Linux görüntülerinin kullanılmasına olanak tanır, bu da yüksek performans ve kaynaklar üzerinde daha fazla kontrol gerektiren kritik görev uygulamaları için uygundur.
Dedicated plan, aynı zamanda App Service planı olarak da bilinir, fonksiyonlarınızı bir App Service ortamında özel sanal makinelerde çalıştırır. Bu plan, öngörülebilir faturalama sağlar ve örneklerin manuel veya otomatik olarak ölçeklenmesine olanak tanır, bu da uzun süreli senaryolar için idealdir. Aynı plan üzerinde birden fazla web ve fonksiyon uygulamasının çalıştırılmasını destekler, daha büyük hesaplama boyutları sunar ve App Service Environments (ASE) aracılığıyla tam hesaplama izolasyonu ve güvenli ağ erişimi sağlar. Bu seçenek, tutarlı kaynak tahsisi ve kapsamlı özelleştirme gerektiren uygulamalar için en iyisidir.
Container Apps, Azure Container Apps tarafından barındırılan tamamen yönetilen bir ortamda konteynerleştirilmiş fonksiyon uygulamalarını dağıtmanıza olanak tanır. Bu seçenek, diğer mikro hizmetler, API'ler ve iş akışlarıyla birlikte çalışan olay odaklı, sunucusuz uygulamalar oluşturmak için mükemmeldir. Fonksiyon kodunuzla özel kütüphaneleri paketlemeyi, eski uygulamaları bulut yerel mikro hizmetlere taşımayı ve GPU kaynakları ile yüksek işlem gücünden yararlanmayı destekler. Container Apps, Kubernetes kümelerini yönetme ihtiyacını ortadan kaldırarak dağıtımı basitleştirir, bu da geliştiricilerin konteynerleştirilmiş bir ortamda esneklik ve ölçeklenebilirlik arayışında ideal hale getirir.
Yeni bir konteynerleştirilmemiş Fonksiyon Uygulaması 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, uygulamanın yeni bir örneği çalıştırılması gerektiğinde, uygulamanın kodu buradan toplanacak ve yürütülecektir.
Bu, bir saldırganın bu kova üzerinde yazma erişimi olması durumunda kodun ele geçirilmesine ve Fonksiyon Uygulamasındaki yönetilen kimliklere yetki yükseltmesine olanak tanıdığı için saldırganlar açısından çok ilginçtir.
Bir fonksiyona tüm İnternet'ten erişim vermek mümkündür, herhangi bir kimlik doğrulama gerektirmeden veya IAM tabanlı erişim vermek mümkündür.
Ayrıca, Fonksiyon Uygulamasına İnternet'ten erişimi vermek veya kısıtlamak, Fonksiyon Uygulamasına bir iç ağa (VPC) erişim vermek de mümkündür.
Bu, bir saldırganın İnternet'e açılmış bir zayıf Lambda fonksiyonundan iç ağlara geçiş yapma olasılığı olabileceği için saldırganlar açısından çok ilginçtir.
Bir uygulama içinde ortam değişkenlerini yapılandırmak mümkündür. Ayrıca, varsayılan olarak AzureWebJobsStorage
ve WEBSITE_CONTENTAZUREFILECONNECTIONSTRING
(diğerleri arasında) ortam değişkenleri oluşturulur. Bu değişkenler, uygulamanın verilerini içeren depolama hesabını tam yetkilerle kontrol etmek için hesap anahtarını içerdiği için özellikle ilginçtir.
Sandbox içinde kaynak kodu /home/site/wwwroot
dizininde function_app.py
dosyasında bulunur (Python kullanılıyorsa) ve kodu çalıştıran kullanıcı app
'dir (sudo izinleri olmadan).
Ayrıca, Fonksiyon Uygulaması, "admin" veya "anonymous" gibi belirli bir kimlik doğrulama seviyesini gerektiren belirli uç noktalara sahip olabilir. Bir saldırgan, kısıtlamaları aşmak ve hassas verilere veya işlevselliğe erişim sağlamak için anonim olarak izin verilen uç noktalara erişmeye çalışabilir.
Kullanıcılara fonksiyonları çağırma erişimi vermek için RBAC izinleri olmadığını unutmayın. Fonksiyon çağrısı, oluşturulurken seçilen tetikleyiciye bağlıdır ve bir HTTP Tetikleyici seçildiyse, bir erişim anahtarı kullanmanız gerekebilir.
Bir fonksiyon içinde bir uç nokta oluştururken HTTP tetikleyici kullanarak, fonksiyonu tetiklemek için gereken erişim anahtarı yetkilendirme seviyesini belirtmek mümkündür. Üç seçenek mevcuttur:
ANONYMOUS: Herkes, URL aracılığıyla fonksiyona erişebilir.
FUNCTION: Uç nokta yalnızca bir fonksiyon, ana bilgisayar veya anahtar kullanan kullanıcılara açıktır.
ADMIN: Uç nokta yalnızca bir anahtar kullanan kullanıcılara açıktır.
Anahtar türleri:
Fonksiyon Anahtarları: Fonksiyon anahtarları varsayılan veya kullanıcı tanımlı olabilir ve yalnızca bir Fonksiyon Uygulaması içindeki belirli fonksiyon uç noktalarına erişim vermek için tasarlanmıştır. Bu, yalnızca yetkili kullanıcıların veya hizmetlerin belirli fonksiyonları çağırmasını sağlarken, tüm uygulamanın açığa çıkmasını önleyerek güvenlik kontrolünü ince ayar yapma imkanı sunar.
Ana Bilgisayar Anahtarları: Anahtarlar, varsayılan veya kullanıcı tanımlı olabilir ve bir Fonksiyon Uygulaması içindeki tüm fonksiyon uç noktalarına erişim sağlar. Bu, birden fazla fonksiyona tek bir anahtar kullanarak erişim gerektiğinde kullanışlıdır, yönetimi basitleştirir ve dağıtılması veya güvenli bir şekilde saklanması gereken anahtar sayısını azaltır.
Anahtar: Anahtar (_master
), bir Fonksiyon Uygulaması'nın çalışma zamanı REST API'lerine erişim de dahil olmak üzere yükseltilmiş izinler sunan bir yönetim anahtarıdır. Bu anahtar iptal edilemez ve son derece dikkatli bir şekilde kullanılmalıdır. Yetkisiz yönetim erişimini önlemek için anahtarın üçüncü şahıslarla paylaşılmaması veya yerel istemci uygulamalarında yer alması kritik öneme sahiptir.
Bir fonksiyonun kimlik doğrulamasını ADMIN (ve ANONYMOUS veya FUNCTION değil) olarak ayarlarken, bu anahtarın kullanılması gerekmektedir.
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 Event Grid tetikleyicisi ve Dayanıklı Fonksiyonlar bulunur. Sistem anahtarları, güvenliği sağlamak için Azure Portal veya anahtar API'leri aracılığıyla yeniden oluşturulabilir.
Anahtar kullanarak bir fonksiyon API uç noktasına erişim örneği:
https://<function_uniq_name>.azurewebsites.net/api/<endpoint_name>?code=<access_key>
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)