Prawdopodobnie słyszałeś już tysiąc razy o architekturze serverless: brak serwerów do zarządzania, automatyczne skalowanie i model "płać za to, co zużywasz", który utrzymuje niskie koszty. Brzmi to jak marzenie dla programistów. Piszesz funkcję, przesyłasz ją do AWS Lambda, Google Cloud Functions lub Azure Functions, a dostawca chmury zajmuje się resztą. Ale jest pewien haczyk - "serverless" nie oznacza, że nie ma serwerów. Oznacza to tylko, że nie musisz się martwić o aktualizowanie systemu operacyjnego ani zarządzanie sprzętem.
Chociaż przekazałeś zarządzanie infrastrukturą gigantowi, takiemu jak Amazon lub Microsoft, nie przekazałeś odpowiedzialności za bezpieczeństwo. W rzeczywistości serverless wprowadza zupełnie nowy zestaw problemów. Nie chronisz już perymetru; chronisz rozdrobnioną sieć wyzwalaczy, uprawnień i ulotnych środowisk wykonawczych. Jeśli atakujący znajdzie sposób na wstrzyknięcie kodu do jednej z twoich funkcji, nie utknie tylko w maszynie wirtualnej - może mieć bezpośrednią linię do twojej bazy danych lub twoich zasobów S3 za pośrednictwem zbyt liberalnych ról IAM.
W tym miejscu wkracza cloud Penetration Testing. Nie możesz po prostu uruchomić starszego skanera luk w zabezpieczeniach na aplikacji serverless i oczekiwać, że znajdzie on coś przydatnego. Nie ma "serwera" do skanowania w tradycyjnym sensie. Aby faktycznie zabezpieczyć te aplikacje, potrzebujesz specjalistycznego podejścia, które rozumie, jak zdarzenia wyzwalają funkcje i jak dane przepływają przez natywny dla chmury ekosystem.
Czym dokładnie jest cloud Penetration Testing dla Serverless?
Kiedy mówimy o cloud Penetration Testing dla aplikacji serverless, odchodzimy od starej mentalności "włamania się do pudełka". W tradycyjnej konfiguracji pentester szuka otwartego portu, niezałatanej wersji Apache lub sposobu na uzyskanie reverse shell na serwerze. W serverless te wektory ataku w większości zniknęły. Nie możesz połączyć się przez SSH z funkcją Lambda.
Zamiast tego, cloud Penetration Testing koncentruje się na logice aplikacji i konfiguracji środowiska chmurowego. Chodzi o znalezienie luk w sposobie interakcji twoich funkcji. Na przykład, jeśli funkcja jest wyzwalana przez API Gateway, pentester będzie szukał luk związanych z wstrzykiwaniem w żądaniu API. Jeśli ta funkcja następnie zapisuje do bazy danych NoSQL, sprawdzi, czy dane wejściowe są odpowiednio oczyszczone, aby zapobiec wstrzykiwaniu NoSQL.
Zasadniczo jest to symulowany atak, który celuje w "klej" spajający twoją aplikację serverless. Obejmuje to:
- Mapowanie Źródeł Zdarzeń: Sprawdzanie, czy atakujący może wyzwalać funkcje w sposób, którego nie zamierzałeś.
- Analiza Uprawnień: Szukanie "Uprawnień Gwiazdkowych" (np.
Resource: *), które dają funkcji więcej mocy, niż potrzebuje. - Audyt Zależności: Sprawdzanie bibliotek spakowanych w funkcji pod kątem znanych luk w zabezpieczeniach.
- Zarządzanie Stanem: Analizowanie, w jaki sposób dane są przekazywane między ulotnymi funkcjami, aby upewnić się, że nie ma punktów wycieku.
Ponieważ aplikacje serverless są tak rozproszone, potrzebujesz platformy, która może zobaczyć cały obraz. Dlatego narzędzia takie jak Penetrify są przydatne. Zamiast próbować ręcznie śledzić pięćdziesiąt różnych funkcji i ich wyzwalaczy, platforma natywna dla chmury może pomóc w mapowaniu powierzchni ataku i symulowaniu, w jaki sposób atakujący może poruszać się lateralnie od publicznie dostępnego API do prywatnego zasobu back-end.
Pułapka "Modelu Współdzielonej Odpowiedzialności"
Jednym z największych błędów, jakie widzę, że popełniają firmy, jest niezrozumienie Modelu Współdzielonej Odpowiedzialności. Dostawcy chmury bardzo dobrze to wyjaśniają w swojej dokumentacji, ale w praktyce jest to często ignorowane.
Sedno jest takie: Dostawca (AWS, Azure, GCP) jest odpowiedzialny za bezpieczeństwo chmury. Upewniają się, że fizyczne centra danych są zamknięte, hiperwizory są załatane, a podstawowy sprzęt jest niezawodny. Ty natomiast jesteś odpowiedzialny za bezpieczeństwo w chmurze.
W świecie serverless linia się przesuwa. Nie obchodzi cię już jądro systemu operacyjnego, ale teraz jesteś w 100% odpowiedzialny za:
- Twój Kod: Jeśli twoja funkcja Python ma błąd command injection, AWS nie naprawi tego za ciebie.
- Role IAM: Jeśli dasz swojej funkcji
AdministratorAccess, ponieważ było to "łatwiejsze do skonfigurowania", to jest to twoja wina. - Walidacja Danych: Upewnienie się, że dane zdarzenia wyzwalające twoją funkcję są czyste.
- Zarządzanie Sekretami: Nie wpisywanie na stałe kluczy API w zmiennych środowiskowych.
Wiele zespołów wpada w fałszywe poczucie bezpieczeństwa, myśląc, że ponieważ są "serverless", są "bezpieczne domyślnie". To niebezpieczne założenie. W każdym razie granularny charakter serverless zwiększa liczbę miejsc, w których mały błąd konfiguracji może prowadzić do masowego naruszenia bezpieczeństwa. Pojedyncza źle skonfigurowana polityka zasobnika S3 lub zbyt szeroka rola wykonywania Lambda może narazić całą bazę danych klientów na publiczny internet.
Typowe Wektory Ataku w Aplikacjach Serverless
Aby zrozumieć, dlaczego potrzebujesz cloud Penetration Testing, musisz przyjrzeć się, jak atakujący faktycznie celują w te systemy. Nie szukają "otwartych portów"; szukają błędów logicznych i luk w uprawnieniach.
Event Injection
W aplikacji serverless funkcje są wyzwalane przez zdarzenia. Te zdarzenia mogą pochodzić z wywołania API, przesłania pliku do zasobnika pamięci masowej, wiadomości w kolejce (SQS) lub zaplanowanego zadania cron. Każdy z nich jest punktem wejścia.
Jeśli funkcja pobiera obiekt zdarzenia i przekazuje go bezpośrednio do zapytania do bazy danych lub polecenia systemowego bez walidacji, masz lukę związaną z wstrzykiwaniem. Na przykład, wyobraź sobie funkcję, która przetwarza metadane obrazu z przesłanego pliku. Jeśli pentester może przesłać plik ze złośliwym polem "Komentarz", które zawiera polecenie powłoki, a funkcja używa biblioteki, która wykonuje to polecenie, atakujący z powodzeniem zdobył przyczółek w twoim środowisku wykonawczym.
Broken Function-Level Authorization
Aplikacje bezserwerowe często składają się z dziesiątek małych funkcji. Często zabezpiecza się "frontowe drzwi" (API Gateway), ale zapomina o zabezpieczeniu "tylnych drzwi" (funkcji wewnętrznych).
Atakujący może znaleźć sposób na bezpośrednie wywołanie funkcji, omijając kontrole autoryzacji wykonywane na warstwie API. Jeśli twoja funkcja zakłada, że każde żądanie, które do niej dociera, musiało zostać autoryzowane przez bramę, masz problem. Cloud Penetration Testing obejmuje próby bezpośredniego "wywołania" tych funkcji przy użyciu wyciekłych kluczy lub poprzez wykorzystanie błędnie skonfigurowanych uprawnień.
Nadmierne uprawnienia ról IAM
Jest to prawdopodobnie najczęstsze znalezisko w każdym audycie bezpieczeństwa serverless. Programiści często używają jednej, szerokiej roli IAM dla wszystkich swoich funkcji, aby uniknąć kłopotów z tworzeniem unikalnej roli dla każdej z nich.
Jeśli funkcja potrzebuje tylko zapisać jeden konkretny plik w jednym konkretnym folderze w S3, ale jej rola ma uprawnienia s3:* dla wszystkich bucketów, atakujący, który skompromituje tę funkcję, ma teraz klucze do całego twojego królestwa przechowywania danych. Mogą kraść dane, usuwać kopie zapasowe lub przesyłać złośliwe pliki. Celem profesjonalnego Penetration Test jest identyfikacja tych "nadmiernie uprzywilejowanych" ról i przejście w kierunku zasady minimalnych uprawnień (Principle of Least Privilege - PoLP).
Niezabezpieczone zależności stron trzecich
Funkcje serverless są często małe, ale opierają się na górze pakietów npm lub pip. Ponieważ funkcje te są wdrażane często, zależności mogą szybko stać się nieaktualne.
Ponieważ środowiska serverless są efemeryczne, tradycyjne skanery podatności oparte na agentach nie działają. Nie można zainstalować agenta bezpieczeństwa na funkcji Lambda. Potrzebujesz sposobu na skanowanie samego pakietu wdrożeniowego. Atakujący uwielbiają atakować luki w "łańcuchu dostaw" - znajdują popularną bibliotekę ze znaną wadą i czekają, aż firma wdroży ją do swojego stosu serverless.
Podejście krok po kroku do Serverless Penetration Testing
Jeśli masz za zadanie zabezpieczenie swojego środowiska serverless, nie możesz po prostu improwizować. Potrzebujesz ustrukturyzowanej metodologii. Oto jak zazwyczaj przeprowadzany jest profesjonalny cloud Penetration Test.
Faza 1: Rozpoznanie i Mapowanie
Nie możesz chronić tego, o czym nie wiesz, że istnieje. Pierwszym krokiem jest zmapowanie całego ekosystemu serverless.
- Zidentyfikuj wszystkie wyzwalacze: Skąd dane wchodzą do systemu? Czy to przez REST API, WebSockets, zdarzenia S3 czy strumienie Kinesis?
- Zmapuj przepływ danych: Kiedy żądanie uderza w API, którą funkcję wyzwala? Czy ta funkcja wywołuje inną funkcję? Czy zapisuje do bazy danych?
- Przeanalizuj ślad w chmurze: Który dostawca chmury jest używany? Czy istnieją jakieś publicznie dostępne punkty końcowe?
Faza 2: Audyt Konfiguracji
Przed próbą "złamania" kodu, sprawdź ustawienia.
- Przegląd IAM: Wyeksportuj wszystkie zasady IAM powiązane z funkcjami. Poszukaj symboli wieloznacznych (
*) w akcjach lub zasobach. - Skanowanie Zmiennych Środowiskowych: Sprawdź, czy w konfiguracji funkcji nie ma zakodowanych na stałe sekretów, haseł lub kluczy API.
- Analiza Sieci: Czy funkcje działają wewnątrz VPC? Jeśli tak, jakie są reguły grupy bezpieczeństwa? Czy skompromitowana funkcja może dotrzeć do wewnętrznej sieci korporacyjnej?
Faza 3: Aktywna Symulacja Ataku (Ta "Zabawna" Część)
To tutaj odbywa się właściwy Penetration Testing.
- Fuzzing Wejść: Wysyłaj źle sformułowane, zbyt duże lub nieoczekiwane dane do każdego punktu końcowego API, aby sprawdzić, czy funkcje się zawieszają lub wyciekają komunikaty o błędach.
- Testowanie Iniekcji: Spróbuj SQL Injection, NoSQL Injection i OS command injection poprzez wyzwalacze zdarzeń.
- Obejście Autoryzacji: Spróbuj uzyskać dostęp do funkcji "tylko dla administratorów", manipulując tokenami JWT lub wykorzystując brakujące kontrole autoryzacji.
- Wyczerpanie Zasobów: Spróbuj wywołać funkcje tak wiele razy, że osiągniesz limit współbieżności konta, potencjalnie powodując atak typu Denial of Service (DoS) dla innych części aplikacji.
Faza 4: Post-Eksploatacja i Ruch Poprzeczny
Jeśli funkcja zostanie skompromitowana, co dalej?
- Kradzież Poświadczeń: Czy atakujący może uzyskać dostęp do tymczasowych poświadczeń bezpieczeństwa dostarczonych do funkcji Lambda (zwykle znajdujących się w zmiennych środowiskowych, takich jak
AWS_ACCESS_KEY_ID)? - Pivotowanie w Chmurze: Używając tych skradzionych poświadczeń, czy atakujący może przenieść się z funkcji do innej usługi, na przykład uzyskać dostęp do Secrets Manager lub modyfikować zasady IAM?
- Eksfiltracja Danych: Czy atakujący może użyć uprawnień funkcji do zrzucenia tabeli bazy danych na zewnętrzny serwer?
Faza 5: Raportowanie i Naprawa
Penetration Test jest bezużyteczny, jeśli nie prowadzi do poprawek. Raport końcowy powinien kategoryzować znaleziska według ważności (krytyczne, wysokie, średnie, niskie) i zawierać jasne, możliwe do wykonania kroki naprawcze. Zamiast mówić "Napraw swoje IAM", dobry raport powie "Zmień rolę dla process-payment-function z S3FullAccess na niestandardową politykę, która pozwala tylko na s3:PutObject na prefiksie /payments."
Porównanie Tradycyjnego Pentestingu z Serverless Pentestingiem
Aby naprawdę zobaczyć różnicę, spójrzmy, jak te dwa podejścia wypadają w różnych kategoriach.
| Funkcja | Tradycyjny Penetration Testing | Serverless Pentesting |
|---|---|---|
| Główny Cel | OS, Middleware, Serwer Web | Logika Aplikacji, Konfiguracja Chmury, IAM |
| Punkt Wejścia | Otwarte Porty, SSH, Formularze Web | Wywoływacze Zdarzeń, API Gateways, Cloud Events |
| Utrzymywanie Dostępu | Instalowanie Backdoorów, Rootkitów | Utrzymywanie dostępu poprzez skradzione tokeny IAM |
| Narzędzia Skanujące | Nmap, Nessus, OpenVAS | Skanery natywne dla chmury, analizatory IAM, niestandardowe skrypty |
| Koncentracja na Ryzyku | Buffer Overflows, Niezałatane OS | Role z nadmiernymi uprawnieniami, Uszkodzona Autoryzacja |
| Środowisko | Statyczne (Serwery są zawsze włączone) | Efemeryczne (Funkcje działają przez milisekundy) |
Jak widzisz, zmiana jest fundamentalna. Jeśli zatrudnisz pentestera, który wie tylko, jak używać Nmap i Metasploit, będzie on całkowicie zagubiony w środowisku serverless. Potrzebujesz kogoś — lub platformy — kto rozumie niuanse tożsamości w chmurze i architektury opartej na zdarzeniach.
Jak Penetrify Upraszcza Cloud Penetration Testing
Ręczne robienie wszystkiego, co powyżej, to koszmar. Pomiędzy mapowaniem, audytami IAM i rzeczywistymi symulacjami ataków, wymaga to ogromnej ilości czasu i specjalistycznej wiedzy. Większość średnich firm nie ma w zespole dedykowanego "Eksperta ds. Bezpieczeństwa Serverless".
Właśnie dlatego zbudowano Penetrify. Jest to platforma oparta na chmurze, która usuwa złożoność z tego procesu. Zamiast polegać na ręcznych listach kontrolnych i przestarzałych narzędziach, Penetrify zapewnia kompleksowy ekosystem do identyfikacji i naprawiania luk w zabezpieczeniach.
Automatyczne Skanowanie Luk w Zabezpieczeniach
Penetrify może automatycznie skanować konfiguracje serverless, aby znaleźć "łatwe cele". Identyfikuje nadmiernie permisywne role IAM, niezaszyfrowane zmienne środowiskowe i przestarzałe zależności we wszystkich funkcjach. Oznacza to, że nie musisz spędzać godzin, wpatrując się w zasady JSON, aby znaleźć pojedynczy *, którego nie powinno tam być.
Symulowanie Realnych Ataków
Oprócz skanowania w poszukiwaniu błędnych konfiguracji, Penetrify pozwala symulować, w jaki sposób atakujący faktycznie poruszałby się po systemie. Pomaga wizualizować ścieżki ataku — pokazując dokładnie, jak luka w publicznym API może prowadzić do pełnego naruszenia bazy danych.
Bezproblemowa Integracja
Jedną z najtrudniejszych części bezpieczeństwa jest skłonienie programistów do naprawienia błędów. Penetrify integruje się z istniejącymi przepływami pracy związanymi z bezpieczeństwem i systemami SIEM. Zamiast 50-stronicowego pliku PDF, który jest ignorowany, wyniki można przesyłać bezpośrednio do narzędzi, których używa już Twój zespół, czyniąc naprawę częścią codziennego sprintu, a nie kwartalnym obowiązkiem.
Skalowalność dla Złożonych Środowisk
Jeśli masz pięć funkcji, możesz zarządzać nimi w arkuszu kalkulacyjnym. Jeśli masz ich pięćset, jesteś skazany na porażkę. Penetrify został zaprojektowany z myślą o skalowaniu. Obsługuje złożone konfiguracje wielośrodowiskowe, umożliwiając przeprowadzanie testów jednocześnie w środowiskach development, staging i produkcyjnych, aby upewnić się, że poprawka bezpieczeństwa w jednym środowisku faktycznie trafiła do pozostałych.
Dogłębna Analiza: Niebezpieczeństwo "Zaufania do Danych Zdarzeń"
Chcę poświęcić trochę więcej czasu na koncepcję zwaną "Zaufaniem do Danych Zdarzeń". To tutaj faktycznie znajdują się większość luk w zabezpieczeniach serverless.
W tradycyjnej aplikacji internetowej jesteś przyzwyczajony do tego, by nie ufać niczemu, co pochodzi z przeglądarki użytkownika. Oczyszczasz dane wejściowe, sprawdzasz długość i unikasz znaków specjalnych. Ale w serverless programiści często ufają "wewnętrznym" zdarzeniom.
Wyobraź sobie następujący scenariusz:
- Użytkownik przesyła plik do zasobnika S3.
- Przesłanie do S3 wyzwala funkcję "FileProcessor".
- Funkcja "FileProcessor" odczytuje nazwę pliku i przekazuje ją do funkcji "ThumbnailGenerator" za pośrednictwem kolejki SQS.
Programista funkcji "ThumbnailGenerator" może pomyśleć: "Nie muszę oczyszczać nazwy pliku, ponieważ pochodzi ona z mojej własnej funkcji FileProcessor. To są dane wewnętrzne; są bezpieczne."
To ogromny błąd. Atakujący może nazwać przesłany plik ; rm -rf / ; .jpg. Funkcja "FileProcessor" po prostu przekazuje ten ciąg dalej. Gdy funkcja "ThumbnailGenerator" odbiera zdarzenie i przekazuje nazwę pliku do polecenia powłoki, aby uruchomić narzędzie do przetwarzania obrazów, wykonuje złośliwy kod.
Nazywa się to Injection via Event. Aby temu zapobiec, musisz traktować każde zdarzenie — nawet te pochodzące z innych usług w chmurze — jako niezaufane dane wejściowe. Cloud Penetration Testing specjalnie celuje w te wewnętrzne przekazywania, aby sprawdzić, czy zaufanie jest przyjmowane bezkrytycznie.
Częste Błędy Podczas Zabezpieczania Aplikacji Serverless
Nawet przy najlepszych intencjach zespoły często popełniają te same błędy. Jeśli obecnie budujesz aplikację serverless, sprawdź, czy robisz któreś z poniższych:
1. Używanie "Roli Boga" do Wszystkiego
Kuszące jest utworzenie jednej roli IAM z AdministratorAccess i dołączenie jej do każdej funkcji Lambda. Przyspiesza to rozwój, ponieważ nigdy nie napotykasz błędów "Odmowa Dostępu". Ale w środowisku produkcyjnym to katastrofa. Jeśli jedna funkcja zostanie naruszona, atakujący ma pełną kontrolę nad Twoim kontem AWS.
Rozwiązanie: Utwórz jedną rolę na funkcję. Użyj IAM Policy Simulator, aby znaleźć dokładne minimalne wymagane uprawnienia.
2. Wpisywanie na Sztywno Sekretów w Zmiennych Środowiskowych
O ile zmienne środowiskowe są lepsze niż wpisywanie haseł na stałe w kodzie źródłowym, nadal są one przechowywane w postaci zwykłego tekstu w konsoli chmury. Każdy, kto ma dostęp "Tylko do odczytu" do konfiguracji Lambda, może zobaczyć hasło do bazy danych. Rozwiązanie: Użyj dedykowanej usługi zarządzania sekretami (takiej jak AWS Secrets Manager lub Azure Key Vault). Pobierz sekret w czasie wykonywania w kodzie funkcji.
3. Ignorowanie limitów czasu funkcji
Ustawienie limitu czasu funkcji na 15 minut (maksimum dla Lambda) może wydawać się bezpiecznym rozwiązaniem, aby zapewnić zakończenie działania funkcji. Jednak można to wykorzystać. Atakujący może uruchomić funkcję, a następnie wysłać do niej żądanie, które utrzymuje połączenie otwarte przez pełne 15 minut, wyczerpując limity współbieżności i powodując gwałtowny wzrost rachunku. Rozwiązanie: Ustaw limit czasu na najniższą możliwą wartość, która nadal pozwala funkcji na wykonanie zadania w normalnych warunkach.
4. Zaniedbywanie logowania i monitorowania
Ponieważ funkcje serverless są efemeryczne, znikają po uruchomieniu. Jeśli nie wysyłasz dzienników do centralnej lokalizacji (takiej jak CloudWatch lub ELK), nie masz możliwości dowiedzieć się, że atakujący próbuje wstrzyknąć kod do twoich funkcji przez ostatnie trzy tygodnie. Rozwiązanie: Wdróż ustrukturyzowane logowanie. Rejestruj nie tylko błędy, ale także "interesujące" zdarzenia — takie jak nieoczekiwane formaty danych wejściowych lub powtarzające się błędy autoryzacji.
Lista kontrolna bezpieczeństwa Serverless dla zespołów DevOps
Jeśli chcesz szybko sprawdzić swój obecny stan, użyj tej listy kontrolnej. Jeśli nie możesz zaznaczyć każdego pola, czas przeprowadzić profesjonalny Penetration Test chmury.
Zarządzanie tożsamością i dostępem (IAM)
- Każda funkcja ma własną, unikalną rolę IAM.
- Żadne role nie używają symbolu wieloznacznego
*dla krytycznych działań (np.s3:*,iam:*). - Role są ograniczone do określonych zasobów (np. określonych ARN-ów bucketów).
- Role IAM są poddawane audytowi kwartalnemu pod kątem nieużywanych uprawnień.
Dane i walidacja danych wejściowych
- Wszystkie dane wejściowe API Gateway są walidowane przy użyciu schematu JSON.
- Wszystkie dane przekazywane między funkcjami są traktowane jako niezaufane.
- Żadne funkcje wykonujące polecenia powłoki (np.
os.system()w Pythonie) nie są używane z danymi dostarczonymi przez użytkownika. - Zapytania NoSQL/SQL używają parametryzowanych danych wejściowych, aby zapobiec wstrzykiwaniu (SQL Injection).
Sekrety i konfiguracja
- Żadne sekrety (klucze API, hasła) nie są przechowywane w zmiennych środowiskowych.
- Wszystkie sekrety są przechowywane w zarządzanym skarbcu sekretów.
- Zmienne środowiskowe są używane tylko do konfiguracji niewrażliwych danych.
- Rotacja sekretów jest włączona dla krytycznych poświadczeń.
Obserwowalność i odporność
- Wszystkie funkcje mają ustawione odpowiednie limity czasu (nie tylko domyślny maksymalny).
- Limity współbieżności są ustawiane dla każdej funkcji, aby zapobiec atakom DoS.
- Wszystkie dzienniki funkcji są przesyłane strumieniowo do centralnego narzędzia do monitorowania bezpieczeństwa.
- Alerty są konfigurowane dla wysokich wskaźników błędów 4XX lub 5XX.
Studium przypadku: Funkcja "Dziurawy Bucket"
Opowiem ci o scenariuszu, który spotkałem jakiś czas temu. Średniej wielkości firma fintech zbudowała system serverless do obsługi przesyłania dokumentów klientów (dowody osobiste, formularze podatkowe).
Konfiguracja: Użytkownik przesłał plik PDF do bucketa S3. To wyzwoliło funkcję Lambda, która wyodrębniła tekst z pliku PDF i zapisała go w bazie danych.
Luka w zabezpieczeniach:
Programista nadał funkcji Lambda uprawnienie s3:GetObject, ale zastosował je do całego konta S3, a nie tylko do bucketa "uploads". Dodatkowo funkcja nie sprawdzała, czy przetwarzany plik rzeczywiście należy do użytkownika, który wywołał żądanie.
Atak:
Sprytny użytkownik odkrył, że jeśli odgadnie nazwę przesłanego pliku innego użytkownika (które były nazywane w przewidywalny sposób, np. user123_tax.pdf), może utworzyć konkretne żądanie API, które zmusi funkcję Lambda do przetworzenia dokumentu kogoś innego i zwrócenia wyodrębnionego tekstu w odpowiedzi API.
Wynik: Firma ujawniała wrażliwe dane podatkowe tysięcy użytkowników. "Serwer" był doskonale zabezpieczony — nie było systemu operacyjnego do zhakowania. Luka w zabezpieczeniach tkwiła wyłącznie w uprawnieniach IAM i logice aplikacji.
Jak Penetration Test by to wykrył: Osoba przeprowadzająca Penetration Testing chmury przeanalizowałaby rolę IAM i zobaczyła szerokie uprawnienie S3. Następnie przetestowałaby ataki "IDOR" (Insecure Direct Object Reference), próbując uzyskać dostęp do plików, które nie należą do ich konta testowego. Zanim firma znalazła błąd, szkody zostały już wyrządzone. To jest dokładnie powód, dla którego "zautomatyzowane" bezpieczeństwo nie wystarcza — potrzebujesz aktywnych, symulowanych ataków, aby znaleźć te luki w logice.
FAQ: Wszystko, co musisz wiedzieć o bezpieczeństwie Serverless
Czy serverless jest bezpieczniejsze niż tradycyjny hosting?
To zależy od tego, gdzie spojrzysz. Jest bezpieczniejsze na poziomie infrastruktury, ponieważ dostawca chmury zajmuje się łataniem i izolacją. Jednak często jest mniej bezpieczne na poziomie aplikacji, ponieważ złożoność zarządzania setkami uprawnień i wyzwalaczy zdarzeń prowadzi do większej liczby błędów ludzkich.
Czy nadal potrzebuję Web Application Firewall (WAF) dla serverless?
Tak, absolutnie. Chociaż WAF nie powstrzyma błędnej konfiguracji IAM, jest to twoja pierwsza linia obrony przed typowymi atakami, takimi jak SQL Injection, Cross-Site Scripting (XSS) i bot scraping, zanim żądanie dotrze do twojej funkcji.
Jak często powinienem przeprowadzać Penetration Testing chmury?
Przynajmniej raz w roku. Jeśli jednak wdrażasz nowe funkcje co tydzień lub zmieniasz architekturę IAM, powinieneś włączyć testowanie bezpieczeństwa do swojego potoku CI/CD. W tym miejscu platforma taka jak Penetrify staje się przełomowa, ponieważ umożliwia bardziej ciągłą ocenę niż coroczny audyt manualny.
Czy atakujący może "wydostać się" z funkcji Lambda do serwera hosta?
Teoretycznie tak (przez luki typu "container escape"), ale w praktyce zdarza się to niezwykle rzadko. Dostawcy usług chmurowych wydają miliony, aby zapewnić izolację mikro-VM (takich jak Firecracker dla AWS). Prawdziwe ryzyko nie polega na wydostaniu się z funkcji; polega na wykorzystaniu uprawnień funkcji do atakowania innych usług.
Czy Penetration Testing spowoduje awarię mojej produkcyjnej aplikacji serverless?
Jeśli zostanie to zrobione prawidłowo, nie. Profesjonalni pentesterzy używają "bezpiecznych" payloadów i przeprowadzają testy najpierw w środowisku stagingowym. Jednak rzeczy takie jak testy "Resource Exhaustion" mogą spowodować przestoje, jeśli nie ustawiłeś odpowiednich limitów współbieżności. Zawsze koordynuj okna testowe z zespołem DevOps.
Przemyślenia końcowe: Przejście do proaktywnej postawy w zakresie bezpieczeństwa
Przejście na architekturę serverless to świetna decyzja biznesowa, ale wymaga zmiany sposobu myślenia o bezpieczeństwie. Nie możesz już polegać na "firewallu" w celu ochrony swojej aplikacji. W świecie serverless Tożsamość jest nowym perymetrem.
Jeśli twoje role IAM są dobrze zdefiniowane, walidacja danych wejściowych jest rygorystyczna, a twoje sekrety są zarządzane, jesteś już o krok przed 90% firm. Ale nie możesz po prostu "mieć nadziei", że twoje konfiguracje są poprawne. Jedynym sposobem, aby się upewnić, jest próba złamania własnego systemu, zanim zrobi to ktoś inny.
Penetration Testing w chmurze to nie tylko zaznaczenie pola w celu zapewnienia zgodności; to konieczność dla każdego, kto uruchamia krytyczną logikę biznesową w chmurze. Niezależnie od tego, czy robisz to, zatrudniając butikową firmę zajmującą się bezpieczeństwem, czy wykorzystując platformę natywną dla chmury, taką jak Penetrify, cel jest ten sam: znaleźć luki, naprawić uprawnienia i przestać ufać swoim wewnętrznym zdarzeniom.
Jeśli nie jesteś pewien, w jakim stanie są obecnie twoje aplikacje serverless, zacznij od audytu swoich ról IAM. Poszukaj dowolnego uprawnienia, które kończy się na :*. Jeśli znajdziesz takie, to już znalazłeś swoją pierwszą lukę w zabezpieczeniach.
Przestań zgadywać i zacznij testować. Twoje dane — i twoi klienci — będą ci wdzięczni.
Chcesz zobaczyć, gdzie ukrywają się twoje luki w zabezpieczeniach? Nie czekaj na naruszenie bezpieczeństwa, aby dowiedzieć się, że twoje role IAM są zbyt szerokie lub twoje funkcje wyciekają dane. Zobacz, jak Penetrify może pomóc ci zautomatyzować Penetration Testing w chmurze i zabezpieczyć infrastrukturę serverless. Uzyskaj jasny obraz swojej powierzchni ataku i usuwaj zagrożenia, zanim staną się nagłówkami wiadomości.