diff --git a/Bibliography.bib b/Bibliography.bib index b52275d..f6bba3a 100644 --- a/Bibliography.bib +++ b/Bibliography.bib @@ -230,6 +230,12 @@ howpublished="\url{https://www.ibm.com/downloads/cas/VG8KRPRM}" } +@misc{ibmContainerVsVm, + title={Containers vs. Virtual Machines (VMs): What’s the Difference?}, + author={IBM}, + howpublished="\url{https://www.ibm.com/blog/containers-vs-vms/}" +} + @misc{ciaTriad, title={What is the CIA triad (confidentiality, integrity and availability)?}, author={Wesley Chai}, @@ -242,6 +248,27 @@ howpublished="\url{https://www.redhat.com/en/topics/virtualization}" } +@misc{redhatContainerVsVm, + title={Containers vs VMs}, + author={Red Hat}, + year={2020}, + howpublished="\url{https://www.redhat.com/en/topics/containers/containers-vs-vms}" +} + +@misc{dockerAlternatives, + title={What Are The Best Docker Alternatives in 2022?}, + author={Cody Slingerland}, + year={2022}, + howpublished="\url{https://www.cloudzero.com/blog/docker-alternatives/}" +} + +@article{yasrab2018mitigating, + title={Mitigating docker security issues}, + author={Yasrab, Robail}, + journal={arXiv preprint arXiv:1804.05039}, + year={2018} +} + @misc{ansible, title={Ansible}, author={Red Hat}, diff --git a/Chapters/2.Background.tex b/Chapters/2.Background.tex index 3ca1bbd..99be23b 100644 --- a/Chapters/2.Background.tex +++ b/Chapters/2.Background.tex @@ -903,9 +903,207 @@ scripting, SQL injection}, χειραγώγηση \textlatin{cookies} ή εκμ \subsection{\textlatin{Application containerization}} \label{applicationContainerization} +Τα δοχεία ενθυλακώνουν μια εφαρμογή ως ένα αυτόνομο πακέτο που περιέχει τον +κώδικα, τις βιβλιοθήκες και τις εξαρτήσεις που χρειάζεται για να εκτελεστεί. Οι +εφαρμογές σε δοχεία θεωρούνται απομονωμένες με την έννοια ότι δεν έχουν ανάγκη +ένα αντίγραφο του λειτουργικού συστήματος αλλά αντ'' αυτού ένα +\textlatin{runtime engine} στο κύριο μηχάνημα που λειτουργεί ως διαμεσολαβητής +των δοχείων για να μοιράζονται το λειτουργικό σύστημα μεταξύ τους. Κοινές +βιβλιοθήκες ή εκτελέσιμα αρχεία μπορούν επίσης να μοιραστούν μεταξύ πολλών +δοχείων, συμβάλλοντας έτσι στην εξάλειψη περιττής υπολογιστικής ισχύος +καθιστώντας τα δοχεία μικρά στον χώρο που καταλαμβάνουν, γρήγορα στην εκκίνηση +και ικανά να εκτελεστούν σε οποιαδήποτε πλατφόρμα ή περιβάλλον νέφους. +\pagebreak -\section{\textlatin{Docker Attack Vector Mitigation}} \label{dockerAttackVectorMitigation} +\subsection{Πλεονεκτήματα \textlatin{containerization}} \label{containerizationAdvantages} + +Τα δοχεία προσφέρουν μια σειρά από πλεονεκτήματα σε σχέση με τις παραδοσιακές +εικονικές μηχανές. Αυτά είναι μεταξύ άλλων τα εξής: + +\begin{itemize} + + \item \textbf{Φορητότητα}: + + Τα δοχεία είναι ανεξάρτητα από το λειτουργικό σύστημα και το περιβάλλον + εκτέλεσης τους και ως εκ τούτου μπορούν να εκτελεστούν σε οποιαδήποτε + πλατφόρμα ή περιβάλλον νέφους ομοιόμορφα και με συνέπεια. Το γεγονός + ότι τα κομμάτια ενός προγράμματος μπορούν να ορισθούν σε ένα μονάχα + αρχείο κειμένου και να κατασκευαστούν με αυτοματοποιημένο τρόπο + οπουδήποτε τους δίνει πολύ μεγαλύτερο προβάδισμα στον τομέα της + φορητότητας σε σχέση με τις εικονικές μηχανές. + + \item \textbf{\textlatin{Agility}}: + + Το \textlatin{Docker Engine} ξεκίνησε το βιομηχανικό πρότυπο για τη + χρήση δοχείων προσφέροντας απλά εργαλεία ανάπτυξης και μια καθολική + προσέγγιση πακεταρίσματος που λειτουργεί εξίσου καλά σε όλες τις + πλατφόρμες. Το οικοσύστημα των δοχείων έχει μετατοπιστεί σε μηχανές που + διαχειρίζεται η \textlatin{Open Container Initiative (OCI)} και οι + προγραμματιστές μπορούν εύκολα και γρήγορα να πακετάρουν τις εφαρμογές + τους ως δοχεία τα οποία μπορούν να προσφέρουν χωρίς την έγνοια + υποστήριξης πολλών διαφορετικών πλατφορμών. + + \item \textbf{Ταχύτητα}: + + Τα δοχεία είναι ελαφρύτερα από τις παραδοσιακές εικονικές μηχανές λόγω + του διαμοιρασμού του πυρήνα και γι'' αυτό έχουν μικρότερο χρόνο + εκκίνησης. Αυτό τα καθιστά ιδανικά για την ανάπτυξη και την εκτέλεση + εφαρμογών σε περιβάλλοντα νέφους όπου η αποδοτικότητα αξιοποίησης των + υπολογιστικών πόρων αντανακλάται σε άμεση εξοικονόμηση κόστους. + + \item \textbf{Απομόνωση σφαλμάτων}: + + Εφόσον κάθε δοχείο είναι απομονωμένο και λειτουργεί ανεξάρτητα από τα + υπόλοιπα, η αποτυχία του ενός δε θα επηρεάσει τη συνεχή λειτουργία των + υπολοίπων. Οι ομάδες ανάπτυξης μπορούν να εντοπίζουν και να διορθώνουν + τυχόν τεχνικά προβλήματα χωρίς να υπάρχει διακοπή λειτουργίας σε άλλα + δοχεία. + + \item \textbf{Αποδοτικότητα}: + + Το γεγονός ότι τα δοχεία μοιράζονται τον ίδιο πυρήνα και κοινά κομμάτια + άλλων δοχείων του συστήματος τα καθιστά αρκετά μικρά σε μέγεθος ώστε να + είναι δυνατόν να εκτελεστούν πολλά περισσότερα δοχεία απ'' ότι θα + μπορούσαν εικονικές μηχανές. Επομένως, αξιοποιούνται καλύτερα οι πόροι + του συστήματος. + +\pagebreak + + \item \textbf{Ευκολία διαχείρισης}: + + Τα δοχεία σε ένα σύστημα είναι εύκολα διαχειρίσιμα με απλές εντολές. Η + διαδικασία ενημέρωσης, εκκίνησης και τερματισμού τους μεταξύ άλλων + είναι γρήγορη και απλή. Ακόμα και για μια επιχείρηση με πολλούς + διακομιστές που θα έπρεπε να τα κάνει αυτά χειροκίνητα, υπάρχουν + πλατφόρμες ενορχήστρωσης δοχείων που πέραν αυτών των λειτουργιών + βοηθάνε και στην κλιμάκωση και διαχείριση του φόρτου εργασίας μεταξύ + δοχείων. + + \item \textbf{Ασφάλεια}: + + Η απομόνωση των εφαρμογών ως δοχεία εγγενώς αποτρέπει την εισβολή + κακόβουλου λογισμικού από το να επηρεάσει τα υπόλοιπα δοχεία ή το + σύστημα στο οποίο εκτελούνται. Επιπροσθέτως, άδειες ασφαλείας μπορούν + να ορισθούν με σκοπό τον αυτόματο αποκλεισμό ανεπιθύμητων στοιχείων από + τα δοχεία και τον περιορισμό επικοινωνίας μεταξύ δοχείων ή κομματιών + του συστήματος. + +\end{itemize} + +\subsection{Τύποι \textlatin{containerization}} \label{containerizationTypes} + +Στην παράγραφο \ref{containerizationDefinition} αναφέραμε την έννοια +\textlatin{containerization}. Η ραγδαία αύξηση του ενδιαφέροντος και της χρήσης +δοχείων οδήγησε στην ανάγκη για πρότυπα γύρω από την τεχνολογία αυτή. Η +\textlatin{Open Container Initiative (OCI)} η οποία ιδρύθηκε τον Ιούνιο του +2015 από την \textlatin{Docker} και άλλους ηγέτες του κλάδου, προωθεί κοινά, +ανοικτά πρότυπα και προδιαγραφές γύρω από την τεχνολογία δοχείων. Εξαιτίας +αυτού, η \textlatin{OCI} συμβάλλει στη διεύρυνση των επιλογών για μηχανές +ανοιχτού κώδικα. Οι χρήστες δε θα είναι εγκλωβισμένοι στην τεχνολογία ενός +συγκεκριμένου προμηθευτή, αλλά θα μπορούν να επωφεληθούν από τις πιστοποιημένες +από την \textlatin{OCI} τεχνολογίες που θα τους επιτρέπουν να δημιουργούν +εφαρμογές σε δοχεία χρησιμοποιώντας ένα ευρύ σύνολο εργαλείων +\textlatin{DevOps} και να τις εκτελούν με τον ίδιο τρόπο σε οποιεσδήποτε +υποδομές της επιλογής τους. + +Σήμερα αν και το \textlatin{Docker} αποτελεί μία από τις πιο γνωστές και ευρέως +χρησιμοποιούμενες μηχανές δοχείων, υπάρχουν πολλές άλλες υλοποιήσεις. +Εναλλακτικές όπως το \textlatin{podman, LXC} και το \textlatin{containerd} που +ήταν για καιρό η προεπιλογή του \textlatin{Docker} για \textlatin{container +runtime} προτού υιοθετήσει το \textlatin{runC} μπορεί να έχουν διαφορετικά +χαρακτηριστικά και προεπιλογές αλλά η υιοθέτηση και η αξιοποίηση των +προδιαγραφών της \textlatin{OCI} καθώς αυτές εξελίσσονται θα διασφαλίσει ότι οι +εναλλακτικές αυτές παραμένουν ανεξάρτητες από τους προμηθευτές, πιστοποιημένες +για να τρέχουν σε πολλαπλά λειτουργικά συστήματα και χρησιμοποιήσιμες σε +πολλαπλά περιβάλλοντα. + +\subsection{Μερικές διαφορές σε υλοποιήσεις \textlatin{containerization}} \label{containerizationDifferences} + +Παρότι οι προδιαγραφές της \textlatin{OCI} έχουν ως στόχο να διασφαλίσουν την +ομοιόμορφη λειτουργία της τεχνολογίας αυτής, υπάρχουν αρκετές διαφορές στην +υλοποίηση. Παραδείγματος χάριν, το \textlatin{podman} ενώ όπως το +\textlatin{Docker} συμμορφώνεται στις προδιαγραφές της \textlatin{OCI} δουλεύει +χωρίς δαίμονα από πίσω, πράγμα που επιδιώκει να κατευνάσει τις ανησυχίες γύρω +από τον τρόπο λειτουργίας του \textlatin{Docker}. Εξαιτίας του τρόπου +λειτουργίας του αν και από το 2021 χάρη στη δουλειά του \textlatin{Akihiro +Suda} \cite{AkihiroSuda} δεν ισχύει μόνο για αυτό πλεόν, το \textlatin{podman} +δύναται να εκτελεστεί από έναν χρήστη πέραν του \textlatin{root}. + +Ένα ακόμα εργαλείο που έχει παρόμοια αρχιτεκτονική με το \textlatin{podman} +είναι το \textlatin{rkt} το οποίο προσπαθούσε να κρατήσει μια προσέγγιση +ασφαλούς σχεδιασμού εξαρχής (\textlatin{Secure-by-design}). Μπορούσε να +ενσωματώσει χαρακτηριστικά ασφαλείας όπως υποστήριξη \textlatin{SELinux, TMP +measurement} και εκτέλεση δοχείων σε απομονωμένες από το υλικό εικονικές +μηχανές. Παρ'' όλα αυτά, σύμφωνα με το \cite{dockerAlternatives} έπαψε να έχει +ενεργή ανάπτυξη και επομένως δεν θα συνεχίζει να ανταγωνίζεται παρόμοια +εργαλεία στον κλάδο των δοχείων. + +\subsection{Δοχεία έναντι εικονικών μηχανών} \label{containersVsVms} + +Παρότι πολλές φορές τα δοχεία συγχέονται με τις εικονικές μηχανές, οι δύο αυτές +έννοιες έχουν αρκετές διαφορές στην αρχιτεκτονική τους. Στην παραδοσιακή +εικονικοποίηση είτε αυτή γίνεται στις υπάρχουσες υποδομές μια επιχείρησης είτε +σε ένα περιβάλλον νέφους, ένας \textlatin{hypervisor} πρέπει να χρησιμοποιηθεί +για να εικονικοποιήσει φυσικό υλικό. Κάθε μια εικονική μηχανή έχει ένα +λειτουργικό σύστημα και ένα εικονικό αντίγραφο του υλικού που απαιτεί για να +εκτελεστεί μαζί με μια εφαρμογή και τις βιβλιοθήκες και εξαρτήσεις της. Από την +άλλη, ένα δοχείο αντί να εικονικοποιήσει το υλικό, εικονικοποιεί το λειτουργικό +σύστημα ούτως ώστε κάθε δοχείο να περιέχει μόνο την εφαρμογή, τις βιβλιοθήκες +και τις εξαρτήσεις της. + +Η εικόνα \ref{fig:containerVsVm} παρουσιάζει τη διαφορά των δύο αρχιτεκτονικών + +\begin{center} + \includegraphics[width = .8\textwidth]{Figures/RedHat_Virtualization/virtualization-vs-containers_transparent.png} + \captionof{figure}{\textlatin{Virtualization Vs Containers}} + \label{fig:containerVsVm} +\end{center} + +Η απουσία του εικονικού λειτουργικού υλικού είναι που τα καθιστά γρήγορα, +φορητά και μικρότερα σε μέγεθος. Για να γίνει πιο εμφανής η διαφορά, σύμφωνα με +τη \textlatin{Red Hat} \cite{redhatContainerVsVm}, το μέγεθος των εικονικών +μηχανών μετράται της τάξεως των \textlatin{gigabyte} ενώ των δοχείων μένουν στα +\textlatin{megabyte}. Πολλές φορές όπως αναφέρεται και στο +\cite{ibmContainerVsVm}, τα δοχεία χρησιμοποιούνται για εφαρμογές +αρχιτεκτονικής \textlatin{microservices} όπου κάθε ξεχωριστό κομμάτι +αντιπροσωπεύει μια λειτουργία της εφαρμογής και είναι ευκολότερη η κλιμάκωση +μιας υπηρεσίας απ'' ότι θα ήταν με μια \textlatin{monolithic} αρχιτεκτονική. +Εκεί λόγω μεγέθους και πλήθους τους συνήθως απαιτείται η χρήση πλατφόρμας +ενορχήστρωσης δοχείων όπως το \textlatin{Kubernetes}, το \textlatin{Docker +Swarm} ή άλλα για αποδοτικότερη διαχείριση. + +Το μόνο μειονέκτημα τους, το οποίο δεν επηρεάζει κατά πολύ τη χρήση τους, είναι +το γεγονός ότι δοχεία που δημιουργήθηκαν για να εκτελούν προγράμματα που +απαιτούν την ύπαρξη του λειτουργικού συστήματος \textlatin{Windows} δε μπορούν +να εκτελεστούν σε ένα περιβάλλον με τον πυρήνα του \textlatin{Linux}. + +\subsection{Ασφάλεια στο \textlatin{Docker}} \label{dockerSecurityMore} + +Οι εφαρμογές σε δοχεία έχουν ένα εγγενές επίπεδο ασφαλείας αφού μπορούν να +εκτελούνται ως απομονωμένες διεργασίες και να λειτουργούν ανεξάρτητα από τα +υπόλοιπα δοχεία. Με πλήρη απομόνωση θα μπορούσε να αποτραπεί στην περίπτωση +μόλυνσης από κακόβουλο λογισμικό, ο κίνδυνος να επηρεαστούν άλλα δοχεία ή το +ίδιο το σύστημα. Ωστόσο, η απομόνωση αυτή δεν είναι πλήρης. Ο διαμοιρασμός +κομματιών μιας εφαρμογής σε δοχείο βοηθάει στην αποδοτικότητα του συστήματος +αλλά ανοίγει και ένα παράθυρο ευκαιρίας για επιθέσεις. Το γεγονός επίσης πως +μοιράζονται τον ίδιο πυρήνα σημαίνει πως μια επίθεση με στόχο αυτόν, μπορεί +δυνητικά να επηρεάσει όλα τα δοχεία. + +Σχετικά με τις εικόνες δοχείων, τα κομμάτια δηλαδή από τα οποία μια εφαρμογή σε +μορφή δοχείου αποτελείται, η ασφάλεια δεν είναι πάντα εγγυημένη. Πρέπει να +ληφθούν μέτρα προστασίας όπως η χρήση εικόνων προερχόμενες μόνο από +εγκεκριμένες πηγές, κάτι που εισάγει ένα μοντέλο εμπιστοσύνης αυτή τη φορά +ανάμεσα στον προμηθευτή της και τον τελικό χρήστη. Οι πάροχοι τεχνολογίας +δοχείων έχουν αποκτήσει μια προσέγγιση ασφαλούς σχεδιασμού ώστε πολλά από τα +απαραίτητα μέτρα να είναι ενεργοποιημένα χωρίς την απαίτηση επιπρόσθετης +αλληλεπίδρασης από τον χρήστη. Πλέον η μηχανή δοχείων υποστηρίζει όλες τις +ιδιότητες απομόνωσης που υποστηρίζει και το λειτουργικό σύστημα στο οποίο +εκτελείται και άδειες ασφαλείας μπορούν να δοθούν με σκοπό τον επιπρόσθετο +περιορισμό χρήσης πόρων και το εύρος του συστήματος στο οποίο έχει πρόσβαση η +μηχανή δοχείων. + +\subsubsection{\textlatin{Docker Attack Vector Mitigation}} \label{dockerAttackVectorMitigation} Με βάση το μοντέλο που περιγράφει το \cite{reshetova2014security} όπως αναφέρεται στο \cite{bui2015analysis} όπου έχουμε ένα μηχάνημα στο οποίο @@ -915,39 +1113,75 @@ scripting, SQL injection}, χειραγώγηση \textlatin{cookies} ή εκμ διεργασιών, αρχείων, της συσκευής, του \textlatin{IPC}, δικτύου και τέλος, των πόρων. -Αυτά επιτυγχάνονται κατά σειρά με την χρήση \textlatin{namespaces} όπου -οριοθετείται η ορατότητα των διεργασιών ανάμεσα στα δοχεία και το σύστημα όπως -επίσης, τα δικαιώματά τους. Χρήση \textlatin{mount namespaces}, με τα οποία οι -διεργασίες κάθε δοχείου βλέπουν διαφορετικά το αρχείο του συστήματος. Όλες οι -δράσεις \textlatin{mount}, που γίνονται στο εκάστοτε δοχείο, περιορίζονται σε -αυτό όπως επίσης, οριοθετούνται τα δικαιώματα των αρχείων του πυρήνα σε μονάχα -ανάγνωσης και αποτρέπονται περαιτέρω \textlatin{remountings}. Ο περιορισμός -συσκευών επιτυγχάνεται με το χαρακτηριστικό \textlatin{Device Whitelist -Controller} των \textlatin{cgroups} που αναφέρεται στο -\cite{deviceWhitelistController} με την βοήθεια του οποίου περιορίζεται το -σύνολο τον συσκευών στις οποίες έχει πρόσβαση ένα δοχείο και αποτρέπει αυτό από -το να δημιουργήσει καινούριες αναπαραστάσεις συσκευών. Επιπροσθέτως επειδή τα -\textlatin{mount} γίνονται με την χρήση του \textlatin{nodev}, στην περίπτωση -που μια αναπαράσταση συσκευής είχε δημιουργηθεί σε προηγούμενο χρόνο στο -στιγμιότυπου που χρησιμοποιήθηκε για να κατασκευαστεί το δοχείο, οι διεργασίες -του δεν δύνανται να την χρησιμοποιήσουν για να επικοινωνήσουν με τον πυρήνα. -Επιπλέον επειδή η προεπιλεγμένη συνθήκη είναι να μην δίνονται εκτεταμένα -προνόμια σε ένα δοχείο, δεν υπάρχει πρόσβαση σε καμία συσκευή παρά μόνο εάν -γίνει εκτέλεση δοχείου ως χρήστης με ανώτατα δικαιώματα όπου υπάρχει πρόσβαση -σε όλες. Ο περιορισμός \textlatin{IPC}, δηλαδή της επικοινωνίας των διεργασιών -μεταξύ τους, επιτυγχάνεται με την χρήση \textlatin{IPC namespaces} που -καθιστούν δυνατή την δημιουργία ξεχωριστών συνόλων αυτών, οι διεργασίες των -οποίων επικοινωνούν μόνο μεταξύ τους. Μία από τις σημαντικότερες απομονώσεις -είναι αυτή του δικτύου. Χωρίς δικτυακή απομόνωση υπάρχει κίνδυνος επιθέσεων -όπως \textlatin{Man in the middle}, \textlatin{ARP, DNS spoofing} και άλλες. -Για να απομονωθεί η κίνηση δικτύου που λαμβάνει μέρος σε ένα δοχείο από αυτήν -των υπολοίπων και του συστήματος πρέπει να γίνει χρήση των \textlatin{network -namespaces}. Κάθε δοχείο θα έχει δικές του διευθύνσεις \textlatin{IP}, συσκευές -και ό,τι χρειάζεται, προκειμένου να γίνεται αλληλεπίδραση μεταξύ των δοχείων -μέσω την διεπαφή δικτύου του καθενός σαν να είναι εξωτερικές οντότητες. Τέλος, -επιβάλλεται η οριοθέτηση των υπολογιστικών πόρων προκειμένου να αποφευχθεί μια -επίθεση τύπου άρνησης υπηρεσίας όπου μια διεργασία ή ένα σύνολο αυτών προσπαθεί -να καταναλώσει όλους τους πόρους του συστήματος. Με την βοήθεια των -\textlatin{cgroup}, επιτυγχάνεται ο έλεγχος του ποσοστού πόρων όπως -\textlatin{CPU}, μνήμη, και χωρητικότητα που μπορεί να έχει κάθε δοχείο στην -διάθεση του. +Αυτά επιτυγχάνονται κατά σειρά με τη χρήση + +\begin{itemize} + + \item \textbf{\textlatin{namespaces}} όπου οριοθετείται η ορατότητα των + διεργασιών ανάμεσα στα δοχεία και το σύστημα όπως επίσης, τα δικαιώματά + τους. + + \item \textbf{\textlatin{mount namespaces}}, με τα οποία οι διεργασίες κάθε + δοχείου βλέπουν διαφορετικά τη διάταξη των αρχείων του συστήματος. Όλες + οι δράσεις \textlatin{mount}, που γίνονται στο εκάστοτε δοχείο, + περιορίζονται σε αυτό όπως επίσης, οριοθετούνται τα δικαιώματα των + αρχείων του πυρήνα σε μονάχα ανάγνωσης και αποτρέπονται περαιτέρω + \textlatin{remountings}. + + \item \textbf{\textlatin{Device Whitelist Controller}}, ενός + χαρακτηριστικού των \textlatin{cgroups} για περιοσιμό συσκευών, που + αναφέρεται στο \cite{deviceWhitelistController} με τη βοήθεια του + οποίου περιορίζεται το σύνολο τον συσκευών στις οποίες έχει πρόσβαση + ένα δοχείο και αποτρέπει αυτό από το να δημιουργήσει καινούριες + αναπαραστάσεις συσκευών. Επιπροσθέτως επειδή τα \textlatin{mount} + γίνονται με τη χρήση του \textlatin{nodev}, στην περίπτωση που μια + αναπαράσταση συσκευής είχε δημιουργηθεί σε προηγούμενο χρόνο στο + στιγμιότυπου που χρησιμοποιήθηκε για να κατασκευαστεί το δοχείο, οι + διεργασίες του δε δύνανται να τη χρησιμοποιήσουν για να επικοινωνήσουν + με τον πυρήνα. Επιπλέον, επειδή η προεπιλεγμένη συνθήκη είναι να μη + δίνονται εκτεταμένα προνόμια σε ένα δοχείο, δεν υπάρχει πρόσβαση σε + καμία συσκευή παρά μόνο εάν γίνει εκτέλεση δοχείου ως χρήστης με + ανώτατα δικαιώματα όπου υπάρχει πρόσβαση σε όλες. + + \item \textbf{\textlatin{IPC namespaces}} για περιορισμό \textlatin{IPC}, + δηλαδή της επικοινωνίας των διεργασιών μεταξύ τους. Τα \textlatin{IPC + namespaces} καθιστούν δυνατή τη δημιουργία ξεχωριστών συνόλων των + διεργασιών, που επικοινωνούν μεταξύ τους αλλά όχι με άλλες διεργασίες + πέραν του υποσυνόλου. + + \item \textbf{\textlatin{network namespaces}}. Μία από τις σημαντικότερες + απομονώσεις είναι αυτή του δικτύου. Χωρίς δικτυακή απομόνωση υπάρχει + κίνδυνος επιθέσεων όπως \textlatin{Man in the middle}, \textlatin{ARP, + DNS spoofing} και άλλες. Για να απομονωθεί η κίνηση δικτύου που + λαμβάνει μέρος σε ένα δοχείο από αυτήν των υπολοίπων και του συστήματος + πρέπει να γίνει χρήση των \textlatin{network namespaces}. Κάθε δοχείο + θα έχει δικές του διευθύνσεις \textlatin{IP}, συσκευές και ό,τι + χρειάζεται, προκειμένου να γίνεται αλληλεπίδραση μεταξύ των δοχείων + μέσω της διεπαφής δικτύου του καθενός σαν να είναι εξωτερικές + οντότητες. + + \item \textbf{\textlatin{cgroup}}. Έπιβάλλεται η οριοθέτηση των + υπολογιστικών πόρων προκειμένου να αποφευχθεί μια επίθεση τύπου άρνησης + υπηρεσίας όπου μια διεργασία ή ένα σύνολο αυτών προσπαθεί να + καταναλώσει όλους τους πόρους του συστήματος. Με τη βοήθεια των + \textlatin{cgroup}, επιτυγχάνεται ο έλεγχος του ποσοστού πόρων όπως + \textlatin{CPU}, μνήμη, και χωρητικότητα που μπορεί να έχει κάθε δοχείο + στη διάθεση του. + +\end{itemize} + +Αυτές οι δυνατότητες υποστηρίζονται από το \textlatin{Docker} και μπορεί κανείς +να τις εκμεταλλευτεί για να προστατεύσει το περιβάλλον του από επιθέσεις. +Επιπλέον, υπάρχει και η δυνατότητα υποστήριξης των \textlatin{SELinux, +Apparmor, Seccomp} (στην περίπτωση χρήσης \textlatin{LXC}) όπως επίσης και +συμβατότητα με \textlatin{Linux capabilities} που θα μπορούσαν να εισάγουν ένα +ακόμα επίπεδο ασφαλείας αν χρησιμοποιηθούν σωστά, περιορίζοντας τα δικαιώματα +των διεργασιών των δοχείων σε μονάχα όσα χρειάζονται. Το \textlatin{Docker} +παρέχει αρκετά υπάρχοντα μέσα άμυνας προκειμένου να προστατευτεί από επιθέσεις +ακόμα και χωρίς επιπρόσθετες ρυθμίσεις. Παρ'' όλα αυτά οι αρχικές ρυθμίσεις +ασφαλείας είναι πιο ελαστικές απ'' όσο χρειάζεται προκειμένου να συνεχίζει να +λειτουργεί κανονικά για όλους τους χρήστες, αφήνοντας έτσι τους διαχειριστές +ασφαλείας υπεύθυνους να χρησιμοποιήσουν όσες δυνατότητες είναι απαραίτητες +προκειμένου να ανταπεξέλθουν σε κάθε επίθεση ανάλογα το περιβάλλον και τις +ανάγκες τους. + diff --git a/Figures/RedHat_Virtualization/virtualization-vs-containers_transparent.png b/Figures/RedHat_Virtualization/virtualization-vs-containers_transparent.png new file mode 100644 index 0000000..ef25162 Binary files /dev/null and b/Figures/RedHat_Virtualization/virtualization-vs-containers_transparent.png differ