AWS - Abusing Lambda Extensions
Last updated
Last updated
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 kullanılarak Lambda katmanları aracılığıyla eklenir veya konteyner görüntü dağıtımlarına dahil edilir ve iki modda çalışır: dahili ve harici.
Dahili uzantılar, dil özgü çevresel değişkenler ve kaplama betikleri kullanarak çalışma zamanı işlemini birleştirir ve başlatmasını değiştirir. Bu özelleştirme, Java Correto 8 ve 11, Node.js 10 ve 12 ve .NET Core 3.1 gibi çeşitli çalışma zamanları için geçerlidir.
Harici uzantılar, ayrı işlemler olarak çalışır ve Lambda işlevinin yaşam döngüsüyle işletme hizalamasını korur. Bunlar, 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.
Lambda uzantılarının nasıl çalıştığı hakkında daha fazla bilgi için belgelere bakın.
Bu, bu yazıda önerilen tekniğin özeti: https://www.clearvector.com/blog/lambda-spy/
Lambda çalışma zamanı ortamındaki varsayılan Linux çekirdeğinin “process_vm_readv” ve “process_vm_writev” sistem çağrılarıyla derlendiği ve tüm işlemlerin aynı kullanıcı kimliğiyle çalıştığı bulundu. Bu, harici uzantının tasarım gereği Rapid'in heap belleğine tam okuma ve yazma erişimine sahip olduğu anlamına gelir.
Ayrıca, Lambda uzantılarının çağrı olaylarına abone olma yeteneğine sahip olduğu, AWS'nin bu uzantılara ham verileri açıklamadığı bulundu. Bu, uzantıların HTTP isteği aracılığıyla iletilen hassas bilgilere erişememesini sağlar.
Init (Rapid) işlemi, Lambda uzantıları başlatıldığında ve çalışma zamanı kodunun yürütülmesinden önce, http://127.0.0.1:9001 adresindeki tüm API isteklerini izler.
Değişken AWS_LAMBDA_RUNTIME_API
, çocuk çalışma zamanı işlemlerine ve ek uzantılara Rapid API'nin IP adresini ve port numarasını gösterir.
AWS_LAMBDA_RUNTIME_API
çevresel değişkenini bir port
numarasına değiştirerek, Lambda çalışma zamanı içindeki tüm işlemleri (orta adam olarak) ele geçirmek mümkündür. Bu, uzantının Rapid Init ile aynı ayrıcalıklara sahip olması ve sistem çekirdeğinin işlem belleğini değiştirme izin vermesi nedeniyle mümkündür.
Çünkü uzantılar herhangi bir çalışma zamanı kodundan önce çalışır, çevresel değişkeni değiştirmek çalışma zamanı işlemini (örneğin, Python, Java, Node, Ruby) başlatır. Ayrıca, bizimkinden sonra yüklenen uzantılar, bu değişkene dayanan ve bizim uzantımız üzerinden yönlendirilen uzantılar da olacaktır. Bu yapı, kötü amaçlı yazılımın güvenlik önlemlerini tamamen atlamasına veya doğrudan çalışma zamanı ortamında güvenlik önlemlerini veya günlükleme uzantılarını atlamasına olanak tanıyabilir.
lambda-spy aracı, bu bellek yazma işlemini gerçekleştirmek ve lambda isteklerinden hassas bilgileri çalmak, diğer uzantı isteklerini ve hatta değiştirmek için oluşturulmuştur.