\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}, μνήμη, και χωρητικότητα που μπορεί να έχει κάθε δοχείο στην
διάθεση του.
