Files
Thesis/Chapters/6.Experimentation.tex

889 lines
41 KiB
TeX
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
\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 \textbf{Alpine-secdb}
\item \textbf{Red Hat Security Advisories}
\item \textbf{Debian Security Bug Tracker}
\item \textbf{Ubuntu CVE Tracker}
\item \textbf{Microsoft CVRF}
\end{itemize}
\item \textbf{Πηγές με PoC (Proof of Concept) εκμετάλλευσης ευπαθειών}
\begin{itemize}
\item \textbf{Exploit Database}
\item \textbf{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}
Στο Σχήμα \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
Στο Σχήμα \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.
Στο Σχήμα \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, καθώς και άλλα πλαίσια
και επιστρέφει στον χρήστη μια αναφορά με τα ευρήματά του. Παρομοίως με το
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}
Οι εντολές που χρησιμοποιήθηκαν για την δημιουργία τους, έχουν την παρακάτω
μορφή διότι έχει εισαχθεί το εκτελέσιμο αρχείο secdep.py στο PATH του
συστήματος και έχει δηλωθεί ως alias του το secdep. Στην περίπτωση που αυτά τα
βήματα δεν έχουν ληφθεί θα πρέπει οι εντολές να είναι της μορφής:
\begin{bashcode}
python3 secdep.py <παράμετροι χρήστη>
\end{bashcode}
Χρησιμοποιήθηκε η εξής εντολή για την δημιουργία της εικονικής μηχανής χωρίς
σκλήρυνση λειτουργικού συστήματος:
\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}
Ο χρόνος εκτέλεσης της είναι κατά μέσο όρο 37 δευτερόλεπτα.
Για την δημιουργία εικονικής μηχανής με σκλήρυνση λειτουργικού συστήματος,
εγκατάσταση και σκλήρυνση της μηχανής δοχείων 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}
Η εντολή αυτή έχει χρόνο εκτέλεσης 2 λεπτά και 55 δευτερόλεπτα.
\clearpage
\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 στο οποίο θα δηλωθούν τα διαπιστευτήρια των διακομιστών
που θα αξιολογηθούν.
Αυτό επιτυγχάνεται με τις παρακάτω εντολές:
\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}
\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
Για να μπορέσει ο διακομιστής στον οποίο είναι εγκατεστημένο το 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}
\clearpage
Έπειτα, στο σύστημα του διακομιστή, πρέπει να εγκατασταθούν ορισμένα πακέτα
λογισμικού και να εισαχθεί ο χρήστης 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}
\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 install -y debian-goodies reboot-notifier aptitude lsof
\end{bashcode}
\caption{Εγκατάσταση πακέτων λογισμικού}
\label{lst:install-software-packages}
\vspace*{-10pt}
\end{listing}
Για τον έλεγχο συνδεσιμότητας στους διακομιστές χρειάζεται να εκτελεστεί η
εντολή:
\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}
Μετά το πέρας της διαδικασίας αξιολόγησης, μπορούμε να εκτελέσουμε την παρακάτω
εντολή προκειμένου να παραχθεί η αναφορά σε μορφή json:
\begin{listing}[!ht]
\begin{bashcode}
vuls report -format-json
\end{bashcode}
\caption{Παραγωγή αναφοράς σε μορφή json}
\label{lst:vuls-report-json}
\vspace*{-10pt}
\end{listing}
\clearpage
Για να μπορέσουμε να δούμε τα αποτελέσματα σε μια ευανάγνωστη μορφή, μπορούμε
να κατεβάσουμε στον διακομιστή μας το εργαλείο 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}
\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}
\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}
Τέλος, για να εκκινήσει το VulsRepo, εκτελούμε την εντολή:
\begin{listing}[ht]
\begin{bashcode}
./vulsrepo-server
\end{bashcode}
\caption{Εκκίνηση του VulsRepo}
\label{lst:vulsrepo-start}
\vspace*{-10pt}
\end{listing}
\clearpage
\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}:
\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}:
\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
Γραφικά, αυτό μεταφράζεται ως εξής:
\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
Πιο συγκεκριμένα, παρατηρήθηκε 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
\subsection{Αποτελέσματα αξιολόγησης με το Lynis} \label{lynisResults}
Αφότου ολοκληρώθηκε η εκτέλεση του Lynis στους δύο διακομιστές, ήταν πλέον
δυνατή η σύγκριση του δείκτη ασφαλείας τους με την εξής εντολή:
\begin{listing}[!ht]
\begin{bashcode}
cat lynis.log | grep -i index | sed 's/^ *//g' | cut -d' ' -f4
\end{bashcode}
\caption{Εκτύπωση δείκτη ασφαλείας}
\label{lst:lynis-security-index}
\vspace*{-10pt}
\end{listing}
Το αποτέλεσμα της εντολής \ref{lst:lynis-security-index} διαφέρει προς το
καλύτερο όταν το SecDep χρησιμοποιείται με την παράμετρο σκλήρυνσης όπως
δείχνουν τα αποτελέσματα:
\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}
H αύξηση ασφάλειας του διακομιστή ανέρχεται στο 9.23077\% και απεικονίζεται
γραφικά στο Σχήμα \ref{fig:lynis-security-index}.
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = .8\textwidth]{Figures/Scans/Lynis/Lynis_Hardening_Index.png}
\captionof{figure}{Αύξηση δείκτη ασφαλείας του Lynis}
\label{fig:lynis-security-index}
\end{figure}
\vspace*{-30pt}
\end{center}
\subsection{Αποτελέσματα αξιολόγησης με το LUNAR} \label{lunarResults}
Παρόμοια με το Lynis, εφόσον το LUNAR ολοκληρώσει την αξιολόγηση του διακομιστή
παράγεται μια αναφορά. Στο τελικό μέρος της αναφοράς παρουσιάζονται, ο αριθμός
των ελέγχων που πραγματοποιήθηκαν, των θετικών αποτελεσμάτων και των
προειδοποιήσεων για σημεία που ενδέχεται να χρήζουν βελτίωσης.
Προκειμένου να εξάγουμε μια βαθμολογία, θα λάβουμε υπόψιν τον αριθμό των
προειδοποιήσεων, τον οποίο θα αποκτήσουμε με την εκτέλεση της παρακάτω εντολής:
\begin{listing}[!ht]
\begin{bashcode}
cat lunar.log | grep -i "warnings:" | 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}
Από τον Πίνακα \ref{table:lunar-warnings-table} διαπιστώνεται πως έχουμε
2.25564\% αύξηση της ασφάλειας, το οποίο απεικονίζεται και ως εξής:
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = .7\textwidth]{Figures/Scans/Lunar/lunar_warnings.png}
\captionof{figure}{Συνολικές προειδοποιήσεις του Lunar}
\label{fig:lunar-warnings}
\end{figure}
\vspace*{-30pt}
\end{center}
\section{Συμπεράσματα αποτελεσμάτων αξιολόγησης} \label{evaluationResultsConclusion}
Από τα αποτελέσματα των τριών εργαλείων αξιολόγησης, προκύπτει ότι μετά την
εφαρμογή της παραμέτρου σκλήρυνσης, ένας διακομιστής μπορεί να ασφαλιστεί σε
ικανοποιητικό βαθμό. Η συγκεκριμένη παράμετρος σκληραίνει τον διακομιστή και με
μεθόδους που δεν είναι μετρήσιμες, όπως η δημιουργία εκτελέσιμων αρχείων και η
εφαρμογή περιοδικής τους εκτέλεσης με στόχους την ενημέρωση των πακέτων
λογισμικού και το κλείσιμο θυρών που δεν χρησιμοποιούνται αντίστοιχα.
Επιπρόσθετα, η σκλήρυνση της μηχανής δοχείων Docker δεν απεικονίζεται σε κανένα
από τα παραπάνω γραφήματα. Αυτό συμβαίνει διότι δεν υπάρχει εργαλείο που να
μπορεί να αξιολογήσει την ασφάλεια του Docker όταν αυτό χρησιμοποιείται χωρίς
διαχειριστικά δικαιώματα. Ωστόσο, η σκλήρυνσή του έχει πετύχει διότι η απαλλαγή
από τον περιορισμό των διαχειριστικών δικαιωμάτων έχει ως αποτέλεσμα την μείωση
της επιφάνειας επίθεσης σε περίπτωση παραβίασής του, ενώ η αντικατάσταση του
runC με το runsc μειώνει την πιθανότητα παραβίασης. Για την ενίσχυση της
ασφάλειας του Docker, εκτελούνται και βήματα όπως η ρύθμιση της παραμέτρου του
δαίμονα \textquote{no-new-privileges} που αποτρέπει τα δοχεία από το να
λαμβάνουν επιπρόσθετα δικαιώματα και η παράμετρος \textquote{selinux-enabled}
εάν υποστηρίζεται από την διανομή. Τέλος, το SecDep ασφαλίζει το Docker
επιπρόσθετα με έμμεσο τρόπο, εκτελώντας την υπηρεσία watchtower
\footfullcite{watchtower}, η οποία είναι υπεύθυνη για την αυτόματη ενημέρωση
των εικόνων δοχείων του συστήματος.
Επομένως, το συμπέρασμα που προκύπτει είναι πως η χρήση του SecDep μπορεί να
αυξήσει την ασφάλεια ενός συστήματος. Ωστόσο, ενώ τα εργαλεία αξιολόγησης
παρουσιάζουν ένα ποσοστό αύξησης της ασφάλειας, η πραγματική αύξηση είναι
μεγαλύτερη διότι πολλές από τις αλλαγές που πραγματοποιούνται δεν
αντικατοπτρίζονται στα αποτελέσματα των αποτιμήσεων.