Merging 'WIP: Do Not Merge This Branch' Into Master

This commit is contained in:
2024-02-29 04:56:54 +02:00
parent ef5cb33f23
commit 61e0284cbc
15 changed files with 488 additions and 211 deletions

View File

@@ -175,7 +175,7 @@
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = 0.8\textwidth]{Figures/Diagrams/secdep-use-case-diagram.jpg}
\includegraphics[width = .8\textwidth]{Figures/Diagrams/secdep-use-case-diagram.jpg}
\captionof{figure}{Διάγραμμα περιπτώσεων χρήσης}
\label{fig:useCaseDiagram}
\end{figure}
@@ -234,7 +234,7 @@ SecDep:
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = 0.5\textwidth]{Figures/Diagrams/flowchart/3secdep-flowchart-ListVMs.png}
\includegraphics[width = .5\textwidth]{Figures/Diagrams/flowchart/3secdep-flowchart-ListVMs.png}
\captionof{figure}{Διάγραμμα ροής - Λίστα εικονικών μηχανών}
\label{fig:flowchartDiagram2}
\end{figure}
@@ -252,7 +252,7 @@ SecDep:
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = 0.55\textwidth]{Figures/Diagrams/flowchart/4secdep-flowchart-ActionOnVM.png}
\includegraphics[width = .55\textwidth]{Figures/Diagrams/flowchart/4secdep-flowchart-ActionOnVM.png}
\captionof{figure}{Διάγραμμα ροής - Ενέργεια σε εικονική μηχανή}
\label{fig:flowchartDiagram3}
\end{figure}
@@ -270,7 +270,7 @@ SecDep:
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = 0.6\textwidth]{Figures/Diagrams/flowchart/5secdep-flowchart-SSHToVM.png}
\includegraphics[width = .6\textwidth]{Figures/Diagrams/flowchart/5secdep-flowchart-SSHToVM.png}
\captionof{figure}{Διάγραμμα ροής - Σύνδεση SSH σε εικονική μηχανή}
\label{fig:flowchartDiagram4}
\end{figure}
@@ -288,7 +288,7 @@ SecDep:
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = 0.35\textwidth]{Figures/Diagrams/flowchart/6secdep-flowchart-ResourceInfo.png}
\includegraphics[width = .35\textwidth]{Figures/Diagrams/flowchart/6secdep-flowchart-ResourceInfo.png}
\captionof{figure}{Διάγραμμα ροής - Απόκτηση πληροφοριών πόρων παρόχου}
\label{fig:flowchartDiagram5}
\end{figure}
@@ -308,7 +308,7 @@ SecDep:
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = 0.7\textwidth]{Figures/Diagrams/flowchart/7secdep-flowchart-CreateVM.png}
\includegraphics[width = .7\textwidth]{Figures/Diagrams/flowchart/7secdep-flowchart-CreateVM.png}
\captionof{figure}{Διάγραμμα ροής - Δημιουργία εικονικής μηχανής}
\label{fig:flowchartDiagram6}
\end{figure}
@@ -333,135 +333,13 @@ SecDep:
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = 1\textwidth]{Figures/Diagrams/secdep-sequence-diagram.png}
\includegraphics[width = \textwidth]{Figures/Diagrams/secdep-sequence-diagram.png}
\captionof{figure}{Διάγραμμα ακολουθίας για την δημιουργία εικονικής μηχανής}
\label{fig:sequenceDiagram}
\end{figure}
\vspace*{-30pt}
\end{center}
\begin{landscape}
\thispagestyle{empty}
Mε το \textquote{code2flow} \footfullcite{code2flow} δημιουργήθηκε ένα
διάγραμμα που απεικονίζει τις κλήσεις συναρτήσεων που γίνονται κατά την
εκτέλεση του αρχείου secdep.py. Παράλληλα, το ίδιο αποτέλεσμα επιτεύχθηκε για
το αρχείο harden με την βοήθεια του \textquote{callGraph}
\footfullcite{callGraph}. Τα παραπάνω απεικονίζονται στα Σχήματα
\ref{fig:secdepFunctionCallDiagram} και \ref{fig:hardenFunctionCallDiagram}
αντίστοιχα.
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = 1.1\textwidth]{Figures/Diagrams/secdep-function-relationships.png}
\captionof{figure}{Διάγραμμα κλήσεων συναρτήσεων του secdep.py}
\label{fig:secdepFunctionCallDiagram}
\end{figure}
\vspace*{-30pt}
\end{center}
\end{landscape}
\begin{landscape}
\thispagestyle{empty}
\vspace{30pt}
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = 1.1\textwidth]{Figures/Diagrams/harden-function-relationships.png}
\captionof{figure}{Διάγραμμα κλήσεων συναρτήσεων του harden}
\label{fig:hardenFunctionCallDiagram}
\end{figure}
\vspace*{-30pt}
\end{center}
\end{landscape}
\noindent Επιπλέον, ένας χάρτης των σημαντικών εξαρτήσεων του secdep.py
δημιουργήθηκε με την βοήθεια του \textquote{pydeps} \footfullcite{pydeps}. Αυτό
έγινε με την εκτέλεση της παρακάτω εντολής:
\begin{listing}[!ht]
\begin{bashcode}
pydeps -T png --cluster --include-missing --max-bacon=1 --noshow --reverse --rankdir RL -o secdep-module-dependencies-organized.png secdep.py
\end{bashcode}
\caption{Εντολή δημιουργίας χάρτη εξαρτήσεων του secdep.py}
\label{lst:secdepModuleDependencies}
\vspace*{-10pt}
\end{listing}
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = .9\textwidth]{Figures/Diagrams/secdep-module-dependencies-organized.png}
\captionof{figure}{Διάγραμμα σημαντικών εξαρτήσεων του secdep.py}
\label{fig:secdepModules}
\end{figure}
\vspace*{-30pt}
\end{center}
\noindent Οι παραπάνω βιβλιοθήκες, αποτελούν τους πυλώνες του SecDep. Κάθε μια
από αυτές, εξειδικεύεται σε διαφορετικούς τομείς και χρησιμοποιείται για την
κάλυψη διαφόρων λειτουργιών του SecDep. Με την σειρά που απεικονίζονται, έχουν
τις εξής αρμοδιότητες:
\begin{itemize}
\item \textbf{azure}:
Η βιβλιοθήκη της azure, χρησιμοποιείται για την επικοινωνία και
αυθεντικοποίηση με τον πάροχο νέφους Azure. Ο λόγος που χρειάζεται να
χρησιμοποιηθεί συνδυαστικά με την libcloud, είναι για επιτύχουμε την
ομοιόμορφη συμπεριφορά του εργαλείου κατά μήκος όλων των παρόχων που
αυτό υποστηρίζει. Συγκεκριμένα, την χρειαζόμαστε για την επίτευξη των
λειτουργιών δημιουργίας Resource Group και Virtual Network, καθώς αυτές
λειτουργίες δεν υποστηρίζονται από την libcloud την παρούσα στιγμή.
\item \textbf{dotenv}:
Η βιβλιοθήκη dotenv \footfullcite{dotenv} χρησιμοποιείται για την
ανάγνωση αρχείων \textquote{.env}. Το SecDep κάνει χρήση ενός αρχείου
\textquote{.env}, στο οποίο δηλώνονται οι τιμές που χρειάζεται για την
αυθεντικοποίηση με τους παρόχους νέφους.
\item \textbf{libcloud}:
Η βιβλιοθήκη libcloud είναι υπεύθυνη για την αυθεντικοποίηση με τους
παρόχους νέφους, με σκοπό την εκτέλεση διαφόρων λειτουργιών σχετικά με
τις εικονικές μηχανές του καθενός. Μας επιτρέπει να δημιουργούμε και να
διαχειριζόμαστε εικονικές μηχανές, καθώς και να λαμβάνουμε πληροφορίες
για πόρους του κάθε παρόχου νέφους.
\item \textbf{rich}:
Η βιβλιοθήκη rich \footfullcite{rich} εμπλουτίζει την εμφάνιση του
SecDep. Βοηθάει στην καλύτερη διαμόρφωση της εμφάνισης των
αποτελεσμάτων των εντολών του, με σκοπό την θετική αύξηση της εμπειρίας
χρήσης του εργαλείου.
\item \textbf{shtab}:
Η βιβλιοθήκη shtab \footfullcite{shtab} χρησιμοποιείται για την
δημιουργία συμπληρώσεων κελύφους. Αυτό αποτελεί βασικό χαρακτηριστικό
για την ευχρηστία του εργαλείου, καθώς διευκολύνει τον χρήστη στην
εύρεση των διαθέσιμων παραμέτρων και στην ταχύτερη σύνταξη εντολών.
\item \textbf{paramiko}:
Η βιβλιοθήκη paramiko \footfullcite{paramiko} αποτελεί εξάρτηση της
libcloud για την επικοινωνία με τις εικονικές μηχανές, κάνοντας χρήση
του πρωτοκόλλου SSH. Το SecDep, χρησιμοποιεί την βιβλιοθήκη αυτή για
την διαδραστική σύνδεση σε εικονικές μηχανές μέσω SSH σε περίπτωση
απουσίας πελάτη που να προσφέρει αυτή τη δυνατότητα. Επιπλέον,
χρησιμοποιείται για την δημιουργία κλειδιών SSH.
\end{itemize}
\clearpage
\section{Αποφάσεις που πάρθηκαν κατά την ανάπτυξη} \label{developmentDecisions}
Κατά την ανάπτυξη του συστήματος, προκειμένου να επιτευχθούν οι στόχοι που
@@ -476,7 +354,7 @@ pydeps -T png --cluster --include-missing --max-bacon=1 --noshow --reverse --ran
\footfullcite{python}. Επιπροσθέτως, η libcloud είναι πιο διαδεδομένη, ενώ η
γλώσσα python αποτελεί μια πιο ευέλικτη επιλογή για τις ανάγκες της ανάπτυξης
του εργαλείου μας. Αυτό συμβαίνει διότι σε σχέση με την Java, η python είναι
απλούστερη στην σύνταξή της, προεγκατεστημένη σε πολλά λειτουργικά συστήματα
απλούστερη στην σύνταξή της, προ εγκατεστημένη σε πολλά λειτουργικά συστήματα
και διαθέτει πολλές επιβοηθητικές βιβλιοθήκες, επίσημες ή από τρίτους, οι
οποίες δύναται να εμπλουτίσουν τα προγράμματα σε python, με παραπάνω
λειτουργίες.
@@ -569,14 +447,14 @@ Python, πάρθηκε επίσης η απόφαση για την υποστή
\section{Αρχιτεκτονική Εργαλείου} \label{architecture}
Οι διαθέσιμες συναρτήσεις και μεταβλητές του secdep.py, απεικονίζονται στα
Σχήματα \ref{fig:secdepFunctions} και \ref{fig:secdepVariables} αντίστοιχα. Η
δημιουργία τους πραγματοποιήθηκε με το εργαλείο \textquote{doxygen}
\footfullcite{doxygen}.
Σχήματα \ref{fig:secdepFunctions}, \ref{fig:secdepVariables1} και
\ref{fig:secdepVariables2} αντίστοιχα. Η δημιουργία τους πραγματοποιήθηκε με το
εργαλείο \textquote{doxygen} \footfullcite{doxygen}.
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = .9\textwidth]{Figures/doxygen/secdepFunctions.png}
\includegraphics[width = \textwidth]{Figures/doxygen/secdepFunctions.png}
\captionof{figure}{Συναρτήσεις του secdep.py}
\label{fig:secdepFunctions}
\end{figure}
@@ -586,15 +464,165 @@ Python, πάρθηκε επίσης η απόφαση για την υποστή
\begin{center}
\begin{figure}[ht]
\centering
\includegraphics[width = .9\textwidth]{Figures/doxygen/secdepVariables.png}
\includegraphics[width = \textwidth]{Figures/doxygen/secdepVariables1.png}
\captionof{figure}{Μεταβλητές του secdep.py}
\label{fig:secdepVariables}
\label{fig:secdepVariables1}
\end{figure}
\vspace*{-30pt}
\end{center}
\begin{center}
\begin{figure}[ht]
\centering
\includegraphics[width = \textwidth]{Figures/doxygen/secdepVariables2.png}
\captionof{figure}{Μεταβλητές του secdep.py (συνέχεια)}
\label{fig:secdepVariables2}
\end{figure}
\vspace*{-30pt}
\end{center}
\clearpage
\noindent Προκειμένου να κατανοήσουμε καλύτερα πως αλληλεπιδρούν ορισμένες από
τις συναρτήσεις μεταξύ τους, δημιουργήθηκαν δύο διαγράμματα συστατικών
(component diagrams) για τις εξής λειτουργίες:
\begin{itemize}
\item Απόκτηση λίστας εικονικών μηχανών συγκεκριμένης περιοχής του παρόχου νέφους Amazon (Σχήμα \ref{fig:secdepComponentDiagram1})
\item Απόκτηση πληροφοριών ΑΜΙ (Amazon Machine Image) (Σχήμα \ref{fig:secdepComponentDiagram2})
\end{itemize}
\noindent Τα διαγράμματα αυτά δημιουργήθηκαν με την χρήση της βιβλιοθήκης
\textquote{pydoctrace} \footfullcite{pydoctrace} και του εργαλείου ανοιχτού
κώδικα \textquote{plantuml} \footfullcite{plantuml}. Με την εκτέλεση της
Εντολής \ref{lst:pydoctraceInstall}, εγκαθίσταται η βιβλιοθήκη στο σύστημα.
Μετά την περαίωσή της και την εγκατάσταση του πακέτου plantuml, προκειμένου να
αποκτήσουμε τα διαγράμματα συστατικών χρειάστηκε να πραγματοποιηθούν ορισμένες
προσθέσεις στον κώδικα του εργαλείου.
\begin{listing}[!ht]
\begin{bashcode}
pip install pydoctrace --break-system-packages
\end{bashcode}
\caption{Εγκατάσταση της βιβλιοθήκης pydoctrace}
\label{lst:pydoctraceInstall}
\vspace*{-10pt}
\end{listing}
\noindent Οι προσθέσεις αυτές αφορούν την προσθήκη των εξής γραμμών κώδικα του
secdep.py στο σημείο που ορίζονται οι βιβλιοθήκες:
\begin{listing}[!ht]
\begin{bashcode}
from pydoctrace.doctrace import trace_to_component_puml
from pydoctrace.callfilter.presets import (
EXCLUDE_BUILTINS_PRESET,
EXCLUDE_CALL_DEPTH_PRESET_FACTORY,
EXCLUDE_DEPTH_BELOW_5_PRESET,
EXCLUDE_STDLIB_PRESET,
EXCLUDE_TESTS_PRESET,
TRACE_ALL_PRESET,
)
\end{bashcode}
\vspace*{-10pt}
\end{listing}
\noindent Έπειτα, προσθέτουμε και τις παρακάτω γραμμές κώδικα, ακριβώς πριν την
δήλωση των συναρτήσεων που θέλουμε να καλέσουμε:
\clearpage
\begin{listing}[!ht]
\begin{bashcode}
ABOVE_1_PRESET = EXCLUDE_CALL_DEPTH_PRESET_FACTORY(1)
@trace_to_component_puml(filter_presets=[EXCLUDE_BUILTINS_PRESET, ABOVE_1_PRESET, EXCLUDE_DEPTH_BELOW_5_PRESET, EXCLUDE_STDLIB_PRESET, EXCLUDE_TESTS_PRESET, TRACE_ALL_PRESET])
\end{bashcode}
\vspace*{-10pt}
\end{listing}
\noindent Mε την εκτέλεση των Εντολών \ref{lst:getAwsImage} και
\ref{lst:listAllRegionalAwsNodes}, παράγονται δύο αρχεία με κατάληξη
\textquote{.puml}, τα οποία περιέχουν οδηγίες για την απεικόνιση των
διαγραμμάτων συστατικών στα Σχήματα \ref{fig:secdepComponentDiagram1} και
\ref{fig:secdepComponentDiagram2} αντίστοιχα.
\begin{listing}[!ht]
\begin{bashcode}
python3 secdep.py --provider aws --listimages --print
\end{bashcode}
\caption{Απόκτηση πληροφοριών ΑΜΙ (Amazon Machine Image)}
\label{lst:getAwsImage}
\vspace*{-10pt}
\end{listing}
\begin{listing}[!ht]
\begin{bashcode}
python3 secdep.py --provider aws --list --awsregion eu-north-1
\end{bashcode}
\caption{Απόκτηση λίστας εικονικών μηχανών συγκεκριμένης περιοχής του παρόχου νέφους Amazon}
\label{lst:listAllRegionalAwsNodes}
\vspace*{-10pt}
\end{listing}
\noindent Τέλος, η μετατροπή των αρχείων κειμένου σε σχήματα πραγματοποιείται
με την εκτέλεση της εντολής \ref{lst:plantumlCommand}.
\begin{listing}[!ht]
\begin{bashcode}
plantuml -progress -DPLANTUML_LIMIT_SIZE=8192 <όνομα αρχείου>.puml
\end{bashcode}
\caption{Μετατροπή αρχείων \textquote{.puml} σε αρχεία \textquote{.png} χρησιμοποιώντας το plantuml}
\label{lst:plantumlCommand}
\vspace*{-10pt}
\end{listing}
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = .9\textwidth]{Figures/Diagrams/component/GetAwsImage.png}
\captionof{figure}{Διάγραμμα συστατικών για την Εντολή \ref{lst:getAwsImage}}
\label{fig:secdepComponentDiagram1}
\end{figure}
\vspace*{-30pt}
\end{center}
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = .9\textwidth]{Figures/Diagrams/component/ListAllRegionalAwsNodes.png}
\captionof{figure}{Διάγραμμα συστατικών για την Εντολή \ref{lst:listAllRegionalAwsNodes}}
\label{fig:secdepComponentDiagram2}
\end{figure}
\vspace*{-30pt}
\end{center}
Τα παραπάνω διαγράμματα αποτελούν απλουστευμένες εκδοχές των πραγματικών. Αυτό
συμβαίνει, διότι έχουμε ρυθμίσει το pydoctrace να παραλείπει τις εμφανίσεις
ορισμένων εσωτερικών κλήσεων συναρτήσεων, καθώς και αυτών που βρίσκονται σε
επίπεδο callstack μεγαλύτερο από ένα. Στην αντίθετη περίπτωση, τα διαγράμματα
θα ήταν αρκετά δυσνόητα και δυσανάγνωστα.
Παρατηρώντας το Σχήμα \ref{fig:secdepComponentDiagram1}, αποκτάμε μεγαλύτερη
κατανόηση σχετικά με την εξάρτηση των συναρτήσεων μεταξύ τους. Προκειμένου να
φτάσουμε στην απόκτηση πληροφοριών για το AMI που θα διαλέξουμε, αρχικά πρέπει
να λάβουμε την λίστα των διαθέσιμων διανομών. Έπειτα, επιλέγουμε μια από αυτές
και αποκτάμε την λίστα των διαθέσιμων περιοχών της Amazon. Αυτό το βήμα είναι
απαραίτητο, διότι κάθε AMI έχει ξεχωριστό αναγνωριστικό ανά περιοχή. Αφότου
επιλέξουμε την περιοχή που επιθυμούμε, το εργαλείο επικοινωνεί με τον πάροχο
νέφους εκτελώντας την συνάρτηση απόκτησης της εικόνας και μας επιστρέφει τις
πληροφορίες της.
Στο Σχήμα \ref{fig:secdepComponentDiagram2}, βλέπουμε πως γίνεται κλήση της
συνάρτησης απόκτησης του οδηγού για την αυθεντικοποίηση με την Amazon και
έπειτα λαμβάνουμε την λίστα των εικονικών μηχανών για την περιοχή που ορίσαμε
κατά την σύνταξη της εντολής, από την αντίστοιχη συνάρτηση. Οι μέθοδοι start
και stop αφορούν την εκκίνηση και την παύση ενός μηχανισμού που έχει προστεθεί
στον τρόπο εμφάνισης των εντολών, ώστε να γνωρίζει ο χρήστης πως η εκτέλεση του
προγράμματος συνεχίζεται. Αυτό αποτελεί ένα χαρακτηριστικό που αυξάνει την
εμπειρία χρήσης, ιδίως για εντολές με μεγάλης διαρκείας εκτέλεση.
Το SecDep αποτελείται από δύο εκτελέσιμα αρχεία. Το πρώτο αρχείο, το
\textquote{secdep.py}, είναι το κύριο αρχείο του προγράμματος. Αυτό το αρχείο
είναι υπεύθυνο για την επικοινωνία με τους παρόχους νέφους και την διαχείριση
@@ -615,17 +643,25 @@ Docker. Το harden, εκτελείται μόνο στις εικονικές
\begin{itemize}
\item \textbf{provider}
\item \textbf{name}
\item \textbf{location}
\item \textbf{size}
\item \textbf{image}
\item \textbf{provider}: Ο πάροχος νέφους στο νέφος του οποίου θα
δημιουργηθεί η εικονική μηχανή (aws, gce, azure).
\item \textbf{confirm}: Για επιβεβαίωση της δημιουργίας της
εικονικής μηχανής χωρίς να χρειαστεί χειροκίνητη επιβεβαίωση
από τον χρήστη.
\item \textbf{name}: Το όνομα της εικονικής μηχανής.
\item \textbf{deploy}: Για την εκτέλεση του harden.
\item \textbf{location}: Η περιοχή στην οποία θα δημιουργηθεί η
εικονική μηχανή.
\item \textbf{size}: Το μέγεθος της εικονικής μηχανής.
\item \textbf{image}: Η εικόνα από την οποία θα δημιουργηθεί η
εικονική μηχανή.
\item \textbf{confirm}: Χρησιμοποιείται για επιβεβαίωση της
δημιουργίας της εικονικής μηχανής χωρίς να χρειαστεί
χειροκίνητη επιβεβαίωση από τον χρήστη.
\item \textbf{deploy}: Για την εκτέλεση του harden (δηλ. την
εφαρμογή της σκλήρυνσης).
\end{itemize}
@@ -637,10 +673,10 @@ Docker. Το harden, εκτελείται μόνο στις εικονικές
\begin{itemize}
\item \textbf{start}
\item \textbf{stop}
\item \textbf{reboot}
\item \textbf{delete}
\item \textbf{start} (εκκίνηση της εικονικής μηχανής)
\item \textbf{stop} (παύση της εικονικής μηχανής)
\item \textbf{reboot} (επανεκκίνηση της εικονικής μηχανής)
\item \textbf{delete} (διαγραφή της εικονικής μηχανής)
\end{itemize}
@@ -649,7 +685,7 @@ Docker. Το harden, εκτελείται μόνο στις εικονικές
\item \textbf{list\_all\_nodes}: Η συνάρτηση \textquote{list\_all\_nodes},
είναι αυτή που εμφανίζει τις εικονικές μηχανές που διαχειρίζεται το
SecDep. Χωρίς παραμέτρους θα εμφάνιζε όλες τις εικονικές μηχανές από
όλους τους παρόχους. Επειδή όμως δεν είναι πάντοτε απαραίτητο να
όλους τους παρόχους. Επειδή, όμως, δεν είναι πάντοτε απαραίτητο να
εμφανίζονται όλες οι εικονικές μηχανές, ο χρήστης μπορεί να δώσει τις
παρακάτω παραμέτρους:
@@ -659,6 +695,9 @@ Docker. Το harden, εκτελείται μόνο στις εικονικές
\item \textbf{filterIn}: Χρησιμοποιείται για το φιλτράρισμα της
λίστας κατά την χρήση της συνάρτησης \textquote{node\_action}.
Με βάση την τιμή της ενέργειας που θέλει να πραγματοποιήσει ο
χρήστης, δεν περιλαμβάνονται στην λίστα, οι εικονικές μηχανές
για τις οποίες δεν είναι δυνατή η εκτέλεση της ενέργειας αυτής.
\item \textbf{awsRegion}: Μόνο για τον πάροχο AWS. Χρησιμοποιείται
για την επιλογή της περιοχής. Δίχως την παράμετρο αυτή, θα
@@ -670,9 +709,9 @@ Docker. Το harden, εκτελείται μόνο στις εικονικές
\end{itemize}
\noindent Το αρχείο harden, αποτελείται από πολλές συναρτήσεις που εκτελούνται
με την σειρά προκειμένου να ασφαλιστεί το σύστημα στο οποίο εκτελείται. Οι πιο
αξιοσημείωτες αυτών είναι:
\noindent Το αρχείο harden, αποτελείται από πολλές συναρτήσεις, οι οποίες
εκτελούνται με την σειρά προκειμένου να ασφαλιστεί το σύστημα στο οποίο
εκτελείται. Οι πιο αξιοσημείωτες αυτών είναι:
\begin{itemize}
@@ -687,7 +726,7 @@ Docker. Το harden, εκτελείται μόνο στις εικονικές
\item \textbf{kernelSecurityModuleInit}:
Η συνάρτηση υπεύθυνη για την εγκατάσταση/ρύθμιση του κατάλληλου για την
διανομή kernel security module.
διανομή (της εικονικής μηχανής) kernel security module.
\item \textbf{configureFail2ban}:
@@ -696,3 +735,125 @@ Docker. Το harden, εκτελείται μόνο στις εικονικές
fail2ban για την προστασία από επιθέσεις brute force.
\end{itemize}
\begin{landscape}
\thispagestyle{empty}
Mε το \textquote{code2flow} \footfullcite{code2flow} δημιουργήθηκε ένα
διάγραμμα που απεικονίζει τις κλήσεις συναρτήσεων που γίνονται κατά την
εκτέλεση του αρχείου secdep.py. Παράλληλα, το ίδιο αποτέλεσμα επιτεύχθηκε για
το αρχείο harden με την βοήθεια του \textquote{callGraph}
\footfullcite{callGraph}. Τα παραπάνω απεικονίζονται στα Σχήματα
\ref{fig:secdepFunctionCallDiagram} και \ref{fig:hardenFunctionCallDiagram}
αντίστοιχα.
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = 1.1\textwidth]{Figures/Diagrams/secdep-function-relationships.png}
\captionof{figure}{Διάγραμμα κλήσεων συναρτήσεων του secdep.py}
\label{fig:secdepFunctionCallDiagram}
\end{figure}
\vspace*{-30pt}
\end{center}
\end{landscape}
\begin{landscape}
\thispagestyle{empty}
\vspace{30pt}
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = 1.1\textwidth]{Figures/Diagrams/harden-function-relationships.png}
\captionof{figure}{Διάγραμμα κλήσεων συναρτήσεων του harden}
\label{fig:hardenFunctionCallDiagram}
\end{figure}
\vspace*{-30pt}
\end{center}
\end{landscape}
\noindent Επιπλέον, ένας χάρτης των σημαντικών εξαρτήσεων του secdep.py
δημιουργήθηκε με την βοήθεια του \textquote{pydeps} \footfullcite{pydeps}. Αυτό
έγινε με την εκτέλεση της παρακάτω εντολής:
\begin{listing}[!ht]
\begin{bashcode}
pydeps -T png --cluster --include-missing --max-bacon=1 --noshow --reverse --rankdir RL -o secdep-module-dependencies-organized.png secdep.py
\end{bashcode}
\caption{Εντολή δημιουργίας χάρτη εξαρτήσεων του secdep.py}
\label{lst:secdepModuleDependencies}
\vspace*{-10pt}
\end{listing}
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = .9\textwidth]{Figures/Diagrams/secdep-module-dependencies-organized.png}
\captionof{figure}{Διάγραμμα σημαντικών εξαρτήσεων του secdep.py}
\label{fig:secdepModules}
\end{figure}
\vspace*{-30pt}
\end{center}
\noindent Οι παραπάνω βιβλιοθήκες, αποτελούν τους πυλώνες του SecDep. Κάθε μια
από αυτές, εξειδικεύεται σε διαφορετικούς τομείς και χρησιμοποιείται για την
κάλυψη διαφόρων λειτουργιών του SecDep. Με την σειρά που απεικονίζονται, έχουν
τις εξής αρμοδιότητες:
\begin{itemize}
\item \textbf{azure}:
Η βιβλιοθήκη της azure, χρησιμοποιείται για την επικοινωνία και
αυθεντικοποίηση με τον πάροχο νέφους Azure. Ο λόγος που χρειάζεται να
χρησιμοποιηθεί συνδυαστικά με την libcloud, είναι για επιτύχουμε την
ομοιόμορφη συμπεριφορά του εργαλείου κατά μήκος όλων των παρόχων που
αυτό υποστηρίζει. Συγκεκριμένα, την χρειαζόμαστε για την επίτευξη των
λειτουργιών δημιουργίας Resource Group και Virtual Network, καθώς αυτές
λειτουργίες δεν υποστηρίζονται από την libcloud την παρούσα στιγμή.
\clearpage
\item \textbf{dotenv}:
Η βιβλιοθήκη dotenv \footfullcite{dotenv} χρησιμοποιείται για την
ανάγνωση αρχείων \textquote{.env}. Το SecDep κάνει χρήση ενός αρχείου
\textquote{.env}, στο οποίο δηλώνονται οι τιμές που χρειάζεται για την
αυθεντικοποίηση με τους παρόχους νέφους.
\item \textbf{libcloud}:
Η βιβλιοθήκη libcloud είναι υπεύθυνη για την αυθεντικοποίηση με τους
παρόχους νέφους, με σκοπό την εκτέλεση διαφόρων λειτουργιών σχετικά με
τις εικονικές μηχανές του καθενός. Μας επιτρέπει να δημιουργούμε και να
διαχειριζόμαστε εικονικές μηχανές, καθώς και να λαμβάνουμε πληροφορίες
για πόρους του κάθε παρόχου νέφους.
\item \textbf{rich}:
Η βιβλιοθήκη rich \footfullcite{rich} εμπλουτίζει την εμφάνιση του
SecDep. Βοηθάει στην καλύτερη διαμόρφωση της εμφάνισης των
αποτελεσμάτων των εντολών του, με σκοπό την θετική αύξηση της εμπειρίας
χρήσης του εργαλείου.
\item \textbf{shtab}:
Η βιβλιοθήκη shtab \footfullcite{shtab} χρησιμοποιείται για παραγωγή
συμπληρώσεων κελύφους. Αυτό αποτελεί βασικό χαρακτηριστικό για την
ευχρηστία του εργαλείου, καθώς διευκολύνει τον χρήστη στην εύρεση των
διαθέσιμων παραμέτρων και στην ταχύτερη σύνταξη εντολών.
\item \textbf{paramiko}:
Η βιβλιοθήκη paramiko \footfullcite{paramiko} αποτελεί εξάρτηση της
libcloud για την επικοινωνία με τις εικονικές μηχανές, κάνοντας χρήση
του πρωτοκόλλου SSH. Το SecDep, χρησιμοποιεί την βιβλιοθήκη αυτή για
την διαδραστική σύνδεση σε εικονικές μηχανές μέσω SSH σε περίπτωση
απουσίας πελάτη που να προσφέρει αυτή τη δυνατότητα. Επιπλέον,
χρησιμοποιείται για την δημιουργία κλειδιών SSH.
\end{itemize}