273 lines
23 KiB
TeX
273 lines
23 KiB
TeX
\chapter{Υπόβαθρο} \label{background}
|
||
|
||
Προκειμένου να κατανοήσουμε πλήρως το πρόβλημα που επιλύει η παρούσα εργασία
|
||
πρέπει να αναλύσουμε μερικές βασικές έννοιες. Σε πρώτη φάση θα δούμε παρακάτω
|
||
τι είναι το υπολογιστικό νέφος, τι μας προσφέρει και ποια μοντέλα παράδοσης
|
||
παρέχονται μέσω αυτού. Έπειτα θα μιλήσουμε για την έννοια της εικονοποίησης και
|
||
τις διάφορες υποκατηγορίες της που χρησιμοποιούνται στις μέρες μας. Έπειτα, θα
|
||
αναλυθούν τα πλεονεκτήματα τους και θα μπορέσουμε να εντοπίσουμε τον λόγο που
|
||
προτιμάται η αρχιτεκτονική δοχείων. Τέλος, θα εμβαθύνουμε στην τεχνολογία
|
||
δοχείων, θα δούμε διάφορες υλοποιήσεις της και θα πραγματοποιήσουμε μια ανάλυση
|
||
της ασφάλειας του \textlatin{Docker}.
|
||
|
||
\section{\textlatin{Cloud Computing Definition}} \label{cloudComputingDefinition}
|
||
|
||
Σύμφωνα με το \cite{mell2011nist} το \textlatin{Cloud Computing} είναι ένα
|
||
μοντέλο που επιτρέπει ανά πάσα στιγμή τη διαδικτυακή πρόσβαση σε μια κοινή
|
||
δεξαμενή ρυθμιζόμενων υπολογιστικών πόρων που μπορούν να παρέχονται και να
|
||
απελευθερώνονται γρήγορα και με ελάχιστη προσπάθεια διαχείρισης ή
|
||
αλληλεπίδρασης με τον πάροχο υπηρεσιών. Στους υπολογιστικούς αυτούς πόρους
|
||
περιλαμβάνονται δίκτυα, διακομιστές, χώρος αποθήκευσης, εφαρμογές και
|
||
υπηρεσίες. Αυτό το μοντέλο νέφους αποτελείται από πέντε βασικά χαρακτηριστικά,
|
||
τρία μοντέλα υπηρεσιών και τέσσερα μοντέλα παράδοσης.
|
||
|
||
\pagebreak
|
||
|
||
\subsection{Χαρακτηριστικά} \label{cloucComputingCharacteristics}
|
||
|
||
Τα πέντε βασικά χαρακτηριστικά του \textlatin{Cloud Computing} είναι τα εξής:
|
||
|
||
\begin{itemize}
|
||
|
||
\item \textbf{Αυτοεξυπηρέτηση κατά παραγγελία}:
|
||
|
||
Ένας καταναλωτής μπορεί να προμηθευτεί υπολογιστικούς πόρους όπως
|
||
αποθηκευτικό χώρο δικτύου και χρόνο χρήσης ισχυρών επεξεργαστών δίχως
|
||
την απαίτηση ανθρώπινης αλληλεπίδρασης με κάθε πάροχο υπηρεσιών.
|
||
|
||
\item \textbf{Ευρεία διαδικτυακή πρόσβαση}:
|
||
|
||
Οι υπηρεσίες που παρέχονται είναι διαθέσιμες μέσω του διαδικτύου και
|
||
είναι προσβάσιμες από οποιαδήποτε συσκευή διαθέτει πρόσβαση σε αυτό
|
||
είτε μέσω γραφικού περιβάλλοντος είτε μέσω ειδικά σχεδιασμένων
|
||
\textlatin{API}.
|
||
|
||
\item \textbf{Οργανωμένη συγκέντρωση πόρων}:
|
||
|
||
Οι υπολογιστικοί πόροι του παρόχου είναι σχεδιασμένοι με τέτοιο τρόπο
|
||
ώστε να μπορούν να εξυπηρετήσουν πολλούς καταναλωτές χρησιμοποιώντας
|
||
ένα \textlatin{multi-tenant} μοντέλο με διαφορετικούς φυσικούς και
|
||
εικονικούς πόρους που εκχωρούνται και ανακατανέμονται ανάλογα με τη
|
||
ζήτηση των καταναλωτών. Το μοντέλο αυτό διακατέχεται από μια αίσθηση
|
||
ανεξαρτησίας θέσης διότι είθισται να μην υπάρχει έλεγχος ή ακριβής
|
||
γνώση της τοποθεσίας τους αλλά δίδεται πολλές φορές η δυνατότητα
|
||
καθορισμού της χώρας ή περιοχής τους εάν το επιθυμεί ο χρήστης.
|
||
Παραδείγματα πόρων που παρέχονται αποτελούν μεταξύ άλλων το εύρος ζώνης
|
||
δικτύου, η διαθέσιμη μνήμη και ο αριθμός επεξεργαστών.
|
||
|
||
\item \textbf{Ταχεία ευελιξία}:
|
||
|
||
Οι δυνατότητες μπορούν να παρέχονται και να απελευθερώνονται ελαστικά
|
||
και σε ορισμένες περιπτώσεις αυτόματα, με σκοπό την οριζόντια ή κάθετη
|
||
κλιμάκωση υπηρεσιών ανάλογα με τη ζήτηση. Από την οπτική γωνία του
|
||
καταναλωτή, οι παρεχόμενες δυνατότητες μοιάζουν απεριόριστες και
|
||
μπορούν να κατανεμηθούν σε οποιαδήποτε ποσότητα και ανά πάσα στιγμή.
|
||
|
||
\item \textbf{Μετρούμενη υπηρεσία}:
|
||
|
||
Τα συστήματα νέφους ελέγχουν και βελτιστοποιούν αυτόματα τη χρήση των
|
||
πόρων αξιοποιώντας δυνατότητες μέτρησης κατάλληλες για τον τύπο της
|
||
υπηρεσίας (π.χ, αποθήκευση, επεξεργασία, εύρος ζώνης και λογαριασμοί
|
||
ενεργών χρηστών). Η χρήση των πόρων μπορεί να παρακολουθείται, να
|
||
ελέγχεται και να αναφέρεται, παρέχοντας διαφάνεια τόσο στον πάροχο όσο
|
||
και στον καταναλωτή της υπηρεσίας που χρησιμοποιείται.
|
||
|
||
\end{itemize}
|
||
|
||
\pagebreak
|
||
|
||
\subsection{Μοντέλα Υπηρεσιών} \label{cloudComputingServiceModels}
|
||
|
||
Τα τρία μοντέλα υπηρεσιών του \textlatin{Cloud Computing} είναι τα παρακάτω:
|
||
|
||
\begin{itemize}
|
||
|
||
\item \textbf{\textlatin{Software as a Service (SaaS)}}:
|
||
|
||
Η δυνατότητα που παρέχεται στον καταναλωτή είναι η χρήση εφαρμογών
|
||
εκτελούμενες σε μια υποδομή νέφους. Οι εφαρμογές αυτές είναι
|
||
προσβάσιμες από διάφορες συσκευές ικανές να συνδεθούν στο διαδίκτυο
|
||
ή μέσω διεπαφής προγράμματος. Δεν προσφέρεται έλεγχος ή δυνατότητα
|
||
διαχείρισης της υποκείμενης υποδομής νέφους ή των δυνατοτήτων της
|
||
υπηρεσίας, με εξαίρεση περιορισμένη χρήση συγκεκριμένων
|
||
ρυθμίσεων διαμόρφωσης της εφαρμογής.
|
||
|
||
\item \textbf{\textlatin{Platform as a Service (PaaS)}}:
|
||
|
||
Η παρεχόμενη δυνατότητα είναι η χρήση ή η ανάπτυξη εφαρμογών σε μια
|
||
υποδομή νέφους. Οι εφαρμογές αυτές μπορεί να δημιουργήθηκαν ή
|
||
αποκτήθηκαν από τον καταναλωτή και έχουν κατασκευαστεί χρησιμοποιώντας
|
||
γλώσσες προγραμματισμού, βιβλιοθήκες, υπηρεσίες και εργαλεία που
|
||
υποστηρίζονται από τον πάροχο. Ο καταναλωτής δεν έχει τον έλεγχο της
|
||
υποκείμενης υποδομής νέφους, αλλά έχει τον έλεγχο των εφαρμογών που
|
||
εκτελούνται σε αυτήν, καθώς και των ρυθμίσεων διαμόρφωσης της εφαρμογής
|
||
και του περιβάλλοντος εκτέλεσης της.
|
||
|
||
\item \textbf{\textlatin{Infrastructure as a Service (IaaS)}}:
|
||
|
||
Η παρεχόμενη δυνατότητα είναι η χρήση επεξεργαστικών, αποθηκευτικών,
|
||
δικτυακών και άλλων υπολογιστικών πόρων όπου ο καταναλωτής μπορεί να
|
||
εκτελέσει και να εγκαταστήσει λογισμικό της επιλογής του,
|
||
συμπεριλαμβανομένων λειτουργικών συστημάτων και εφαρμογών. Ο
|
||
καταναλωτής δεν έχει τον έλεγχο της υποκείμενης υποδομής νέφους, αλλά
|
||
έχει τον έλεγχο των λειτουργικών συστημάτων, του αποθηκευτικού χώρου,
|
||
των εγκατεστημένων εφαρμογών και των ρυθμίσεων διαμόρφωσης των
|
||
εφαρμογών.
|
||
|
||
\end{itemize}
|
||
|
||
\pagebreak
|
||
|
||
\subsection{Μοντέλα Παράδοσης} \label{cloudComputingDeploymentModels}
|
||
|
||
\begin{itemize}
|
||
|
||
\item \textbf{Ιδιωτικό νέφος}:
|
||
|
||
Το νέφος υποδομής είναι αποκλειστικά αφιερωμένο σε έναν μόνο οργανισμό
|
||
αποτελούμενο από πολλαπλούς καταναλωτές (π.χ. επιχειρησιακές μονάδες).
|
||
Ενδεχομένως να ανήκει, να διαχειρίζεται και να λειτουργεί είτε από τον
|
||
οργανισμό, είτε από τρίτον, είτε συνδυασμό των δύο και να μπορεί να
|
||
βρίσκεται εντός ή εκτός του οργανισμού.
|
||
|
||
\item \textbf{Κοινό νέφος}:
|
||
|
||
Είναι διαθέσιμο για μια ευρύτερη κοινότητα καταναλωτών ή οργανισμών με
|
||
κοινές ανησυχίες όπως οι απαιτήσεις ασφαλείας και ζητήματα πολιτικής
|
||
και συμμόρφωσης. Μπορεί να ανήκει, να διαχειρίζεται και να λειτουργεί
|
||
από έναν ή περισσότερους οργανισμούς της κοινότητας, έναν τρίτο ή
|
||
συνδυασμό των δύο και να βρίσκεται εντός ή εκτός του οργανισμού.
|
||
|
||
\item \textbf{Δημόσιο νέφος}:
|
||
|
||
Εδώ, το νέφος υποδομής είναι διαθέσιμο για το γενικό κοινό. Μπορεί να
|
||
ανήκει και να διαχειρίζεται από μια επιχείρηση, έναν ακαδημαϊκό ή
|
||
κυβερνητικό οργανισμό ή έναν συνδυασμό των παραπάνω. Λειτουργεί εντός
|
||
των υποδομών του παρόχου νέφους.
|
||
|
||
\item \textbf{Υβριδικό νέφος}:
|
||
|
||
Είναι συνδυασμός δύο ή περισσότερων νεφών (ιδιωτικού, κοινού ή
|
||
δημόσιου) που διατηρούνται ως ξεχωριστές οντότητες αλλά συνδέονται
|
||
μεταξύ τους με τεχνολογίες που επιτρέπουν τη μεταφορά δεδομένων και
|
||
εφαρμογών.
|
||
|
||
\end{itemize}
|
||
|
||
\pagebreak
|
||
|
||
\section{\textlatin{Virtualization Definition}} \label{virtualizationDefinition}
|
||
|
||
Σύμφωνα με τον ορισμό της \textlatin{Red Hat}
|
||
\cite{redhatVirtualizationDefinition}, η εικονικοποίηση είναι μια τεχνολογία
|
||
που καθιστά δυνατή τη δημιουργία χρήσιμων υπηρεσιών ΤΠ χρησιμοποιώντας πόρους
|
||
στους οποίους παραδοσιακά μπορούσαμε να έχουμε πρόσβαση μονάχα από την
|
||
ιδιοκτησία φυσικών μηχανημάτων. Μας επιτρέπει να αξιοποιήσουμε όλες τις
|
||
δυνατότητες ενός φυσικού μηχανήματος διανέμοντας τις σε πολλούς χρήστες και
|
||
περιβάλλοντα.
|
||
|
||
Ας φανταστούμε πως έχουμε τρεις διακομιστές, στον καθένα από τους οποίους έχει
|
||
ανατεθεί ένας συγκεκριμένος σκοπός. Ένας διακομιστής ηλεκτρονικού ταχυδρομείου,
|
||
ένας διακομιστής ιστού και ένας που εκτελεί εσωτερικές εταιρικές εφαρμογές οι
|
||
οποίες σταμάτησαν να διατηρούνται αλλά είναι ακόμα λειτουργικές. Στο
|
||
συγκεκριμένο παράδειγμα κάθε ένας από τους διακομιστές χρησιμοποιεί το μονάχα
|
||
το 30\% των δυνατοτήτων του.
|
||
|
||
\begin{center}
|
||
\includegraphics[width = .8\textwidth]{Figures/redhat_virtualization_server_usage1.png}
|
||
\captionof{figure}{Χρήση διακομιστών χωρίς εικονικοποίηση}
|
||
\label{fig:virtualizationServerUsage1}
|
||
\end{center}
|
||
|
||
Παραδοσιακά, αυτή η αρχιτεκτονική όπου εκτελούνται μεμονωμένες εργασίες σε
|
||
μεμονωμένους διακομιστές ήταν ευκολότερη και πιο αξιόπιστη αλλά δεν παύει να
|
||
μην είναι η πιο αποδοτική λύση. Με την άφιξη της τεχνολογίας της εικονοποίησης
|
||
όμως ήταν πλέον εφικτό να χωριστεί ένας διακομιστής σε περισσότερα κομμάτια
|
||
έχοντας πλέον δύο εικονικά μηχανήματα με τη χρήση ενός.
|
||
|
||
\begin{center}
|
||
\includegraphics[width = .8\textwidth]{Figures/redhat_virtualization_server_usage2.png}
|
||
\captionof{figure}{Χρήση διακομιστών με εικονικοποίηση}
|
||
\label{fig:virtualizationServerUsage2}
|
||
\end{center}
|
||
|
||
Ο χωρισμός των διακομιστών σε μικρότερους μπορεί να πραγματοποιηθεί
|
||
περισσότερες από μια φορές αυξάνοντας την αξιοποίηση των δυνατοτήτων τους
|
||
παραδείγματος χάριν από 30\% σε 60\% και έπειτα σε 90\% αφήνοντας μας με
|
||
διακομιστές που είτε μπορούν μετά να χρησιμοποιηθούν για νέους σκοπούς είτε να
|
||
αποσυρθούν μειώνοντας έτσι και τα κόστη λειτουργίας και συντήρησης τους.
|
||
|
||
\section{Ιστορική αναδρομή της εικονικοποίησης} \label{virtualizationHistory}
|
||
|
||
Ενώ η τεχνολογία εικονικοποίησης χρονολογείται από τη δεκαετία του 1960, δεν
|
||
υιοθετήθηκε ευρέως μέχρι τις αρχές της δεκαετίας του 2000. Οι τεχνολογίες που
|
||
επέτρεψαν την εικονικοποίηση όπως οι \textlatin{hypervisors} αναπτύχθηκαν πριν
|
||
από δεκαετίες για να δώσουν σε πολλούς χρήστες ταυτόχρονη πρόσβαση σε
|
||
υπολογιστές που επεξεργαζόντουσαν πολλά δεδομένα ταυτόχρονα. Κάτι ιδιαίτερα
|
||
δημοφιλές στον τομέα των επιχειρήσεων για καθήκοντα ρουτίνας που έπρεπε να
|
||
εκτελεστούν χιλιάδες φορές πολύ γρήγορα όπως η μισθοδοσία υπαλλήλων.
|
||
|
||
Ωστόσο, μέσα στις επόμενες δεκαετίες, ήρθαν στο προσκήνιο άλλες λύσεις στο
|
||
πρόβλημα διαμοιρασμού ενός μηχανήματος σε πολλούς χρήστες, μειώνοντας έτσι το
|
||
ενδιαφέρον για την τεχνολογία εικονοποίησης. Μία από αυτές ήταν ο διαμοιρασμός
|
||
χρόνου (\textlatin{time-sharing}) όπου ένας χρήστης μπορούσε να χρησιμοποιεί το
|
||
λειτουργικό σύστημα απομονωμένα από του υπόλοιπους. Κάτι που οδήγησε στη
|
||
δημιουργία λειτουργικών συστημάτων όπως το \textlatin{UNIX} το οποίο με τη
|
||
σειρά του άνοιξε δρόμο για την άφιξη του \textlatin{Linux}. Καθ'' όλη τη
|
||
διάρκεια αυτή, η εικονοποίηση παρέμεινε σε μεγάλο βαθμό μη διαδεδομένη.
|
||
|
||
|
||
|
||
\section{Ασφάλεια στο \textlatin{Cloud Computing} Στις Μέρες Μας} \label{cloudComputingSecurityNowadays}
|
||
|
||
Πλέον όλοι γνωρίζουμε τη σημασία της ασφάλειας.
|
||
|
||
\subsection{\textlatin{Attack Vector Mitigation}} \label{attackVectorMitigation}
|
||
|
||
Με βάση το μοντέλο που περιγράφει το \cite{reshetova2014security} όπως
|
||
αναφέρεται στο \cite{bui2015analysis} όπου έχουμε ένα μηχάνημα στο οποίο
|
||
εκτελούνται διάφορα δοχεία, από τα οποία ένα υποσύνολο έχει τεθεί υπό τον
|
||
έλεγχο ενός κακόβουλου χρήστη. Για να προστατευτούμε από επιθέσεις, όπως άρνηση
|
||
υπηρεσίας και κλιμάκωση δικαιωμάτων πρέπει να πραγματοποιηθεί απομόνωση των
|
||
διεργασιών, αρχείων, της συσκευής, του \textlatin{IPC}, δικτύου και τέλος, των
|
||
πόρων.
|
||
|
||
\pagebreak
|
||
|
||
Αυτά επιτυγχάνονται κατά σειρά με την χρήση \textlatin{namespaces} όπου
|
||
οριοθετείται η ορατότητα των διεργασιών ανάμεσα στα δοχεία και το σύστημα όπως
|
||
επίσης, τα δικαιώματά τους. Χρήση \textlatin{mount namespaces}, με τα οποία οι
|
||
διεργασίες κάθε δοχείου βλέπουν διαφορετικά το αρχείο του συστήματος. Όλες οι
|
||
δράσεις \textlatin{mount}, που γίνονται στο εκάστοτε δοχείο, περιορίζονται σε
|
||
αυτό όπως επίσης, οριοθετούνται τα δικαιώματα των αρχείων του πυρήνα σε μονάχα
|
||
ανάγνωσης και αποτρέπονται περαιτέρω \textlatin{remountings}. Ο περιορισμός
|
||
συσκευών επιτυγχάνεται με το χαρακτηριστικό \textlatin{Device Whitelist
|
||
Controller} των \textlatin{cgroups} που αναφέρεται στο
|
||
\cite{deviceWhitelistController} με την βοήθεια του οποίου περιορίζεται το
|
||
σύνολο τον συσκευών στις οποίες έχει πρόσβαση ένα δοχείο και αποτρέπει αυτό από
|
||
το να δημιουργήσει καινούριες αναπαραστάσεις συσκευών. Επιπροσθέτως επειδή τα
|
||
\textlatin{mount} γίνονται με την χρήση του \textlatin{nodev}, στην περίπτωση
|
||
που μια αναπαράσταση συσκευής είχε δημιουργηθεί σε προηγούμενο χρόνο στο
|
||
στιγμιότυπου που χρησιμοποιήθηκε για να κατασκευαστεί το δοχείο, οι διεργασίες
|
||
του δεν δύνανται να την χρησιμοποιήσουν για να επικοινωνήσουν με τον πυρήνα.
|
||
Επιπλέον επειδή η προεπιλεγμένη συνθήκη είναι να μην δίνονται εκτεταμένα
|
||
προνόμια σε ένα δοχείο, δεν υπάρχει πρόσβαση σε καμία συσκευή παρά μόνο εάν
|
||
γίνει εκτέλεση δοχείου ως χρήστης με ανώτατα δικαιώματα όπου υπάρχει πρόσβαση
|
||
σε όλες. Ο περιορισμός \textlatin{IPC}, δηλαδή της επικοινωνίας των διεργασιών
|
||
μεταξύ τους, επιτυγχάνεται με την χρήση \textlatin{IPC namespaces} που
|
||
καθιστούν δυνατή την δημιουργία ξεχωριστών συνόλων αυτών, οι διεργασίες των
|
||
οποίων επικοινωνούν μόνο μεταξύ τους. Μία από τις σημαντικότερες απομονώσεις
|
||
είναι αυτή του δικτύου. Χωρίς δικτυακή απομόνωση υπάρχει κίνδυνος επιθέσεων
|
||
όπως \textlatin{Man in the middle}, \textlatin{ARP, DNS spoofing} και άλλες.
|
||
Για να απομονωθεί η κίνηση δικτύου που λαμβάνει μέρος σε ένα δοχείο από αυτήν
|
||
των υπολοίπων και του συστήματος πρέπει να γίνει χρήση των \textlatin{network
|
||
namespaces}. Κάθε δοχείο θα έχει δικές του διευθύνσεις \textlatin{IP}, συσκευές
|
||
και ό,τι χρειάζεται, προκειμένου να γίνεται αλληλεπίδραση μεταξύ των δοχείων
|
||
μέσω την διεπαφή δικτύου του καθενός σαν να είναι εξωτερικές οντότητες. Τέλος,
|
||
επιβάλλεται η οριοθέτηση των υπολογιστικών πόρων προκειμένου να αποφευχθεί μια
|
||
επίθεση τύπου άρνησης υπηρεσίας όπου μια διεργασία ή ένα σύνολο αυτών προσπαθεί
|
||
να καταναλώσει όλους τους πόρους του συστήματος. Με την βοήθεια των
|
||
\textlatin{cgroup}, επιτυγχάνεται ο έλεγχος του ποσοστού πόρων όπως
|
||
\textlatin{CPU}, μνήμη, και χωρητικότητα που μπορεί να έχει κάθε δοχείο στην
|
||
διάθεση του.
|