AWS - Wykorzystywanie Rozszerzeń Lambda

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks

Rozszerzenia Lambda

Rozszerzenia Lambda wzbogacają funkcje poprzez integrację z różnymi narzędziami do monitorowania, obserwowalności, bezpieczeństwa i zarządzania. Te rozszerzenia, dodawane za pomocą .zip archiwów przy użyciu warstw Lambda lub włączane w wdrożeniach obrazów kontenerów, działają w dwóch trybach: wewnętrznym i zewnętrznym.

  • Wewnętrzne rozszerzenia łączą się z procesem uruchomieniowym, manipulując jego uruchomieniem za pomocą zmiennych środowiskowych specyficznych dla języka i skryptów opakowujących. Ta personalizacja dotyczy różnych środowisk uruchomieniowych, w tym Java Correto 8 i 11, Node.js 10 i 12 oraz .NET Core 3.1.
  • Zewnętrzne rozszerzenia działają jako oddzielne procesy, utrzymując zgodność z cyklem życia funkcji Lambda. Są kompatybilne z różnymi środowiskami uruchomieniowymi, takimi jak Node.js 10 i 12, Python 3.7 i 3.8, Ruby 2.5 i 2.7, Java Corretto 8 i 11, .NET Core 3.1 oraz niestandardowymi środowiskami uruchomieniowymi.

Aby uzyskać więcej informacji o tym, jak działają rozszerzenia lambda, sprawdź dokumentację.

Zewnętrzne Rozszerzenie dla Utrzymywania, Kradzieży Żądań i Modyfikacji Żądań

To jest podsumowanie techniki zaproponowanej w tym poście: https://www.clearvector.com/blog/lambda-spy/

Stwierdzono, że domyślny kernel Linux w środowisku uruchomieniowym Lambda jest skompilowany z wywołaniami systemowymi “process_vm_readv” i “process_vm_writev”. A wszystkie procesy działają z tym samym identyfikatorem użytkownika, nawet nowy proces utworzony dla zewnętrznego rozszerzenia. Oznacza to, że zewnętrzne rozszerzenie ma pełny dostęp do pamięci sterty Rapid, zgodnie z projektem.

Ponadto, podczas gdy rozszerzenia Lambda mają możliwość subskrybowania zdarzeń wywołania, AWS nie ujawnia surowych danych tym rozszerzeniom. Zapewnia to, że rozszerzenia nie mogą uzyskać dostępu do wrażliwych informacji przesyłanych za pośrednictwem żądania HTTP.

Proces Init (Rapid) monitoruje wszystkie żądania API pod adresem http://127.0.0.1:9001 podczas gdy rozszerzenia Lambda są inicjowane i uruchamiane przed wykonaniem jakiegokolwiek kodu uruchomieniowego, ale po Rapid.

https://www.clearvector.com/blog/content/images/size/w1000/2022/11/2022110801.rapid.default.png

Zmienna AWS_LAMBDA_RUNTIME_API wskazuje adres IP i numer portu API Rapid dla procesów uruchomieniowych podrzędnych i dodatkowych rozszerzeń.

Warning

Zmieniając zmienną środowiskową AWS_LAMBDA_RUNTIME_API na port, do którego mamy dostęp, możliwe jest przechwycenie wszystkich działań w ramach uruchomienia Lambda (man-in-the-middle). Jest to możliwe, ponieważ rozszerzenie działa z tymi samymi uprawnieniami co Rapid Init, a kernel systemu pozwala na modyfikację pamięci procesów, umożliwiając zmianę numeru portu.

Ponieważ rozszerzenia działają przed jakimkolwiek kodem uruchomieniowym, modyfikacja zmiennej środowiskowej wpłynie na proces uruchomieniowy (np. Python, Java, Node, Ruby) w momencie jego uruchomienia. Ponadto, rozszerzenia załadowane po naszym, które polegają na tej zmiennej, również będą kierować przez nasze rozszerzenie. Ta konfiguracja może umożliwić złośliwemu oprogramowaniu całkowite ominięcie środków bezpieczeństwa lub rozszerzeń rejestrujących bezpośrednio w środowisku uruchomieniowym.

https://www.clearvector.com/blog/content/images/size/w1000/2022/11/2022110801.rapid.mitm.png

Narzędzie lambda-spy zostało stworzone, aby wykonać zapis pamięci i ukraść wrażliwe informacje z żądań lambda, innych rozszerzeń żądań i nawet je modyfikować.

Odniesienia

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks