mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-29 07:00:29 -07:00
Translated ['src/pentesting-cloud/aws-security/aws-services/aws-organiza
This commit is contained in:
+3
-3
@@ -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
|
||||
```
|
||||
## References
|
||||
|
||||
- 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)는 **완전 관리형 메시지 큐 서비스**로 제공됩니다. 이 서비스의 주요 기능은 마이크로서비스, 분산 시스템 및 서버리스 애플리케이션의 확장 및 분리를 지원하는 것입니다. 이 서비스는 메시지 지향 미들웨어를 관리하고 운영할 필요성을 제거하도록 설계되었으며, 이는 종종 복잡하고 자원을 많이 소모할 수 있습니다. 이러한 복잡성의 제거는 개발자가 작업의 보다 혁신적이고 차별화된 측면에 노력을 집중할 수 있도록 합니다.
|
||||
Amazon Simple Queue Service (SQS)는 **완전 관리형 메시지 큐 서비스**로 제공됩니다. 이 서비스의 주요 기능은 마이크로서비스, 분산 시스템 및 서버리스 애플리케이션의 확장 및 분리를 지원하는 것입니다. 이 서비스는 종종 복잡하고 자원을 많이 소모하는 메시지 지향 미들웨어를 관리하고 운영할 필요성을 제거하도록 설계되었습니다. 이러한 복잡성의 제거는 개발자가 자신의 작업에서 더 혁신적이고 차별화된 측면에 노력을 집중할 수 있도록 합니다.
|
||||
|
||||
### Enumeration
|
||||
```bash
|
||||
@@ -18,7 +18,7 @@ aws sqs receive-message --queue-url <value>
|
||||
aws sqs send-message --queue-url <value> --message-body <value>
|
||||
```
|
||||
> [!CAUTION]
|
||||
> 또한 `--queue-url`에 지역이 포함되어 있더라도 **`--region`**에서 올바른 지역을 지정해야 합니다. 그렇지 않으면 접근 권한이 없다는 오류가 발생하지만 문제는 지역입니다.
|
||||
> 또한, `--queue-url`에 지역이 포함되어 있더라도 **`--region`**에서 올바른 지역을 지정해야 합니다. 그렇지 않으면 접근 권한이 없다는 오류가 발생할 수 있지만, 문제는 지역입니다.
|
||||
|
||||
#### 인증되지 않은 접근
|
||||
|
||||
@@ -46,6 +46,6 @@ aws sqs send-message --queue-url <value> --message-body <value>
|
||||
|
||||
## 참고 문헌
|
||||
|
||||
- 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}}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Queue
|
||||
|
||||
자세한 내용은 다음을 확인하세요:
|
||||
자세한 정보는 다음을 확인하세요:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-queue-enum.md
|
||||
@@ -22,8 +22,8 @@ az storage queue policy set --name <queue-name> --permissions rwd --expiry 2024-
|
||||
```
|
||||
## References
|
||||
|
||||
- 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}}
|
||||
|
||||
+8
-8
@@ -12,7 +12,7 @@
|
||||
|
||||
### DataActions: `Microsoft.Storage/storageAccounts/queueServices/queues/messages/read`
|
||||
|
||||
이 권한을 가진 공격자는 Azure Storage Queue에서 메시지를 엿볼 수 있습니다. 이를 통해 공격자는 메시지를 처리된 것으로 표시하거나 상태를 변경하지 않고 메시지의 내용을 볼 수 있습니다. 이는 민감한 정보에 대한 무단 접근으로 이어질 수 있으며, 데이터 유출 또는 추가 공격을 위한 정보 수집을 가능하게 합니다.
|
||||
이 권한을 가진 공격자는 Azure Storage Queue에서 메시지를 엿볼 수 있습니다. 이를 통해 공격자는 메시지의 내용을 처리된 것으로 표시하거나 상태를 변경하지 않고도 볼 수 있습니다. 이는 민감한 정보에 대한 무단 접근으로 이어질 수 있으며, 데이터 유출이나 추가 공격을 위한 정보 수집을 가능하게 합니다.
|
||||
```bash
|
||||
az storage message peek --queue-name <queue_name> --account-name <storage_account>
|
||||
```
|
||||
@@ -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`
|
||||
|
||||
이 권한을 통해 공격자는 Azure Storage Queue에서 메시지를 검색하고 처리할 수 있습니다. 이는 그들이 메시지 내용을 읽고 이를 처리된 것으로 표시하여 합법적인 시스템에서 숨길 수 있음을 의미합니다. 이로 인해 민감한 데이터가 노출되거나 메시지 처리 방식에 중단이 발생하거나, 메시지를 의도된 사용자에게 사용할 수 없게 만들어 중요한 워크플로가 중단될 수 있습니다.
|
||||
이 권한을 통해 공격자는 Azure Storage Queue에서 메시지를 검색하고 처리할 수 있습니다. 이는 그들이 메시지 내용을 읽고 이를 처리된 것으로 표시하여 합법적인 시스템에서 숨길 수 있음을 의미합니다. 이로 인해 민감한 데이터가 노출되거나 메시지 처리 방식에 중단이 발생하거나, 메시지를 의도된 사용자에게 사용할 수 없게 만들어 중요한 워크플로우가 중단될 수 있습니다.
|
||||
```bash
|
||||
az storage message get --queue-name <queue_name> --account-name <storage_account>
|
||||
```
|
||||
@@ -46,19 +46,19 @@ az storage message update --queue-name <queue-name> \
|
||||
```
|
||||
### Actions: `Microsoft.Storage/storageAccounts/queueServices/queues/delete`
|
||||
|
||||
이 권한은 공격자가 스토리지 계정 내의 큐를 삭제할 수 있게 해줍니다. 이 기능을 활용함으로써 공격자는 큐와 그에 연결된 모든 메시지를 영구적으로 제거할 수 있으며, 이는 워크플로우에 상당한 중단을 초래하고 영향을 받는 큐에 의존하는 애플리케이션에 대한 중요한 데이터 손실을 초래할 수 있습니다. 이 작업은 시스템의 필수 구성 요소를 제거하여 서비스를 방해하는 데에도 사용될 수 있습니다.
|
||||
이 권한은 공격자가 스토리지 계정 내의 큐를 삭제할 수 있게 해줍니다. 이 기능을 활용함으로써 공격자는 큐와 그에 연결된 모든 메시지를 영구적으로 제거할 수 있으며, 이는 워크플로우에 심각한 중단을 초래하고 영향을 받는 큐에 의존하는 애플리케이션에 중요한 데이터 손실을 초래할 수 있습니다. 이 작업은 시스템의 필수 구성 요소를 제거하여 서비스를 방해하는 데에도 사용될 수 있습니다.
|
||||
```bash
|
||||
az storage queue delete --name <queue-name> --account-name <storage-account>
|
||||
```
|
||||
### DataActions: `Microsoft.Storage/storageAccounts/queueServices/queues/messages/delete`
|
||||
|
||||
이 권한을 사용하면 공격자가 Azure Storage Queue에서 모든 메시지를 삭제할 수 있습니다. 이 작업은 모든 메시지를 제거하여 워크플로를 방해하고 큐에 의존하는 시스템의 데이터 손실을 초래합니다.
|
||||
이 권한을 통해 공격자는 Azure Storage Queue에서 모든 메시지를 삭제할 수 있습니다. 이 작업은 모든 메시지를 제거하여 워크플로를 방해하고 큐에 의존하는 시스템의 데이터 손실을 초래합니다.
|
||||
```bash
|
||||
az storage message clear --queue-name <queue-name> --account-name <storage-account>
|
||||
```
|
||||
### Actions: `Microsoft.Storage/storageAccounts/queueServices/queues/write`
|
||||
|
||||
이 권한은 공격자가 스토리지 계정 내에서 큐 및 그 속성을 생성하거나 수정할 수 있게 해줍니다. 이를 통해 무단 큐를 생성하거나 메타데이터를 수정하거나 접근 제어 목록(ACL)을 변경하여 접근을 허용하거나 제한할 수 있습니다. 이 기능은 워크플로를 방해하거나 악성 데이터를 주입하거나 민감한 정보를 유출하거나 큐 설정을 조작하여 추가 공격을 가능하게 할 수 있습니다.
|
||||
이 권한은 공격자가 스토리지 계정 내에서 큐 및 해당 속성을 생성하거나 수정할 수 있게 합니다. 이를 통해 무단 큐를 생성하거나 메타데이터를 수정하거나 접근 제어 목록(ACL)을 변경하여 접근을 허용하거나 제한할 수 있습니다. 이 기능은 워크플로를 방해하거나 악성 데이터를 주입하거나 민감한 정보를 유출하거나 큐 설정을 조작하여 추가 공격을 가능하게 할 수 있습니다.
|
||||
```bash
|
||||
az storage queue create --name <new-queue-name> --account-name <storage-account>
|
||||
|
||||
@@ -68,8 +68,8 @@ az storage queue policy set --name <queue-name> --permissions rwd --expiry 2024-
|
||||
```
|
||||
## References
|
||||
|
||||
- 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
-19
@@ -4,7 +4,7 @@
|
||||
|
||||
## Service Bus
|
||||
|
||||
자세한 내용은 다음을 확인하세요:
|
||||
자세한 정보는 다음을 확인하세요:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-servicebus-enum.md
|
||||
@@ -18,7 +18,7 @@ az servicebus namespace delete --resource-group <ResourceGroupName> --name <Name
|
||||
```
|
||||
### Actions: `Microsoft.ServiceBus/namespaces/topics/Delete`
|
||||
|
||||
이 권한을 가진 공격자는 Azure Service Bus 주제를 삭제할 수 있습니다. 이 작업은 주제와 그와 관련된 모든 구독 및 메시지를 제거하여, 중요한 데이터 손실을 초래하고 주제에 의존하는 시스템 및 워크플로를 방해할 수 있습니다.
|
||||
이 권한을 가진 공격자는 Azure Service Bus 주제를 삭제할 수 있습니다. 이 작업은 주제와 그에 연결된 모든 구독 및 메시지를 제거하여, 중요한 데이터 손실을 초래하고 주제에 의존하는 시스템 및 워크플로를 방해할 수 있습니다.
|
||||
```bash
|
||||
az servicebus topic delete --resource-group <ResourceGroupName> --namespace-name <NamespaceName> --name <TopicName>
|
||||
```
|
||||
@@ -34,30 +34,23 @@ az servicebus queue delete --resource-group <ResourceGroupName> --namespace-name
|
||||
```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`
|
||||
|
||||
Azure Service Bus 네임스페이스를 생성하거나 수정할 수 있는 권한이 있는 공격자는 이를 이용해 운영을 방해하거나, 무단 리소스를 배포하거나, 민감한 데이터를 노출할 수 있습니다. 그들은 공용 네트워크 접근을 활성화하거나, 암호화 설정을 낮추거나, 성능을 저하시켜 비용을 증가시키기 위해 SKU를 변경하는 등 중요한 구성을 변경할 수 있습니다. 또한, 그들은 로컬 인증을 비활성화하거나, 복제 위치를 조작하거나, TLS 버전을 조정하여 보안 통제를 약화시킬 수 있으며, 이는 네임스페이스 잘못 구성의 중요한 사후 활용 위험이 됩니다.
|
||||
```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`)
|
||||
|
||||
Azure Service Bus 큐를 생성하거나 수정할 수 있는 권한이 있는 공격자는 데이터를 가로채거나, 워크플로를 방해하거나, 무단 액세스를 가능하게 하는 데 이를 악용할 수 있습니다. 그들은 악의적인 엔드포인트로 메시지를 전달하거나, 데이터를 부적절하게 유지하거나 삭제하기 위해 메시지 TTL을 조정하거나, 오류 처리를 방해하기 위해 데드레터링을 활성화하는 등 중요한 구성을 변경할 수 있습니다. 또한, 서비스 기능을 방해하거나 탐지를 피하기 위해 큐 크기, 잠금 기간 또는 상태를 조작할 수 있어, 이는 중요한 포스트 익스플로잇 위험입니다.
|
||||
Azure Service Bus 큐를 생성하거나 수정할 수 있는 권한이 있는 공격자는 이를 이용해 데이터를 가로채거나, 워크플로를 방해하거나, 무단 접근을 가능하게 할 수 있습니다. 그들은 악의적인 엔드포인트로 메시지를 전달하도록 설정하거나, 메시지 TTL을 조정하여 데이터를 부적절하게 유지하거나 삭제하거나, 오류 처리를 방해하기 위해 데드레터링을 활성화하는 등 중요한 구성을 변경할 수 있습니다. 또한, 큐 크기, 잠금 기간 또는 상태를 조작하여 서비스 기능을 방해하거나 탐지를 피할 수 있어, 이는 중요한 사후 활용 위험이 됩니다.
|
||||
```bash
|
||||
az servicebus queue create --resource-group <ResourceGroupName> --namespace-name <NamespaceName> --name <QueueName>
|
||||
az servicebus queue update --resource-group <ResourceGroupName> --namespace-name <NamespaceName> --name <QueueName>
|
||||
```
|
||||
### Actions: `Microsoft.ServiceBus/namespaces/topics/write` (`Microsoft.ServiceBus/namespaces/topics/read`)
|
||||
|
||||
Azure Service Bus 네임스페이스 내에서 주제를 생성하거나 수정할 수 있는 권한이 있는 공격자는 이를 이용해 메시지 워크플로를 방해하거나, 민감한 데이터를 노출시키거나, 무단 작업을 수행할 수 있습니다. az servicebus topic update와 같은 명령을 사용하여, 확장성을 위한 파티셔닝 활성화, 메시지를 부적절하게 유지하거나 폐기하기 위한 TTL 설정 변경, 또는 제어를 우회하기 위한 중복 감지 비활성화와 같은 구성을 조작할 수 있습니다. 또한, 주제 크기 제한을 조정하거나, 가용성을 방해하기 위해 상태를 변경하거나, 가로챈 메시지를 임시로 저장하기 위해 익스프레스 주제를 구성할 수 있어, 주제 관리는 사후 활용 완화를 위한 중요한 초점이 됩니다.
|
||||
Azure Service Bus 네임스페이스 내에서 주제를 생성하거나 수정할 수 있는 권한이 있는 공격자는 이를 이용하여 메시지 워크플로를 방해하거나, 민감한 데이터를 노출시키거나, 무단 작업을 수행할 수 있습니다. az servicebus topic update와 같은 명령을 사용하여, 확장성을 위한 파티셔닝 활성화, 메시지를 부적절하게 유지하거나 폐기하기 위한 TTL 설정 변경, 또는 제어를 우회하기 위한 중복 감지 비활성화와 같은 구성을 조작할 수 있습니다. 또한, 주제 크기 제한을 조정하거나, 가용성을 방해하기 위해 상태를 변경하거나, 가로챈 메시지를 임시로 저장하기 위해 익스프레스 주제를 구성할 수 있어, 주제 관리는 사후 활용 완화를 위한 중요한 초점이 됩니다.
|
||||
```bash
|
||||
az servicebus topic create --resource-group <ResourceGroupName> --namespace-name <NamespaceName> --name <TopicName>
|
||||
az servicebus topic update --resource-group <ResourceGroupName> --namespace-name <NamespaceName> --name <TopicName>
|
||||
```
|
||||
### Actions: `Microsoft.ServiceBus/namespaces/topics/subscriptions/write` (`Microsoft.ServiceBus/namespaces/topics/subscriptions/read`)
|
||||
|
||||
구독을 생성하거나 수정할 수 있는 권한이 있는 공격자는 Azure Service Bus 주제 내에서 구독을 수정하기 위해 Action: `Microsoft.ServiceBus/namespaces/topics/subscriptions/read`도 필요합니다. 이를 통해 메시지 워크플로를 가로채거나, 재배치하거나, 방해할 수 있습니다. az servicebus topic subscription update와 같은 명령을 사용하여 메시지를 전환하기 위해 데드 레터링을 활성화하거나, 메시지를 무단 엔드포인트로 전달하거나, TTL 및 잠금 기간을 수정하여 메시지 전달을 유지하거나 방해할 수 있습니다. 또한, 상태 또는 최대 전달 수 설정을 변경하여 운영을 방해하거나 탐지를 피할 수 있으며, 구독 제어는 사후 활용 시나리오에서 중요한 측면이 됩니다.
|
||||
구독을 생성하거나 수정할 수 있는 권한이 있는 공격자는 Azure Service Bus 주제 내에서 구독을 수정하기 위해 Action: `Microsoft.ServiceBus/namespaces/topics/subscriptions/read`도 필요합니다. 이를 이용해 메시지 워크플로를 가로채거나, 재배치하거나, 방해할 수 있습니다. az servicebus topic subscription update와 같은 명령을 사용하여 메시지를 전환하기 위해 데드 레터링을 활성화하거나, 메시지를 무단 엔드포인트로 전달하거나, TTL 및 잠금 기간을 수정하여 메시지 전달을 유지하거나 방해할 수 있습니다. 또한, 상태 또는 최대 전달 수 설정을 변경하여 운영을 방해하거나 탐지를 피할 수 있으며, 구독 제어는 사후 활용 시나리오에서 중요한 측면이 됩니다.
|
||||
```bash
|
||||
az servicebus topic subscription create --resource-group <ResourceGroupName> --namespace-name <NamespaceName> --topic-name <TopicName> --name <SubscriptionName>
|
||||
az servicebus topic subscription update --resource-group <ResourceGroupName> --namespace-name <NamespaceName> --topic-name <TopicName> --name <SubscriptionName>
|
||||
@@ -72,12 +65,12 @@ az servicebus topic subscription update --resource-group <ResourceGroupName> --n
|
||||
|
||||
## 참조
|
||||
|
||||
- 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}}
|
||||
|
||||
+51
-4
@@ -12,13 +12,23 @@ SQL Database에 대한 자세한 내용은 다음을 확인하세요:
|
||||
|
||||
### `Microsoft.Sql/servers/databases/read`, `Microsoft.Sql/servers/read` && `Microsoft.Sql/servers/databases/write`
|
||||
|
||||
이 권한을 통해 공격자는 손상된 환경 내에서 데이터베이스를 생성하고 업데이트할 수 있습니다. 이 사후 활용 활동은 공격자가 악성 데이터를 추가하거나 데이터베이스 구성을 수정하거나 추가적인 지속성을 위한 백도어를 삽입할 수 있게 하여, 운영을 방해하거나 추가적인 악의적인 행동을 가능하게 할 수 있습니다.
|
||||
이 권한을 통해 공격자는 손상된 환경 내에서 데이터베이스를 생성하고 업데이트할 수 있습니다. 이 후속 활동은 공격자가 악성 데이터를 추가하거나 데이터베이스 구성을 수정하거나 추가적인 지속성을 위한 백도어를 삽입할 수 있게 하여, 운영을 방해하거나 추가적인 악의적인 행동을 가능하게 할 수 있습니다.
|
||||
```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>
|
||||
```
|
||||
이 권한(`Microsoft.Sql/servers/read` && `Microsoft.Sql/servers/databases/write`)으로 삭제된 데이터베이스를 복원할 수 있습니다:
|
||||
```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`
|
||||
|
||||
@@ -42,7 +52,7 @@ az sql elastic-pool update \
|
||||
```
|
||||
### `Microsoft.Sql/servers/auditingSettings/read` && `Microsoft.Sql/servers/auditingSettings/write`
|
||||
|
||||
이 권한을 사용하면 Azure SQL Server의 감사 설정을 수정하거나 활성화할 수 있습니다. 이는 공격자나 권한이 있는 사용자가 감사 구성을 조작하여 흔적을 감추거나 감사 로그를 자신이 제어하는 위치로 리디렉션할 수 있게 할 수 있습니다. 이는 보안 모니터링을 방해하거나 행동을 추적하는 데 도움이 될 수 있습니다. 주의: Blob Storage를 사용하여 Azure SQL Server에 대한 감사를 활성화하려면 감사 로그를 저장할 수 있는 스토리지 계정을 연결해야 합니다.
|
||||
이 권한을 사용하면 Azure SQL Server의 감사 설정을 수정하거나 활성화할 수 있습니다. 이는 공격자나 권한이 있는 사용자가 감사 구성을 조작하여 흔적을 감추거나 감사 로그를 자신이 제어하는 위치로 리디렉션할 수 있게 할 수 있습니다. 이는 보안 모니터링을 방해하거나 행동을 추적할 수 있게 할 수 있습니다. 주의: Blob Storage를 사용하여 Azure SQL Server에 대한 감사를 활성화하려면 감사 로그를 저장할 수 있는 스토리지 계정을 연결해야 합니다.
|
||||
```bash
|
||||
az sql server audit-policy update \
|
||||
--server <server_name> \
|
||||
@@ -62,7 +72,7 @@ az sql server connection-policy update \
|
||||
```
|
||||
### `Microsoft.Sql/servers/databases/export/action`
|
||||
|
||||
이 권한을 사용하면 Azure SQL Server에서 스토리지 계정으로 데이터베이스를 내보낼 수 있습니다. 이 권한을 가진 공격자 또는 승인된 사용자는 데이터베이스에서 민감한 데이터를 내보내어 자신이 제어하는 위치로 전송할 수 있으며, 이는 상당한 데이터 유출 위험을 초래합니다. 이를 수행하기 위해서는 스토리지 키를 아는 것이 중요합니다.
|
||||
이 권한을 사용하면 Azure SQL Server에서 스토리지 계정으로 데이터베이스를 내보낼 수 있습니다. 이 권한을 가진 공격자 또는 승인된 사용자는 데이터베이스에서 민감한 데이터를 내보내어 자신이 제어하는 위치로 유출할 수 있으며, 이는 상당한 데이터 유출 위험을 초래합니다. 이를 수행하기 위해서는 스토리지 키를 아는 것이 중요합니다.
|
||||
```bash
|
||||
az sql db export \
|
||||
--server <server_name> \
|
||||
@@ -76,7 +86,7 @@ az sql db export \
|
||||
```
|
||||
### `Microsoft.Sql/servers/databases/import/action`
|
||||
|
||||
이 권한을 사용하면 Azure SQL Server에 데이터베이스를 가져올 수 있습니다. 공격자 또는 이 권한이 있는 승인된 사용자는 악의적이거나 조작된 데이터베이스를 업로드할 수 있습니다. 이는 민감한 데이터에 대한 제어를 얻거나 가져온 데이터베이스 내에 유해한 스크립트나 트리거를 삽입하는 결과를 초래할 수 있습니다. 추가로, 이를 Azure의 자신의 서버로 가져올 수 있습니다. 주의: 서버는 Azure 서비스와 리소스가 서버에 접근할 수 있도록 허용해야 합니다.
|
||||
이 권한을 사용하면 Azure SQL Server에 데이터베이스를 가져올 수 있습니다. 이 권한을 가진 공격자 또는 승인된 사용자는 악의적이거나 조작된 데이터베이스를 업로드할 수 있습니다. 이는 민감한 데이터에 대한 제어를 얻거나 가져온 데이터베이스 내에 해로운 스크립트나 트리거를 삽입하는 결과를 초래할 수 있습니다. 추가로, Azure의 자신의 서버로 가져올 수 있습니다. 참고: 서버는 Azure 서비스와 리소스가 서버에 접근할 수 있도록 허용해야 합니다.
|
||||
```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`
|
||||
|
||||
이 권한을 가진 사용자는 Azure SQL 서버의 연결 정책을 수정하고 검색할 수 있습니다. 이러한 권한은 클라이언트가 서버에 연결하는 방식을 변경할 수 있게 하며, 리디렉션 또는 프록시와 같은 방법 중에서 선택할 수 있습니다. 잘못 구성된 경우 보안을 약화시키거나 트래픽을 리디렉션하거나 민감한 데이터를 가로챌 수 있습니다.
|
||||
```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`
|
||||
|
||||
이 권한을 가진 사용자는 Azure SQL Server와 관련된 암호화 키를 업데이트하고 검색할 수 있습니다. 이러한 키는 종종 암호화를 통해 민감한 데이터를 보호하는 데 사용되므로, 이를 조작하면 무단 복호화 또는 키 회전 변경을 허용하여 데이터 보안을 위협할 수 있습니다.
|
||||
```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`
|
||||
|
||||
이 권한은 Azure SQL Database의 Ledger Digest를 비활성화할 수 있게 하며, 이는 데이터의 무결성을 검증하는 암호화 다이제스트 레코드를 Azure Blob Storage에 주기적으로 업로드하는 것을 중단합니다.
|
||||
```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`
|
||||
|
||||
이 권한은 인증된 사용자 또는 공격자가 Azure SQL 데이터베이스에서 투명 데이터 암호화(TDE) 설정을 활성화, 비활성화 또는 수정할 수 있게 하여 암호화 구성을 변경함으로써 데이터 보안에 영향을 미칠 수 있습니다.
|
||||
```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}}
|
||||
|
||||
-64
@@ -1,64 +0,0 @@
|
||||
# Az - Azure Container Instances Privesc
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Azure Container Instances
|
||||
|
||||
자세한 정보는 다음을 확인하세요:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-container-instances.md
|
||||
{{#endref}}
|
||||
|
||||
### `Microsoft.ContainerInstance/containerGroups/read`, `Microsoft.ContainerInstance/containerGroups/containers/exec/action`
|
||||
|
||||
이 권한은 사용자가 실행 중인 컨테이너에서 **명령을 실행**할 수 있게 해줍니다. 이는 컨테이너에 관리되는 ID가 연결되어 있는 경우 **권한 상승**에 사용될 수 있습니다. 물론, 컨테이너 내부에 저장된 소스 코드 및 기타 민감한 정보에 접근하는 것도 가능합니다.
|
||||
|
||||
`ls`를 실행하고 출력을 얻는 것은 다음과 같이 간단합니다:
|
||||
```bash
|
||||
az container exec --name <container-name> --resource-group <res-group> --exec-command 'ls'
|
||||
```
|
||||
컨테이너의 **출력을 읽는** 것도 가능합니다:
|
||||
```bash
|
||||
az container attach --name <container-name> --resource-group <res-group>
|
||||
```
|
||||
로그를 가져오려면:
|
||||
```bash
|
||||
az container logs --name <container-name> --resource-group <res-group>
|
||||
```
|
||||
### `Microsoft.ContainerInstance/containerGroups/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
|
||||
|
||||
이 권한은 **사용자 관리 ID**를 컨테이너 그룹에 연결할 수 있게 해줍니다. 이는 컨테이너에서 권한을 상승시키는 데 매우 유용합니다.
|
||||
|
||||
사용자 관리 ID를 컨테이너 그룹에 연결하려면:
|
||||
```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`
|
||||
|
||||
이 권한은 **사용자 관리 ID**가 연결된 **컨테이너 그룹을 생성하거나 업데이트**할 수 있게 해줍니다. 이는 컨테이너에서 권한을 상승시키는 데 매우 유용합니다.
|
||||
```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
|
||||
```
|
||||
또한, 기존 컨테이너 그룹을 업데이트하여 예를 들어 **`--command-line` 인수**를 추가하여 리버스 셸을 설정하는 것도 가능합니다.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
@@ -16,11 +16,11 @@
|
||||
```bash
|
||||
az storage message peek --queue-name <queue_name> --account-name <storage_account>
|
||||
```
|
||||
**잠재적 영향**: 큐에 대한 무단 접근, 메시지 노출 또는 무단 사용자 또는 서비스에 의한 큐 조작.
|
||||
**잠재적 영향**: 권한이 없는 사용자 또는 서비스에 의한 큐에 대한 무단 접근, 메시지 노출 또는 큐 조작.
|
||||
|
||||
### DataActions: `Microsoft.Storage/storageAccounts/queueServices/queues/messages/process/action`
|
||||
|
||||
이 권한을 통해 공격자는 Azure Storage Queue에서 메시지를 검색하고 처리할 수 있습니다. 이는 그들이 메시지 내용을 읽고 이를 처리된 것으로 표시하여 합법적인 시스템에서 숨길 수 있음을 의미합니다. 이로 인해 민감한 데이터가 노출되거나 메시지 처리 방식에 중단이 발생하거나, 메시지를 의도된 사용자에게 사용할 수 없게 만들어 중요한 워크플로가 중단될 수 있습니다.
|
||||
이 권한을 통해 공격자는 Azure Storage Queue에서 메시지를 검색하고 처리할 수 있습니다. 이는 그들이 메시지 내용을 읽고 이를 처리된 것으로 표시하여 합법적인 시스템에서 숨길 수 있음을 의미합니다. 이로 인해 민감한 데이터가 노출되거나 메시지 처리 방식에 중단이 발생하거나, 메시지를 의도된 사용자에게 사용할 수 없게 만들어 중요한 워크플로우가 중단될 수 있습니다.
|
||||
```bash
|
||||
az storage message get --queue-name <queue_name> --account-name <storage_account>
|
||||
```
|
||||
@@ -56,8 +56,8 @@ az storage queue policy set --name <queue-name> --permissions rwd --expiry 2024-
|
||||
```
|
||||
## References
|
||||
|
||||
- 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}}
|
||||
|
||||
+175
-100
@@ -14,7 +14,7 @@
|
||||
|
||||
이 권한은 Service Bus 네임스페이스 내의 로컬 권한 규칙에 대한 키를 가져오거나 재생성할 수 있게 해줍니다. 이 키를 사용하여 Service Bus 네임스페이스로 인증할 수 있으며, 이를 통해 모든 큐나 주제에 메시지를 전송하거나, 모든 큐나 구독에서 메시지를 수신하거나, 시스템과 상호작용하여 운영을 방해하거나, 유효한 사용자를 가장하거나, 메시징 워크플로우에 악성 데이터를 주입할 수 있습니다.
|
||||
|
||||
기본적으로 **`RootManageSharedAccessKey` 규칙은** Service Bus 네임스페이스에 대한 전체 제어 권한을 가지며, `az` cli에서 사용됩니다. 그러나 다른 키 값이 있는 다른 규칙이 존재할 수 있습니다.
|
||||
기본적으로 **`RootManageSharedAccessKey` 규칙은** Service Bus 네임스페이스에 대한 전체 제어 권한을 가지고 있으며, `az` cli에서 사용됩니다. 그러나 다른 키 값이 있는 다른 규칙이 존재할 수 있습니다.
|
||||
```bash
|
||||
# List keys
|
||||
az servicebus namespace authorization-rule keys list --resource-group <res-group> --namespace-name <namespace-name> --authorization-rule-name RootManageSharedAccessKey [--authorization-rule-name RootManageSharedAccessKey]
|
||||
@@ -41,7 +41,7 @@ az servicebus namespace authorization-rule update \
|
||||
```
|
||||
### Microsoft.ServiceBus/namespaces/[queues|topics]/authorizationRules/ListKeys/action OR Microsoft.ServiceBus/namespaces/[queues|topics]/authorizationRules/regenerateKeys/action
|
||||
|
||||
Service Bus 네임스페이스 내의 특정 주제와 큐는 자체 권한 부여 규칙을 가질 수 있으며, 이를 통해 엔터티에 대한 액세스를 제어할 수 있습니다. 이러한 권한을 통해 **이러한 로컬 권한 부여 규칙의 키를 검색하거나 재생성할 수 있으며**, 이를 통해 엔터티로 인증하고 메시지를 보내거나 받을 수 있으며, 구독을 관리하거나 시스템과 상호작용하여 운영을 방해하거나 유효한 사용자를 가장하거나 메시징 워크플로에 악성 데이터를 주입할 수 있습니다.
|
||||
Service Bus 네임스페이스 내의 특정 주제와 큐는 자체 권한 부여 규칙을 가질 수 있으며, 이를 통해 엔터티에 대한 접근을 제어할 수 있습니다. 이러한 권한을 통해 **이러한 로컬 권한 부여 규칙의 키를 검색하거나 재생성할 수 있으며**, 이를 통해 엔터티로 인증하고 메시지를 보내거나 받을 수 있으며, 구독을 관리하거나 시스템과 상호작용하여 운영을 방해하거나 유효한 사용자를 가장하거나 메시징 워크플로우에 악성 데이터를 주입할 수 있습니다.
|
||||
```bash
|
||||
# List keys (topics)
|
||||
az servicebus topic authorization-rule keys list --resource-group <res-group> --namespace-name <namespace-name> --topic-name <topic-name> --name <auth-rule-name>
|
||||
@@ -57,7 +57,7 @@ az servicebus queue authorization-rule keys renew --key [PrimaryKey|SecondaryKey
|
||||
```
|
||||
### Microsoft.ServiceBus/namespaces/[queues|topics]/authorizationRules/write
|
||||
|
||||
이 권한을 사용하면 **모든 권한과 자체 키를 가진 새로운 권한 규칙을 생성**할 수 있습니다:
|
||||
이 권한을 사용하면 **모든 권한과 자신의 키를 가진 새로운 권한 규칙을 생성**할 수 있습니다:
|
||||
```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> --
|
||||
```
|
||||
### Send Messages with keys (Microsoft.ServiceBus/namespaces/authorizationRules/listkeys/action OR Microsoft.ServiceBus/namespaces/authorizationRules/regenerateKeys/action)
|
||||
|
||||
`PrimaryConnectionString`를 검색할 수 있으며, 이는 Service Bus 네임스페이스의 자격 증명 역할을 합니다. 이 연결 문자열을 사용하여 Service Bus 네임스페이스로 완전히 인증할 수 있으며, 이를 통해 모든 큐나 주제에 메시지를 전송하고 시스템과 상호작용하여 운영을 방해하거나 유효한 사용자를 가장하거나 메시징 워크플로우에 악성 데이터를 주입할 수 있습니다.
|
||||
`PrimaryConnectionString`를 검색할 수 있으며, 이는 Service Bus 네임스페이스의 자격 증명 역할을 합니다. 이 연결 문자열을 사용하여 Service Bus 네임스페이스로 완전히 인증할 수 있으며, 이를 통해 모든 큐나 주제에 메시지를 전송하고 시스템과 상호작용하여 운영을 방해하거나 유효한 사용자를 가장하거나 메시징 워크플로우에 악성 데이터를 주입할 수 있습니다. 이 방법은 `--disable-local-auth`가 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())
|
||||
```
|
||||
추가로 az rest를 사용하여 메시지를 보낼 수 있으며, 이 경우 사용하기 위해 sas 토큰을 생성해야 합니다.
|
||||
```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>"
|
||||
|
||||
```
|
||||
### Recieve with keys (Microsoft.ServiceBus/namespaces/authorizationRules/listkeys/action OR Microsoft.ServiceBus/namespaces/authorizationRules/regenerateKeys/action)
|
||||
### Receive with keys (Microsoft.ServiceBus/namespaces/authorizationRules/listkeys/action OR Microsoft.ServiceBus/namespaces/authorizationRules/regenerateKeys/action)
|
||||
|
||||
PrimaryConnectionString를 검색할 수 있으며, 이는 Service Bus 네임스페이스의 자격 증명 역할을 합니다. 이 연결 문자열을 사용하여 네임스페이스 내의 모든 큐 또는 구독에서 메시지를 수신할 수 있으며, 이는 잠재적으로 민감하거나 중요한 데이터에 대한 접근을 허용하고, 데이터 유출을 가능하게 하거나, 메시지 처리 및 애플리케이션 워크플로에 간섭할 수 있습니다.
|
||||
PrimaryConnectionString를 검색할 수 있으며, 이는 Service Bus 네임스페이스의 자격 증명 역할을 합니다. 이 연결 문자열을 사용하여 네임스페이스 내의 모든 큐 또는 구독에서 메시지를 수신할 수 있으며, 이는 잠재적으로 민감하거나 중요한 데이터에 대한 접근을 허용하고, 데이터 유출을 가능하게 하거나 메시지 처리 및 애플리케이션 워크플로에 간섭할 수 있습니다. 이 방법은 `--disable-local-auth`가 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("----------------------------")
|
||||
# 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)
|
||||
|
||||
asyncio.run(receive())
|
||||
print("Done receiving messages")
|
||||
```
|
||||
추가로 az rest를 사용하여 메시지를 보낼 수 있으며, 이 경우 사용하기 위해 sas 토큰을 생성해야 합니다.
|
||||
```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)
|
||||
|
||||
```
|
||||
큐에서는 메시지를 가져오거나 미리 볼 수 있습니다(메시지를 가져오면 제거되지만, 미리 보기는 제거되지 않습니다):
|
||||
```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>"
|
||||
```
|
||||
주제:
|
||||
```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>"
|
||||
```
|
||||
### 메시지 전송. DataActions: `Microsoft.ServiceBus/namespaces/messages/send/action`
|
||||
|
||||
이 권한을 사용하여 메시지를 전송할 수 있으며, `--disable-local-auth`가 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())
|
||||
```
|
||||
### 메시지 수신. DataActions: `Microsoft.ServiceBus/namespaces/messages/receive/action`
|
||||
|
||||
이 권한을 사용하여 메시지를 수신할 수 있습니다. `--disable-local-auth`가 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")
|
||||
```
|
||||
## References
|
||||
|
||||
- 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/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}}
|
||||
|
||||
@@ -12,7 +12,7 @@ SQL Database에 대한 자세한 정보는 다음을 확인하세요:
|
||||
|
||||
### `Microsoft.Sql/servers/read` && `Microsoft.Sql/servers/write`
|
||||
|
||||
이 권한을 가진 사용자는 Azure SQL 서버를 업데이트하거나 생성하고, 관리 자격 증명을 포함한 중요한 구성을 수정하여 권한 상승을 수행할 수 있습니다. 이 권한은 사용자가 SQL 서버 관리자 비밀번호를 포함한 서버 속성을 업데이트할 수 있게 하여, 무단 접근 또는 서버에 대한 제어를 가능하게 합니다. 또한 새로운 서버를 생성할 수 있어, 악의적인 목적으로 그림자 인프라를 도입할 수 있습니다. "Microsoft Entra Authentication Only"가 비활성화된 환경에서는 SQL 기반 인증을 악용하여 무제한 접근을 얻을 수 있으므로 특히 중요해집니다.
|
||||
이 권한을 가진 사용자는 Azure SQL 서버를 업데이트하거나 생성하고, 관리 자격 증명을 포함한 중요한 구성을 수정하여 권한 상승을 수행할 수 있습니다. 이 권한은 사용자가 SQL 서버 관리자 비밀번호를 포함한 서버 속성을 업데이트할 수 있게 하여, 서버에 대한 무단 접근 또는 제어를 가능하게 합니다. 또한 새로운 서버를 생성할 수 있어, 악의적인 목적으로 그림자 인프라를 도입할 수 있습니다. "Microsoft Entra Authentication Only"가 비활성화된 환경에서는 SQL 기반 인증을 악용하여 무제한 접근을 얻을 수 있으므로 특히 중요해집니다.
|
||||
```bash
|
||||
# Change the server password
|
||||
az sql server update \
|
||||
@@ -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>
|
||||
```
|
||||
또한 비공개 엔드포인트가 아닌 곳에서 접근하려면 공개 액세스를 활성화해야 합니다. 활성화하려면:
|
||||
```bash
|
||||
@@ -35,6 +35,31 @@ az sql server update \
|
||||
--resource-group <resource-group> \
|
||||
--enable-public-network true
|
||||
```
|
||||
또한, 권한을 통해 할당된 ID를 활성화하고 서버에 연결된 관리 ID로 작업할 수 있습니다. 예를 들어, Azure Storage에 접근할 수 있는 관리 ID가 있는 경우:
|
||||
```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`
|
||||
|
||||
공격자는 Azure SQL 서버의 방화벽 규칙을 조작하여 무단 액세스를 허용할 수 있습니다. 이를 통해 특정 IP 주소나 전체 IP 범위, 공용 IP를 포함하여 서버를 열 수 있으며, 악의적인 행위자에게 접근을 가능하게 합니다. 이 사후 활용 활동은 기존 네트워크 보안 제어를 우회하고, 지속성을 확립하거나, 민감한 리소스를 노출시켜 환경 내에서 수평 이동을 촉진하는 데 사용될 수 있습니다.
|
||||
@@ -60,7 +85,7 @@ az sql server firewall-rule update \
|
||||
|
||||
### `Microsoft.Sql/servers/ipv6FirewallRules/write`
|
||||
|
||||
이 권한을 사용하면 Azure SQL Server에서 IPv6 방화벽 규칙을 생성, 수정 또는 삭제할 수 있습니다. 이는 공격자나 권한이 있는 사용자가 기존 네트워크 보안 구성을 우회하고 서버에 무단으로 접근할 수 있게 할 수 있습니다. 모든 IPv6 주소에서의 트래픽을 허용하는 규칙을 추가함으로써, 공격자는 서버를 외부 접근에 열 수 있습니다.
|
||||
이 권한을 사용하면 Azure SQL Server에서 IPv6 방화벽 규칙을 생성, 수정 또는 삭제할 수 있습니다. 이는 공격자나 권한이 있는 사용자가 기존 네트워크 보안 구성을 우회하고 서버에 무단으로 접근할 수 있게 할 수 있습니다. 모든 IPv6 주소에서 트래픽을 허용하는 규칙을 추가함으로써, 공격자는 서버를 외부 접근에 열 수 있습니다.
|
||||
```bash
|
||||
az sql server firewall-rule create \
|
||||
--server <server_name> \
|
||||
@@ -74,7 +99,7 @@ az sql server firewall-rule create \
|
||||
|
||||
### `Microsoft.Sql/servers/administrators/write` && `Microsoft.Sql/servers/administrators/read`
|
||||
|
||||
이 권한을 사용하면 Azure SQL Server 환경에서 SQL 데이터베이스에 접근하고 중요한 정보를 검색하여 권한 상승을 할 수 있습니다. 아래 명령어를 사용하면 공격자 또는 권한이 있는 사용자가 자신 또는 다른 계정을 Azure AD 관리자 권한으로 설정할 수 있습니다. "Microsoft Entra Authentication Only"가 활성화된 경우 서버 및 해당 인스턴스에 접근할 수 있습니다. SQL 서버의 Azure AD 관리자를 설정하는 명령어는 다음과 같습니다:
|
||||
이 권한을 사용하면 Azure SQL Server 환경에서 SQL 데이터베이스에 접근하고 중요한 정보를 검색하여 권한 상승을 할 수 있습니다. 아래 명령어를 사용하면 공격자나 권한이 있는 사용자가 자신 또는 다른 계정을 Azure AD 관리자 계정으로 설정할 수 있습니다. "Microsoft Entra Authentication Only"가 활성화된 경우 서버 및 해당 인스턴스에 접근할 수 있습니다. SQL 서버의 Azure AD 관리자를 설정하는 명령어는 다음과 같습니다:
|
||||
```bash
|
||||
az sql server ad-admin create \
|
||||
--server <server_name> \
|
||||
|
||||
@@ -1,45 +0,0 @@
|
||||
# Az - Container Instances
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## 기본 정보
|
||||
|
||||
Azure Container Instances (ACI)는 Azure 클라우드에서 **서버리스, 온디맨드 방식**으로 **컨테이너**를 실행할 수 있는 방법을 제공합니다. **단일 또는 여러 개의 컨테이너**를 **확장 가능한 컴퓨팅**, **네트워킹 옵션**, 및 **다른 Azure 서비스**(예: Storage, Virtual Networks, 또는 Container Registries)에 연결할 수 있는 유연성과 함께 그룹으로 **배포**할 수 있습니다.
|
||||
|
||||
이들은 **일시적인** 작업이기 때문에 기본 VM 인프라를 관리할 필요가 없습니다 — Azure가 이를 처리합니다. 그러나 **공격적인 보안 관점**에서 **권한**, **신원**, **네트워크 구성**, 및 **로그**가 공격 표면과 잠재적인 잘못된 구성을 드러낼 수 있는 방법을 이해하는 것이 중요합니다.
|
||||
|
||||
### 구성
|
||||
|
||||
- 컨테이너를 생성하기 위해 공개 이미지, Azure Container Registry의 컨테이너 이미지 또는 외부 리포지토리를 사용할 수 있으며, 이를 접근하기 위해 **비밀번호를 구성해야 할 수도 있습니다**.
|
||||
- 네트워킹과 관련하여 **공용 IP**를 가질 수도 있고 **프라이빗 엔드포인트**가 될 수도 있습니다.
|
||||
- 또한 다음과 같은 일반적인 도커 설정을 구성할 수 있습니다:
|
||||
- **환경 변수**
|
||||
- **볼륨** (Azure Files에서조차)
|
||||
- **포트**
|
||||
- **CPU 및 메모리 한도**
|
||||
- **재시작 정책**
|
||||
- **특권으로 실행**
|
||||
- **실행할 명령줄**
|
||||
- ...
|
||||
|
||||
## 열거
|
||||
|
||||
> [!WARNING]
|
||||
> ACI를 열거할 때 **환경 변수**, **네트워크 세부정보**, 또는 **관리되는 신원**과 같은 민감한 구성을 드러낼 수 있습니다. 이를 기록하거나 표시할 때 주의하십시오.
|
||||
```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>
|
||||
```
|
||||
|
||||
@@ -82,10 +82,10 @@ $queueMessage.Value
|
||||
../az-persistence/az-queue-persistance.md
|
||||
{{#endref}}
|
||||
|
||||
## 참고 문헌
|
||||
## 참조
|
||||
|
||||
- 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는 **애플리케이션의 다양한 부분 또는 별도의 애플리케이션 간의 신뢰할 수 있는 **통신을 가능하게 하기 위해 설계된 클라우드 기반 **메시징 서비스**입니다. 이는 안전한 중개자로 작용하여 발신자와 수신자가 동시에 작동하지 않더라도 메시지가 안전하게 전달되도록 보장합니다. 시스템을 분리함으로써 애플리케이션이 독립적으로 작동하면서도 데이터나 지침을 교환할 수 있게 합니다. 이는 여러 작업자 간의 부하 분산, 신뢰할 수 있는 메시지 전달 또는 작업을 순서대로 처리하거나 안전하게 접근을 관리하는 것과 같은 복잡한 조정이 필요한 시나리오에 특히 유용합니다.
|
||||
Azure Service Bus는 신뢰할 수 있는 **애플리케이션의 다양한 부분 또는 별도의 애플리케이션 간의 통신**을 가능하게 하기 위해 설계된 클라우드 기반 **메시징 서비스**입니다. 이는 안전한 중개자로 작용하여 메시지가 안전하게 전달되도록 보장하며, 발신자와 수신자가 동시에 작동하지 않더라도 메시지를 전달합니다. 시스템을 분리함으로써 애플리케이션이 독립적으로 작동하면서도 데이터나 지침을 교환할 수 있게 합니다. 이는 여러 작업자 간의 부하 분산, 신뢰할 수 있는 메시지 전달 또는 순서대로 작업을 처리하거나 안전하게 접근을 관리해야 하는 복잡한 조정이 필요한 시나리오에 특히 유용합니다.
|
||||
|
||||
### Key Concepts
|
||||
|
||||
1. **Queues:** 그 목적은 수신자가 준비될 때까지 메시지를 저장하는 것입니다.
|
||||
- 메시지는 순서가 있으며, 타임스탬프가 붙고, 내구성이 있게 저장됩니다.
|
||||
- 풀 모드(온디맨드 검색)로 전달됩니다.
|
||||
1. **Namespaces:** 메시징 시스템에서 네임스페이스는 메시징 구성 요소, 큐 및 주제를 조직하고 관리하는 논리적 컨테이너입니다. 이는 애플리케이션이 메시지를 보내고, 받고, 처리할 수 있는 격리된 환경을 제공합니다. 큐와 주제는 Service Bus 네임스페이스 내에서 동일한 인프라와 구성을 공유하지만 서로 상호작용하지 않고 독립적으로 작동합니다.
|
||||
2. **Queues:** 그 목적은 수신자가 준비될 때까지 메시지를 저장하는 것입니다.
|
||||
- 메시지는 정렬되고, 타임스탬프가 찍히며, 내구성 있게 저장됩니다.
|
||||
- 풀 모드(요청 시 검색)로 전달됩니다.
|
||||
- 포인트 투 포인트 통신을 지원합니다.
|
||||
2. **Topics:** 방송을 위한 게시-구독 메시징.
|
||||
- 여러 독립적인 구독이 메시지의 복사본을 수신합니다.
|
||||
- 구독은 전달을 제어하거나 메타데이터를 추가하기 위한 규칙/필터를 가질 수 있습니다.
|
||||
3. **Topics:** 방송을 위한 게시-구독 메시징입니다.
|
||||
- 여러 독립적인 구독자가 메시지의 복사본을 받습니다.
|
||||
- 구독자는 전달을 제어하거나 메타데이터를 추가하기 위한 규칙/필터를 가질 수 있습니다.
|
||||
- 다대다 통신을 지원합니다.
|
||||
3. **Namespaces:** 모든 메시징 구성 요소, 큐 및 주제를 위한 컨테이너로, 강력한 Azure 클러스터의 자신의 슬라이스와 같으며, 전용 용량을 제공하고 선택적으로 세 개의 가용성 영역에 걸쳐 있습니다.
|
||||
|
||||
### Advance Features
|
||||
The service bus endpoint/connection string is:
|
||||
```bash
|
||||
https://<namespace>.servicebus.windows.net:443/
|
||||
```
|
||||
### 고급 기능
|
||||
|
||||
일부 고급 기능은 다음과 같습니다:
|
||||
|
||||
- **Message Sessions**: FIFO 처리를 보장하고 요청-응답 패턴을 지원합니다.
|
||||
- **Auto-Forwarding**: 동일한 네임스페이스 내에서 큐 또는 주제 간에 메시지를 전송합니다.
|
||||
- **Dead-Lettering**: 배달할 수 없는 메시지를 검토를 위해 캡처합니다.
|
||||
- **Scheduled Delivery**: 미래 작업을 위해 메시지 처리를 지연시킵니다.
|
||||
- **Message Deferral**: 준비될 때까지 메시지 검색을 연기합니다.
|
||||
- **Transactions**: 작업을 원자적 실행으로 그룹화합니다.
|
||||
- **Filters & Actions**: 메시지를 필터링하거나 주석을 추가하기 위한 규칙을 적용합니다.
|
||||
- **Auto-Delete on Idle**: 비활성 상태에서 큐를 삭제합니다(최소: 5분).
|
||||
- **Duplicate Detection**: 재전송 중 중복 메시지를 제거합니다.
|
||||
- **Batch Deletion**: 만료되거나 불필요한 메시지를 대량으로 삭제합니다.
|
||||
- **메시지 세션**: FIFO 처리를 보장하고 요청-응답 패턴을 지원합니다.
|
||||
- **자동 전달**: 동일한 네임스페이스 내에서 큐 또는 주제 간에 메시지를 전송합니다.
|
||||
- **데드 레터링**: 배달할 수 없는 메시지를 검토를 위해 캡처합니다.
|
||||
- **예약된 배달**: 미래 작업을 위해 메시지 처리를 지연시킵니다.
|
||||
- **메시지 연기**: 준비될 때까지 메시지 검색을 연기합니다.
|
||||
- **트랜잭션**: 작업을 원자 실행으로 그룹화합니다.
|
||||
- **필터 및 작업**: 메시지를 필터링하거나 주석을 달기 위한 규칙을 적용합니다.
|
||||
- **유휴 시 자동 삭제**: 비활동 후 큐를 삭제합니다(최소: 5분).
|
||||
- **중복 감지**: 재전송 중 중복 메시지를 제거합니다.
|
||||
- **배치 삭제**: 만료되거나 불필요한 메시지를 대량으로 삭제합니다.
|
||||
|
||||
### Authorization-Rule / SAS Policy
|
||||
### 권한 규칙 / SAS 정책
|
||||
|
||||
SAS 정책은 Azure Service Bus 엔터티 네임스페이스(가장 중요한 것), 큐 및 주제에 대한 접근 권한을 정의합니다. 각 정책은 다음 구성 요소를 가집니다:
|
||||
SAS 정책은 Azure Service Bus 엔터티 네임스페이스(가장 중요한 것), 큐 및 주제에 대한 액세스 권한을 정의합니다. 각 정책은 다음 구성 요소를 포함합니다:
|
||||
|
||||
- **Permissions**: 접근 수준을 지정하기 위한 체크박스:
|
||||
- Manage: 엔터티에 대한 전체 제어를 부여하며, 구성 및 권한 관리를 포함합니다.
|
||||
- Send: 엔터티에 메시지를 전송할 수 있습니다.
|
||||
- Listen: 엔터티로부터 메시지를 수신할 수 있습니다.
|
||||
- **Primary and Secondary Keys**: 접근 인증을 위한 보안 토큰을 생성하는 데 사용되는 암호화 키입니다.
|
||||
- **Primary and Secondary Connection Strings**: 애플리케이션에서 쉽게 사용할 수 있도록 엔드포인트와 키를 포함한 미리 구성된 연결 문자열입니다.
|
||||
- **SAS Policy ARM ID**: 프로그래밍적 식별을 위한 정책의 Azure Resource Manager (ARM) 경로입니다.
|
||||
- **권한**: 액세스 수준을 지정하는 체크박스:
|
||||
- 관리: 엔터티에 대한 전체 제어를 부여하며, 구성 및 권한 관리를 포함합니다.
|
||||
- 전송: 엔터티에 메시지를 전송할 수 있습니다.
|
||||
- 수신: 엔터티로부터 메시지를 수신할 수 있습니다.
|
||||
- **기본 및 보조 키**: 액세스 인증을 위한 보안 토큰 생성을 위해 사용되는 암호화 키입니다.
|
||||
- **기본 및 보조 연결 문자열**: 애플리케이션에서 쉽게 사용할 수 있도록 엔드포인트와 키를 포함한 미리 구성된 연결 문자열입니다.
|
||||
- **SAS 정책 ARM ID**: 프로그래밍적 식별을 위한 정책의 Azure Resource Manager (ARM) 경로입니다.
|
||||
|
||||
### NameSpace
|
||||
네임스페이스는 모든 엔터티에 영향을 미치는 단일 SAS 정책을 가지며, 큐와 주제는 보다 세분화된 제어를 위해 개별 SAS 정책을 가질 수 있다는 점에 유의하는 것이 중요합니다.
|
||||
|
||||
sku, authrorization rule,
|
||||
### "--disable-local-auth"
|
||||
|
||||
### Enumeration
|
||||
--disable-local-auth 매개변수는 Service Bus 네임스페이스에 대해 로컬 인증(즉, Shared Access Signature (SAS) 키 사용)이 활성화되어 있는지 제어하는 데 사용됩니다. 다음은 알아야 할 사항입니다:
|
||||
|
||||
- true로 설정된 경우: SAS 키를 사용한 로컬 인증이 비활성화되고 Azure Active Directory (Azure AD) 인증이 허용됩니다.
|
||||
- false로 설정된 경우: SAS(로컬) 인증과 Azure AD 인증 모두 사용 가능하며, SAS 키가 포함된 연결 문자열을 사용하여 Service Bus 리소스에 액세스할 수 있습니다.
|
||||
|
||||
### 열거
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
|
||||
@@ -6,91 +6,145 @@
|
||||
|
||||
Azure SQL은 **Azure 클라우드의 SQL Server 데이터베이스 엔진**을 사용하는 관리형, 안전하고 지능적인 제품군입니다. 이는 서버의 물리적 관리에 대해 걱정할 필요가 없으며, 데이터 관리에 집중할 수 있음을 의미합니다.
|
||||
|
||||
Azure SQL은 세 가지 주요 제공 사항으로 구성됩니다:
|
||||
Azure SQL은 네 가지 주요 제공 사항으로 구성됩니다:
|
||||
|
||||
1. **Azure SQL Database**: 이는 **완전 관리형 데이터베이스 서비스**로, Azure 클라우드에서 개별 데이터베이스를 호스팅할 수 있습니다. 고유한 데이터베이스 패턴을 학습하고 맞춤형 추천 및 자동 조정을 제공하는 내장 지능을 제공합니다.
|
||||
2. **Azure SQL Managed Instance**: 이는 더 큰 규모의 전체 SQL Server 인스턴스 범위 배포를 위한 것입니다. 최신 SQL Server 온프레미스(Enterprise Edition) 데이터베이스 엔진과 거의 100% 호환성을 제공하며, 일반적인 보안 문제를 해결하는 네이티브 가상 네트워크(VNet) 구현과 온프레미스 SQL Server 고객에게 유리한 비즈니스 모델을 제공합니다.
|
||||
3. **Azure SQL Server on Azure VMs**: 이는 서비스로서의 인프라(IaaS)이며, 온프레미스에서 실행되는 서버처럼 **운영 체제 및 SQL Server 인스턴스에 대한 제어**를 원하는 마이그레이션에 가장 적합합니다.
|
||||
1. **Azure SQL Server**: Azure SQL Server는 SQL Server 데이터베이스의 배포 및 관리를 단순화하는 관리형 관계형 데이터베이스 서비스로, 내장된 보안 및 성능 기능을 제공합니다.
|
||||
2. **Azure SQL Database**: 이는 **완전 관리형 데이터베이스 서비스**로, Azure 클라우드에서 개별 데이터베이스를 호스팅할 수 있습니다. 고유한 데이터베이스 패턴을 학습하고 맞춤형 추천 및 자동 조정을 제공하는 내장된 지능을 제공합니다.
|
||||
3. **Azure SQL Managed Instance**: 이는 대규모 전체 SQL Server 인스턴스 범위 배포를 위한 것입니다. 최신 SQL Server 온프레미스(Enterprise Edition) 데이터베이스 엔진과 거의 100% 호환성을 제공하며, 일반적인 보안 문제를 해결하는 네이티브 가상 네트워크(VNet) 구현과 온프레미스 SQL Server 고객에게 유리한 비즈니스 모델을 제공합니다.
|
||||
4. **Azure SQL Server on Azure VMs**: 이는 서비스로서의 인프라(IaaS)이며, 온프레미스에서 실행되는 서버처럼 **운영 체제 및 SQL Server 인스턴스에 대한 제어**를 원하는 마이그레이션에 가장 적합합니다.
|
||||
|
||||
### Azure SQL Database
|
||||
### Azure SQL Server
|
||||
|
||||
**Azure SQL Database**는 **완전 관리형 데이터베이스 플랫폼으로서의 서비스(PaaS)**로, 확장 가능하고 안전한 관계형 데이터베이스 솔루션을 제공합니다. 최신 SQL Server 기술을 기반으로 하며, 인프라 관리의 필요성을 없애 클라우드 기반 애플리케이션에 인기 있는 선택이 됩니다.
|
||||
Azure SQL Server는 데이터 작업을 위해 Transact-SQL을 사용하는 관계형 데이터베이스 관리 시스템(RDBMS)으로, 기업 수준의 시스템을 처리하도록 설계되었습니다. 성능, 보안, 확장성 및 다양한 Microsoft 애플리케이션과의 통합을 위한 강력한 기능을 제공합니다. Azure SQL 데이터베이스는 이 서버에 의존하며, 이는 데이터베이스에 접근하기 위한 진입점입니다.
|
||||
|
||||
#### 주요 기능
|
||||
#### Network
|
||||
|
||||
- **항상 최신 상태**: 최신 안정 버전의 SQL Server에서 실행되며, 새로운 기능과 패치를 자동으로 받습니다.
|
||||
- **PaaS 기능**: 내장된 고가용성, 백업 및 업데이트.
|
||||
- **데이터 유연성**: 관계형 및 비관계형 데이터(예: 그래프, JSON, 공간 및 XML)를 지원합니다.
|
||||
**Network Connectivity**: 공용 엔드포인트 또는 개인 엔드포인트를 통해 액세스를 활성화할지 선택합니다. 액세스를 선택하지 않으면 수동으로 구성될 때까지 엔드포인트가 생성되지 않습니다:
|
||||
- No access: 엔드포인트가 구성되지 않아 수동으로 설정될 때까지 수신 연결이 차단됩니다.
|
||||
- Public endpoint: 방화벽 규칙 및 기타 보안 구성에 따라 공용 인터넷을 통한 직접 연결을 허용합니다.
|
||||
- Private endpoint: 개인 네트워크에 대한 연결을 제한합니다.
|
||||
|
||||
#### 구매 모델 / 서비스 계층
|
||||
**Connection Policy**: 클라이언트가 SQL 데이터베이스 서버와 통신하는 방식을 정의합니다:
|
||||
- Default: Azure 내부의 모든 클라이언트 연결(개인 엔드포인트를 사용하는 경우 제외)에 대해 리디렉션 정책을 사용하고 Azure 외부의 연결에 대해 프록시 정책을 사용합니다.
|
||||
- Proxy: 모든 클라이언트 연결을 Azure SQL Database 게이트웨이를 통해 라우팅합니다.
|
||||
- Redirect: 클라이언트가 데이터베이스를 호스팅하는 노드에 직접 연결합니다.
|
||||
|
||||
- **vCore 기반**: 컴퓨팅, 메모리 및 스토리지를 독립적으로 선택합니다. 일반 목적, 비즈니스 크리티컬(OLTP 앱에 대한 높은 복원력 및 성능) 및 최대 128TB 스토리지로 확장됩니다.
|
||||
- **DTU 기반**: 컴퓨팅, 메모리 및 I/O를 고정 계층으로 묶습니다. 일반 작업에 대한 균형 잡힌 리소스.
|
||||
- 표준: 일반 작업에 대한 균형 잡힌 리소스.
|
||||
- 프리미엄: 요구가 많은 작업에 대한 높은 성능.
|
||||
#### Authentication Methods
|
||||
Azure SQL은 데이터베이스 액세스를 보호하기 위해 다양한 인증 방법을 지원합니다:
|
||||
|
||||
#### 배포 모델
|
||||
- **Microsoft Entra-only authentication**: 중앙 집중식 ID 관리 및 단일 로그인에 대해 Microsoft Entra(구 Azure AD)를 사용합니다.
|
||||
- **Both SQL and Microsoft Entra authentication**: 전통적인 SQL 인증과 Microsoft Entra를 함께 사용할 수 있습니다.
|
||||
- **SQL authentication**: SQL Server 사용자 이름과 비밀번호에만 의존합니다.
|
||||
|
||||
#### Security features
|
||||
|
||||
SQL 서버는 **Managed Identities**를 가지고 있습니다. 관리형 ID는 서버가 자격 증명을 저장하지 않고도 다른 Azure 서비스에 안전하게 인증할 수 있도록 합니다. 이는 시스템 할당 관리형 ID를 통해 다른 서비스에 접근할 수 있게 하며, 사용자 할당 관리형 ID를 통해 다른 ID로 접근할 수 있습니다. SQL이 접근할 수 있는 서비스에는 Azure Storage Account(V2), Azure Data Lake Storage Gen2, SQL Server, Oracle, Teradata, MongoDB 또는 MongoDB용 Cosmos DB API, Generic ODBC, Bulk Operations 및 S3 호환 객체 저장소가 포함됩니다.
|
||||
|
||||
SQL 서버가 가진 다른 보안 기능은 다음과 같습니다:
|
||||
|
||||
- **Firewall Rules**: 방화벽 규칙은 트래픽을 제한하거나 허용하여 서버에 대한 액세스를 제어합니다. 이는 데이터베이스 자체의 기능이기도 합니다.
|
||||
- **Transparent Data Encryption (TDE)**: TDE는 데이터베이스, 백업 및 로그를 암호화하여 저장 중에도 데이터가 손상되지 않도록 보호합니다. 서비스 관리 키 또는 고객 관리 키로 수행할 수 있습니다.
|
||||
- **Microsoft Defender for SQL**: Microsoft Defender for SQL을 활성화하여 서버에 대한 취약성 평가 및 고급 위협 보호를 제공합니다.
|
||||
|
||||
#### Deployment Models
|
||||
|
||||
Azure SQL Database는 다양한 요구에 맞는 유연한 배포 옵션을 지원합니다:
|
||||
|
||||
- **단일 데이터베이스**:
|
||||
- 전용 리소스를 가진 완전히 격리된 데이터베이스.
|
||||
- **Single Database**:
|
||||
- 전용 리소스를 가진 완전히 격리된 데이터베이스입니다.
|
||||
- 마이크로서비스 또는 단일 데이터 소스가 필요한 애플리케이션에 적합합니다.
|
||||
- **엘라스틱 풀**:
|
||||
- **Elastic Pool**:
|
||||
- 여러 데이터베이스가 풀 내에서 리소스를 공유할 수 있습니다.
|
||||
- 여러 데이터베이스에 걸쳐 변동하는 사용 패턴이 있는 애플리케이션에 비용 효율적입니다.
|
||||
- 여러 데이터베이스에 걸쳐 사용 패턴이 변동하는 애플리케이션에 비용 효율적입니다.
|
||||
|
||||
#### 확장 가능한 성능 및 풀
|
||||
### Azure SQL Database
|
||||
|
||||
- **단일 데이터베이스**: 각 데이터베이스는 격리되어 있으며 전용 컴퓨팅, 메모리 및 스토리지 리소스를 가집니다. 리소스는 다운타임 없이 동적으로(상향 또는 하향) 확장할 수 있습니다(1–128 vCores, 32GB–4TB 스토리지, 최대 128TB).
|
||||
- **엘라스틱 풀**: 여러 데이터베이스 간에 리소스를 공유하여 효율성을 극대화하고 비용을 절감합니다. 전체 풀에 대해 리소스도 동적으로 확장할 수 있습니다.
|
||||
- **서비스 계층 유연성**: 일반 목적 계층에서 단일 데이터베이스로 작게 시작합니다. 필요에 따라 비즈니스 크리티컬 또는 하이퍼스케일 계층으로 업그레이드합니다.
|
||||
- **확장 옵션**: 동적 확장 또는 자동 확장 대안.
|
||||
**Azure SQL Database**는 **완전 관리형 데이터베이스 플랫폼으로서의 서비스(PaaS)**로, 확장 가능하고 안전한 관계형 데이터베이스 솔루션을 제공합니다. 최신 SQL Server 기술을 기반으로 하며, 인프라 관리의 필요성을 없애 클라우드 기반 애플리케이션에 인기 있는 선택입니다.
|
||||
|
||||
#### 내장 모니터링 및 최적화
|
||||
#### Key Features
|
||||
|
||||
- **쿼리 저장소**: 성능 문제를 추적하고, 주요 리소스 소비자를 식별하며, 실행 가능한 추천을 제공합니다.
|
||||
- **자동 조정**: 자동 인덱싱 및 쿼리 계획 수정과 같은 기능으로 성능을 사전 최적화합니다.
|
||||
- **텔레메트리 통합**: Azure Monitor, Event Hubs 또는 Azure Storage를 통한 모니터링을 지원하여 맞춤형 통찰력을 제공합니다.
|
||||
- **Always Up-to-Date**: 최신 안정 버전의 SQL Server에서 실행되며 새로운 기능과 패치를 자동으로 받습니다.
|
||||
- **PaaS Capabilities**: 내장된 고가용성, 백업 및 업데이트.
|
||||
- **Data Flexibility**: 관계형 및 비관계형 데이터(예: 그래프, JSON, 공간 및 XML)를 지원합니다.
|
||||
|
||||
#### 재해 복구 및 가용성
|
||||
#### Network
|
||||
|
||||
- **자동 백업**: SQL Database는 데이터베이스의 전체, 차등 및 트랜잭션 로그 백업을 자동으로 수행합니다.
|
||||
- **시점 복원**: 백업 보존 기간 내의 과거 상태로 데이터베이스를 복구합니다.
|
||||
- **지리적 중복성**
|
||||
- **페일오버 그룹**: 지역 간 자동 페일오버를 위해 데이터베이스를 그룹화하여 재해 복구를 간소화합니다.
|
||||
**Network Connectivity**: 공용 엔드포인트 또는 개인 엔드포인트를 통해 액세스를 활성화할지 선택합니다. 액세스를 선택하지 않으면 수동으로 구성될 때까지 엔드포인트가 생성되지 않습니다:
|
||||
- No access: 엔드포인트가 구성되지 않아 수동으로 설정될 때까지 수신 연결이 차단됩니다.
|
||||
- Public endpoint: 방화벽 규칙 및 기타 보안 구성에 따라 공용 인터넷을 통한 직접 연결을 허용합니다.
|
||||
- Private endpoint: 개인 네트워크에 대한 연결을 제한합니다.
|
||||
|
||||
**Connection Policy**: 클라이언트가 SQL 데이터베이스 서버와 통신하는 방식을 정의합니다:
|
||||
- Default: Azure 내부의 모든 클라이언트 연결(개인 엔드포인트를 사용하는 경우 제외)에 대해 리디렉션 정책을 사용하고 Azure 외부의 연결에 대해 프록시 정책을 사용합니다.
|
||||
- Proxy: 모든 클라이언트 연결을 Azure SQL Database 게이트웨이를 통해 라우팅합니다.
|
||||
- Redirect: 클라이언트가 데이터베이스를 호스팅하는 노드에 직접 연결합니다.
|
||||
|
||||
#### Security Features
|
||||
|
||||
- **Microsoft Defender for SQL**: 취약성 평가 및 고급 위협 보호를 제공하는 기능을 활성화할 수 있습니다.
|
||||
- **Ledger**: 데이터의 무결성을 암호학적으로 검증하여 변조가 감지되도록 합니다.
|
||||
- **Server Identity**: 중앙 집중식 액세스를 가능하게 하는 시스템 할당 및 사용자 할당 관리형 ID를 사용합니다.
|
||||
- **Transparent Data Encryption Key Management**: 애플리케이션에 변경 없이 데이터베이스, 백업 및 로그를 저장 중에 암호화합니다. 각 데이터베이스에서 암호화를 활성화할 수 있으며, 데이터베이스 수준에서 구성된 경우 이러한 설정이 서버 수준 구성을 무시합니다.
|
||||
- **Always Encrypted**: 데이터 소유권과 데이터 관리를 분리하는 고급 데이터 보호 기능 모음입니다. 이를 통해 높은 권한을 가진 관리자나 운영자가 민감한 데이터에 접근할 수 없도록 보장합니다.
|
||||
|
||||
#### Purchasing Models / Service Tiers
|
||||
|
||||
- **vCore-based**: 컴퓨팅, 메모리 및 저장소를 독립적으로 선택합니다. 일반 목적, 비즈니스 크리티컬(OLTP 앱에 대한 높은 복원력 및 성능) 및 최대 128TB 저장소로 확장됩니다.
|
||||
- **DTU-based**: 컴퓨팅, 메모리 및 I/O를 고정 계층으로 묶습니다. 일반 작업을 위한 균형 잡힌 리소스입니다.
|
||||
- Standard: 일반 작업을 위한 균형 잡힌 리소스입니다.
|
||||
- Premium: 요구가 많은 작업을 위한 높은 성능입니다.
|
||||
|
||||
#### Scalable performance and pools
|
||||
|
||||
- **Single Databases**: 각 데이터베이스는 격리되어 있으며 전용 컴퓨팅, 메모리 및 저장소 리소스를 가집니다. 리소스는 다운타임 없이 동적으로(상향 또는 하향) 확장할 수 있습니다(1–128 vCores, 32GB–4TB 저장소, 최대 128TB).
|
||||
- **Elastic Pools**: 여러 데이터베이스가 풀 내에서 리소스를 공유하여 효율성을 극대화하고 비용을 절감합니다. 리소스는 전체 풀에 대해 동적으로 확장할 수도 있습니다.
|
||||
- **Service Tier Flexibility**: 일반 목적 계층에서 단일 데이터베이스로 소규모로 시작합니다. 필요에 따라 비즈니스 크리티컬 또는 하이퍼스케일 계층으로 업그레이드합니다.
|
||||
- **Scaling Options**: 동적 확장 또는 자동 확장 대안.
|
||||
|
||||
#### Built-In Monitoring & Optimization
|
||||
|
||||
- **Query Store**: 성능 문제를 추적하고, 주요 리소스 소비자를 식별하며, 실행 가능한 권장 사항을 제공합니다.
|
||||
- **Automatic Tuning**: 자동 인덱싱 및 쿼리 계획 수정과 같은 기능으로 성능을 사전 최적화합니다.
|
||||
- **Telemetry Integration**: Azure Monitor, Event Hubs 또는 Azure Storage를 통한 모니터링을 지원하여 맞춤형 통찰력을 제공합니다.
|
||||
|
||||
#### Disaster Recovery & Availability
|
||||
|
||||
- **Automatic backups**: SQL Database는 데이터베이스의 전체, 차등 및 트랜잭션 로그 백업을 자동으로 수행합니다.
|
||||
- **Point-in-Time Restore**: 백업 보존 기간 내의 과거 상태로 데이터베이스를 복구합니다.
|
||||
- **Geo-Redundancy**
|
||||
- **Failover Groups**: 데이터베이스를 그룹화하여 지역 간 자동 장애 조치를 통해 재해 복구를 간소화합니다.
|
||||
|
||||
### Azure SQL Managed Instance
|
||||
|
||||
**Azure SQL Managed Instance**는 SQL Server와 거의 100% 호환성을 제공하는 플랫폼으로서의 서비스(PaaS) 데이터베이스 엔진으로, 대부분의 관리 작업(예: 업그레이드, 패치, 백업, 모니터링)을 자동으로 처리합니다. 최소한의 변경으로 온프레미스 SQL Server 데이터베이스를 마이그레이션하기 위한 클라우드 솔루션을 제공합니다.
|
||||
|
||||
#### 서비스 계층
|
||||
#### Service Tiers
|
||||
|
||||
- **일반 목적**: 표준 I/O 및 대기 시간 요구 사항이 있는 애플리케이션을 위한 비용 효율적인 옵션.
|
||||
- **비즈니스 크리티컬**: 중요한 작업을 위한 낮은 I/O 대기 시간을 가진 고성능 옵션.
|
||||
- **General Purpose**: 표준 I/O 및 대기 시간 요구 사항이 있는 애플리케이션을 위한 비용 효율적인 옵션입니다.
|
||||
- **Business Critical**: 중요한 작업을 위한 낮은 I/O 대기 시간을 가진 고성능 옵션입니다.
|
||||
|
||||
#### 고급 보안 기능
|
||||
#### Advanced Security Features
|
||||
|
||||
* **위협 보호**: 의심스러운 활동 및 SQL 인젝션 공격에 대한 고급 위협 보호 경고. 준수를 위한 데이터베이스 이벤트 추적 및 로깅.
|
||||
* **액세스 제어**: 중앙 집중식 ID 관리를 위한 Microsoft Entra 인증. 세분화된 액세스 제어를 위한 행 수준 보안 및 동적 데이터 마스킹.
|
||||
* **백업**: 시점 복원 기능이 있는 자동 및 수동 백업.
|
||||
* **Threat Protection**: 의심스러운 활동 및 SQL 인젝션 공격에 대한 고급 위협 보호 경고. 준수를 위한 데이터베이스 이벤트 추적 및 로깅을 위한 감사 기능.
|
||||
* **Access Control**: 중앙 집중식 ID 관리를 위한 Microsoft Entra 인증. 세분화된 액세스 제어를 위한 행 수준 보안 및 동적 데이터 마스킹.
|
||||
* **Backups**: 시점 복원 기능이 있는 자동 및 수동 백업.
|
||||
|
||||
### Azure SQL Virtual Machines
|
||||
|
||||
**Azure SQL Virtual Machines**는 온프레미스에서 실행되는 서버처럼 **운영 체제 및 SQL Server 인스턴스에 대한 제어**를 원하는 마이그레이션에 가장 적합합니다. 다양한 머신 크기와 SQL Server 버전 및 에디션을 선택할 수 있습니다.
|
||||
**Azure SQL Virtual Machines**는 온프레미스에서 실행되는 서버처럼 **운영 체제 및 SQL Server 인스턴스에 대한 제어**를 원하는 마이그레이션에 가장 적합합니다. 다양한 머신 크기와 SQL Server 버전 및 에디션을 폭넓게 선택할 수 있습니다.
|
||||
|
||||
#### 주요 기능
|
||||
#### Key Features
|
||||
|
||||
**자동 백업**: SQL 데이터베이스에 대한 백업 예약.
|
||||
**자동 패치**: 유지 관리 창 동안 Windows 및 SQL Server 업데이트 설치를 자동화합니다.
|
||||
**Azure Key Vault 통합**: SQL Server VM에 대해 Key Vault를 자동으로 구성합니다.
|
||||
**클라우드 방어자 통합**: 포털에서 SQL에 대한 Defender 추천을 확인합니다.
|
||||
**버전/에디션 유연성**: VM을 재배포하지 않고도 SQL Server 버전 또는 에디션 메타데이터를 변경할 수 있습니다.
|
||||
**Automated Backup**: SQL 데이터베이스에 대한 백업을 예약합니다.
|
||||
**Automatic Patching**: 유지 관리 창 동안 Windows 및 SQL Server 업데이트 설치를 자동화합니다.
|
||||
**Azure Key Vault Integration**: SQL Server VM에 대해 Key Vault를 자동으로 구성합니다.
|
||||
**Defender for Cloud Integration**: 포털에서 Defender for SQL 권장 사항을 확인합니다.
|
||||
**Version/Edition Flexibility**: VM을 재배포하지 않고도 SQL Server 버전 또는 에디션 메타데이터를 변경할 수 있습니다.
|
||||
|
||||
#### 보안 기능
|
||||
#### Security Features
|
||||
|
||||
**Microsoft Defender for SQL**: 보안 통찰력 및 경고.
|
||||
**Azure Key Vault 통합**: 자격 증명 및 암호화 키의 안전한 저장.
|
||||
**Azure Key Vault Integration**: 자격 증명 및 암호화 키의 안전한 저장.
|
||||
**Microsoft Entra (Azure AD)**: 인증 및 액세스 제어.
|
||||
|
||||
## Enumeration
|
||||
@@ -99,7 +153,7 @@ Azure SQL Database는 다양한 요구에 맞는 유연한 배포 옵션을 지
|
||||
{{#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
|
||||
|
||||
+10
-10
@@ -8,7 +8,7 @@ Google Cloud Compute Instances는 **구글의 클라우드 인프라에서 사
|
||||
|
||||
### Confidential VM
|
||||
|
||||
Confidential VMs는 **메모리 암호화 및 안전한 암호화 가상화를 포함하는 최신 세대의 AMD EPYC 프로세서**가 제공하는 **하드웨어 기반 보안 기능**을 사용합니다. 이러한 기능은 VM이 처리하고 저장된 데이터를 호스트 운영 체제 및 하이퍼바이저로부터 보호할 수 있게 합니다.
|
||||
Confidential VM은 **메모리 암호화 및 안전한 암호화 가상화를 포함한 최신 세대의 AMD EPYC 프로세서**가 제공하는 **하드웨어 기반 보안 기능**을 사용합니다. 이러한 기능은 VM이 처리하고 저장된 데이터를 호스트 운영 체제 및 하이퍼바이저로부터 보호할 수 있게 합니다.
|
||||
|
||||
Confidential VM을 실행하려면 **기계의 유형**, 네트워크 **인터페이스**, **부팅 디스크 이미지**와 같은 것들을 **변경**해야 할 수 있습니다.
|
||||
|
||||
@@ -34,11 +34,11 @@ Confidential VM을 실행하려면 **기계의 유형**, 네트워크 **인터
|
||||
그리고 **기본 액세스 범위**는 다음과 같습니다:
|
||||
|
||||
- **https://www.googleapis.com/auth/devstorage.read\_only** -- 버킷에 대한 읽기 액세스 :)
|
||||
- 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)
|
||||
|
||||
그러나 **클릭으로 `cloud-platform`을 부여**하거나 **사용자 정의 범위**를 지정할 수 있습니다.
|
||||
|
||||
@@ -68,15 +68,15 @@ HTTP 및 HTTPS 트래픽을 허용할 수 있습니다.
|
||||
|
||||
VM에 대한 액세스를 활성화하는 일반적인 방법은 **특정 SSH 공개 키**가 VM에 액세스할 수 있도록 허용하는 것입니다.\
|
||||
그러나 **IAM을 사용하여 `os-config` 서비스를 통해 VM에 대한 액세스를 활성화**할 수도 있습니다. 또한 이 서비스를 사용하여 VM에 액세스하기 위해 2FA를 활성화할 수 있습니다.\
|
||||
이 **서비스**가 **활성화되면**, **SSH 키를 통한 액세스가 비활성화됩니다.**
|
||||
이 **서비스**가 **활성화되면**, **SSH 키를 통한 액세스는 비활성화됩니다.**
|
||||
|
||||
<figure><img src="../../../../images/image (328).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Metadata
|
||||
|
||||
**자동화**(AWS의 userdata)를 정의할 수 있으며, 이는 **셸 명령**으로, 기계가 켜지거나 재시작될 때마다 실행됩니다.
|
||||
**자동화**(AWS의 userdata)를 정의할 수 있으며, 이는 기계가 켜지거나 재시작될 때마다 실행될 **셸 명령**입니다.
|
||||
|
||||
또한 **메타데이터 엔드포인트에서 접근 가능한 추가 메타데이터 키-값 쌍**을 **추가**할 수 있습니다. 이 정보는 일반적으로 환경 변수 및 시작/종료 스크립트에 사용됩니다. 이는 열거 섹션의 명령에서 **`describe` 메서드**를 사용하여 얻을 수 있지만, 인스턴스 내부에서 메타데이터 엔드포인트에 접근하여도 검색할 수 있습니다.
|
||||
또한 메타데이터 엔드포인트에서 접근할 수 있는 **추가 메타데이터 키-값 쌍**을 **추가**할 수 있습니다. 이 정보는 일반적으로 환경 변수 및 시작/종료 스크립트에 사용됩니다. 이는 열거 섹션의 명령에서 **`describe` 메서드**를 사용하여 얻을 수 있지만, 인스턴스 내부에서 메타데이터 엔드포인트에 접근하여도 검색할 수 있습니다.
|
||||
```bash
|
||||
# view project metadata
|
||||
curl "http://metadata.google.internal/computeMetadata/v1/project/attributes/?recursive=true&alt=text" \
|
||||
@@ -94,7 +94,7 @@ https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/
|
||||
|
||||
### 암호화
|
||||
|
||||
기본적으로 Google 관리 암호화 키가 사용되지만 고객 관리 암호화 키(CMEK)를 구성할 수 있습니다. 사용된 CMEK가 취소될 때 수행할 작업도 구성할 수 있습니다: VM을 종료하거나 아무것도 하지 않기.
|
||||
기본적으로 Google 관리 암호화 키가 사용되지만, 고객 관리 암호화 키(CMEK)를 구성할 수 있습니다. 사용된 CMEK가 취소될 때의 처리 방법도 구성할 수 있습니다: VM을 종료하거나 아무것도 하지 않기.
|
||||
|
||||
<figure><img src="../../../../images/image (329).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user