\chapter{Σχετικές Εργασίες} \label{relevantWork}

\noindent Με την πάροδο των χρόνων και τη ραγδαία αύξηση ενδιαφέροντος προς τον
κλάδο της υπολογιστικής νέφους, άρχισε να γίνεται όλο και πιο επιτακτική η
ανάγκη για αυτοματοποιημένο στήσιμο και προστασία των υποδομών των
επιχειρήσεων. Η χρήση τεχνολογιών εικονικοποίησης και η άνοδος υπηρεσιών IaaS,
έχει ελαφρύνει τον φόρτο εργασίας όσον αφορά το στήσιμο των υποδομών αυτών,
αφού πλέον υπάρχουν πολλά εργαλεία στα οποία γίνεται καθορισμός τους. Η
αυτοματοποίηση της ασφάλισής τους όμως είναι ακόμα σε πρώιμο στάδιο. Οι
περισσότερες υπηρεσίες που διατίθενται στους χρήστες κάνουν χρήση τεχνολογιών
εικονικοποίησης έμμεσα από τον πάροχο νέφους που χρησιμοποιούν και τεχνολογίες
δοχείων άμεσα από επιλογή τους λόγω της υπεροχής που παρέχουν στη διαχείρισή
τους. Όλες οι υπηρεσίες όμως είναι εν δυνάμει ευάλωτες σε επιθέσεις εάν δε
ληφθούν τα απαραίτητα μέτρα προστασίας και αφήσουν ανοιχτά σημεία εισόδου στα
συστήματά τους.

Η παρούσα εργασία έχει ως στόχο την ανάπτυξη ενός εργαλείου που επιτυγχάνει την
αυτοματοποίηση τριών τομέων. Την επικοινωνία με τον πάροχο νέφους για την
αίτηση διάθεσης υπολογιστικών πόρων, την ασφάλιση των πόρων αυτών και τέλος την
εγκατάσταση, ασφάλιση και χρήση του Docker για τη διάθεση εφαρμογών που
βρίσκονται στο Docker Hub. Το επίσημο αποθετήριο του Docker. Στην ενότητα αυτή
θα γίνει αναφορά σε εργαλεία που έχουν αναπτυχθεί για έναν ή παραπάνω από
αυτούς τους τρεις τομείς και θα πραγματοποιηθεί σύγκρισή τους ανάλογα με τον
τρόπο λειτουργίας τους και τις δυνατότητες που παρέχουν.

\section{Αυτοματοποίηση δημιουργίας εικονικών μηχανών}

Σε σχέση με τα εργαλεία αυτοματοποίησης δημιουργίας εικονικών μηχανών, τα
κριτήρια που θα ληφθούν υπόψιν για την σύγκριση με το εργαλείο που προτείνει η
διπλωματική εργασία είναι τα εξής:

\begin{itemize}

    \item \textbf{Ευελιξία κατά την χρήση}:

        Το εργαλείο πρέπει να μπορεί να προσαρμόζεται στις ανάγκες του χρήστη
        όταν αυτός χρειάζεται να πραγματοποιήσει ορισμένες παραμετροποιήσεις
        κατά την χρήση του.

\clearpage

    \item \textbf{Ευκολία κατά την χρήση}:

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

    \item \textbf{Υποστήριξη μεγάλων ονομάτων στον κλάδο}:

        Το εργαλείο πρέπει να υποστηρίζει την επικοινωνία με τα νέφη μεγάλων
        εταιρειών στον κλάδο της νεφο-υπολογιστικής, ώστε να είναι εύκολο για
        να έναν χρήστη να παραμείνει στον πάροχο της επιλογής του.

    \item \textbf{Ευκολία στην επέκταση}:

        Το εργαλείο πρέπει να είναι εύκολο στην επέκτασή του, ώστε να μπορεί να
        αυτοματοποιηθεί περισσότερο η διαδικασία δημιουργίας εικονικών μηχανών.

\end{itemize}

\subsection{Εργαλεία δημιουργίας εικονικών μηχανών}

Τα εργαλεία με τα οποία θα γίνει σύγκριση περιγράφονται στην συνέχεια ως εξής:

\begin{itemize}

    \item \textbf{Terraform}:

        Το Terraform είναι ένα δημοφιλές εργαλείο ανοιχτού κώδικα που
        αναπτύχθηκε από την εταιρεία HashiCorp. Αποτελεί ένα εργαλείο, κατά την
        χρήση του οποίου ο χρήστης καθορίζει τα χαρακτηριστικά της υποδομής που
        θέλει να δημιουργήσει σε ένα αρχείο που ακολουθεί συγκεκριμένη σύνταξη.
        Αυτό το εντάσσει στην κατηγορία \textquote{υποδομή ως κώδικας
        (Infrastructure as Code - IaC)} και χρησιμοποιείται για τον καθορισμό
        των υποδομών που θα χρησιμοποιηθούν για την στέγαση εφαρμογών. Το
        Terraform υποστηρίζει πολλούς παρόχους νέφους και επιτρέπει την
        αυτοματοποίηση της διαδικασίας δημιουργίας υποδομών σε αυτούς. Ο τρόπος
        λειτουργίας του είναι αρκετά απλός. Αφού ο χρήστης έχει δημιουργήσει το
        αρχείο που περιγράφει την υποδομή, το εκτελεί για να γίνουν οι
        απαραίτητες ενέργειες. Έπειτα ο χρήστης μπορεί να αποδεσμεύσει τους
        πόρους που δημιουργήθηκαν όταν δεν τους χρειάζεται πλέον.

\clearpage

    \item \textbf{Libcloud CLI} \footfullcite{libcloud-cli}:

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

\end{itemize}

\subsection{Σύγκριση με το SecDep}

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

\begin{itemize}

    \item \textbf{Σύγκριση με Terraform}:

        Χρειάζεται την δημιουργία ενός αρχείου πριν την χρήση του και κάθε
        αλλαγή απαιτεί την τροποποίηση του αρχείου αυτού. Αυτό το καθιστά
        λιγότερο ευέλικτο σε σχέση με άλλα εργαλεία. Είναι σχετικά εύκολο στην
        χρήση όπως τα υπόλοιπα και δύναται να χρησιμοποιήσει τα νέφη όλων των
        μεγάλων παρόχων. Παρ' όλα αυτά δεν αποτελεί εργαλείο που μπορεί να
        επεκταθεί εύκολα καθώς ο τρόπος λειτουργίας του το καθιστά αυτοτελές.

    \item \textbf{Σύγκριση με Libcloud CLI}:

        Το δεύτερο πιο πρόσφατο εργαλείο που κάνει χρήση της βιβλιοθήκης
        libcloud μετά από αυτό που προτείνει η διπλωματική εργασία. Είναι
        αρκετά ευέλικτο και εύκολο στην χρήση, παρ' όλα αυτά πλέον υποστηρίζει
        μονάχα έναν πάροχο νέφους, ο οποίος δεν αποτελεί δημοφιλή επιλογή
        γενικότερα. Θα μπορούσε να επεκταθεί η λειτουργικότητά του αλλά έχει να
        ανανεωθεί από το 2018.

\end{itemize}

Ο χρήστης δύναται κατά την χρήση του SecDep να επιλέξει τις ενέργειες και τα
χαρακτηριστικά που επιθυμεί για την εικονική μηχανή του. Όλες οι παράμετροι
είναι εύκολα κατανοητές και συνδυάζονται μεταξύ τους για να επιτευχθεί το
επιθυμητό αποτέλεσμα. Υποστηρίζει όλους τους δημοφιλείς παρόχους νέφους και
όλες τις καλές πρακτικές ενός εργαλείου γραμμής εντολών όπως ο έλεγχος
σφαλμάτων κατά την εισαγωγή παραμέτρων. Επιπλέον, μπορεί εύκολα να επεκταθεί η
χρήση του, είτε εισάγοντας έτοιμες εντολές σε αρχεία bash είτε προσθέτοντας
νέες ενέργειες στον κώδικά του αφού πρόκειται για ένα αρχείο python.

\section{Αυτοματοποίηση σκλήρυνσης εικονικών μηχανών}

Τα κριτήρια που θα ληφθούν υπόψιν για εργαλεία αυτοματοποίησης σκλήρυνσης
εικονικών μηχανών είναι τα παρακάτω:

\begin{itemize}

    \item \textbf{Υποστήριξη πολλών διανομών}:

        Το εργαλείο πρέπει να υποστηρίζει διάφορες διανομές Linux και να είναι
        αρκετά ευέλικτο ώστε να μπορεί να ξεχωρίσει την διανομή στην οποία
        εκτελείται.

    \item \textbf{Ευκολία κατά την χρήση}:

        Το εργαλείο πρέπει να μπορεί να χρησιμοποιηθεί εύκολα από έναν χρήστη.
        Ιδανικά να αρκεί η εκτέλεσή του σε μια εικονική μηχανή χωρίς την ανάγκη
        εγκατάστασης εξαρτήσεων.

    \item \textbf{Εύρος σκλήρυνσης}:

        Το εργαλείο πρέπει να μπορεί να σκληρύνει την εικονική μηχανή σε
        ικανοποιητικό βαθμό και να μην περιορίζεται σε λίγες μονάχα επιλογές.

\end{itemize}

\subsection{Εργαλεία σκλήρυνσης εικονικών μηχανών}

Τα παρακάτω εργαλεία θα συγκριθούν με το harden. Το δεύτερο εκτελέσιμο αρχείο
του εργαλείου SecDep, το οποίο μετά από επιλογή του χρήστη εκτελείται σε μια
εικονική μηχανή αφότου αυτή δημιουργηθεί.

\begin{itemize}

    \item \textbf{JShielder} \footfullcite{jshielder}:

        Το JShielder είναι ένα εργαλείο ανοιχτού κώδικα που αναπτύχθηκε από τον
        Jason Soto με σκοπό την αυτοματοποίηση σκλήρυνσης λειτουργικών
        συστημάτων Linux. Ο πηγαίος κώδικάς του βρίσκεται στο GitHub και ο
        τρόπος λειτουργίας του είναι η εκτέλεσή του ως χρήστης με διαχειριστικά
        δικαιώματα στο σύστημα.

\clearpage

    \item \textbf{nixarmor} \footfullcite{nixarmor}:

        Ένα εργαλείο ανοιχτού κώδικα που στεγάζεται στο GitHub και αναπτύχθηκε
        από τον Emir Ozer. Περιέχει διαφορετικά εκτελέσιμα αρχεία για την
        σκλήρυνση διάφορων διανομών Linux, τα οποία μπορούν να εκτελεστούν ως
        αυτόνομα προγράμματα από τον χρήστη.

\end{itemize}

\subsection{Σύγκριση με το harden}

Σχετικά με τα δηλωθέντα κριτήρια, το SecDep ικανοποιεί όλους τους παραπάνω
στόχους.

\begin{itemize}

    \item \textbf{Σύγκριση με JShielder}:

        Το JShielder παρέχει ένα ικανοποιητικό εύρος σκλήρυνσης του συστήματος
        και η ευκολία στην χρήση του το καθιστά ένα εργαλείο που μπορεί να
        χρησιμοποιηθεί από έναν χρήστη με μικρή εμπειρία στον κλάδο. Παρ' όλα
        αυτά, δεν υποστηρίζει πολλές διανομές και οι εκδόσεις των διανομών που
        υποστηρίζονται μέσω αυτού είναι αρκετό καιρό ξεπερασμένες. Θα μπορούσε
        να βελτιωθεί με μια ανανέωση του πηγαίου του κώδικα αλλά η ανάπτυξή του
        φαίνεται να έχει σταματήσει το 2019.

    \item \textbf{Σύγκριση με το nixarmor}:

        Σε αντίθεση με το JShielder, το nixarmor για να χρησιμοποιηθεί με τον
        ίδιο τρόπο που χρησιμοποιούνται τα υπόλοιπα εργαλεία θα πρέπει να
        επεκταθεί με την προσθήκη κώδικα που να του επιτρέπει να ξεχωρίζει ποιο
        είναι το κατάλληλο εκτελέσιμο για την κάθε διανομή. Στην αντίθετη
        περίπτωση, πάλι η χρήση του είναι εύκολη διότι ο χρήστης μπορεί να
        επιλέξει και να εκτελέσει χειροκίνητα ένα από τα εκτελέσιμα αρχεία που
        περιέχει. Η σκλήρυνση που παρέχει καλύπτει πολλούς τομείς μιας διανομής
        και μπορεί εύκολα να προστεθούν επιπλέον συναρτήσεις στον κώδικά του.
        Παρ' όλα αυτά, η ανάπτυξή του έχει παύσει από το 2015 και οι
        υποστηριζόμενες διανομές του έχουν περιοριστεί σε μονάχα 4.

\end{itemize}

Συγκριτικά με τα παραπάνω εργαλεία, το harden υποστηρίζει την ικανότητα
αναγνώρισης της διανομής στην οποία εκτελείται και μπορεί δυναμικά να αλλοιώσει
την συμπεριφορά του αναλόγως. Οι υποστηριζόμενες διανομές είναι 6 και οι
λειτουργίες του αν και σύμφωνα με τα αποτελέσματα του Κεφαλαίου
\ref{experimentationANDresults} είναι ικανοποιητικές, θα μπορούσαν εύκολα να
επεκταθούν με την προσθήκη νέων συναρτήσεων. Επιπλέον, αυτό το ένα εκτελέσιμο,
παράγει κατά την εκτέλεσή του δύο ακόμα, τα οποία θα εκτελούνται περιοδικά με
σκοπό την αυτόματη ενημέρωση του συστήματος και το κλείσιμο αχρησιμοποίητων
θυρών.

\section{Αυτοματοποίηση εγκατάστασης/σκλήρυνσης του Docker}

Μια από τις λειτουργίες του εκτελέσιμου harden πέρα από την σκλήρυνση του
συστήματος, είναι και η αυτόματη εγκατάσταση και σκλήρυνση του Docker. Αυτό
επιτυγχάνεται με την εγκατάσταση μιας τροποποιημένης έκδοσής του, η οποία
δύναται να εκτελεστεί από οποιονδήποτε χρήστη του συστήματος, δίχως την ανάγκη
διαχειριστικών δικαιωμάτων. Έπειτα πραγματοποιείται αντικατάσταση του αρχικού
container runtime (runC) με το runsc, από το gVisor. Αυτό, αναπτύχθηκε από την
Google και αποτελεί μια ασφαλέστερη επιλογή από το αρχικό, διότι περιορίζει τις
κλήσεις του συστήματος (system calls) στις άκρως απαραίτητες για την λειτουργία
του Docker. Ο συνδυασμός αυτών των δύο βημάτων έχει ήδη περιορίσει την
επιφάνεια επίθεσης σε περίπτωση απόδρασης από ένα δοχείο και έχει μειώσει την
πιθανότητα κάτι τέτοιο να συμβεί.

Επιπροσθέτως, ρυθμίζεται ο δαίμονας του Docker ώστε να εκτελείται με μεγαλύτερη
ασφάλεια. Αυτό επιτυγχάνεται χρησιμοποιώντας παραμέτρους όπως
\textquote{no-new-privileges} για να μην μπορεί ένα δοχείο να λάβει περισσότερα
δικαιώματα στην συνέχεια της εκτέλεσής του, καθώς και ενεργοποιώντας τις
δυνατότητες του SELinux εάν αυτό υποστηρίζεται από την εκάστοτε υποκείμενη
διανομή του συστήματος. Τέλος, πραγματοποιείται εγκατάσταση της υπηρεσίας σε
μορφή δοχείου ονόματι \textquote{watchtower}, η οποία έχει ως στόχο την
αυτόματη ενημέρωση των δοχείων που εκτελούνται στο σύστημα.

\subsection{Καινοτομία του SecDep}

Δεδομένου ότι πολλές από τις παραπάνω τεχνολογίες είναι σχετικά νέες, δεν
υπάρχουν στην αγορά εργαλεία που να έχουν ως κύριο στόχο την αυτόματη εφαρμογή
τους. Τα περισσότερα επικεντρώνονται στην σκλήρυνση των δοχείων και όχι του
δαίμονα, ενώ όσα επιχειρούν να σκληρύνουν τον δαίμονα έχουν να ανανεωθούν πολύ
προτού έρθουν στο προσκήνιο οι τεχνολογίες που χρησιμοποιεί το harden.
Επομένως, δεν θα υπήρχε δίκαιη σύγκριση με αυτά. Στον συγκεκριμένο τομέα, το
SecDep προσφέρει μια ολοκληρωμένη λύση, η οποία εκτελεί όλα τα παραπάνω βήματα
δίχως την ανάγκη αλληλεπίδρασης ή περαιτέρω ρυθμίσεων από τον χρήστη.
