XEN

Το ΧΕΝ είναι ένα λογισμικό για την παροχή υπηρεσιών εικονικοποίησης. Ο hypervisor του ΧΕΝ δημιουργήθηκε, στα πλαίσια της ερευνητικής εργασίας XENOLINUX, στο Πανεπιστήμιο του Cambridge από τους Keir Fraser και Ian Pratt στα τέλη της δεκαετίας του 1990. Το Πανεπιστήμιο ανέπτυξε τις πρώτες εκδόσεις του λογισμικού ως το 2012. Έκτοτε η κοινότητα του ΧΕΝ συντηρεί και αναπτύσσει το εν λόγω λογισμικό ως ελεύθερο λογισμικό υπό την άδεια GNU General Public License (GPLv2).

Οι οντότητες του ΧΕΝ

Οι βασικές οντότητες που υπάρχουν στο XEN είναι οι ακόλουθες:

Ο hypervisor

O hypervisor του XEN είναι ένα "στρώμα" λογισμικού το οποίο προσφέρει υπηρεσίες εικονικοποίησης, και "τρέχει" απευθείας στο υλικό αντικαθιστώντας το λειτουργικό σύστημα. Λόγω της θέσης που κατέχει ο hypervisor αποτελεί τον εξυπηρετητή όλων των κλήσεων προς το υλικό (CPU, είσοδος/έξοδος). Η χρήση του hypervisor αποτελεί θετικό στοιχείο για την αρχιτεκτονική του ΧΕΝ καθώς υπάρχει ουσιαστικός διαχωρισμός του υλικού από τα φιλοξενούμενα λειτουργικά συστήματα, με άμεση συνέπεια την αύξηση του επιπέδου ασφαλείας του συστήματος (πιθανές επιθέσεις στα φιλοξενούμενα λειτουργικά συστήματα δεν θα επηρεάσουν τον κεντρικό εξυπηρετητή).

Domain0 guest

Το Domain0, που αναφέρεται και ως Dom0 , ενεργοποιείται από τον hypervisor του ΧΕΝ κατά την αρχική εκκίνηση του συστήματος  και μπορεί να τρέξει οποιοδήποτε λειτουργικό σύστημα εκτός από Windows.

DomU Guests

Τα φιλοξενούμενα domain που αναφέρονται και ως DomU , ελέγχονται από το Dom0  και λειτουργούν ξεχωριστά στο σύστημα.  Τα φιλοξενούμενα Domain είτε τρέχουν με ένα ειδικά τροποποιημένο λειτουργικό σύστημα, κάτι το οποίο είναι γνωστό σαν paravirtualization, είτε με ένα μη-τροποποιημένο λειτουργικό σύστημα, το οποίο τρέχει σε ειδικό υλικό που το υποστηρίζει (επεξεργαστές Intel VT, AMD-V), κάτι το οποίο είναι γνωστό σαν εικονική μηχανή υλικού (Hardware Virtual Machine - HVM).
Είναι σημαντικό το γεγονός πως ενώ ο hypervisor έχει άμεση επαφή με το υλικό, η πρόσβαση των φιλοξενούμενων λειτουργικών συστημάτων  στις φυσικές συσκευές, γίνεται μέσω του dom0.

Paravirtualization

Είναι μια τεχνική εικονικοποίησης που επιτρέπει στο λειτουργικό σύστημα να “γνωρίζει” ότι τρέχει μέσω ενός hypervisor αντί να τρέχει απευθείας στο υλικό. Το λειτουργικό σύστημα θα πρέπει να είναι κατάλληλα τροποποιημένο για την ομαλή λειτουργία στην ειδική περίπτωση που δεν τρέχει απευθείας στο υλικό. Αυτό το ειδικά τροποποιημένο λειτουργικό σύστημα ονομάζεται Xenolinux.

Εικονική μηχανή υλικού (hardware virtual machine – HVM)

Ένας όρος που περιγράφει ένα λειτουργικό σύστημα που τρέχει σε ένα εικονικό περιβάλλον χωρίς να έχει μεταβληθεί, και αγνοώντας ότι δεν τρέχει απευθείας στο υλικό. Για να επιτραπεί αυτή η λειτουργία απαιτείται ειδικό υλικό.

Η Αρχιτεκτονική του ΧΕΝ

Η αρχιτεκτονική του ΧΕΝ βασίζεται στην λογική των δακτυλίων προστασίας. Βάσει της αρχιτεκτονικής των δακτυλίων, όσο βγαίνουμε από τον πυρήνα προς τα εξωτερικά στρώματα, τα δικαιώματα μειώνονται.
 
Το πρώτο μέρος της αρχιτεκτονικής του ΧΕΝ είναι ο hypervisor που και  τρέχει απευθείας στο υλικό – δακτύλιος 0. H εκτέλεση του πυρήνα του domain0 που καλείται και ΧΕΝ0 γίνεται στον δακτύλιο-1.  
Όταν χρησιμοποιείται η τεχνική του paravirtualization, το φιλοξενούμενο λειτουργικό σύστημα  το οποίο «τρέχει» στο domain U ονομάζεται ΧΕΝΟLINUX και περιλαμβάνει έναν τροποποιημένο πυρήνα Linux που τρέχει επίσης στον δακτύλιο-1. Όταν το ΧΕΝ παρέχει τη δυνατότητα για full-virtualization (εικονική μηχανή υλικού), o πυρήνας (kernel) του φιλοξενούμενου λειτουργικού συστήματος δεν χρειάζεται τροποποίηση. Σε αυτό βοηθάει η τεχνολογία των επεξεργαστών που υποστηρίζουν την εικονικοποίηση. Αυτοί είναι οι επεξεργαστές Ιntel / VT-x, και AMD / (secure virtual machine - SVM) (Pacifica). 
Η επικοινωνία των φιλοξενούμενων λειτουργικών συστημάτων, με τις φυσικές συσκευές, γίνεται μέσω του domain0. Συγκεκριμένα, όταν υπάρξει κάποια κλήση από φιλοξενούμενο λειτουργικό σύστημα, για πρόσβαση στις φυσικές συσκευές, τότε επικοινωνεί ο front end εικονικός οδηγός συσκευής του φιλοξενούμενου λειτουργικού με το backend εικονικό οδηγό συσκευής  του domain0 (XEN0). Το ΧΕΝ0 έχει πρόσβαση στις φυσικές συσκευές μέσω των native device drivers που είναι οι πραγματικοί οδηγοί (drivers) του υλικού που διαχειρίζεται το κάθε σύστημα.

Απομόνωση και διαμοιρασμός πόρων

Το σημαντικότερο πρόβλημα ασφάλειας του ΧΕΝ προκύπτει από την επικοινωνία των διαφόρων μερών της αρχιτεκτονικής του. Εάν κάποια οντότητα αυτής της αρχιτεκτονικής, τεθεί υπό τον έλεγχο κάποιου κακόβουλου χρήστη, με οποιοδήποτε μέσο, αυτό δεν θα πρέπει να επηρεάσει το υπόλοιπο σύστημα. Επομένως συμπεραίνουμε ότι οι εικονικές μηχανές θα πρέπει να είναι πλήρως απομονωμένες μεταξύ τους.  Αυτό το βασικό πρόβλημα ασφάλειας λύνεται στην έκδοση 2.0.7 του ΧΕΝ, επιτυγχάνοντας ασφαλή απομόνωση μεταξύ των εικονικών μηχανών, έλεγχο προσπέλασης μέσων, ποιότητα υπηρεσίας (QoS) και μετανάστευση των εικονικών μηχανών. Επίσης, το ΧΕΝ δεν έχει κανονική πολιτική ελέγχου πρόσβασης στους πόρους. Για αυτό το λόγο χρησιμοποιείται το sHype της IBM, το οποίο εφαρμόζει υποχρεωτικό έλεγχο πρόσβασης (ΜΑC) και αυστηρή απομόνωση.

Ασφάλεια του bottleneck του ΧΕΝ

Η ασφάλεια του VMM είναι το σημαντικότερο ζήτημα, καθώς πολλοί κώδικες από το ΧΕΝ εισάγονται από το Linux που το επίπεδο ασφάλειας του είναι C2. Η συνολική ασφάλεια της εικονικής μηχανής θα καταρρεύσει αν ο επιτιθέμενος θέσει υπό έλεγχο το VMM ή το Domain 0.

Συγκαλυμμένο κανάλι

Το συγκαλυμμένο κανάλι είναι μια μορφή επίθεσης με την οποία είναι δυνατή η μεταφορά πληροφορίας από ένα σύστημα κρυφά, χωρίς να είναι δυνατός ο εντοπισμός αυτής της διαρρέουσας πληροφορίας. Μπορούν για να παράδειγμα να αξιοποιηθούν για τη μεταφορά πληροφορίας στοιχεία όπως, η χρήση του επεξεργαστή, η εμφάνιση σφαλμάτων, Το συγκαλυμμένο κανάλι είναι ένα δύσκολο πρόβλημα ασφάλειας που μπορεί να συναντηθεί στο ΧΕΝ.

Ασφάλεια στο εικονικό δίκτυο και μη αποποίηση

Η ασφάλεια στο εικονικό δίκτυο του ΧΕΝ βασίζεται κατά κύριο λόγο σε δύο παράγοντες. Οι χρήστες δεν θα πρέπει να μπορούν να λάβουν άλλες ταυτότητες στο δίκτυο (να υποδυθούν κάποιον άλλο χρήστη), και θα πρέπει να υπάρχει προστασία του Dom0 καθώς η κίνηση περνάει μέσα από αυτό προς τα υπόλοιπα domain (domU’s). Το πρώτο θέμα επιλύεται αναθέτοντας μια συγκεκριμένη ip σε κάθε χρήστη και ενεργοποιώντας κανόνες anti – spoofing, ενώ το δεύτερο ζήτημα επιλύεται κάνοντας χρήση κατάλληλων κανόνων των iptables.
Οι κανόνες antispoofing τίθενται στο ανάχωμα ασφαλείας (π.χ iptables), για να διασφαλίσουν πως το σύστημα δεν θα λάβει κακόβουλα πακέτα από το δίκτυο. Κακόβουλα πακέτα μπορούν να θεωρηθούν τα πακέτα που έχουν σαν στόχο την παραπλάνηση του παραλήπτη. 
Πολλά συστήματα δεν στέλνουν την γεφυρωμένη κίνηση (bridged traffic) μέσω της αλυσίδας προώθησης (Forwarding chain), όπως θα αναμενόταν. Το σύστημα RHEL/CentOS 5.1 είναι παράδειγμα αυτού του προβλήματος.

Ασφάλεια των Hypercalls

Οι Hypercalls αποτελούν, για το ΧΕΝ, κλήσεις που γίνονται από κάποιο domain προς τον hypervisor, κατά αντιστοιχία των κλήσεων (syscall) που γίνονται προς το λειτουργικό σύστημα.  Τα διάφορα domain θα εκτελέσουν hypercalls για να ζητήσουν εξουσιοδοτημένες λειτουργίες όπως η ανανέωση των πινάκων των σελίδων. Ένα hypercall μεταφέρει τον έλεγχο σε μια πιο εξουσιοδοτημένη κατάσταση του domain0. To XEN είναι ασφαλέστερο λογισμικό έναντι άλλων λειτουργικών συστημάτων βάσει των hypercalls που εκτελεί. Εκτελούνται μόνο 35 hypercalls έναντι των 324 που εκτελεί ο πυρήνας του Linux 2.6.34. 
Ένα από τα γνωστά σήμεία ευπάθειας των λειτουργικών συστημάτων είναι οι επιθέσεις που αφορούν τις κλήσεις συστήματος. Με τον ίδιο τρόπο είναι δυνατή η εκμετάλλευση  των κλήσεων προς τον hypervisor, μέσω του interface που διαχειρίζεται αυτές τις κλήσεις. Αυτό μπορεί να επιτευχθεί με την εισαγωγή κακόβουλου κώδικα στο domain0.
Ένα τυπικό σενάριο επίθεσης βάσει των hypercalls είναι το εξής :
1.Ο επιτιθέμενος καταφέρνει να θέσει υπό έλεγχο κάποια από τις εφαρμογές ενός φιλοξενούμενου λειτουργικού συστήματος. Αυτό μπορεί να συμβεί ακόμα και αν το φιλοξενούμενο σύστημα ξεκίνησε σε μια ακέραια κατάσταση, καθώς υπάρχει επικοινωνία με τον “εξωτερικό κόσμο”. Επομένως θα μπορούσαν εύκολα να μολυνθούν από κάποιο κακόβουλο λογισμικό.
2.Εάν υπάρχει επιτυχία στο πρώτο βήμα, ο επιτιθέμενος μπορεί να αυξήσει τα δικαιώματα με κοινές μεθόδους επίθεσης των syscalls. 
3.Όταν ο επιτιθέμενος καταφέρει να εισχωρήσει στον πυρήνα του φιλοξενούμενου λειτουργικού (αντίστοιχη διαδικασία με την απόκτηση δικαιωμάτων στον δακτύλιο-1 της χ86 αρχιτεκτονικής προστασίας βάσει των δακτυλίων), μπορεί να εξαπολύσει επίθεση στον hypervisor μέσω των hypercalls.

Επιθέσεις δεδομένων ελέγχου στον Hypervisor

Οι επιθέσεις δεδομένων ελέγχου είναι επιθέσεις οι οποίες γίνονται, από την πλευρά του επιτιθέμενου, με στόχο τον έλεγχο των δεδομένων ελέγχου. Αυτές οι επιθέσεις εντάσσονται σε μια γενικότερη κατηγορία ευπαθειών που έχει σχέση με τη ροή εκτέλεσης και τον κύκλο ζωής. 
Τα δεδομένα ελέγχου τα οποία εισάγονται στον μετρητή (counter) κατά τη διάρκεια εκτέλεσης του προγράμματος, όπως είναι οι διευθύνσεις επιστροφής (return addresses) και οι δείκτες μετακίνησης (jump pointers), αποτελούν δυνητικά σημεία ευπάθειας λόγω της αλλαγής στην ροή ελέγχου του προγράμματος.
Μια μορφή επίθεσης στον ΧΕΝ που θα μπορούσε να ξεκινήσει με τις hypercalls είναι να ληφθεί ο έλεγχος και να μετακινηθεί σε εκτέλεση κακόβουλου κώδικα κατά τη διάρκεια κλήσης συστήματος σε κάποιο φιλοξενούμενο λειτουργικό σύστημα. Αυτός ο κώδικας θα μπορούσε να προκαλέσει ένα διαφορετικό είδος κλήσης συστήματος, εν αντιθέσει με το αρχικό, περνώντας διαφορετικές παραμέτρους στον πυρήνα του ΧΕΝ και θέτοντας υπό έλεγχο πόρους που το τρέχων φιλοξενούμενο λειτουργικό σύστημα δεν είχε στόχο να αιτηθεί. 
Η βασική παράμετρος ασφάλειας στη συγκεκριμένη επίθεση είναι η αυθεντικοποίηση του hypercall. Αν ο κακόβουλος κώδικας είναι σε θέση να δημιουργήσει το ίδιο σύνολο αποτελεσμάτων-διαπιστευτηρίων (αυθεντικοποίησης) που μπορεί να προκαλέσει και ένα αυθεντικό hypercall, τότε είναι προφανές πως ο επιτιθέμενος μπορεί να εξαπολύσει επιθέσεις στο σύστημα. Η αυθεντικοποίηση στα hypercalls εκτελείται με μια κρυπτογραφική μέθοδο στην οποία κάθε hypercall έχει ένα συγκεκριμένο κωδικό (Message authentication code MAC) που προστίθεται σαν παράμετρος για την απόδειξη της εγκυρότητας του hypercall. Εναλλακτικά χρησιμοποιείται και μια τεχνική cashing μέσω ενός πίνακα, που ονομάζεται hypercall access table (HAC). 
Κάθε φορά που γίνεται μια κλήση από ένα φιλοξενούμενο λειτουργικό σύστημα (1) θα κρυπτογραφηθεί χρησιμοποιώντας τον αλγόριθμο AES (2) , όπου για αυτό το σκοπό χρησιμοποιούνται δύο αρχεία rinjdael.c και aes.c  (3). Τα εν λόγω δεδομένα θα πάνε στον πυρήνα του ΧΕΝ όπου και θα αποκρυπτογραφηθούν (προφανώς για να ελεγχθεί ο σκοπός τους) (4). Έπειτα, αυτά τα δεδομένα θα ξανακρυπτογραφηθούν με αντίστοιχο τρόπο (5), ώστε να μεταφερθούν στον πυρήνα του συστήματος που παρέχει την υπηρεσία (host enviroment) (6), για να ελεγθεί η αίτηση και να διανεμηθούν οι αντίστοιχοι πόροι. Η ανωτέρω διαδικασία περιγράφεται στην ακόλουθη εικόνα.

Καταγεγραμμένες ευπάθειες

Γνωστές και καταγεγραμμένες ευπάθειες του ΧΕΝ μπορούν να βρεθούν στον ακόλουθο ιστοχώρο.