887 lines
41 KiB
TeX
887 lines
41 KiB
TeX
\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 χρησιμοποιήθηκε
|
||
η εντολή:
|
||
|
||
\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{Δημιουργία φακέλου}
|
||
\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. Για την αρχικοποίηση της
|
||
βάσης δεδομένων ευπαθειών του 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 μπορεί να
|
||
αυξήσει την ασφάλεια ενός συστήματος. Ωστόσο, ενώ τα εργαλεία αξιολόγησης
|
||
παρουσιάζουν ένα ποσοστό αύξησης της ασφάλειας, η πραγματική αύξηση είναι
|
||
μεγαλύτερη διότι πολλές από τις αλλαγές που πραγματοποιούνται δεν
|
||
αντικατοπτρίζονται στα αποτελέσματα των αποτιμήσεων.
|