AWS - Lambda Enum
Lambda
Amazon Web Services (AWS) Lambda jest opisana jako usługa obliczeniowa, która umożliwia wykonywanie kodu bez konieczności provisionowania lub zarządzania serwerami. Charakteryzuje się zdolnością do automatycznego zarządzania alokacją zasobów potrzebnych do wykonania kodu, zapewniając takie funkcje jak wysoka dostępność, skalowalność i bezpieczeństwo. Istotnym aspektem Lambda jest jej model cenowy, w którym opłaty są oparte wyłącznie na czasie obliczeniowym, eliminując potrzebę początkowych inwestycji lub długoterminowych zobowiązań.
Aby wywołać lambdę, można ją wywoływać tak często, jak chcesz (z Cloudwatch), ekspozycja punktu końcowego URL i wywołanie go, wywołanie go za pomocą API Gateway lub nawet na podstawie zdarzeń, takich jak zmiany w danych w S3 lub aktualizacje w tabeli DynamoDB.
Kod lambdy jest przechowywany w /var/task
.
Wagi aliasów Lambda
Lambdę można mieć wiele wersji. Może mieć więcej niż 1 wersję eksponowaną za pomocą aliasów. Wagi każdej z wersji eksponowanych w aliasie zdecydują, który alias otrzyma wywołanie (może to być na przykład 90%-10%). Jeśli kod jednego z aliasów jest wrażliwy, możesz wysyłać żądania, aż wrażliwa wersja otrzyma exploit.
Polityki zasobów
Polityki zasobów Lambda pozwalają na udzielenie dostępu innym usługom/kontom do wywoływania lambdy. Na przykład, oto polityka, która pozwala każdemu na dostęp do lambdy eksponowanej za pomocą URL:
Lub to, aby pozwolić API Gateway na wywołanie:
Proxysy baz danych Lambda
Gdy jest setki równoległych żądań lambdy, jeśli każde z nich musi połączyć się i zamknąć połączenie z bazą danych, to po prostu nie zadziała (lambdy są bezstanowe, nie mogą utrzymywać otwartych połączeń). Wtedy, jeśli Twoje funkcje Lambda współdziałają z RDS Proxy zamiast z instancją bazy danych. Obsługuje pulowanie połączeń niezbędne do skalowania wielu równoległych połączeń tworzonych przez równoległe funkcje Lambda. To pozwala Twoim aplikacjom Lambda na ponowne użycie istniejących połączeń, zamiast tworzenia nowych połączeń dla każdego wywołania funkcji.
Systemy plików EFS Lambda
Aby zachować i nawet dzielić dane, Lambdy mogą uzyskiwać dostęp do EFS i montować je, aby Lambda mogła z niego czytać i pisać.
Warstwy Lambda
Warstwa Lambda to archiwum .zip, które może zawierać dodatkowy kod lub inne treści. Warstwa może zawierać biblioteki, niestandardowe środowisko uruchomieniowe, dane lub pliki konfiguracyjne.
Można dołączyć do pięciu warstw na funkcję. Gdy dołączasz warstwę do funkcji, zawartość jest wyodrębniana do katalogu /opt
w środowisku wykonawczym.
Domyślnie, warstwy, które tworzysz, są prywatne dla Twojego konta AWS. Możesz zdecydować się na udostępnienie warstwy innym kontom lub uczynić warstwę publiczną. Jeśli Twoje funkcje korzystają z warstwy, którą opublikowało inne konto, Twoje funkcje mogą nadal korzystać z wersji warstwy po jej usunięciu lub po cofnięciu Twojego dostępu do warstwy. Jednak nie możesz utworzyć nowej funkcji ani zaktualizować funkcji korzystających z usuniętej wersji warstwy.
Funkcje wdrożone jako obraz kontenera nie korzystają z warstw. Zamiast tego pakujesz swoje preferowane środowisko uruchomieniowe, biblioteki i inne zależności do obrazu kontenera podczas budowania obrazu.
Rozszerzenia Lambda
Rozszerzenia Lambda wzbogacają funkcje, integrując się z różnymi narzędziami monitorującymi, obserwacyjnymi, bezpieczeństwa i zarządzania. Te rozszerzenia, dodawane za pomocą .zip archiwów przy użyciu warstw Lambda lub zawarte 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 niestandardowe środowiska uruchomieniowe.
Enumeracja
Wywołaj lambdę
Ręcznie
Poprzez ujawniony URL
Call Lambda function via URL
Teraz czas, aby znaleźć możliwe funkcje lambda do wykonania:
Funkcja lambda o nazwie "Level6" jest dostępna. Sprawdźmy, jak ją wywołać:
Teraz, gdy znasz nazwę i identyfikator, możesz uzyskać nazwę:
A na koniec wywołaj funkcję, uzyskując dostęp (zauważ, że ID, Nazwa i nazwa-funkcji pojawiają się w URL): https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6
URL:
https://<rest-api-id>.execute-api.<region>.amazonaws.com/<stageName>/<funcName>
Inne wyzwalacze
Istnieje wiele innych źródeł, które mogą wyzwolić lambdę
Privesc
Na następnej stronie możesz sprawdzić, jak nadużywać uprawnień Lambda, aby eskalować uprawnienia:
AWS - Lambda PrivescDostęp bez uwierzytelnienia
AWS - Lambda Unauthenticated AccessPo eksploatacji
AWS - Lambda Post ExploitationUtrzymywanie
AWS - Lambda PersistenceOdniesienia
Last updated