AWS - CloudTrail Enum
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)
AWS CloudTrail rejestruje i monitoruje aktywność w Twoim środowisku AWS. Zbiera szczegółowe dzienniki zdarzeń, w tym kto co zrobił, kiedy i skąd, dla wszystkich interakcji z zasobami AWS. To zapewnia ślad audytowy zmian i działań, wspierając analizę bezpieczeństwa, audyt zgodności i śledzenie zmian zasobów. CloudTrail jest niezbędny do zrozumienia zachowań użytkowników i zasobów, poprawy postur bezpieczeństwa oraz zapewnienia zgodności z regulacjami.
Każde zarejestrowane zdarzenie zawiera:
Nazwę wywołanego API: eventName
Wywoływaną usługę: eventSource
Czas: eventTime
Adres IP: SourceIPAddress
Metodę agenta: userAgent
. Przykłady:
Signing.amazonaws.com - Z AWS Management Console
console.amazonaws.com - Użytkownik główny konta
lambda.amazonaws.com - AWS Lambda
Parametry żądania: requestParameters
Elementy odpowiedzi: responseElements
Zdarzenia są zapisywane do nowego pliku dziennika około co 5 minut w pliku JSON, są przechowywane przez CloudTrail, a na koniec pliki dziennika są dostarczane do S3 około 15 minut po. Dzienniki CloudTrail mogą być agregowane w różnych kontach i regionach. CloudTrail pozwala na użycie integralności plików dziennika, aby móc zweryfikować, że Twoje pliki dziennika pozostały niezmienione od momentu, gdy CloudTrail je dostarczył. Tworzy skrót SHA-256 dzienników w pliku podsumowującym. Skrót sha-256 nowych dzienników jest tworzony co godzinę. Podczas tworzenia Trail selektory zdarzeń pozwolą Ci wskazać, jakie zdarzenia mają być rejestrowane: zarządzanie, dane lub zdarzenia wglądowe.
Dzienniki są przechowywane w wiadrze S3. Domyślnie używana jest szyfrowanie po stronie serwera (SSE-S3), więc AWS odszyfruje zawartość dla osób, które mają do niej dostęp, ale dla dodatkowego bezpieczeństwa możesz użyć SSE z KMS i własnymi kluczami.
Dzienniki są przechowywane w wiadrze S3 o tym formacie nazwy:
BucketName/AWSLogs/AccountID/CloudTrail/RegionName/YYY/MM/DD
Gdzie BucketName: aws-cloudtrail-logs-<accountid>-<random>
Przykład: aws-cloudtrail-logs-947247140022-ffb95fe7/AWSLogs/947247140022/CloudTrail/ap-south-1/2023/02/22/
Wewnątrz każdego folderu każdy dziennik będzie miał nazwę w tym formacie: AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz
Konwencja nazewnictwa plików dziennika
Ponadto, pliki podsumowujące (do sprawdzania integralności plików) będą znajdować się w tym samym wiadrze w:
Utwórz Trail w koncie AWS, do którego chcesz, aby pliki dziennika były dostarczane
Zastosuj uprawnienia do docelowego wiadra S3, umożliwiając dostęp między kontami dla CloudTrail i pozwól każdemu kontu AWS, które potrzebuje dostępu
Utwórz nowy Trail w innych kontach AWS i wybierz utworzone wiadro w kroku 1
Jednak nawet jeśli możesz zapisać wszystkie dzienniki w tym samym wiadrze S3, nie możesz agregować dzienników CloudTrail z wielu kont do dzienników CloudWatch należących do jednego konta AWS.
Pamiętaj, że konto może mieć różne Trail z CloudTrail włączone, przechowując te same (lub różne) dzienniki w różnych wiadrach.
Podczas tworzenia CloudTrail, możliwe jest wskazanie, aby aktywować CloudTrail dla wszystkich kont w organizacji i uzyskać dzienniki do tylko 1 wiadra:
W ten sposób możesz łatwo skonfigurować CloudTrail we wszystkich regionach wszystkich kont i scentralizować dzienniki w 1 koncie (które powinieneś chronić).
Możesz sprawdzić, czy dzienniki nie zostały zmienione, uruchamiając
CloudTrail może automatycznie wysyłać logi do CloudWatch, abyś mógł ustawić alerty, które ostrzegają cię, gdy wykonywane są podejrzane działania. Zauważ, że aby umożliwić CloudTrail wysyłanie logów do CloudWatch, należy utworzyć rolę, która pozwala na tę akcję. Jeśli to możliwe, zaleca się użycie domyślnej roli AWS do wykonywania tych działań. Ta rola pozwoli CloudTrail na:
CreateLogStream: To pozwala na tworzenie strumieni logów CloudWatch
PutLogEvents: Dostarczanie logów CloudTrail do strumienia logów CloudWatch
Historia zdarzeń CloudTrail pozwala na przeglądanie w tabeli logów, które zostały zarejestrowane:
CloudTrail Insights automatycznie analizuje zdarzenia zarządzania zapisem z tras CloudTrail i informuje cię o nietypowej aktywności. Na przykład, jeśli nastąpi wzrost zdarzeń TerminateInstance
, który różni się od ustalonych podstaw, zobaczysz to jako zdarzenie Insight. Te zdarzenia ułatwiają znalezienie i reagowanie na nietypową aktywność API jak nigdy dotąd.
Wnioski są przechowywane w tym samym koszu co logi CloudTrail w: BucketName/AWSLogs/AccountID/CloudTrail-Insight
AWS Access Advisor opiera się na ostatnich 400 dniach logów AWS CloudTrail, aby zebrać swoje wnioski. CloudTrail rejestruje historię wywołań API AWS i związanych z nimi zdarzeń dokonanych w koncie AWS. Access Advisor wykorzystuje te dane, aby pokazać, kiedy usługi były ostatnio używane. Analizując logi CloudTrail, Access Advisor może określić, które usługi AWS były używane przez użytkownika IAM lub rolę oraz kiedy miało to miejsce. Pomaga to administratorom AWS podejmować świadome decyzje dotyczące udoskonalania uprawnień, ponieważ mogą zidentyfikować usługi, które nie były używane przez dłuższy czas i potencjalnie zmniejszyć zbyt szerokie uprawnienia na podstawie rzeczywistych wzorców użycia.
Dlatego Access Advisor informuje o niepotrzebnych uprawnieniach przyznawanych użytkownikom, aby administrator mógł je usunąć
Możliwe jest przeprowadzenie ataku CVS w CloudTrail, który wykona dowolny kod, jeśli logi zostaną wyeksportowane w formacie CSV i otwarte w Excelu. Poniższy kod wygeneruje wpis logu z nieprawidłową nazwą Trail zawierającą ładunek:
For more information about CSV Injections check the page:
For more information about this specific technique check https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/
Honeytokens są tworzone w celu wykrywania eksfiltracji wrażliwych informacji. W przypadku AWS, są to klucze AWS, których użycie jest monitorowane, jeśli coś wywoła akcję z tym kluczem, to ktoś musiał ukraść ten klucz.
Jednakże, Honeytokens, takie jak te stworzone przez Canarytokens, SpaceCrab, SpaceSiren używają rozpoznawalnej nazwy konta lub używają tego samego identyfikatora konta AWS dla wszystkich swoich klientów. Dlatego, jeśli możesz uzyskać nazwę konta i/lub identyfikator konta bez powodowania, że Cloudtrail utworzy jakikolwiek log, możesz wiedzieć, czy klucz jest honeytokenem, czy nie.
Pacu ma pewne zasady, aby wykryć, czy klucz należy do Canarytokens, SpaceCrab, SpaceSiren:
Jeśli canarytokens.org
pojawia się w nazwie roli lub identyfikator konta 534261010715
pojawia się w komunikacie o błędzie.
Testując je bardziej niedawno, używają konta 717712589309
i nadal mają ciąg canarytokens.com
w nazwie.
Jeśli SpaceCrab
pojawia się w nazwie roli w komunikacie o błędzie
SpaceSiren używa uuids do generowania nazw użytkowników: [a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}
Jeśli nazwa wygląda na losowo wygenerowaną, istnieje duże prawdopodobieństwo, że jest to HoneyToken.
Możesz uzyskać identyfikator konta z zakodowanego wewnątrz klucza dostępu jak wyjaśniono tutaj i sprawdzić identyfikator konta z twoją listą kont Honeytokens AWS:
Sprawdź więcej informacji w oryginalnych badaniach.
Najskuteczniejsza technika w tym przypadku jest właściwie prosta. Po prostu użyj klucza, który właśnie znalazłeś, aby uzyskać dostęp do jakiejś usługi w swoim własnym koncie atakującego. To spowoduje, że CloudTrail wygeneruje log w TWOIM WŁASNYM koncie AWS, a nie w koncie ofiary.
Rzecz w tym, że wynik pokaże błąd wskazujący na identyfikator konta i nazwę konta, więc będziesz mógł zobaczyć, czy to jest Honeytoken.
W przeszłości istniały niektóre usługi AWS, które nie wysyłały logów do CloudTrail (znajdź listę tutaj). Niektóre z tych usług odpowiedzą z błędem zawierającym ARN roli klucza, jeśli ktoś nieautoryzowany (klucz honeytoken) spróbuje uzyskać do nich dostęp.
W ten sposób atakujący może uzyskać ARN klucza bez wywoływania jakiegokolwiek logu. W ARN atakujący może zobaczyć identyfikator konta AWS i nazwę, łatwo jest poznać identyfikatory kont i nazwy firm HoneyToken, więc w ten sposób atakujący może zidentyfikować, czy token jest HoneyToken.
Zauważ, że wszystkie publiczne API, które odkryto, że nie tworzą logów CloudTrail, zostały teraz naprawione, więc być może będziesz musiał znaleźć swoje własne...
Aby uzyskać więcej informacji, sprawdź oryginalne badania.
Niektóre usługi AWS tworzą pewną infrastrukturę, taką jak bazy danych lub klastry Kubernetes (EKS). Użytkownik rozmawiający bezpośrednio z tymi usługami (jak API Kubernetes) nie będzie używał API AWS, więc CloudTrail nie będzie w stanie zobaczyć tej komunikacji.
Dlatego użytkownik z dostępem do EKS, który odkrył adres URL API EKS, mógłby wygenerować token lokalnie i rozmawiać z usługą API bez wykrycia przez Cloudtrail.
Więcej informacji w:
W pierwszym przykładzie pojedynczy selektor zdarzeń jest podany jako tablica JSON z pojedynczym obiektem. "ReadWriteType": "ReadOnly"
wskazuje, że selektor zdarzeń powinien rejestrować tylko zdarzenia tylko do odczytu (więc CloudTrail insights nie będą sprawdzać zdarzeń zapisu, na przykład).
Możesz dostosować selektor zdarzeń w oparciu o swoje specyficzne wymagania.
Usuń koszyk S3
Zmień politykę koszyka, aby odmówić wszelkich zapisów z usługi CloudTrail
Dodaj politykę cyklu życia do koszyka S3, aby usunąć obiekty
Wyłącz klucz KMS używany do szyfrowania dzienników CloudTrail
Możesz wygenerować klucz asymetryczny i sprawić, aby CloudTrail szyfrował dane tym kluczem oraz usunąć klucz prywatny, aby zawartość CloudTrail nie mogła być odzyskana. To jest zasadniczo ransomware S3-KMS wyjaśnione w:
Ransomware KMS
To najprostszy sposób na przeprowadzenie poprzedniego ataku z różnymi wymaganiami dotyczącymi uprawnień:
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)
Integralność pliku logu CloudTrail
Walidacja, czy logi zostały zmanipulowane (zmodyfikowane lub usunięte)
Używa plików skrótów (tworzy hash dla każdego pliku)
Haszowanie SHA-256
SHA-256 z RSA do podpisywania cyfrowego
klucz prywatny należący do Amazon
Tworzenie pliku skrótu zajmuje 1 godzinę (robione co godzinę)
Zatrzymaj nieautoryzowany dostęp
Użyj polityk IAM i polityk koszyków S3
zespół bezpieczeństwa —> dostęp administracyjny
audytorzy —> dostęp tylko do odczytu
Użyj SSE-S3/SSE-KMS do szyfrowania logów
Zapobiegaj usuwaniu plików logów
Ogranicz dostęp do usuwania za pomocą polityk IAM i polityk koszyków
Skonfiguruj usuwanie MFA S3
Walidacja za pomocą Walidacji plików logów