Serverless.com Security
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Organizacja to najwyższy poziom podmiotu w ekosystemie Serverless Framework. Reprezentuje zbiorową grupę, taką jak firma, dział lub jakikolwiek duży podmiot, który obejmuje wiele projektów, zespołów i aplikacji.
Zespół to użytkownicy z dostępem wewnątrz organizacji. Zespoły pomagają w organizowaniu członków na podstawie ról. Współpracownicy
mogą przeglądać i wdrażać istniejące aplikacje, podczas gdy Administratorzy
mogą tworzyć nowe aplikacje i zarządzać ustawieniami organizacji.
Aplikacja to logiczne grupowanie powiązanych usług w ramach Organizacji. Reprezentuje kompletną aplikację składającą się z wielu usług serverless, które współpracują, aby zapewnić spójną funkcjonalność.
Usługa to podstawowy komponent aplikacji Serverless. Reprezentuje cały projekt serverless, kapsułkując wszystkie funkcje, konfiguracje i zasoby potrzebne. Zwykle jest definiowana w pliku serverless.yml
, usługa zawiera metadane, takie jak nazwa usługi, konfiguracje dostawcy, funkcje, zdarzenia, zasoby, wtyczki i zmienne niestandardowe.
To jest podsumowanie oficjalnego samouczka z dokumentacji:
Utwórz konto AWS (Serverless.com zaczyna w infrastrukturze AWS)
Utwórz konto w serverless.com
Utwórz aplikację:
To powinno stworzyć aplikację o nazwie tutorialapp
, którą możesz sprawdzić w serverless.com oraz folder o nazwie Tutorial
z plikiem handler.js
zawierającym kod JS z kodem helloworld
oraz plikiem serverless.yml
deklarującym tę funkcję:
Utwórz dostawcę AWS, przechodząc do dashboardu pod https://app.serverless.com/<org name>/settings/providers?providerId=new&provider=aws
.
Aby dać serverless.com
dostęp do AWS, poprosi o uruchomienie stosu cloudformation przy użyciu tego pliku konfiguracyjnego (w momencie pisania tego tekstu): https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml
Ten szablon generuje rolę o nazwie SFRole-<ID>
z arn:aws:iam::aws:policy/AdministratorAccess
dla konta z tożsamością zaufania, która pozwala na dostęp do roli konta Serverless.com
AWS.
Tutorial prosi o utworzenie pliku createCustomer.js
, który zasadniczo utworzy nowy punkt końcowy API obsługiwany przez nowy plik JS i prosi o modyfikację pliku serverless.yml
, aby wygenerować nową tabelę DynamoDB, zdefiniować zmienną środowiskową, rolę, która będzie używać wygenerowanych lambd.
Wdróż go, uruchamiając serverless deploy
Wdrożenie zostanie przeprowadzone za pomocą CloudFormation Stack
Zauważ, że lambdy są udostępniane za pośrednictwem API gateway a nie za pomocą bezpośrednich adresów URL
Przetestuj to
Poprzedni krok wydrukuje adresy URL, pod którymi Twoje funkcje lambda punktów końcowych API zostały wdrożone
Zbyt szerokie role IAM mogą przyznać nieautoryzowany dostęp do zasobów chmurowych, prowadząc do naruszeń danych lub manipulacji zasobami.
Zasada najmniejszych uprawnień: Przydzielaj tylko niezbędne uprawnienia do każdej funkcji.
Używaj oddzielnych ról: Rozróżniaj role w zależności od wymagań funkcji.
Przechowywanie wrażliwych informacji (np. kluczy API, poświadczeń bazy danych) bezpośrednio w serverless.yml
lub kodzie może prowadzić do ujawnienia, jeśli repozytoria zostaną skompromitowane lub jeśli dostęp do AWS zostanie naruszony, ponieważ będą one czytelne z konfiguracji lambd.
Zmienne środowiskowe: Wstrzykuj sekrety w czasie wykonywania bez twardego kodowania.
Integracja z Menedżerem Sekretów: Używaj usług takich jak AWS Secrets Manager, Azure Key Vault lub HashiCorp Vault.
Szyfrowane zmienne: Wykorzystaj funkcje szyfrowania Frameworka Serverless dla wrażliwych danych.
Kontrola dostępu: Ogranicz dostęp do sekretów w zależności od ról.
Unikaj logowania sekretów: Upewnij się, że sekrety nie są ujawniane w logach ani komunikatach o błędach.
Nieaktualne lub niezabezpieczone zależności mogą wprowadzać luki, podczas gdy niewłaściwe przetwarzanie danych wejściowych może prowadzić do ataków typu injection.
Zarządzanie zależnościami: Regularnie aktualizuj zależności i skanuj pod kątem luk.
Walidacja danych wejściowych: Wprowadź ścisłą walidację i sanitację wszystkich danych wejściowych.
Przeglądy kodu: Przeprowadzaj dokładne przeglądy, aby zidentyfikować luki w zabezpieczeniach.
Analiza statyczna: Używaj narzędzi do wykrywania luk w kodzie.
Bez odpowiedniego logowania i monitorowania, złośliwe działania mogą pozostać niezauważone, opóźniając reakcję na incydenty.
Centralne logowanie: Agreguj logi za pomocą usług takich jak AWS CloudWatch lub Datadog.
Włącz szczegółowe logowanie: Zbieraj istotne informacje bez ujawniania wrażliwych danych.
Ustaw alerty: Skonfiguruj alerty dla podejrzanych działań lub anomalii.
Regularne monitorowanie: Ciągłe monitorowanie logów i metryk w poszukiwaniu potencjalnych incydentów bezpieczeństwa.
Otwarte lub niewłaściwie zabezpieczone API mogą być wykorzystywane do nieautoryzowanego dostępu, ataków Denial of Service (DoS) lub ataków typu cross-site.
Uwierzytelnianie i autoryzacja: Wprowadź solidne mechanizmy, takie jak OAuth, klucze API lub JWT.
Ograniczenie liczby żądań i throttling: Zapobiegaj nadużyciom, ograniczając liczbę żądań.
Zabezpieczona konfiguracja CORS: Ogranicz dozwolone źródła, metody i nagłówki.
Używaj zapór aplikacji webowych (WAF): Filtruj i monitoruj żądania HTTP w poszukiwaniu złośliwych wzorców.
Wspólne zasoby i niewystarczająca izolacja mogą prowadzić do eskalacji uprawnień lub niezamierzonych interakcji między funkcjami.
Izoluj funkcje: Przydzielaj odrębne zasoby i role IAM, aby zapewnić niezależne działanie.
Podział zasobów: Używaj oddzielnych baz danych lub koszyków pamięci dla różnych funkcji.
Używaj VPC: Wdrażaj funkcje w Wirtualnych Chmurach Prywatnych dla lepszej izolacji sieci.
Ogranicz uprawnienia funkcji: Upewnij się, że funkcje nie mogą uzyskiwać dostępu do zasobów innych funkcji, chyba że jest to wyraźnie wymagane.
Niezaszyfrowane dane w spoczynku lub w tranzycie mogą być narażone na ujawnienie, prowadząc do naruszeń danych lub manipulacji.
Szyfruj dane w spoczynku: Wykorzystaj funkcje szyfrowania usług chmurowych.
Szyfruj dane w tranzycie: Używaj HTTPS/TLS dla wszystkich transmisji danych.
Zabezpiecz komunikację API: Wymuszaj protokoły szyfrowania i weryfikuj certyfikaty.
Zarządzaj kluczami szyfrującymi w sposób bezpieczny: Używaj zarządzanych usług kluczy i regularnie rotuj klucze.
Szczegółowe komunikaty o błędach mogą ujawniać wrażliwe informacje o infrastrukturze lub kodzie, podczas gdy nieobsługiwane wyjątki mogą prowadzić do awarii aplikacji.
Ogólne komunikaty o błędach: Unikaj ujawniania wewnętrznych szczegółów w odpowiedziach o błędach.
Centralne zarządzanie błędami: Zarządzaj i sanitizuj błędy konsekwentnie w wszystkich funkcjach.
Monitoruj i loguj błędy: Śledź i analizuj błędy wewnętrznie, nie ujawniając szczegółów użytkownikom końcowym.
Ujawniłe konfiguracje wdrożeniowe lub nieautoryzowany dostęp do pipeline'ów CI/CD mogą prowadzić do wdrożeń złośliwego kodu lub błędnych konfiguracji.
Zabezpiecz pipeline'y CI/CD: Wprowadź ścisłe kontrole dostępu, uwierzytelnianie wieloskładnikowe (MFA) i regularne audyty.
Przechowuj konfigurację w sposób bezpieczny: Utrzymuj pliki wdrożeniowe wolne od twardo zakodowanych sekretów i wrażliwych danych.
Używaj narzędzi bezpieczeństwa Infrastructure as Code (IaC): Wykorzystuj narzędzia takie jak Checkov lub Terraform Sentinel do egzekwowania polityk bezpieczeństwa.
Niezmienność wdrożeń: Zapobiegaj nieautoryzowanym zmianom po wdrożeniu, przyjmując praktyki niezmiennej infrastruktury.
Używanie nieweryfikowanych lub złośliwych wtyczek stron trzecich może wprowadzać luki w Twoich aplikacjach serverless.
Dokładnie weryfikuj wtyczki: Oceń bezpieczeństwo wtyczek przed integracją, preferując te z wiarygodnych źródeł.
Ogranicz użycie wtyczek: Używaj tylko niezbędnych wtyczek, aby zminimalizować powierzchnię ataku.
Monitoruj aktualizacje wtyczek: Utrzymuj wtyczki zaktualizowane, aby korzystać z poprawek bezpieczeństwa.
Izoluj środowiska wtyczek: Uruchamiaj wtyczki w izolowanych środowiskach, aby ograniczyć potencjalne kompromitacje.
Funkcje dostępne publicznie lub nieograniczone API mogą być wykorzystywane do nieautoryzowanych operacji.
Ogranicz dostęp do funkcji: Używaj VPC, grup zabezpieczeń i reguł zapory, aby ograniczyć dostęp do zaufanych źródeł.
Wprowadź solidne uwierzytelnianie: Upewnij się, że wszystkie ujawnione punkty końcowe wymagają odpowiedniego uwierzytelniania i autoryzacji.
Używaj API Gateway w sposób bezpieczny: Konfiguruj API Gateway, aby egzekwować polityki bezpieczeństwa, w tym walidację danych wejściowych i ograniczenie liczby żądań.
Wyłącz nieużywane punkty końcowe: Regularnie przeglądaj i wyłączaj wszelkie punkty końcowe, które nie są już używane.
Przyznawanie nadmiernych uprawnień członkom zespołu i zewnętrznym współpracownikom może prowadzić do nieautoryzowanego dostępu, naruszeń danych i nadużyć zasobów. Ryzyko to wzrasta w środowiskach, w których wiele osób ma różne poziomy dostępu, zwiększając powierzchnię ataku i potencjalne zagrożenia wewnętrzne.
Zasada najmniejszych uprawnień: Upewnij się, że członkowie zespołu i współpracownicy mają tylko te uprawnienia, które są niezbędne do wykonywania ich zadań.
Klucze dostępu i klucze licencyjne to krytyczne poświadczenia używane do uwierzytelniania i autoryzacji interakcji z interfejsem CLI Frameworka Serverless.
Klucze licencyjne: To unikalne identyfikatory wymagane do uwierzytelnienia dostępu do Frameworka Serverless wersji 4, które umożliwiają logowanie za pomocą CLI.
Klucze dostępu: Poświadczenia, które pozwalają interfejsowi CLI Frameworka Serverless uwierzytelnić się z Dashboardem Frameworka Serverless. Podczas logowania za pomocą CLI serverless
klucz dostępu zostanie wygenerowany i zapisany na laptopie. Możesz go również ustawić jako zmienną środowiskową o nazwie SERVERLESS_ACCESS_KEY
.
Ujawnienie przez repozytoria kodu:
Twarde kodowanie lub przypadkowe zatwierdzanie kluczy dostępu i kluczy licencyjnych do systemów kontroli wersji może prowadzić do nieautoryzowanego dostępu.
Niezabezpieczone przechowywanie:
Przechowywanie kluczy w postaci tekstu jawnego w zmiennych środowiskowych lub plikach konfiguracyjnych bez odpowiedniego szyfrowania zwiększa prawdopodobieństwo wycieku.
Niewłaściwa dystrybucja:
Udostępnianie kluczy przez niezabezpieczone kanały (np. e-mail, czat) może skutkować ich przechwyceniem przez złośliwe podmioty.
Brak rotacji:
Nieregularna rotacja kluczy wydłuża okres narażenia, jeśli klucze zostaną skompromitowane.
Nadmierne uprawnienia:
Klucze z szerokimi uprawnieniami mogą być wykorzystywane do wykonywania nieautoryzowanych działań w wielu zasobach.
Ucz się i ćwicz hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)