From bcbda42e266277c8028da9acfdb123e2b52a123d Mon Sep 17 00:00:00 2001 From: Translator Date: Fri, 27 Feb 2026 14:14:39 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/aws-security/aws-services/aws-s3-a --- .../aws-s3-athena-and-glacier-enum.md | 138 +++++++++--------- 1 file changed, 69 insertions(+), 69 deletions(-) diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-s3-athena-and-glacier-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-s3-athena-and-glacier-enum.md index 612789abb..6b4956386 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-s3-athena-and-glacier-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-s3-athena-and-glacier-enum.md @@ -4,36 +4,36 @@ ## S3 -Amazon S3 to usługa, która pozwala **przechowywać duże ilości danych**. +Amazon S3 is a service that allows you **przechowywać duże ilości danych**. -Amazon S3 oferuje kilka opcji zapewnienia **ochrony** danych w spoczynku. Opcje obejmują **Permission** (Policy), **Encryption** (Client and Server Side), **Bucket Versioning** oraz **MFA** **based delete**. **użytkownik może włączyć** dowolną z tych opcji, aby osiągnąć ochronę danych. **Replikacja danych** jest wewnętrzną funkcją AWS, gdzie **S3 automatycznie replikuje każdy obiekt pomiędzy wszystkimi Availability Zones** i organizacja nie musi jej włączać w tym przypadku. +Amazon S3 provides multiple options to achieve the **ochronę** danych w spoczynku. The options include **Uprawnienia** (Policy), **Szyfrowanie** (Client and Server Side), **Bucket Versioning** i **MFA** **based delete**. The **użytkownik może włączyć** dowolną z tych opcji, aby zabezpieczyć dane. **Data replication** to wewnętrzna funkcja AWS, w której **S3 automatycznie replikuje każdy obiekt we wszystkich Availability Zones** i organizacja nie musi jej włączać. -Dzięki uprawnieniom opartym na zasobach możesz zdefiniować uprawnienia dla podkatalogów swojego bucketu osobno. +Dzięki uprawnieniom opartym na zasobach można osobno zdefiniować uprawnienia dla podkatalogów w bucketu. ### Bucket Versioning and MFA based delete -Kiedy bucket versioning jest włączony, każda akcja próbująca zmodyfikować plik spowoduje utworzenie nowej wersji pliku, zachowując też poprzednią zawartość. W związku z tym zawartość nie zostanie nadpisana. +When bucket versioning is enabled, any action that tries to alter a file inside a file will generate a new version of the file, keeping also the previous content of the same. Therefore, it won't overwrite its content. -Dodatkowo, MFA based delete uniemożliwi usunięcie wersji plików w S3 bucket oraz wyłączenie Bucket Versioning, więc atakujący nie będzie mógł zmodyfikować tych plików. +Dodatkowo, MFA based delete zapobiegnie usuwaniu wersji plików w S3 bucket oraz wyłączeniu Bucket Versioning, więc atakujący nie będzie w stanie zmodyfikować tych plików. ### S3 Access logs -Możliwe jest **włączenie S3 access login** (które domyślnie jest wyłączone) dla danego bucketu i zapisanie logów w innym bucketu, aby wiedzieć, kto uzyskuje dostęp do bucketu (oba buckety muszą być w tym samym regionie). +Możliwe jest **włączenie S3 access login** (domyślnie wyłączone) dla bucketu i zapisanie logów w innym buckecie, aby wiedzieć, kto uzyskuje dostęp do bucketu (oba buckety muszą być w tym samym regionie). ### S3 Presigned URLs -Możliwe jest wygenerowanie presigned URL, który zazwyczaj można użyć do **dostępu do określonego pliku** w bucket. **Presigned URL wygląda tak**: +It's possible to generate a presigned URL that can usually be used to **uzyskać dostęp do określonego pliku** w bucketu. A **presigned URL looks like this**: ``` https://.s3.us-east-1.amazonaws.com/asd.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAUUE8GZC4S5L3TY3P%2F20230227%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230227T142551Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Security-Token=IQoJb3JpZ2luX2VjELf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMSJHMEUCIBhQpdETJO3HKKDk2hjNIrPWwBE8gZaQccZFV3kCpPCWAiEAid3ueDtFFU%2FOQfUpvxYTGO%2BHoS4SWDMUrQAE0pIaB40qggMIYBAAGgwzMTgxNDIxMzg1NTMiDJLI5t7gr2EGxG1Y5CrfAioW0foHIQ074y4gvk0c%2B%2Fmqc7cNWb1njQslQkeePHkseJ3owzc%2FCwkgE0EuZTd4mw0aJciA2XIbJRCLPWTb%2FCBKPnIMJ5aBzIiA2ltsiUNQTTUxYmEgXZoJ6rFYgcodnmWW0Et4Xw59UlHnCDB2bLImxPprriyCzDDCD6nLyp3J8pFF1S8h3ZTJE7XguA8joMs4%2B2B1%2FeOZfuxXKyXPYSKQOOSbQiHUQc%2BFnOfwxleRL16prWk1t7TamvHR%2Bt3UgMn5QWzB3p8FgWwpJ6GjHLkYMJZ379tkimL1tJ7o%2BIod%2FMYrS7LDCifP9d%2FuYOhKWGhaakPuJKJh9fl%2B0vGl7kmApXigROxEWon6ms75laXebltsWwKcKuYca%2BUWu4jVJx%2BWUfI4ofoaGiCSaKALTqwu4QNBRT%2BMoK6h%2BQa7gN7JFGg322lkxRY53x27WMbUE4unn5EmI54T4dWt1%2Bg8ljDS%2BvKfBjqmAWRwuqyfwXa5YC3xxttOr3YVvR6%2BaXpzWtvNJQNnb6v0uI3%2BTtTexZkJpLQYqFcgZLQSxsXWSnf988qvASCIUhAzp2UnS1uqy7QjtD5T73zksYN2aesll7rvB80qIuujG6NOdHnRJ2M5%2FKXXNo1Yd15MtzPuSjRoSB9RSMon5jFu31OrQnA9eCUoawxbB0nHqwK8a43CKBZHhA8RoUAJW%2B48EuFsp3U%3D&X-Amz-Signature=3436e4139e84dbcf5e2e6086c0ebc92f4e1e9332b6fda24697bc339acbf2cdfa ``` -Presigned URL może być **utworzony z poziomu cli przy użyciu poświadczeń principala mającego dostęp do obiektu** (jeśli konto, którego używasz, nie ma dostępu, zostanie utworzony krótszy presigned URL, ale będzie bezużyteczny) +Presigned URL można **utworzyć z poziomu cli, używając credentials principala, który ma dostęp do obiektu** (jeśli konto, którego używasz, nie ma dostępu, zostanie utworzony krótszy presigned URL, ale będzie bezużyteczny) ```bash aws s3 presign --region 's3:///' ``` > [!NOTE] -> Jedynym wymaganym uprawnieniem do wygenerowania presigned URL jest uprawnienie, które jest przydzielane, więc dla poprzedniego polecenia jedynym uprawnieniem potrzebnym principalowi jest `s3:GetObject` +> Jedynym wymaganym uprawnieniem do wygenerowania presigned URL jest uprawnienie będące przyznawanym, więc dla poprzedniego polecenia jedynym uprawnieniem potrzebnym przez principal jest `s3:GetObject` -Możliwe jest również tworzenie presigned URLs z **innymi uprawnieniami**: +Możliwe jest także tworzenie presigned URLs z **innymi uprawnieniami**: ```python import boto3 url = boto3.client('s3').generate_presigned_url( @@ -44,22 +44,22 @@ ExpiresIn=3600 ``` ### Mechanizmy szyfrowania S3 -**DEK oznacza Data Encryption Key (klucz szyfrowania danych)** i jest kluczem, który zawsze jest generowany i używany do szyfrowania danych. +**DEK oznacza Data Encryption Key** i jest to klucz, który zawsze jest generowany i używany do szyfrowania danych.
Server-side encryption with S3 managed keys, SSE-S3 -Ta opcja wymaga minimalnej konfiguracji — całym zarządzaniem kluczami szyfrującymi zajmuje się AWS. Wystarczy, że **wgrasz swoje dane, a S3 zajmie się resztą**. Każdy bucket w koncie S3 ma przypisany bucket key. +Ta opcja wymaga minimalnej konfiguracji — całe zarządzanie używanymi kluczami szyfrowania jest prowadzone przez AWS. Wystarczy, że **wgrasz swoje dane, a S3 zajmie się resztą**. Każdemu bucketowi w koncie S3 przypisany jest bucket key. -- Szyfrowanie: -- Object Data + utworzony jawny DEK --> Zaszyfrowane dane (przechowywane w S3) -- Utworzony jawny DEK + S3 Master Key --> Zaszyfrowany DEK (przechowywany w S3) i tekst jawny jest usuwany z pamięci -- Odszyfrowanie: -- Zaszyfrowany DEK + S3 Master Key --> Jawny DEK -- Jawny DEK + zaszyfrowane dane --> Object Data +- Encryption: +- Object Data + created plaintext DEK --> Zaszyfrowane dane (przechowywane w S3) +- Created plaintext DEK + S3 Master Key --> Encrypted DEK (przechowywany w S3) i tekst jawny jest usuwany z pamięci +- Decryption: +- Encrypted DEK + S3 Master Key --> Plaintext DEK +- Plaintext DEK + Encrypted data --> Object Data -Należy pamiętać, że w tym przypadku **klucz jest zarządzany przez AWS** (rotacja tylko co 3 lata). Jeśli użyjesz własnego klucza, będziesz mógł go rotować, wyłączyć i zastosować kontrolę dostępu. +Proszę zwrócić uwagę, że w tym przypadku **klucz jest zarządzany przez AWS** (rotacja tylko co 3 lata). Jeśli użyjesz własnego klucza, będziesz mógł go rotować, wyłączyć i stosować kontrolę dostępu.
@@ -67,16 +67,16 @@ Należy pamiętać, że w tym przypadku **klucz jest zarządzany przez AWS** (ro Server-side encryption with KMS managed keys, SSE-KMS -Ta metoda pozwala S3 korzystać z Key Management Service do generowania Data Encryption Keys. KMS daje znacznie większą elastyczność w zarządzaniu kluczami. Na przykład możesz wyłączyć, rotować i stosować kontrolę dostępu do CMK oraz audytować ich użycie za pomocą AWS Cloud Trail. +Ta metoda pozwala S3 używać Key Management Service do generowania kluczy szyfrowania danych. KMS daje znacznie większą elastyczność w sposobie zarządzania kluczami. Na przykład możesz wyłączać, rotować i stosować kontrolę dostępu do CMK oraz audytować ich użycie za pomocą AWS Cloud Trail. -- Szyfrowanie: -- S3 żąda data key od KMS CMK -- KMS używa CMK do wygenerowania pary: jawny DEK i zaszyfrowany DEK, i wysyła je do S£ -- S3 używa jawnego klucza do zaszyfrowania danych, zapisuje zaszyfrowane dane i zaszyfrowany klucz oraz usuwa jawny klucz z pamięci -- Odszyfrowanie: -- S3 prosi KMS o odszyfrowanie zaszyfrowanego data key obiektu -- KMS odszyfrowuje data key za pomocą CMK i odsyła go z powrotem do S3 -- S3 odszyfrowuje dane obiektu +- Encryption: +- S3 request data keys from KMS CMK +- KMS uses a CMK to generate the pair DEK plaintext and DEK encrypted and send them to S£ +- S3 uses the plaintext key to encrypt the data, store the encrypted data and the encrypted key and deletes from memory the plain text key +- Decryption: +- S3 ask to KMS to decrypt the encrypted data key of the object +- KMS decrypt the data key with the CMK and send it back to S3 +- S3 decrypts the object data @@ -84,17 +84,17 @@ Ta metoda pozwala S3 korzystać z Key Management Service do generowania Data Enc Server-side encryption with customer provided keys, SSE-C -Ta opcja daje możliwość dostarczenia własnego klucza głównego, którego możesz używać poza AWS. Twój klucz dostarczony przez klienta jest wysyłany wraz z danymi do S3, gdzie S3 wykonuje szyfrowanie. +Ta opcja daje Ci możliwość dostarczenia własnego klucza głównego, którego możesz już używać poza AWS. Twój klucz dostarczony przez klienta jest wysyłany z danymi do S3, gdzie S3 wykona szyfrowanie za Ciebie. -- Szyfrowanie: -- Użytkownik wysyła Object Data + klucz klienta do S3 -- Klucz klienta jest używany do zaszyfrowania danych i zaszyfrowane dane są przechowywane -- Zasoltowana (zasolona) wartość HMAC klucza klienta jest również przechowywana do przyszłej weryfikacji klucza -- Klucz klienta jest usuwany z pamięci -- Odszyfrowanie: -- Użytkownik wysyła klucz klienta -- Klucz jest weryfikowany względem przechowywanej wartości HMAC -- Dostarczony przez klienta klucz jest następnie używany do odszyfrowania danych +- Encryption: +- The user sends the object data + Customer key to S3 +- The customer key is used to encrypt the data and the encrypted data is stored +- a salted HMAC value of the customer key is stored also for future key validation +- the customer key is deleted from memory +- Decryption: +- The user send the customer key +- The key is validated against the HMAC value stored +- The customer provided key is then used to decrypt the data @@ -102,17 +102,17 @@ Ta opcja daje możliwość dostarczenia własnego klucza głównego, którego mo Client-side encryption with KMS, CSE-KMS -Podobnie jak w SSE-KMS, tutaj również używany jest Key Management Service do generowania data encryption keys. Jednak tym razem KMS jest wywoływany przez klienta, nie przez S3. Szyfrowanie odbywa się po stronie klienta, a zaszyfrowane dane są wysyłane do S3 w celu przechowania. +Podobnie jak w SSE-KMS, tutaj również używany jest Key Management Service do generowania kluczy szyfrowania danych. Tym razem jednak KMS jest wywoływany przez klienta, a nie przez S3. Szyfrowanie odbywa się po stronie klienta, a zaszyfrowane dane są następnie wysyłane do S3 w celu przechowania. -- Szyfrowanie: -- Klient żąda data key od KMS -- KMS zwraca jawny DEK i zaszyfrowany DEK z CMK -- Oba klucze są zwracane -- Klient szyfruje dane jawym DEK i wysyła do S3 zaszyfrowane dane + zaszyfrowany DEK (który jest zapisywany jako metadata zaszyfrowanych danych w S3) -- Odszyfrowanie: -- Zaszyfrowane dane wraz z zaszyfrowanym DEK są wysyłane do klienta -- Klient prosi KMS o odszyfrowanie zaszyfrowanego klucza za pomocą CMK i KMS zwraca jawny DEK -- Klient może teraz odszyfrować zaszyfrowane dane +- Encryption: +- Client request for a data key to KMS +- KMS returns the plaintext DEK and the encrypted DEK with the CMK +- Both keys are sent back +- The client then encrypts the data with the plaintext DEK and send to S3 the encrypted data + the encrypted DEK (which is saved as metadata of the encrypted data inside S3) +- Decryption: +- The encrypted data with the encrypted DEK is sent to the client +- The client asks KMS to decrypt the encrypted key using the CMK and KMS sends back the plaintext DEK +- The client can now decrypt the encrypted data @@ -120,21 +120,21 @@ Podobnie jak w SSE-KMS, tutaj również używany jest Key Management Service do Client-side encryption with customer provided keys, CSE-C -Korzystając z tego mechanizmu możesz użyć dostarczonych przez siebie kluczy i użyć AWS-SDK po stronie klienta, aby zaszyfrować dane przed wysłaniem ich do S3. +Korzystając z tego mechanizmu możesz używać własnych kluczy i użyć klienta AWS-SDK, aby zaszyfrować dane przed wysłaniem ich do S3. -- Szyfrowanie: -- Klient generuje DEK i szyfruje dane jawne -- Następnie, używając własnego CMK, szyfruje DEK -- Przesyła zaszyfrowane dane + zaszyfrowany DEK do S3, gdzie jest przechowywane -- Odszyfrowanie: -- S3 wysyła zaszyfrowane dane i DEK -- Ponieważ klient posiada CMK użyty do zaszyfrowania DEK, odszyfrowuje DEK, a następnie używa jawnego DEK do odszyfrowania danych +- Encryption: +- The client generates a DEK and encrypts the plaintext data +- Then, using it's own custom CMK it encrypts the DEK +- submit the encrypted data + encrypted DEK to S3 where it's stored +- Decryption: +- S3 sends the encrypted data and DEK +- As the client already has the CMK used to encrypt the DEK, it decrypts the DEK and then uses the plaintext DEK to decrypt the data ### **Enumeration** -Jednym z tradycyjnych głównych sposobów kompromitowania organizacji AWS jest rozpoczęcie od przejęcia publicznie dostępnych bucketów. **Możesz znaleźć** [**public buckets enumerators in this page**](../aws-unauthenticated-enum-access/index.html#s3-buckets)**.** +Jednym z tradycyjnych głównych sposobów kompromitacji organizacji AWS jest przejęcie publicznie dostępnych bucketów. **Możesz znaleźć** [**public buckets enumerators in this page**](../aws-unauthenticated-enum-access/index.html#s3-buckets)**.** ```bash # Get buckets ACLs aws s3api get-bucket-acl --bucket @@ -229,7 +229,7 @@ aws s3api put-object-acl --bucket --key flag --access-control-poli ``` ### dual-stack -Możesz uzyskać dostęp do bucketu S3 przez endpoint dual-stack, używając nazwy endpointa w stylu virtual hosted-style lub path-style. Są one przydatne do dostępu do S3 przez IPv6. +Możesz uzyskać dostęp do bucketu S3 przez dual-stack endpoint, używając virtual hosted-style lub path-style endpoint name. Są one przydatne do dostępu do S3 przez IPv6. Dual-stack endpoints używają następującej składni: @@ -238,13 +238,13 @@ Dual-stack endpoints używają następującej składni: ### Privesc -Na poniższej stronie możesz sprawdzić, jak **abuse S3 permissions to escalate privileges**: +Na poniższej stronie możesz sprawdzić, jak **nadużyć uprawnień S3, aby eskalować przywileje**: {{#ref}} ../aws-privilege-escalation/aws-s3-privesc/README.md {{#endref}} -### Unauthenticated Access +### Dostęp bez uwierzytelnienia {{#ref}} ../aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum/README.md @@ -262,25 +262,25 @@ Na poniższej stronie możesz sprawdzić, jak **abuse S3 permissions to escalate ../aws-persistence/aws-s3-persistence/README.md {{#endref}} -## Other S3 vulns +## Inne podatności S3 ### S3 HTTP Cache Poisoning Issue -[**According to this research**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies#heading-s3-http-desync-cache-poisoning-issue) możliwe było zbuforowanie odpowiedzi dowolnego bucketu tak, jakby należała do innego. Mogło to zostać wykorzystane do zmiany na przykład odpowiedzi plików JavaScript i skompromitowania dowolnych stron używających S3 do przechowywania statycznego kodu. +[**Według tych badań**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies#heading-s3-http-desync-cache-poisoning-issue) możliwe było zcache'owanie odpowiedzi dowolnego bucketu, tak jakby należała do innego. Można było to wykorzystać do zmiany na przykład odpowiedzi plików JavaScript i skompromitowania dowolnych stron używających S3 do przechowywania statycznego kodu. ## Amazon Athena -Amazon Athena to interaktywny serwis zapytań, który ułatwia **analizować dane** bezpośrednio w Amazon Simple Storage Service (Amazon **S3**) **używając** standardowego **SQL**. +Amazon Athena jest interaktywną usługą zapytań, która ułatwia **analizować dane** bezpośrednio w Amazon Simple Storage Service (Amazon **S3**) **przy użyciu** standardowego **SQL**. -Musisz **przygotować relacyjną tabelę DB** z formatem zawartości, która będzie pojawiać się w monitorowanych bucketach S3. Następnie Amazon Athena będzie w stanie wypełnić DB z logów, abyś mógł wykonywać zapytania. +Musisz **przygotować relacyjną tabelę bazy danych** z formatem treści, która będzie pojawiać się w monitorowanych bucketach S3. Następnie Amazon Athena będzie mogła zapełnić bazę danymi z logów, abyś mógł je zapytywać. -Amazon Athena obsługuje **możliwość wykonywania zapytań na danych S3, które są już zaszyfrowane**, a jeśli jest tak skonfigurowana, **Athena może również szyfrować wyniki zapytania, które następnie mogą być przechowywane w S3**. +Amazon Athena obsługuje **możliwość zapytań do danych S3, które są już zaszyfrowane**, i jeśli jest tak skonfigurowana, **Athena może także szyfrować wyniki zapytania, które następnie mogą być przechowywane w S3**. -**To szyfrowanie wyników jest niezależne od zaszyfrowanych danych S3, na które kierowane jest zapytanie**, co oznacza, że nawet jeśli dane S3 nie są zaszyfrowane, wyniki zapytania mogą być zaszyfrowane. Kilka kwestii, o których warto pamiętać, to fakt, że Amazon Athena obsługuje tylko dane zaszyfrowane przy użyciu **następujących metod szyfrowania S3**, **SSE-S3, SSE-KMS, and CSE-KMS**. +To szyfrowanie wyników jest niezależne od danych S3, które są zapytywane, co oznacza, że nawet jeśli dane S3 nie są zaszyfrowane, wyniki zapytań mogą być zaszyfrowane. Kilka rzeczy, o których warto pamiętać: Amazon Athena obsługuje tylko dane, które zostały **zaszyfrowane** jednym z **następujących metod szyfrowania S3**, **SSE-S3, SSE-KMS i CSE-KMS**. -SSE-C i CSE-C nie są obsługiwane. Dodatkowo ważne jest zrozumienie, że Amazon Athena będzie wykonywać zapytania tylko wobec **zaszyfrowanych obiektów, które znajdują się w tym samym regionie co samo zapytanie**. Jeśli musisz wykonać zapytanie na danych S3 zaszyfrowanych przy użyciu KMS, wymagane są specyficzne uprawnienia dla użytkownika Athena, aby umożliwić mu przeprowadzenie zapytania. +SSE-C i CSE-C nie są obsługiwane. Dodatkowo ważne jest zrozumienie, że Amazon Athena będzie wykonywać zapytania tylko wobec **zaszyfrowanych obiektów, które znajdują się w tym samym regionie co samo zapytanie**. Jeśli potrzebujesz zapytać dane S3 zaszyfrowane przy użyciu KMS, wymagane są konkretne uprawnienia dla użytkownika Athena, aby umożliwić wykonanie zapytania. -### Enumeration +### Enumeracja ```bash # Get catalogs aws athena list-data-catalogs @@ -302,7 +302,7 @@ aws athena get-prepared-statement --statement-name --work-group # Run query aws athena start-query-execution --query-string ``` -## Źródła +## Odniesienia - [https://cloudsecdocs.com/aws/defensive/tooling/cli/#s3](https://cloudsecdocs.com/aws/defensive/tooling/cli/#s3) - [https://docs.aws.amazon.com/AmazonS3/latest/userguide/dual-stack-endpoints.html](https://docs.aws.amazon.com/AmazonS3/latest/userguide/dual-stack-endpoints.html)