Merging 'WIP: Do Not Merge This Branch' Into Master
@@ -80,6 +80,7 @@
|
||||
\textbf{SSH} & \textbf{S}ecure \textbf{SH}ell \\
|
||||
|
||||
\textbf{TPM} & \textbf{T}rusted \textbf{P}latform \textbf{M}odule \\
|
||||
\textbf{TUI} & \textbf{T}ext-based \textbf{U}ser \textbf{I}nterface \\
|
||||
|
||||
\textbf{UEFI} & \textbf{U}nified \textbf{E}xtensible \textbf{F}irmware \textbf{I}nterface \\
|
||||
|
||||
|
||||
@@ -1221,6 +1221,40 @@
|
||||
url = {https://github.com/docker/compose},
|
||||
}
|
||||
|
||||
@online{pydoctrace,
|
||||
title = {pydoctrace},
|
||||
author = {Luc Sorel-Giffo},
|
||||
url = {https://github.com/lucsorel/pydoctrace},
|
||||
}
|
||||
|
||||
@online{plantuml,
|
||||
title = {PlantUML},
|
||||
author = {PlantUML},
|
||||
url = {https://github.com/plantuml/plantuml},
|
||||
}
|
||||
|
||||
@online{tui,
|
||||
title = {Linux Jargon Buster: What are GUI, CLI and TUI in Linux?},
|
||||
author = {Abhishek Prakash},
|
||||
year = {2024},
|
||||
publisher = {It's FOSS},
|
||||
url = {https://itsfoss.com/gui-cli-tui/},
|
||||
urldate = {2024-02-28},
|
||||
}
|
||||
|
||||
@online{htop,
|
||||
title = {htop},
|
||||
author = {Hisham Muhammad},
|
||||
url = {https://htop.dev/},
|
||||
}
|
||||
urldate = {2024-02-28},
|
||||
|
||||
@online{vim,
|
||||
title = {Vim},
|
||||
author = {Bram Moolenaar},
|
||||
url = {https://github.com/vim/vim},
|
||||
}
|
||||
|
||||
inproceedings{manu2016study,
|
||||
author = {Manu, A.R. and Patel, Jitendra Kumar and Akhtar, Shakil and Agrawal, V.K. and Subramanya Murthy, K.N. Bala},
|
||||
booktitle = {2016 International Conference on Circuit, Power and Computing Technologies (ICCPCT)},
|
||||
|
||||
@@ -263,6 +263,8 @@ Docker. Στην ενότητα αυτή θα γίνει αναφορά σε ε
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\clearpage
|
||||
|
||||
\item \textbf{Σύγκριση με JShielder}:
|
||||
|
||||
Το JShielder παρέχει ένα ικανοποιητικό εύρος σκλήρυνσης του συστήματος
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -7,12 +7,15 @@ Amazon. Μετά την ολοκλήρωση των παραπάνω διαδι
|
||||
|
||||
\section{Εγκατάσταση του πηγαίου κώδικα του SecDep}
|
||||
|
||||
Για την εγκατάσταση του πηγαίου κώδικα του SecDep απαιτείται η χρήση του
|
||||
προγράμματος git ή η πρόσβαση σε έναν φυλλομετρητή. Στην περίπτωση που ο
|
||||
χρήστης δεν έχει εγκατεστημένο το git, πρέπει να μεταβεί στην ιστοσελίδα του
|
||||
αποθετηρίου \footfullcite{secdep} και να επιλέξει είτε την επιλογή αποθήκευσης
|
||||
ως αρχείο zip, είτε ως tar.gz όπως απεικονίζεται παρακάτω. Έπειτα, πρέπει να
|
||||
αποσυμπιεστεί με το κατάλληλο για τον τύπο αρχείου πρόγραμμα.
|
||||
Για την εκτέλεση του SecDep είναι απαραίτητη προϋπόθεση να υπάρχει
|
||||
εγκατεστημένη η python με έκδοση μεγαλύτερη ή ίση της 3.7. Για την εγκατάσταση
|
||||
του πηγαίου κώδικα του SecDep απαιτείται η χρήση του προγράμματος git ή η
|
||||
πρόσβαση σε έναν φυλλομετρητή. Στην περίπτωση που ο χρήστης δεν έχει
|
||||
εγκατεστημένο το git, πρέπει να μεταβεί στην ιστοσελίδα του αποθετηρίου
|
||||
\footfullcite{secdep} του κώδικα και να επιλέξει είτε την επιλογή αποθήκευσης
|
||||
ως αρχείο zip, είτε ως tar.gz όπως απεικονίζεται παρακάτω. Έπειτα, το
|
||||
εκφορτωμένο συμπιεσμένο αρχείο πρέπει να αποσυμπιεστεί με το κατάλληλο για τον
|
||||
τύπο αρχείου πρόγραμμα.
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
@@ -41,7 +44,8 @@ git clone https://git.konsthol.eu/konsthol/SecDep.git
|
||||
\subsection{Εγκατάσταση των απαιτούμενων εξαρτήσεων}
|
||||
|
||||
Μετά την ολοκλήρωση της εγκατάστασης του πηγαίου κώδικα του SecDep, αφού ο
|
||||
χρήστης μεταβεί στον φάκελο με τα περιεχόμενα που απεικονίζονται στο Σχήμα
|
||||
χρήστης μεταβεί στον φάκελο με τα περιεχόμενα (δηλ. του ριζικού φακέλου του
|
||||
έργου λογισμικού που εκφορτώθηκε) που απεικονίζονται στο Σχήμα
|
||||
\ref{fig:secdep_install_without_git}, επιβάλλεται να γίνει χρήση του
|
||||
προγράμματος pip \footfullcite{pip} για την εγκατάσταση των βιβλιοθηκών που
|
||||
απαιτούνται για την λειτουργία του εργαλείου. Αυτό επιτυγχάνεται με την
|
||||
@@ -77,7 +81,7 @@ pip install -r requirements.txt --break-system-packages
|
||||
πάροχοι υπηρεσιών IaaS, επιλέχθηκε για την παρούσα ενότητα η κάλυψη της χρήσης
|
||||
των υπηρεσιών της Amazon έναντι της Azure και της GCE, λόγω της ευκολότερης και
|
||||
απλούστερης διαδικασίας αυθεντικοποίησης που παρέχει. Συγκεκριμένα, απαιτεί την
|
||||
συμπλήρωση μονάχα δύο πεδίων. Αυτά είναι, τα
|
||||
συμπλήρωση μονάχα δύο πεδίων. Αυτά στην περίπτωση του εργαλείου μας είναι, τα
|
||||
\textquote{SECDEP\_AWS\_ACCESS\_KEY} και \textquote{SECDEP\_AWS\_SECRET\_KEY}.
|
||||
|
||||
\subsection{Δημιουργία κλειδιού πρόσβασης με την AWS}
|
||||
@@ -90,28 +94,28 @@ pip install -r requirements.txt --break-system-packages
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = .6\textwidth]{Figures/AWS_setup/go_to_iam.png}
|
||||
\includegraphics[width = \textwidth]{Figures/AWS_setup/go_to_iam.png}
|
||||
\captionof{figure}{Μετάβαση στην ενότητα IAM της AWS}
|
||||
\label{fig:go_to_iam}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
\clearpage
|
||||
|
||||
\noindent Έπειτα, πρέπει να εισέλθει στην ενότητα \textquote{Manage Access
|
||||
Keys} και να δημιουργήσει ένα νέο κλειδί πρόσβασης όπως φαίνεται παρακάτω:
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = .6\textwidth]{Figures/AWS_setup/create_access_key.png}
|
||||
\includegraphics[width = \textwidth]{Figures/AWS_setup/create_access_key.png}
|
||||
\captionof{figure}{Δημιουργία νέου κλειδιού πρόσβασης}
|
||||
\label{fig:create_access_key}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
\clearpage
|
||||
|
||||
\noindent Η αντιστοιχία των απαιτούμενων πεδίων με το κλειδί πρόσβασης που
|
||||
δημιουργήθηκε είναι η εξής:
|
||||
|
||||
@@ -161,10 +165,12 @@ python3 secdep.py --init aws
|
||||
|
||||
Έπειτα, θα ζητηθούν από τον χρήστη τα αντίστοιχα διαπιστευτήρια. Οι μεταβλητές
|
||||
αυτές θα αποθηκευτούν στο αρχείο \textquote{.env} που θα δημιουργηθεί στον
|
||||
φάκελο που βρίσκεται το εκτελέσιμο του SecDep. Στην περίπτωση που ο χρήστης
|
||||
μελλοντικά θέλει να αλλάξει τις τιμές των μεταβλητών ή να προσθέσει νέες,
|
||||
μπορεί να το κάνει αλλάζοντας τα περιεχόμενα του αρχείου \textquote{.env}
|
||||
χειροκίνητα με έναν επεξεργαστή κειμένου ή με την εκτέλεση της εντολής:
|
||||
ριζικό φάκελο του έργου. Εάν το εκτελέσιμο μεταφερθεί κάποτε σε νέο φάκελο,
|
||||
δίχως το αρχείο “.env”, τότε αυτό θα αναδημιουργηθεί στην νέα τοποθεσία. Στην
|
||||
περίπτωση που ο χρήστης μελλοντικά θέλει να αλλάξει τις τιμές των μεταβλητών ή
|
||||
να προσθέσει νέες, μπορεί να το κάνει αλλάζοντας τα περιεχόμενα του αρχείου
|
||||
\textquote{.env} χειροκίνητα με έναν επεξεργαστή κειμένου ή με την εκτέλεση της
|
||||
εντολής:
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
@@ -179,8 +185,6 @@ python3 secdep.py --edit
|
||||
αλλάξει και θα αναγράφει την προηγούμενη τιμή της ώστε να γίνεται ευδιάκριτη η
|
||||
αλλαγή.
|
||||
|
||||
\clearpage
|
||||
|
||||
\section{Επίδειξη του SecDep}
|
||||
|
||||
Ανά πάσα στιγμή, ο χρήστης μπορεί να εκτελέσει την παρακάτω εντολή για να λάβει
|
||||
@@ -195,11 +199,14 @@ python3 secdep.py --help
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\subsection{Δημιουργία εικονικής μηχανής}
|
||||
|
||||
Σχετικά με την δημιουργία εικονικών μηχανών, που είναι και μια από τις βασικές
|
||||
λειτουργίες του SecDep, ο χρήστης μπορεί να εκτελέσει την παρακάτω εντολή για
|
||||
να δημιουργήσει μια εικονική μηχανή με λειτουργικό σύστημα Debian 11 στην
|
||||
περιοχή eu-north-1 με μέγεθος t3.micro (διαθέσιμο για χρήστες εντός της δωρεάν
|
||||
δοκιμαστικής περιόδου ενός χρόνου):
|
||||
να δημιουργήσει μια εικονική μηχανή στο νέφος της Amazon, η οποία θα έχει με
|
||||
λειτουργικό σύστημα Debian 11 και θα βρίσκεται στην περιοχή eu-north-1. Το
|
||||
μέγεθος που χρησιμοποιείται είναι το t3.micro, το οποίο είναι διαθέσιμο για
|
||||
χρήστες εντός της δωρεάν δοκιμαστικής περιόδου ενός χρόνου.
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
@@ -211,31 +218,66 @@ python3 secdep.py --provider aws --create --name test-node --size t3.micro --ima
|
||||
\end{listing}
|
||||
|
||||
Μετά την δημιουργία της εικονικής μηχανής, επιστρέφεται στον χρήση η διεύθυνση
|
||||
IP της και η εντολή που μπορεί να εκτελέσει προκειμένου να συνδεθεί σε αυτήν
|
||||
χρησιμοποιώντας το πρωτόκολλο SSH. Η εντολή αυτή σχηματίζεται δυναμικά από το
|
||||
εργαλείο λαμβάνοντας υπόψιν την θύρα που θα χρησιμοποιηθεί (σε περίπτωση που η
|
||||
εικονική μηχανή έχει σκληρύνει), το μονοπάτι μέχρι το κλειδί SSH που
|
||||
δημιουργήθηκε μαζί με την μηχανή στον ίδιο φάκελο με το εργαλείο και την
|
||||
διεύθυνσή της. Εάν ο χρήστης δεν διαθέτει πρόγραμμα ικανό να συνδεθεί μέσω SSH
|
||||
σε έναν απομακρυσμένο διακομιστή, υποστηρίζεται και η παράμετρος
|
||||
\textquote{--ssh}. Χωρίς την παράμετρο \textquote{--yes}, θα ζητηθεί από τον
|
||||
χρήστη να επιβεβαιώσει την δημιουργία της εικονικής μηχανής παρέχοντας
|
||||
πληροφορίες σχετικά με τις επιλογές του.
|
||||
IP της, καθώς και η εντολή που μπορεί να εκτελέσει προκειμένου να συνδεθεί σε
|
||||
αυτήν χρησιμοποιώντας το πρωτόκολλο SSH. Η εντολή αυτή σχηματίζεται δυναμικά
|
||||
από το εργαλείο λαμβάνοντας υπόψιν πολλές παραμέτρους. Αρχικά, σε περίπτωση που
|
||||
η εικονική μηχανή έχει σκληρύνει, η θύρα που θα χρησιμοποιηθεί δεν θα είναι η
|
||||
προκαθορισμένη. Έπειτα, το πλήρες μονοπάτι μέχρι το κλειδί SSH, το οποίο
|
||||
δημιουργήθηκε μαζί με την εικονική μηχανή στο ριζικό φάκελο του έργου, θα
|
||||
αποκτηθεί με βάση την τοποθεσία του εκτελέσιμου. Τέλος, η IP διεύθυνση της
|
||||
εικονικής μηχανής θα είναι αυτή που επιστρέφεται στον χρήστη. Επομένως, μόλις
|
||||
ολοκληρωθεί η δημιουργία της εικονικής μηχανής, ο χρήστης είναι σε θέση να
|
||||
αντιγράψει την εντολή αυτή σε ένα τερματικό και να συνδεθεί στην καινούρια του
|
||||
εικονική μηχανή.
|
||||
|
||||
Με την προσθήκη της παραμέτρου \textquote{--deploy}, θα εκτελεστεί η ίδια
|
||||
διαδικασία αλλά με την διαφορά πως θα πραγματοποιηθεί εκτέλεση και του αρχείου
|
||||
harden στην εικονική μηχανή, το οποίο θα σκληρύνει το λειτουργικό της σύστημα
|
||||
και θα εγκαταστήσει την μηχανή δοχείων Docker την οποία επίσης θα σκληρύνει.
|
||||
Εάν ο χρήστης δεν διαθέτει πρόγραμμα ικανό να συνδεθεί μέσω SSH σε έναν
|
||||
απομακρυσμένο διακομιστή, υποστηρίζεται και η παράμετρος \textquote{--ssh}. Η
|
||||
συγκεκριμένη παράμετρος θα επιστρέψει στον χρήστη μια λίστα με τις διαθέσιμες
|
||||
εικονικές μηχανές του, ώστε να επιλέξει διαδραστικά μια από αυτές για να
|
||||
συνδεθεί. Μπορεί προαιρετικά να συνδυαστεί με την παράμετρο
|
||||
\textquote{--provider} για το φιλτράρισμα της λίστας και με την παράμετρο
|
||||
\textquote{--port} για επιλογή θύρας. Το μειονέκτημα που θα έχει ο χρήστης
|
||||
συνδέοντας με αυτόν τον τρόπο, είναι η αδυναμία του έπειτα να εκτελέσει
|
||||
διαδραστικά προγράμματα τύπου tui \footfullcite{tui} (text-based user
|
||||
interface), όπως είναι το htop \footfullcite{htop} και το vim
|
||||
\footfullcite{vim}. Μια περίπτωση εκτέλεσής της είναι η εξής:
|
||||
|
||||
\clearpage
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
python3 secdep.py --provider aws --ssh
|
||||
\end{bashcode}
|
||||
\caption{Εκτέλεση της παραμέτρου ssh του SecDep}
|
||||
\label{lst:secdep_ssh}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
Σχετικά με την εντολή δημιουργίας εικονικής μηχανής, χωρίς την παράμετρο
|
||||
\textquote{--yes}, θα ζητηθεί από τον χρήστη να επιβεβαιώσει την δημιουργία της
|
||||
εικονικής μηχανής, παρέχοντας πληροφορίες σχετικά με τις επιλογές του. Η
|
||||
συγκεκριμένη εντολή, μπορεί επιπλέον να συνδυαστεί με την παράμετρο
|
||||
\textquote{--deploy}. Με την προσθήκη της παραμέτρου αυτής, θα εκτελεστεί η
|
||||
ίδια διαδικασία αλλά με την διαφορά πως θα πραγματοποιηθεί εκτέλεση και του
|
||||
αρχείου harden στην εικονική μηχανή, το οποίο θα σκληρύνει το λειτουργικό της
|
||||
σύστημα και θα εγκαταστήσει την μηχανή δοχείων Docker, την οποία επίσης θα
|
||||
σκληρύνει. Ένα πλήρες παράδειγμα όπου γίνεται χρήση της παραμέτρου αυτής και
|
||||
εγκαθίστανται στην εικονική μηχανή δύο δοχεία Docker, είναι το παρακάτω:
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
python3 secdep.py --provider aws --create --name test-node --size t3.micro --image ami-08869bacfa1188ec9 --yes --deploy node mysql
|
||||
\end{bashcode}
|
||||
\caption{Εκτέλεση της παραμέτρου create του SecDep, με την παράμετρο deploy για σκλήρυνση}
|
||||
\label{lst:secdep_harden_docker}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\noindent Το αποτέλεσμα μετά την δημιουργία εικονικής μηχανής με την παράμετρο
|
||||
για σκλήρυνση απεικονίζεται ως:
|
||||
για σκλήρυνση απεικονίζεται στο παρακάτω σχήμα:
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = .8\textwidth]{Figures/AWS_hardened/aws-hardened.png}
|
||||
\includegraphics[width = \textwidth]{Figures/AWS_hardened/aws-hardened.png}
|
||||
\captionof{figure}{Δημιουργία εικονικής μηχανής με παράμετρο για σκλήρυνση}
|
||||
\label{fig:aws_hardened}
|
||||
\end{figure}
|
||||
@@ -244,14 +286,16 @@ harden στην εικονική μηχανή, το οποίο θα σκληρύ
|
||||
|
||||
Με μια ακόμα προσθήκη παραμέτρου, συγκεκριμένα της
|
||||
\textquote{--docker\_compose}, θα εκτελεστεί στην εικονική μηχανή και ένα
|
||||
αρχείο docker-compose.yml που θα πρέπει ο χρήστης να έχει μεταφέρει στον ίδιο
|
||||
φάκελο με το εργαλείο. Για οποιαδήποτε παράμετρο που δεν έχει δοθεί ή έχει
|
||||
αρχείο docker-compose.yml που θα πρέπει ο χρήστης να έχει μεταφέρει στον ριζικό
|
||||
φάκελο του SecDep. Για οποιαδήποτε απαραίτητη παράμετρο δεν έχει δοθεί, ή έχει
|
||||
δοθεί λανθασμένα, θα προτρέπεται ο χρήστης να την δώσει ξανά έως ότου
|
||||
ολοκληρωθεί η διαδικασία ή ακυρωθεί από τον χρήστη.
|
||||
|
||||
\subsection{Εύρεση πληροφοριών πόρων}
|
||||
|
||||
Εάν ο χρήστης δεν γνωρίζει τις διαθέσιμες επιλογές για τις παραμέτρους που
|
||||
εισάγει, υποστηρίζονται ξεχωριστές εντολές που ακολουθούν παρόμοιο μοτίβο για
|
||||
την κάθε μια. Παραδείγματα εντολών που υποστηρίζονται είναι οι παρακάτω:
|
||||
εισάγει, υποστηρίζονται ξεχωριστές εντολές, οι οποίες ακολουθούν παρόμοιο
|
||||
μοτίβο μεταξύ τους. Παραδείγματα εντολών που υποστηρίζονται, είναι τα εξής:
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
@@ -262,13 +306,24 @@ python3 secdep.py --provider aws --listimages --print
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
Το αποτέλεσμα της εντολής \ref{lst:secdep-listimages} είναι να εμφανιστεί μια
|
||||
λίστα με τις διαθέσιμες εικόνες που μπορεί να χρησιμοποιήσει ο χρήστης για την
|
||||
δημιουργία εικονικών μηχανών. Έπειτα, με την επιλογή μιας από αυτές, θα
|
||||
εμφανιστούν πληροφορίες σχετικά με την εικόνα που επιλέχθηκε οι οποίες θα είναι
|
||||
της μορφής που απεικονίζεται παρακάτω.
|
||||
\noindent Η οθόνη επιλογής πόρου που θα εμφανιστεί στον χρήστη, είναι η
|
||||
παρακάτω:
|
||||
|
||||
\clearpage
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = \textwidth]{Figures/Usage/secdepChooseImage.png}
|
||||
\captionof{figure}{Οθόνη επιλογής πόρου}
|
||||
\label{fig:secdep_choose}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
Το αποτέλεσμα της Εντολής \ref{lst:secdep-listimages}, είναι να εμφανιστεί μια
|
||||
λίστα με τις διαθέσιμες εικόνες που μπορεί να χρησιμοποιήσει ο χρήστης για την
|
||||
δημιουργία εικονικών μηχανών. Έπειτα, με την διαδραστική επιλογή μιας από
|
||||
αυτές, θα εμφανιστούν πληροφορίες σχετικά με την εικόνα που επιλέχθηκε, οι
|
||||
οποίες θα είναι της μορφής που απεικονίζεται παρακάτω.
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
@@ -277,7 +332,7 @@ python3 secdep.py --provider aws --listimages --print
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
Από την παραπάνω πληροφορία, ο χρήστης χρειάζεται το αναγνωριστικό (id) της
|
||||
Από την παραπάνω πληροφορία, ο χρήστης θα πρέπει να καταγράψει το αναγνωριστικό (id) της
|
||||
εικόνας. Εάν χρειάζεται πληροφορίες σχετικά με τα διαθέσιμα μεγέθη των
|
||||
εικονικών μηχανών, αυτό επιτυγχάνεται με την εντολή:
|
||||
|
||||
@@ -300,10 +355,14 @@ python3 secdep.py --provider aws --listsizes --print
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
Από την παραπάνω πληροφορία, το σημαντικό πάλι είναι το αναγνωριστικό (id) του
|
||||
μεγέθους. Μερικές από τις εντολές που δύναται να χρησιμοποιήσει ένας χρήστης
|
||||
συχνά μπορεί να είναι για την εμφάνιση εικονικών μηχανών ή την διαγραφή τους.
|
||||
Αυτές οι δύο λειτουργίες υποστηρίζονται με τις παρακάτω εντολές:
|
||||
\noindent Από την παραπάνω πληροφορία, το σημαντικό πάλι είναι το αναγνωριστικό
|
||||
(id) του μεγέθους.
|
||||
|
||||
\subsection{Λίστα εικονικών μηχανών}
|
||||
|
||||
Μερικές από τις εντολές που δύναται να χρησιμοποιήσει ένας χρήστης συχνά μπορεί
|
||||
να είναι για την εμφάνιση εικονικών μηχανών ή την διαγραφή τους. Η εμφάνιση
|
||||
εικονικών μηχανών επιτυγχάνεται με την παρακάτω εντολή:
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
@@ -316,23 +375,37 @@ python3 secdep.py --provider aws --awsregion us-east-2 --list
|
||||
|
||||
\clearpage
|
||||
|
||||
\noindent Το αποτέλεσμα της παραπάνω εντολής μπορεί να απεικονίζεται ως εξής:
|
||||
\noindent Το αποτέλεσμά της μπορεί να απεικονίζεται ως εξής:
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = 1.0\textwidth]{Figures/AWS_listing/aws-instances.png}
|
||||
\includegraphics[width = \textwidth]{Figures/AWS_listing/aws-instances.png}
|
||||
\captionof{figure}{Λίστα με τις εικονικές μηχανές που έχουν δημιουργηθεί}
|
||||
\label{fig:instance_list_output}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
Στο Σχήμα \ref{fig:instance_list_output}, βλέπουμε πως υπήρχε στην περιοχή
|
||||
\textquote{us-east-2} μια εικονική μηχανή, στην οποία είχε δοθεί το όνομα
|
||||
\textquote{test-node}. Για κάθε πάροχο, συνδυάζεται το όνομά του στο όνομα της
|
||||
εικονικής μηχανής που δημιουργείται μέσω αυτού, με σκοπό την ταχύτερη διάκρισή
|
||||
της όταν ο χρήστης ζητάει λίστα με εικονικές μηχανές κατά μήκος πολλών παρόχων.
|
||||
Η συγκεκριμένη είχε ήδη διαγραφεί και για τον λόγο αυτό, η κατάστασή της
|
||||
δηλώνεται ως \textquote{terminated}. Σε αντίθετη περίπτωση, θα βλέπαμε την
|
||||
τρέχουσα κατάστασή της και τις διάφορες πληροφορίες της. Στις πληροφορίες αυτές
|
||||
περιλαμβάνονται, η δημόσια και ιδιωτική διεύθυνση IP της, το μέγεθός της, η
|
||||
διανομή που χρησιμοποιεί, καθώς και λοιπές πληροφορίες σε μορφή JSON, τα
|
||||
περιεχόμενα των οποίων διαφέρουν από πάροχο σε πάροχο.
|
||||
|
||||
Η παράμετρος \textquote{--awsregion} είναι προαιρετική και χρησιμοποιείται
|
||||
αποκλειστικά για την Amazon. Η παράλειψή της θα είχε ως αποτέλεσμα να γίνει
|
||||
έρευνα σε όλες τις διαθέσιμες περιοχές. Γεγονός που ενδεχομένως να αποτελούσε
|
||||
σπατάλη χρόνου.
|
||||
|
||||
\subsection{Διαγραφή εικονικής μηχανής}
|
||||
|
||||
Με την παρακάτω εντολή, ο χρήστης λαμβάνει μια λίστα με τις διαθέσιμες
|
||||
εικονικές μηχανές του παρόχου Amazon που έχουν δημιουργηθεί στην περιοχή
|
||||
eu-north-1 και επιλέγει μια από αυτές για διαγραφή. Μετά από επιτυχή διαγραφή,
|
||||
@@ -347,12 +420,18 @@ python3 secdep.py --provider aws --action delete --awsregion eu-north-1
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
Εάν ήθελε να διαγράψει όλες τις εικονικές μηχανές της περιοχής, η επιλογή της
|
||||
Εάν ήθελε να διαγράψει όλες τις εικονικές μηχανές της περιοχής, η τιμή της
|
||||
παραμέτρου \textquote{--action}, από \textquote{delete} θα έπρεπε να
|
||||
αντικατασταθεί σε \textquote{deleteall}. Με παρόμοιο τρόπο υποστηρίζονται και
|
||||
εντολές για εκκίνηση, επανεκκίνηση ή παύση εικονικών μηχανών.
|
||||
|
||||
\clearpage
|
||||
\section{Περισσότερες πληροφορίες}
|
||||
|
||||
Το SecDep, ως ένα ολοκληρωμένο εργαλείο, παρέχει αρκετές λειτουργίες για την
|
||||
δημιουργία και διαχείριση εικονικών μηχανών κατά μήκος πολλών παρόχους νέφους.
|
||||
Τα παραδείγματα εντολών που καλύψαμε στην παρούσα ενότητα, περιορίστηκαν σε
|
||||
έναν μόνο πάροχο νέφους. Ωστόσο, ορισμένες από τις διαθέσιμες εντολές του
|
||||
διαφοροποιούνται για τους υπόλοιπους.
|
||||
|
||||
Πιο λεπτομερείς οδηγίες χρήσης και εγκατάστασης περιέχονται και στην σελίδα του
|
||||
αποθετηρίου του SecDep \footfullcite{secdep} μέσω του αρχείου
|
||||
|
||||
|
Before Width: | Height: | Size: 238 KiB After Width: | Height: | Size: 345 KiB |
BIN
Figures/AWS_listing/aws-instancesOLD.png
Normal file
|
After Width: | Height: | Size: 238 KiB |
BIN
Figures/Diagrams/component/getAwsImage.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
Figures/Diagrams/component/listAllRegionalAwsNodes.png
Normal file
|
After Width: | Height: | Size: 67 KiB |
BIN
Figures/Usage/secdepChooseImage.png
Normal file
|
After Width: | Height: | Size: 316 KiB |
BIN
Figures/doxygen/pic-selected-28-02-24_22-09-23.png
Normal file
|
After Width: | Height: | Size: 131 KiB |
|
Before Width: | Height: | Size: 161 KiB After Width: | Height: | Size: 152 KiB |
BIN
Figures/doxygen/secdepFunctionsOld.png
Normal file
|
After Width: | Height: | Size: 161 KiB |
BIN
Figures/doxygen/secdepVariables1.png
Normal file
|
After Width: | Height: | Size: 156 KiB |
BIN
Figures/doxygen/secdepVariables2.png
Normal file
|
After Width: | Height: | Size: 199 KiB |