Fixed compilation errors
@@ -7,7 +7,11 @@
|
||||
\textbf{PaaS} & \textbf{P}latform \textbf{a}s \textbf{a} \textbf{S}ervice \\
|
||||
\textbf{SaaS} & \textbf{S}oftware \textbf{a}s \textbf{a} \textbf{S}ervice \\
|
||||
\textbf{AWS} & \textbf{A}mazon \textbf{W}eb \textbf{S}ervices \\
|
||||
\textbf{GCE} & \textbf{G}oogle \textbf{C}ompute \textbf{E}ngine \\
|
||||
\textbf{OWASP} & \textbf{O}pen \textbf{W}eb \textbf{A}pplication \textbf{S}ecurity \textbf{P}roject \\
|
||||
\textbf{EC2} & \textbf{E}lastic \textbf{C}ompute \textbf{C}loud \\
|
||||
\textbf{IAM} & \textbf{I}dentity and \textbf{A}ccess \textbf{M}anagement \\
|
||||
\textbf{IaC} & \textbf{I}nfrastructure \textbf{a}s \textbf{C}ode \\
|
||||
\textbf{API} & \textbf{A}pplication \textbf{P}rogramming \textbf{I}nterface \\
|
||||
\textbf{SDK} & \textbf{S}oftware \textbf{D}evelopment \textbf{K}it \\
|
||||
\textbf{OS} & \textbf{O}perating \textbf{S}ystem \\
|
||||
@@ -15,7 +19,7 @@
|
||||
\textbf{UEFI} & \textbf{U}nified \textbf{E}xtensible \textbf{F}irmware \textbf{I}nterface \\
|
||||
\textbf{MAC} & \textbf{M}andatory \textbf{A}ccess \textbf{C}ontrol \\
|
||||
\textbf{XSS} & \textbf{C}ross \textbf{S}ite \textbf{S}cripting \\
|
||||
\textbf{cgroups} & \textbf{c}ontrol groups \\
|
||||
\textbf{cgroups} & \textbf{c}ontrol \textbf{groups} \\
|
||||
\textbf{CI/CD} & \textbf{C}ontinuous \textbf{I}ntegration / \textbf{C}ontinuous \textbf{D}elivery \\
|
||||
\textbf{DevOps} & \textbf{Dev}elopment \textbf{Op}eration\textbf{s} \\
|
||||
\textbf{LXC} & \textbf{L}inu\textbf{x} \textbf{C}ontainers \\
|
||||
@@ -27,6 +31,28 @@
|
||||
\textbf{VMM} & \textbf{V}irtual \textbf{M}achine \textbf{M}onitor \\
|
||||
\textbf{NFV} & \textbf{N}etwork \textbf{F}unction \textbf{V}irtualization \\
|
||||
\textbf{IPC} & \textbf{I}nter \textbf{P}rocess \textbf{C}ommunication \\
|
||||
\textbf{Vuls} & \textbf{VUL}nerability \textbf{S}canner \\
|
||||
\textbf{LUNAR} & \textbf{L}ockdown \textbf{UN}ix \textbf{A}uditing and \textbf{R}eporting \\
|
||||
\textbf{CVE} & \textbf{C}ommon \textbf{V}ulnerabilities and \textbf{E}xposures \\
|
||||
\textbf{NVD} & \textbf{N}ational \textbf{V}ulnerability \textbf{D}atabase \\
|
||||
\textbf{CVSS} & \textbf{C}ommon \textbf{V}ulnerability \textbf{S}coring \textbf{S}ystem \\
|
||||
\textbf{CPE} & \textbf{C}ommon \textbf{P}latform \textbf{E}numeration \\
|
||||
\textbf{CWE} & \textbf{C}ommon \textbf{W}eakness \textbf{E}numeration \\
|
||||
\textbf{NIST} & \textbf{N}ational \textbf{I}nstitute of \textbf{S}tandards and \textbf{T}echnology \\
|
||||
\textbf{OVAL} & \textbf{O}pen \textbf{V}ulnerability and \textbf{A}ssessment \textbf{L}anguage \\
|
||||
\textbf{CISA} & \textbf{C}ybersecurity \& \textbf{I}nfrastructure \textbf{S}ecurity \textbf{A}gency \\
|
||||
\textbf{CERT} & \textbf{C}omputer \textbf{E}mergency \textbf{R}esponse \textbf{T}eam \\
|
||||
\textbf{CAPEC} & \textbf{C}ommon \textbf{A}ttack \textbf{P}attern \textbf{E}nnumeration and \textbf{C}lassification \\
|
||||
\textbf{CCE} & \textbf{C}ommon \textbf{C}onfiguration \textbf{E}numeration \\
|
||||
\textbf{ATT\&CK} & \textbf{A}dversarial \textbf{T}actics, \textbf{T}echniques, and \textbf{C}ommon \textbf{K}nowledge \\
|
||||
\textbf{PoC} & \textbf{P}roof \textbf{o}f \textbf{C}oncept \\
|
||||
\textbf{SSH} & \textbf{S}ecure \textbf{SH}ell \\
|
||||
\textbf{AMI} & \textbf{A}mazon \textbf{M}achine \textbf{I}mage \\
|
||||
\textbf{GiB} & \textbf{G}ibi\textbf{B}yte \\
|
||||
\textbf{EBS} & \textbf{E}lastic \textbf{B}lock \textbf{S}tore \\
|
||||
\textbf{GHz} & \textbf{G}iga\textbf{H}ertz \\
|
||||
\textbf{Gbps} & \textbf{G}iga\textbf{b}its \textbf{p}er \textbf{s}econd \\
|
||||
\textbf{CIS} & \textbf{C}enter for \textbf{I}nternet \textbf{S}ecurity \\
|
||||
\textbf{ARP} & \textbf{A}ddress \textbf{R}esolution \textbf{P}rotocol \\
|
||||
\textbf{DNS} & \textbf{D}omain \textbf{N}ame \textbf{S}ystem \\
|
||||
\textbf{MitM} & \textbf{M}an-\textbf{i}n-\textbf{t}he-\textbf{M}iddle \\
|
||||
|
||||
@@ -49,6 +49,9 @@
|
||||
κάποια ειδική γνώση πάνω σε τεχνικά ζητήματα αλλά ούτε και στον τομέα της
|
||||
ασφάλειας υποδομών και των λειτουργικών συστημάτων.
|
||||
|
||||
\vskip 60pt
|
||||
\noindent \textbf{Λέξεις κλειδιά:} Νέφος, Ασφάλεια, Εικονικοποίηση, Δοχεία, Μικρο-υπηρεσίες, Αυτοματοποίηση
|
||||
|
||||
}
|
||||
|
||||
\clearpage % Abstract ended, start a new page
|
||||
|
||||
60
Abstract/abstractenglish.tex
Normal file
@@ -0,0 +1,60 @@
|
||||
\abstractenglish{
|
||||
% skip indentation just for this paragraph
|
||||
\textenglish{
|
||||
|
||||
\noindent Today, more and more people rely on IaaS services over traditional
|
||||
on-premise infrastructure to provide operational support to applications,
|
||||
services and business processes. This is because in this way this way, the
|
||||
costs of an organization or business are reduced as long as there is no need
|
||||
expenditure/investment on the purchase of equipment and the operational costs
|
||||
of using services IaaS is based on flexible billing models based on usage (of
|
||||
infrastructure resources that offered). In addition, it is possible to scale
|
||||
the offered remote infrastructure depending on the needs of the organisation
|
||||
and the current workload of the services and applications to be supported. In
|
||||
this way, the responsibility for and maintenance of the equipment to third
|
||||
parties while at the same time introducing a new model of trust between the
|
||||
user/organisation and the cloud provider. The increase interest by enterprises
|
||||
in virtualisation technologies which are a key the foundation of IaaS services,
|
||||
but also the rapid rise in popularity of technologies container technologies
|
||||
such as Docker has in turn begun to drive the adoption of the architectural
|
||||
microservices architecture for application development. An architecture based
|
||||
on both on virtualization technologies for housing applications in cloud
|
||||
infrastructures and container technologies for partitioning their functions,
|
||||
providing a an appropriate level of performance and scalability
|
||||
\footfullcite{awsMicroservices}. However, they remain directly addressable.
|
||||
security issues that may affect the cloud itself and/or the technologies on
|
||||
which it is based.
|
||||
|
||||
}
|
||||
|
||||
\clearpage
|
||||
|
||||
\textenglish{
|
||||
|
||||
In this paper we will first analyse the security issues related to the cloud
|
||||
and in particular those related to virtualization and container technologies.
|
||||
Then, we will analyze how these 2 technologies can be used with more safety
|
||||
security. But the purpose of the paper goes beyond that and moves to a
|
||||
practical level, proposing the solution of a tool that can implement in this
|
||||
way the proposed safe use of these technologies. In particular, this tool does
|
||||
not not only can create virtual machines across multiple cloud providers but
|
||||
also harden them in an automated manner. In addition, it is capable of
|
||||
installing these virtual machines the Docker container machine, which it can
|
||||
also harden. The main goal of the work is to make it easier for an organization
|
||||
to install and configure in an automated manner a secure, distributed
|
||||
environment (pro- host and operation) for the deployment and operation of a
|
||||
microservices application. This automation lies in the correct configuration of
|
||||
the tool, which does not require and does not require any special knowledge of
|
||||
technical or security issues. infrastructure and operating systems.
|
||||
|
||||
}
|
||||
|
||||
\vskip 60pt
|
||||
|
||||
\textenglish{
|
||||
\noindent \textbf{Keywords:} Cloud, Security, Virtualization, Containers, Micro-services, Automation
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
\clearpage % Abstract ended, start a new page
|
||||
585
Bibliography.bib
@@ -264,13 +264,14 @@ MySQL και το διακομιστή ιστού Nginx. Με αυτό τον τ
|
||||
λειτουργικό σύστημα ούτως ώστε κάθε δοχείο να περιέχει μόνο την εφαρμογή, τις
|
||||
βιβλιοθήκες και τις εξαρτήσεις της \footfullcite{ibmContainerVsVm}.
|
||||
|
||||
Η εικόνα \ref{fig:containerVsVm} παρουσιάζει τη διαφορά των δύο αρχιτεκτονικών
|
||||
Το σχήμα \ref{fig:containerVsVm} παρουσιάζει τις διαφορές ανάμεσα στην
|
||||
αρχιτεκτονική της εικονικοποίησης και των δοχείων:
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = .8\textwidth]{Figures/RedHat_Virtualization/virtualization-vs-containers_transparent.png}
|
||||
\captionof{figure}{Εικονικοποίηση έναντι δοχείων \cite{redhatVirtualizationDefinition}}
|
||||
\captionof{figure}{Χρήση εικονικοποίησης έναντι δοχείων \cite{redhatVirtualizationDefinition}}
|
||||
\label{fig:containerVsVm}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
@@ -411,8 +412,6 @@ Docker, το Quay \footfullcite{quay}, ένα εναλλακτικό αποθε
|
||||
της ταχείας διάθεσης και εκτέλεσης τους, συμβαδίζουν πλήρως με τον ρυθμό
|
||||
ανάπτυξης και παράδοσης που υποστηρίζουν οι παραπάνω μεθοδολογίες.
|
||||
|
||||
\clearpage
|
||||
|
||||
Έχοντας αυτά υπόψιν, γίνεται εμφανής και ο λόγος που τα δοχεία είναι η
|
||||
προτιμότερη επιλογή για την ανάπτυξη και παράδοση εφαρμογών που ακολουθούν την
|
||||
αρχιτεκτονική μικρο-υπηρεσιών. Σε αυτήν την περίπτωση, η εφαρμογή αποτελείται
|
||||
|
||||
@@ -942,7 +942,7 @@ API, ώστε να μπορεί να κάνει χρήση των υπερ-κλ
|
||||
|
||||
\clearpage
|
||||
|
||||
Στην εικόνα \ref{fig:FullVirtualization}
|
||||
Στο σχήμα \ref{fig:FullVirtualization}
|
||||
\cite{geeksforgeeksParavirtualizationDefinition} παρουσιάζεται η αρχιτεκτονική
|
||||
της πλήρους εικονικοποίησης όπου το φιλοξενούμενο λειτουργικό σύστημα (της
|
||||
εικονικής μηχανής) επιβάλλεται να περάσει τα αιτήματα του (πρόσβασης πόρων)
|
||||
@@ -958,7 +958,7 @@ API, ώστε να μπορεί να κάνει χρήση των υπερ-κλ
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
Αντιθέτως, στην εικόνα \ref{fig:ParaVirtualization} όπου και απεικονίζεται η
|
||||
Αντιθέτως, στo σχήμα \ref{fig:ParaVirtualization} όπου και απεικονίζεται η
|
||||
αρχιτεκτονική της παρα-εικονικοποίησης, βλέπουμε πως μέσω των υπερ-κλήσεων, όλα
|
||||
τα αιτήματα προορίζονται στη στρώση εικονικοποίησης και από εκεί στο κύριο
|
||||
σύστημα (χωρίς την ανάγκη κάποιας επεξεργασίας ή μετάφρασης).
|
||||
|
||||
@@ -1,24 +1,267 @@
|
||||
\chapter{Σχετικές Εργασίες} \label{relevantWork}
|
||||
|
||||
Με την πάροδο των χρόνων και τη ραγδαία αύξηση ενδιαφέροντος προς τον κλάδο της
|
||||
υπολογιστικής νέφους, άρχισε να γίνεται όλο και πιο επιτακτική η ανάγκη για
|
||||
αυτοματοποιημένο στήσιμο και προστασία των υποδομών των επιχειρήσεων. Η χρήση
|
||||
τεχνολογιών εικονικοποίησης και η άνοδος υπηρεσιών IaaS, έχει ελαφρύνει τον
|
||||
φόρτο εργασίας όσον αφορά το στήσιμο των υποδομών αφού πλέον υπάρχουν πολλά
|
||||
εργαλεία στα οποία γίνεται καθορισμός τους. Η αυτοματοποίηση της ασφάλισης τους
|
||||
όμως είναι ακόμα σε πρώιμο στάδιο. Οι περισσότερες υπηρεσίες που διατίθενται
|
||||
στους χρήστες κάνουν χρήση τεχνολογιών εικονικοποίησης έμμεσα από τον πάροχο
|
||||
νέφους που χρησιμοποιούν και τεχνολογίες δοχείων άμεσα από επιλογή τους λόγω
|
||||
της υπεροχής που παρέχουν στη διαχείριση. Όλες οι υπηρεσίες όμως είναι εν
|
||||
δυνάμει ευάλωτες σε επιθέσεις εάν δε ληφθούν τα απαραίτητα μέτρα προστασίας και
|
||||
αφήσουν ανοιχτά σημεία εισόδου στο δίκτυο τους.
|
||||
\noindent Με την πάροδο των χρόνων και τη ραγδαία αύξηση ενδιαφέροντος προς τον
|
||||
κλάδο της υπολογιστικής νέφους, άρχισε να γίνεται όλο και πιο επιτακτική η
|
||||
ανάγκη για αυτοματοποιημένο στήσιμο και προστασία των υποδομών των
|
||||
επιχειρήσεων. Η χρήση τεχνολογιών εικονικοποίησης και η άνοδος υπηρεσιών IaaS,
|
||||
έχει ελαφρύνει τον φόρτο εργασίας όσον αφορά το στήσιμο των υποδομών αυτών,
|
||||
αφού πλέον υπάρχουν πολλά εργαλεία στα οποία γίνεται καθορισμός τους. Η
|
||||
αυτοματοποίηση της ασφάλισης τους όμως είναι ακόμα σε πρώιμο στάδιο. Οι
|
||||
περισσότερες υπηρεσίες που διατίθενται στους χρήστες κάνουν χρήση τεχνολογιών
|
||||
εικονικοποίησης έμμεσα από τον πάροχο νέφους που χρησιμοποιούν και τεχνολογίες
|
||||
δοχείων άμεσα από επιλογή τους λόγω της υπεροχής που παρέχουν στη διαχείριση.
|
||||
Όλες οι υπηρεσίες όμως είναι εν δυνάμει ευάλωτες σε επιθέσεις εάν δε ληφθούν τα
|
||||
απαραίτητα μέτρα προστασίας και αφήσουν ανοιχτά σημεία εισόδου στα συστήματά
|
||||
τους.
|
||||
|
||||
Η παρούσα εργασία έχει ως στόχο την ανάπτυξη ενός εργαλείου που επιτυγχάνει την
|
||||
αυτοματοποίηση τριών τομέων. Την επικοινωνία με τον πάροχο νέφους για την
|
||||
αίτηση διάθεσης υπολογιστικών πόρων, την ασφάλιση των πόρων αυτών και τέλος την
|
||||
εγκατάσταση, ασφάλιση και χρήση του Docker για τη διάθεση εφαρμογών που
|
||||
βρίσκονται στο Dockerhub. Το επίσημο αποθετήριο του Docker.
|
||||
βρίσκονται στο Docker Hub. Το επίσημο αποθετήριο του Docker.
|
||||
|
||||
Στην παρούσα ενότητα θα γίνει αναφορά σε εργαλεία που έχουν αναπτυχθεί για έναν
|
||||
ή παραπάνω από αυτούς τους τρεις τομείς και θα πραγματοποιηθεί σύγκριση τους
|
||||
Στην ενότητα αυτή θα γίνει αναφορά σε εργαλεία που έχουν αναπτυχθεί για έναν ή
|
||||
παραπάνω από αυτούς τους τρεις τομείς και θα πραγματοποιηθεί σύγκριση τους
|
||||
ανάλογα με τον τρόπο λειτουργίας τους και τις δυνατότητες που παρέχουν.
|
||||
|
||||
\clearpage
|
||||
|
||||
\section{Αυτοματοποίηση δημιουργίας εικονικών μηχανών}
|
||||
|
||||
Σε σχέση με τα εργαλεία αυτοματοποίησης δημιουργίας εικονικών μηχανών, τα
|
||||
κριτήρια που θα ληφθούν υπόψιν για την σύγκριση με το εργαλείο που προτείνει η
|
||||
διπλωματική εργασία είναι τα εξής:
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item \textbf{Ευελιξία κατά την χρήση}:
|
||||
|
||||
Το εργαλείο πρέπει να μπορεί να προσαρμόζεται στις ανάγκες του χρήστη
|
||||
όταν αυτός χρειάζεται να πραγματοποιήσει ορισμένες αλλαγές κατά την
|
||||
χρήση του.
|
||||
|
||||
\item \textbf{Ευκολία κατά την χρήση}:
|
||||
|
||||
Το εργαλείο πρέπει να μπορεί να χρησιμοποιηθεί εύκολα από έναν χρήστη
|
||||
που έχει χρησιμοποιήσει στο παρελθόν εργαλεία γραμμής εντολών. Οι
|
||||
παράμετροι του πρέπει να ακολουθούν ένα μοτίβο που θα διευκολύνει την
|
||||
κατανόηση της λειτουργίας τους και τον συνδυασμό τους για ένα επιθυμητό
|
||||
αποτέλεσμα.
|
||||
|
||||
\item \textbf{Υποστήριξη μεγάλων ονομάτων στον κλάδο}:
|
||||
|
||||
Το εργαλείο πρέπει να υποστηρίζει την επικοινωνία με τα νέφη μεγάλων
|
||||
εταιρειών στον κλάδο της νεφο-υπολογιστικής, ώστε να είναι εύκολο για
|
||||
να έναν χρήστη να παραμείνει στον πάροχο της επιλογής του.
|
||||
|
||||
\item \textbf{Ευκολία στην επέκταση}:
|
||||
|
||||
Το εργαλείο πρέπει να είναι εύκολο στην επέκταση του, ώστε να μπορεί να
|
||||
αυτοματοποιηθεί περισσότερο η διαδικασία δημιουργίας εικονικών μηχανών.
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\clearpage
|
||||
|
||||
\subsection{Εργαλεία δημιουργίας εικονικών μηχανών}
|
||||
|
||||
Τα εργαλεία με τα οποία θα γίνει σύγκριση περιγράφονται στην συνέχεια ως εξής:
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item \textbf{Terraform}:
|
||||
|
||||
Το Terraform είναι ένα δημοφιλές εργαλείο ανοιχτού κώδικα που
|
||||
αναπτύχθηκε από την εταιρεία HashiCorp. Αποτελεί ένα εργαλείο, κατά την
|
||||
χρήση του οποίου ο χρήστης καθορίζει τα χαρακτηριστικά της υποδομής που
|
||||
θέλει να δημιουργήσει σε ένα αρχείο που ακολουθεί συγκεκριμένη σύνταξη.
|
||||
Αυτό το εντάσσει στην κατηγορίας \textquote{υποδομή ως κώδικας
|
||||
(Infrastructure as Code - IaC)} και χρησιμοποιείται για τον καθορισμό
|
||||
των υποδομών που θα χρησιμοποιηθούν για την στέγαση εφαρμογών. Το
|
||||
Terraform υποστηρίζει πολλούς παρόχους νέφους και επιτρέπει την
|
||||
αυτοματοποίηση της διαδικασίας δημιουργίας υποδομών σε αυτούς. Ο τρόπος
|
||||
λειτουργίας του είναι αρκετά απλός. Αφού ο χρήστης έχει δημιουργήσει το
|
||||
αρχείο που περιγράφει την υποδομή, το εκτελεί για να γίνουν οι
|
||||
απαραίτητες ενέργειες. Έπειτα ο χρήστης μπορεί να αποδεσμεύσει τους
|
||||
πόρους που δημιουργήθηκαν όταν δεν τους χρειάζεται πλέον.
|
||||
|
||||
\item \textbf{Libcloud CLI} \footfullcite{libcloud-cli}:
|
||||
|
||||
Αποτελεί την δεύτερη τροποποιημένη έκδοση από ένα τρίτο πρόσωπο, ενός
|
||||
προγράμματος που επιχειρούσε να επιτύχει την δημιουργία ενός εργαλείου
|
||||
γραμμής εντολών που χρησιμοποιεί την βιβλιοθήκη libcloud για την
|
||||
δημιουργία εικονικών μηχανών κατά μήκος διάφορων παρόχων νέφους. Είναι
|
||||
ένα εργαλείο γραμμής εντολών που απαιτεί αρχείο ρυθμίσεων μονάχα για
|
||||
την αυθεντικοποίηση με τους παρόχους νέφους.
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\clearpage
|
||||
|
||||
\subsection{Σύγκριση με το SecDep}
|
||||
|
||||
Σχετικά με τα κριτήρια που έχουν οριστεί για την σύγκριση με εργαλεία που ως
|
||||
κύριο στόχο έχουν την δημιουργία εικονικών μηχανών, το εργαλείο που προτείνει η
|
||||
διπλωματική εργασία παρέχει όλα τα απαραίτητα χαρακτηριστικά.
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item \textbf{Σύγκριση με Terraform}:
|
||||
|
||||
Χρειάζεται την δημιουργία ενός αρχείου πριν την χρήση του και κάθε αλλαγή
|
||||
απαιτεί την τροποποίηση του. Αυτό το καθιστά λιγότερο ευέλικτο σε σχέση με άλλα
|
||||
εργαλεία. Είναι σχετικά εύκολο στην χρήση όπως τα υπόλοιπα και δύναται να
|
||||
χρησιμοποιήσει τα νέφη όλων των μεγάλων παρόχων. Παρόλα αυτά δεν αποτελεί
|
||||
εργαλείο που μπορεί να επεκταθεί εύκολα καθώς ο τρόπος λειτουργίας του το
|
||||
καθιστά αυτοτελές.
|
||||
|
||||
\item \textbf{Σύγκριση με Libcloud CLI}:
|
||||
|
||||
Το δεύτερο πιο πρόσφατο εργαλείο που κάνει χρήση της βιβλιοθήκης
|
||||
libcloud μετά από αυτό που προτείνει η διπλωματική εργασία. Είναι
|
||||
αρκετά ευέλικτο και εύκολο στην χρήση, παρόλα αυτά πλέον υποστηρίζει
|
||||
μονάχα έναν πάροχο νέφους, ο οποίος δεν αποτελεί δημοφιλή επιλογή
|
||||
γενικότερα. Θα μπορούσε να επεκταθεί η λειτουργικότητα του αλλά έχει να
|
||||
ανανεωθεί από το 2018.
|
||||
|
||||
\end{itemize}
|
||||
|
||||
Ο χρήστης δύναται κατά την χρήση του SecDep να επιλέξει τις ενέργειες και τα
|
||||
χαρακτηριστικά που επιθυμεί για την εικονική μηχανή του. Όλες οι παράμετροι
|
||||
είναι εύκολα κατανοητές και συνδυάζονται μεταξύ τους για να επιτευχθεί το
|
||||
επιθυμητό αποτέλεσμα. Υποστηρίζει όλους τους δημοφιλείς παρόχους νέφους και
|
||||
όλες τις καλές πρακτικές ενός εργαλείου γραμμής εντολών όπως ο έλεγχος
|
||||
σφαλμάτων κατά την εισαγωγή παραμέτρων. Επιπλέον, μπορεί εύκολα να επεκταθεί η
|
||||
χρήση του, είτε εισάγοντας έτοιμες εντολές σε αρχεία bash είτε προσθέτοντας
|
||||
νέες ενέργειες στον κώδικα του αφού πρόκειται για ένα αρχείο python.
|
||||
|
||||
\clearpage
|
||||
|
||||
\section{Αυτοματοποίηση σκλήρυνσης εικονικών μηχανών}
|
||||
|
||||
Τα κριτήρια που θα ληφθούν υπόψιν για α εργαλεία αυτοματοποίησης σκλήρυνσης
|
||||
εικονικών μηχανών είναι τα εξής:
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item \textbf{Υποστήριξη πολλών διανομών}:
|
||||
|
||||
Το εργαλείο πρέπει να υποστηρίζει διάφορες διανομές Linux και να είναι
|
||||
αρκετά ευέλικτο ώστε να μπορεί να ξεχωρίσει την διανομή στην οποία
|
||||
εκτελείται.
|
||||
|
||||
\item \textbf{Ευκολία κατά την χρήση}:
|
||||
|
||||
Το εργαλείο πρέπει να μπορεί να χρησιμοποιηθεί εύκολα από έναν χρήστη.
|
||||
Ιδανικά να αρκεί η εκτέλεσή του σε μια εικονική μηχανή χωρίς την ανάγκη
|
||||
εγκατάστασης εξαρτήσεων.
|
||||
|
||||
\item \textbf{Εύρος σκλήρυνσης}:
|
||||
|
||||
Το εργαλείο πρέπει να μπορεί να σκληρύνει την εικονική μηχανή σε
|
||||
ικανοποιητικό βαθμό και να μην περιορίζεται σε λίγες μονάχα επιλογές.
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\subsection{Εργαλεία σκλήρυνσης εικονικών μηχανών}
|
||||
|
||||
Τα παρακάτω εργαλεία θα συγκριθούν με το harden. Το δεύτερο εκτελέσιμο αρχείο
|
||||
του εργαλείου SecDep, το οποίο κατά την επιλογή του χρήστη εκτελείται σε μια
|
||||
εικονική μηχανή μετά την δημιουργία της.
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item \textbf{JShielder} \footfullcite{jshielder}:
|
||||
|
||||
Το JShielder είναι ένα εργαλείο ανοιχτού κώδικα που αναπτύχθηκε από τον
|
||||
Jason Soto με σκοπό την αυτοματοποίηση σκλήρυνσης λειτουργικών
|
||||
συστημάτων Linux. Ο πηγαίος κώδικας του βρίσκεται στο GitHub και ο
|
||||
τρόπος λειτουργίας του είναι η εκτέλεση του ως χρήστης με διαχειριστικά
|
||||
δικαιώματα στο σύστημα.
|
||||
|
||||
\item \textbf{nixarmor} \footfullcite{nixarmor}:
|
||||
|
||||
Ένα εργαλείο ανοιχτού κώδικα που στεγάζεται στο GitHub και αναπτύχθηκε
|
||||
από τον Emir Ozer. Περιέχει διαφορετικά εκτελέσιμα αρχεία για την
|
||||
σκλήρυνση διάφορων διανομών Linux τα οποία μπορούν να εκτελεστούν ως
|
||||
αυτόνομα προγράμματα από τον χρήστη.
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\subsection{Σύγκριση με το harden}
|
||||
|
||||
Σχετικά με τα δηλωθέντα κριτήρια, το SecDep ικανοποιεί όλους τους παραπάνω
|
||||
στόχους.
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item \textbf{Σύγκριση με JShielder}:
|
||||
|
||||
Το JShielder παρέχει ένα ικανοποιητικό εύρος σκλήρυνσης του συστήματος
|
||||
και η ευκολία στην χρήση του το καθιστά ένα εργαλείο που μπορεί να
|
||||
χρησιμοποιηθεί από έναν χρήστη με μικρή εμπειρία στον κλάδο. Παρόλα
|
||||
αυτά, δεν υποστηρίζει πολλές διανομές και οι εκδόσεις των διανομών που
|
||||
υποστηρίζονται μέσω αυτού είναι αρκετό καιρό ξεπερασμένες. Θα μπορούσε
|
||||
να βελτιωθεί με μια ανανέωση του πηγαίου του κώδικα αλλά η ανάπτυξή του
|
||||
φαίνεται να έχει σταματήσει το 2019.
|
||||
|
||||
\item \textbf{Σύγκριση με το nixarmor}:
|
||||
|
||||
Σε αντίθεση με το JShielder, το nixarmor για να χρησιμοποιηθεί με τον
|
||||
ίδιο τρόπο που χρησιμοποιούνται τα υπόλοιπα εργαλεία θα πρέπει να
|
||||
επεκταθεί με την προσθήκη κώδικα που να του επιτρέπει να ξεχωρίζει ποιο
|
||||
είναι το κατάλληλο εκτελέσιμο για την κάθε διανομή. Στην αντίθετη
|
||||
περίπτωση, πάλι η χρήση του είναι εύκολη διότι ο χρήστης μπορεί να
|
||||
επιλέξει και να εκτελέσει χειροκίνητα ένα από τα εκτελέσιμα αρχεία που
|
||||
περιέχει. Η σκλήρυνση που παρέχει καλύπτει πολλούς τομείς μιας διανομής
|
||||
και μπορεί εύκολα να προστεθούν επιπλέον συναρτήσεις στον κώδικα του.
|
||||
Παρόλα αυτά, η ανάπτυξη του έχει παύσει από το 2015 και οι διανομές που
|
||||
υποστηρίζει έχουν περιοριστεί σε μονάχα 4.
|
||||
|
||||
\end{itemize}
|
||||
|
||||
Συγκριτικά με τα παραπάνω εργαλεία, το harden υποστηρίζει την ικανότητα
|
||||
αναγνώρισης της διανομής στην οποία εκτελείται και μπορεί δυναμικά να αλλοιώσει
|
||||
την συμπεριφορά του ανάλογα την διανομή. Οι υποστηριζόμενες διανομές είναι 6
|
||||
και οι λειτουργίες του αν και σύμφωνα με τα αποτελέσματα του κεφαλαίου
|
||||
\ref{experimentationANDresults} είναι ικανοποιητικές, θα μπορούσαν εύκολα να
|
||||
επεκταθούν με την προσθήκη νέων συναρτήσεων. Επιπλέον, αυτό το ένα εκτελέσιμο,
|
||||
παράγει κατά την εκτέλεση του δύο ακόμα, τα οποία θα εκτελούνται περιοδικά με
|
||||
σκοπό την αυτόματη ενημέρωση του συστήματος και το κλείσιμο αχρησιμοποίητων
|
||||
θυρών.
|
||||
|
||||
\clearpage
|
||||
|
||||
\section{Αυτοματοποίηση εγκατάστασης/σκλήρυνσης του Docker}
|
||||
|
||||
Μια από τις λειτουργίες του εκτελέσιμου harden πέρα από την σκλήρυνση του
|
||||
συστήματος, είναι και η αυτόματη εγκατάσταση και σκλήρυνση του Docker. Αυτό
|
||||
επιτυγχάνεται με την εγκατάσταση μιας τροποποιημένης έκδοσης του, η οποία
|
||||
δύναται να εκτελεστεί από οποιονδήποτε χρήστη του συστήματος, δίχως την ανάγκη
|
||||
διαχειριστικών δικαιωμάτων. Έπειτα πραγματοποιείται αντικατάσταση του αρχικού
|
||||
container runtime (runC) με το runsc, από το gVisor. Αυτό, αναπτύχθηκε από την
|
||||
Google και αποτελεί μια ασφαλέστερη επιλογή από το αρχικό, διότι περιορίζει τις
|
||||
κλήσεις του συστήματος (system calls) στις άκρως απαραίτητες για την λειτουργία
|
||||
του Docker. Ο συνδυασμός αυτών των δύο βημάτων έχει ήδη περιορίσει την
|
||||
επιφάνεια επίθεσης σε περίπτωση απόδρασης από ένα δοχείο και έχει μειώσει την
|
||||
πιθανότητα κάτι τέτοιο να συμβεί.
|
||||
|
||||
Επιπροσθέτως, ρυθμίζεται ο δαίμονας του Docker ώστε να εκτελείται με μεγαλύτερη
|
||||
ασφάλεια. Αυτό επιτυγχάνεται χρησιμοποιώντας παραμέτρους όπως
|
||||
\textquote{no-new-privileges} για να μην μπορεί ένα δοχείο να λάβει περισσότερα
|
||||
δικαιώματα στην συνέχεια της εκτέλεσης του, καθώς και ενεργοποιώντας τις
|
||||
δυνατότητες του SELinux εάν αυτό υποστηρίζεται από την εκάστοτε υποκείμενη
|
||||
διανομή του συστήματος. Τέλος, πραγματοποιείται εγκατάσταση της υπηρεσίας σε
|
||||
μορφή δοχείου ονόματι \textquote{watchtower}, η οποία έχει ως στόχο την
|
||||
αυτόματη ενημέρωση των δοχείων που εκτελούνται στο σύστημα.
|
||||
|
||||
\subsection{Καινοτομία του SecDep}
|
||||
|
||||
Δεδομένου ότι πολλές από τις παραπάνω τεχνολογίες είναι σχετικά νέες, δεν
|
||||
υπάρχουν στην αγορά εργαλεία που να έχουν ως κύριο στόχο την αυτόματη εφαρμογή
|
||||
τους. Τα περισσότερα επικεντρώνονται στην σκλήρυνση των δοχείων και όχι του
|
||||
δαίμονα, ενώ όσα επιχειρούν να σκληρύνουν τον δαίμονα έχουν να ανανεωθούν πολύ
|
||||
προτού έρθουν στο προσκήνιο οι τεχνολογίες που χρησιμοποιεί το harden.
|
||||
Επομένως, δεν θα υπήρχε δίκαιη σύγκριση με αυτά. Στον συγκεκριμένο τομέα, το
|
||||
SecDep προσφέρει μια ολοκληρωμένη λύση, η οποία εκτελεί όλα τα παραπάνω βήματα
|
||||
δίχως την ανάγκη αλληλεπίδρασης ή περαιτέρω ρυθμίσεων από τον χρήστη.
|
||||
|
||||
@@ -1,3 +1,495 @@
|
||||
\chapter{Ανάπτυξη Συστήματος} \label{projectDevelopment}
|
||||
|
||||
\section{Αρχές και Πλαίσιο Σχεδίασης για ασφαλές στήσιμο υπηρεσιών σε μια ιδεατή μηχανή με χρήση της τεχνολογίας Docker} \label{framework}
|
||||
\noindent Στην παρούσα ενότητα θα αναλυθούν οι τεχνολογίες που χρησιμοποιήθηκαν
|
||||
για την υλοποίηση του συστήματος, οι αποφάσεις που πάρθηκαν κατά την ανάπτυξη
|
||||
του και οι σχεδιαστικές επιλογές που έγιναν. Επίσης, θα πραγματοποιηθεί
|
||||
απεικόνιση των συσχετίσεων μεταξύ των συστατικών του συστήματος και θα αναλυθεί
|
||||
περαιτέρω η λειτουργία τους.
|
||||
|
||||
\section{Αποφάσεις που πάρθηκαν κατά την ανάπτυξη} \label{developmentDecisions}
|
||||
|
||||
Κατά την ανάπτυξη του συστήματος, προκειμένου να επιτευχθούν οι στόχοι που
|
||||
θέσαμε στην ενότητα \ref{overcomingDockerDisadvantages} και συγκεκριμένα για
|
||||
την επικοινωνία με διάφορους παρόχους νέφους, επιλέχθηκε να γίνει χρήση της
|
||||
βιβλιοθήκης libcloud \footfullcite{libcloud}. Μια από τις δύο επιλογές
|
||||
βιβλιοθηκών της Apache \footfullcite{apache} για την επικοινωνία με παρόχους
|
||||
νέφους. Συγκριτικά με την βιβλιοθήκη jclouds \footfullcite{jclouds}, η οποία
|
||||
σχεδιάστηκε για την γλώσσα Java \footfullcite{java}, η libcloud είναι πιο απλή
|
||||
στην χρήση, αφού είναι σχεδιασμένη για την γλώσσα Python \footfullcite{python}.
|
||||
Επιπροσθέτως, η libcloud είναι πιο διαδεδομένη και η γλώσσα python αποτελεί μια
|
||||
πιο ευέλικτη επιλογή για τις ανάγκες του εργαλείου.
|
||||
|
||||
Η ανάγκη για μια βιβλιοθήκη που θα λειτουργεί ως μεσάζοντας μεταξύ του
|
||||
εργαλείου και των παρόχων νέφους, οφείλεται στο γεγονός ότι οι πάροχοι νέφους
|
||||
δεν διαθέτουν ένα κοινό API για την διαχείριση των υποδομών τους. Απεναντίας, ο
|
||||
καθένας από αυτούς διαθέτει το δικό του API, το οποίο χρησιμοποιείται έμμεσα
|
||||
μέσω του πίνακα ελέγχου του παρόχου που βρίσκεται στην ιστοσελίδα του, ενός
|
||||
δικού του εργαλείου γραμμής εντολών, ή άμεσα μέσω της βιβλιοθήκης που παρέχει ο
|
||||
ίδιος. Η libcloud αποτελεί μια προσπάθεια δημιουργίας ενός ενιαίου API, το
|
||||
οποίο χρησιμοποιώντας τις ίδιες συναρτήσεις, επιχειρεί να προσκομίσει ίδια
|
||||
αποτελέσματα ανεξαρτήτως του παρόχου νέφους που επιλέχθηκε.
|
||||
|
||||
\clearpage
|
||||
|
||||
Παρ όλη την προσπάθεια που καταβλήθηκε από την libcloud όμως, για την ενοποίηση
|
||||
αυτή, οι διαφορές στους τρόπους λειτουργίας του κάθε παρόχου αρχίζουν να
|
||||
εμφανίζονται σύντομα κατά την ανάπτυξη. Για το εργαλείο που προτείνει η παρούσα
|
||||
διπλωματική εργασία, χρειάζεται να γίνει χρήση των λειτουργιών
|
||||
\textquote{Compute} της βιβλιοθήκης. Στην αρχική σελίδα της, αναφέρεται
|
||||
υποστήριξη για πάνω από 50 παρόχους. Κατά την σελίδα τεκμηρίωσης
|
||||
\footfullcite{libcloudProviders} για τις λειτουργίες \textquote{Compute},
|
||||
αναφέρονται 48 πάροχοι σε έναν πίνακα ο οποίος αναγράφει την υποστήριξη ή
|
||||
απουσία αυτής, διάφορων συναρτήσεων εικονικών μηχανών. Στις συναρτήσεις αυτές
|
||||
περιλαμβάνονται η δημιουργία εικονικών μηχανών, η εκκίνηση, η παύση, η διαγραφή
|
||||
τους και εν γένει όσες λειτουργίες είναι απαραίτητες για την ολοκληρωμένη
|
||||
λειτουργία του εργαλείου. Από αυτούς τους 48 παρόχους, οι 25 υποστηρίζουν και
|
||||
τις 9 συναρτήσεις. Ωστόσο, από αυτούς τους 25 έπρεπε να αφαιρεθούν οι 20 για
|
||||
λόγους όπως η μη ύπαρξη τεκμηρίωσης χρήσης από την libcloud, η μη συνέχιση
|
||||
λειτουργίας τους, η έλλειψη πληροφοριών τιμής ή δοκιμαστικής περιόδου για τις
|
||||
υπηρεσίες τους και η αδυναμία δημιουργίας λογαριασμού στην επίσημη σελίδα τους.
|
||||
Επομένως, υπάρχουν εν τέλει 5 πάροχοι νέφους που δύναται να χρησιμοποιηθούν
|
||||
υποστηρίζοντας όλες τις πιθανές λειτουργίες διαχείρισης εικονικών μηχανών.
|
||||
Τέλος, από αυτούς τους 5, επιλέχθηκαν για επίσημη υποστήριξη από το εργαλείο
|
||||
που προτείνεται στην παρούσα διπλωματική εργασία, τα τρία μεγαλύτερα ονόματα
|
||||
του χώρου, οι Amazon, Google και Microsoft. Οι άλλοι δύο είτε δεν παρείχαν
|
||||
δοκιμαστική περίοδο των υπηρεσιών τους, είτε δεν υπήρχε εμπιστοσύνη ως προς την
|
||||
ποιότητα των υπηρεσιών αυτών.
|
||||
|
||||
Παρακάτω θα διαπιστώσουμε πως ακόμα και με την χρήση της βιβλιοθήκης libcloud
|
||||
και την επίσημη υποστήριξη όλων των λειτουργιών για κάθε πάροχο, υπήρχε η
|
||||
ανάγκη χρήσης της επίσημης βιβλιοθήκης της Azure για την δημιουργία Resource
|
||||
Group \footfullcite{azure-mgmt-resource}, Virtual Network
|
||||
\footfullcite{azure-mgmt-network} διότι αυτές οι λειτουργίες δεν υποστηρίζονται
|
||||
μέσω της libcloud. Επιπροσθέτως, δίχως την υποστήριξη των λειτουργιών αυτών, ο
|
||||
χρήστης θα ήταν υποχρεωμένος να δημιουργεί αυτούς τους πόρους χειροκίνητα ή να
|
||||
είναι περιορισμένος μονάχα σε μια γεωγραφική τοποθεσία. Οι δύο τελευταίες
|
||||
επιλογές πάνε ενάντια σε έναν από τους βασικότερους στόχους του εργαλείου. Την
|
||||
ομοιόμορφη λειτουργία για κάθε πάροχο νέφους που υποστηρίζεται.
|
||||
|
||||
\clearpage
|
||||
|
||||
Πέρα από την απόφαση για την χρήση της libcloud και την γλώσσα προγραμματισμού
|
||||
Python, πάρθηκε επίσης η απόφαση για την υποστήριξη των 6 δημοφιλέστερων
|
||||
επιλογών για λειτουργικά συστήματα Linux σε περιβάλλοντα διακομιστών. Οι
|
||||
διανομές αυτές υποστηρίζονται και για τους 3 παρόχους νέφους και κάθε μια από
|
||||
αυτές περιλαμβάνει διαφορετικές εκδόσεις της κάθε διανομής. Αυτές είναι οι εξής
|
||||
για κάθε πάροχο:
|
||||
|
||||
\begin{savenotes}
|
||||
\selectfont
|
||||
\begin{table}[!ht]
|
||||
\caption{Υποστηριζόμενες εκδόσεις διανομών για κάθε πάροχο}
|
||||
\renewcommand{\arraystretch}{1.5}
|
||||
\centering
|
||||
\textgreek{\begin{tabular}{lc|c|c|c|}
|
||||
\cline{3-5}
|
||||
& & \multicolumn{3}{c|}{Πάροχοι} \\ \cline{3-5}
|
||||
& & AWS & Azure & GCE \\ \hline
|
||||
\multicolumn{1}{|c|}{\multirow{6}{*}{\rotatebox{90}{Διανομές}}} & Ubuntu \footfullcite{ubuntu} & 22.04, 22.10 & 22.04, 22.10 & Όλες \\ \cline{2-5}
|
||||
\multicolumn{1}{|c|}{} & Debian \footfullcite{debian} & 10, 11 & 10, 11 & Όλες \\ \cline{2-5}
|
||||
\multicolumn{1}{|c|}{} & CentOS \footfullcite{centos} & 7, 8, 9 & 8.4, 8.5 & Όλες \\ \cline{2-5}
|
||||
\multicolumn{1}{|c|}{} & Fedora \footfullcite{fedora} & 37 & 36, 37 & Όλες \\ \cline{2-5}
|
||||
\multicolumn{1}{|c|}{} & Red Hat Enterprise Linux \footfullcite{redhat} & 7.9, 8.6, 9 & 8.6, 9.1 & Όλες \\ \cline{2-5}
|
||||
\multicolumn{1}{|c|}{} & openSUSE Leap \footfullcite{opensuse} & 15.3, 15.4 & 15.3 15.4 & Όλες \\ \hline
|
||||
\end{tabular}}
|
||||
\label{table:supportedDistributions}
|
||||
\renewcommand{\arraystretch}{1}
|
||||
\end{table}
|
||||
\end{savenotes}
|
||||
|
||||
Ο λόγος που οι εκδόσεις είναι συγκεκριμένες για τους παρόχους AWS και Azure,
|
||||
είναι διότι ο αριθμός των διαθέσιμων διανομών και εκδόσεων τους είναι
|
||||
υπερβολικά μεγάλος και κατά την εκτέλεση της λειτουργίας δημιουργίας λίστας
|
||||
τους ή κατά τον έλεγχο της ορθότητας δεδομένων που εισάγει ο χρήστης, το
|
||||
πρόγραμμα θα καθυστερούσε σε τεράστιο βαθμό να ολοκληρωθεί.
|
||||
|
||||
\section{Απαιτήσεις από το εργαλείο} \label{toolRequirements}
|
||||
|
||||
Κατά την ανάπτυξη του εργαλείου, έγινε μια προσπάθεια να καλυφθούν ορισμένες
|
||||
βασικές απαιτήσεις που θα έπρεπε να ικανοποιεί. Όπως όλα τα εργαλεία, έτσι και
|
||||
αυτό έχει έναν σκοπό να εκπληρώσει. Ο σκοπός αυτός είναι η διευκόλυνση του
|
||||
χρήστη ή ενός οργανισμού, στην εγκατάσταση και διαμόρφωση με αυτοματοποιημένο
|
||||
τρόπο ενός ασφαλούς, κατανεμημένου περιβάλλοντος για την εγκατάσταση και
|
||||
λειτουργία μιας εφαρμογής μικρο-υπηρεσιών. Για να γίνει αυτό πραγματικότητα,
|
||||
πρέπει το εργαλείο να ικανοποιεί τις παρακάτω απαιτήσεις.
|
||||
|
||||
\clearpage
|
||||
|
||||
\subsection{Λειτουργικές απαιτήσεις}
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την χρήση των 3 μεγαλύτερων
|
||||
ονομάτων στον κλάδο της νεφο-υπολογιστικής}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την χρήση των 6
|
||||
δημοφιλέστερων διανομών για περιβάλλον διακομιστή}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να λειτουργεί μέσω της γραμμής εντολών
|
||||
ώστε να μπορεί να αυτοματοποιηθεί περαιτέρω η εκτέλεση των εντολών του}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την
|
||||
λειτουργία εμφάνισης λίστας των διαθέσιμων μεγεθών εικονικής μηχανής}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την
|
||||
λειτουργία εμφάνισης λίστας των διαθέσιμων τοποθεσιών}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την
|
||||
λειτουργία εμφάνισης λίστας των διαθέσιμων διανομών}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει για κάθε εντολή που επιδέχεται
|
||||
παραμέτρους, να ρωτάει τον χρήστη για κάθε παράμετρο που δεν δόθηκε}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να ελέγχει την εγκυρότητα κάθε παραμέτρου
|
||||
που δίνεται από τον χρήστη}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία δημιουργίας
|
||||
εικονικής μηχανής}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία παύσης
|
||||
εικονικής μηχανής}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία εκκίνησης
|
||||
εικονικής μηχανής}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία
|
||||
επανεκκίνησης εικονικής μηχανής}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία διαγραφής
|
||||
εικονικής μηχανής}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την σύνδεση με ssh ακόμα
|
||||
και χωρίς να διαθέτει ο χρήστης πρόγραμμα ssh}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία εμφάνισης
|
||||
όλων των εικονικών μηχανών που διαχειρίζεται}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να εμφανίζει μηνύματα λάθους σε περίπτωση
|
||||
που κάτι πάει στραβά κατά την εκτέλεση}
|
||||
|
||||
\item \textbf{το εργαλείο πρέπει να υποστηρίζει την διαδραστική διαμόρφωση
|
||||
του αρχείου ρυθμίσεων του}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την εκτέλεση εξωτερικού
|
||||
εκτελέσιμου αρχείου στις εικονικές μηχανές με σκοπό την σκλήρυνσή τους}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την εγκατάσταση δοχείων
|
||||
στις εικονικές μηχανές που δημιουργεί, κατά την διάρκεια της
|
||||
σκλήρυνσής τους, μέσω ενός αρχείου docker-compose.yml που θα
|
||||
βρίσκεται στον ίδιο φάκελο με το εκτελέσιμο αρχείο}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης όλων των
|
||||
διαθέσιμων εντολών του}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης
|
||||
συμπλήρωσης εντολών και για τα 3 πιο δημοφιλή κελύφη εντολών}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης της
|
||||
έκδοσης του}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να διαθέτει παράμετρο για την προσπέραση
|
||||
του βήματος επιβεβαίωσης κατά την δημιουργία εικονικών μηχανών}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να διαθέτει μηχανισμό συγκεκριμενοποίησης
|
||||
περιοχής για τον πάροχο AWS}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να διαθέτει μηχανισμό επιλογής θύρας για
|
||||
την λειτουργία σύνδεσης μέσω ssh}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την αρχικοποίηση μονάχα
|
||||
ενός παρόχου δίχως την συμπλήρωση από τον χρήστη κενών πεδίων για
|
||||
τους υπόλοιπους}
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\clearpage
|
||||
|
||||
\subsection{Μη λειτουργικές απαιτήσεις}
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να είναι εύκολο στην χρήση για έναν χρήστη
|
||||
που έχει χρησιμοποιήσει προγράμματα γραμμής εντολών στο παρελθόν}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να δημιουργεί ξεχωριστό αρχείο για τις
|
||||
ρυθμίσεις του στον ίδιο φάκελο που βρίσκεται και το εκτελέσιμο αρχείο}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να κρατάει αρχείο των διευθύνσεων
|
||||
IP των εικονικών μηχανών που δημιουργεί ώστε να μπορούν να
|
||||
διαμορφωθούν περαιτέρω εάν ο χρήστης επιθυμεί να
|
||||
χρησιμοποιήσει άλλα προγράμματα όπως το Ansible}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να διαθέτει ένα μοτίβο εντολών που
|
||||
να μπορεί ο χρήστης να καταλαβαίνει και να διαμορφώνει ανάλογα
|
||||
τις ανάγκες του}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να δημιουργεί κλειδιά ssh σε
|
||||
περίπτωση που δεν υπάρχουν, στον ίδιο φάκελο με το εκτελέσιμο
|
||||
αρχείο του}
|
||||
|
||||
\item \textbf{Το δεύτερο εκτελέσιμο αρχείο του εργαλείου πρέπει να
|
||||
εγκαθιστά και να σκληραίνει και το Docker πέρα από το
|
||||
λειτουργικό σύστημα}
|
||||
|
||||
\item \textbf{Το δεύτερο εκτελέσιμο αρχείο του εργαλείου πρέπει να
|
||||
δημιουργεί στην εικονική μηχανή δύο επιπλέον εκτελέσιμα
|
||||
αρχεία για περιοδική ενημέρωση των πακέτων και κλείσιμο
|
||||
αχρησιμοποίητων θυρών}
|
||||
|
||||
\item \textbf{Το δεύτερο εκτελέσιμο αρχείο του εργαλείου πρέπει να
|
||||
εγκαθιστά προγράμματα για την περαιτέρω σκλήρυνση του Docker και την
|
||||
διευκόλυνση του χρήστη κατά την εγκατάσταση δοχείων}
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\clearpage
|
||||
|
||||
\begin{landscape}
|
||||
\thispagestyle{empty}
|
||||
|
||||
\section{Διαγραμματική Μοντελοποίηση} \label{designModels}
|
||||
|
||||
Οι παραπάνω απαιτήσεις και ο τρόπος λειτουργίας του εργαλείου, μεταφράζονται
|
||||
καλύτερα στον χρήστη μέσω ενός σχεδιαγράμματος περίπτωσης χρήσης. Το σχήμα
|
||||
\ref{fig:useCaseDiagram} δημιουργήθηκε με την βοήθεια του εργαλείου
|
||||
\textquote{yuml} \footfullcite{yuml}. Επιπλέον, με το εργαλείο
|
||||
\textquote{mermaid} \footfullcite{mermaid}, δημιουργήθηκε ένα διάγραμμα ροής
|
||||
για το SecDep που απεικονίζεται στο σχήμα \ref{fig:flowchartDiagram}. Το
|
||||
διάγραμμα αυτό, απεικονίζει την ροή των εντολών που μπορεί να επιλεγούν από τον
|
||||
χρήστη κατά την εκτέλεση του προγράμματος.
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = 1.0\textwidth]{Figures/Diagrams/secdep-use-case-diagram.jpg}
|
||||
\captionof{figure}{Διάγραμμα περιπτώσεων χρήσης}
|
||||
\label{fig:useCaseDiagram}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
\end{landscape}
|
||||
|
||||
\clearpage
|
||||
|
||||
\begin{landscape}
|
||||
\thispagestyle{empty}
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = 1.0\textwidth]{Figures/Diagrams/secdep-flowchart-diagram.png}
|
||||
\captionof{figure}{Διάγραμμα ροής}
|
||||
\label{fig:flowchartDiagram}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
\end{landscape}
|
||||
|
||||
Ουσιαστικά, κατά την πραγματική χρήση του SecDep υπάρχουν πάντοτε δύο οντότητες
|
||||
που αλληλεπιδρούν μεταξύ τους. Ο χρήστης και ο πάροχος νέφους. Ο χρήστης μπορεί
|
||||
να ζητήσει πληροφορίες για διαθέσιμους πόρους όπως οι εικονικές του μηχανές ή
|
||||
τα συστατικά που έχει στην διάθεση του για την δημιουργία τους όπως οι
|
||||
διανομές, τα μεγέθη και οι τοποθεσίες τους. Αυτή η αλληλεπίδραση μεταξύ του
|
||||
χρήστη και του παρόχου νέφους, απεικονίζεται στο σχήμα
|
||||
\ref{fig:sequenceDiagram}, το οποίο δημιουργήθηκε με το εργαλείο mermaid.
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = .9\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}
|
||||
|
||||
\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}
|
||||
|
||||
Επιπλέον, ένας χάρτης των σημαντικών εξαρτήσεων του 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}
|
||||
|
||||
\clearpage
|
||||
|
||||
\section{Αρχιτεκτονική} \label{architecture}
|
||||
|
||||
Οι διαθέσιμες συναρτήσεις και μεταβλητές του secdep.py, απεικονίζονται στα
|
||||
σχήματα \ref{fig:secdepFunctions} και \ref{fig:secdepVariables} αντίστοιχα. Η
|
||||
δημιουργία τους πραγματοποιήθηκε με το εργαλείο \textquote{doxygen}
|
||||
\footfullcite{doxygen}.
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = .9\textwidth]{Figures/doxygen/secdepFunctions.png}
|
||||
\captionof{figure}{Συναρτήσεις του secdep.py}
|
||||
\label{fig:secdepFunctions}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = .9\textwidth]{Figures/doxygen/secdepVariables.png}
|
||||
\captionof{figure}{Μεταβλητές του secdep.py}
|
||||
\label{fig:secdepVariables}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
\clearpage
|
||||
|
||||
Το SecDep αποτελείται από δύο εκτελέσιμα αρχεία. Το πρώτο αρχείο, το secdep.py,
|
||||
είναι το κύριο αρχείο του προγράμματος. Αυτό το αρχείο είναι υπεύθυνο για την
|
||||
επικοινωνία με τους παρόχους νέφους και την διαχείριση των εικονικών μηχανών.
|
||||
Το δεύτερο αρχείο, το \textquote{harden}, είναι υπεύθυνο για την σκλήρυνση των
|
||||
εικονικών μηχανών και την εγκατάσταση/σκλήρυνση του Docker. Το harden,
|
||||
εκτελείται μόνο στις εικονικές μηχανές κατά την δημιουργία τους και μόνο εάν ο
|
||||
χρήστης το επιθυμεί.
|
||||
|
||||
Οι βασικότερες συναρτήσεις του secdep.py είναι οι εξής:
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item \textbf{create\_node}:
|
||||
|
||||
Η συνάρτηση \textquote{create\_node}, είναι αυτή που δημιουργεί τις
|
||||
εικονικές μηχανές λαμβάνοντας ή ζητώντας από τον χρήστη τις κατάλληλες
|
||||
παραμέτρους. Οι βασικές παράμετροι που μπορεί να λάβει είναι:
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item \textbf{provider}
|
||||
\item \textbf{name}
|
||||
\item \textbf{location}
|
||||
\item \textbf{size}
|
||||
\item \textbf{image}
|
||||
|
||||
\item \textbf{confirm}: Για επιβεβαίωση της δημιουργίας της
|
||||
εικονικής μηχανής χωρίς να χρειαστεί η επιβεβαίωση του χρήστη.
|
||||
\item \textbf{deploy}: Για την εκτέλεση του harden.
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\item \textbf{node\_action}:
|
||||
|
||||
Η συνάρτηση \textquote{node\_action}, είναι αυτή που εκτελεί τις
|
||||
ενέργειες πάνω στις εικονικές μηχανές. Στις ενέργειες αυτές περιλαμβάνονται:
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item \textbf{start}
|
||||
\item \textbf{stop}
|
||||
\item \textbf{reboot}
|
||||
\item \textbf{delete}
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\clearpage
|
||||
|
||||
\item \textbf{list\_all\_nodes}: Η συνάρτηση \textquote{list\_all\_nodes},
|
||||
είναι αυτή που εμφανίζει τις εικονικές μηχανές που διαχειρίζεται το
|
||||
SecDep. Χωρίς παραμέτρους θα εμφάνιζε όλες τις εικονικές μηχανές από
|
||||
όλους τους παρόχους. Επειδή όμως δεν είναι πάντοτε απαραίτητο να
|
||||
εμφανίζονται όλες οι εικονικές μηχανές, ο χρήστης μπορεί να δώσει τις
|
||||
παρακάτω παραμέτρους:
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item \textbf{provider}
|
||||
|
||||
\item \textbf{filterIn}: Χρησιμοποιείται για το φιλτράρισμα της
|
||||
λίστας κατά την χρήση της συνάρτησης \textquote{node\_action}.
|
||||
|
||||
\item \textbf{awsRegion}: Μόνο για τον πάροχο AWS. Χρησιμοποιείται
|
||||
για την επιλογή της περιοχής. Δίχως την παράμετρο αυτή, θα
|
||||
γινόταν έρευνα για εικονικές μηχανές σε όλες τις περιοχές. Κάτι
|
||||
που θα έκανε την εκτέλεση της εντολής πολύ αργή, ειδικά εάν ο
|
||||
χρήστης γνωρίζει πως χρησιμοποιεί μονάχα μια περιοχή.
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\end{itemize}
|
||||
|
||||
Το αρχείο harden, αποτελείται από πολλές συναρτήσεις που εκτελούνται με την
|
||||
σειρά προκειμένου να ασφαλιστεί το σύστημα στο οποίο εκτελείται. Οι πιο
|
||||
αξιοσημείωτες από αυτές είναι:
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item \textbf{hardenSSH}:
|
||||
|
||||
Η συνάρτηση υπεύθυνη για την σκλήρυνση του SSH.
|
||||
|
||||
\item \textbf{dockerInit}:
|
||||
|
||||
Η συνάρτηση υπεύθυνση για την εγκατάσταση/σκλήρυνση του Docker.
|
||||
|
||||
\item \textbf{kernelSecurityModuleInit}:
|
||||
|
||||
Η συνάρτηση υπεύθυνη για την εγκατάσταση/ρύθμιση του κατάλληλου για την
|
||||
διανομή kernel security module.
|
||||
|
||||
\item \textbf{configureFail2ban}: Αφότου έχει προηγηθεί η εγκατάσταση του
|
||||
κατάλληλου για την διανομή προγράμματος firewall, η συνάρτηση αυτή
|
||||
ρυθμίζει το fail2ban για την προστασία από επιθέσεις brute force.
|
||||
|
||||
\end{itemize}
|
||||
|
||||
@@ -1,3 +1,364 @@
|
||||
\chapter{Εγκατάσταση \& Επίδειξη του εργαλείου SecDep} \label{installationANDShowcase}
|
||||
|
||||
\section{Υλοποίηση και Συστατικά Μέρη} \label{platform}
|
||||
\noindent Στην παρούσα ενότητα θα παρουσιαστεί η διαδικασία εγκατάστασης του
|
||||
εργαλείου SecDep, καθώς και η ρύθμισή του για την χρήση των υποδομών νέφους της
|
||||
Amazon. Μετά την ολοκλήρωση των παραπάνω διαδικασιών θα πραγματοποιηθεί
|
||||
επίδειξη της λειτουργίας του με βάση ορισμένα σενάρια χρήσης.
|
||||
|
||||
\section{Εγκατάσταση του πηγαίου κώδικα του SecDep}
|
||||
|
||||
Για την εγκατάσταση του πηγαίου κώδικα του SecDep απαιτείται η χρήση του
|
||||
προγράμματος git ή η πρόσβαση σε έναν φυλλομετρητή. Στην περίπτωση που ο
|
||||
χρήστης δεν έχει εγκατεστημένο το git, πρέπει να μεταβεί στην ιστοσελίδα του
|
||||
αποθετηρίου \footfullcite{secdep} και να επιλέξει είτε την επιλογή αποθήκευσης
|
||||
ως αρχείο zip, είτε ως tar.gz όπως απεικονίζεται παρακάτω. Έπειτα, πρέπει να
|
||||
αποσυμπιεστεί με τα κατάλληλα για τον τύπο αρχείου προγράμματα.
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = .8\textwidth]{Figures/Installation/secdep_install_without_git.png}
|
||||
\captionof{figure}{Αποθήκευση του πηγαίου κώδικα του SecDep ως αρχείο}
|
||||
\label{fig:secdep_install_without_git}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
\clearpage
|
||||
|
||||
Η πιο εύκολη μέθοδος για την εγκατάσταση του SecDep είναι η χρήση του git η
|
||||
οποία απαιτεί μονάχα την εκτέλεση της παρακάτω εντολής.
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
git clone https://git.konsthol.eu/konsthol/SecDep.git
|
||||
\end{bashcode}
|
||||
\caption{Εγκατάσταση του SecDep με την χρήση του git}
|
||||
\label{lst:secdep_install_with_git}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\subsection{Εγκατάσταση των απαιτούμενων εξαρτήσεων}
|
||||
|
||||
Μετά την ολοκλήρωση της εγκατάστασης του πηγαίου κώδικα του SecDep, αφού ο
|
||||
χρήστης μεταβεί στον φάκελο με τα περιεχόμενα που απεικονίζονται στο σχήμα
|
||||
\ref{fig:secdep_install_without_git}, επιβάλλεται να γίνει χρήση του
|
||||
προγράμματος pip \footfullcite{pip} για την εγκατάσταση των βιβλιοθηκών που
|
||||
απαιτούνται για την λειτουργία του εργαλείου. Αυτό επιτυγχάνεται με την
|
||||
εκτέλεση της παρακάτω εντολής.
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
pip install -r requirements.txt
|
||||
\end{bashcode}
|
||||
\caption{Εγκατάσταση των απαιτούμενων βιβλιοθηκών για την λειτουργία του SecDep}
|
||||
\label{lst:secdep_install_requirements}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
Στην περίπτωση που η παραπάνω εντολή αποτύχει λόγω πρόσφατων τροποποιήσεων στις
|
||||
τελευταίες εκδόσεις του pip, η εντολή πρέπει να μετατραπεί στην παρακάτω.
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
pip install -r requirements.txt --break-system-packages
|
||||
\end{bashcode}
|
||||
\caption{Εξαναγκασμένη μορφή της εντολής εγκατάστασης εξαρτήσεων του SecDep}
|
||||
\label{lst:focre_secdep_install_requirements}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\section{Ρύθμιση του SecDep}
|
||||
|
||||
Αφού έχει ολοκληρωθεί η εγκατάσταση των απαιτούμενων εξαρτήσεων, ο χρήστης
|
||||
πρέπει να δώσει στο εργαλείο τα απαραίτητα διαπιστευτήρια για την χρήση των
|
||||
υποδομών νέφους της επιλογής του. Ενώ υποστηρίζονται και οι τρεις μεγαλύτεροι
|
||||
πάροχοι υπηρεσιών IaaS, επιλέχθηκε για την παρούσα ενότητα η κάλυψη της χρήσης
|
||||
των υπηρεσιών της Amazon έναντι της Azure και της GCE, λόγω της ευκολότερης και
|
||||
απλούστερης διαδικασίας αυθεντικοποίησης που παρέχει. Συγκεκριμένα, απαιτεί την
|
||||
συμπλήρωση μονάχα δύο πεδίων. Αυτά είναι, το
|
||||
\textquote{SECDEP\_AWS\_ACCESS\_KEY} και \textquote{SECDEP\_AWS\_SECRET\_KEY}.
|
||||
|
||||
\subsection{Δημιουργία κλειδιού πρόσβασης με την AWS}
|
||||
|
||||
Για την απόκτηση των παραπάνω διαπιστευτηρίων, ο χρήστης πρέπει να επισκεφθεί
|
||||
την ιστοσελίδα διαχείρισης του λογαριασμού που έχει δημιουργήσει με την AWS και
|
||||
να μεταβεί στην ενότητα IAM (Identity and Access Management) προκειμένου να
|
||||
δημιουργήσει ένα κλειδί πρόσβασης. Αυτό απεικονίζεται ως εξής:
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = .6\textwidth]{Figures/AWS_setup/go_to_iam.png}
|
||||
\captionof{figure}{Μετάβαση στην ενότητα IAM της AWS}
|
||||
\label{fig:go_to_iam}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
Έπειτα, πρέπει να εισέλθει στην ενότητα \textquote{Manage Access Keys} και να
|
||||
δημιουργήσει ένα νέο κλειδί πρόσβασης όπως φαίνεται παρακάτω:
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = .6\textwidth]{Figures/AWS_setup/create_access_key.png}
|
||||
\captionof{figure}{Δημιουργία νέου κλειδιού πρόσβασης}
|
||||
\label{fig:create_access_key}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
\clearpage
|
||||
|
||||
Η αντιστοιχία των απαιτούμενων πεδίων με το κλειδί πρόσβασης που δημιουργήθηκε
|
||||
είναι η εξής:
|
||||
|
||||
\begin{savenotes}
|
||||
\selectfont
|
||||
\begin{table}[!ht]
|
||||
\caption{Αντιστοιχία των πεδίων του SecDep με το κλειδί πρόσβασης της AWS}
|
||||
\renewcommand{\arraystretch}{1.5}
|
||||
\centering
|
||||
\newcolumntype{C}{>{\centering\arraybackslash}m{7cm}}
|
||||
\textgreek{\begin{tabular}{||C|C||}
|
||||
\hline
|
||||
|
||||
Μεταβλητή του SecDep & Αντιστοιχία \\ [0.5ex]
|
||||
|
||||
\hline\hline
|
||||
|
||||
SECDEP\_AWS\_ACCESS\_KEY & Το αναγνωριστικό του κλειδιού \\
|
||||
|
||||
\hline
|
||||
|
||||
SECDEP\_AWS\_SECRET\_KEY & Το περιεχόμενο του κλειδιού \\
|
||||
|
||||
\hline
|
||||
\end{tabular}}
|
||||
\label{table:}
|
||||
\renewcommand{\arraystretch}{1}
|
||||
\end{table}
|
||||
\end{savenotes}
|
||||
|
||||
\subsection{Αντιστοίχιση των πεδίων του SecDep με το κλειδί πρόσβασης της AWS}
|
||||
|
||||
Μετά το πέρας της δημιουργίας του κλειδιού πρόσβασης, ο χρήστης πρέπει να
|
||||
αρχικοποιήσει τις μεταβλητές του SecDep με τις τιμές που αντιστοιχούν στην κάθε
|
||||
μια. Υπάρχουν πολλοί τρόποι για την επίτευξη αυτού του σκοπού. Στην προκειμένη
|
||||
περίπτωση που θα γίνει χρήση ενός μονάχα παρόχου, αρκεί η εκτέλεση της παρακάτω
|
||||
εντολής:
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
python3 secdep.py --init aws
|
||||
\end{bashcode}
|
||||
\caption{Αρχικοποίηση των μεταβλητών του SecDep για την χρήση της AWS}
|
||||
\label{lst:secdep_init_aws}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
Όπου και θα ζητηθούν από τον χρήστη τα αντίστοιχα διαπιστευτήρια. Οι μεταβλητές
|
||||
αυτές θα αποθηκευτούν στο αρχείο \textquote{.env} που θα δημιουργηθεί στον
|
||||
φάκελο που βρίσκεται το εκτελέσιμο του SecDep. Στην περίπτωση που ο χρήστης
|
||||
μελλοντικά θέλει να αλλάξει τις τιμές των μεταβλητών ή να προσθέσει νέες,
|
||||
μπορεί να το κάνει αλλάζοντας τα περιεχόμενα του αρχείου \textquote{.env}
|
||||
χειροκίνητα ή με την εκτέλεση της εντολής:
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
python3 secdep.py --edit
|
||||
\end{bashcode}
|
||||
\caption{Επεξεργασία των μεταβλητών του SecDep}
|
||||
\label{lst:secdep_edit}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
Η εντολή αυτή θα προτρέψει τον χρήστη να επιλέξει ποια μεταβλητή να αλλάξει και
|
||||
θα αναγράφει την προηγούμενη τιμή της ώστε να γίνεται ευδιάκριτη η αλλαγή.
|
||||
|
||||
\clearpage
|
||||
|
||||
\section{Επίδειξη του SecDep}
|
||||
|
||||
Ανά πάσα στιγμή, ο χρήστης μπορεί να εκτελέσει την παρακάτω εντολή για να λάβει
|
||||
πληροφορίες σχετικά με τις διαθέσιμες παραμέτρους:
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
python3 secdep.py --help
|
||||
\end{bashcode}
|
||||
\caption{Εκτέλεση της παραμέτρου help του SecDep}
|
||||
\label{lst:secdep_help}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
Σχετικά με την δημιουργία εικονικών μηχανών, που είναι και μια από τις βασικές
|
||||
λειτουργίες του SecDep, ο χρήστης μπορεί να εκτελέσει την παρακάτω εντολή για
|
||||
να δημιουργήσει μια εικονική μηχανή με λειτουργικό σύστημα Debian 11 στην
|
||||
περιοχή eu-north-1 με μέγεθος t3.micro (διαθέσιμο για χρήστες εντός της δωρεάν
|
||||
δοκιμαστικής περιόδου ενός χρόνου):
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
python3 secdep.py --provider aws --create --name test-node --size t3.micro --image ami-08869bacfa1188ec9
|
||||
\end{bashcode}
|
||||
\caption{Εκτέλεση της παραμέτρου create του SecDep}
|
||||
\label{lst:secdep_create}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
Μετά την δημιουργία της εικονικής μηχανής, επιστρέφεται στον χρήση η διεύθυνση
|
||||
IP της και η εντολή που μπορεί να εκτελέσει προκειμένου να συνδεθεί σε αυτήν
|
||||
χρησιμοποιώντας το πρωτόκολλο SSH. Η εντολή αυτή σχηματίζεται δυναμικά από το
|
||||
εργαλείο λαμβάνοντας υπόψιν την θύρα που θα χρησιμοποιηθεί (σε περίπτωση που η
|
||||
εικονική μηχανή έχει σκληρυνθεί), το μονοπάτι μέχρι το κλειδί SSH που
|
||||
δημιουργήθηκε μαζί με την μηχανή στον ίδιο φάκελο με το εργαλείο και την
|
||||
διεύθυνση της.
|
||||
|
||||
Εάν ο χρήστης δεν διαθέτει πρόγραμμα ικανό να συνδεθεί μέσω SSH σε έναν
|
||||
απομακρυσμένο διακομιστή, υποστηρίζεται και η παράμετρος \textquote{--ssh}.
|
||||
|
||||
Χωρίς την παράμετρο \textquote{--yes}, θα ζητηθεί από τον χρήστη να
|
||||
επιβεβαιώσει την δημιουργία της εικονικής μηχανής παρέχοντας πληροφορίες
|
||||
σχετικά με τις επιλογές του.
|
||||
|
||||
Με την προσθήκη της παραμέτρου \textquote{--deploy}, θα εκτελεστεί η ίδια
|
||||
διαδικασία αλλά με την διαφορά πως θα πραγματοποιηθεί εκτέλεση και του αρχείου
|
||||
harden στην εικονική μηχανή το οποίο θα σκληρύνει το λειτουργικό της σύστημα
|
||||
και θα εγκαταστήσει την μηχανή δοχείων Docker την οποία επίσης θα σκληρύνει.
|
||||
|
||||
\clearpage
|
||||
|
||||
Το αποτέλεσμα μετά την δημιουργία εικονικής μηχανής με την παράμετρο για
|
||||
σκλήρυνση απεικονίζεται ως:
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = .8\textwidth]{Figures/AWS_hardened/aws-hardened.png}
|
||||
\captionof{figure}{Δημιουργία εικονικής μηχανής με παράμετρο για σκλήρυνση}
|
||||
\label{fig:aws_hardened}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
Με μια ακόμα προσθήκη παραμέτρου, συγκεκριμένα της
|
||||
\textquote{--docker\_compose}, θα εκτελεστεί στην εικονική μηχανή και ένα
|
||||
αρχείο docker-compose.yml που θα πρέπει ο χρήστης να έχει μεταφέρει στον ίδιο
|
||||
φάκελο με το εργαλείο.
|
||||
|
||||
Για οποιαδήποτε παράμετρο που δεν έχει δοθεί ή έχει δοθεί λανθασμένα, θα
|
||||
προτρέπεται ο χρήστης να την δώσει ξανά εως ότου ολοκληρωθεί η διαδικασία ή
|
||||
ακυρωθεί από τον χρήστη.
|
||||
|
||||
Εάν ο χρήστης δεν γνωρίζει τις διαθέσιμες επιλογές για τις παραμέτρους που
|
||||
εισάγει, υποστηρίζονται ξεχωριστές εντολές που ακολουθούν παρόμοιο μοτίβο για
|
||||
την κάθε μια. Παραδείγματα εντολών που υποστηρίζονται είναι οι παρακάτω:
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
python3 secdep.py --provider aws --listimages --print
|
||||
\end{bashcode}
|
||||
\caption{Εκτέλεση της παραμέτρου listimages του SecDep}
|
||||
\label{lst:secdep-listimages}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
Το αποτέλεσμα της εντολής \ref{lst:secdep-listimages} είναι να εμφανιστεί μια
|
||||
λίστα με τις διαθέσιμες εικόνες που μπορεί να χρησιμοποιήσει ο χρήστης για την
|
||||
δημιουργία εικονικών μηχανών. Έπειτα, με την επιλογή μιας από αυτές, θα
|
||||
εμφανιστούν πληροφορίες σχετικά με την εικόνα που επιλέχθηκε οι οποίες θα είναι
|
||||
της μορφής:
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
<NodeImage: id=ami-0eb2c4104acb437b2, name=debian-10-amd64-20221224-1239, driver=Amazon EC2 ...>
|
||||
\end{bashcode}
|
||||
\caption{Πληροφορίες σχετικά με την εικόνα που επιλέχθηκε}
|
||||
\label{lst:secdep_image_info}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
Από την παραπάνω πληροφορία, ο χρήστης χρειάζεται το αναγνωριστικό (id) της εικόνας.
|
||||
|
||||
Εάν χρειάζεται πληροφορίες σχετικά με τα διαθέσιμα μεγέθη των εικονικών
|
||||
μηχανών, αυτό επιτυγχάνεται με την εντολή:
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
python3 secdep.py --provider aws --listsizes --print
|
||||
\end{bashcode}
|
||||
\caption{Εκτέλεση της παραμέτρου listsizes του SecDep}
|
||||
\label{lst:secdep_listsizes}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
Η διαδικασία επιλογής του μεγέθους είναι παρόμοια με την επιλογή της εικόνας,
|
||||
ενώ το αποτέλεσμα είναι της μορφής:
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
<NodeSize: id=t3.micro, name=t3.micro, ram=1024, disk=0, bandwidth=0, price=0.0204, driver=Amazon EC2 ...>
|
||||
\end{bashcode}
|
||||
\caption{Πληροφορίες σχετικά με το μέγεθος που επιλέχθηκε}
|
||||
\label{lst:secdep_size_info}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
Από την παραπάνω πληροφορία, το σημαντικό είναι το αναγνωριστικό (id) του μεγέθους.
|
||||
|
||||
Μερικές από τις εντολές που δύναται να χρησιμοποιεί ένας χρήστης συχνά μπορεί
|
||||
να είναι για την διαγραφή εικονικών μηχανών ή την εμφάνιση τους. Αυτές οι δύο
|
||||
λειτουργίες υποστηρίζονται με τις παρακάτω εντολές:
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
python3 secdep.py --provider aws --awsregion us-east-2 --list
|
||||
\end{bashcode}
|
||||
\caption{Εκτέλεση της παραμέτρου list του SecDep}
|
||||
\label{lst:secdep_list}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\clearpage
|
||||
|
||||
Το αποτέλεσμα της παραπάνω εντολής μπορεί να απεικονίζεται ως εξής:
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = .8\textwidth]{Figures/AWS_listing/aws-instances.png}
|
||||
\captionof{figure}{Λίστα με τις εικονικές μηχανές που έχουν δημιουργηθεί}
|
||||
\label{fig:instance_list_output}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
Η παράμετρος \textquote{--awsregion} είναι προαιρετική και χρησιμοποιείται
|
||||
αποκλειστικά για την Amazon. Η παράλειψη της θα είχε ως αποτέλεσμα να γίνει
|
||||
έρευνα σε όλες τις διαθέσιμες περιοχές. Γεγονός που ενδεχομένως να αποτελούσε
|
||||
σπατάλη χρόνου.
|
||||
|
||||
Με την παρακάτω εντολή, ο χρήστης λαμβάνει μια λίστα με τις διαθέσιμες
|
||||
εικονικές μηχανές του παρόχου Amazon που έχουν δημιουργηθεί στην περιοχή
|
||||
\textquote{eu-north-1} και επιλέγει μια από αυτές για να διαγραφεί. Μετά από
|
||||
επιτυχή διαγραφή, λαμβάνει επιβεβαίωση στην οθόνη του.
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
python3 secdep.py --provider aws --action delete --awsregion eu-north-1
|
||||
\end{bashcode}
|
||||
\caption{Εκτέλεση της παράμετρου delete του SecDep}
|
||||
\label{lst:secdep_delete}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
Εάν ήθελε να διαγράψει όλες τις εικονικές μηχανές της περιοχής, η επιλογή της
|
||||
παραμέτρου \textquote{--action}, από \textquote{delete} θα έπρεπε να
|
||||
αντικατασταθεί σε \textquote{deleteall}. Με παρόμοιο τρόπο υποστηρίζονται και
|
||||
εντολές για εκκίνηση, επανεκκίνηση ή διακοπή εικονικών μηχανών.
|
||||
|
||||
Πιο λεπτομερείς οδηγίες χρήσης και εγκατάστασης περιέχονται και στην σελίδα του
|
||||
αποθετηρίου του SecDep \footfullcite{secdep} μέσω του αρχείου
|
||||
\textquote{README.md}.
|
||||
|
||||
@@ -1 +1,892 @@
|
||||
\chapter{Πειραματισμός \& Αποτελέσματα} \label{experimentationANDresults}
|
||||
\chapter{Πειραματική Αποτίμηση Εργαλείου} \label{experimentationANDresults}
|
||||
|
||||
\noindent Το εργαλείο που αναπτύχθηκε στα πλαίσια της διπλωματικής εργασίας
|
||||
αυτής, έχει τρεις βασικούς στόχους. Την δημιουργία εικονικών μηχανών κατά μήκος
|
||||
πολλών παρόχων νέφους, την σκλήρυνση του λειτουργικού συστήματος τους και την
|
||||
σκλήρυνση της μηχανής δοχείων Docker που εγκαθιστά σε αυτές. Στην παρούσα
|
||||
ενότητα θα παρουσιαστούν τα αποτελέσματα της αξιολόγησης της ασφάλειας των
|
||||
εικονικών μηχανών που δημιουργήθηκαν, χρησιμοποιώντας τρία διαφορετικά εργαλεία
|
||||
αξιολόγησης. Τα εργαλεία αυτά, με την σειρά που θα αναλυθούν είναι το Vuls, το
|
||||
Lynis και το LUNAR.
|
||||
|
||||
\section{Εργαλεία Αξιολόγησης} \label{measurementTools}
|
||||
|
||||
Όλα τα εργαλεία αξιολόγησης που χρησιμοποιήθηκαν στην παρούσα εργασία, είναι
|
||||
εργαλεία ανοιχτού κώδικα και διατίθενται δωρεάν στο κοινό. Τα εργαλεία αυτά
|
||||
επιλέχθηκαν με βάση την δημοτικότητα τους, την ευκολία εγκατάστασης και χρήσης
|
||||
τους και την ποικιλία των ελέγχων που πραγματοποιούν. Στην συνέχεια θα
|
||||
παρουσιαστούν τα εργαλεία αυτά και ο τρόπος με τον οποίο χρησιμοποιήθηκαν.
|
||||
|
||||
\subsection{Vuls: VULnerability Scanner} \label{vuls}
|
||||
|
||||
Το Vuls \footfullcite{vuls} είναι ένα εργαλείο ανοιχτού κώδικα, το οποίο
|
||||
αναπτύχθηκε από την Future Corp χρησιμοποιώντας την γλώσσα προγραμματισμού Go.
|
||||
Πρόκειται για ένα εργαλείο αξιολόγησης ασφάλειας, το οποίο είναι σε θέση να
|
||||
εντοπίσει ευπάθειες σε τοπικούς ή και απομακρυσμένους διακομιστές
|
||||
χρησιμοποιώντας δεδομένα από πολλές διαφορετικές πηγές. Με βάση την σελίδα του
|
||||
στο GitHub \footfullcite{vulsGithubPage}, στις πηγές αυτές περιλαμβάνονται:
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item \textbf{NVD (National Vulnerability Database)}
|
||||
|
||||
\item \textbf{τα αρχεία ορισμού OVAL (Open Vulnerability and Assessment Language)}
|
||||
που διατίθενται από τις διανομές Linux
|
||||
|
||||
\clearpage
|
||||
|
||||
\item \textbf{Συμβουλευτικές πηγές ασφαλείας}
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item \textbf{Alpine-secdb}
|
||||
\item \textbf{Red Hat Security Advisories}
|
||||
\item \textbf{Debian Security Bug Tracker}
|
||||
\item \textbf{Ubuntu CVE Tracker}
|
||||
\item \textbf{Microsoft CVRF}
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\item \textbf{Πηγές με PoC (Proof of Concept) εκμετάλλευσης ευπαθειών}
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item \textbf{Exploit Database}
|
||||
\item \textbf{Metasploit-Framework modules}
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\item \textbf{CERT (Computer Emergency Readiness Team)}
|
||||
|
||||
\item \textbf{CISA (Cybersecurity \& Infrastructure Security Agency)}
|
||||
|
||||
\item \textbf{Cyber Threat Intelligence(MITRE ATT\&CK and CAPEC)}
|
||||
|
||||
\item \textbf{Βιβλιοθήκες ευπαθειών όπως αυτή της Aquasecurity}
|
||||
|
||||
\end{itemize}
|
||||
|
||||
Ο χρήστης του εργαλείου απαιτείται να έχει εγκατεστημένο το Vuls σε έναν
|
||||
υπολογιστή και να έχει αποθηκεύσει βάσει των οδηγιών εγκατάστασης, τα δεδομένα
|
||||
των πηγών που θα χρησιμοποιηθούν. Έπειτα σε ένα αρχείο toml ρυθμίζονται τα
|
||||
διαπιστευτήρια των διακομιστών που θα αξιολογηθούν διότι η απομακρυσμένη
|
||||
σύνδεση θα πραγματοποιηθεί με χρήση SSH. Υπάρχει η δυνατότητα δύο επιπέδων
|
||||
αξιολόγησης. Αυτά είναι τα παρακάτω:
|
||||
|
||||
\begin {itemize}
|
||||
|
||||
\item \textbf{Γρήγορη σάρωση}:
|
||||
|
||||
Σε αυτό το επίπεδο αξιολόγησης, το Vuls δεν απαιτεί την σύνδεση με
|
||||
χρήστη διαχειριστικών δικαιωμάτων στον απομακρυσμένο διακομιστή αλλά
|
||||
ούτε και την ύπαρξη πακέτων λογισμικού για την υποβοήθηση της
|
||||
διαδικασίας σάρωσης. Επιπροσθέτως, επιβάλλει ελάχιστο φόρτο εργασιών
|
||||
στον διακομιστή που αξιολογείται.
|
||||
|
||||
\item \textbf{Εκτεταμένη σάρωση}:
|
||||
|
||||
Στο δεύτερο επίπεδο αξιολόγησης, το Vuls χρειάζεται να συνδεθεί ως ένας
|
||||
χρήστης ικανός να εκτελέσει εντολές διαχειριστικού επιπέδου. Η σάρωση
|
||||
που πραγματοποιείται είναι πιο εκτεταμένη και περιλαμβάνει ελέγχους που
|
||||
απαιτούν την ύπαρξη πακέτων λογισμικού στον απομακρυσμένο διακομιστή
|
||||
όπως το lsof, debian-goodies και reboot-notifier.
|
||||
|
||||
\end{itemize}
|
||||
|
||||
Στο σχήμα \ref{fig:vuls-architecture}, όπως αυτό πάρθηκε από την επίσημη
|
||||
ιστοσελίδα του εργαλείου, απεικονίζεται η αρχιτεκτονική του Vuls κατά την
|
||||
διαδικασία σάρωσης απομακρυσμένου διακομιστή.
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = \textwidth]{Figures/VULS/vuls-architecture.png}
|
||||
\captionof{figure}{Αρχιτεκτονική του Vuls \cite{vulsArchitecture}}
|
||||
\label{fig:vuls-architecture}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
\clearpage
|
||||
|
||||
Στο σχήμα \ref{fig:vulsScan}, το οποίο παρομοίως αποκτήθηκε από την επίσημη
|
||||
σελίδα του, απεικονίζεται η διαδικασία που ακολουθείται κατά την εκτέλεση της
|
||||
σάρωσης ενός συστήματος.
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = \textwidth]{Figures/VULS/vuls-scan-flow-fast-root.png}
|
||||
\captionof{figure}{Διαδικασία εκτεταμένης σάρωσης του Vuls \cite{vulsDeepScan}}
|
||||
\label{fig:vulsScan}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
\subsection{Lynis - Security auditing and hardening tool, for UNIX-based systems.} \label{lynis}
|
||||
|
||||
Το Lynis \footfullcite{lynis} είναι το δεύτερο εργαλείο ανοιχτού κώδικα που
|
||||
χρησιμοποιήθηκε για την αξιολόγηση της ασφάλειας των εικονικών μηχανών. Σε
|
||||
αντίθεση με το Vuls, το Lynis εκτελείται αποκλειστικά στον απομακρυσμένο
|
||||
διακομιστή. Πραγματοποιεί μια εκτενή ανάλυση του συστήματος εντοπίζοντας πιθανά
|
||||
σημεία που μπορεί να αποτελέσουν σημεία εισόδου για επιτιθέμενους με βάση τις
|
||||
βέλτιστες πρακτικές ασφάλειας. Έπειτα, επιστρέφει στον χρήστη μια λεπτομερή
|
||||
αναφορά με τα ευρήματα του και προτάσεις για την επίλυση τους. Στο τελευταίο
|
||||
κομμάτι της αναφοράς, παρέχεται και μια βαθμολογία της ασφάλειας του συστήματος
|
||||
η οποία κυμαίνεται από το 0 έως το 100. Εκτελείται εύκολα σε κάθε σύστημα Linux
|
||||
διότι πρόκειται για ένα απλό εκτελέσιμο αρχείο bash.
|
||||
|
||||
Στο σχήμα \ref{fig:lynisScan}, απεικονίζεται ένα κομμάτι της αναφοράς που
|
||||
επιστρέφει.
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = \textwidth]{Figures/lynis/lynis-screenshot.png}
|
||||
\captionof{figure}{Κομμάτι της αναφοράς του Lynis \cite{lynis}}
|
||||
\label{fig:lynisScan}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
\subsection{LUNAR - Lockdown UNix Auditing and Reporting} \label{lunar}
|
||||
|
||||
Το τελευταίο εργαλείο αξιολόγησης που χρησιμοποιήθηκε είναι το LUNAR
|
||||
\footfullcite{lunar}. Πρόκειται για ένα εκτελέσιμο αρχείο bash, το οποίο όπως
|
||||
και το Lynis, εκτελείται στον διακομιστή του οποίου την ασφάλεια αξιολογεί. Ο
|
||||
τρόπος λειτουργίας του είναι προσεγγίσιμος και απλός. Εκτελεί μια σειρά ελέγχων
|
||||
στο σύστημα χρησιμοποιώντας το κριτήριο αναφοράς CIS, καθώς και άλλα πλαίσια
|
||||
και επιστρέφει στον χρήστη μια αναφορά με τα ευρήματα του. Παρομοίως με το
|
||||
Lynis, στο τέλος της αναφοράς του περιέχεται ο αριθμός των ελέγχων που
|
||||
εκτελέστηκαν, σε συνδυασμό με τον αριθμό αποτυχιών και επιτυχιών τους.
|
||||
|
||||
\section{Προετοιμασία περιβαλλόντων προς αξιολόγηση} \label{environtmentPreparation}
|
||||
|
||||
Για την αποτίμηση της ασφάλισης του συστήματος δημιουργήθηκαν δύο εικονικές
|
||||
μηχανές, χρησιμοποιώντας τον πάροχο νέφους AWS. Από αυτές, μονάχα για την
|
||||
δεύτερη επιλέχθηκε η επιλογή σκλήρυνσης. Για το λειτουργικό σύστημα τους,
|
||||
επιλέχθηκε το AMI με αναγνωριστικό κωδικό ami-08869bacfa1188ec9, το οποίο
|
||||
αντιστοιχεί στην διανομή Debian 11 και στην περιοχή eu-north-1, η οποία
|
||||
μεταφράζεται ως Europe (Stockholm). Για τα τεχνικά χαρακτηριστικά των εικονικών
|
||||
μηχανών χρησιμοποιήθηκε το t3.micro με τα προνόμια της δοκιμαστικής περιόδου
|
||||
ενός χρόνου που παρέχει η Amazon για νέους χρήστες. Το t3.micro υπάγεται στην
|
||||
σειρά υπολογιστών γενικού σκοπού με τα εξής χαρακτηριστικά, όπως αυτά
|
||||
αναφέρονται στην επίσημη ιστοσελίδα της Amazon \footfullcite{awst3micro} και
|
||||
στην σελίδα του Vantage \footfullcite{vantaget3micro}:
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item \textbf{Τιμή On Demand}: 0.01\$ ανά ώρα (για συστήματα Linux)
|
||||
\item \textbf{Μνήμη}: 1 GiB
|
||||
\item \textbf{vCPU}: 2
|
||||
\item \textbf{Μνήμη ανά vCPU}: 0.5 GiB
|
||||
\item \textbf{Επεξεργαστής}: Intel Skylake E5 2686 v5
|
||||
\item \textbf{Ταχύτητα ρολογιού}: 3.1 GHz
|
||||
\item \textbf{Ταχύτητα δικτύου}: 5 Gbps
|
||||
\item \textbf{Αποθηκευτικός χώρος}: 30 GiB (EBS)
|
||||
|
||||
\end{itemize}
|
||||
|
||||
Οι εντολές που χρησιμοποιήθηκαν για την δημιουργία τους, έχουν την παρακάτω
|
||||
μορφή διότι έχει εισαχθεί το εκτελέσιμο αρχείο secdep.py στο PATH του
|
||||
συστήματος και έχει δηλωθεί ως alias της το secdep. Στην περίπτωση που αυτά τα
|
||||
βήματα δεν έχουν ληφθεί θα πρέπει οι εντολές να είναι της μορφής:
|
||||
|
||||
\begin{bashcode}
|
||||
python3 secdep.py <παράμετροι χρήστη>
|
||||
\end{bashcode}
|
||||
|
||||
Χρησιμοποιήθηκε η εξής εντολή για την δημιουργία των εικονικής μηχανής χωρίς
|
||||
σκλήρυνση λειτουργικού συστήματος:
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
secdep -P aws -c -n test-node -s t3.micro -i ami-08869bacfa1188ec9 --yes
|
||||
\end{bashcode}
|
||||
\caption{SecDep - Δημιουργία εικονικής μηχανής χωρίς σκλήρυνση συστήματος}
|
||||
\label{lst:secdep-aws-creation}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
Ο χρόνος εκτέλεσης της είναι κατά μέσο όρο 37 δευτερόλεπτα.
|
||||
|
||||
Για την δημιουργία εικονικής μηχανής με σκλήρυνση λειτουργικού συστήματος,
|
||||
εγκατάσταση και σκλήρυνση της μηχανής δοχείων Docker και εισαγωγής ενός αρχείου
|
||||
docker-compose.yml που βρίσκεται στον ίδιο φάκελο με το SecDep χρησιμοποιήθηκε
|
||||
η εντολή:
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
secdep -P aws -c -n test-node -s t3.micro -i ami-08869bacfa1188ec9 --yes --docker_compose --deploy
|
||||
\end{bashcode}
|
||||
\caption{SecDep - Δημιουργία εικονικής μηχανής με σκλήρυνση συστήματος}
|
||||
\label{lst:secdep-aws-creation-hardened}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
Η εντολή αυτή έχει χρόνο εκτέλεσης 2 λεπτά και 55 δευτερόλεπτα.
|
||||
|
||||
\section{Εγκατάσταση/Χρήση των εργαλείων αξιολόγησης} \label{toolsInstallation}
|
||||
|
||||
Αφότου έχουν δημιουργηθεί οι εικονικές μηχανές, μπορεί να ξεκινήσει η
|
||||
διαδικασία αξιολόγησης της ασφάλειας τους. Αρχικά, θα παρουσιαστεί η διαδικασία
|
||||
εγκατάστασης του κάθε εργαλείου και έπειτα θα παρουσιαστεί η διαδικασία χρήσης
|
||||
τους.
|
||||
|
||||
\clearpage
|
||||
|
||||
\subsection{Εγκατάσταση και προετοιμασία του Vuls} \label{vulsInstallation}
|
||||
|
||||
Για την εγκατάσταση του Vuls, αρκεί σε έναν υπολογιστή της επιλογής μας να
|
||||
εκτελεστεί η παρακάτω εντολή, η οποία λαμβάνει το αρχείο εντολών εγκατάστασης
|
||||
και το εκτελεί με το κέλυφος bash:
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
bash <( curl -s \
|
||||
https://raw.githubusercontent.com\
|
||||
/vulsio/vulsctl/master/install-host/install.sh )
|
||||
\end{bashcode}
|
||||
\caption{Εγκατάσταση του Vuls}
|
||||
\label{lst:vuls-installation}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
Ορθή πρακτική θα ήταν να γίνει έλεγχος του περιεχομένου του αρχείου πριν την
|
||||
εκτέλεση της εντολής αυτής για να βεβαιωθεί κανείς ότι δεν περιέχει κάποιο
|
||||
κακόβουλο κώδικα.
|
||||
|
||||
Στην συνέχεια, θα πρέπει να δημιουργηθεί ο φάκελος που θα περιέχει τα δεδομένα
|
||||
των πηγών από όπου και θα αντλεί τις πληροφορίες ευπαθειών, καθώς και ένα
|
||||
αρχείο config.toml στο οποίο θα δηλωθούν τα διαπιστευτήρια των διακομιστών που
|
||||
θα αξιολογηθούν.
|
||||
|
||||
Αυτό επιτυγχάνεται με τις παρακάτω εντολές:
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
mkdir -p /usr/share/vuls-data
|
||||
\end{bashcode}
|
||||
\caption{Δημιουργία φακέλου}
|
||||
\label{lst:create-vuls-data-folder}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
cat <<EOF > /usr/share/vuls-data/config.toml
|
||||
[cveDict]
|
||||
type = "sqlite3"
|
||||
SQLite3Path = "/usr/share/vuls-data/cve.sqlite3"
|
||||
|
||||
[ovalDict]
|
||||
type = "sqlite3"
|
||||
SQLite3Path = "/usr/share/vuls-data/oval.sqlite3"
|
||||
|
||||
[gost]
|
||||
type = "sqlite3"
|
||||
SQLite3Path = "/usr/share/vuls-data/gost.sqlite3"
|
||||
|
||||
[metasploit]
|
||||
type = "sqlite3"
|
||||
SQLite3Path = "/usr/share/vuls-data/go-msfdb.sqlite3"
|
||||
|
||||
[servers]
|
||||
|
||||
[servers.secdepawsFresh]
|
||||
host = "<ip του διακομιστή>"
|
||||
port = "22"
|
||||
user = "secdep"
|
||||
keyPath = "<πλήρες μονοπάτι ιδιωτικού κλειδιού ssh>"
|
||||
scanMode = [ "deep" ]
|
||||
|
||||
[servers.secdepawsHardened]
|
||||
host = "<ip του διακομιστή>"
|
||||
port = "22100"
|
||||
user = "secdep"
|
||||
keyPath = "<πλήρες μονοπάτι ιδιωτικού κλειδιού ssh>"
|
||||
scanMode = [ "deep" ]
|
||||
EOF
|
||||
\end{bashcode}
|
||||
\caption{Δημιουργία και αρχικοποίηση του αρχείου ρυθμίσεων του Vuls}
|
||||
\label{lst:create-vuls-config-file}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\clearpage
|
||||
|
||||
Για να μπορέσει ο διακομιστής στον οποίο είναι εγκατεστημένο το Vuls να
|
||||
συνδεθεί στους διακομιστές της Amazon, απαιτείται η εκτέλεση δύο εντολών της
|
||||
μορφής:
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
ssh-keyscan -H -p <θύρα ssh> <ip του διακομιστή> >> ~/.ssh/known_hosts
|
||||
\end{bashcode}
|
||||
\caption{Εισαγωγή του διακομιστή της Amazon στο known\_hosts}
|
||||
\label{lst:insert-host-with-ssh-keyscan}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
Επιπροσθέτως, θα πρέπει να μεταφερθεί στον υπολογιστή που έχει εγκατεστημένο το
|
||||
Vuls, το ιδιωτικό κλειδί του διακομιστή (ένα αρχείο ονόματι secdep), το οποίο
|
||||
δημιουργείται στον ίδιο φάκελο με το εργαλείο SecDep.
|
||||
|
||||
Για την αρχικοποίηση της βάσης δεδομένων ευπαθειών του Vuls, εκτελούνται με
|
||||
σειρά οι εντολές:
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
cd /usr/share/vuls-data
|
||||
\end{bashcode}
|
||||
\caption{Μεταφορά στον φάκελο δεδομένων του Vuls}
|
||||
\label{lst:move-to-vuls-data-folder}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
gost fetch debian --dbpath /usr/share/vuls-data/gost.sqlite3
|
||||
\end{bashcode}
|
||||
\caption{Απόκτηση δεδομένων μέσω της εντολή gost}
|
||||
\label{lst:gost-fetch}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
go-cve-dictionary fetch nvd --dbpath /usr/share/vuls-data/cve.sqlite3
|
||||
\end{bashcode}
|
||||
\caption{Απόκτηση δεδομένων μέσω της εντολής go-cve-dictionary}
|
||||
\label{lst:go-cve-dictionary-fetch}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
goval-dictionary fetch debian 11 --dbpath /usr/share/vuls-data/oval.sqlite3
|
||||
\end{bashcode}
|
||||
\caption{Απόκτηση δεδομένων μέσω της εντολής goval-dictionary}
|
||||
\label{lst:goval-dictionary-fetch}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
go-msfdb fetch msfdb --dbpath /usr/share/vuls-data/go-msfdb.sqlite3
|
||||
\end{bashcode}
|
||||
\caption{Απόκτηση δεδομένων μέσω της εντολής go-msfdb}
|
||||
\label{lst:go-msfdb-fetch}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
Έπειτα, στο σύστημα του διακομιστή, πρέπει να εγκατασταθούν ορισμένα πακέτα
|
||||
λογισμικού και να εισαχθεί ο χρήστης secdep στο αρχείο sudoers με το
|
||||
περιεχόμενο \textquote{secdep ALL=(ALL) NOPASSWD:ALL} ώστε να εκτελεί εντολές
|
||||
που απαιτούν διαχειριστικά δικαιώματα δίχως την ανάγκη εισαγωγής κωδικού. Αυτά
|
||||
επιτυγχάνονται με τις παρακάτω εντολές:
|
||||
|
||||
\clearpage
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
sudo visudo
|
||||
\end{bashcode}
|
||||
\caption{Άνοιγμα αρχείου sudoers}
|
||||
\label{lst:open-sudoers-file}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
sudo apt update
|
||||
\end{bashcode}
|
||||
\caption{Ενημέρωση αποθετηρίων λογισμικού}
|
||||
\label{lst:update-software-repositories}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
sudo install -y debian-goodies reboot-notifier aptitude lsof
|
||||
\end{bashcode}
|
||||
\caption{Εγκατάσταση πακέτων λογισμικού}
|
||||
\label{lst:install-software-packages}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
Για τον έλεγχο συνδεσιμότητας στους διακομιστές χρειάζεται να εκτελεστεί η
|
||||
εντολή:
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
vuls configtest
|
||||
\end{bashcode}
|
||||
\caption{Έλεγχος συνδεσιμότητας του Vuls}
|
||||
\label{lst:vuls-configtest}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
Αφότου έχουν εκτελεστεί όλα τα παραπάνω βήματα και το αποτέλεσμα της εντολής
|
||||
\ref{lst:vuls-configtest} περιλαμβάνει τα ονόματα των διακομιστών, όπως αυτά
|
||||
ορίσθηκαν στο αρχείο ρυθμίσεων, ο διακομιστής είναι έτοιμος για αξιολόγηση.
|
||||
Αυτό επιτυγχάνεται με την εντολή:
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
vuls scan <όνομα διακομιστή>
|
||||
\end{bashcode}
|
||||
\caption{Εκκίνηση αξιολόγησης μέσω του Vuls}
|
||||
\label{lst:vuls-scan}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
Αφότου έχει ολοκληρωθεί η διαδικασία αξιολόγησης, μπορούμε να εκτελέσουμε την
|
||||
παρακάτω εντολή προκειμένου να παραχθεί η αναφορά σε μορφή json:
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
vuls report -format-json
|
||||
\end{bashcode}
|
||||
\caption{Παραγωγή αναφοράς σε μορφή json}
|
||||
\label{lst:vuls-report-json}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
Για να μπορέσουμε να δούμε τα αποτελέσματα σε μια ευανάγνωστη μορφή, μπορούμε
|
||||
να κατεβάσουμε στον διακομιστή μας το εργαλείο VulsRepo
|
||||
\footfullcite{vulsrepo}. Θα πρέπει να μεταφερθούμε σε έναν φάκελο της επιλογής
|
||||
μας και έπειτα να το κατεβάσουμε μέσω της εντολής git και να αρχικοποιήσουμε το
|
||||
αρχείο ρυθμίσεων του. Αυτά τα βήματα επιτυγχάνονται με τις παρακάτω εντολές:
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
cd /opt
|
||||
\end{bashcode}
|
||||
\caption{Μεταφορά στον φάκελο εγκατάστασης του VulsRepo}
|
||||
\label{lst:move-to-vulsrepo-folder}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
git clone https://github.com/ishiDACo/vulsrepo.git
|
||||
\end{bashcode}
|
||||
\caption{Εγκατάσταση του VulsRepo}
|
||||
\label{lst:install-vulsrepo}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
cd /opt/vulsrepo/server/
|
||||
\end{bashcode}
|
||||
\caption{Μεταφορά στον φάκελο του εκτελέσιμου αρχείου του VulsRepo}
|
||||
\label{lst:move-to-vulsrepo-server-folder}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
cp vulsrepo-config.toml.sample vulsrepo-config.toml
|
||||
\end{bashcode}
|
||||
\caption{Αρχικοποίηση του αρχείου ρυθμίσεων του VulsRepo}
|
||||
\label{lst:vulsrepo-config-file}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
cat <<EOF > /opt/vulsrepo/server/vulsrepo-config.toml
|
||||
[server]
|
||||
rootPath = "/opt/vulsrepo"
|
||||
resultsPath = "/usr/share/vuls-data/results"
|
||||
serverPort = "<θύρα του VulsRepo>"
|
||||
serverIP = "<ip του διακομιστή του Vuls>"
|
||||
EOF
|
||||
\end{bashcode}
|
||||
\caption{Προσαρμογή του αρχείου ρυθμίσεων του VulsRepo}
|
||||
\label{lst:vulsrepo-config-file-adjustment}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\clearpage
|
||||
|
||||
Τέλος, για να εκκινήσει το VulsRepo, εκτελούμε την εντολή:
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
./vulsrepo-server
|
||||
\end{bashcode}
|
||||
\caption{Εκκίνηση του VulsRepo}
|
||||
\label{lst:vulsrepo-start}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\subsection{Εγκατάσταση και προετοιμασία του Lynis} \label{lynisInstallation}
|
||||
|
||||
Σε αντίθεση με το Vuls, η εγκατάσταση του Lynis και λειτουργία του Lynis είναι
|
||||
πιο απλή. Εδώ τα βήματα που πρέπει να ακολουθηθούν είναι η σύνδεση στους
|
||||
διακομιστές της Amazon μέσω ssh (για την οποία οι εντολή είναι έτοιμη μετά την
|
||||
δημιουργία κάθε διακομιστή), η εγκατάσταση του εργαλείου μέσω git και η
|
||||
εκτέλεση του. Αυτά πραγματοποιούνται ως εξής:
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
ssh -p <θύρα του διακομιστή> -i <πλήρες μονοπάτι ιδιωτικού κλειδιού ssh> secdep@<ip του διακομιστή>
|
||||
\end{bashcode}
|
||||
\caption{Σύνδεση στον διακομιστή της Amazon}
|
||||
\label{lst:ssh-to-amazon-server}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
sudo su
|
||||
\end{bashcode}
|
||||
\caption{Μετάβαση σε χρήστη διαχειριστικών δικαιωμάτων}
|
||||
\label{lst:switch-to-root-user}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
git clone https://github.com/CISOfy/lynis
|
||||
\end{bashcode}
|
||||
\caption{Εγκατάσταση του Lynis}
|
||||
\label{lst:install-lynis}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
cd lynis
|
||||
\end{bashcode}
|
||||
\caption{Μεταφορά στον φάκελο του Lynis}
|
||||
\label{lst:move-to-lynis-folder}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
./lynis audit system > ~/lynis.log
|
||||
\end{bashcode}
|
||||
\caption{Εκκίνηση αξιολόγησης (και αποθήκευση της) μέσω του Lynis}
|
||||
\label{lst:lynis-audit}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\subsection{Εγκατάσταση και προετοιμασία του LUNAR} \label{lunarInstallation}
|
||||
|
||||
Όπως και το Lynis, το LUNAR εγκαθίσταται και εκτελείται με τον ίδιο τρόπο.
|
||||
Αφότου έχει πραγματοποιηθεί η σύνδεση στον διακομιστή και έχουμε μεταβεί σε
|
||||
χρήστη με διαχειριστικά δικαιώματα, πρέπει να εκτελεστούν οι εξής εντολές:
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
git clone https://github.com/lateralblast/lunar
|
||||
\end{bashcode}
|
||||
\caption{Εγκατάσταση του LUNAR}
|
||||
\label{lst:install-lunar}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
cd lunar
|
||||
\end{bashcode}
|
||||
\caption{Μεταφορά στον φάκελο του LUNAR}
|
||||
\label{lst:move-to-lunar-folder}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
./lunar.sh -a > ~/lunar.log
|
||||
\end{bashcode}
|
||||
\caption{Εκκίνηση αξιολόγησης (και αποθήκευση της) μέσω του LUNAR}
|
||||
\label{lst:lunar-audit}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\section{Αποτελέσματα αξιολόγησης} \label{evaluationResults}
|
||||
|
||||
Μετά το πέρας της αξιολόγησης των δύο διακομιστών, τα αποτελέσματα που
|
||||
παρήχθησαν από τα εργαλεία αξιολόγησης αναδεικνύουν τις διαφορές στην ασφάλεια
|
||||
των δύο διακομιστών. Στην παρούσα ενότητα θα αναλυθούν τα αποτελέσματα του κάθε
|
||||
εργαλείου αξιολόγησης ξεχωριστά και έπειτα θα βγει μια συμπερασματική
|
||||
αξιολόγηση τους.
|
||||
|
||||
\subsection{Αποτελέσματα αξιολόγησης με το Vuls} \label{vulsResults}
|
||||
|
||||
Η εκτέλεση του Vuls στους δύο διακομιστές, στο τελευταίο κομμάτι της αναφέρει
|
||||
μια μείωση των CVEs που απειλούν τον κάθε διακομιστή. Συγκεκριμένα αναφέρονται
|
||||
τα εξής:
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item \textbf{secdepawsFresh}:
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item \textbf{Αριθμός CVEs που εντοπίσθηκαν με το OVAL}: \textbf{0}
|
||||
\item \textbf{Αριθμός CVEs που εντοπίσθηκαν με το gost}: \textbf{774}
|
||||
\item \textbf{Αριθμός CVEs που εντοπίσθηκαν με το CPE}: \textbf{0}
|
||||
\item \textbf{Αριθμός PoC}: \textbf{0}
|
||||
\item \textbf{Αριθμός εκμεταλλεύσεων}: \textbf{1}
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\clearpage
|
||||
|
||||
\item \textbf{secdepawsHardened}:
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item \textbf{Αριθμός CVEs που εντοπίσθηκαν με το OVAL}: \textbf{0}
|
||||
\item \textbf{Αριθμός CVEs που εντοπίσθηκαν με το gost}: \textbf{568}
|
||||
\item \textbf{Αριθμός CVEs που εντοπίσθηκαν με το CPE}: \textbf{0}
|
||||
\item \textbf{Αριθμός PoC}: \textbf{0}
|
||||
\item \textbf{Αριθμός εκμεταλλεύσεων}: \textbf{1}
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\end{itemize}
|
||||
|
||||
Γραφικά, αυτό μεταφράζεται ως εξής:
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = \textwidth]{Figures/Scans/Vuls/CVEs_Διακομιστών.png}
|
||||
\captionof{figure}{CVEs διακομιστών}
|
||||
\label{fig:vuls-cves}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
Από τα παραπάνω μέχρι στιγμής αποτελέσματα, παρατηρούμε ότι από τους δύο
|
||||
διακομιστές μας, ο διακομιστής secdepawsHardened, σχετικά με τα CVEs που
|
||||
εντοπίστηκαν, έχει ασφαλιστεί κατά 26.615\%.
|
||||
|
||||
Επιπροσθέτως, με βάση τα γραφήματα που παράχθηκαν από το VulsRepo, μπορούμε να
|
||||
διακρίνουμε μια άμεση πτώση των ευπαθειών με βάση την κατηγορία σοβαρότητας
|
||||
τους στο σχήμα \ref{fig:vuls-cvss-severity-table}.
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = .8\textwidth]{Figures/Scans/Vuls/count_servername_by_cvss_severity_table_chart.png}
|
||||
\captionof{figure}{Πίνακας συνολικών ευπαθειών ανά κατηγορία σοβαρότητας}
|
||||
\label{fig:vuls-cvss-severity-table}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
Το παραπάνω σχήμα απεικονίζεται και γραφικά ως εξής:
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = .8\textwidth]{Figures/Scans/Vuls/count_servername_by_cvss_severity_area_chart.png}
|
||||
\captionof{figure}{Γράφημα συνολικών ευπαθειών ανά κατηγορία σοβαρότητας}
|
||||
\label{fig:vuls-cvss-severity-area-chart}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
\clearpage
|
||||
|
||||
Πιο συγκεκριμένα, παρατηρήθηκε 14.5663\% μείωση των ευπαθειών δικτύου και
|
||||
13.5793\% των φυσικών ευπαθειών. Αυτό απεικονίζεται ορθότερα στα παρακάτω
|
||||
σχήματα.
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = .8\textwidth]{Figures/Scans/Vuls/network_attacks_by_servername.png}
|
||||
\captionof{figure}{Ευπάθειες δικτύου}
|
||||
\label{fig:vuls-network-vulnerabilities}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = .8\textwidth]{Figures/Scans/Vuls/network_attacks_by_servername_line_chart.png}
|
||||
\captionof{figure}{Μείωση ευπαθειών δικτύου}
|
||||
\label{fig:vuls-network-vulnerabilities-drop}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = .8\textwidth]{Figures/Scans/Vuls/physical_attacks_by_servername.png}
|
||||
\captionof{figure}{Φυσικές ευπάθειες}
|
||||
\label{fig:vuls-physical-vulnerabilities}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = .8\textwidth]{Figures/Scans/Vuls/physical_attacks_by_servername_line_chart.png}
|
||||
\captionof{figure}{Μείωση φυσικών ευπαθειών}
|
||||
\label{fig:vuls-physical-vulnerabilities-drop}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
\clearpage
|
||||
|
||||
\subsection{Αποτελέσματα αξιολόγησης με το Lynis} \label{lynisResults}
|
||||
|
||||
Αφότου ολοκληρώθηκε η εκτέλεση του Lynis στους δύο διακομιστές, ήταν πλέον
|
||||
δυνατή η σύγκριση του δείκτη ασφαλείας τους με την εξής εντολή:
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
cat lynis.log | grep -i index | sed 's/^ *//g' | cut -d' ' -f4
|
||||
\end{bashcode}
|
||||
\caption{Εκτύπωση δείκτη ασφαλείας}
|
||||
\label{lst:lynis-security-index}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
Το αποτέλεσμα της εντολής \ref{lst:lynis-security-index} είναι διαφέρει προς το
|
||||
καλύτερο όταν το SecDep χρησιμοποιείται με την παράμετρο σκλήρυνσης όπως
|
||||
δείχνουν τα αποτελέσματα:
|
||||
|
||||
\begin{savenotes}
|
||||
\selectfont
|
||||
\begin{table}[!ht]
|
||||
\caption{Δείκτης ασφαλείας του Lynis}
|
||||
\renewcommand{\arraystretch}{1.5}
|
||||
\centering
|
||||
\newcolumntype{C}{>{\centering\arraybackslash}m{6cm}}
|
||||
\textgreek{\begin{tabular}{||C|C||}
|
||||
\hline
|
||||
|
||||
Διακομιστής & Δείκτης Ασφαλείας \\ [0.5ex]
|
||||
|
||||
\hline\hline
|
||||
|
||||
Προ σκλήρυνσης & 65 \\
|
||||
|
||||
\hline
|
||||
|
||||
Μετά σκλήρυνσης & 71 \\
|
||||
|
||||
\hline
|
||||
\end{tabular}}
|
||||
\label{table:lynis-security-index-table}
|
||||
\renewcommand{\arraystretch}{1}
|
||||
\end{table}
|
||||
\end{savenotes}
|
||||
|
||||
H αύξηση ασφαλείας του διακομιστή ανέρχεται στο 9.23077\% και απεικονίζεται
|
||||
γραφικά στο σχήμα \ref{fig:lynis-security-index}.
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = .8\textwidth]{Figures/Scans/Lynis/Lynis_Hardening_Index.png}
|
||||
\captionof{figure}{Αύξηση δείκτη ασφαλείας του Lynis}
|
||||
\label{fig:lynis-security-index}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
\subsection{Αποτελέσματα αξιολόγησης με το LUNAR} \label{lunarResults}
|
||||
|
||||
Παρόμοια με το Lynis, εφόσον το LUNAR ολοκληρώσει την αξιολόγηση του διακομιστή
|
||||
παράγεται μια αναφορά. Στο τελικό μέρος της αναφοράς παρουσιάζονται, ο αριθμός
|
||||
των ελέγχων που πραγματοποιήθηκαν, των θετικών αποτελεσμάτων και των
|
||||
προειδοποιήσεων για σημεία που ενδέχεται να χρήζουν βελτίωσης.
|
||||
|
||||
Προκειμένου να εξάγουμε μια βαθμολογία, θα λάβουμε υπόψιν τον αριθμό των
|
||||
προειδοποιήσεων, τον οποίο θα αποκτήσουμε με την εκτέλεση της παρακάτων
|
||||
εντολής:
|
||||
|
||||
\begin{listing}[!ht]
|
||||
\begin{bashcode}
|
||||
cat lunar.log | grep -i "warnings:" | awk '{print $2}'
|
||||
\end{bashcode}
|
||||
\caption{Εκτύπωση συνολικών προειδοποιήσεων του Lunar}
|
||||
\label{lst:lunar-warnings}
|
||||
\vspace*{-10pt}
|
||||
\end{listing}
|
||||
|
||||
\begin{savenotes}
|
||||
\selectfont
|
||||
\begin{table}[!ht]
|
||||
\caption{Συνολικές προειδοποιήσεις του Lunar}
|
||||
\renewcommand{\arraystretch}{1.5}
|
||||
\centering
|
||||
\newcolumntype{C}{>{\centering\arraybackslash}m{6cm}}
|
||||
\textgreek{\begin{tabular}{||C|C||}
|
||||
\hline
|
||||
|
||||
Διακομιστής & Αριθμός Προειδοποιήσεων \\ [0.5ex]
|
||||
|
||||
\hline\hline
|
||||
|
||||
Προ σκλήρυνσης & 266 \\
|
||||
|
||||
\hline
|
||||
|
||||
Μετά σκλήρυνσης & 260 \\
|
||||
|
||||
\hline
|
||||
\end{tabular}}
|
||||
\label{table:lunar-warnings-table}
|
||||
\renewcommand{\arraystretch}{1}
|
||||
\end{table}
|
||||
\end{savenotes}
|
||||
|
||||
Από τον πίνακα \ref{table:lunar-warnings-table} διαπιστώνεται πως έχουμε
|
||||
2.25564\% αύξηση της ασφάλειας, το οποίο απεικονίζεται και ως εξής:
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = .7\textwidth]{Figures/Scans/Lunar/lunar_warnings.png}
|
||||
\captionof{figure}{Συνολικές προειδοποιήσεις του Lunar}
|
||||
\label{fig:lunar-warnings}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
\section{Συμπεράσματα αποτελεσμάτων αξιολόγησης} \label{evaluationResultsConclusion}
|
||||
|
||||
Από τα αποτελέσματα των τριών εργαλείων αξιολόγησης, προκύπτει ότι μετά την
|
||||
εφαρμογή της παραμέτρου σκλήρυνσης, ένας διακομιστής μπορεί να ασφαλιστεί σε
|
||||
ικανοποιητικό βαθμό. Η συγκεκριμένη παράμετρος σκληραίνει τον διακομιστή και με
|
||||
μεθόδους που δεν είναι μετρήσιμες, όπως η δημιουργία εκτελέσιμων αρχείων και η
|
||||
εφαρμογή περιοδικής τους εκτέλεσης με στόχους την ενημέρωση των πακέτων
|
||||
λογισμικού και το κλείσιμο θυρών που δεν χρησιμοποιούνται αντίστοιχα.
|
||||
|
||||
Επιπρόσθετα, η σκλήρυνση της μηχανής δοχείων Docker δεν απεικονίζεται σε κανένα
|
||||
από τα παραπάνω γραφήματα. Αυτό συμβαίνει διότι δεν υπάρχει εργαλείο που να
|
||||
μπορεί να αξιολογήσει την ασφάλεια του Docker όταν αυτό χρησιμοποιείται χωρίς
|
||||
διαχειριστικά δικαιώματα. Ωστόσο, η σκλήρυνση του έχει πετύχει διότι η απαλλαγή
|
||||
από τον περιορισμό των διαχειριστικών δικαιωμάτων έχει ως αποτέλεσμα την μείωση
|
||||
της επιφάνειας επίθεσης σε περίπτωση παραβίασης του, ενώ η αντικατάσταση του
|
||||
runC με το runsc μειώνει την πιθανότητα παραβίασης. Για την ενίσχυση της
|
||||
ασφάλειας του Docker, εκτελούνται και βήματα όπως η ρύθμιση της παραμέτρου του
|
||||
δαίμονα \textquote{no-new-privileges} που αποτρέπει τα δοχεία από το να
|
||||
λαμβάνουν επιπρόσθετα δικαιώματα και η παράμετρος \textquote{selinux-enabled}
|
||||
εάν υποστηρίζεται από την διανομή. Τέλος, το secdep ασφαλίζει το Docker
|
||||
επιπρόσθετα με έμμεσο τρόπο, εκτελώντας την υπηρεσία watchtower
|
||||
\footfullcite{watchtower}, η οποία είναι υπεύθυνη για την αυτόματη ενημέρωση
|
||||
των εικόνων δοχείων του συστήματος.
|
||||
|
||||
Επομένως, το συμπέρασμα που προκύπτει είναι πως η χρήση του SecDep μπορεί να
|
||||
αυξήσει την ασφάλεια ενός συστήματος. Ωστόσο, ενώ τα εργαλεία αξιολόγησης
|
||||
παρουσιάζουν ένα ποσοστό αύξησης της ασφάλειας, η πραγματική αύξηση είναι
|
||||
μεγαλύτερη διότι πολλές από τις αλλαγές που πραγματοποιούνται δεν
|
||||
αντικατοπτρίζονται στα αποτελέσματα των αποτιμήσεων.
|
||||
|
||||
@@ -1 +1,66 @@
|
||||
\chapter{Συμπεράσματα \& Προτάσεις για Μελλοντική Έρευνα} \label{conclusions}
|
||||
|
||||
\noindent Σήμερα, η τεχνολογία της εικονικοποίησης χρησιμοποιείται ευρέως σε
|
||||
πολλούς τομείς της πληροφορικής. Πρακτικά, όλες οι μεγάλες εταιρείες παροχής
|
||||
υπηρεσιών, σε παγκόσμιο επίπεδο, χρησιμοποιούν εικονικές μηχανές για την παροχή
|
||||
των υπηρεσιών τους. Επιπλέον, η τεχνολογία των δοχείων, έχει αποτελέσει μια από
|
||||
τις μεγαλύτερες επαναστατικές εξελίξεις της τελευταίας δεκαετίας, δίνοντας την
|
||||
δυνατότητα στους προγραμματιστές να αναπτύσσουν και να εκτελούν εφαρμογές σε
|
||||
οποιοδήποτε περιβάλλον, χωρίς να χρειάζεται να ανησυχούν για τα χαρακτηριστικά
|
||||
του συστήματος στο οποίο θα εκτελεστεί η εφαρμογή. Ωστόσο, η χρήση των παραπάνω
|
||||
τεχνολογιών, όπως και οποιασδήποτε άλλης τεχνολογίας, προϋποθέτει την υπακοή σε
|
||||
κάποιους κανόνες και πρωτόκολλα, προκειμένου να επιτευχθεί η αποδοτικότερη και
|
||||
ασφαλέστερη λειτουργία τους.
|
||||
|
||||
Στην παρούσα διπλωματική εργασία, παρουσιάστηκαν διάφορα ζητήματα ασφαλείας που
|
||||
αφορούν περιβάλλοντα εικονικών μηχανών και δοχείων. Με γνώμονα τα ζητήματα
|
||||
αυτά, πραγματοποιήθηκε η ανάπτυξη ενός εργαλείου, που μπορεί με
|
||||
αυτοματοποιημένο τρόπο να δημιουργήσει εικονικές μηχανές στις οποίες θα
|
||||
εγκατασταθούν δοχεία Docker, αντιμετωπίζοντας ταυτόχρονα τα προαναφερθέντα
|
||||
ζητήματα ασφαλείας. Το εργαλείο αυτό, ονομάζεται SecDep και αποτελείται από δύο
|
||||
εκτελέσιμα αρχεία, τα οποία μπορούν να εκτελεστούν και ως αυτοτελείς εφαρμογές.
|
||||
Το πρώτο, υπεύθυνο για την δημιουργία και διαχείριση των εικονικών μηχανών και
|
||||
το δεύτερο, για την σκλήρυνση του συστήματος και την εγκατάσταση/σκλήρυνση του
|
||||
δαίμονα Docker.
|
||||
|
||||
\section{Συμπεράσματα}
|
||||
|
||||
Με βάση τα αποτελέσματα των πειραμάτων που πραγματοποιήθηκαν στο κεφάλαιο
|
||||
\ref{experimentationANDresults}, μπορούμε να συμπεράνουμε ότι το εργαλείο
|
||||
SecDep, είναι ικανό να δημιουργήσει εικονικές μηχανές που έχουν σκληρυνθεί σε
|
||||
ικανοποιητικό βαθμό, χωρίς περαιτέρω παρέμβαση από τον χρήστη. Μπορεί λοιπόν να
|
||||
αποτελέσει ένα χρήσιμο εργαλείο για την αυτοματοποιημένη δημιουργία και
|
||||
διαμόρφωση ενός ασφαλούς κατανεμημένου περιβάλλοντος, έτοιμο να υποδεχτεί
|
||||
δοχεία Docker για την στέγαση εφαρμογών μικρο-υπηρεσιών. Μιας αρχιτεκτονικής
|
||||
που έχει αρχίσει να αποκτά ιδιαίτερη δημοτικότητα τα τελευταία χρόνια.
|
||||
|
||||
Επιπλέον, το εργαλείο SecDep, μπορεί να αποτελέσει ένα χρήσιμο εργαλείο για την
|
||||
εκπαίδευση σε θέματα ασφάλειας, καθώς ο χρήστης έχει την δυνατότητα να
|
||||
μελετήσει τον πηγαίο κώδικα του και να προσθέσει τις δικές του λειτουργίες,
|
||||
προκειμένου να επεκτείνει την λειτουργικότητα του. Το εργαλείο διανέμεται με
|
||||
την άδεια χρήσης \href{https://www.gnu.org/licenses/gpl-3.0.html}{GPLv3}, η
|
||||
οποία παρέχει το δικαίωμα στον χρήστη να το χρησιμοποιήσει, να το μελετήσει, να
|
||||
το τροποποιήσει και να το διανείμει ελεύθερα.
|
||||
|
||||
\section{Προτάσεις για Μελλοντική Έρευνα}
|
||||
|
||||
Παρόλο που το SecDep, είναι ένα πλήρες και λειτουργικό εργαλείο, υπάρχουν
|
||||
πολλές δυνατότητες για την επέκταση του. Αρχικά, θα μπορούσε να επεκταθεί η
|
||||
λειτουργικότητα του, ώστε να υποστηρίζει και άλλους παρόχους νέφους. Αυτό
|
||||
βέβαια εξαρτάται άμεσα και από το εύρος της υποστήριξης συγκεκριμένων
|
||||
συναρτήσεων από την βιβλιοθήκη libcloud. Επιπλέον, θα μπορούσε να αλλοιωθεί με
|
||||
σκοπό την υποστήριξη παραπάνω μεθόδων της βιβλιοθήκης, δίνοντας στον χρήστη
|
||||
δυνατότητες όπως η ρύθμιση DNS, εξωτερικής αποθήκευσης δεδομένων και
|
||||
εξισορρόπησης φόρτου εργασιών.
|
||||
|
||||
Τα παραπάνω αφορούν την επέκταση ενός από τα δύο εκτελέσιμα αρχεία του SecDep.
|
||||
Το δεύτερο, το οποίο επικεντρώνεται στην σκλήρυνση του συστήματος, θα μπορούσε
|
||||
και αυτό να επεκταθεί, προσθέτοντας νέες λειτουργίες. Μια από αυτές θα μπορούσε
|
||||
να είναι η επιλογή του χρήστη για εφαρμογή συγκεκριμένων ρυθμίσεων ασφαλείας.
|
||||
Επίσης, θα μπορούσε να χωριστεί σε δύο ανεξάρτητα εκτελέσιμα αρχεία, το ένα
|
||||
υπεύθυνο για την σκλήρυνση του συστήματος και το άλλο για την εγκατάσταση και
|
||||
σκλήρυνση του δαίμονα Docker. Με αυτόν τον τρόπο, ο χρήστης θα μπορούσε να
|
||||
επιλέξει να εγκαταστήσει τον δαίμονα Docker σε ένα σύστημα που έχει ήδη
|
||||
σκληρυνθεί, χωρίς να χρειάζεται να εκτελέσει το πρώτο εκτελέσιμο αρχείο. Τέλος,
|
||||
θα μπορούσε να βελτιωθεί η διαδικασία σκλήρυνσης. Τα αποτελέσματα είναι ήδη
|
||||
αρκετά ικανοποιητικά, ωστόσο πάντα υπάρχουν περιθώρια βελτίωσης.
|
||||
|
||||
@@ -3,31 +3,57 @@
|
||||
\addtocontents{toc}{\vspace{1em}} % Add a gap in the Contents, for aesthetics
|
||||
|
||||
\noindent Εγώ, ο Χωλίδης Κωνσταντίνος, δηλώνω ότι αυτή η διπλωματική εργασία με
|
||||
τίτλο, Σκλήρυνση Μηχανής Δοχείων και Λειτουργικού Συστήματος σε Περιβάλλοντα
|
||||
Linux, και η δουλειά που παρουσιάζεται σε αυτή είναι δικά μου. Επιβεβαιώνω ότι:
|
||||
τίτλο, \textquote{Σκλήρυνση Μηχανής Δοχείων και Λειτουργικού Συστήματος σε
|
||||
Περιβάλλοντα Linux}, και η δουλειά που παρουσιάζεται σε αυτή είναι δικά μου.
|
||||
Επιβεβαιώνω ότι:
|
||||
|
||||
\begin{itemize}
|
||||
\item[\tiny{$\blacksquare$}] Αυτή η δουλειά πραγματοποιήθηκε ολοκληρωτικά ή κυρίως κατά την υποψηφιότητά μου για τίτλο προπτυχιακών σπουδών σε αυτό το πανεπιστήμιο.
|
||||
|
||||
\item[\tiny{$\blacksquare$}] Όπου οποιοδήποτε μέρος αυτής της πτυχιακής εργασίας έχει προηγουμένως κατατεθεί για την απόκτηση πτυχίου ή άλλου τίτλου σε αυτό ή άλλο πανεπιστήμιο, αυτό διατυπώνεται ξεκάθαρα.
|
||||
\item[\tiny{$\blacksquare$}] Αυτή η δουλειά πραγματοποιήθηκε ολοκληρωτικά ή
|
||||
κυρίως κατά την υποψηφιότητά μου για τίτλο προπτυχιακών σπουδών σε αυτό
|
||||
το πανεπιστήμιο.
|
||||
|
||||
\item[\tiny{$\blacksquare$}] Όπου έχω συμβουλευτεί την δημοσιευμένη δουλειά τρίτων, αυτό αποδίδεται ορθώς.
|
||||
\item[\tiny{$\blacksquare$}] Όπου οποιοδήποτε μέρος αυτής της διπλωματικής
|
||||
εργασίας έχει προηγουμένως κατατεθεί για την απόκτηση πτυχίου ή άλλου
|
||||
τίτλου σε αυτό ή άλλο πανεπιστήμιο, αυτό διατυπώνεται ξεκάθαρα.
|
||||
|
||||
\item[\tiny{$\blacksquare$}] Όπου έχω παραθέσει από δουλειά τρίτων, η πηγή δίνεται πάντα. Με εξαίρεση αυτές τις παραθέσεις, αυτή η πτυχιακή εργασία είναι εξ ολοκλήρου προσωπική μου δουλειά.
|
||||
\item[\tiny{$\blacksquare$}] Όπου έχω συμβουλευτεί την δημοσιευμένη δουλειά
|
||||
τρίτων, αυτό αποδίδεται ορθώς.
|
||||
|
||||
\item[\tiny{$\blacksquare$}] Έχω παραθέσει όλες τις κύριες πηγές βοήθειας.
|
||||
\item[\tiny{$\blacksquare$}] Όπου έχω παραθέσει από δουλειά τρίτων, η πηγή
|
||||
δίνεται πάντα. Με εξαίρεση αυτές τις παραθέσεις, αυτή η διπλωματική
|
||||
εργασία είναι εξ ολοκλήρου προσωπική μου δουλειά.
|
||||
|
||||
\item[\tiny{$\blacksquare$}] Έχω παραθέσει όλες τις κύριες πηγές βοήθειας.
|
||||
|
||||
\item[\tiny{$\blacksquare$}] Όπου αυτή η διπλωματική εργασία είναι
|
||||
βασισμένη σε συνεργατική δουλειά δική μου και τρίτων, έχω καταστήσει
|
||||
ξεκάθαρο ποια κομμάτια έχουν πραγματοποιηθεί από άλλους και πώς
|
||||
συνέβαλα εγώ.
|
||||
|
||||
\item[\tiny{$\blacksquare$}] Όπου αυτή η πτυχιακή εργασία είναι βασισμένη σε συνεργατική δουλειά δική μου και τρίτων, έχω καταστήσει ξεκάθαρο ποια κομμάτια έχουν πραγματοποιηθεί από άλλους και πώς συνέβαλα εγώ.
|
||||
% Alternative to "\\" without the "Underfull \hbox (badness 10000) in paragraph" error
|
||||
\vspace{\baselineskip}
|
||||
\end{itemize}
|
||||
|
||||
\vfill\vfill
|
||||
|
||||
Υπογραφή:\\
|
||||
\rule[1em]{25em}{0.5pt} % This prints a line for the signature
|
||||
% Υπογραφή:\\
|
||||
% \rule[1em]{25em}{0.5pt} % This prints a line for the signature
|
||||
|
||||
% Ημερομηνία:\\
|
||||
% \rule[1em]{25em}{0.5pt} % This prints a line to write the date
|
||||
|
||||
\small\noindent Αυτή η διπλωματική εργασία είναι διαθέσιμη υπό τους όρους της άδειας χρήσης: \\
|
||||
\small\textbf{Αναφορά Δημιουργού - Μη Εμπορική Χρήση - Παρόμοια Διανομή 4.0 Διεθνές}
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\href{https://creativecommons.org/licenses/by-nc-sa/4.0/deed.el}{
|
||||
\includegraphics[width = .3\textwidth]{Figures/License/by-nc-sa.eu.png}}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
Ημερομηνία:\\
|
||||
\rule[1em]{25em}{0.5pt} % This prints a line to write the date
|
||||
}
|
||||
\clearpage % Declaration ended, now start a new page
|
||||
|
||||
BIN
Figures/AWS_hardened/aws-hardened.png
Normal file
|
After Width: | Height: | Size: 581 KiB |
BIN
Figures/AWS_listing/aws-instances.png
Normal file
|
After Width: | Height: | Size: 238 KiB |
BIN
Figures/AWS_setup/create_access_key.png
Normal file
|
After Width: | Height: | Size: 184 KiB |
BIN
Figures/AWS_setup/go_to_iam.png
Normal file
|
After Width: | Height: | Size: 242 KiB |
BIN
Figures/Diagrams/harden-function-relationships.png
Normal file
|
After Width: | Height: | Size: 107 KiB |
BIN
Figures/Diagrams/secdep-flowchart-diagram.png
Normal file
|
After Width: | Height: | Size: 219 KiB |
BIN
Figures/Diagrams/secdep-function-relationships.png
Normal file
|
After Width: | Height: | Size: 169 KiB |
BIN
Figures/Diagrams/secdep-module-dependencies-organized.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
Figures/Diagrams/secdep-sequence-diagram.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
Figures/Diagrams/secdep-use-case-diagram.jpg
Normal file
|
After Width: | Height: | Size: 543 KiB |
BIN
Figures/Installation/secdep_install_without_git.png
Normal file
|
After Width: | Height: | Size: 204 KiB |
BIN
Figures/License/by-nc-sa.eu.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
Figures/Scans/Lunar/lunar_warnings.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
Figures/Scans/Lynis/Lynis_Hardening_Index.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
Figures/Scans/Vuls/CVEs_Διακομιστών.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 102 KiB |
BIN
Figures/Scans/Vuls/network_attacks_by_servername.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
Figures/Scans/Vuls/network_attacks_by_servername_line_chart.png
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
Figures/Scans/Vuls/physical_attacks_by_servername.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
Figures/Scans/Vuls/physical_attacks_by_servername_line_chart.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
Figures/VULS/vuls-architecture.png
Normal file
|
After Width: | Height: | Size: 91 KiB |
BIN
Figures/VULS/vuls-scan-flow-fast-root.png
Normal file
|
After Width: | Height: | Size: 74 KiB |
BIN
Figures/doxygen/secdepFunctions.png
Normal file
|
After Width: | Height: | Size: 161 KiB |
BIN
Figures/doxygen/secdepVariables.png
Normal file
|
After Width: | Height: | Size: 84 KiB |
BIN
Figures/lynis/lynis-screenshot.png
Normal file
|
After Width: | Height: | Size: 6.4 KiB |
@@ -30,6 +30,7 @@
|
||||
\usepackage{tcolorbox}
|
||||
% LaTeX support for the Text Companion fonts
|
||||
\usepackage{textcomp}
|
||||
\usepackage{pdflscape}
|
||||
|
||||
% Select alternative section titles (Better chapter, section and subsection titles)
|
||||
\usepackage{titlesec}
|
||||
@@ -75,7 +76,7 @@
|
||||
% Include any extra LaTeX packages required
|
||||
% biblatex because it has foocite built-in
|
||||
% Sophisticated Bibliographies in LaTeX
|
||||
\usepackage[backend=biber,style=trad-abbrv,backref=true,autocite=plain,sorting=none,natbib=true]{biblatex} % Use the "Natbib" style for the references in the Bibliography
|
||||
\usepackage[backend=biber,style=trad-abbrv,backref=true,autocite=plain,sorting=none,natbib=true,accessdate=true]{biblatex} % Use the "Natbib" style for the references in the Bibliography
|
||||
|
||||
\DefineBibliographyStrings{greek}{
|
||||
backrefpage={Αναφορά στη σελίδα},
|
||||
@@ -115,7 +116,10 @@
|
||||
\iffieldundef{urlyear}
|
||||
{}
|
||||
{\setunit*{\addspace}%
|
||||
\printtext[urldate]{\printurldate}}}
|
||||
% \printtext[urldate]{\printurldate}
|
||||
{\printurldate}
|
||||
}
|
||||
}
|
||||
%%%
|
||||
|
||||
%%%%
|
||||
@@ -138,6 +142,11 @@
|
||||
|
||||
%%%%
|
||||
|
||||
\renewcommand{\listoflistingscaption}{Κατάλογος Εντολών}
|
||||
\renewcommand{\listingscaption}{Οδηγία}
|
||||
|
||||
\newminted{bash}{style=sas,breaklines,frame=lines}
|
||||
|
||||
\addbibresource{Bibliography.bib} % The references (bibliography) information are stored in the file named "Bibliography.bib"
|
||||
|
||||
% Reimplementation of and extensions to LaTeX verbatim
|
||||
@@ -151,6 +160,11 @@
|
||||
% Define enumerated description lists
|
||||
% Control layout of itemize, enumerate, description
|
||||
\usepackage{enumitem}
|
||||
% \usepackage[
|
||||
% type={CC},
|
||||
% modifier={by-nc-sa},
|
||||
% version={3.0},
|
||||
% ]{doclicense}
|
||||
\newcounter{descriptcount}
|
||||
\newcounter{descriptcount2}
|
||||
\newlist{enumdescript}{description}{2}
|
||||
|
||||
68
Thesis.cls
@@ -103,12 +103,6 @@
|
||||
\newtheorem{remark}[theorem]{Remark}
|
||||
\usepackage[centerlast,small,sc]{caption}
|
||||
\setlength{\captionmargin}{20pt}
|
||||
% \newcommand{\fref}[1]{Figure~\ref{#1}}
|
||||
% \newcommand{\tref}[1]{Table~\ref{#1}}
|
||||
% \newcommand{\eref}[1]{Equation~\ref{#1}}
|
||||
% \newcommand{\cref}[1]{Chapter~\ref{#1}}
|
||||
% \newcommand{\sref}[1]{Section~\ref{#1}}
|
||||
% \newcommand{\aref}[1]{Appendix~\ref{#1}}
|
||||
\renewcommand{\topfraction}{0.85}
|
||||
\renewcommand{\bottomfraction}{.85}
|
||||
\renewcommand{\textfraction}{0.1}
|
||||
@@ -124,6 +118,8 @@
|
||||
\usepackage{booktabs}
|
||||
\usepackage{rotating}
|
||||
\usepackage{listings}
|
||||
\usepackage{minted}
|
||||
\usepackage{multirow}
|
||||
\usepackage{lstpatch}
|
||||
\lstset{captionpos=b,
|
||||
frame=tb,
|
||||
@@ -138,7 +134,7 @@
|
||||
\usepackage[pdfpagemode={UseOutlines},bookmarks=true,bookmarksopen=true,
|
||||
bookmarksopenlevel=0,bookmarksnumbered=true,hypertexnames=false,
|
||||
colorlinks,linkcolor={blue},citecolor={blue},urlcolor={red},
|
||||
pdfstartview={FitV},unicode,breaklinks=true]{hyperref}
|
||||
pdfstartview={FitV},unicode,breaklinks=true,pdfusetitle]{hyperref}
|
||||
\pdfstringdefDisableCommands{
|
||||
\let\\\space
|
||||
}
|
||||
@@ -155,6 +151,7 @@
|
||||
\newcommand*{\subject}[1]{\def\subjectname{#1}}
|
||||
\newcommand*{\keywords}[1]{\def\keywordnames{#1}}
|
||||
\newcommand*{\supervisor}[1]{\def\supname{#1}}
|
||||
|
||||
\examiner {}
|
||||
\degree {}
|
||||
\authors {}
|
||||
@@ -176,9 +173,19 @@
|
||||
\FACULTY {\texorpdfstring{\href{https://www.aegean.gr/schools/πολυτεχνική-σχολή}
|
||||
{ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ}}
|
||||
{FACULTY NAME (IN BLOCK CAPITALS)}}
|
||||
\supervisor {\texorpdfstring{\href{https://www.icsd.aegean.gr/profile.php?member=2112}
|
||||
{Επιβλέπων Καθηγητής: Δρ. Κρητικός Κυριάκος}}
|
||||
{Supervising Proffessor's name}}
|
||||
\supervisor {
|
||||
\texorpdfstring{
|
||||
{Επιβλέπων Καθηγητής:}
|
||||
\href{https://www.icsd.aegean.gr/profile.php?member=2112}{Δρ. Κρητικός Κυριάκος}\\
|
||||
{Αναπληρωτής Καθηγητής Τμήματος ΜΠΕΣ}\\
|
||||
{Μέλη εξεταστικής επιτροπής:}
|
||||
\vfill
|
||||
\href{https://www.icsd.aegean.gr/profile.php?member=one}{κάποιος,}
|
||||
\href{https://www.icsd.aegean.gr/profile.php?member=two}{κάποιος άλλος}
|
||||
}
|
||||
{Supervising Proffessor's name and committee member's names}
|
||||
}
|
||||
|
||||
\addresses {}
|
||||
\subject {}
|
||||
\keywords {}
|
||||
@@ -204,9 +211,9 @@
|
||||
\setlength{\parskip}{0pt}
|
||||
{\large\textbf{\UNIVNAME}\par}
|
||||
\vfill
|
||||
{\huge \textbf \@title \par}
|
||||
{\LARGE \textbf \@title \par}
|
||||
\vfill
|
||||
{\LARGE του \par}
|
||||
{\large του \par}
|
||||
\smallskip
|
||||
{\LARGE \authornames \par}
|
||||
\vfill
|
||||
@@ -252,14 +259,16 @@
|
||||
\setlength{\parskip}{0pt}
|
||||
{\normalsize \UNIVNAME \par}
|
||||
\bigskip
|
||||
{\huge{\textit{Σύνοψη}} \par}
|
||||
\bigskip
|
||||
{\huge{\textgreek{\textbf{Σύνοψη}}} \par}
|
||||
\bigskip
|
||||
\bigskip
|
||||
{\normalsize \facname \par}
|
||||
{\normalsize \deptname \par}
|
||||
\bigskip
|
||||
{\normalsize Προπτυχιακός Τίτλος Σπουδών\par}
|
||||
{\normalsize Προπτυχιακός Τίτλος Σπουδών \par}
|
||||
\bigskip
|
||||
{\normalsize\bfseries \@title \par}
|
||||
{\normalsize \textbf{Σκλήρυνση Μηχανής Δοχείων και Λειτουργικού Συστήματος σε Περιβάλλοντα Linux} \par}
|
||||
\medskip
|
||||
{\normalsize του \authornames \par}
|
||||
\bigskip
|
||||
@@ -269,6 +278,33 @@
|
||||
\vfil\vfil\vfil\null
|
||||
\cleardoublepage
|
||||
}
|
||||
\newenvironment{abstractenglish}
|
||||
{
|
||||
\thispagestyle{empty}
|
||||
\null\vfil
|
||||
\begin{center}
|
||||
\setlength{\parskip}{0pt}
|
||||
{\normalsize University of the Aegean \par}
|
||||
\bigskip
|
||||
\bigskip
|
||||
{\huge{\textgreek{\textbf{Abstract}}} \par}
|
||||
\bigskip
|
||||
\bigskip
|
||||
{\normalsize School of Engineering \par}
|
||||
{\normalsize Department of Information and Communication Systems Engineering \par}
|
||||
\bigskip
|
||||
{\normalsize Undergraduate Studies \par}
|
||||
\bigskip
|
||||
{\normalsize \textbf{Container Engine and Operating System Hardening in Linux Environments} \par}
|
||||
\medskip
|
||||
{\normalsize of Cholidis Konstantinos \par}
|
||||
\bigskip
|
||||
\end{center}
|
||||
}
|
||||
{
|
||||
\vfil\vfil\vfil\null
|
||||
\cleardoublepage
|
||||
}
|
||||
\addtocounter{secnumdepth}{1}
|
||||
\setcounter{tocdepth}{6}
|
||||
\newcounter{dummy}
|
||||
@@ -365,7 +401,7 @@
|
||||
\btypeout{Acknowledgements}
|
||||
\addtotoc{Ευχαριστίες}
|
||||
\thispagestyle{plain}
|
||||
\begin{center}{\huge{\textit{Ευχαριστίες}} \par}\end{center}
|
||||
\begin{center}{\huge{\textbf{Ευχαριστίες}} \par}\end{center}
|
||||
{\normalsize #1}
|
||||
\vfil\vfil\null
|
||||
|
||||
|
||||
34
Thesis.tex
@@ -18,12 +18,12 @@
|
||||
\title{Σκλήρυνση Μηχανής Δοχείων και Λειτουργικού Συστήματος σε Περιβάλλοντα Linux}
|
||||
|
||||
\authors {\texorpdfstring
|
||||
{\href{mailto:icsd16221@aegean.gr}{Χωλίδης Κωνσταντίνος - 321/2016221}}
|
||||
{Χωλίδης Κωνσταντίνος (321/2016221)}
|
||||
{\href{mailto:konsthol@proton.me}{Χωλίδης Κωνσταντίνος}}
|
||||
{Χωλίδης Κωνσταντίνος}
|
||||
}
|
||||
\addresses {\groupname\\\deptname\\\univname} % Do not change this here, instead these must be set in the "Thesis.cls" file, please look through it instead
|
||||
\date {Σάμος, Ιούλιος 2022}
|
||||
\subject {}
|
||||
\date {Σάμος, Φεβρουάριος 2024}
|
||||
\subject {Διπλωματική Εργασία}
|
||||
\keywords {docker, linux, security, virtualization, cloud, hardening, containers, virtual machines}
|
||||
|
||||
\maketitle
|
||||
@@ -63,6 +63,7 @@ Dennis Ritchie (1941 - 2011)
|
||||
% The Abstract Page
|
||||
|
||||
\input{Abstract/abstract} % Include the abstract page
|
||||
\input{Abstract/abstractenglish} % Include the abstract page in english
|
||||
|
||||
%% ----------------------------------------------------------------
|
||||
|
||||
@@ -72,7 +73,17 @@ Dennis Ritchie (1941 - 2011)
|
||||
\acknowledgements{
|
||||
\addtocontents{toc}{\vspace{1em}} % Add a gap in the Contents, for aesthetics
|
||||
|
||||
Εδώ γράφονται οι ευχαριστίες.
|
||||
\noindent Στο σημείο αυτό, θέλω να ευχαριστήσω όλους τους ανθρώπους που
|
||||
στάθηκαν δίπλα μου καθ' όλη την διάρκεια των σπουδών μου. Κυρίως, ευχαριστώ την
|
||||
οικογένεια μου που με στήριξε και συνεχίζει να με στηρίζει με κάθε τρόπο σε όλα
|
||||
τα επαγγελματικά και προσωπικά μου βήματα. Επίσης, ευχαριστώ βαθύτατα τους
|
||||
φίλους μου, που βρίσκονται πάντα δίπλα μου σε κάθε στάδιο της ζωής μου.
|
||||
|
||||
Τέλος, θέλω να ευχαριστήσω τον επιβλέποντα καθηγητή μου, κύριο Κυριάκο Κρητικό,
|
||||
που μου προσέφερε την ευκαιρία να ασχοληθώ με ένα θέμα που με ενδιέφερε κατόπιν
|
||||
συζήτησης μαζί του. Η συνεργασία μας ήταν πολύ εποικοδομητική και η εκπόνηση
|
||||
της παρούσας διπλωματικής εργασίας με βοήθησε να εμβαθύνω τις γνώσεις μου σε
|
||||
όλες τις τεχνολογίες που χρειάστηκαν για την υλοποίησή της.
|
||||
|
||||
}
|
||||
\clearpage % End of the Acknowledgements
|
||||
@@ -94,6 +105,11 @@ Dennis Ritchie (1941 - 2011)
|
||||
\lhead{\textgreek{Κατάλογος Πινάκων}} % Set the left side page header to "List of Tables"
|
||||
\listoftables % Write out the List of Tables
|
||||
|
||||
%% ----------------------------------------------------------------
|
||||
\lhead{\textgreek{Κατάλογος Εντολών}} % Set the left side page header to "List of Listings"
|
||||
\addtotoc{Λίστα Εντολών}
|
||||
\listoflistings % Write out the List of Listings
|
||||
|
||||
%% ----------------------------------------------------------------
|
||||
|
||||
\input{Abbreviations/abbreviations} % Include a list of abbreviations (a table of two columns)
|
||||
@@ -105,7 +121,13 @@ Dennis Ritchie (1941 - 2011)
|
||||
\setstretch{1.3} % Return the line spacing back to 1.3
|
||||
|
||||
\pagestyle{empty} % Page style needs to be empty for this page
|
||||
\dedicatory{Αφιέρωση (προαιρετική)}
|
||||
\dedicatory{
|
||||
|
||||
Την παρούσα διπλωματική εργασία την αφιερώνω στην οικογένειά μου, τους φίλους
|
||||
μου, καθώς και σε όλους τους ανθρώπους που με στήριξαν κατά την διάρκεια των
|
||||
σπουδών μου.
|
||||
|
||||
}
|
||||
|
||||
\addtocontents{toc}{\vspace{2em}} % Add a gap in the Contents, for aesthetics
|
||||
|
||||
|
||||