\chapter{Εγκατάσταση \& Επίδειξη του εργαλείου SecDep} \label{installationANDShowcase} \noindent Στην παρούσα ενότητα θα παρουσιαστεί η διαδικασία εγκατάστασης του εργαλείου SecDep, καθώς και η ρύθμισή του για την χρήση των υποδομών νέφους της Amazon. Μετά την ολοκλήρωση των παραπάνω διαδικασιών θα πραγματοποιηθεί επίδειξη της λειτουργίας του με βάση ορισμένα σενάρια χρήσης. \section{Εγκατάσταση του πηγαίου κώδικα του SecDep} Για την εκτέλεση του SecDep είναι απαραίτητη προϋπόθεση να υπάρχει εγκατεστημένη η python με έκδοση μεγαλύτερη ή ίση της 3.7. Για την εγκατάσταση του πηγαίου κώδικα του SecDep απαιτείται η χρήση του προγράμματος git ή η πρόσβαση σε έναν φυλλομετρητή. Στην περίπτωση που ο χρήστης δεν έχει εγκατεστημένο το git, πρέπει να μεταβεί στην ιστοσελίδα του αποθετηρίου \footfullcite{secdep} του κώδικα και να επιλέξει είτε την επιλογή αποθήκευσης ως αρχείο zip, είτε ως tar.gz όπως απεικονίζεται παρακάτω. Έπειτα, το εκφορτωμένο συμπιεσμένο αρχείο πρέπει να αποσυμπιεστεί με το κατάλληλο για τον τύπο αρχείου πρόγραμμα. \begin{center} \begin{figure}[!ht] \centering \includegraphics[width = .7\textwidth]{Figures/Installation/secdep_install_without_git.png} \captionof{figure}{Αποθήκευση του πηγαίου κώδικα του SecDep ως αρχείο} \label{fig:secdep_install_without_git} \end{figure} \vspace*{-30pt} \end{center} \clearpage \noindent Η πιο εύκολη μέθοδος για την εγκατάσταση του SecDep είναι η χρήση του git η οποία απαιτεί μονάχα την εκτέλεση της παρακάτω εντολής. \begin{listing}[!ht] \begin{bashcode} git clone https://git.konsthol.eu/konsthol/SecDep.git \end{bashcode} \caption{Εγκατάσταση του SecDep με την χρήση του git} \label{lst:secdep_install_with_git} \vspace*{-10pt} \end{listing} \subsection{Εγκατάσταση των απαιτούμενων εξαρτήσεων} Μετά την ολοκλήρωση της εγκατάστασης του πηγαίου κώδικα του SecDep, αφού ο χρήστης μεταβεί στον φάκελο με τα περιεχόμενα (δηλ. του ριζικού φακέλου του έργου λογισμικού που εκφορτώθηκε) που απεικονίζονται στο Σχήμα \ref{fig:secdep_install_without_git}, επιβάλλεται να γίνει χρήση του προγράμματος pip \footfullcite{pip} για την εγκατάσταση των βιβλιοθηκών που απαιτούνται για την λειτουργία του εργαλείου. Αυτό επιτυγχάνεται με την εκτέλεση της παρακάτω εντολής. \begin{listing}[!ht] \begin{bashcode} pip install -r requirements.txt \end{bashcode} \caption{Εγκατάσταση των απαιτούμενων βιβλιοθηκών για την λειτουργία του SecDep} \label{lst:secdep_install_requirements} \vspace*{-10pt} \end{listing} \noindent Στην περίπτωση που η παραπάνω εντολή αποτύχει λόγω πρόσφατων τροποποιήσεων στις τελευταίες εκδόσεις του pip, η εντολή πρέπει να μετατραπεί στην παρακάτω. \begin{listing}[!ht] \begin{bashcode} pip install -r requirements.txt --break-system-packages \end{bashcode} \caption{Εξαναγκασμένη μορφή της εντολής εγκατάστασης εξαρτήσεων του SecDep} \label{lst:focre_secdep_install_requirements} \vspace*{-10pt} \end{listing} \section{Ρύθμιση του SecDep} Αφού έχει ολοκληρωθεί η εγκατάσταση των απαιτούμενων εξαρτήσεων, ο χρήστης πρέπει να δώσει στο εργαλείο τα απαραίτητα διαπιστευτήρια για την χρήση των υποδομών νέφους της επιλογής του. Ενώ υποστηρίζονται και οι τρεις μεγαλύτεροι πάροχοι υπηρεσιών IaaS, επιλέχθηκε για την παρούσα ενότητα η κάλυψη της χρήσης των υπηρεσιών της Amazon έναντι της Azure και της GCE, λόγω της ευκολότερης και απλούστερης διαδικασίας αυθεντικοποίησης που παρέχει. Συγκεκριμένα, απαιτεί την συμπλήρωση μονάχα δύο πεδίων. Αυτά στην περίπτωση του εργαλείου μας είναι, τα \textquote{SECDEP\_AWS\_ACCESS\_KEY} και \textquote{SECDEP\_AWS\_SECRET\_KEY}. \subsection{Δημιουργία κλειδιού πρόσβασης με την AWS} Για την απόκτηση των παραπάνω διαπιστευτηρίων, ο χρήστης πρέπει να επισκεφθεί την ιστοσελίδα διαχείρισης του λογαριασμού που έχει δημιουργήσει με την AWS και να μεταβεί στην ενότητα IAM (Identity and Access Management) προκειμένου να δημιουργήσει ένα κλειδί πρόσβασης. Αυτό απεικονίζεται ως εξής: \begin{center} \begin{figure}[!ht] \centering \includegraphics[width = \textwidth]{Figures/AWS_setup/go_to_iam.png} \captionof{figure}{Μετάβαση στην ενότητα IAM της AWS} \label{fig:go_to_iam} \end{figure} \vspace*{-30pt} \end{center} \clearpage \noindent Έπειτα, πρέπει να εισέλθει στην ενότητα \textquote{Manage Access Keys} και να δημιουργήσει ένα νέο κλειδί πρόσβασης όπως φαίνεται παρακάτω: \begin{center} \begin{figure}[!ht] \centering \includegraphics[width = \textwidth]{Figures/AWS_setup/create_access_key.png} \captionof{figure}{Δημιουργία νέου κλειδιού πρόσβασης} \label{fig:create_access_key} \end{figure} \vspace*{-30pt} \end{center} \noindent Η αντιστοιχία των απαιτούμενων πεδίων με το κλειδί πρόσβασης που δημιουργήθηκε είναι η εξής: \begin{savenotes} \selectfont \begin{table}[!ht] \caption{Αντιστοιχία των πεδίων του SecDep με το κλειδί πρόσβασης της AWS} \renewcommand{\arraystretch}{1.5} \centering \newcolumntype{C}{>{\centering\arraybackslash}m{7cm}} \textgreek{\begin{tabular}{||C|C||} \hline Μεταβλητή του SecDep & Αντιστοιχία \\ [0.5ex] \hline\hline SECDEP\_AWS\_ACCESS\_KEY & Το αναγνωριστικό του κλειδιού \\ \hline SECDEP\_AWS\_SECRET\_KEY & Το περιεχόμενο του κλειδιού \\ \hline \end{tabular}} \label{table:} \renewcommand{\arraystretch}{1} \end{table} \end{savenotes} \subsection{Αντιστοίχιση των πεδίων του SecDep με το κλειδί πρόσβασης της AWS} Μετά το πέρας της δημιουργίας του κλειδιού πρόσβασης, ο χρήστης πρέπει να αρχικοποιήσει τις μεταβλητές του SecDep με τις τιμές που αντιστοιχούν στην κάθε μια. Υπάρχουν πολλοί τρόποι για την επίτευξη αυτού του σκοπού. Στην προκειμένη περίπτωση που θα γίνει χρήση ενός μονάχα παρόχου, αρκεί η εκτέλεση της παρακάτω εντολής: \begin{listing}[!ht] \begin{bashcode} python3 secdep.py --init aws \end{bashcode} \caption{Αρχικοποίηση των μεταβλητών του SecDep για την χρήση της AWS} \label{lst:secdep_init_aws} \vspace*{-10pt} \end{listing} Έπειτα, θα ζητηθούν από τον χρήστη τα αντίστοιχα διαπιστευτήρια. Οι μεταβλητές αυτές θα αποθηκευτούν στο αρχείο \textquote{.env} που θα δημιουργηθεί στον ριζικό φάκελο του έργου. Εάν το εκτελέσιμο μεταφερθεί κάποτε σε νέο φάκελο, δίχως το αρχείο “.env”, τότε αυτό θα αναδημιουργηθεί στην νέα τοποθεσία. Στην περίπτωση που ο χρήστης μελλοντικά θέλει να αλλάξει τις τιμές των μεταβλητών ή να προσθέσει νέες, μπορεί να το κάνει αλλάζοντας τα περιεχόμενα του αρχείου \textquote{.env} χειροκίνητα με έναν επεξεργαστή κειμένου ή με την εκτέλεση της εντολής: \begin{listing}[!ht] \begin{bashcode} python3 secdep.py --edit \end{bashcode} \caption{Επεξεργασία των μεταβλητών του SecDep} \label{lst:secdep_edit} \vspace*{-10pt} \end{listing} \noindent Η εντολή αυτή θα προτρέψει τον χρήστη να επιλέξει ποια μεταβλητή να αλλάξει και θα αναγράφει την προηγούμενη τιμή της ώστε να γίνεται ευδιάκριτη η αλλαγή. \section{Επίδειξη του SecDep} Ανά πάσα στιγμή, ο χρήστης μπορεί να εκτελέσει την παρακάτω εντολή για να λάβει πληροφορίες σχετικά με τις διαθέσιμες παραμέτρους: \begin{listing}[!ht] \begin{bashcode} python3 secdep.py --help \end{bashcode} \caption{Εκτέλεση της παραμέτρου help του SecDep} \label{lst:secdep_help} \vspace*{-10pt} \end{listing} \subsection{Δημιουργία εικονικής μηχανής} Σχετικά με την δημιουργία εικονικών μηχανών, που είναι και μια από τις βασικές λειτουργίες του SecDep, ο χρήστης μπορεί να εκτελέσει την παρακάτω εντολή για να δημιουργήσει μια εικονική μηχανή στο νέφος της Amazon, η οποία θα έχει με λειτουργικό σύστημα Debian 11 και θα βρίσκεται στην περιοχή eu-north-1. Το μέγεθος που χρησιμοποιείται είναι το t3.micro, το οποίο είναι διαθέσιμο για χρήστες εντός της δωρεάν δοκιμαστικής περιόδου ενός χρόνου. \begin{listing}[!ht] \begin{bashcode} python3 secdep.py --provider aws --create --name test-node --size t3.micro --image ami-08869bacfa1188ec9 \end{bashcode} \caption{Εκτέλεση της παραμέτρου create του SecDep} \label{lst:secdep_create} \vspace*{-10pt} \end{listing} Μετά την δημιουργία της εικονικής μηχανής, επιστρέφεται στον χρήση η διεύθυνση IP της, καθώς και η εντολή που μπορεί να εκτελέσει προκειμένου να συνδεθεί σε αυτήν χρησιμοποιώντας το πρωτόκολλο SSH. Η εντολή αυτή σχηματίζεται δυναμικά από το εργαλείο λαμβάνοντας υπόψιν πολλές παραμέτρους. Αρχικά, σε περίπτωση που η εικονική μηχανή έχει σκληρύνει, η θύρα που θα χρησιμοποιηθεί δεν θα είναι η προκαθορισμένη. Έπειτα, το πλήρες μονοπάτι μέχρι το κλειδί SSH, το οποίο δημιουργήθηκε μαζί με την εικονική μηχανή στο ριζικό φάκελο του έργου, θα αποκτηθεί με βάση την τοποθεσία του εκτελέσιμου. Τέλος, η IP διεύθυνση της εικονικής μηχανής θα είναι αυτή που επιστρέφεται στον χρήστη. Επομένως, μόλις ολοκληρωθεί η δημιουργία της εικονικής μηχανής, ο χρήστης είναι σε θέση να αντιγράψει την εντολή αυτή σε ένα τερματικό και να συνδεθεί στην καινούρια του εικονική μηχανή. Εάν ο χρήστης δεν διαθέτει πρόγραμμα ικανό να συνδεθεί μέσω SSH σε έναν απομακρυσμένο διακομιστή, υποστηρίζεται και η παράμετρος \textquote{--ssh}. Η συγκεκριμένη παράμετρος θα επιστρέψει στον χρήστη μια λίστα με τις διαθέσιμες εικονικές μηχανές του, ώστε να επιλέξει διαδραστικά μια από αυτές για να συνδεθεί. Μπορεί προαιρετικά να συνδυαστεί με την παράμετρο \textquote{--provider} για το φιλτράρισμα της λίστας και με την παράμετρο \textquote{--port} για επιλογή θύρας. Το μειονέκτημα που θα έχει ο χρήστης συνδέοντας με αυτόν τον τρόπο, είναι η αδυναμία του έπειτα να εκτελέσει διαδραστικά προγράμματα τύπου TUI (Text-based User Interface) \cite{tui}, όπως είναι το htop \footfullcite{htop} και το vim \footfullcite{vim}. Μια περίπτωση εκτέλεσής της είναι η εξής: \begin{listing}[!ht] \begin{bashcode} python3 secdep.py --provider aws --ssh \end{bashcode} \caption{Εκτέλεση της παραμέτρου ssh του SecDep} \label{lst:secdep_ssh} \vspace*{-10pt} \end{listing} Σχετικά με την εντολή δημιουργίας εικονικής μηχανής, χωρίς την παράμετρο \textquote{--yes}, θα ζητηθεί από τον χρήστη να επιβεβαιώσει την δημιουργία της εικονικής μηχανής, παρέχοντας πληροφορίες σχετικά με τις επιλογές του. Η συγκεκριμένη εντολή, μπορεί επιπλέον να συνδυαστεί με την παράμετρο \textquote{--deploy}. Με την προσθήκη της παραμέτρου αυτής, θα εκτελεστεί η ίδια διαδικασία αλλά με την διαφορά πως θα πραγματοποιηθεί εκτέλεση και του αρχείου harden στην εικονική μηχανή, το οποίο θα σκληρύνει το λειτουργικό της σύστημα και θα εγκαταστήσει την μηχανή δοχείων Docker, την οποία επίσης θα σκληρύνει. Ένα πλήρες παράδειγμα όπου γίνεται χρήση της παραμέτρου αυτής και εγκαθίστανται στην εικονική μηχανή δύο δοχεία Docker, αποτελεί η εκτέλεση της Εντολής \ref{lst:secdep_harden_docker}. Παράλληλα, το αποτέλεσμα μετά την εκτέλεσή της απεικονίζεται στο Σχήμα \ref{fig:aws_hardened}. \begin{listing}[!ht] \begin{bashcode} python3 secdep.py --provider aws --create --name test-node --size t3.micro --image ami-08869bacfa1188ec9 --yes --deploy node mysql \end{bashcode} \caption{Εκτέλεση της παραμέτρου create του SecDep, με την παράμετρο deploy για σκλήρυνση} \label{lst:secdep_harden_docker} \vspace*{-10pt} \end{listing} \begin{center} \begin{figure}[!ht] \centering \includegraphics[width = \textwidth]{Figures/AWS_hardened/aws-hardened.png} \captionof{figure}{Δημιουργία εικονικής μηχανής με παράμετρο για σκλήρυνση} \label{fig:aws_hardened} \end{figure} \vspace*{-30pt} \end{center} Με μια ακόμα προσθήκη παραμέτρου, συγκεκριμένα της \textquote{--docker\_compose}, θα εκτελεστεί στην εικονική μηχανή και ένα αρχείο docker-compose.yml που θα πρέπει ο χρήστης να έχει μεταφέρει στον ριζικό φάκελο του SecDep. Για οποιαδήποτε απαραίτητη παράμετρο δεν έχει δοθεί, ή έχει δοθεί λανθασμένα, θα προτρέπεται ο χρήστης να την δώσει ξανά έως ότου ολοκληρωθεί η διαδικασία ή ακυρωθεί από τον χρήστη. \subsection{Εύρεση πληροφοριών πόρων} Εάν ο χρήστης δεν γνωρίζει τις διαθέσιμες επιλογές για τις παραμέτρους που εισάγει, υποστηρίζονται ξεχωριστές εντολές, οι οποίες ακολουθούν παρόμοιο μοτίβο μεταξύ τους. Παραδείγματα εντολών που υποστηρίζονται, είναι της μορφής που παρατηρείται στην Εντολή \ref{lst:secdep-listimages}. Η οθόνη επιλογής πόρου που εμφανίζεται στoν χρήστη μετά την εκτέλεση αυτού του είδους εντολών, απεικονίζεται στο Σχήμα \ref{fig:secdep_choose}. \begin{listing}[!ht] \begin{bashcode} python3 secdep.py --provider aws --listimages --print \end{bashcode} \caption{Εκτέλεση της παραμέτρου listimages του SecDep} \label{lst:secdep-listimages} \vspace*{-10pt} \end{listing} \begin{center} \begin{figure}[!ht] \centering \includegraphics[width = \textwidth]{Figures/Usage/secdepChooseImage.png} \captionof{figure}{Οθόνη επιλογής πόρου} \label{fig:secdep_choose} \end{figure} \vspace*{-30pt} \end{center} Το αποτέλεσμα της Εντολής \ref{lst:secdep-listimages}, είναι να εμφανιστεί μια λίστα με τις διαθέσιμες εικόνες που μπορεί να χρησιμοποιήσει ο χρήστης για την δημιουργία εικονικών μηχανών. Έπειτα, με την διαδραστική επιλογή μιας από αυτές, θα εμφανιστούν πληροφορίες σχετικά με την εικόνα που επιλέχθηκε, οι οποίες θα είναι της μορφής που απεικονίζεται παρακάτω. \begin{listing}[!ht] \begin{bashcode} \end{bashcode} \vspace*{-10pt} \end{listing} Από την παραπάνω πληροφορία, ο χρήστης θα πρέπει να καταγράψει το αναγνωριστικό (id) της εικόνας. Εάν χρειάζεται πληροφορίες σχετικά με τα διαθέσιμα μεγέθη των εικονικών μηχανών, αυτό επιτυγχάνεται με την εντολή: \begin{listing}[!ht] \begin{bashcode} python3 secdep.py --provider aws --listsizes --print \end{bashcode} \caption{Εκτέλεση της παραμέτρου listsizes του SecDep} \label{lst:secdep_listsizes} \vspace*{-10pt} \end{listing} \noindent Η διαδικασία επιλογής του μεγέθους είναι παρόμοια με την επιλογή της εικόνας, ενώ το αποτέλεσμα είναι της μορφής: \begin{listing}[!ht] \begin{bashcode} \end{bashcode} \vspace*{-10pt} \end{listing} \noindent Από την παραπάνω πληροφορία, το σημαντικό πάλι είναι το αναγνωριστικό (id) του μεγέθους. \subsection{Λίστα εικονικών μηχανών} Μερικές από τις εντολές που δύναται να χρησιμοποιήσει ένας χρήστης συχνά μπορεί να είναι για την εμφάνιση εικονικών μηχανών ή την διαγραφή τους. Η εμφάνιση εικονικών μηχανών επιτυγχάνεται με την εκτέλεση της Εντολής \ref{lst:secdep_list}. Το αποτέλεσμά της μπορεί να απεικονίζεται όπως στο Σχήμα \ref{fig:instance_list_output}. \begin{listing}[!ht] \begin{bashcode} python3 secdep.py --provider aws --awsregion us-east-2 --list \end{bashcode} \caption{Εκτέλεση της παραμέτρου list του SecDep} \label{lst:secdep_list} \vspace*{-10pt} \end{listing} Στο Σχήμα \ref{fig:instance_list_output}, βλέπουμε πως υπήρχε στην περιοχή \textquote{us-east-2} μια εικονική μηχανή, στην οποία είχε δοθεί το όνομα \textquote{test-node}. Για κάθε πάροχο, συνδυάζεται το όνομά του στο όνομα της εικονικής μηχανής που δημιουργείται μέσω αυτού, με σκοπό την ταχύτερη διάκρισή της όταν ο χρήστης ζητάει λίστα με εικονικές μηχανές κατά μήκος πολλών παρόχων. Η συγκεκριμένη είχε ήδη διαγραφεί και για τον λόγο αυτό, η κατάστασή της δηλώνεται ως \textquote{terminated}. Σε αντίθετη περίπτωση, θα βλέπαμε την τρέχουσα κατάστασή της και τις διάφορες πληροφορίες της. Στις πληροφορίες αυτές περιλαμβάνονται, η δημόσια και ιδιωτική διεύθυνση IP της, το μέγεθός της, η διανομή που χρησιμοποιεί, καθώς και λοιπές πληροφορίες σε μορφή JSON, τα περιεχόμενα των οποίων διαφέρουν από πάροχο σε πάροχο. Η παράμετρος \textquote{--awsregion} είναι προαιρετική και χρησιμοποιείται αποκλειστικά για την Amazon. Η παράλειψή της θα είχε ως αποτέλεσμα να γίνει έρευνα σε όλες τις διαθέσιμες περιοχές. Γεγονός που ενδεχομένως να αποτελούσε σπατάλη χρόνου. \begin{center} \begin{figure}[!ht] \centering \includegraphics[width = \textwidth]{Figures/AWS_listing/aws-instances.png} \captionof{figure}{Λίστα με τις εικονικές μηχανές που έχουν δημιουργηθεί} \label{fig:instance_list_output} \end{figure} \vspace*{-30pt} \end{center} \subsection{Διαγραφή εικονικής μηχανής} Με την παρακάτω εντολή, ο χρήστης λαμβάνει μια λίστα με τις διαθέσιμες εικονικές μηχανές του παρόχου Amazon που έχουν δημιουργηθεί στην περιοχή eu-north-1 και επιλέγει μια από αυτές για διαγραφή. Μετά από επιτυχή διαγραφή, λαμβάνει επιβεβαίωση στην οθόνη του. \begin{listing}[!ht] \begin{bashcode} python3 secdep.py --provider aws --action delete --awsregion eu-north-1 \end{bashcode} \caption{Εκτέλεση της παραμέτρου delete του SecDep} \label{lst:secdep_delete} \vspace*{-10pt} \end{listing} Εάν ήθελε να διαγράψει όλες τις εικονικές μηχανές της περιοχής, η τιμή της παραμέτρου \textquote{--action}, από \textquote{delete} θα έπρεπε να αντικατασταθεί σε \textquote{deleteall}. Με παρόμοιο τρόπο υποστηρίζονται και εντολές για εκκίνηση, επανεκκίνηση ή παύση εικονικών μηχανών. \section{Περισσότερες πληροφορίες} Το SecDep, ως ένα ολοκληρωμένο εργαλείο, παρέχει αρκετές λειτουργίες για την δημιουργία και διαχείριση εικονικών μηχανών κατά μήκος πολλών παρόχους νέφους. Τα παραδείγματα εντολών που καλύψαμε στην παρούσα ενότητα, περιορίστηκαν σε έναν μόνο πάροχο νέφους. Ωστόσο, ορισμένες από τις διαθέσιμες εντολές του διαφοροποιούνται για τους υπόλοιπους. Πιο λεπτομερείς οδηγίες χρήσης και εγκατάστασης περιέχονται και στην σελίδα του αποθετηρίου του SecDep \footfullcite{secdep} μέσω του αρχείου \textquote{README.md}. Στην αρχική του σελίδα, εμφανίζονται τα περιεχόμενα του αρχείου οδηγιών. Εκεί, ο χρήστης μπορεί να βρει πληροφορίες σχετικά με την παραμετροποίηση και των υπόλοιπων παρόχων νέφους, χρήσιμες ρυθμίσεις που καθιστούν την εκτέλεση του SecDep πιο εύκολη, καθώς και περισσότερες οθόνες εκτέλεσης.