diff --git a/Abbreviations/abbreviations.tex b/Abbreviations/abbreviations.tex index 9988b1c..f1c74ac 100644 --- a/Abbreviations/abbreviations.tex +++ b/Abbreviations/abbreviations.tex @@ -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 \\ diff --git a/Bibliography.bib b/Bibliography.bib index 15ca934..8c8b074 100644 --- a/Bibliography.bib +++ b/Bibliography.bib @@ -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)}, diff --git a/Chapters/3.RelevantWork.tex b/Chapters/3.RelevantWork.tex index 7152b61..73d99b5 100644 --- a/Chapters/3.RelevantWork.tex +++ b/Chapters/3.RelevantWork.tex @@ -263,6 +263,8 @@ Docker. Στην ενότητα αυτή θα γίνει αναφορά σε ε \begin{itemize} +\clearpage + \item \textbf{Σύγκριση με JShielder}: Το JShielder παρέχει ένα ικανοποιητικό εύρος σκλήρυνσης του συστήματος diff --git a/Chapters/4.ProjectDevelopment.tex b/Chapters/4.ProjectDevelopment.tex index 346ee1c..404fab3 100644 --- a/Chapters/4.ProjectDevelopment.tex +++ b/Chapters/4.ProjectDevelopment.tex @@ -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} diff --git a/Chapters/5.ProjectShowcase.tex b/Chapters/5.ProjectShowcase.tex index 637c2f6..89570a0 100644 --- a/Chapters/5.ProjectShowcase.tex +++ b/Chapters/5.ProjectShowcase.tex @@ -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} μέσω του αρχείου diff --git a/Figures/AWS_listing/aws-instances.png b/Figures/AWS_listing/aws-instances.png index badf5d4..772dd2c 100644 Binary files a/Figures/AWS_listing/aws-instances.png and b/Figures/AWS_listing/aws-instances.png differ diff --git a/Figures/AWS_listing/aws-instancesOLD.png b/Figures/AWS_listing/aws-instancesOLD.png new file mode 100644 index 0000000..badf5d4 Binary files /dev/null and b/Figures/AWS_listing/aws-instancesOLD.png differ diff --git a/Figures/Diagrams/component/getAwsImage.png b/Figures/Diagrams/component/getAwsImage.png new file mode 100644 index 0000000..425e362 Binary files /dev/null and b/Figures/Diagrams/component/getAwsImage.png differ diff --git a/Figures/Diagrams/component/listAllRegionalAwsNodes.png b/Figures/Diagrams/component/listAllRegionalAwsNodes.png new file mode 100644 index 0000000..b2d3313 Binary files /dev/null and b/Figures/Diagrams/component/listAllRegionalAwsNodes.png differ diff --git a/Figures/Usage/secdepChooseImage.png b/Figures/Usage/secdepChooseImage.png new file mode 100644 index 0000000..528a42a Binary files /dev/null and b/Figures/Usage/secdepChooseImage.png differ diff --git a/Figures/doxygen/pic-selected-28-02-24_22-09-23.png b/Figures/doxygen/pic-selected-28-02-24_22-09-23.png new file mode 100644 index 0000000..4271309 Binary files /dev/null and b/Figures/doxygen/pic-selected-28-02-24_22-09-23.png differ diff --git a/Figures/doxygen/secdepFunctions.png b/Figures/doxygen/secdepFunctions.png index ff68699..49f5111 100644 Binary files a/Figures/doxygen/secdepFunctions.png and b/Figures/doxygen/secdepFunctions.png differ diff --git a/Figures/doxygen/secdepFunctionsOld.png b/Figures/doxygen/secdepFunctionsOld.png new file mode 100644 index 0000000..ff68699 Binary files /dev/null and b/Figures/doxygen/secdepFunctionsOld.png differ diff --git a/Figures/doxygen/secdepVariables1.png b/Figures/doxygen/secdepVariables1.png new file mode 100644 index 0000000..05e5099 Binary files /dev/null and b/Figures/doxygen/secdepVariables1.png differ diff --git a/Figures/doxygen/secdepVariables2.png b/Figures/doxygen/secdepVariables2.png new file mode 100644 index 0000000..6cd57fc Binary files /dev/null and b/Figures/doxygen/secdepVariables2.png differ