\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}, στις πηγές αυτές περιλαμβάνονται: \begin{itemize} \item \textbf{NVD (National Vulnerability Database)} \item \textbf{τα αρχεία ορισμού OVAL (Open Vulnerability and Assessment Language)} που διατίθενται από τις διανομές Linux \clearpage \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 χρησιμοποιήθηκε η εντολή: \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 δευτερόλεπτα. \section{Εγκατάσταση/Χρήση των εργαλείων αξιολόγησης} \label{toolsInstallation} Αφότου έχουν δημιουργηθεί οι εικονικές μηχανές, μπορεί να ξεκινήσει η διαδικασία αξιολόγησης της ασφάλειας τους. Αρχικά, θα παρουσιαστεί η διαδικασία εγκατάστασης του κάθε εργαλείου και έπειτα θα παρουσιαστεί η διαδικασία χρήσης τους. \clearpage \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{Δημιουργία φακέλου} \label{lst:create-vuls-data-folder} \vspace*{-10pt} \end{listing} \begin{listing}[!ht] \begin{bashcode} cat < /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 = "" port = "22" user = "secdep" keyPath = "<πλήρες μονοπάτι ιδιωτικού κλειδιού ssh>" scanMode = [ "deep" ] [servers.secdepawsHardened] host = "" 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> >> ~/.ssh/known_hosts \end{bashcode} \caption{Εισαγωγή του διακομιστή της Amazon στο known\_hosts} \label{lst:insert-host-with-ssh-keyscan} \vspace*{-10pt} \end{listing} Επιπροσθέτως, θα πρέπει να μεταφερθεί στον υπολογιστή που έχει εγκατεστημένο το Vuls, το ιδιωτικό κλειδί του διακομιστή (ένα αρχείο ονόματι secdep), το οποίο δημιουργείται στον ίδιο φάκελο με το εργαλείο SecDep. Για την αρχικοποίηση της βάσης δεδομένων ευπαθειών του 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} ώστε να εκτελεί εντολές που απαιτούν διαχειριστικά δικαιώματα δίχως την ανάγκη εισαγωγής κωδικού. Αυτά επιτυγχάνονται με τις παρακάτω εντολές: \clearpage \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} Για να μπορέσουμε να δούμε τα αποτελέσματα σε μια ευανάγνωστη μορφή, μπορούμε να κατεβάσουμε στον διακομιστή μας το εργαλείο 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 < /opt/vulsrepo/server/vulsrepo-config.toml [server] rootPath = "/opt/vulsrepo" resultsPath = "/usr/share/vuls-data/results" serverPort = "<θύρα του VulsRepo>" serverIP = "" EOF \end{bashcode} \caption{Προσαρμογή του αρχείου ρυθμίσεων του VulsRepo} \label{lst:vulsrepo-config-file-adjustment} \vspace*{-10pt} \end{listing} \clearpage Τέλος, για να εκκινήσει το 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@ \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} \clearpage \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} Γραφικά, αυτό μεταφράζεται ως εξής: \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 μπορεί να αυξήσει την ασφάλεια ενός συστήματος. Ωστόσο, ενώ τα εργαλεία αξιολόγησης παρουσιάζουν ένα ποσοστό αύξησης της ασφάλειας, η πραγματική αύξηση είναι μεγαλύτερη διότι πολλές από τις αλλαγές που πραγματοποιούνται δεν αντικατοπτρίζονται στα αποτελέσματα των αποτιμήσεων.