AWS - Lambda Enum
Lambda
Amazon Web Services (AWS) Lambda jest opisywana jako usługa obliczeniowa, która umożliwia wykonywanie kodu bez konieczności zapewniania lub zarządzania serwerami. Charakteryzuje się zdolnością do automatycznego zarządzania alokacją zasobów potrzebnych do wykonania kodu, zapewniając funkcje takie jak wysoka dostępność, skalowalność i bezpieczeństwo. Istotnym aspektem Lambda jest model cenowy, w którym opłaty są naliczane wyłącznie za wykorzystany czas obliczeniowy, eliminując potrzebę początkowych inwestycji lub długoterminowych zobowiązań.
Aby wywołać lambdę, można ją wywoływać tak często, jak się chce (z Cloudwatch), udostępnić punkt końcowy URL i wywołać go, wywołać go za pomocą API Gateway lub nawet na podstawie zdarzeń takich jak zmiany danych w S3 lub aktualizacje tabeli DynamoDB.
Kod lambdy jest przechowywany w /var/task
.
Lambda Aliases Weights
Lambda może mieć kilka wersji. I może mieć więcej niż 1 wersję udostępnioną za pomocą aliasów. Wagi każdej z wersji udostępnionych 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 podatny, możesz wysyłać żądania, aż podatna wersja otrzyma exploit.
Resource Policies
Polityki zasobów Lambda pozwalają na udzielenie dostępu innym usługom/kontom do wywoływania lambdy na przykład. Na przykład, oto polityka pozwalająca każdemu na dostęp do lambdy udostępnionej za pomocą URL:
Lub ta, aby pozwolić API Gateway na wywołanie jej:
Lambda Database Proxies
Kiedy jest setki równoczesnych żą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 funkcje Lambda współpracują z RDS Proxy zamiast z instancją bazy danych. Zarządza ona pulą połączeń niezbędną do skalowania wielu jednoczesnych połączeń tworzonych przez równoczesne funkcje Lambda. To pozwala aplikacjom Lambda na ponowne wykorzystanie istniejących połączeń, zamiast tworzenia nowych połączeń dla każdego wywołania funkcji.
Lambda EFS Filesystems
Aby zachować, a nawet udostępniać dane, Lambdy mogą uzyskiwać dostęp do EFS i montować je, dzięki czemu Lambda będzie mogła z nich czytać i zapisywać.
Lambda Layers
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ę. Kiedy 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 na upublicznienie warstwy. Jeśli twoje funkcje korzystają z warstwy opublikowanej przez inne konto, twoje funkcje mogą kontynuować korzystanie z wersji warstwy po jej usunięciu lub po cofnięciu twojego uprawnienia do dostępu do warstwy. Jednak nie możesz utworzyć nowej funkcji ani zaktualizować funkcji korzystających z usuniętej wersji warstwy.
Funkcje wdrażane jako obraz kontenera nie korzystają z warstw. Zamiast tego, pakujesz preferowane środowisko uruchomieniowe, biblioteki i inne zależności do obrazu kontenera podczas jego budowy.
Lambda Extensions
Rozszerzenia Lambda zwiększają funkcje poprzez integrację z różnymi narzędziami do monitorowania, obserwowalności, bezpieczeństwa i zarządzania. Te rozszerzenia, dodawane za pomocą archiwów .zip 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 środowiska uruchomieniowego, manipulując jego uruchomieniem za pomocą zmiennych środowiskowych specyficznych dla języka i skryptów wrapper. 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ść operacyjną 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.
Enumeration
Wywołanie lambda
Ręcznie
Poprzez ujawniony URL
Jeśli URL funkcji Lambda jest publicznie dostępny, możemy wysłać żądanie HTTP, aby uzyskać odpowiedź.
Wywołanie funkcji Lambda za pomocą URL
Teraz nadszedł czas, aby znaleźć możliwe funkcje lambda do wykonania:
Dostępna jest funkcja lambda o nazwie "Level6". Sprawdźmy, jak ją wywołać:
Teraz, gdy znasz nazwę i ID, możesz uzyskać nazwę:
I w końcu wywołaj funkcję, uzyskując dostęp (zauważ, że ID, Name i function-name 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ą wyzwalać lambda
Privesc
Na poniższej stronie możesz sprawdzić, jak wykorzystać uprawnienia Lambda do eskalacji uprawnień:
AWS - Lambda PrivescNieautoryzowany Dostęp
AWS - Lambda Unauthenticated AccessPost Exploitation
AWS - Lambda Post ExploitationTrwałość
AWS - Lambda PersistenceReferencje
Last updated