AWS - Lambda Enum
Lambda
Amazon Web Services (AWS) Lambda jest opisana jako usługa obliczeniowa, która umożliwia wykonywanie kodu bez konieczności zapewniania lub zarządzania serwerem. 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 Lambdy jest jej model cenowy, gdzie opłaty są naliczane wyłącznie na podstawie wykorzystanego czasu obliczeniowego, eliminując konieczność inwestycji początkowych lub zobowiązań długoterminowych.
Aby wywołać lambdę, można ją wywoływać tak często, jak chcesz (za pomocą Cloudwatch), udostępnić punkt końcowy URL i ją wywołać, wywołać za pomocą bramy API lub nawet na podstawie zdarzeń takich jak zmiany danych w kubce S3 lub aktualizacje tabeli DynamoDB.
Kod lambdy jest przechowywany w /var/task
.
Wagi aliasów Lambdy
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 wewnątrz aliasu decydują, który alias otrzymuje wywołanie (może to być na przykład 90%-10%). Jeśli kod jednego z aliasów jest podatny, można wysyłać żądania, aż podatna wersja otrzyma exploit.
Polityki zasobów Lambdy
Polityki zasobów Lambdy pozwalają na udzielenie dostępu innym usługom/kontom do wywołania lambdy, na przykład. Na przykład oto polityka umożliwiająca dostęp każdemu do lambdy udostępnionej za pomocą URL:
A lub to, aby umożliwić bramie API jej wywołanie:
Proksy bazy danych Lambdy
Gdy występuje setki równoczesnych żądań lambdy, jeśli każde z nich musi nawiązać i zamknąć połączenie z bazą danych, to po prostu nie zadziała (lambdy są bezstanowe, nie mogą utrzymywać otwartych połączeń). W takim przypadku, jeśli twoje funkcje Lambdy współdziałają z RDS Proxy zamiast z instancją bazy danych. Zarządza on pulowaniem połączeń niezbędnym do skalowania wielu jednoczesnych połączeń tworzonych przez równoczesne funkcje Lambdy. Pozwala to aplikacjom Lambda ponownie wykorzystywać istniejące połączenia, zamiast tworzyć nowe połączenia dla każdego wywołania funkcji.
Systemy plików EFS Lambdy
Aby zachować i nawet udostępniać dane Lambdy mogą uzyskać dostęp do EFS i zamontować je, dzięki czemu Lambda będzie mogła czytać i zapisywać z niego.
Warstwy Lambdy
Warstwa Lambdy to archiwum plików .zip, które może zawierać dodatkowy kod lub inne treści. Warstwa może zawierać biblioteki, niestandardowy runtime, dane lub pliki konfiguracyjne.
Można dołączyć do pięciu warstw na funkcję. Gdy dołączysz warstwę do funkcji, zawartość jest wypakowywana do katalogu /opt
w środowisku wykonawczym.
Domyślnie warstwy, które tworzysz, są prywatne dla twojego konta AWS. Możesz wybrać, aby udostępnić warstwę innym kontom lub udostępnić warstwę publicznie. Jeśli twoje funkcje korzystają z warstwy opublikowanej przez inne konto, twoje funkcje mogą nadal korzystać z wersji warstwy po jej usunięciu lub po cofnięciu uprawnienia do dostępu do warstwy. Nie możesz jednak tworzyć nowej funkcji ani aktualizować funkcji za pomocą usuniętej wersji warstwy.
Funkcje wdrożone jako obraz kontenerowy nie korzystają z warstw. Zamiast tego pakujesz preferowany runtime, biblioteki i inne zależności do obrazu kontenerowego podczas budowania obrazu.
Rozszerzenia Lambdy
Rozszerzenia Lambdy ulepszają funkcje, integrując się z różnymi narzędziami monitoringu, obserwacji, bezpieczeństwa i zarządzania. Te rozszerzenia, dodawane za pomocą .zip archiwów przy użyciu warstw Lambdy lub dołączone do wdrożeń obrazów kontenerowych, działają w dwóch trybach: wewnętrznym i zewnętrznym.
Rozszerzenia wewnętrzne łączą się z procesem uruchomieniowym, manipulując jego uruchomieniem za pomocą zmiennych środowiskowych specyficznych dla języka i skryptów opakowujących. Ta dostosowanie dotyczy różnych uruchomień, w tym Java Correto 8 i 11, Node.js 10 i 12 oraz .NET Core 3.1.
Rozszerzenia zewnętrzne działają jako osobne procesy, utrzymując zgodność z cyklem życia funkcji Lambdy. Są one kompatybilne z różnymi uruchomieniami, 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 uruchomieniami.
Wyliczanie
Wywołaj funkcję lambda
Ręcznie
Za pomocą ujawnionego adresu URL
Wywołanie funkcji Lambda za pomocą adresu URL
Nadszedł czas, aby dowiedzieć się, jakie funkcje Lambda można wykonać:
Funkcja lambda o nazwie "Level6" jest dostępna. Sprawdźmy, jak ją wywołać:
Teraz, kiedy znasz nazwę i identyfikator, możesz uzyskać nazwę:
I wreszcie wywołaj funkcję, uzyskując dostęp (zauważ, że ID, Nazwa i nazwa funkcji pojawiają się w adresie 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ć funkcję lambda
Privesc
Na następnej stronie możesz sprawdzić, jak wykorzystać uprawnienia Lambda do eskalacji uprawnień:
pageAWS - Lambda PrivescNieuwierzytelniony dostęp
pageAWS - Lambda Unauthenticated AccessPo wykorzystaniu
pageAWS - Lambda Post ExploitationTrwałość
pageAWS - Lambda PersistenceOdnośniki
Last updated