Az - Storage Accounts & Blobs
Last updated
Last updated
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)
Konta magazynowe Azure to podstawowe usługi w Microsoft Azure, które zapewniają skalowalny, bezpieczny i wysoko dostępny magazyn w chmurze dla różnych typów danych, w tym blobów (dużych obiektów binarnych), plików, kolejek i tabel. Służą jako kontenery, które grupują te różne usługi magazynowe pod jedną przestrzenią nazw dla łatwego zarządzania.
Główne opcje konfiguracji:
Każde konto magazynowe musi mieć unikalną nazwę w całym Azure.
Każde konto magazynowe jest wdrażane w regionie lub w rozszerzonej strefie Azure.
Można wybrać wersję premium konta magazynowego dla lepszej wydajności.
Można wybrać spośród 4 typów redundancji, aby chronić przed awariami szafek, dysków i centrów danych.
Opcje konfiguracji bezpieczeństwa:
Wymagaj bezpiecznego transferu dla operacji REST API: Wymagaj TLS w każdej komunikacji z magazynem.
Zezwalaj na włączenie dostępu anonimowego do poszczególnych kontenerów: Jeśli nie, nie będzie możliwe włączenie dostępu anonimowego w przyszłości.
Włącz dostęp do klucza konta magazynowego: Jeśli nie, dostęp za pomocą kluczy współdzielonych będzie zabroniony.
Minimalna wersja TLS.
Dozwolony zakres dla operacji kopiowania: Zezwól z dowolnego konta magazynowego, z dowolnego konta magazynowego z tej samej dzierżawy Entra lub z konta magazynowego z prywatnymi punktami końcowymi w tej samej sieci wirtualnej.
Opcje przechowywania blobów:
Zezwalaj na replikację między dzierżawami.
Warstwa dostępu: Gorąca (często dostępne dane), Chłodna i Zimna (rzadko dostępne dane).
Opcje sieciowe:
Dostęp do sieci:
Zezwól z wszystkich sieci.
Zezwól z wybranych sieci wirtualnych i adresów IP.
Wyłącz dostęp publiczny i użyj dostępu prywatnego.
Prywatne punkty końcowe: Umożliwia prywatne połączenie z kontem magazynowym z sieci wirtualnej.
Opcje ochrony danych:
Przywracanie w punkcie w czasie dla kontenerów: Umożliwia przywrócenie kontenerów do wcześniejszego stanu.
Wymaga włączenia wersjonowania, strumienia zmian i miękkiego usuwania blobów.
Włącz miękkie usuwanie dla blobów: Umożliwia okres przechowywania w dniach dla usuniętych blobów (nawet nadpisanych).
Włącz miękkie usuwanie dla kontenerów: Umożliwia okres przechowywania w dniach dla usuniętych kontenerów.
Włącz miękkie usuwanie dla współdzielonych plików: Umożliwia okres przechowywania w dniach dla usuniętych współdzielonych plików.
Włącz wersjonowanie dla blobów: Utrzymuj poprzednie wersje swoich blobów.
Włącz strumień zmian blobów: Zachowuj logi tworzenia, modyfikacji i usuwania zmian w blobach.
Włącz wsparcie dla niezmienności na poziomie wersji: Umożliwia ustawienie polityki przechowywania opartej na czasie na poziomie konta, która będzie miała zastosowanie do wszystkich wersji blobów.
Wsparcie dla niezmienności na poziomie wersji i przywracanie w punkcie w czasie dla kontenerów nie mogą być włączone jednocześnie.
Opcje konfiguracji szyfrowania:
Typ szyfrowania: Można używać kluczy zarządzanych przez Microsoft (MMK) lub kluczy zarządzanych przez klienta (CMK).
Włącz szyfrowanie infrastruktury: Umożliwia podwójne szyfrowanie danych "dla większego bezpieczeństwa".
Magazyn blobów
https://<storage-account>.blob.core.windows.net
https://<stg-acc>.blob.core.windows.net/<container-name>?restype=container&comp=list
Magazyn Data Lake
https://<storage-account>.dfs.core.windows.net
Pliki Azure
https://<storage-account>.file.core.windows.net
Magazyn kolejek
https://<storage-account>.queue.core.windows.net
Magazyn tabel
https://<storage-account>.table.core.windows.net
Jeśli "Zezwalaj na publiczny dostęp do blobów" jest włączone (domyślnie wyłączone), podczas tworzenia kontenera można:
Umożliwić publiczny dostęp do odczytu blobów (musisz znać nazwę).
Wylistować bloby kontenera i je odczytać.
Uczynić go całkowicie prywatnym.
Jeśli znajdziesz jakikolwiek magazyn, z którym możesz się połączyć, możesz użyć narzędzia Microsoft Azure Storage Explorer, aby to zrobić.
Można używać zasad Entra ID z rolami RBAC do uzyskania dostępu do kont magazynowych i jest to zalecany sposób.
Konta magazynowe mają klucze dostępu, które można wykorzystać do uzyskania dostępu. To zapewnia pełny dostęp do konta magazynowego.
Można generować klucze współdzielone podpisane kluczami dostępu, aby autoryzować dostęp do określonych zasobów za pomocą podpisanego URL.
Zauważ, że część CanonicalizedResource
reprezentuje zasób usług magazynowych (URI). A jeśli jakakolwiek część w URL jest zakodowana, powinna być również zakodowana w CanonicalizedResource
.
To jest domyślnie używane przez az
cli do uwierzytelniania żądań. Aby użyć poświadczeń głównych Entra ID, wskaż parametr --auth-mode login
.
Można wygenerować klucz współdzielony dla usług blobów, kolejek i plików, podpisując następujące informacje:
Możliwe jest wygenerowanie klucza współdzielonego dla usług tabel podpisując następujące informacje:
Możliwe jest wygenerowanie lite shared key dla usług blob, queue i file, podpisując następujące informacje:
Możliwe jest wygenerowanie lite shared key dla usług tabel podpisując następujące informacje:
Aby użyć klucza, można to zrobić w nagłówku Authorization, stosując następującą składnię:
Shared Access Signatures (SAS) to bezpieczne, ograniczone czasowo URL-e, które przyznają określone uprawnienia do dostępu do zasobów w koncie Azure Storage bez ujawniania kluczy dostępu do konta. Podczas gdy klucze dostępu zapewniają pełny dostęp administracyjny do wszystkich zasobów, SAS pozwala na szczegółową kontrolę poprzez określenie uprawnień (takich jak odczyt lub zapis) i zdefiniowanie czasu wygaśnięcia.
User delegation SAS: Jest tworzony z Entra ID principal, który podpisuje SAS i deleguje uprawnienia od użytkownika do SAS. Może być używany tylko z blob i data lake storage (docs). Możliwe jest cofnięcie wszystkich wygenerowanych SAS delegowanych przez użytkownika.
Nawet jeśli możliwe jest wygenerowanie SAS delegacji z "większymi" uprawnieniami niż te, które ma użytkownik. Jednak jeśli principal ich nie ma, nie zadziała (brak privesc).
Service SAS: Jest podpisywany za pomocą jednego z kluczy dostępu do konta storage. Może być używany do przyznawania dostępu do określonych zasobów w pojedynczej usłudze storage. Jeśli klucz zostanie odnowiony, SAS przestanie działać.
Account SAS: Jest również podpisywany jednym z kluczy dostępu do konta storage. Przyznaje dostęp do zasobów w ramach usług konta storage (Blob, Queue, Table, File) i może obejmować operacje na poziomie usługi.
URL SAS podpisany przez klucz dostępu wygląda tak:
https://<container_name>.blob.core.windows.net/newcontainer?sp=r&st=2021-09-26T18:15:21Z&se=2021-10-27T02:14:21Z&spr=https&sv=2021-07-08&sr=c&sig=7S%2BZySOgy4aA3Dk0V1cJyTSIf1cW%2Fu3WFkhHV32%2B4PE%3D
URL SAS podpisany jako user delegation wygląda tak:
https://<container_name>.blob.core.windows.net/testing-container?sp=r&st=2024-11-22T15:07:40Z&se=2024-11-22T23:07:40Z&skoid=d77c71a1-96e7-483d-bd51-bd753aa66e62&sktid=fdd066e1-ee37-49bc-b08f-d0e152119b04&skt=2024-11-22T15:07:40Z&ske=2024-11-22T23:07:40Z&sks=b&skv=2022-11-02&spr=https&sv=2022-11-02&sr=c&sig=7s5dJyeE6klUNRulUj9TNL0tMj2K7mtxyRc97xbYDqs%3D
Zauważ niektóre parametry http:
Parametr se
wskazuje na datę wygaśnięcia SAS
Parametr sp
wskazuje na uprawnienia SAS
sig
to podpis weryfikujący SAS
Podczas generowania SAS należy wskazać uprawnienia, które powinny być przyznawane. W zależności od obiektu, na którym generowany jest SAS, mogą być uwzględnione różne uprawnienia. Na przykład:
(a)dd, (c)reate, (d)elete, (e)xecute, (f)ilter_by_tags, (i)set_immutability_policy, (l)ist, (m)ove, (r)ead, (t)ag, (w)rite, (x)delete_previous_version, (y)permanent_delete
Azure Blob Storage teraz obsługuje protokół SSH File Transfer Protocol (SFTP), umożliwiając bezpieczny transfer i zarządzanie plikami bezpośrednio do Blob Storage bez potrzeby stosowania niestandardowych rozwiązań lub produktów firm trzecich.
Wsparcie protokołu: SFTP działa z kontami Blob Storage skonfigurowanymi z hierarchiczną przestrzenią nazw (HNS). Organizuje bloby w katalogi i podkatalogi dla łatwiejszej nawigacji.
Bezpieczeństwo: SFTP używa lokalnych tożsamości użytkowników do uwierzytelniania i nie integruje się z RBAC ani ABAC. Każdy lokalny użytkownik może uwierzytelnić się za pomocą:
Haseł generowanych przez Azure
Par kluczy SSH publicznych-prywatnych
Szczegółowe uprawnienia: Uprawnienia takie jak Odczyt, Zapis, Usunięcie i Lista mogą być przypisane lokalnym użytkownikom do maksymalnie 100 kontenerów.
Rozważania dotyczące sieci: Połączenia SFTP są realizowane przez port 22. Azure wspiera konfiguracje sieciowe, takie jak zapory, prywatne punkty końcowe lub sieci wirtualne, aby zabezpieczyć ruch SFTP.
Hierarchiczna przestrzeń nazw: HNS musi być włączona podczas tworzenia konta storage.
Wspierane szyfrowanie: Wymaga zatwierdzonych przez Microsoft Security Development Lifecycle (SDL) algorytmów kryptograficznych (np. rsa-sha2-256, ecdsa-sha2-nistp256).
Konfiguracja SFTP:
Włącz SFTP na koncie storage.
Utwórz lokalne tożsamości użytkowników z odpowiednimi uprawnieniami.
Skonfiguruj katalogi domowe dla użytkowników, aby zdefiniować ich początkową lokalizację w kontenerze.
Odczyt
r
Odczyt zawartości pliku.
Zapis
w
Przesyłanie plików i tworzenie katalogów.
Lista
l
Lista zawartości katalogów.
Usunięcie
d
Usunięcie plików lub katalogów.
Tworzenie
c
Tworzenie plików lub katalogów.
Zmiana właściciela
o
Zmiana użytkownika lub grupy właściciela.
Zmiana uprawnień
p
Zmiana ACL na plikach lub katalogach.
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)