Last time I said it works? I was kidding. Try this.
This commit is contained in:
@@ -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},
|
||||
|
||||
@@ -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}
|
||||
παρέχει αρκετά υπάρχοντα μέσα άμυνας προκειμένου να προστατευτεί από επιθέσεις
|
||||
ακόμα και χωρίς επιπρόσθετες ρυθμίσεις. Παρ'' όλα αυτά οι αρχικές ρυθμίσεις
|
||||
ασφαλείας είναι πιο ελαστικές απ'' όσο χρειάζεται προκειμένου να συνεχίζει να
|
||||
λειτουργεί κανονικά για όλους τους χρήστες, αφήνοντας έτσι τους διαχειριστές
|
||||
ασφαλείας υπεύθυνους να χρησιμοποιήσουν όσες δυνατότητες είναι απαραίτητες
|
||||
προκειμένου να ανταπεξέλθουν σε κάθε επίθεση ανάλογα το περιβάλλον και τις
|
||||
ανάγκες τους.
|
||||
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 9.3 KiB |
Reference in New Issue
Block a user