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ğine ihtiyaç duymadan hızlı ölçeklenme gerektiren uygulamalar için idealdir.
Azure Functions için geleneksel Tüketim planı, yalnızca fonksiyonlarınız çalışırken 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üklerine sahip 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çeklenme 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, 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ı çalıştırmayı 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 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 bakış açısından çok ilginçtir çünkü bu kova üzerindeki yazma erişimi, bir saldırganın kodunuzu tehlikeye atmasına ve Fonksiyon Uygulamasındaki yönetilen kimliklere yetki yükseltmesine olanak tanıyacaktır.
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 kısıtlamak veya bir iç ağa (VPC) erişim vermek mümkündür.
Bu, bir saldırganın bakış açısından çok ilginçtir çünkü bir güvenlik açığı olan Lambda fonksiyonundan iç ağlara geçiş yapma olasılığı olabilir.
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 HTTP tetikleyici kullanarak bir uç nokta oluşturduğunuzda, 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ındaki 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ğlayarak güvenlik kontrolünü ince bir şekilde sağlar.
Ana Bilgisayar Anahtarları: Ana bilgisayar anahtarları, varsayılan veya kullanıcı tanımlı olabilir ve bir Fonksiyon Uygulamasındaki 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. Üçüncü taraflarla anahtar paylaşmamak veya yerel istemci uygulamalarında dahil etmemek, yetkisiz yönetim erişimini önlemek için kritik öneme sahiptir.
Bir fonksiyonun kimliğini ADMIN (ve ANONYMOUS veya FUNCTION değil) olarak ayarlarken, bu anahtarı kullanmak gereklidir.
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)