Ασφάλεια στο VMware

Τα θέματα ασφαλείας των προϊόντων της VMware χωρίζονται σε δύο κατηγορίες, στο επίπεδο εικονικοποίησης του πυρήνα “VMKernel”, και, κατά κύριο λόγο, στην κονσόλα χειρισμού, η οποία συνδέεται απευθείας με τον πυρήνα και βασίζεται στο λειτουργικό Red Hat Linux Enterprise που σημαίνει ότι έχει κληρονομήσει και αρκετές από τις ευπάθειες του.
Στα εικονικά συστήματα καθώς και στο τοπικό σύστημα (αν υπάρχει…) τα θέματα ασφαλείας είναι οι γνωστές και οι άγνωστες απειλές, όπως οι ευπάθειες των λειτουργικών συστημάτων, Ιοί, Spyware, Δούρειοι Ίπποι κτλ.

Ενδυνάμωση της Ασφαλείας 
Για την ενδυνάμωση της ασφάλειας θα πρέπει τα εικονικά συστήματα όπως και ο τοπικός υπολογιστής να τηρούνε τους συνηθισμένους κανόνες ασφαλείας, δηλαδή να έχουν τείχος προστασίας (Firewall) με αυστηρούς κανόνες, αντιβιοτικά, ίσως και κάποιο σύστημα ανίχνευσης εισβολών, τα λειτουργικά συστήματα που χρησιμοποιούν να είναι τελευταίας έκδοσης και ενημερωμένα. 
Το πρόγραμμα της VMware που χρησιμοποιείται να είναι και αυτό τελευταίας έκδοσης και όταν βγάζει κάποιο patch η εταιρεία να γίνεται άμεσα εγκατάστασή του.
Αν είναι εφικτό να χρησιμοποιούνται έξτρα προγράμματα όπως το vShield το οποίο κατηγοριοποιεί τα ευαίσθητα δεδομένα στα εικονικά συστήματα μειώνοντας παράλληλα τους κινδύνους κλοπής ή διαρροής τους, προστατεύει τις εφαρμογές και τα δεδομένα από επιθέσεις μέσω δικτύου (Εγκαθιστώντας ένα vSphere host και ελέγχοντας την κίνηση του δικτύου), μπορεί να δημιουργήσει ένα κεντρικό περιβάλλον το οποίο μπορεί να αξιοποιήσει το vCenter Server και να εφαρμόσει αυτές τις πολιτικές σε όλα τα vSphere host που έχει το εικονικό datacenter και τέλος ελέγχει για διαθέσιμες αναβαθμίσεις λειτουργικών συστημάτων και anti-virus για όλα τα εικονικά συστήματα.
Τέλος να τηρούνται οι κανόνες ασφαλείας που προτείνει η ίδια η εταιρεία[8]. Εκτός από τα προαναφερθέντα προτείνει:
Την απενεργοποίηση περιττών λειτουργιών για να μειωθούν τα μέρη που μπορούν να δεχθούν κάποια επίθεση όπως για παράδειγμα τις υπηρεσίες web  που δεν χρησιμοποιούνται, τις φυσικές συσκευές (floppy disk, οδηγούς οπτικών δίσκων, θύρες usb…) που δεν χρησιμοποιούνται κτλ. 
Την διαχείριση της “κονσόλας διαχείρισης” (VI Console) απομακρυσμένα γιατί όποιος έχει άμεση επαφή σε αυτή μπορεί να δει, να έχει πρόσβαση ή ακόμα και να τερματίσει οποιδήποτε εικονικό σύστημα λειτουργεί στον συγκεκριμένο φυσικό σύστημα. Έτσι η ύπαρξη ενός κακόβουλου χρήστη θα περιοριστεί μόνο στο συγκεκριμένο εικονικό σύστημα που θα έχει πρόσβαση.
Χρήση μόνιμων δίσκων για την αποθήκευση των ενεργειών επιλογή (Persistent) αντί για (Non-Persistent) κατά την εγκατάσταση γιατί αν υπάρξει κάποια επίθεση σε κάποιο εικονικό σύστημα θα χαθούν τα ίχνη εντελώς και μπορεί να μην γίνει αντιληπτή η επίθεση όμως η ευπάθεια θα συνεχίσει να υπάρχει στο σύστημα μας.
Σημαντικό είναι τα δίκτυα να είναι απομονωμένα μεταξύ τους γιατί με την μη απομόνωση τους υπάρχει η δυνατότητα μέσω του πρωτόκολλου (ARP) να διαχειριστεί ένας επιτιθέμενος τον πίνακα ARP για να αλλάξει τις συσχετίσεις των διευθύνσεων MAC και διευθύνσεων IP. Η απομόνωση μπορεί να γίνει με δύο τρόπους. Με τη χρησιμοποίηση ξεχωριστών φυσικών καρτών για τα VMs ή δημιουργώντας εικονικά τοπικά δίκτυα υπολογιστών (VLANs) τα οποία παρέχουν όλα τα πλεονεκτήματα ασφαλείας όπως εικονικός διαχωρισμός χωρίς καλώδια κ.τ.λ. 
Επίσης έχοντας τις ρυθμίσεις σε αυτόματη ρύθμιση {default} ένας χρήστης χωρίς δικαιώματα διαχειριστή (administrator/root) μπορεί να συνδέσει ή να αφαιρέσει συσκευές όπως οδηγούς οπτικών δίσκων ή έναν προσαρμογέα δικτύου. Δηλαδή ένας κακόβουλος χρήστης μπορεί να εγκαταστήσει ένα CD/DVD οδηγό και να μεταφέρει ευαίσθητα δεδομένα ή να αφαιρέσει τον προσαρμογέα δικτύου με αποτέλεσμα να δημιουργήσει μία άρνηση εξυπηρέτησης (αν πρόκειται για εξυπηρετητή (server). Αυτό αντιμετωπίζεται εύκολα με την πρόσθεση στο σύστημα της παραμέτρου: Isolation.tools.connectable.disable 	true Η απενεργοποίηση της λειτουργίας copy-paste μεταξύ host-guest1-guest2… είναι σημαντικός παράγοντας για την αποφυγή κλοπής ευαίσθητων δεδομένων μεταξύ των φιλοξενούμενων και του τοπικού συστήματος. Τέτοιες λειτουργίες ενεργοποιημένες μπορεί να είναι βολικές για το χρήστη, αλλά μπορεί να γίνουν και επικίνδυνες. Ένα τέτοιο παράδειγμα κλοπής δεδομένων είναι το παρακάτω όπου το φιλοξενούμενο λειτουργικό σύστημα είναι το MINIX.
guest1 $ ps -alx | vmw -c 			#αντιγράφει το πρόχειρο του #τοπικού λειτουργικού 
guest1 $ vmw -c < prog.c 			#αντιγράφει ένα text file από το τοπικό λειτουργικό 
guest2 $ vmw -v > prog.c 		       #κάνει επικόλληση σε έναν #άλλο guest 
guest1 $ uue pkg.tar.Z - | vmw -c 	        #ανταλλάσει ένα binary 
guest2 $ vmw -v | uud - 	   		#αρχείο μεταξύ των guest
Συνιστά επίσης τον περιορισμό των πρόσθετων δεδομένων που αποθηκεύονται στα αρχεία καταγραφής προβλημάτων, όπως το VMware.log. Προτείνει τον περιορισμό του συγκεκριμένου αρχείου σε μέγιστο αριθμό 10 αρχείων και μεγέθους των 100KB το καθένα, γιατί σε μία επίθεση με στόχο το συγκεκριμένο αρχείο μπορεί να αποκτήσει πολύ μεγάλο μέγεθος με αποτέλεσμα να γεμίσει ο σκληρός ο δίσκος και να χάνονται δεδομένα που έπρεπε να αποθηκευτούν. Με την εφαρμογή τις συγκεκριμένης πολιτικής τα 10 αυτά αρχεία αντικαθιστώνται συνεχώς με καινούρια χωρίς να υπάρχει περίπτωση να υπερβούν το όριο που έχει τεθεί.

Ανίχνευση παρουσίας του VMware 
Όπως προαναφέρθηκε τα προϊόντα της VMware και γενικά της εικονικοποίησης λειτουργικών συστημάτων εγκαθιστούν κάποιες συγκεκριμένες δομές δεδομένων. Μία μέθοδος ανίχνευσης εικονικού συστήματος είναι μέσω της δομής δεδομένων Local Descriptor Table η οποία δεν χρησιμοποιείται από τα windows, οπότε η ανίχνευση μιας μη-μηδενικής  τέτοιας δομής σε περιβάλλον windows οδηγεί στο συμπέρασμα ότι εντοπίσθηκε ένα εικονικό σύστημα (Η Συγκεκριμένη μέθοδος λειτουργεί μόνο για μονοπύρηνους υπολογιστές). 
Ένας άλλος τρόπος είναι μέσω του εικονικού hardware για παράδειγμα ο εντοπισμός μιας μητρικής πλακέτας (motherboard) τύπου Microsoft[1] οδηγεί επίσης στο συμπέρασμα ότι εντοπίσθηκε ένα εικονικό σύστημα. Το παρακάτω script χρησιμοποιεί WMI (Windows Management Instrumentation)  ένα σετ από επεκτάσεις για τα μοντέλα των οδηγών (drivers) των windows. Επίσης είναι επεκτάσιμο για τον εντοπισμό εικονικών συστημάτων μέσου του hardware και σε άλλων τύπων λειτουργικών συστημάτων.

Dim Manufacturer
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _& "{impersonationLevel=impersonate}!	\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_BaseBoard")
For Each objItem in colItems Manufacturer = objItem.Manufacturer
Next if Manufacturer = "Microsoft Corporation" 
then wscript.echo "In Microsoft virtual machine" 
else wscript.echo "Not in Microsoft virtual machine" 
end if

Στο [2] εντοπίσθηκε μία ακόμα μέθοδος ανίχνευσης του VMware. Τα προϊόντα της VMware χρησιμοποιούν την πόρτα 0x5658 για να επικοινωνεί ο τοπικός υπολογιστής με τα εικονικά συστήματα. Το παρακάτω script ακόμα και αν απενεργοποιηθεί η λειτουργία που επιστρέφει την έκδοση του VMware μας επιστρέφει αν το σύστημα που βρισκόμαστε είναι προϊόν της VMware ή όχι,

mov eax, 564d5868h ;	'VMXh'
mov ecx, 0ah ;
get VMware version 
mov dx, 5658h ;		‘VX' 
in eax, dx ;
cmp ebx, 564d5868h ;	'VMXh' 
je detected

Μία άλλη μέθοδος ανίχνευσης του VMware είναι η μέθοδος “RedPill” κατά την οποία ελέγχεται η τιμή στην δομή δεδομένων Interrupt Descriptor Table (IDT) Στα εικονικά συστήματα VM το IDT βρίσκετε στις διευθύνσεις 0xffXXXXXX ενώ κανονικά βρίσκεται στις διευθύνσει μνήμης 0x80ffffff (για Windows) και 0xc0ffffff (για Linux). Το παρακάτω script μας επιστρέφει την τιμή της δομή δεδομένων IDT.

int swallow_redpill () 
{ 
unsigned char m[2+4], 
rpill[] = "\x0f\x01\x0d\x00\x00\x00\x00\xc3"; 
((unsigned*)&rpill[3]) = (unsigned)m; ((void(*)())&rpill)(); 
return (m[5]>0xd0) ? 1 : 0;
}

Μία όμοια μέθοδος η οποία μπορεί να προσδιορίσει αν το εικονικό σύστημα είναι προϊόν της VMware είναι η μέθοδος "Scooby Doo" [3]

 \* Μέθοδος "Scooby Doo" *\
include <stdio.h>
int main(int argc, char **argv)
{
unsigned char mem[4] = {0,0,0,0};
__asm str mem;
if ( (mem[0]==0x00) && (mem[1]==0x40))
printf("INSIDE MATRIX!!\n");
else
printf("OUTSIDE MATRIX!!\n");
return 0;
}

Απειλές 
Εκτός από της συνηθισμένες απειλές που απειλούν τοπικά και φιλοξενούμενα λειτουργικά συστήματα υπάρχουν και οι ειδικευμένες απειλές των εικονικών λειτουργικών συστημάτων κατά τις οποίες μπορεί να γίνει κατάχρηση των φυσικών πόρων με αποτέλεσμα να οδηγήσει το σύστημα σε τερματισμό και συνεπώς σε άρνηση εξυπηρέτησης για όλα τα εικονικά συστήματα που φιλοξενεί. (Δεν ισχύει για την περίπτωση που το σύστημα ενσωματώνει την υπηρεσία VMotion και λειτουργεί σε παραπάνω από έναν cluster). Επίσης η απειλή μέσω κάποιας ευπάθειας του προϊόντος μπορεί να διαφύγει εκτός του περιβάλλοντος της εικονικοποίησης.

To Δεκέμβριο του 2005 εντοπίσθηκε η πρώτη κρίσιμη ευπάθεια η CVE-2005-4459[4][7] (score 10) στο VMware, η οποία επέτρεπε σε έναν απομακρυσμένο επιτιθέμενο να δραπετεύσει από το εικονικό περιβάλλον. Πιο συγκεκριμένα  στα προϊόντα της VMware υπάρχει  μία υπηρεσία η Network Address Translation (ΝΑΤ) "Vmnat.exe" στα guest VMs για να τους παρέχει πρόσβαση στα δίκτυα.  Η υπηρεσία αυτή δεν επικύρωνε επακριβώς της εντολές EPRT και PORT, με αποτέλεσμα ειδικά φτιαγμένες τέτοιες εντολές μπορούσαν να μπερδέψουν τον buffer και να υπερχειλίσει. Για να γίνει exploit αυτή η ευπάθεια, έπρεπε να τρέξει ο κώδικας του επιτιθέμενου στο εικονικό σύστημα. Ο επιτιθέμενος μπορούσε να περάσει το σύνορο της εικονικοποίησης και να τρέξει κάποιον ανεπιθύμητο κώδικα στο τοπικό σύστημα.

Οι ευπάθειες στα προϊόντα της VMware που έχουν εντοπισθεί μέχρι σήμερα. 
(The ultimate security vulnerability database - http://www.cvedetails.com)

Οι προηγούμενες ευπάθειες ταξινομημένες κατα απειλή. 

Οι προηγούμενες ευπάθειες ταξινομημένες κατα χρονολογία.

Αναφορές 
1.      Armstrong B., "Detecting Microsoft virtual machines", 2005.
 
2.	Kato K., “Vmware backdoor I/Ο port”, 2006.

3.	Klein T., ”scooby doo - VMware Fingerprint Suite”, 2003.

4.	National Vulnerability Database - http://nvd.nist.gov/home.cfm  τελευταία επίσκεψη 7/11/2011.

5.	Quist D., Smith V., "Detecting the Presence of Virtual Machines Using the Local Data Table", 2006.

6.	Rutkowska J.. “Red Pill: Detect VMM using (almost) One CPU Instruction”, November 2004.

7.	The ultimate security vulnerability database - http://www.cvedetails.com, τελευταία επίσκεψη 23/5/2011.

8.	https://web.archive.org/web/20120307201127/http://www.vmware.com/files/pdf/vi35_security_hardening_wp.pdf, τελευταία επίσκεψη 7/11/2011.

Βιβλιογραφία 

Ferrie P., “Attacks on Virtual Machine Emulators”, In Proceedings of the Association of Anti-Virus sia Researchers Conference, 2007.

Omella A.A., "Methods for Virtual Machine Detection", June 2006.

Ασφάλεια υπολογιστών