AWS - Lambda Kalıcılık

Tip

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)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Lambda

Daha fazla bilgi için bakınız:

AWS - Lambda Enum

Lambda Layer Kalıcılığı

Lambda çalıştırıldığında gizlice çalışacak şekilde bir layer’ı introduce/backdoor ederek rastgele kod çalıştırmak mümkündür:

AWS - Lambda Layers Persistence

Lambda Extension Kalıcılığı

Lambda Layers’ı kötüye kullanarak extensions’ları da suistimal etmek ve lambda içinde kalıcılık sağlamak; ayrıca istekleri çalmak ve değiştirmek mümkündür.

AWS - Abusing Lambda Extensions

Via resource policies

Farklı lambda eylemlerine (ör. invoke veya update code) dış hesaplara erişim vermek mümkündür:

Versions, Aliases & Weights

Bir Lambda’nin farklı versiyonları olabilir (her versiyon farklı code içerebilir).
Daha sonra, lambda için farklı versiyonlarla farklı alias’lar oluşturabilir ve her birine farklı weight’ler atayabilirsiniz.
Bu şekilde bir saldırgan versiyon 1’i backdoor’lu ve versiyon 2’yi sadece meşru kod içeren şekilde oluşturup, stealth kalmak için isteklerin sadece %1’inde versiyon 1’i çalıştıracak şekilde ayarlayabilir.

Version Backdoor + API Gateway

  1. Copy the original code of the Lambda
  2. Create a new version backdooring the original code (or just with malicious code). Publish and deploy that version to $LATEST
  3. Call the API gateway related to the lambda to execute the code
  4. Create a new version with the original code, Publish and deploy that version to $LATEST.
  5. This will hide the backdoored code in a previous version
  6. Go to the API Gateway and create a new POST method (or choose any other method) that will execute the backdoored version of the lambda: arn:aws:lambda:us-east-1:<acc_id>:function:<func_name>:1
  7. Note the final :1 of the arn indicating the version of the function (version 1 will be the backdoored one in this scenario).
  8. Select the POST method created and in Actions select Deploy API
  9. Now, when you call the function via POST your Backdoor will be invoked

Cron/Event tetikleyicisi

Lambda fonksiyonlarını bir şey olduğunda veya belirli bir süre geçtiğinde çalıştırabilmeniz, lambda’yı kalıcılık elde etmek ve deteccion’u atlatmak için yaygın ve kullanışlı bir yol yapar.
İşte AWS içinde varlığınızı daha gizli hale getirmek için lambda’lar oluşturmaya dair bazı fikirler.

  • Yeni bir kullanıcı oluşturulduğunda lambda yeni bir kullanıcı anahtarı üretir ve bunu saldırganla paylaşır.
  • Yeni bir role oluşturulduğunda lambda, ele geçirilmiş kullanıcılara assume role izinleri verir.
  • Yeni cloudtrail logları oluşturulduğunda, bunları siler/degistirir

RCE abusing AWS_LAMBDA_EXEC_WRAPPER + Lambda Layers

Çalışma zamanı/handler başlamadan önce saldırgan kontrollü bir wrapper script’i çalıştırmak için AWS_LAMBDA_EXEC_WRAPPER environment variable’ını suistimal edin. Wrapper’ı bir Lambda Layer aracılığıyla /opt/bin/htwrap konumuna yerleştirin, AWS_LAMBDA_EXEC_WRAPPER=/opt/bin/htwrap olarak ayarlayın ve sonra function’ı invoke edin. Wrapper, function runtime process içinde çalışır, function execution role’ünü miras alır ve sonunda gerçek runtime’ı exec ederek orijinal handler’ın normal şekilde çalışmaya devam etmesini sağlar.

AWS - Lambda Exec Wrapper Persistence

AWS - Lambda Function URL Public Exposure

Asenkron destinasyonları ve Recursion konfigürasyonunu birlikte suistimal ederek, bir function’ın harici bir scheduler olmadan (EventBridge, cron vb. olmadan) kendini sürekli yeniden invoke etmesini sağlayabilirsiniz. Varsayılan olarak, Lambda recursive döngüleri sonlandırır, ancak recursion config’i Allow olarak ayarlamak bunları tekrar etkinleştirir. Destinations asenkron invoke’lar için servis tarafında teslimat yapar, bu yüzden tek bir seed invoke kod gerektirmeyen, gizli bir heartbeat/backdoor kanalı yaratır. Gürültüyü düşük tutmak için isteğe bağlı olarak reserved concurrency ile throttle edilebilir.

AWS - Lambda Async Self Loop Persistence

AWS - Lambda Alias-Scoped Resource Policy Backdoor

Gizli bir Lambda versiyonu oluşturun ve resource-based policy’yi lambda add-permission içinde --qualifier parametresi kullanarak sadece o spesifik versiyona (veya alias’a) scope edin. Saldırgan prensibine yalnızca lambda:InvokeFunction yetkisini arn:aws:lambda:REGION:ACCT:function:FN:VERSION üzerinde verin. Fonksiyon ismi veya birincil alias üzerinden normal invokasyonlar etkilenmezken, saldırgan doğrudan backdoored versiyon ARN’sini invoke edebilir.

Bu, Function URL’i açmaktan daha stealthy bir yöntemdir ve birincil trafik alias’ını değiştirmez.

AWS - Lambda Alias Version Policy Backdoor

AWS - Lambda Runtimelerini Dondurma

lambda:InvokeFunction, logs:FilterLogEvents, lambda:PutRuntimeManagementConfig ve lambda:GetRuntimeManagementConfig izinlerine sahip bir saldırgan, bir function’ın runtime management configuration’ını değiştirebilir. Bu saldırı, bir Lambda fonksiyonunu kırılgan bir runtime sürümünde tutmak veya yeni runtimelerle uyumsuz olabilecek kötü amaçlı layer’larla uyumluluğu korumak istendiğinde özellikle etkilidir.

Saldırgan runtime yönetim konfigürasyonunu değiştirerek runtime sürümünü sabitlemektedir:

# Invoke the function to generate runtime logs
aws lambda invoke \
--function-name $TARGET_FN \
--payload '{}' \
--region us-east-1 /tmp/ping.json

sleep 5

# Freeze automatic runtime updates on function update
aws lambda put-runtime-management-config \
--function-name $TARGET_FN \
--update-runtime-on FunctionUpdate \
--region us-east-1

Uygulanan yapılandırmayı doğrulayın:

aws lambda get-runtime-management-config \
--function-name $TARGET_FN \
--region us-east-1

İsteğe bağlı: Belirli bir runtime sürümüne sabitleme

# Extract Runtime Version ARN from INIT_START logs
RUNTIME_ARN=$(aws logs filter-log-events \
--log-group-name /aws/lambda/$TARGET_FN \
--filter-pattern "INIT_START" \
--query 'events[0].message' \
--output text | grep -o 'Runtime Version ARN: [^,]*' | cut -d' ' -f4)

Belirli bir runtime sürümüne sabitle:

aws lambda put-runtime-management-config \
--function-name $TARGET_FN \
--update-runtime-on Manual \
--runtime-version-arn $RUNTIME_ARN \
--region us-east-1

Tip

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)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin