AWS - Lambda Enum
Last updated
Last updated
Amazon Web Services (AWS) Lambda, sunucu sağlama veya yönetimi gerektirmeyen bir hesaplama hizmeti olarak tanımlanır. Kod yürütme için gereken kaynak tahsisini otomatik olarak yönetme yeteneğiyle, yüksek kullanılabilirlik, ölçeklenebilirlik ve güvenlik gibi özellikleri sağlar. Lambda'nın önemli bir yönü, sadece kullanılan hesaplama süresine dayalı olarak ücretlendirilmesidir, başlangıç yatırımları veya uzun vadeli yükümlülükler gerektirmez.
Bir lambda'yı çağırmak için Cloudwatch ile istediğiniz kadar sık çağrı yapabilirsiniz, bir URL ucu açabilir ve çağrı yapabilirsiniz, API Gateway üzerinden çağrı yapabilirsiniz veya hatta bir S3 kovasındaki verilerdeki değişiklikler veya bir DynamoDB tablosundaki güncellemeler gibi olaylara dayalı olarak çağrı yapabilirsiniz.
Bir lambda'nın kodu /var/task
dizininde depolanır.
Bir Lambda'nın birkaç sürümü olabilir. Ve takma adlar aracılığıyla birden fazla sürümü açığa çıkarabilir. Takma ad içindeki her bir sürümün ağırlıkları, hangi takma adın çağrıyı alacağını belirler (örneğin, 90%-10% olabilir). Eğer takma adlardan birinin kodu savunmasızsa, saldırıyı alacak olan sürümüne kadar istekler gönderebilirsiniz.
Lambda kaynak izinleri, lambda'nın başka hizmetler/hesaplar tarafından çağrılmasına izin verir. Örneğin, bir lambda'ya URL üzerinden herkese erişim izni vermek için aşağıdaki politika kullanılabilir:
Veya API Gateway'in onu çağırmasına izin vermek için:
Eşzamanlı yüzlerce lambda isteği olduğunda, her birinin bir veritabanına bağlanıp bağlantıyı kapatması gerekiyorsa, bu çalışmayacak (lambda'lar durumsuzdur, bağlantıları açık tutamaz). Bu durumda, Lambda işlevleriniz veritabanı yerine RDS Proxy ile etkileşimde bulunursa. Eşzamanlı Lambda işlevleri tarafından oluşturulan birçok eşzamanlı bağlantıyı ölçeklendirmek için gereken bağlantı havuzunu yönetir. Bu, Lambda uygulamalarınızın her işlev çağrısı için yeni bağlantılar oluşturmak yerine mevcut bağlantıları yeniden kullanabilmesini sağlar.
Verileri korumak ve hatta paylaşmak için Lambda'lar EFS'e erişebilir ve onları bağlayabilir, böylece Lambda ondan okuma ve yazma yapabilir.
Bir Lambda katmanı, ek kod veya diğer içeriği içerebilen bir .zip dosyası arşividir. Bir katman, kütüphaneler, özel çalışma zamanı, veri veya yapılandırma dosyaları içerebilir.
Bir fonksiyonda beş katmana kadar dahil edilebilir. Bir katmanı bir işleve dahil ettiğinizde, içerikler yürütme ortamındaki /opt
dizinine çıkarılır.
Varsayılan olarak, oluşturduğunuz katmanlar AWS hesabınıza özeldir. Bir katmanı diğer hesaplarla paylaşmayı veya katmanı genel yapmayı seçebilirsiniz. Farklı bir hesap tarafından yayınlanan bir katmanı tüketen işlevleriniz, katman sürümü silindikten sonra veya katmana erişim izniniz iptal edildikten sonra katman sürümünü kullanmaya devam edebilir. Ancak, silinen bir katman sürümünü kullanarak yeni bir işlev oluşturamaz veya işlevleri güncelleyemezsiniz.
Bir konteyner görüntüsü olarak dağıtılan işlevler katmanları kullanmaz. Bunun yerine, görüntüyü oluştururken tercih ettiğiniz çalışma zamanını, kütüphaneleri ve diğer bağımlılıkları konteyner görüntüsüne paketlersiniz.
Lambda uzantıları, çeşitli izleme, gözlemleme, güvenlik ve yönetim araçlarıyla entegre olarak işlevleri geliştirir. Bu uzantılar, .zip arşivleri kullanarak Lambda katmanları veya konteyner görüntüsü dağıtımlarında dahil edilen, iki modda çalışır: dahili ve harici.
Dahili uzantılar, dil özgü ortam değişkenleri ve sarmalama betikleri kullanarak çalışma zamanı süreciyle birleşir ve başlangıcını değiştirir. Bu özelleştirme, Java Correto 8 ve 11, Node.js 10 ve 12 ve .NET Core 3.1 gibi bir dizi çalışma zamanı için geçerlidir.
Harici uzantılar, ayrı süreçler olarak çalışır ve Lambda işlevinin yaşam döngüsüyle uyumlu bir şekilde çalışır. Node.js 10 ve 12, Python 3.7 ve 3.8, Ruby 2.5 ve 2.7, Java Corretto 8 ve 11, .NET Core 3.1 ve özel çalışma zamanları gibi çeşitli çalışma zamanlarıyla uyumludur.
AWS Lambda, sunucu oluşturmadan ve yönetmeden kod çalıştırmanıza olanak tanıyan bir hizmettir. Lambda fonksiyonları, olay tetikleyicileriyle ilişkilendirilir ve bu olaylar gerçekleştiğinde çalıştırılır. Lambda hizmetini saptamak için aşağıdaki adımları izleyebilirsiniz:
AWS Management Console üzerinden Lambda hizmetine erişin.
Lambda fonksiyonları bölümünde, mevcut fonksiyonları listeleyin.
Her bir fonksiyonun ayrıntılarını inceleyin ve hedeflenen bilgileri toplayın.
Lambda fonksiyonlarına ilişkin IAM rollerini kontrol edin ve gerektiğinde izinleri sınırlayın.
Lambda fonksiyonlarının tetikleyicilerini kontrol edin ve hedeflenen olayları belirleyin.
Lambda fonksiyonlarının günlüklerini kontrol edin ve potansiyel güvenlik açıklarını tespit etmek için analiz yapın.
Lambda fonksiyonlarının bağımlılıklarını kontrol edin ve güncel olmayan veya güvenlik açıkları olan kütüphaneleri tespit edin.
Lambda fonksiyonlarının yapılandırma ayarlarını kontrol edin ve gerektiğinde güvenlik önlemleri alın.
Lambda fonksiyonlarının ortam değişkenlerini kontrol edin ve hassas bilgilerin sızmasını önlemek için gerekli önlemleri alın.
Lambda fonksiyonlarının erişim izinlerini kontrol edin ve gerektiğinde sınırlayın.
Bu adımları takip ederek AWS Lambda hizmetini saptayabilir ve güvenlik açıklarını tespit edebilirsiniz.
AWS Lambda işlevini manuel olarak çağırmak için aşağıdaki adımları izleyin:
AWS Yönetim Konsolu'na gidin ve Lambda hizmetine geçin.
Lambda işlevinizi seçin.
"Test" düğmesine tıklayın.
"Yeni test etkinliği oluştur" seçeneğini seçin.
Test etkinliği adını ve giriş verilerini belirtin.
"Test etkinliğini oluştur" düğmesine tıklayın.
İşlevin sonuçlarını ve hata mesajlarını kontrol edin.
Bu adımları takip ederek, AWS Lambda işlevinizi manuel olarak çağırabilirsiniz.
If you find an exposed URL of an AWS Lambda function, you can use it to gather information about the function and potentially exploit it. Here are some steps you can follow:
Access the exposed URL in a web browser or using a tool like cURL.
Look for any sensitive information that may be leaked in the response, such as AWS access keys or other credentials.
Analyze the response headers for any security-related information, such as server version or configuration details.
Test for common vulnerabilities, such as SSRF (Server-Side Request Forgery) or code injection, by manipulating the URL parameters or payload.
Enumerate the function's permissions and roles to understand its capabilities and potential attack surface.
Use the exposed URL to trigger the function and observe its behavior. This can help identify any potential security weaknesses or misconfigurations.
Document your findings and report them to the appropriate parties for remediation.
By leveraging an exposed URL, you can gain valuable insights into the AWS Lambda function and potentially uncover security vulnerabilities. However, it's important to always obtain proper authorization before conducting any security testing.
Şimdi, yürütülebilecek olası lambda işlevlerini bulma zamanı geldi:
Bir "Level6" adında bir lambda fonksiyonu mevcut. Onu nasıl çağıracağımızı bulalım:
Şimdi, ismi ve kimliği bildiğin için İsmi alabilirsin:
Ve son olarak, işlevi çağırarak erişin (dikkat edin, ID, Ad ve işlev adı URL'de görünür): https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6
URL:
https://<rest-api-id>.execute-api.<region>.amazonaws.com/<stageName>/<funcName>
Bir lambda'yı tetikleyebilecek birçok başka kaynak vardır
Aşağıdaki sayfada, yetkileri yükseltmek için Lambda izinlerini kötüye kullanmanın nasıl yapılacağını kontrol edebilirsiniz:
AWS - Lambda Privesc