Translated ['src/pentesting-cloud/aws-security/aws-services/aws-organiza

This commit is contained in:
Translator
2025-02-17 12:03:19 +00:00
parent 6586b09492
commit bf1babd7ba
16 changed files with 428 additions and 334 deletions
+3 -3
View File
@@ -292,7 +292,7 @@
- [AWS - KMS Privesc](pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md)
- [AWS - Lambda Privesc](pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md)
- [AWS - Lightsail Privesc](pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md)
- [AWS - Macie Enum](pentesting-cloud/aws-security/aws-privilege-escalation/aws-macie-privesc.md)
- [AWS - Macie Privesc](pentesting-cloud/aws-security/aws-privilege-escalation/aws-macie-privesc.md)
- [AWS - Mediapackage Privesc](pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc.md)
- [AWS - MQ Privesc](pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md)
- [AWS - MSK Privesc](pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md)
@@ -415,7 +415,7 @@
- [Az - Azure App Services](pentesting-cloud/azure-security/az-services/az-app-services.md)
- [Az - Cloud Shell](pentesting-cloud/azure-security/az-services/az-cloud-shell.md)
- [Az - Container Registry](pentesting-cloud/azure-security/az-services/az-container-registry.md)
- [Az - Container Instances](pentesting-cloud/azure-security/az-services/az-container-instances.md)
- [Az - Container Instances, Apps & Jobs](pentesting-cloud/azure-security/az-services/az-container-instances-apps-jobs.md)
- [Az - CosmosDB](pentesting-cloud/azure-security/az-services/az-cosmosDB.md)
- [Az - Intune](pentesting-cloud/azure-security/az-services/intune.md)
- [Az - File Shares](pentesting-cloud/azure-security/az-services/az-file-shares.md)
@@ -470,7 +470,7 @@
- [Az - App Services Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md)
- [Az - Automation Accounts Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md)
- [Az - Container Registry Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-container-registry-privesc.md)
- [Az - Container Instances Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-container-instances-privesc.md)
- [Az - Container Instances, Apps & Jobs Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-container-instances-apps-jobs-privesc.md)
- [Az - CosmosDB Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-cosmosDB-privesc.md)
- [Az - EntraID Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/README.md)
- [Az - Conditional Access Policies & MFA Bypass](pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md)
@@ -40,6 +40,6 @@ aws iam get-account-summary
```
## Odniesienia
- https://aws.amazon.com/organizations/
- [https://aws.amazon.com/organizations/](https://aws.amazon.com/organizations/)
{{#include ../../../banners/hacktricks-training.md}}
@@ -4,7 +4,7 @@
## SQS
Amazon Simple Queue Service (SQS) jest przedstawiany jako **w pełni zarządzana usługa kolejkowania wiadomości**. Jego główną funkcją jest pomoc w skalowaniu i odseparowywaniu mikroserwisów, systemów rozproszonych i aplikacji bezserwerowych. Usługa została zaprojektowana w celu usunięcia potrzeby zarządzania i obsługi middleware opartego na wiadomościach, co często może być skomplikowane i zasobożerne. To wyeliminowanie złożoności pozwala programistom skierować swoje wysiłki na bardziej innowacyjne i wyróżniające aspekty ich pracy.
Amazon Simple Queue Service (SQS) jest przedstawiana jako **w pełni zarządzana usługa kolejkowania wiadomości**. Jej główną funkcją jest wspieranie skalowania i odseparowywania mikroserwisów, systemów rozproszonych oraz aplikacji bezserwerowych. Usługa została zaprojektowana w celu usunięcia potrzeby zarządzania i obsługi middleware opartego na wiadomościach, co często może być skomplikowane i zasobożerne. To wyeliminowanie złożoności pozwala programistom skierować swoje wysiłki na bardziej innowacyjne i wyróżniające aspekty ich pracy.
### Enumeration
```bash
@@ -46,6 +46,6 @@ aws sqs send-message --queue-url <value> --message-body <value>
## References
- https://docs.aws.amazon.com/cdk/api/v2/python/aws\_cdk.aws\_sqs/README.html
- [https://docs.aws.amazon.com/cdk/api/v2/python/aws\_cdk.aws\_sqs/README.html](https://docs.aws.amazon.com/cdk/api/v2/python/aws\_cdk.aws\_sqs/README.html)
{{#include ../../../banners/hacktricks-training.md}}
@@ -1,4 +1,4 @@
# Az - Utrzymywanie w magazynie kolejki
# Az - Utrzymywanie w magazynie kolejek
{{#include ../../../banners/hacktricks-training.md}}
@@ -12,7 +12,7 @@ Aby uzyskać więcej informacji, sprawdź:
### Akcje: `Microsoft.Storage/storageAccounts/queueServices/queues/write`
To uprawnienie pozwala atakującemu na tworzenie lub modyfikowanie kolejek i ich właściwości w ramach konta magazynu. Może być używane do tworzenia nieautoryzowanych kolejek, modyfikowania metadanych lub zmiany list kontroli dostępu (ACL), aby przyznać lub ograniczyć dostęp. Ta zdolność może zakłócać przepływy pracy, wstrzykiwać złośliwe dane, eksfiltrując wrażliwe informacje lub manipulować ustawieniami kolejki, aby umożliwić dalsze ataki.
To uprawnienie pozwala atakującemu na tworzenie lub modyfikowanie kolejek i ich właściwości w ramach konta magazynu. Może być używane do tworzenia nieautoryzowanych kolejek, modyfikowania metadanych lub zmiany list kontroli dostępu (ACL), aby przyznać lub ograniczyć dostęp. Ta zdolność może zakłócać przepływy pracy, wstrzykiwać złośliwe dane, eksfiltrując wrażliwe informacje lub manipulować ustawieniami kolejek, aby umożliwić dalsze ataki.
```bash
az storage queue create --name <new-queue-name> --account-name <storage-account>
@@ -22,8 +22,8 @@ az storage queue policy set --name <queue-name> --permissions rwd --expiry 2024-
```
## Odniesienia
- https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues
- https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api
- https://learn.microsoft.com/en-us/azure/storage/queues/queues-auth-abac-attributes
- [https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues](https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues)
- [https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api](https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api)
- [https://learn.microsoft.com/en-us/azure/storage/queues/queues-auth-abac-attributes](https://learn.microsoft.com/en-us/azure/storage/queues/queues-auth-abac-attributes)
{{#include ../../../banners/hacktricks-training.md}}
@@ -1,8 +1,8 @@
# Az - Post Eksploatacja Magazynu Kolejek
# Az - Queue Storage Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
## Kolejka
## Queue
Aby uzyskać więcej informacji, sprawdź:
@@ -20,7 +20,7 @@ az storage message peek --queue-name <queue_name> --account-name <storage_accoun
### DataActions: `Microsoft.Storage/storageAccounts/queueServices/queues/messages/process/action`
Dzięki temu uprawnieniu, atakujący może pobierać i przetwarzać wiadomości z Azure Storage Queue. Oznacza to, że mogą odczytywać treść wiadomości i oznaczać je jako przetworzone, skutecznie ukrywając je przed legalnymi systemami. Może to prowadzić do ujawnienia wrażliwych danych, zakłóceń w sposobie obsługi wiadomości, a nawet zatrzymania ważnych procesów roboczych poprzez uniemożliwienie dostępu do wiadomości ich zamierzonym użytkownikom.
Dzięki temu uprawnieniu, atakujący może pobierać i przetwarzać wiadomości z Azure Storage Queue. Oznacza to, że mogą odczytywać treść wiadomości i oznaczać je jako przetworzone, skutecznie ukrywając je przed legalnymi systemami. Może to prowadzić do ujawnienia wrażliwych danych, zakłóceń w sposobie obsługi wiadomości, a nawet zatrzymania ważnych procesów, czyniąc wiadomości niedostępnymi dla ich zamierzonych użytkowników.
```bash
az storage message get --queue-name <queue_name> --account-name <storage_account>
```
@@ -32,7 +32,7 @@ az storage message put --queue-name <queue-name> --content "Injected malicious m
```
### DataActions: `Microsoft.Storage/storageAccounts/queueServices/queues/messages/write`
To uprawnienie pozwala atakującemu na dodawanie nowych wiadomości lub aktualizowanie istniejących w Azure Storage Queue. Używając tego, mogą wprowadzać szkodliwe treści lub zmieniać istniejące wiadomości, co może wprowadzać w błąd aplikacje lub powodować niepożądane zachowania w systemach, które polegają na kolejce.
To uprawnienie pozwala atakującemu na dodawanie nowych wiadomości lub aktualizowanie istniejących w Azure Storage Queue. Używając tego, mogą wprowadzać szkodliwą treść lub zmieniać istniejące wiadomości, co może wprowadzać w błąd aplikacje lub powodować niepożądane zachowania w systemach, które polegają na kolejce.
```bash
az storage message put --queue-name <queue-name> --content "Injected malicious message" --account-name <storage-account>
@@ -46,7 +46,7 @@ az storage message update --queue-name <queue-name> \
```
### Actions: `Microsoft.Storage/storageAccounts/queueServices/queues/delete`
To uprawnienie pozwala atakującemu na usunięcie kolejek w ramach konta magazynu. Wykorzystując tę zdolność, atakujący może trwale usunąć kolejki i wszystkie ich powiązane wiadomości, co powoduje znaczne zakłócenia w przepływie pracy i prowadzi do krytycznej utraty danych dla aplikacji, które polegają na dotkniętych kolejkach. Ta akcja może być również używana do sabotażu usług poprzez usunięcie istotnych komponentów systemu.
To uprawnienie pozwala atakującemu na usunięcie kolejek w ramach konta magazynowego. Wykorzystując tę zdolność, atakujący może trwale usunąć kolejki i wszystkie ich powiązane wiadomości, co powoduje znaczne zakłócenia w przepływie pracy i prowadzi do krytycznej utraty danych dla aplikacji, które polegają na dotkniętych kolejkach. Ta akcja może być również używana do sabotażu usług poprzez usunięcie istotnych komponentów systemu.
```bash
az storage queue delete --name <queue-name> --account-name <storage-account>
```
@@ -68,8 +68,8 @@ az storage queue policy set --name <queue-name> --permissions rwd --expiry 2024-
```
## Odniesienia
- https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues
- https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api
- https://learn.microsoft.com/en-us/azure/storage/queues/queues-auth-abac-attributes
- [https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues](https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues)
- [https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api](https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api)
- [https://learn.microsoft.com/en-us/azure/storage/queues/queues-auth-abac-attributes](https://learn.microsoft.com/en-us/azure/storage/queues/queues-auth-abac-attributes)
{{#include ../../../banners/hacktricks-training.md}}
@@ -24,7 +24,7 @@ az servicebus topic delete --resource-group <ResourceGroupName> --namespace-name
```
### Actions: `Microsoft.ServiceBus/namespaces/queues/Delete`
Napastnik z tym uprawnieniem może usunąć kolejkę Azure Service Bus. Ta akcja usuwa kolejkę oraz wszystkie wiadomości w niej, co może prowadzić do utraty krytycznych danych i zakłócenia systemów oraz procesów zależnych od kolejki.
Atakujący z tym uprawnieniem może usunąć kolejkę Azure Service Bus. Ta akcja usuwa kolejkę oraz wszystkie wiadomości w niej, co może prowadzić do utraty krytycznych danych i zakłócenia systemów oraz przepływów pracy zależnych od kolejki.
```bash
az servicebus queue delete --resource-group <ResourceGroupName> --namespace-name <NamespaceName> --name <QueueName>
```
@@ -34,13 +34,6 @@ Atakujący z tym uprawnieniem może usunąć subskrypcję Azure Service Bus. Ta
```bash
az servicebus topic subscription delete --resource-group <ResourceGroupName> --namespace-name <NamespaceName> --topic-name <TopicName> --name <SubscriptionName>
```
### Actions: `Microsoft.ServiceBus/namespaces/write` & `Microsoft.ServiceBus/namespaces/read`
Napastnik z uprawnieniami do tworzenia lub modyfikowania przestrzeni nazw Azure Service Bus może to wykorzystać do zakłócania operacji, wdrażania nieautoryzowanych zasobów lub ujawniania wrażliwych danych. Mogą zmieniać krytyczne konfiguracje, takie jak włączanie dostępu do sieci publicznej, obniżanie ustawień szyfrowania lub zmiana SKU w celu pogorszenia wydajności lub zwiększenia kosztów. Dodatkowo mogą wyłączyć lokalną autoryzację, manipulować lokalizacjami replik lub dostosowywać wersje TLS, aby osłabić kontrole bezpieczeństwa, co sprawia, że błędna konfiguracja przestrzeni nazw stanowi istotne ryzyko po eksploatacji.
```bash
az servicebus namespace create --resource-group <ResourceGroupName> --name <NamespaceName> --location <Location>
az servicebus namespace update --resource-group <ResourceGroupName> --name <NamespaceName> --tags <Key=Value>
```
### Actions: `Microsoft.ServiceBus/namespaces/queues/write` (`Microsoft.ServiceBus/namespaces/queues/read`)
Atakujący z uprawnieniami do tworzenia lub modyfikowania kolejek Azure Service Bus (aby zmodyfikować kolejkę, będziesz również potrzebować akcji: `Microsoft.ServiceBus/namespaces/queues/read`) może to wykorzystać do przechwytywania danych, zakłócania przepływów pracy lub umożliwienia nieautoryzowanego dostępu. Mogą zmieniać krytyczne konfiguracje, takie jak przekazywanie wiadomości do złośliwych punktów końcowych, dostosowywanie TTL wiadomości w celu niewłaściwego przechowywania lub usuwania danych, lub włączanie dead-lettering w celu zakłócania obsługi błędów. Dodatkowo mogą manipulować rozmiarami kolejek, czasami blokady lub statusami, aby zakłócać funkcjonalność usługi lub unikać wykrycia, co czyni to istotnym ryzykiem po eksploatacji.
@@ -72,12 +65,12 @@ Zobacz tutaj:
## Odniesienia
- https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues
- https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api
- https://learn.microsoft.com/en-us/azure/storage/queues/queues-auth-abac-attributes
- https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-python-how-to-use-topics-subscriptions?tabs=passwordless
- https://learn.microsoft.com/en-us/azure/role-based-access-control/permissions/integration#microsoftservicebus
- https://learn.microsoft.com/en-us/cli/azure/servicebus/namespace?view=azure-cli-latest
- https://learn.microsoft.com/en-us/cli/azure/servicebus/queue?view=azure-cli-latest
- [https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues](https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues)
- [https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api](https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api)
- [https://learn.microsoft.com/en-us/azure/storage/queues/queues-auth-abac-attributes](https://learn.microsoft.com/en-us/azure/storage/queues/queues-auth-abac-attributes)
- [https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-python-how-to-use-topics-subscriptions?tabs=passwordless](https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-python-how-to-use-topics-subscriptions?tabs=passwordless)
- [https://learn.microsoft.com/en-us/azure/role-based-access-control/permissions/integration#microsoftservicebus](https://learn.microsoft.com/en-us/azure/role-based-access-control/permissions/integration#microsoftservicebus)
- [https://learn.microsoft.com/en-us/cli/azure/servicebus/namespace?view=azure-cli-latest](https://learn.microsoft.com/en-us/cli/azure/servicebus/namespace?view=azure-cli-latest)
- [https://learn.microsoft.com/en-us/cli/azure/servicebus/queue?view=azure-cli-latest](https://learn.microsoft.com/en-us/cli/azure/servicebus/queue?view=azure-cli-latest)
{{#include ../../../banners/hacktricks-training.md}}
@@ -12,13 +12,23 @@ Aby uzyskać więcej informacji na temat SQL Database, sprawdź:
### `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ść poeksploatacyjna może pozwolić atakującemu na dodanie złośliwych danych, modyfikację konfiguracji bazy danych lub wstawienie backdoorów w celu dalszej persystencji, co potencjalnie może zakłócić operacje lub umożliwić dodatkowe złośliwe działania.
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 tylnej furtki dla dalszej persystencji, co potencjalnie może zakłócić operacje lub umożliwić dodatkowe złośliwe działania.
```bash
# Create Database
az sql db create --resource-group <resource-group> --server <server-name> --name <new-database-name>
# Update Database
az sql db update --resource-group <resource-group> --server <server-name> --name <database-name> --max-size <max-size-in-bytes>
```
Z tymi uprawnieniami (`Microsoft.Sql/servers/read` && `Microsoft.Sql/servers/databases/write`) możesz przywrócić usuniętą bazę danych:
```bash
az sql db restore \
--dest-name <new_database_name> \
--name <original_database_name> \
--resource-group <resource_group> \
--server <server_name> \
--deleted-time "<deleted_time_ISO_format>"
```
### `Microsoft.Sql/servers/elasticPools/write` && `Microsoft.Sql/servers/elasticPools/read`
@@ -76,7 +86,7 @@ az sql db export \
```
### `Microsoft.Sql/servers/databases/import/action`
Z tym uprawnieniem 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.
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> \
@@ -87,4 +97,41 @@ az sql db import --admin-user <admin-user> \
--storage-key <storage-account-key> \
--storage-uri `https://<storage-account-name>.blob.core.windows.net/bacpac-container/MyDatabase.bacpac`
```
### `Microsoft.Sql/servers/connectionPolicies/write` && `Microsoft.Sql/servers/connectionPolicies/read`
Dzięki tym uprawnieniom użytkownik może modyfikować i pobierać polityki połączeń serwera Azure SQL. Te uprawnienia pozwalają na zmianę sposobu, w jaki klienci łączą się z serwerem — wybierając między metodami takimi jak przekierowanie lub proxy — co może być wykorzystane do osłabienia bezpieczeństwa, przekierowania ruchu lub przechwytywania wrażliwych danych w przypadku błędnej konfiguracji.
```bash
az sql server conn-policy update \
--resource-group <resource_group> \
--server <server_name> \
--connection-policy <policy>
```
### `Microsoft.Sql/servers/keys/write` && `Microsoft.Sql/servers/keys/read`
Dzięki tym uprawnieniom użytkownik może aktualizować i pobierać klucze szyfrowania związane z Azure SQL Server. Klucze te są często używane do zabezpieczania wrażliwych danych poprzez szyfrowanie, więc manipulowanie nimi może narazić bezpieczeństwo danych, umożliwiając nieautoryzowane odszyfrowanie lub zmiany rotacji kluczy.
```bash
az sql server key create \
--resource-group MyResourceGroup \
--server MyServer \
--kid "https://mykeyvault.vault.azure.net/keys/mykey/1234567890abcdef
```
### `Microsoft.Sql/servers/databases/ledgerDigestUploads/disable/action`, `Microsoft.Sql/locations/ledgerDigestUploadsAzureAsyncOperation/read`, `Microsoft.Sql/locations/ledgerDigestUploadsOperationResults/read`
To uprawnienie pozwala na wyłączenie Ledger Digest dla bazy danych Azure SQL, co zatrzymuje okresowe przesyłanie rekordów skrótów kryptograficznych do Azure Blob Storage, które weryfikują integralność danych.
```bash
az sql db ledger-digest-uploads disable \
--name ledgerDB \
--resource-group myResourceGroup \
--server my-sql-server
```
### `Microsoft.Sql/servers/databases/transparentDataEncryption/write`, `Microsoft.Sql/locations/transparentDataEncryptionAzureAsyncOperation/read`, `Microsoft.Sql/servers/databases/transparentDataEncryption/read`
To uprawnienie pozwala autoryzowanemu użytkownikowi lub atakującemu na włączenie, wyłączenie lub modyfikację ustawień Transparent Data Encryption (TDE) w bazie danych Azure SQL, co może wpłynąć na bezpieczeństwo danych poprzez zmianę konfiguracji szyfrowania.
```bash
az sql db tde set \
--database <database-name> \
--resource-group <resource-group-name> \
--server <server-name> \
--status <Enabled|Disabled>
```
{{#include ../../../banners/hacktricks-training.md}}
@@ -1,64 +0,0 @@
# Az - Azure Container Instances Privesc
{{#include ../../../banners/hacktricks-training.md}}
## Azure Container Instances
Aby uzyskać więcej informacji, sprawdź:
{{#ref}}
../az-services/az-container-instances.md
{{#endref}}
### `Microsoft.ContainerInstance/containerGroups/read`, `Microsoft.ContainerInstance/containerGroups/containers/exec/action`
Te uprawnienia pozwalają użytkownikowi na **wykonanie polecenia** w działającym kontenerze. Może to być użyte do **eskalacji uprawnień** w kontenerze, jeśli ma on przypisaną jakąkolwiek tożsamość zarządzaną. Oczywiście, możliwe jest również uzyskanie dostępu do kodu źródłowego i wszelkich innych wrażliwych informacji przechowywanych wewnątrz kontenera.
Aby wykonać `ls` i uzyskać wynik, wystarczy:
```bash
az container exec --name <container-name> --resource-group <res-group> --exec-command 'ls'
```
Możliwe jest również **odczytanie wyjścia** kontenera za pomocą:
```bash
az container attach --name <container-name> --resource-group <res-group>
```
Lub uzyskaj logi za pomocą:
```bash
az container logs --name <container-name> --resource-group <res-group>
```
### `Microsoft.ContainerInstance/containerGroups/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
Te uprawnienia pozwalają na **przypisanie zarządzanej tożsamości użytkownika** do grupy kontenerów. Jest to bardzo przydatne do eskalacji uprawnień w kontenerze.
Aby przypisać zarządzaną tożsamość użytkownika do grupy kontenerów:
```bash
az rest \
--method PATCH \
--url "/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ContainerInstance/containerGroups/<container-name>?api-version=2021-09-01" \
--body '{
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-namaged-identity-name>": {}
}
}
}' \
--headers "Content-Type=application/json"
```
### `Microsoft.Resources/subscriptions/resourcegroups/read`, `Microsoft.ContainerInstance/containerGroups/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
Te uprawnienia pozwalają na **tworzenie lub aktualizowanie grupy kontenerów** z **przypisaną tożsamością zarządzaną przez użytkownika**. Jest to bardzo przydatne do eskalacji uprawnień w kontenerze.
```bash
az container create \
--resource-group <res-group>> \
--name nginx2 \
--image mcr.microsoft.com/oss/nginx/nginx:1.9.15-alpine \
--assign-identity "/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-namaged-identity-name>" \
--restart-policy OnFailure \
--os-type Linux \
--cpu 1 \
--memory 1.0
```
Ponadto możliwe jest również zaktualizowanie istniejącej grupy kontenerów, dodając na przykład argument **`--command-line`** z odwrotnym powłoką.
{{#include ../../../banners/hacktricks-training.md}}
@@ -26,13 +26,13 @@ az storage message get --queue-name <queue_name> --account-name <storage_account
```
### DataActions: `Microsoft.Storage/storageAccounts/queueServices/queues/messages/add/action`
Dzięki temu uprawnieniu, atakujący może dodawać nowe wiadomości do Azure Storage Queue. Umożliwia to wstrzykiwanie złośliwych lub nieautoryzowanych danych do kolejki, co może prowadzić do wywołania niezamierzonych działań lub zakłócenia działania usług downstream, które przetwarzają wiadomości.
Dzięki temu uprawnieniu, atakujący może dodawać nowe wiadomości do kolejki Azure Storage. Umożliwia to wstrzykiwanie złośliwych lub nieautoryzowanych danych do kolejki, co może prowadzić do wywołania niezamierzonych działań lub zakłócenia działania usług downstream, które przetwarzają wiadomości.
```bash
az storage message put --queue-name <queue-name> --content "Injected malicious message" --account-name <storage-account>
```
### DataActions: `Microsoft.Storage/storageAccounts/queueServices/queues/messages/write`
To uprawnienie pozwala atakującemu na dodawanie nowych wiadomości lub aktualizowanie istniejących w Azure Storage Queue. Używając tego, mogą wprowadzać szkodliwe treści lub zmieniać istniejące wiadomości, co może wprowadzać w błąd aplikacje lub powodować niepożądane zachowania w systemach, które polegają na kolejce.
To uprawnienie pozwala atakującemu na dodawanie nowych wiadomości lub aktualizowanie istniejących w Azure Storage Queue. Używając tego, mogą wprowadzać szkodliwą treść lub zmieniać istniejące wiadomości, co może wprowadzać w błąd aplikacje lub powodować niepożądane zachowania w systemach, które polegają na kolejce.
```bash
az storage message put --queue-name <queue-name> --content "Injected malicious message" --account-name <storage-account>
@@ -56,8 +56,8 @@ az storage queue policy set --name <queue-name> --permissions rwd --expiry 2024-
```
## Odniesienia
- https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues
- https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api
- https://learn.microsoft.com/en-us/azure/storage/queues/queues-auth-abac-attributes
- [https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues](https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues)
- [https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api](https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api)
- [https://learn.microsoft.com/en-us/azure/storage/queues/queues-auth-abac-attributes](https://learn.microsoft.com/en-us/azure/storage/queues/queues-auth-abac-attributes)
{{#include ../../../banners/hacktricks-training.md}}
@@ -12,7 +12,7 @@ Aby uzyskać więcej informacji, sprawdź:
### Microsoft.ServiceBus/namespaces/authorizationrules/listKeys/action OR Microsoft.ServiceBus/namespaces/authorizationrules/regenerateKeys/action
Te uprawnienia pozwalają na uzyskanie lub regenerację kluczy dla lokalnych reguł autoryzacji w obrębie przestrzeni nazw Service Bus. Używając tych kluczy, możliwe jest uwierzytelnienie się jako przestrzeń nazw Service Bus, co umożliwia wysyłanie wiadomości do dowolnej kolejki lub tematu, odbieranie wiadomości z dowolnej kolejki lub subskrypcji, lub potencjalnie interakcję z systemem w sposób, który może zakłócić operacje, podszywać się pod ważnych użytkowników lub wstrzykiwać złośliwe dane do przepływu wiadomości.
Te uprawnienia pozwalają na uzyskanie lub regenerację kluczy dla lokalnych reguł autoryzacji w obrębie przestrzeni nazw Service Bus. Używając tych kluczy, możliwe jest uwierzytelnienie się jako przestrzeń nazw Service Bus, co umożliwia wysyłanie wiadomości do dowolnej kolejki lub tematu, odbieranie wiadomości z dowolnej kolejki lub subskrypcji, lub potencjalne interakcje z systemem w sposób, który może zakłócić operacje, podszywać się pod ważnych użytkowników lub wstrzykiwać złośliwe dane do przepływu wiadomości.
Należy zauważyć, że domyślnie reguła **`RootManageSharedAccessKey` ma pełną kontrolę** nad przestrzenią nazw Service Bus i jest używana przez `az` cli, jednak mogą istnieć inne reguły z innymi wartościami kluczy.
```bash
@@ -57,7 +57,7 @@ az servicebus queue authorization-rule keys renew --key [PrimaryKey|SecondaryKey
```
### Microsoft.ServiceBus/namespaces/[queues|topics]/authorizationRules/write
Dzięki temu uprawnieniu można **utworz nową regułę autoryzacji** ze wszystkimi uprawnieniami i własnymi kluczami z:
Dzięki temu uprawnieniu możliwe jest **utworzenie nowej reguły autoryzacji** ze wszystkimi uprawnieniami i własnymi kluczami z:
```bash
# In a topic
az servicebus topic authorization-rule create --resource-group <res-group> --namespace-name <namespace-name> --topic-name <topic-name> --name <auth-rule-name> --rights Manage Listen Send
@@ -84,127 +84,202 @@ az servicebus namespace update --disable-local-auth false -n <namespace-name> --
```
### Wysyłanie wiadomości z kluczami (Microsoft.ServiceBus/namespaces/authorizationRules/listkeys/action OR Microsoft.ServiceBus/namespaces/authorizationRules/regenerateKeys/action)
Możesz uzyskać `PrimaryConnectionString`, który działa jako poświadczenie dla przestrzeni nazw Service Bus. Dzięki temu ciągowi połączeń możesz w pełni uwierzytelnić się jako przestrzeń nazw Service Bus, co umożliwia wysyłanie wiadomości do dowolnej kolejki lub tematu oraz potencjalne interakcje z systemem w sposób, który może zakłócić operacje, podszywać się pod ważnych użytkowników lub wstrzykiwać złośliwe dane do przepływu wiadomości.
Możesz uzyskać `PrimaryConnectionString`, który działa jako poświadczenie dla przestrzeni nazw Service Bus. Dzięki temu ciągowi połączeń możesz w pełni uwierzytelnić się jako przestrzeń nazw Service Bus, co umożliwia wysyłanie wiadomości do dowolnej kolejki lub tematu oraz potencjalne interakcje z systemem w sposób, który może zakłócić operacje, podszywać się pod ważnych użytkowników lub wstrzykiwać złośliwe dane do przepływu wiadomości. Ta metoda działa, jeśli `--disable-local-auth` jest ustawione na false.
```python
#You need to install the following libraries
#pip install azure-servicebus
#pip install aiohttp
#pip install azure-identity
import asyncio
from azure.servicebus.aio import ServiceBusClient
from azure.servicebus import ServiceBusMessage
# Constants
NAMESPACE_CONNECTION_STR = "<PrimaryConnectionString>"
TOPIC_NAME = "<TOPIC_NAME>"
TOPIC_OR_QUEUE_NAME = "<TOPIC_OR_QUEUE_NAME>"
# Function to send a single message to a Service Bus topic
async def send_individual_message(publisher):
# Prepare a single message with updated content
single_message = ServiceBusMessage("Hacktricks-Training: Single Item")
# Send the message to the topic
await publisher.send_messages(single_message)
print("Sent a single message containing 'Hacktricks-Training'")
async def send_message():
async with ServiceBusClient.from_connection_string(NAMESPACE_CONNECTION_STR) as client:
async with client.get_topic_sender(topic_name=TOPIC_OR_QUEUE_NAME) as sender:
await sender.send_messages(ServiceBusMessage("Hacktricks-Training: Single Item"))
print("Sent message")
# Function to send multiple messages to a Service Bus topic
async def send_multiple_messages(publisher):
# Generate a collection of messages with updated content
message_list = [ServiceBusMessage(f"Hacktricks-Training: Item {i+1} in list") for i in range(5)]
# Send the entire collection of messages to the topic
await publisher.send_messages(message_list)
print("Sent a list of 5 messages containing 'Hacktricks-Training'")
asyncio.run(send_message())
```
Dodatkowo możesz wysyłać wiadomości za pomocą az rest, w tym przypadku musisz wygenerować token sas do użycia.
```python
import time, urllib.parse, hmac, hashlib, base64
# Function to send a grouped batch of messages to a Service Bus topic
async def send_grouped_messages(publisher):
# Send a grouped batch of messages with updated content
async with publisher:
grouped_message_batch = await publisher.create_message_batch()
for i in range(10):
try:
# Append a message to the batch with updated content
grouped_message_batch.add_message(ServiceBusMessage(f"Hacktricks-Training: Item {i+1}"))
except ValueError:
# If batch reaches its size limit, handle by creating another batch
break
# Dispatch the batch of messages to the topic
await publisher.send_messages(grouped_message_batch)
print("Sent a batch of 10 messages containing 'Hacktricks-Training'")
def generate_sas_token(uri, key_name, key, expiry_in_seconds=3600):
expiry = int(time.time() + expiry_in_seconds)
string_to_sign = urllib.parse.quote_plus(uri) + "\n" + str(expiry)
signed_hmac_sha256 = hmac.new(key.encode('utf-8'), string_to_sign.encode('utf-8'), hashlib.sha256).digest()
signature = urllib.parse.quote_plus(base64.b64encode(signed_hmac_sha256))
token = f"SharedAccessSignature sr={urllib.parse.quote_plus(uri)}&sig={signature}&se={expiry}&skn={key_name}"
return token
# Main function to execute all tasks
async def execute():
# Instantiate the Service Bus client with the connection string
async with ServiceBusClient.from_connection_string(
conn_str=NAMESPACE_CONNECTION_STR,
logging_enable=True) as sb_client:
# Create a topic sender for dispatching messages to the topic
publisher = sb_client.get_topic_sender(topic_name=TOPIC_NAME)
async with publisher:
# Send a single message
await send_individual_message(publisher)
# Send multiple messages
await send_multiple_messages(publisher)
# Send a batch of messages
await send_grouped_messages(publisher)
# Replace these with your actual values
resource_uri = "https://<namespace>.servicebus.windows.net/<queue_or_topic>"
key_name = "<SharedKeyName>"
primary_key = "<PrimaryKey>"
# Run the asynchronous execution
asyncio.run(execute())
print("Messages Sent")
print("----------------------------")
sas_token = generate_sas_token(resource_uri, key_name, primary_key)
print(sas_token)
```
```bash
az rest --method post \
--uri "https://<NAMESPACE>.servicebus.windows.net/<queue>/messages" \
--headers "Content-Type=application/atom+xml;type=entry;charset=utf-8" "Authorization=SharedAccessSignature sr=https%3A%2F%2F<NAMESPACE>.servicebus.windows.net%2F<TOPIC_OR_QUEUE_NAME>&sig=<SIGNATURE>&se=<EXPIRY>&skn=<KEYNAME>" \
--body "<MESSAGE_BODY>"
```
### Odbierz za pomocą kluczy (Microsoft.ServiceBus/namespaces/authorizationRules/listkeys/action OR Microsoft.ServiceBus/namespaces/authorizationRules/regenerateKeys/action)
Możesz pobrać PrimaryConnectionString, który służy jako poświadczenie dla przestrzeni nazw Service Bus. Używając tego ciągu połączenia, możesz odbierać wiadomości z dowolnej kolejki lub subskrypcji w obrębie przestrzeni nazw, co umożliwia dostęp do potencjalnie wrażliwych lub krytycznych danych, umożliwiając eksfiltrację danych lub zakłócanie przetwarzania wiadomości i przepływów pracy aplikacji.
Możesz uzyskać PrimaryConnectionString, który służy jako poświadczenie dla przestrzeni nazw Service Bus. Używając tego ciągu połączenia, możesz odbierać wiadomości z dowolnej kolejki lub subskrypcji w obrębie przestrzeni nazw, co umożliwia dostęp do potencjalnie wrażliwych lub krytycznych danych, umożliwiając eksfiltrację danych lub zakłócanie przetwarzania wiadomości i przepływów pracy aplikacji. Ta metoda działa, jeśli `--disable-local-auth` jest ustawione na false.
```python
#You need to install the following libraries
#pip install azure-servicebus
#pip install aiohttp
#pip install azure-identity
import asyncio
from azure.servicebus.aio import ServiceBusClient
NAMESPACE_CONNECTION_STR = "<PrimaryConnectionString>"
TOPIC_NAME = "<TOPIC_NAME>"
SUBSCRIPTION_NAME = "<TOPIC_SUBSCRIPTION_NAME>" #Topic Subscription
CONN_STR = "<PrimaryConnectionString>"
QUEUE = "<QUEUE_NAME>"
# Function to receive and process messages from a Service Bus subscription
async def receive_and_process_messages():
# Create a Service Bus client using the connection string
async with ServiceBusClient.from_connection_string(
conn_str=NAMESPACE_CONNECTION_STR,
logging_enable=True) as servicebus_client:
# For topics/subscriptions, you would use:
# TOPIC = "<TOPIC_NAME>"
# SUBSCRIPTION = "<TOPIC_SUBSCRIPTION_NAME>"
# Get the Subscription Receiver object for the specified topic and subscription
receiver = servicebus_client.get_subscription_receiver(
topic_name=TOPIC_NAME,
subscription_name=SUBSCRIPTION_NAME,
max_wait_time=5
)
async with receiver:
# Receive messages with a defined maximum wait time and count
received_msgs = await receiver.receive_messages(
max_wait_time=5,
max_message_count=20
)
for msg in received_msgs:
print("Received: " + str(msg))
# Complete the message to remove it from the subscription
async def receive():
async with ServiceBusClient.from_connection_string(CONN_STR) as client:
# For a queue receiver:
async with client.get_queue_receiver(queue_name=QUEUE, max_wait_time=5) as receiver:
msgs = await receiver.receive_messages(max_wait_time=5, max_message_count=20)
for msg in msgs:
print("Received:", msg)
await receiver.complete_message(msg)
# Run the asynchronous message processing function
asyncio.run(receive_and_process_messages())
print("Message Receiving Completed")
print("----------------------------")
```
## References
# For a topic/subscription receiver (commented out):
# async with client.get_subscription_receiver(topic_name=TOPIC, subscription_name=SUBSCRIPTION, max_wait_time=5) as receiver:
# msgs = await receiver.receive_messages(max_wait_time=5, max_message_count=20)
# for msg in msgs:
# print("Received:", msg)
# await receiver.complete_message(msg)
- https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues
- https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api
- https://learn.microsoft.com/en-us/azure/storage/queues/queues-auth-abac-attributes
- https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-python-how-to-use-topics-subscriptions?tabs=passwordless
- https://learn.microsoft.com/en-us/azure/role-based-access-control/permissions/integration#microsoftservicebus
asyncio.run(receive())
print("Done receiving messages")
```
Dodatkowo możesz wysyłać wiadomości za pomocą az rest, w tym przypadku musisz wygenerować token sas do użycia.
```python
import time, urllib.parse, hmac, hashlib, base64
def generate_sas_token(uri, key_name, key, expiry_in_seconds=3600):
expiry = int(time.time() + expiry_in_seconds)
string_to_sign = urllib.parse.quote_plus(uri) + "\n" + str(expiry)
signature = urllib.parse.quote_plus(base64.b64encode(
hmac.new(key.encode('utf-8'), string_to_sign.encode('utf-8'), hashlib.sha256).digest()
))
token = f"SharedAccessSignature sr={urllib.parse.quote_plus(uri)}&sig={signature}&se={expiry}&skn={key_name}"
return token
# Example usage:
resource_uri = "https://<namespace>.servicebus.windows.net/queue" # For queue
# resource_uri = "https://<namespace>.servicebus.windows.net/<topic>/subscriptions/<subscription>" # For topic subscription
sas_token = generate_sas_token(resource_uri, "<KEYNAME>", "<PRIMARY_KEY>")
print(sas_token)
```
Dla kolejki możesz pobrać lub zajrzeć do wiadomości (pobranie wiadomości usunie je, podczas gdy zajrzenie nie):
```bash
#Get a message
az rest --method post \
--uri "https://<NAMESPACE>.servicebus.windows.net/<QUEUE>/messages/head?timeout=60" \
--headers "Content-Type=application/atom+xml;type=entry;charset=utf-8" "Authorization=SharedAccessSignature sr=<URI_ENCODED_RESOURCE>&sig=<SIGNATURE>&se=<EXPIRY>&skn=<KEYNAME>"
#Peek a message
az rest --method get \
--uri "https://<NAMESPACE>.servicebus.windows.net/<QUEUE>/messages/head?peekonly=true&timeout=60" \
--headers "Authorization=SharedAccessSignature sr=<URI_ENCODED_RESOURCE>&sig=<SIGNATURE>&se=<EXPIRY>&skn=<KEYNAME>"
#You can select the meesage changing the field PreviousSequenceNumber
az rest --method get \
--uri "https://<NAMESPACE>.servicebus.windows.net/<ENTITY>/messages?timeout=60&PreviousSequenceNumber=<LAST_SEQUENCE_NUMBER>&api-version=2017-04" \
--headers "Authorization=SharedAccessSignature sr=<URI_ENCODED_RESOURCE>&sig=<SIGNATURE>&se=<EXPIRY>&skn=<KEYNAME>"
```
Please provide the text you would like translated.
```bash
#Get a message
az rest --method post \
--uri "https://<NAMESPACE>.servicebus.windows.net/<TOPIC>/subscriptions/<SUBSCRIPTION>/messages/head?timeout=60" \
--headers "Content-Type=application/atom+xml;type=entry;charset=utf-8" "Authorization=SharedAccessSignature sr=<URI_ENCODED_RESOURCE>&sig=<SIGNATURE>&se=<EXPIRY>&skn=<KEYNAME>"
#Peek a message
az rest --method get \
--uri "https://<NAMESPACE>.servicebus.windows.net/<TOPIC>/subscriptions/<SUBSCRIPTION>/messages/head?timeout=60&api-version=2017-04" \
--headers "Authorization=SharedAccessSignature sr=<URI_ENCODED_RESOURCE>&sig=<SIGNATURE>&se=<EXPIRY>&skn=<KEYNAME>"
#You can select the meesage changing the field PreviousSequenceNumber
az rest --method get \
--uri "https://<NAMESPACE>.servicebus.windows.net/<TOPIC>/subscriptions/<SUBSCRIPTION>/messages?timeout=60&PreviousSequenceNumber=<LAST_SEQUENCE_NUMBER>&api-version=2017-04" \
--headers "Authorization=SharedAccessSignature sr=<URI_ENCODED_RESOURCE>&sig=<SIGNATURE>&se=<EXPIRY>&skn=<KEYNAME>"
```
### Wysyłanie wiadomości. DataActions: `Microsoft.ServiceBus/namespaces/messages/send/action`
Możesz użyć tych uprawnień do wysyłania wiadomości, nawet jeśli `--disable-local-auth` jest ustawione na true.
```python
import asyncio
from azure.identity.aio import DefaultAzureCredential
from azure.servicebus.aio import ServiceBusClient
from azure.servicebus import ServiceBusMessage
NS = "<namespace>.servicebus.windows.net" # Your namespace
QUEUE_OR_TOPIC = "<QUEUE_OR_TOPIC>" # Your queue name
async def run():
credential = DefaultAzureCredential()
async with ServiceBusClient(fully_qualified_namespace=NS, credential=credential) as client:
async with client.get_queue_sender(queue_name=QUEUE) as sender:
await sender.send_messages(ServiceBusMessage("Single Message"))
print("Sent a single message")
await credential.close()
if __name__ == "__main__":
asyncio.run(run())
```
### Odbieranie wiadomości. DataActions: `Microsoft.ServiceBus/namespaces/messages/receive/action`
Możesz użyć tych uprawnień do odbierania wiadomości, nawet jeśli `--disable-local-auth` jest ustawione na true.
```python
import asyncio
from azure.identity.aio import DefaultAzureCredential
from azure.servicebus.aio import ServiceBusClient
NS = "<namespace>.servicebus.windows.net"
QUEUE = "<QUEUE>"
# For a topic subscription, uncomment and set these values:
# TOPIC = "<TOPIC>"
# SUBSCRIPTION = "<SUBSCRIPTION>"
async def run():
credential = DefaultAzureCredential()
async with ServiceBusClient(fully_qualified_namespace=NS, credential=credential) as client:
# Receiving from a queue:
async with client.get_queue_receiver(queue_name=QUEUE, max_wait_time=5) as receiver:
async for msg in receiver:
print("Received from Queue:", msg)
await receiver.complete_message(msg)
# To receive from a topic subscription, uncomment the code below and comment out the queue receiver above:
# async with client.get_subscription_receiver(topic_name=TOPIC, subscription_name=SUBSCRIPTION, max_wait_time=5) as receiver:
# async for msg in receiver:
# print("Received from Topic Subscription:", msg)
# await receiver.complete_message(msg)
await credential.close()
asyncio.run(run())
print("Done receiving messages")
```
## Odniesienia
- [https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues](https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues)
- [https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api](https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api)
- [https://learn.microsoft.com/en-us/azure/storage/queues/queues-auth-abac-attributes](https://learn.microsoft.com/en-us/azure/storage/queues/queues-auth-abac-attributes)
- [https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-python-how-to-use-topics-subscriptions?tabs=passwordless](https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-python-how-to-use-topics-subscriptions?tabs=passwordless)
- [https://learn.microsoft.com/en-us/azure/role-based-access-control/permissions/integration#microsoftservicebus](https://learn.microsoft.com/en-us/azure/role-based-access-control/permissions/integration#microsoftservicebus)
{{#include ../../../banners/hacktricks-training.md}}
@@ -26,7 +26,7 @@ az sql server create \
--resource-group <resource_group_name> \
--location <location> \
--admin-user <admin_username> \
--admin-password <admin_password>
--admin-password <admin_passwor d>
```
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
@@ -35,6 +35,31 @@ az sql server update \
--resource-group <resource-group> \
--enable-public-network true
```
Ponadto, z uprawnieniami możesz włączyć przypisaną tożsamość i operować z zarządzaną tożsamością przypisaną do serwera. Na przykład tutaj z zarządzaną tożsamością, która może uzyskać dostęp do Azure Storage:
```bash
az sql server update \
--name <server-name> \
--resource-group <resource-group> \
--assign_identity
```
```sql
CREATE EXTERNAL DATA SOURCE ManagedIdentity
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://<storage-account>.blob.core.windows.net/<container>',
CREDENTIAL = ManagedIdentityCredential
);
GO
SELECT *
FROM OPENROWSET(
BULK 'message.txt',
DATA_SOURCE = 'ManagedIdentity',
SINGLE_CLOB
) AS DataFile;
GO
```
### `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.
@@ -70,7 +95,7 @@ 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`
@@ -1,45 +0,0 @@
# Az - Container Instances
{{#include ../../../banners/hacktricks-training.md}}
## Podstawowe informacje
Azure Container Instances (ACI) zapewniają **bezserwerowy, na żądanie sposób** uruchamiania **kontenerów** w chmurze Azure. Możesz **wdrożyć** pojedyncze lub wiele kontenerów w grupie z **skalowalnym obliczeniem**, **opcje sieciowe** oraz elastyczność w łączeniu z **innymi usługami Azure** (takimi jak Storage, Virtual Networks lub Container Registries).
Ponieważ są to **efemeryczne** obciążenia, nie musisz zarządzać podstawową infrastrukturą VM — Azure zajmuje się tym za Ciebie. Jednak z **perspektywy ofensywnej bezpieczeństwa** kluczowe jest zrozumienie, jak **uprawnienia**, **tożsamości**, **konfiguracje sieciowe** i **logi** mogą ujawniać powierzchnie ataku i potencjalne błędy w konfiguracji.
### Konfiguracje
- Aby utworzyć kontener, można użyć publicznego obrazu, obrazu kontenera z Azure Container Registry lub zewnętrznego repozytorium, co może **wymagać skonfigurowania hasła** do uzyskania dostępu.
- Jeśli chodzi o sieć, może mieć również **publiczny adres IP** lub być **prywatnymi punktami końcowymi**.
- Możliwe jest również skonfigurowanie wspólnych ustawień dockera, takich jak:
- **Zmienne środowiskowe**
- **Wolumeny** (nawet z Azure Files)
- **Porty**
- **Limity CPU i pamięci**
- **Polityka ponownego uruchamiania**
- **Uruchom jako uprzywilejowany**
- **Linia poleceń do uruchomienia**
- ...
## Enumeracja
> [!WARNING]
> Podczas enumeracji ACI możesz ujawnić wrażliwe konfiguracje, takie jak **zmienne środowiskowe**, **szczegóły sieci** lub **zarządzane tożsamości**. Bądź ostrożny przy logowaniu lub wyświetlaniu ich.
```bash
# List all container instances in the subscription
az container list
# Show detailed information about a specific container instance
az container show --name <container-name> --resource-group <res-group>
# Fetch logs from a container
az container logs --name <container-name> --resource-group <res-group>
# Execute a command in a running container and get the output
az container exec --name <container-name> --resource-group <res-group> --exec-command "ls"
# Get yaml configuration of the container group
az container export --name <container-name> --resource-group <res-group>
```
@@ -84,8 +84,8 @@ $queueMessage.Value
## Odniesienia
- https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues
- https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api
- https://learn.microsoft.com/en-us/azure/storage/queues/queues-auth-abac-attributes
- [https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues](https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues)
- [https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api](https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api)
- [https://learn.microsoft.com/en-us/azure/storage/queues/queues-auth-abac-attributes](https://learn.microsoft.com/en-us/azure/storage/queues/queues-auth-abac-attributes)
{{#include ../../../banners/hacktricks-training.md}}
@@ -4,52 +4,61 @@
## Service Bus
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.
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 wśród wielu pracowników, niezawodnego dostarczania wiadomości lub złożonej koordynacji, takiej jak przetwarzanie zadań w kolejności lub bezpieczne zarządzanie dostępem.
### Kluczowe Koncepcje
### Key Concepts
1. **Kolejki:** jej celem jest przechowywanie wiadomości, aż odbiorca będzie gotowy.
1. **Namespaces:** Przestrzeń nazw w systemach komunikacyjnych to logiczny kontener, który organizuje i zarządza komponentami komunikacyjnymi, kolejkami i tematami. Zapewnia izolowane środowisko, w którym aplikacje mogą wysyłać, odbierać i przetwarzać wiadomości. Kolejki i tematy dzielą tę samą infrastrukturę i konfigurację w obrębie przestrzeni nazw Service Bus, ale działają niezależnie, nie wchodząc w interakcje ze sobą.
2. **Queues:** 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 (pobieranie na żądanie).
- Dostarczane w trybie pull (na żądanie).
- Wspiera komunikację punkt-punkt.
2. **Tematy:** Komunikacja publish-subscribe do nadawania.
3. **Topics:** 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
The service bus endpoint/connection string is:
```bash
https://<namespace>.servicebus.windows.net:443/
```
### 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 dostawę**: 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 działania**: Stosuje zasady do filtrowania lub adnotacji wiadomości.
- **Auto-usuwanie w 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.
- **Message Sessions**: Zapewnia przetwarzanie FIFO i wspiera wzorce request-response.
- **Auto-Forwarding**: Przenosi wiadomości między kolejkami lub tematami w tej samej przestrzeni nazw.
- **Dead-Lettering**: Zbiera wiadomości, które nie mogły zostać dostarczone do przeglądu.
- **Scheduled Delivery**: Opóźnia przetwarzanie wiadomości na przyszłe zadania.
- **Message Deferral**: Odkłada pobieranie wiadomości do momentu, gdy będzie to możliwe.
- **Transactions**: Grupuje operacje w atomowe wykonanie.
- **Filters & Actions**: Stosuje zasady do filtrowania lub adnotacji wiadomości.
- **Auto-Delete on Idle**: Usuwa kolejki po okresie bezczynności (min: 5 minut).
- **Duplicate Detection**: Usuwa duplikaty wiadomości podczas ponownych wysyłek.
- **Batch Deletion**: Masowo usuwa wygasłe lub niepotrzebne wiadomości.
### Zasady autoryzacji / Polityka SAS
### Authorization-Rule / SAS Policy
Polityki SAS definiują uprawnienia dostępu do jednostek Azure Service Bus, przestrzeni nazw (najważniejsza), kolejek i tematów. Każda polityka ma następujące komponenty:
Polityki SAS definiują uprawnienia dostępu do jednostek Azure Service Bus w przestrzeni nazw (najważniejsza), kolejek i tematów. Każda polityka ma następujące komponenty:
- **Uprawnienia**: Pola wyboru do określenia poziomów dostępu:
- Zarządzaj: Przyznaje pełną kontrolę nad jednostką, w tym zarządzanie konfiguracją i uprawnieniami.
- Wyślij: Umożliwia wysyłanie wiadomości do jednostki.
- Słuchaj: Umożliwia odbieranie wiadomości z jednostki.
- **Klucze główne i pomocnicze**: To klucze kryptograficzne używane do generowania bezpiecznych tokenów do uwierzytelniania dostępu.
- **Główne i pomocnicze ciągi połączeń**: Wstępnie skonfigurowane ciągi połączeń, które zawierają punkt końcowy i klucz do łatwego użycia w aplikacjach.
- **ID polityki SAS ARM**: Ścieżka Azure Resource Manager (ARM) do polityki w celu identyfikacji programowej.
- **Permissions**: Checkboxy do określenia poziomów dostępu:
- Manage: Przyznaje pełną kontrolę nad jednostką, w tym zarządzanie konfiguracją i uprawnieniami.
- Send: Umożliwia wysyłanie wiadomości do jednostki.
- Listen: Umożliwia odbieranie wiadomości z jednostki.
- **Primary and Secondary Keys**: To klucze kryptograficzne używane do generowania bezpiecznych tokenów do uwierzytelniania dostępu.
- **Primary and Secondary Connection Strings**: Wstępnie skonfigurowane ciągi połączeń, które zawierają punkt końcowy i klucz do łatwego użycia w aplikacjach.
- **SAS Policy ARM ID**: Ścieżka Azure Resource Manager (ARM) do polityki w celu identyfikacji programowej.
### Przestrzeń nazw
Ważne jest, aby zauważyć, że przestrzeń nazw ma jedną politykę SAS, która wpływa na każdą jednostkę w niej, podczas gdy kolejki i tematy mogą mieć swoje własne indywidualne polityki SAS dla bardziej szczegółowej kontroli.
sku, zasada autoryzacji,
### "--disable-local-auth"
### Enumeracja
Parametr --disable-local-auth jest używany do kontrolowania, czy lokalne uwierzytelnianie (tj. używanie kluczy Shared Access Signature (SAS)) jest włączone dla Twojej przestrzeni nazw Service Bus. Oto, co musisz wiedzieć:
- Gdy ustawione na true: Lokalna autoryzacja przy użyciu kluczy SAS jest wyłączona, a uwierzytelnianie za pomocą Azure Active Directory (Azure AD) jest dozwolone.
- Gdy ustawione na false: Zarówno uwierzytelnianie SAS (lokalne), jak i uwierzytelnianie Azure AD są dostępne, a Ty możesz używać ciągów połączeń z kluczami SAS do uzyskiwania dostępu do zasobów Service Bus.
### Enumeration
{{#tabs }}
{{#tab name="az cli" }}
@@ -6,28 +6,45 @@
Azure SQL to rodzina zarządzanych, bezpiecznych i inteligentnych produktów, które wykorzystują **silnik bazy danych SQL Server w chmurze Azure**. Oznacza to, że nie musisz martwić się o fizyczne zarządzanie swoimi serwerami, a możesz skupić się na zarządzaniu swoimi danymi.
Azure SQL składa się z trzech głównych ofert:
Azure SQL składa się z czterech głównych ofert:
1. **Azure SQL Database**: To **w pełni zarządzana usługa bazy danych**, która pozwala na hostowanie indywidualnych baz danych w chmurze Azure. Oferuje wbudowaną inteligencję, która uczy się Twoich unikalnych wzorców bazy danych i dostarcza spersonalizowane rekomendacje oraz automatyczne dostosowywanie.
2. **Azure SQL Managed Instance**: To rozwiązanie dla większych wdrożeń w skali całej instancji SQL Server. Oferuje niemal 100% zgodności z najnowszym silnikiem bazy danych SQL Server w wersji lokalnej (Enterprise Edition), który zapewnia natywną implementację wirtualnej sieci (VNet), odpowiadającą na powszechne obawy dotyczące bezpieczeństwa, oraz model biznesowy korzystny dla klientów SQL Server w wersji lokalnej.
3. **Azure SQL Server na maszynach wirtualnych Azure**: To infrastruktura jako usługa (IaaS) i jest najlepsza do migracji, gdzie chcesz **kontrolować system operacyjny i instancję SQL Server**, jakby to był serwer działający lokalnie.
1. **Azure SQL Server**: Azure SQL Server to zarządzana usługa bazy danych relacyjnych, która upraszcza wdrażanie i zarządzanie bazami danych SQL Server, z wbudowanymi funkcjami bezpieczeństwa i wydajności.
2. **Azure SQL Database**: To **w pełni zarządzana usługa bazy danych**, która pozwala na hostowanie pojedynczych baz danych w chmurze Azure. Oferuje wbudowaną inteligencję, która uczy się unikalnych wzorców bazy danych i dostarcza spersonalizowane rekomendacje oraz automatyczne dostosowywanie.
3. **Azure SQL Managed Instance**: To rozwiązanie dla większych wdrożeń w skali całej instancji SQL Server. Oferuje niemal 100% zgodności z najnowszym silnikiem bazy danych SQL Server w wersji on-premises (Enterprise Edition), który zapewnia natywną implementację wirtualnej sieci (VNet), odpowiadającą na powszechne obawy dotyczące bezpieczeństwa, oraz model biznesowy korzystny dla klientów SQL Server w wersji on-premises.
4. **Azure SQL Server na maszynach wirtualnych Azure**: To infrastruktura jako usługa (IaaS) i jest najlepsza dla migracji, gdzie chcesz **kontrolować system operacyjny i instancję SQL Server**, jakby to był serwer działający w wersji on-premises.
### Azure SQL Database
### Azure SQL Server
**Azure SQL Database** to **w pełni zarządzana platforma bazy danych jako usługa (PaaS)**, która zapewnia skalowalne i bezpieczne rozwiązania relacyjnych baz danych. Jest zbudowana na najnowszych technologiach SQL Server i eliminuje potrzebę zarządzania infrastrukturą, co czyni ją popularnym wyborem dla aplikacji w chmurze.
Azure SQL Server to system zarządzania bazą danych relacyjnych (RDBMS), który wykorzystuje Transact-SQL do operacji na danych i jest zaprojektowany do obsługi systemów na poziomie przedsiębiorstwa. Oferuje solidne funkcje dotyczące wydajności, bezpieczeństwa, skalowalności i integracji z różnymi aplikacjami Microsoft. Bazy danych Azure SQL opierają się na tym serwerze, ponieważ są zbudowane na tych serwerach i jest to punkt wejścia dla użytkowników do uzyskiwania dostępu do baz danych.
#### Kluczowe cechy
#### Sieć
- **Zawsze aktualne**: Działa na najnowszej stabilnej wersji SQL Server i automatycznie otrzymuje nowe funkcje oraz poprawki.
- **Możliwości PaaS**: Wbudowana wysoka dostępność, kopie zapasowe i aktualizacje.
- **Elastyczność danych**: Obsługuje dane relacyjne i nierelacyjne (np. grafy, JSON, dane przestrzenne i XML).
**Łączność sieciowa**: Wybierz, czy chcesz włączyć dostęp przez publiczny punkt końcowy, czy prywatny punkt końcowy. Jeśli wybierzesz Brak dostępu, żadne punkty końcowe nie są tworzone, dopóki nie zostaną skonfigurowane ręcznie:
- Brak dostępu: Żadne punkty końcowe nie są skonfigurowane, blokując przychodzące połączenia, aż do ręcznego ustawienia.
- Publiczny punkt końcowy: Umożliwia bezpośrednie połączenia przez publiczny internet, podlegające zasadom zapory i innym konfiguracjom bezpieczeństwa.
- Prywatny punkt końcowy: Ogranicza łączność do prywatnej sieci.
#### Modele zakupu / Poziomy usług
**Polityka połączeń**: Zdefiniuj, jak klienci komunikują się z serwerem bazy danych SQL:
- Domyślnie: Używa polityki przekierowania dla wszystkich połączeń klientów z wewnątrz Azure (z wyjątkiem tych korzystających z prywatnych punktów końcowych) oraz polityki proxy dla połączeń z zewnątrz Azure.
- Proxy: Kieruje wszystkie połączenia klientów przez bramę bazy danych Azure SQL.
- Przekierowanie: Klienci łączą się bezpośrednio z węzłem hostującym bazę danych.
- **vCore-based**: Wybierz obliczenia, pamięć i przechowywanie niezależnie. Dla ogólnego użytku, krytycznego dla biznesu (z wysoką odpornością i wydajnością dla aplikacji OLTP) i skaluje do 128 TB przechowywania.
- **DTU-based**: Łączy obliczenia, pamięć i I/O w stałych poziomach. Zrównoważone zasoby dla typowych zadań.
- Standard: Zrównoważone zasoby dla typowych zadań.
- Premium: Wysoka wydajność dla wymagających obciążeń.
#### Metody uwierzytelniania
Azure SQL obsługuje różne metody uwierzytelniania w celu zabezpieczenia dostępu do bazy danych:
- **Uwierzytelnianie tylko Microsoft Entra**: Używa Microsoft Entra (wcześniej Azure AD) do centralnego zarządzania tożsamością i jednolitych logowań.
- **Uwierzytelnianie zarówno SQL, jak i Microsoft Entra**: Pozwala na korzystanie z tradycyjnego uwierzytelniania SQL obok Microsoft Entra.
- **Uwierzytelnianie SQL**: Opiera się wyłącznie na nazwach użytkowników i hasłach SQL Server.
#### Funkcje bezpieczeństwa
Serwery SQL mają **Zarządzane Tożsamości**. Zarządzane tożsamości pozwalają Twojemu serwerowi na bezpieczne uwierzytelnianie z innymi usługami Azure bez przechowywania poświadczeń. Umożliwia to dostęp do innych usług, które będą miały tożsamość zarządzaną przypisaną do systemu i będą dostępne przez inne usługi z innymi tożsamościami, które są tożsamościami przypisanymi przez użytkownika. Niektóre z usług, do których SQL może uzyskać dostęp, to Azure Storage Account(V2), Azure Data Lake Storage Gen2, SQL Server, Oracle, Teradata, MongoDB lub Cosmos DB API dla MongoDB, Generic ODBC, Bulk Operations i S3-compatibile object storage.
Inne funkcje bezpieczeństwa, które ma serwer SQL, to:
- **Reguły zapory**: Reguły zapory kontrolują dostęp do Twojego serwera, ograniczając lub zezwalając na ruch. To jest również funkcja samych baz danych.
- **Transparentne Szyfrowanie Danych (TDE)**: TDE szyfruje Twoje bazy danych, kopie zapasowe i logi w spoczynku, aby chronić Twoje dane, nawet jeśli pamięć masowa zostanie skompromitowana. Może być realizowane za pomocą klucza zarządzanego przez usługę lub klucza zarządzanego przez klienta.
- **Microsoft Defender dla SQL**: Microsoft Defender dla SQL może być włączony, oferując oceny podatności i zaawansowaną ochronę przed zagrożeniami dla serwera.
#### Modele wdrożenia
@@ -38,59 +55,96 @@ Azure SQL Database obsługuje elastyczne opcje wdrożenia, aby dostosować się
- Doskonała dla mikroserwisów lub aplikacji wymagających jednego źródła danych.
- **Elastic Pool**:
- Umożliwia wielu bazom danych dzielenie zasobów w ramach puli.
- Ekonomiczne dla aplikacji z fluktuującymi wzorcami użycia w wielu bazach danych.
- Ekonomiczne dla aplikacji z fluktuującymi wzorcami użytkowania w wielu bazach danych.
### Azure SQL Database
**Azure SQL Database** to **w pełni zarządzana platforma bazy danych jako usługa (PaaS)**, która zapewnia skalowalne i bezpieczne rozwiązania baz danych relacyjnych. Jest zbudowana na najnowszych technologiach SQL Server i eliminuje potrzebę zarządzania infrastrukturą, co czyni ją popularnym wyborem dla aplikacji w chmurze.
#### Kluczowe funkcje
- **Zawsze aktualne**: Działa na najnowszej stabilnej wersji SQL Server i automatycznie otrzymuje nowe funkcje i poprawki.
- **Możliwości PaaS**: Wbudowana wysoka dostępność, kopie zapasowe i aktualizacje.
- **Elastyczność danych**: Obsługuje dane relacyjne i nierelacyjne (np. grafy, JSON, dane przestrzenne i XML).
#### Sieć
**Łączność sieciowa**: Wybierz, czy chcesz włączyć dostęp przez publiczny punkt końcowy, czy prywatny punkt końcowy. Jeśli wybierzesz Brak dostępu, żadne punkty końcowe nie są tworzone, dopóki nie zostaną skonfigurowane ręcznie:
- Brak dostępu: Żadne punkty końcowe nie są skonfigurowane, blokując przychodzące połączenia, aż do ręcznego ustawienia.
- Publiczny punkt końcowy: Umożliwia bezpośrednie połączenia przez publiczny internet, podlegające zasadom zapory i innym konfiguracjom bezpieczeństwa.
- Prywatny punkt końcowy: Ogranicza łączność do prywatnej sieci.
**Polityka połączeń**: Zdefiniuj, jak klienci komunikują się z serwerem bazy danych SQL:
- Domyślnie: Używa polityki przekierowania dla wszystkich połączeń klientów z wewnątrz Azure (z wyjątkiem tych korzystających z prywatnych punktów końcowych) oraz polityki proxy dla połączeń z zewnątrz Azure.
- Proxy: Kieruje wszystkie połączenia klientów przez bramę bazy danych Azure SQL.
- Przekierowanie: Klienci łączą się bezpośrednio z węzłem hostującym bazę danych.
#### Funkcje bezpieczeństwa
- **Microsoft Defender dla SQL**: może być włączony, oferując oceny podatności i zaawansowaną ochronę przed zagrożeniami.
- **Księga**: kryptograficznie weryfikuje integralność danych, zapewniając, że wszelkie manipulacje są wykrywane.
- **Tożsamość serwera**: wykorzystuje tożsamości zarządzane przypisane przez system i użytkownika, aby umożliwić centralny dostęp.
- **Zarządzanie kluczem szyfrowania Transparentnego Szyfrowania Danych**: szyfruje bazy danych, kopie zapasowe i logi w spoczynku bez konieczności wprowadzania jakichkolwiek zmian w aplikacji. Szyfrowanie można włączyć na każdej bazie danych, a jeśli jest skonfigurowane na poziomie bazy danych, te ustawienia mają pierwszeństwo przed konfiguracją na poziomie serwera.
- **Zawsze Szyfrowane**: to zestaw zaawansowanych funkcji ochrony danych, które oddzielają własność danych od zarządzania danymi. Zapewnia to, że administratorzy lub operatorzy z wysokimi uprawnieniami nie mogą uzyskać dostępu do wrażliwych danych.
#### Modele zakupu / Poziomy usług
- **Oparte na vCore**: Wybierz obliczenia, pamięć i pamięć masową niezależnie. Dla ogólnego użytku, krytycznego biznesu (z wysoką odpornością i wydajnością dla aplikacji OLTP) i skaluje się do 128 TB pamięci masowej.
- **Oparte na DTU**: Łączy obliczenia, pamięć i I/O w stałych poziomach. Zrównoważone zasoby dla typowych zadań.
- Standard: Zrównoważone zasoby dla typowych zadań.
- Premium: Wysoka wydajność dla wymagających obciążeń.
#### Skalowalna wydajność i pule
- **Pojedyncze bazy danych**: Każda baza danych jest izolowana i ma swoje własne dedykowane zasoby obliczeniowe, pamięci i przechowywania. Zasoby mogą być skalowane dynamicznie (w górę lub w dół) bez przestojów (1128 vCores, 32 GB4 TB przechowywania i do 128 TB).
- **Elastic Pools**: Dzielą zasoby między wieloma bazami danych w puli, aby zmaksymalizować efektywność i zaoszczędzić koszty. Zasoby mogą być również skalowane dynamicznie dla całej puli.
- **Elastyczność poziomów usług**: Rozpocznij od małej pojedynczej bazy danych w poziomie ogólnego użytku. Uaktualnij do poziomów krytycznych dla biznesu lub hyperskalowych w miarę wzrostu potrzeb.
- **Pojedyncze bazy danych**: Każda baza danych jest izolowana i ma swoje własne dedykowane zasoby obliczeniowe, pamięci i pamięci masowej. Zasoby można skalować dynamicznie (w górę lub w dół) bez przestojów (1128 vCores, 32 GB4 TB pamięci masowej i do 128 TB).
- **Elastic Pools**: Dzielą zasoby między wieloma bazami danych w puli, aby zmaksymalizować efektywność i zaoszczędzić koszty. Zasoby można również skalować dynamicznie dla całej puli.
- **Elastyczność poziomów usług**: Rozpocznij od małej bazy danych w poziomie ogólnego użytku. Uaktualnij do poziomów krytycznych dla biznesu lub hiperskalowych w miarę wzrostu potrzeb.
- **Opcje skalowania**: Dynamiczne skalowanie lub alternatywy autoskalowania.
#### Wbudowane monitorowanie i optymalizacja
- **Query Store**: Śledzi problemy z wydajnością, identyfikuje głównych konsumentów zasobów i oferuje wykonalne rekomendacje.
- **Automatyczne dostosowywanie**: Proaktywnie optymalizuje wydajność za pomocą funkcji takich jak automatyczne indeksowanie i korekcje planu zapytań.
- **Integracja telemetrii**: Obsługuje monitorowanie przez Azure Monitor, Event Hubs lub Azure Storage dla dostosowanych informacji.
- **Query Store**: Śledzi problemy z wydajnością, identyfikuje największych konsumentów zasobów i oferuje wykonalne rekomendacje.
- **Automatyczne dostosowywanie**: Proaktywnie optymalizuje wydajność za pomocą funkcji takich jak automatyczne indeksowanie i korekty planu zapytań.
- **Integracja telemetrii**: Obsługuje monitorowanie przez Azure Monitor, Event Hubs lub Azure Storage w celu uzyskania dostosowanych informacji.
#### Odzyskiwanie po awarii i dostępność
- **Automatyczne kopie zapasowe**: SQL Database automatycznie wykonuje pełne, różnicowe i logi transakcji kopie zapasowe baz danych.
- **Przywracanie do punktu w czasie**: Przywracaj bazy danych do dowolnego wcześniejszego stanu w okresie przechowywania kopii zapasowych.
- **Automatyczne kopie zapasowe**: SQL Database automatycznie wykonuje pełne, różnicowe i logi transakcji kopii zapasowych baz danych.
- **Przywracanie do punktu w czasie**: Przywracaj bazy danych do dowolnego wcześniejszego stanu w okresie retencji kopii zapasowych.
- **Geo-redundancja**
- **Grupy failover**: Ułatwia odzyskiwanie po awarii, grupując bazy danych do automatycznego przełączania awaryjnego między regionami.
- **Grupy failover**: Uproszczone odzyskiwanie po awarii poprzez grupowanie baz danych dla automatycznego failoveru w różnych regionach.
### Azure SQL Managed Instance
**Azure SQL Managed Instance** to silnik bazy danych jako usługa (PaaS), który oferuje niemal 100% zgodności z SQL Server i automatycznie obsługuje większość zadań zarządzających (np. aktualizacje, łatanie, kopie zapasowe, monitorowanie). Zapewnia rozwiązanie chmurowe do migracji lokalnych baz danych SQL Server z minimalnymi zmianami.
**Azure SQL Managed Instance** to silnik bazy danych jako usługa (PaaS), który oferuje niemal 100% zgodności z SQL Server i automatycznie obsługuje większość zadań zarządzających (np. aktualizacje, łatanie, kopie zapasowe, monitorowanie). Zapewnia rozwiązanie chmurowe do migracji baz danych SQL Server w wersji on-premises z minimalnymi zmianami.
#### Poziomy usług
- **Ogólny cel**: Opcja kosztowa dla aplikacji z standardowymi wymaganiami I/O i opóźnienia.
- **Krytyczny dla biznesu**: Opcja o wysokiej wydajności z niskim opóźnieniem I/O dla krytycznych obciążeń.
- **Krytyczny biznes**: Opcja o wysokiej wydajności z niskim opóźnieniem I/O dla krytycznych obciążeń.
#### Zaawansowane funkcje zabezpieczeń
#### Zaawansowane funkcje bezpieczeństwa
* **Ochrona przed zagrożeniami**: Zaawansowana ochrona przed zagrożeniami informuje o podejrzanych działaniach i atakach SQL injection. Audytowanie w celu śledzenia i rejestrowania zdarzeń bazy danych dla zgodności.
* **Kontrola dostępu**: Uwierzytelnianie Microsoft Entra dla scentralizowanego zarządzania tożsamością. Bezpieczeństwo na poziomie wiersza i dynamiczne maskowanie danych dla szczegółowej kontroli dostępu.
* **Kontrola dostępu**: Uwierzytelnianie Microsoft Entra do centralnego zarządzania tożsamością. Bezpieczeństwo na poziomie wiersza i dynamiczne maskowanie danych dla szczegółowej kontroli dostępu.
* **Kopie zapasowe**: Automatyczne i ręczne kopie zapasowe z możliwością przywracania do punktu w czasie.
### Azure SQL Virtual Machines
**Azure SQL Virtual Machines** jest najlepsze do migracji, gdzie chcesz **kontrolować system operacyjny i instancję SQL Server**, jakby to był serwer działający lokalnie. Może mieć różne rozmiary maszyn oraz szeroki wybór wersji i edycji SQL Server.
**Azure SQL Virtual Machines** jest najlepsze dla migracji, gdzie chcesz **kontrolować system operacyjny i instancję SQL Server**, jakby to był serwer działający w wersji on-premises. Może mieć różne rozmiary maszyn oraz szeroki wybór wersji i edycji SQL Server.
#### Kluczowe cechy
#### Kluczowe funkcje
**Automatyczne kopie zapasowe**: Harmonogram kopii zapasowych dla baz danych SQL.
**Automatyczne łatanie**: Automatyzuje instalację aktualizacji systemu Windows i SQL Server w czasie okna konserwacji.
**Integracja z Azure Key Vault**: Automatycznie konfiguruje Key Vault dla maszyn wirtualnych SQL Server.
**Integracja z Defender for Cloud**: Wyświetl rekomendacje Defender for SQL w portalu.
**Automatyczne kopie zapasowe**: Harmonogram kopii zapasowych dla baz danych SQL.
**Automatyczne łatanie**: Automatyzuje instalację aktualizacji systemu Windows i SQL Server w czasie okna konserwacji.
**Integracja z Azure Key Vault**: Automatycznie konfiguruje Key Vault dla maszyn wirtualnych SQL Server.
**Integracja z Defender for Cloud**: Wyświetl rekomendacje Defender for SQL w portalu.
**Elastyczność wersji/edycji**: Zmień metadane wersji lub edycji SQL Server bez ponownego wdrażania maszyny wirtualnej.
#### Funkcje zabezpieczeń
#### Funkcje bezpieczeństwa
**Microsoft Defender for SQL**: Wgląd w bezpieczeństwo i alerty.
**Integracja z Azure Key Vault**: Bezpieczne przechowywanie poświadczeń i kluczy szyfrujących.
**Microsoft Defender dla SQL**: Wgląd w bezpieczeństwo i alerty.
**Integracja z Azure Key Vault**: Bezpieczne przechowywanie poświadczeń i kluczy szyfrowania.
**Microsoft Entra (Azure AD)**: Uwierzytelnianie i kontrola dostępu.
## Enumeracja
@@ -99,7 +153,7 @@ Azure SQL Database obsługuje elastyczne opcje wdrożenia, aby dostosować się
{{#tab name="az cli"}}
```bash
# List Servers
az sql server list # --output table
az sql server list # managed identities are enumerated here too
## List Server Usages
az sql server list-usages --name <server_name> --resource-group <resource_group>
## List Server Firewalls
@@ -208,7 +262,7 @@ Get-AzSqlVM
### Połącz i uruchom zapytania SQL
Możesz znaleźć ciąg połączenia (zawierający dane uwierzytelniające) z przykładu [enumerating an Az WebApp](az-app-services.md):
Możesz znaleźć ciąg połączenia (zawierający dane uwierzytelniające) w przykładzie [enumerating an Az WebApp](az-app-services.md):
```bash
function invoke-sql{
param($query)
@@ -4,11 +4,11 @@
## Podstawowe informacje
Google Cloud Compute Instances to **dostosowywalne maszyny wirtualne w infrastrukturze chmurowej Google**, oferujące skalowalną i na żądanie moc obliczeniową dla szerokiego zakresu aplikacji. Oferują funkcje takie jak globalne wdrożenie, trwałe przechowywanie, elastyczny wybór systemu operacyjnego oraz silne integracje sieciowe i zabezpieczeń, co czyni je wszechstronnym wyborem do hostowania stron internetowych, przetwarzania danych i efektywnego uruchamiania aplikacji w chmurze.
Google Cloud Compute Instances to **dostosowywalne maszyny wirtualne w infrastrukturze chmurowej Google**, oferujące skalowalną moc obliczeniową na żądanie dla szerokiego zakresu aplikacji. Oferują funkcje takie jak globalne wdrożenie, trwałe przechowywanie, elastyczny wybór systemu operacyjnego oraz silne integracje sieciowe i zabezpieczeń, co czyni je wszechstronnym wyborem do hostowania stron internetowych, przetwarzania danych i efektywnego uruchamiania aplikacji w chmurze.
### Poufna VM
Poufne VM wykorzystują **funkcje zabezpieczeń oparte na sprzęcie** oferowane przez najnowszą generację procesorów AMD EPYC, które obejmują szyfrowanie pamięci i bezpieczną wirtualizację szyfrowaną. Te funkcje umożliwiają VM ochronę danych przetwarzanych i przechowywanych w niej przed nawet systemem operacyjnym hosta i hypervisorem.
Poufne VM wykorzystują **funkcje zabezpieczeń oparte na sprzęcie** oferowane przez najnowszą generację procesorów AMD EPYC, które obejmują szyfrowanie pamięci i bezpieczną wirtualizację szyfrowaną. Funkcje te umożliwiają VM ochronę danych przetwarzanych i przechowywanych w jej wnętrzu nawet przed systemem operacyjnym hosta i hypervisorem.
Aby uruchomić Poufną VM, może być konieczne **zmiana** takich rzeczy jak **typ** **maszyny**, interfejs **sieciowy**, **obraz dysku rozruchowego**.
@@ -34,11 +34,11 @@ To konto usługi ma **rolę Edytora w całym projekcie (wysokie uprawnienia).**
A domyślne zakresy dostępu to:
- **https://www.googleapis.com/auth/devstorage.read\_only** -- Dostęp do odczytu do koszyków :)
- https://www.googleapis.com/auth/logging.write
- https://www.googleapis.com/auth/monitoring.write
- https://www.googleapis.com/auth/servicecontrol
- https://www.googleapis.com/auth/service.management.readonly
- https://www.googleapis.com/auth/trace.append
- [https://www.googleapis.com/auth/logging.write](https://www.googleapis.com/auth/logging.write)
- [https://www.googleapis.com/auth/monitoring.write](https://www.googleapis.com/auth/monitoring.write)
- [https://www.googleapis.com/auth/servicecontrol](https://www.googleapis.com/auth/servicecontrol)
- [https://www.googleapis.com/auth/service.management.readonly](https://www.googleapis.com/auth/service.management.readonly)
- [https://www.googleapis.com/auth/trace.append](https://www.googleapis.com/auth/trace.append)
Jednak możliwe jest **przyznanie mu `cloud-platform` jednym kliknięciem** lub określenie **niestandardowych**.
@@ -61,13 +61,13 @@ Możliwe jest zezwolenie na ruch HTTP i HTTPS.
Te opcje **zwiększą bezpieczeństwo** VM i są zalecane:
- **Bezpieczne uruchamianie:** Bezpieczne uruchamianie pomaga chronić instancje VM przed złośliwym oprogramowaniem na poziomie uruchamiania i jądra oraz rootkitami.
- **Włącz vTPM:** Wirtualny moduł zaufanej platformy (vTPM) weryfikuje integralność uruchamiania i uruchamiania gościa VM oraz oferuje generowanie i ochronę kluczy.
- **Włącz vTPM:** Wirtualny moduł zaufanej platformy (vTPM) weryfikuje integralność uruchamiania i uruchamiania gościa VM oraz oferuje generację i ochronę kluczy.
- **Nadzór integralności:** Nadzór integralności pozwala monitorować i weryfikować integralność uruchamiania chronionych instancji VM za pomocą raportów Stackdriver. Wymaga włączenia vTPM.
### Dostęp do VM
Typowy sposób na umożliwienie dostępu do VM to **zezwolenie na określone klucze publiczne SSH** do dostępu do VM.\
Jednak możliwe jest również **włączenie dostępu do VM za pomocą usługi `os-config` przy użyciu IAM**. Ponadto możliwe jest włączenie 2FA do uzyskania dostępu do VM za pomocą tej usługi.\
Typowym sposobem na umożliwienie dostępu do VM jest **zezwolenie na dostęp dla określonych kluczy publicznych SSH**.\
Jednak możliwe jest również **włączenie dostępu do VM za pomocą usługi `os-config` przy użyciu IAM**. Co więcej, możliwe jest włączenie 2FA do uzyskania dostępu do VM za pomocą tej usługi.\
Gdy ta **usługa** jest **włączona**, dostęp za pomocą **kluczy SSH jest wyłączony.**
<figure><img src="../../../../images/image (328).png" alt=""><figcaption></figcaption></figure>