\chapter{Πειραματική Αποτίμηση Εργαλείου} \label{experimentationANDresults}

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

\section{Εργαλεία Αξιολόγησης} \label{measurementTools}

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

\subsection{Vuls: VULnerability Scanner} \label{vuls}

Το Vuls \footfullcite{vuls} είναι ένα εργαλείο ανοιχτού κώδικα, το οποίο
αναπτύχθηκε από την Future Corp χρησιμοποιώντας την γλώσσα προγραμματισμού Go.
Πρόκειται για ένα εργαλείο αξιολόγησης ασφάλειας, το οποίο είναι σε θέση να
εντοπίσει ευπάθειες σε τοπικούς ή και απομακρυσμένους διακομιστές
χρησιμοποιώντας δεδομένα από πολλές διαφορετικές πηγές. Με βάση την σελίδα του
στο GitHub \footfullcite{vulsGithubPage}, στις πηγές αυτές περιλαμβάνονται:

\clearpage

\begin{itemize}

    \item \textbf{Το NVD (National Vulnerability Database)}

    \item \textbf{Τα αρχεία ορισμού OVAL (Open Vulnerability and Assessment
        Language)} που διατίθενται από τις διανομές Linux

    \item \textbf{Συμβουλευτικές πηγές ασφαλείας}

        \begin{itemize}

            \item Alpine-secdb
            \item Red Hat Security Advisories
            \item Debian Security Bug Tracker
            \item Ubuntu CVE Tracker
            \item Microsoft CVRF

        \end{itemize}

    \item \textbf{Πηγές με PoC (Proof of Concept) εκμετάλλευσης ευπαθειών}

        \begin{itemize}

            \item Exploit Database
            \item Metasploit-Framework modules

        \end{itemize}

    \item \textbf{Η CERT (Computer Emergency Readiness Team)}

    \item \textbf{Η CISA (Cybersecurity \& Infrastructure Security Agency)}

    \item \textbf{Οι Cyber Threat Intelligence(MITRE ATT\&CK and CAPEC)}

    \item \textbf{Βιβλιοθήκες ευπαθειών όπως αυτή της Aqua Security}

\end{itemize}

Ο χρήστης του εργαλείου απαιτείται να έχει εγκατεστημένο το Vuls σε έναν
υπολογιστή και να έχει αποθηκεύσει βάσει των οδηγιών εγκατάστασης, τα δεδομένα
των πηγών που θα χρησιμοποιηθούν. Έπειτα σε ένα αρχείο toml ρυθμίζονται τα
διαπιστευτήρια των διακομιστών που θα αξιολογηθούν διότι η απομακρυσμένη
σύνδεση θα πραγματοποιηθεί με χρήση SSH. Υπάρχει η δυνατότητα δύο επιπέδων
αξιολόγησης. Αυτά είναι τα παρακάτω:

\begin {itemize}

    \item \textbf{Γρήγορη σάρωση}:

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

    \item \textbf{Εκτεταμένη σάρωση}:

        Στο δεύτερο επίπεδο αξιολόγησης, το Vuls χρειάζεται να συνδεθεί ως ένας
        χρήστης ικανός να εκτελέσει εντολές διαχειριστικού επιπέδου. Η σάρωση
        που πραγματοποιείται είναι πιο εκτεταμένη και περιλαμβάνει ελέγχους που
        απαιτούν την ύπαρξη πακέτων λογισμικού στον απομακρυσμένο διακομιστή
        όπως τα lsof, debian-goodies και reboot-notifier.

\end{itemize}

\noindent Στο Σχήμα \ref{fig:vuls-architecture}, όπως αυτό πάρθηκε από την
επίσημη ιστοσελίδα του εργαλείου, απεικονίζεται η αρχιτεκτονική του Vuls κατά
την διαδικασία σάρωσης απομακρυσμένου διακομιστή.

\begin{center}
    \begin{figure}[!ht]
        \centering
        \includegraphics[width = \textwidth]{Figures/VULS/vuls-architecture.png}
        \captionof{figure}{Αρχιτεκτονική του Vuls \cite{vulsArchitecture}}
        \label{fig:vuls-architecture}
    \end{figure}
\vspace*{-30pt}
\end{center}

\clearpage

\noindent Στο Σχήμα \ref{fig:vulsScan}, το οποίο παρομοίως αποκτήθηκε από την
επίσημη σελίδα του, απεικονίζεται η διαδικασία που ακολουθείται κατά την
εκτέλεση της σάρωσης ενός συστήματος.

\begin{center}
    \begin{figure}[!ht]
        \centering
        \includegraphics[width = \textwidth]{Figures/VULS/vuls-scan-flow-fast-root.png}
        \captionof{figure}{Διαδικασία εκτεταμένης σάρωσης του Vuls \cite{vulsDeepScan}}
        \label{fig:vulsScan}
    \end{figure}
\vspace*{-30pt}
\end{center}

\subsection{Lynis - Security auditing and hardening tool, for UNIX-based systems.} \label{lynis}

Το Lynis \footfullcite{lynis} είναι το δεύτερο εργαλείο ανοιχτού κώδικα που
χρησιμοποιήθηκε για την αξιολόγηση της ασφάλειας των εικονικών μηχανών. Σε
αντίθεση με το Vuls, το Lynis εκτελείται αποκλειστικά στον απομακρυσμένο
διακομιστή. Πραγματοποιεί μια εκτενή ανάλυση του συστήματος, εντοπίζοντας
απροσεξίες ή ελλείψεις ρυθμίσεων που μπορεί να αποτελέσουν σημεία εισόδου για
επιτιθέμενους με βάση τις βέλτιστες πρακτικές ασφαλείας. Έπειτα, επιστρέφει
στον χρήστη μια λεπτομερή αναφορά με τα ευρήματά του και προτάσεις για την
επίλυσή τους. Στο τελευταίο κομμάτι της αναφοράς, παρέχεται και μια βαθμολογία
της ασφάλειας του συστήματος, η οποία κυμαίνεται από το 0 έως το 100.
Εκτελείται εύκολα σε κάθε σύστημα Linux διότι πρόκειται για ένα απλό εκτελέσιμο
αρχείο bash.

\noindent Στο Σχήμα \ref{fig:lynisScan} απεικονίζεται ένα κομμάτι της αναφοράς
που επιστρέφει.

\begin{center}
    \begin{figure}[!ht]
        \centering
        \includegraphics[width = \textwidth]{Figures/lynis/lynis-screenshot.png}
        \captionof{figure}{Κομμάτι της αναφοράς του Lynis \cite{lynis}}
        \label{fig:lynisScan}
    \end{figure}
\vspace*{-30pt}
\end{center}

\subsection{LUNAR - Lockdown UNix Auditing and Reporting} \label{lunar}

Το τελευταίο εργαλείο αξιολόγησης που χρησιμοποιήθηκε είναι το LUNAR
\footfullcite{lunar}. Πρόκειται για ένα εκτελέσιμο αρχείο bash, το οποίο όπως
και το Lynis, εκτελείται στον διακομιστή του οποίου την ασφάλεια αξιολογεί. Ο
τρόπος λειτουργίας του είναι προσεγγίσιμος και απλός. Εκτελεί μια σειρά ελέγχων
στο σύστημα χρησιμοποιώντας το κριτήριο αναφοράς CIS (Center for Internet
Security) \footfullcite{CIS}, καθώς και άλλα πλαίσια και επιστρέφει στον χρήστη
μια αναφορά με τα ευρήματά του. Παρομοίως με το Lynis, στο τέλος της αναφοράς
του περιέχεται ο αριθμός των ελέγχων που εκτελέστηκαν, σε συνδυασμό με τον
αριθμό αποτυχιών και επιτυχιών τους.

\section{Προετοιμασία περιβαλλόντων προς αξιολόγηση} \label{environtmentPreparation}

Για την αποτίμηση της ασφάλισης του συστήματος δημιουργήθηκαν δύο εικονικές
μηχανές, χρησιμοποιώντας τον πάροχο νέφους AWS. Από αυτές, μονάχα για την
δεύτερη επιλέχθηκε η επιλογή σκλήρυνσης. Για το λειτουργικό σύστημα τους,
επιλέχθηκε το AMI με αναγνωριστικό κωδικό ami-08869bacfa1188ec9, το οποίο
αντιστοιχεί στην διανομή Debian 11 και στην περιοχή eu-north-1, η οποία
μεταφράζεται ως Europe (Stockholm). Για τα τεχνικά χαρακτηριστικά των εικονικών
μηχανών χρησιμοποιήθηκε το t3.micro με τα προνόμια της δοκιμαστικής περιόδου
ενός χρόνου που παρέχει η Amazon για νέους χρήστες. Το t3.micro υπάγεται στην
σειρά υπολογιστών γενικού σκοπού με τα εξής χαρακτηριστικά, όπως αυτά
αναφέρονται στην επίσημη ιστοσελίδα της Amazon \footfullcite{awst3micro} και
στην σελίδα του Vantage \footfullcite{vantaget3micro}:

\begin{itemize}

    \item \textbf{Τιμή On Demand}: 0.01\$ ανά ώρα (για συστήματα Linux)
    \item \textbf{Μνήμη}: 1 GiB
    \item \textbf{vCPU}: 2
    \item \textbf{Μνήμη ανά vCPU}: 0.5 GiB
    \item \textbf{Επεξεργαστής}: Intel Skylake E5 2686 v5
    \item \textbf{Ταχύτητα ρολογιού}: 3.1 GHz
    \item \textbf{Ταχύτητα δικτύου}: 5 Gbps
    \item \textbf{Αποθηκευτικός χώρος}: 30 GiB (EBS)

\end{itemize}

Οι εντολές που χρησιμοποιήθηκαν για την δημιουργία των εικονικών μηχανών, έχουν
την παρακάτω μορφή (\emph{πχ. δείτε Εντολή} \ref{lst:secdep-aws-creation})
διότι έχει εισαχθεί το εκτελέσιμο αρχείο secdep.py στο PATH του συστήματος και
έχει δηλωθεί ως alias του το secdep. Στην περίπτωση που αυτά τα βήματα δεν
έχουν ληφθεί θα πρέπει οι εντολές να είναι της μορφής:

\begin{bashcode}
python3 secdep.py <παράμετροι χρήστη>
\end{bashcode}

\noindent Χρησιμοποιήθηκε η εξής εντολή για την δημιουργία της πρώτης εικονικής
μηχανής (VM\_1) χωρίς\footnote{\textgreek{Ο χρόνος εκτέλεσης της είναι κατά
μέσο όρο 37 δευτερόλεπτα.}} σκλήρυνση λειτουργικού συστήματος:

\begin{listing}[!ht]
\begin{bashcode}
secdep -P aws -c -n test-node -s t3.micro -i ami-08869bacfa1188ec9 --yes
\end{bashcode}
\caption{SecDep - Δημιουργία εικονικής μηχανής χωρίς σκλήρυνση συστήματος}
\label{lst:secdep-aws-creation}
\vspace*{-10pt}
\end{listing}

Για την δημιουργία εικονικής μηχανής με σκλήρυνση\footnote{\textgreek{Η εντολή
αυτή έχει χρόνο εκτέλεσης 2 λεπτά και 55 δευτερόλεπτα. Επομένως, φαίνεται πως η
σκλήρυνση του συστήματος (δηλ. μιας εικονικής μηχανής) έχει ένα επίβαρο
επίδοσης.}} λειτουργικού συστήματος (VM\_2), εγκατάσταση και σκλήρυνση της
μηχανής δοχείων Docker και εισαγωγής ενός αρχείου docker-compose.yml που
βρίσκεται στον ίδιο φάκελο με το secdep.py, χρησιμοποιήθηκε η εντολή:

\begin{listing}[!ht]
\begin{bashcode}
secdep -P aws -c -n test-node -s t3.micro -i ami-08869bacfa1188ec9 --yes --docker_compose --deploy
\end{bashcode}
\caption{SecDep - Δημιουργία εικονικής μηχανής με σκλήρυνση συστήματος}
\label{lst:secdep-aws-creation-hardened}
\vspace*{-10pt}
\end{listing}

\section{Εγκατάσταση/Χρήση των εργαλείων αξιολόγησης} \label{toolsInstallation}

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

\subsection{Εγκατάσταση και προετοιμασία του Vuls} \label{vulsInstallation}

Για την εγκατάσταση του Vuls, αρκεί σε έναν υπολογιστή της επιλογής μας να
εκτελεστεί η παρακάτω εντολή, η οποία λαμβάνει το αρχείο εντολών εγκατάστασης
και το εκτελεί με το κέλυφος bash:

\begin{listing}[!ht]
\begin{bashcode}
bash <( curl -s \
https://raw.githubusercontent.com\
/vulsio/vulsctl/master/install-host/install.sh )
\end{bashcode}
\caption{Εγκατάσταση του Vuls}
\label{lst:vuls-installation}
\vspace*{-10pt}
\end{listing}

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

\noindent Τα παραπάνω επιτυγχάνονται με τις Εντολές
\ref{lst:create-vuls-data-folder} και \ref{lst:create-vuls-config-file} που
ακολουθούν:

\begin{listing}[!ht]
\begin{bashcode}
mkdir -p /usr/share/vuls-data
\end{bashcode}
\caption{Δημιουργία φακέλου δεδομένων του Vuls}
\label{lst:create-vuls-data-folder}
\vspace*{-10pt}
\end{listing}

Η Εντολή \ref{lst:create-vuls-config-file} θα μπορούσε να παραληφθεί αν ο
χρήστης επιθυμεί να δημιουργήσει το αρχείο ρυθμίσεων του Vuls εξ ολοκλήρου με
χειροκίνητο τρόπο. Μετά την εκτέλεσή της, ο χρήστης θα πρέπει σε κάθε περίπτωση
να συμπληρώσει τις κατάλληλες τιμές στα πεδία που αφορούν τους διακομιστές που
θα αξιολογηθούν. Παρ' όλα αυτά, έχει συμπεριληφθεί για λόγους διευκόλυνσής του.

\begin{listing}[!ht]
\begin{bashcode}
cat <<EOF > /usr/share/vuls-data/config.toml
[cveDict]
type = "sqlite3"
SQLite3Path = "/usr/share/vuls-data/cve.sqlite3"

[ovalDict]
type = "sqlite3"
SQLite3Path = "/usr/share/vuls-data/oval.sqlite3"

[gost]
type = "sqlite3"
SQLite3Path = "/usr/share/vuls-data/gost.sqlite3"

[metasploit]
type = "sqlite3"
SQLite3Path = "/usr/share/vuls-data/go-msfdb.sqlite3"

[servers]

[servers.secdepawsFresh]
host = "<ip του διακομιστή>"
port = "22"
user = "secdep"
keyPath = "<πλήρες μονοπάτι ιδιωτικού κλειδιού SSH>"
scanMode = [ "deep" ]

[servers.secdepawsHardened]
host = "<ip του διακομιστή>"
port = "22100"
user = "secdep"
keyPath = "<πλήρες μονοπάτι ιδιωτικού κλειδιού SSH>"
scanMode = [ "deep" ]
EOF
\end{bashcode}
\caption{Δημιουργία και αρχικοποίηση του αρχείου ρυθμίσεων του Vuls}
\label{lst:create-vuls-config-file}
\vspace*{-10pt}
\end{listing}

\clearpage

\noindent Για να μπορέσει ο διακομιστής στον οποίο είναι εγκατεστημένο το Vuls
να συνδεθεί στους διακομιστές της Amazon, απαιτείται η εκτέλεση δύο εντολών της
μορφής:

\begin{listing}[!ht]
\begin{bashcode}
ssh-keyscan -H -p <θύρα SSH> <ip του διακομιστή> >> ~/.ssh/known_hosts
\end{bashcode}
\caption{Εισαγωγή του διακομιστή της Amazon στο known\_hosts}
\label{lst:insert-host-with-ssh-keyscan}
\vspace*{-10pt}
\end{listing}

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

\begin{listing}[!ht]
\begin{bashcode}
cd /usr/share/vuls-data
\end{bashcode}
\caption{Μεταφορά στον φάκελο δεδομένων του Vuls}
\label{lst:move-to-vuls-data-folder}
\vspace*{-10pt}
\end{listing}

\begin{listing}[!ht]
\begin{bashcode}
gost fetch debian --dbpath /usr/share/vuls-data/gost.sqlite3
\end{bashcode}
\caption{Απόκτηση δεδομένων μέσω της εντολής gost}
\label{lst:gost-fetch}
\vspace*{-10pt}
\end{listing}

\begin{listing}[!ht]
\begin{bashcode}
go-cve-dictionary fetch nvd --dbpath /usr/share/vuls-data/cve.sqlite3
\end{bashcode}
\caption{Απόκτηση δεδομένων μέσω της εντολής go-cve-dictionary}
\label{lst:go-cve-dictionary-fetch}
\vspace*{-10pt}
\end{listing}

\begin{listing}[!ht]
\begin{bashcode}
goval-dictionary fetch debian 11 --dbpath /usr/share/vuls-data/oval.sqlite3
\end{bashcode}
\caption{Απόκτηση δεδομένων μέσω της εντολής goval-dictionary}
\label{lst:goval-dictionary-fetch}
\vspace*{-10pt}
\end{listing}

\begin{listing}[!ht]
\begin{bashcode}
go-msfdb fetch msfdb --dbpath /usr/share/vuls-data/go-msfdb.sqlite3
\end{bashcode}
\caption{Απόκτηση δεδομένων μέσω της εντολής go-msfdb}
\label{lst:go-msfdb-fetch}
\vspace*{-10pt}
\end{listing}

Έπειτα, στο σύστημα του διακομιστή, πρέπει να εγκατασταθούν ορισμένα πακέτα
λογισμικού και να εισαχθεί ο χρήστης secdep στο αρχείο sudoers με το
περιεχόμενο \textquote{secdep ALL=(ALL) NOPASSWD:ALL} ώστε να εκτελεί εντολές
που απαιτούν διαχειριστικά δικαιώματα δίχως την ανάγκη εισαγωγής κωδικού. Αυτά
επιτυγχάνονται με τις παρακάτω εντολές:

\begin{listing}[!ht]
\begin{bashcode}
sudo visudo
\end{bashcode}
\caption{Άνοιγμα αρχείου sudoers}
\label{lst:open-sudoers-file}
\vspace*{-10pt}
\end{listing}

\clearpage

\begin{listing}[!ht]
\begin{bashcode}
sudo apt update
\end{bashcode}
\caption{Ενημέρωση αποθετηρίων λογισμικού}
\label{lst:update-software-repositories}
\vspace*{-10pt}
\end{listing}

\begin{listing}[!ht]
\begin{bashcode}
sudo apt install -y debian-goodies reboot-notifier aptitude lsof
\end{bashcode}
\caption{Εγκατάσταση πακέτων λογισμικού}
\label{lst:install-software-packages}
\vspace*{-10pt}
\end{listing}

\noindent Για τον έλεγχο συνδεσιμότητας στους διακομιστές χρειάζεται να
εκτελεστεί η εντολή:

\begin{listing}[!ht]
\begin{bashcode}
vuls configtest
\end{bashcode}
\caption{Έλεγχος συνδεσιμότητας του Vuls}
\label{lst:vuls-configtest}
\vspace*{-10pt}
\end{listing}

Αφότου έχουν εκτελεστεί όλα τα παραπάνω βήματα και το αποτέλεσμα της εντολής
\ref{lst:vuls-configtest} περιλαμβάνει τα ονόματα των διακομιστών, όπως αυτά
ορίσθηκαν στο αρχείο ρυθμίσεων, ο διακομιστής είναι έτοιμος για αξιολόγηση.
Αυτό επιτυγχάνεται με την εντολή:

\begin{listing}[!ht]
\begin{bashcode}
vuls scan <όνομα διακομιστή>
\end{bashcode}
\caption{Εκκίνηση αξιολόγησης μέσω του Vuls}
\label{lst:vuls-scan}
\vspace*{-10pt}
\end{listing}

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

\begin{listing}[!ht]
\begin{bashcode}
vuls report -format-json
\end{bashcode}
\caption{Παραγωγή αναφοράς σε μορφή json}
\label{lst:vuls-report-json}
\vspace*{-10pt}
\end{listing}

Για να μπορέσουμε να δούμε τα αποτελέσματα σε μια ευανάγνωστη μορφή, μπορούμε
να κατεβάσουμε στον διακομιστή μας το εργαλείο VulsRepo
\footfullcite{vulsrepo}. Θα πρέπει να μεταφερθούμε σε έναν φάκελο της επιλογής
μας και έπειτα να το κατεβάσουμε μέσω της εντολής git και να αρχικοποιήσουμε το
αρχείο ρυθμίσεών του. Αυτά τα βήματα επιτυγχάνονται με τις παρακάτω εντολές:

\begin{listing}[ht]
\begin{bashcode}
cd /opt
\end{bashcode}
\caption{Μεταφορά στον φάκελο εγκατάστασης του VulsRepo}
\label{lst:move-to-vulsrepo-folder}
\vspace*{-10pt}
\end{listing}

\clearpage

\begin{listing}[ht]
\begin{bashcode}
git clone https://github.com/ishiDACo/vulsrepo.git
\end{bashcode}
\caption{Εγκατάσταση του VulsRepo}
\label{lst:install-vulsrepo}
\vspace*{-10pt}
\end{listing}

\begin{listing}[ht]
\begin{bashcode}
cd /opt/vulsrepo/server/
\end{bashcode}
\caption{Μεταφορά στον φάκελο του εκτελέσιμου αρχείου του VulsRepo}
\label{lst:move-to-vulsrepo-server-folder}
\vspace*{-10pt}
\end{listing}

Η Εντολή \ref{lst:vulsrepo-config-file-adjustment} μπορεί να παραληφθεί αν ο
χρήστης αρχικοποίησε το αρχείο χειροκίνητα μετά την Εντολή
\ref{lst:vulsrepo-config-file}. Αλλιώς, θα πρέπει να εκτελεστεί η Εντολή
\ref{lst:vulsrepo-config-file-adjustment} και έπειτα να συμπληρωθούν οι
απαραίτητες τιμές στο αρχείο ρυθμίσεων.

\begin{listing}[ht]
\begin{bashcode}
cp vulsrepo-config.toml.sample vulsrepo-config.toml
\end{bashcode}
\caption{Αρχικοποίηση του αρχείου ρυθμίσεων του VulsRepo}
\label{lst:vulsrepo-config-file}
\vspace*{-10pt}
\end{listing}

\begin{listing}[ht]
\begin{bashcode}
cat <<EOF > /opt/vulsrepo/server/vulsrepo-config.toml
[server]
rootPath = "/opt/vulsrepo"
resultsPath  = "/usr/share/vuls-data/results"
serverPort  = "<θύρα του VulsRepo>"
serverIP = "<ip του διακομιστή του Vuls>"
EOF
\end{bashcode}
\caption{Προσαρμογή του αρχείου ρυθμίσεων του VulsRepo}
\label{lst:vulsrepo-config-file-adjustment}
\vspace*{-10pt}
\end{listing}

\noindent Τέλος, για να εκκινήσει το VulsRepo, εκτελούμε την εντολή:

\begin{listing}[ht]
\begin{bashcode}
./vulsrepo-server
\end{bashcode}
\caption{Εκκίνηση του VulsRepo}
\label{lst:vulsrepo-start}
\vspace*{-10pt}
\end{listing}

\subsection{Εγκατάσταση και προετοιμασία του Lynis} \label{lynisInstallation}

Σε αντίθεση με το Vuls, η εγκατάσταση του Lynis και η λειτουργία του είναι πιο
απλή. Εδώ τα βήματα που πρέπει να ακολουθηθούν είναι η σύνδεση στους
διακομιστές της Amazon μέσω SSH (για την οποία η εντολή είναι έτοιμη μετά την
δημιουργία κάθε διακομιστή), η εγκατάσταση του εργαλείου μέσω git και η
εκτέλεσή του. Αυτά πραγματοποιούνται ως εξής:

\begin{listing}[!ht]
\begin{bashcode}
ssh -p <θύρα του διακομιστή> -i <πλήρες μονοπάτι ιδιωτικού κλειδιού SSH> secdep@<ip του διακομιστή>
\end{bashcode}
\caption{Σύνδεση στο διακομιστή της Amazon}
\label{lst:ssh-to-amazon-server}
\vspace*{-10pt}
\end{listing}

\begin{listing}[!ht]
\begin{bashcode}
sudo su
\end{bashcode}
\caption{Μετάβαση σε χρήστη διαχειριστικών δικαιωμάτων}
\label{lst:switch-to-root-user}
\vspace*{-10pt}
\end{listing}

\begin{listing}[!ht]
\begin{bashcode}
git clone https://github.com/CISOfy/lynis
\end{bashcode}
\caption{Εγκατάσταση του Lynis}
\label{lst:install-lynis}
\vspace*{-10pt}
\end{listing}

\begin{listing}[!ht]
\begin{bashcode}
cd lynis
\end{bashcode}
\caption{Μεταφορά στον φάκελο του Lynis}
\label{lst:move-to-lynis-folder}
\vspace*{-10pt}
\end{listing}

\begin{listing}[!ht]
\begin{bashcode}
./lynis audit system > ~/lynis.log
\end{bashcode}
\caption{Εκκίνηση αξιολόγησης (και αποθήκευσή της) μέσω του Lynis}
\label{lst:lynis-audit}
\vspace*{-10pt}
\end{listing}

\subsection{Εγκατάσταση και προετοιμασία του LUNAR} \label{lunarInstallation}

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

\begin{listing}[!ht]
\begin{bashcode}
git clone https://github.com/lateralblast/lunar
\end{bashcode}
\caption{Εγκατάσταση του LUNAR}
\label{lst:install-lunar}
\vspace*{-10pt}
\end{listing}

\begin{listing}[!ht]
\begin{bashcode}
cd lunar
\end{bashcode}
\caption{Μεταφορά στον φάκελο του LUNAR}
\label{lst:move-to-lunar-folder}
\vspace*{-10pt}
\end{listing}

\begin{listing}[!ht]
\begin{bashcode}
./lunar.sh -a > ~/lunar.log
\end{bashcode}
\caption{Εκκίνηση αξιολόγησης (και αποθήκευσή της) μέσω του LUNAR}
\label{lst:lunar-audit}
\vspace*{-10pt}
\end{listing}

\section{Αποτελέσματα αξιολόγησης} \label{evaluationResults}

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

\subsection{Αποτελέσματα αξιολόγησης με το Vuls} \label{vulsResults}

Μετά την εκτέλεση του Vuls και στους δύο διακομιστές, φαίνεται να υπάρχει μια
μείωση των CVEs από τον μη σκληρυμένο διακομιστή προς τον σκληρυμένο.
Συγκεκριμένα βλέπουμε τα εξής αποτελέσματα:

\begin{itemize}

    \item \textbf{secdepawsFresh} (VM\_1):

        \begin{itemize}

            \item \textbf{Αριθμός CVEs που εντοπίσθηκαν με το OVAL}: \textbf{0}
            \item \textbf{Αριθμός CVEs που εντοπίσθηκαν με το gost}: \textbf{774}
            \item \textbf{Αριθμός CVEs που εντοπίσθηκαν με το CPE}: \textbf{0}
            \item \textbf{Αριθμός PoC}: \textbf{0}
            \item \textbf{Αριθμός εκμεταλλεύσεων}: \textbf{1}

        \end{itemize}

    \item \textbf{secdepawsHardened} (VM\_2):

        \begin{itemize}

            \item \textbf{Αριθμός CVEs που εντοπίσθηκαν με το OVAL}: \textbf{0}
            \item \textbf{Αριθμός CVEs που εντοπίσθηκαν με το gost}: \textbf{568}
            \item \textbf{Αριθμός CVEs που εντοπίσθηκαν με το CPE}: \textbf{0}
            \item \textbf{Αριθμός PoC}: \textbf{0}
            \item \textbf{Αριθμός εκμεταλλεύσεων}: \textbf{1}

        \end{itemize}

\end{itemize}

\clearpage

\noindent Γραφικά, αυτό μεταφράζεται ως εξής:

\begin{center}
    \begin{figure}[!ht]
        \centering
        \includegraphics[width = \textwidth]{Figures/Scans/Vuls/CVEs_Διακομιστών.png}
        \captionof{figure}{CVEs διακομιστών}
        \label{fig:vuls-cves}
    \end{figure}
\vspace*{-30pt}
\end{center}

Από τα παραπάνω μέχρι στιγμής αποτελέσματα, παρατηρούμε ότι από τους δύο
διακομιστές μας, ο διακομιστής secdepawsHardened, σχετικά με τα CVEs που
εντοπίστηκαν, έχει ασφαλιστεί κατά 26.615\%. Επιπροσθέτως, με βάση τα γραφήματα
που παρήχθησαν από το VulsRepo, μπορούμε να διακρίνουμε μια άμεση πτώση των
ευπαθειών με βάση την κατηγορία σοβαρότητάς τους στο Σχήμα
\ref{fig:vuls-cvss-severity-table}.

\begin{center}
    \begin{figure}[!ht]
        \centering
        \includegraphics[width = .8\textwidth]{Figures/Scans/Vuls/count_servername_by_cvss_severity_table_chart.png}
        \captionof{figure}{Πίνακας συνολικών ευπαθειών ανά κατηγορία σοβαρότητας}
        \label{fig:vuls-cvss-severity-table}
    \end{figure}
\vspace*{-30pt}
\end{center}

\begin{center}
    \begin{figure}[!ht]
        \centering
        \includegraphics[width = .8\textwidth]{Figures/Scans/Vuls/count_servername_by_cvss_severity_area_chart.png}
        \captionof{figure}{Γράφημα συνολικών ευπαθειών ανά κατηγορία σοβαρότητας}
        \label{fig:vuls-cvss-severity-area-chart}
    \end{figure}
\vspace*{-30pt}
\end{center}

\clearpage

\noindent Πιο συγκεκριμένα, παρατηρήθηκε 14.5663\% μείωση των ευπαθειών δικτύου
και 13.5793\% των φυσικών ευπαθειών. Αυτό απεικονίζεται ορθότερα στα παρακάτω
σχήματα:

\begin{center}
    \begin{figure}[!ht]
        \centering
        \includegraphics[width = .8\textwidth]{Figures/Scans/Vuls/network_attacks_by_servername.png}
        \captionof{figure}{Ευπάθειες δικτύου}
        \label{fig:vuls-network-vulnerabilities}
    \end{figure}
\vspace*{-30pt}
\end{center}

\begin{center}
    \begin{figure}[!ht]
        \centering
        \includegraphics[width = .8\textwidth]{Figures/Scans/Vuls/network_attacks_by_servername_line_chart.png}
        \captionof{figure}{Μείωση ευπαθειών δικτύου}
        \label{fig:vuls-network-vulnerabilities-drop}
    \end{figure}
\vspace*{-30pt}
\end{center}

\begin{center}
    \begin{figure}[!ht]
        \centering
        \includegraphics[width = .8\textwidth]{Figures/Scans/Vuls/physical_attacks_by_servername.png}
        \captionof{figure}{Φυσικές ευπάθειες}
        \label{fig:vuls-physical-vulnerabilities}
    \end{figure}
\vspace*{-30pt}
\end{center}

\begin{center}
    \begin{figure}[!ht]
        \centering
        \includegraphics[width = .8\textwidth]{Figures/Scans/Vuls/physical_attacks_by_servername_line_chart.png}
        \captionof{figure}{Μείωση φυσικών ευπαθειών}
        \label{fig:vuls-physical-vulnerabilities-drop}
    \end{figure}
\vspace*{-30pt}
\end{center}

\clearpage

Στην περίπτωση που υπάρχουν απορίες σχετικά με την συνολική αύξηση κατά δύο,
των CVEs μικρού και ασήμαντου βαθμού κρισιμότητας αντίστοιχα, η αύξηση αυτή
μπορεί να εξηγηθεί ή και να επιλυθεί. Ο λόγος που τα CVEs ασήμαντου βαθμού
κατόπιν σκλήρυνσης μεταβάλλονται από 7 σε 8, είναι διότι στην σκληρυμένη
εικονική μηχανή (VM\_2) εγκαθίσταται το πακέτο \textquote{uidmap}, το οποίο
αποτελεί εξάρτηση του rootlesskit (για την λειτουργία του Rootless Docker). Το
πακέτο αυτό, σχετίζεται με το πακέτο \textquote{shadow}, το οποίο πάσχει από
μια τρωτότητα ασήμαντου βαθμού που επηρεάζει μονάχα την χρήση της εντολής
\textquote{su}. Επομένως, εάν ο χρήστης χρησιμοποιεί όπως συνίσταται για λόγους
ασφαλείας, το \textquote{sudo}, τότε αυτός δεν επηρεάζεται καθόλου.

Η αύξηση κατά ένα των CVEs μικρού βαθμού κρισιμότητας, οφείλεται στο γεγονός
ότι στην σκληρυμένη εικονική μηχανή (VM\_2) εγκαθίσταται το πακέτο
\textquote{vim}. Ο λόγος εγκατάστασής του είναι για την διευκόλυνση του χρήστη
στην ρύθμιση του συστήματος μέσω απομακρυσμένης σύνδεσης SSH. Το πακέτο αυτό,
πάσχει από μια τρωτότητα υπερχείλισης buffer με βάση το σωρό (Heap-based Buffer
Overflow), για την εκμετάλλευση της οποίας απαιτείται όχι μόνο απομακρυσμένη
πρόσβαση στο σύστημα, αλλά και ύπαρξη διαχειριστικών δικαιωμάτων. Δύο
προαπαιτούμενα για τα οποία μέσω της σκλήρυνσης του συστήματος, έχουμε
προνοήσει να μην δύναται να αποκτηθούν.

Τέλος, οι κριτικές τρωτότητες που παρατηρούνται στον σκληρυμένο διακομιστή
(VM\_2), έχουν μειωθεί από 61 σε 50. Ο λόγος που η μείωση δεν είναι ακόμη
μεγαλύτερη, είναι διότι αυτή σχετίζεται άμεσα με τα επηρεαζόμενα πακέτα.
Πρόκειται για βασικά πακέτα του συστήματος, όπως τα \textquote{qemu-utils} και
\textquote{linux-image-5.10.0-20-cloud-amd64}, για τις ευπάθειες των οποίων δεν
έχει δημοσιευθεί ακόμη επίσημη ενημέρωση ασφαλείας. Επιπρόσθετα, τα πακέτα αυτά
δεν βρίσκονται υπό τον έλεγχο του χρήστη αλλά του παρόχου νέφους Amazon, ο
οποίος είναι υπεύθυνος για την ενημέρωση τους. Συνεπώς, το μόνο που μπορεί να
πράξει ο χρήστης, είναι να περιμένει την επίσημη ενημέρωση ασφαλείας, η οποία
θα εφαρμοστεί αυτόματα, λόγω των ρυθμίσεων του SecDep.

\subsection{Αποτελέσματα αξιολόγησης με το Lynis} \label{lynisResults}

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

\begin{listing}[!ht]
\begin{bashcode}
grep -i "index" lynis.log | sed 's/^ *//g' | cut -d' ' -f4
\end{bashcode}
\caption{Εκτύπωση δείκτη ασφαλείας του Lynis}
\label{lst:lynis-security-index}
\vspace*{-10pt}
\end{listing}

\noindent Το αποτέλεσμα της εντολής \ref{lst:lynis-security-index} διαφέρει
προς το καλύτερο όταν το SecDep χρησιμοποιείται με την παράμετρο σκλήρυνσης,
όπως φαίνεται και στον Πίνακα \ref{table:lynis-security-index-table}:

\begin{savenotes}
\selectfont
\begin{table}[!ht]
\caption{Δείκτης ασφαλείας του Lynis}
\renewcommand{\arraystretch}{1.5}
\centering
\newcolumntype{C}{>{\centering\arraybackslash}m{6cm}}
\textgreek{\begin{tabular}{||C|C||}
\hline

Διακομιστής & Δείκτης Ασφαλείας \\ [0.5ex]

\hline\hline

Προ σκλήρυνσης & 65 \\

\hline

Μετά σκλήρυνσης & 71 \\

\hline
\end{tabular}}
\label{table:lynis-security-index-table}
\renewcommand{\arraystretch}{1}
\end{table}
\end{savenotes}

\noindent H αύξηση ασφάλειας του διακομιστή ανέρχεται στο 9.23077\% και
απεικονίζεται γραφικά στο Σχήμα \ref{fig:lynis-security-index}.

\begin{center}
    \begin{figure}[!ht]
        \centering
        \includegraphics[width = \textwidth]{Figures/Scans/Lynis/Lynis_Hardening_Index.png}
        \captionof{figure}{Αύξηση δείκτη ασφαλείας του Lynis}
        \label{fig:lynis-security-index}
    \end{figure}
\vspace*{-30pt}
\end{center}

Παρ' όλο που υπήρξε αύξηση του δείκτη ασφαλείας, παρήχθησαν ορισμένες προτάσεις
για την περαιτέρω βελτίωσή του. Μερικές από αυτές, όπως η ενημέρωση του Lynis
εάν αυτό αποκτήθηκε μέσω των αποθετηρίων της διανομής, ή ο έλεγχος διεργασιών,
οι οποίες εκτελούνται χρησιμοποιώντας διαγραμμένα αρχεία, δεν έχουν ιδιαίτερη
σημασία. Ιδίως το δεύτερο, εφόσον κατόπιν σκλήρυνσης πραγματοποιείται και
επανεκκίνηση του συστήματος. Άλλες προτάσεις, όπως η κατάτμηση του δίσκου, με
σκοπό τον διαχωρισμό ορισμένων φακέλων από το υπόλοιπο σύστημα, αφορούν κυρίως
συστήματα ή εικονικές μηχανές που βρίσκονται εξ ολοκλήρου υπό τον έλεγχο του
χρήστη, έναντι της περίπτωσης χρήσης υποδομών ενός παρόχου νέφους. Ωστόσο,
υπήρχαν κάποιες χρήσιμες προτάσεις, από τις οποίες οι πιο σημαντικές που
ενδεχομένως να άξιζε να υλοποιηθούν σε μεταγενέστερη έκδοση του SecDep, είναι
οι εξής:

\begin{itemize}

    \item Ρύθμιση ημερομηνίας λήξης λογαριασμών χρηστών
    \item Ρύθμιση ελάχιστης και μέγιστης ηλικίας κωδικών πρόσβασης
    \item Περαιτέρω σκλήρυνση του SSH
    \item Εγκατάσταση και ρύθμιση προγράμματος ελέγχου ακεραιότητας ευαίσθητων αρχείων
    \item Εγκατάσταση προγράμματος σάρωσης κακόβουλου λογισμικού

\end{itemize}

\subsection{Αποτελέσματα αξιολόγησης με το LUNAR} \label{lunarResults}

Παρόμοια με το Lynis, εφόσον το LUNAR ολοκληρώσει την αξιολόγηση του διακομιστή
παράγεται μια αναφορά. Στο τελικό μέρος της αναφοράς παρουσιάζονται, ο αριθμός
των ελέγχων που πραγματοποιήθηκαν, των θετικών αποτελεσμάτων και των
προειδοποιήσεων για σημεία που ενδέχεται να χρήζουν βελτίωσης.

\noindent Προκειμένου να εξάγουμε μια βαθμολογία, θα λάβουμε υπόψιν τον αριθμό
των προειδοποιήσεων, τον οποίο θα αποκτήσουμε με την εκτέλεση της παρακάτω
εντολής:

\begin{listing}[!ht]
\begin{bashcode}
grep -i "warnings:" lunar.log | awk '{print $2}'
\end{bashcode}
\caption{Εκτύπωση συνολικών προειδοποιήσεων του Lunar}
\label{lst:lunar-warnings}
\vspace*{-10pt}
\end{listing}

\begin{savenotes}
\selectfont
\begin{table}[!ht]
\caption{Συνολικές προειδοποιήσεις του Lunar}
\renewcommand{\arraystretch}{1.5}
\centering
\newcolumntype{C}{>{\centering\arraybackslash}m{6cm}}
\textgreek{\begin{tabular}{||C|C||}
\hline

Διακομιστής & Αριθμός Προειδοποιήσεων \\ [0.5ex]

\hline\hline

Προ σκλήρυνσης & 266 \\

\hline

Μετά σκλήρυνσης & 260 \\

\hline
\end{tabular}}
\label{table:lunar-warnings-table}
\renewcommand{\arraystretch}{1}
\end{table}
\end{savenotes}

\noindent Από τον Πίνακα \ref{table:lunar-warnings-table} διαπιστώνεται πως
έχουμε 2.25564\% αύξηση της ασφάλειας, το οποίο απεικονίζεται και ως εξής:

\begin{center}
    \begin{figure}[!ht]
        \centering
        \includegraphics[width = \textwidth]{Figures/Scans/Lunar/lunar_warnings.png}
        \captionof{figure}{Συνολικές προειδοποιήσεις του Lunar}
        \label{fig:lunar-warnings}
    \end{figure}
\vspace*{-30pt}
\end{center}

\clearpage

Στην περίπτωση του LUNAR, η αύξηση της ασφάλειας φαίνεται να είναι μικρότερη.
Αυτό οφείλεται κατά έναν βαθμό και στο γεγονός πως αυτό πραγματοποιεί
υπερβολικά αυστηρούς ελέγχους, οι οποίοι ενδέχεται να μην είναι πάντα
απαραίτητοι. Παρ' όλα αυτά, οι προτάσεις που παράγονται από το LUNAR για
βελτίωση της ασφάλειας παραμένουν χρήσιμες και μπορούν να ληφθούν υπόψιν για
μελλοντικές εκδόσεις του SecDep. Οι πιο αξιοσημείωτες από αυτές είναι:

\begin{itemize}

    \item Περαιτέρω σκλήρυνση του SSH
    \item Εισαγωγή παραπάνω περιορισμών στον πυρήνα
    \item Αυστηρότερες άδειες πρόσβασης σε αρχεία και φακέλους

\end{itemize}

\section{Συμπεράσματα αποτελεσμάτων αξιολόγησης} \label{evaluationResultsConclusion}

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

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

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