Merging 'WIP: Do Not Merge This Branch' Into Master
This commit is contained in:
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user