diff --git a/Abbreviations/abbreviations.tex b/Abbreviations/abbreviations.tex index 2f75d4d..9988b1c 100644 --- a/Abbreviations/abbreviations.tex +++ b/Abbreviations/abbreviations.tex @@ -27,8 +27,10 @@ \textbf{CVRF} & \textbf{C}ommon \textbf{V}ulnerability \textbf{R}eporting \textbf{F}ramework \\ \textbf{CWE} & \textbf{C}ommon \textbf{W}eakness \textbf{E}numeration \\ +\textbf{DDoS} & \textbf{D}istributed \textbf{D}enial \textbf{o}f \textbf{S}ervice \\ \textbf{DevOps} & \textbf{Dev}elopment \textbf{Op}eration\textbf{s} \\ \textbf{DNS} & \textbf{D}omain \textbf{N}ame \textbf{S}ystem \\ +\textbf{DoS} & \textbf{D}enial \textbf{o}f \textbf{S}ervice \\ \textbf{EBS} & \textbf{E}lastic \textbf{B}lock \textbf{S}tore \\ \textbf{EC2} & \textbf{E}lastic \textbf{C}ompute \textbf{C}loud \\ @@ -44,6 +46,7 @@ \textbf{IP} & \textbf{I}nternet \textbf{P}rotocol \\ \textbf{IPC} & \textbf{I}nter \textbf{P}rocess \textbf{C}ommunication \\ \textbf{IPv4} & \textbf{I}nternet \textbf{P}rotocol \textbf{v}ersion \textbf{4} \\ +\textbf{IPv6} & \textbf{I}nternet \textbf{P}rotocol \textbf{v}ersion \textbf{6} \\ \textbf{KVM} & \textbf{K}ernel-based \textbf{V}irtual \textbf{M}achine \\ @@ -82,10 +85,12 @@ \textbf{VBS} & \textbf{V}irtualization-\textbf{B}ased \textbf{S}ecurity \\ \textbf{VM} & \textbf{V}irtual \textbf{M}achine \\ +\textbf{VMBR} & \textbf{V}irtual \textbf{M}achine \textbf{B}ased \textbf{R}ootkits \\ \textbf{VMM} & \textbf{V}irtual \textbf{M}achine \textbf{M}onitor \\ \textbf{Vuls} & \textbf{VUL}nerability \textbf{S}canner \\ -\textbf{XSS} & \textbf{C}ross \textbf{S}ite \textbf{S}cripting \\ +\textbf{XML} & E\textbf{x}tensive \textbf{M}arkup \textbf{L}anguage \\ +\textbf{XSS} & Cross (\textbf{X}) \textbf{S}ite \textbf{S}cripting \\ \textbf{ΛΣ} & \textbf{Λ}ειτουργικό \textbf{Σ}ύστημα \\ \textbf{ΤΠ} & \textbf{Τ}εχνολογίες \textbf{Π}ληροφοριών \\ diff --git a/Bibliography.bib b/Bibliography.bib index 4fd35ea..15ca934 100644 --- a/Bibliography.bib +++ b/Bibliography.bib @@ -578,7 +578,7 @@ @article{yasrab2018mitigating, title = {Mitigating docker security issues}, author = {Yasrab, Robail}, - year = {2018}, + year = {2023}, journal = {arXiv preprint arXiv:1804.05039}, urldate = {2023-07-29}, } @@ -741,6 +741,109 @@ urldate = {2023-08-07}, } +@article{litchfield2016virtualization, + title={Virtualization technology: Cross-vm cache side channel attacks make it vulnerable}, + author={Litchfield, Alan and Shahzad, Abid}, + journal={arXiv preprint arXiv:1606.01356}, + year={2016}, + urldate = {2024-02-04}, +} + +@inproceedings{zhang2012crossvmkeys, + author = {Zhang, Yinqian and Juels, Ari and Reiter, Michael K. and Ristenpart, Thomas}, + title = {Cross-VM side channels and their use to extract private keys}, + year = {2012}, + isbn = {9781450316514}, + publisher = {Association for Computing Machinery}, + address = {New York, NY, USA}, + url = {https://doi.org/10.1145/2382196.2382230}, + doi = {10.1145/2382196.2382230}, + booktitle = {Proceedings of the 2012 ACM Conference on Computer and Communications Security}, + pages = {305–316}, + numpages = {12}, + keywords = {cache-based side channel, cross-vm side channel, side-channel attack}, + location = {Raleigh, North Carolina, USA}, + series = {CCS '12}, + urldate = {2024-02-04}, +} + +@inproceedings{vmrollbackattack, + author = {Xia, Yubin and Liu, Yutao and Chen, Haibo and Zang, Binyu}, + year = {2012}, + month = {06}, + pages = {1-5}, + title = {Defending against VM rollback attack}, + isbn = {978-1-4673-2264-5}, + doi = {10.1109/DSNW.2012.6264690}, + urldate = {2024-02-04}, +} + +@online{technopediaVmHopping, + title = {Virtual Machine Hyper Jumping}, + author = {Margaret Rouse}, + year = {2015}, + url = {https://www.techopedia.com/definition/30921/virtual-machine-hyper-jumping-vm-jumping}, + urldate = {2024-02-04}, +} + +@article{abusaimeh2020virtual, + title = {Virtual machine escape in cloud computing services}, + author = {Abusaimeh, Hesham}, + journal = {International Journal of Advanced Computer Science and Applications}, + volume = {11}, + number = {7}, + year = {2020}, + publisher = {Science and Information (SAI) Organization Limited}, + urldate = {2024-02-04}, +} + +@online{containersVsVMs, + title = {A Complete Overview of Docker Architecture}, + author = {Winnie Ondara}, + year = {2022}, + url = {https://www.cherryservers.com/blog/a-complete-overview-of-docker-architecture}, + urldate = {2024-02-08}, +} + +@online{containerRuntime, + title = {What are container runtimes?}, + author = {Nived Velayudhan}, + year = {2021}, + url = {https://opensource.com/article/21/9/container-runtimes}, + urldate = {2024-02-11}, +} + +@online{kernexpcgroup, + title = {New Linux Kernel cgroups Vulnerability Could Let Attackers Escape Container}, + author = {Ravie Lakshmanan}, + year = {2022}, + url = {https://thehackernews.com/2022/03/new-linux-kernel-cgroups-vulnerability.html}, + urldate = {2024-02-11}, +} + +@online{dirtyPipe, + title = {Escaping containers using the Dirty Pipe vulnerability}, + author = {Eric Mountain and Tommy McCormick and Christophe Tafani-Dereeper and Frederic Baguelin}, + year = {2022}, + url = {https://securitylabs.datadoghq.com/articles/dirty-pipe-container-escape-poc/}, + urldate = {2024-02-11}, +} + +@online{dockermitm, + title = {Top Docker Security Vulnerabilities, Best Practices, \& Insights}, + author = {Fortra's Alert Logic}, + year = {2020}, + url = {https://www.alertlogic.com/blog/top-docker-security-vulnerabilities-best-practices-insights/}, + urldate = {2024-02-11}, +} + +@online{arpdocker, + title = {ARP Spoofing}, + author = {Imperva}, + url = {https://www.imperva.com/learn/application-security/arp-spoofing/}, + urldate = {2024-02-12}, +} + @online{lynis, title = {Lynis}, author = {CISOfy}, @@ -748,6 +851,24 @@ } urldate = {2023-12-06}, +@online{docker-rootless-setup, + title = {Docker-Rootless Full Setup}, + author = {zerint}, + url = {https://github.com/zerint/docker-rootless-setup}, +} + +@online{docksec, + title = {docksec}, + author = {Ted LeRoy}, + url = {https://github.com/TedLeRoy/docksec}, +} + +@online{docker-bench-security, + title = {Docker Bench for Security}, + author = {Docker}, + url = {https://github.com/docker/docker-bench-security}, +} + @online{lunar, title = {Lunar}, author = {Lateral Blast}, @@ -783,6 +904,12 @@ } urldate = {2023-11-10}, +@online{portainer, + title = {Portainer}, + author = {Portainer}, + url = {https://www.portainer.io/}, +} + @online{secdep, title = {SecDep}, author = {konsthol}, @@ -1052,6 +1179,48 @@ url = {https://github.com/rkt/rkt}, } +@online{snyk, + title = {Snyk}, + author = {Snyk}, + url = {https://snyk.io/}, +} + +@online{trivy, + title = {Trivy}, + author = {Aqua Security}, + url = {https://aquasecurity.github.io/trivy/v0.49/}, +} + +@online{dotenv, + title = {python-dotenv}, + author = {Saurabh Kumar}, + url = {https://github.com/theskumar/python-dotenv}, +} + +@online{rich, + title = {rich}, + author = {Textualize}, + url = {https://github.com/Textualize/rich}, +} + +@online{shtab, + title = {shtab}, + author = {Iterative}, + url = {https://github.com/iterative/shtab}, +} + +@online{paramiko, + title = {paramiko}, + author = {paramiko}, + url = {https://github.com/paramiko/paramiko}, +} + +@online{dockerCompose, + title = {Docker Compose}, + author = {Docker}, + url = {https://github.com/docker/compose}, +} + inproceedings{manu2016study, author = {Manu, A.R. and Patel, Jitendra Kumar and Akhtar, Shakil and Agrawal, V.K. and Subramanya Murthy, K.N. Bala}, booktitle = {2016 International Conference on Circuit, Power and Computing Technologies (ICCPCT)}, diff --git a/Chapters/2.Background.tex b/Chapters/2.Background.tex index bc360c8..e24fcdb 100644 --- a/Chapters/2.Background.tex +++ b/Chapters/2.Background.tex @@ -25,18 +25,18 @@ αναφέρεται στην απομακρυσμένη διάθεση λογισμικού, του οποίου η συμμόρφωση με τις λειτουργικές και μη λειτουργικές του ικανότητες που διαφημίζονται προς τους πελάτες αποτελεί ευθύνη του παρόχου του. Η κατηγορία PaaS (Platform as a -Service) (Πλατφόρμα ως Υπηρεσία) ορίζεται ως η διάθεση απομακρυσμένης πλατφόρμας με την οποία -μια ομάδα έργου μπορεί να αναπτύξει συνεργατικά και να εκτελέσει λογισμικό. -Τέλος, η κατηγορία IaaS (Infrastructure as a Service) μεταφράζεται ως η -προσφορά απομακρυσμένων (εικονικών και φυσικών) διακομιστών τους οποίους μια -επιχείρηση μπορεί να αξιοποιήσει αναλόγως τις ανάγκες της (πχ. ως προς την -φιλοξενία κατάλληλων φόρτων εργασίας) ακολουθώντας φυσικά τους όρους και -προϋποθέσεις του παρόχου. Τα πλεονεκτήματα που παρέχει η νεφο-υπολογιστική σε -σχέση με την παραδοσιακή μέθοδο διάθεσης υπηρεσιών είναι αρκετά αλλά αυτά που -ξεχωρίζουν από μεριάς των πελατών είναι η απόλυτη απαλλαγή ευθύνης των υποδομών -νέφους, η απαράμιλλη ταχύτητα διάθεσης και κλιμάκωσης των υπηρεσιών και η -εξάλειψη περιττού κόστους λόγω του ευέλικτου μοντέλου χρέωσης όπου -προσμετρώνται μόνο οι πόροι που χρησιμοποιήθηκαν. +Service) (Πλατφόρμα ως Υπηρεσία) ορίζεται ως η διάθεση απομακρυσμένης +πλατφόρμας με την οποία μια ομάδα έργου μπορεί να αναπτύξει συνεργατικά και να +εκτελέσει λογισμικό. Τέλος, η κατηγορία IaaS (Infrastructure as a Service) +μεταφράζεται ως η προσφορά απομακρυσμένων (εικονικών και φυσικών) διακομιστών +τους οποίους μια επιχείρηση μπορεί να αξιοποιήσει αναλόγως τις ανάγκες της (πχ. +ως προς την φιλοξενία κατάλληλων φόρτων εργασίας) ακολουθώντας φυσικά τους +όρους και προϋποθέσεις του παρόχου. Τα πλεονεκτήματα που παρέχει η +νεφο-υπολογιστική σε σχέση με την παραδοσιακή μέθοδο διάθεσης υπηρεσιών είναι +αρκετά αλλά αυτά που ξεχωρίζουν από μεριάς των πελατών είναι η απόλυτη απαλλαγή +ευθύνης των υποδομών νέφους, η απαράμιλλη ταχύτητα διάθεσης και κλιμάκωσης των +υπηρεσιών και η εξάλειψη περιττού κόστους λόγω του ευέλικτου μοντέλου χρέωσης +όπου προσμετρώνται μόνο οι πόροι που χρησιμοποιήθηκαν. Σημαντικό ρόλο στην ευρεία αποδοχή των υπηρεσιών που προσφέρονται μέσω της νεφο-υπολογιστικής έχει η ευκολία αλλά και ευελιξία των μεθόδων διάθεσης και @@ -193,20 +193,21 @@ portal) ή ενός εργαλείου γραμμής εντολών (command li \item \textbf{Ιδιωτικό νέφος (Private Cloud)}: - Το ιδιωτικό νέφος είναι αποκλειστικά αφιερωμένο σε έναν μόνο οργανισμό - αποτελούμενο από πολλαπλούς καταναλωτές (π.χ. επιχειρησιακές μονάδες ή - τμήματα). Ενδεχομένως να ανήκει, να διαχειρίζεται και να λειτουργεί από τον - ίδιο τον οργανισμό, από μια τρίτη οντότητα, ή έναν συνδυασμό των δύο. Το - νέφος αυτό μπορεί να βρίσκεται εντός ή εκτός του οργανισμού (πχ. στην - περίπτωση που λειτουργεί από τρίτη οντότητα). Παρέχει πλήρη έλεγχο στον - τρόπο με τον οποίο μοιράζονται και αποθηκεύονται τα δεδομένα και - διασφαλίζει την συμμόρφωση με τυχόν κανονισμούς, τους οποίους καλείται ένας - οργανισμός να ακολουθήσει. Επιπλέον, λόγω της αποκλειστικής αφιέρωσής του - σε έναν μόνο οργανισμό, εξασφαλίζεται η διαθεσιμότητα των δεδομένων κατά - παραγγελία, όπως επίσης και η αξιοπιστία του για κρίσιμους φόρτους - εργασίας. Τέλος, λόγω του πλήρους ελέγχου, μπορεί να εγκαθιδρυθεί ένα υψηλό - επίπεδο ασφαλείας, υψηλότερο σε σχέση με αυτό που μπορεί να επιτευχθεί από - άλλα μοντέλα ανάπτυξης (νέφους). + Το ιδιωτικό νέφος είναι αποκλειστικά αφιερωμένο σε έναν μόνο οργανισμό + αποτελούμενο από πολλαπλούς καταναλωτές (π.χ. επιχειρησιακές μονάδες ή + τμήματα). Ενδεχομένως να ανήκει, να διαχειρίζεται και να λειτουργεί από + τον ίδιο τον οργανισμό, από μια τρίτη οντότητα, ή έναν συνδυασμό των + δύο. Το νέφος αυτό μπορεί να βρίσκεται εντός ή εκτός του οργανισμού + (πχ. στην περίπτωση που λειτουργεί από τρίτη οντότητα). Παρέχει πλήρη + έλεγχο στον τρόπο με τον οποίο μοιράζονται και αποθηκεύονται τα + δεδομένα και διασφαλίζει την συμμόρφωση με τυχόν κανονισμούς, τους + οποίους καλείται ένας οργανισμός να ακολουθήσει. Επιπλέον, λόγω της + αποκλειστικής αφιέρωσής του σε έναν μόνο οργανισμό, εξασφαλίζεται η + διαθεσιμότητα των δεδομένων κατά παραγγελία, όπως επίσης και η + αξιοπιστία του για κρίσιμους φόρτους εργασίας. Τέλος, λόγω του πλήρους + ελέγχου, μπορεί να εγκαθιδρυθεί ένα υψηλό επίπεδο ασφαλείας, υψηλότερο + σε σχέση με αυτό που μπορεί να επιτευχθεί από άλλα μοντέλα ανάπτυξης + (νέφους). \clearpage @@ -235,10 +236,10 @@ portal) ή ενός εργαλείου γραμμής εντολών (command li εικονικές μηχανές που εκτελούνται σε (φυσικούς) διακομιστές του παρόχου νέφους, των οποίων οι υπολογιστικοί πόροι χρησιμοποιούνται από πολλούς καταναλωτές ταυτόχρονα, είτε τους φυσικούς του διακομιστές για - αποκλειστική χρήση. Αποτελεί το πιο δημοφιλές μοντέλο που παρέχουν - εταιρείες υπηρεσιών IaaS λόγω της απουσίας απαίτησης μεγάλου αρχικού - κόστους επένδυσης και της ευελιξίας που παρέχεται μέσω της - αυτοεξυπηρέτησης κατά παραγγελία. Είναι η κατάλληλη επιλογή για + αποκλειστική χρήση. Αποτελεί το πιο δημοφιλές μοντέλο ανάπτυξης που + υιοθετείται από εταιρείες υπηρεσιών IaaS λόγω της απουσίας απαίτησης + μεγάλου αρχικού κόστους επένδυσης και της ευελιξίας που παρέχεται μέσω + της αυτοεξυπηρέτησης κατά παραγγελία. Είναι η κατάλληλη επιλογή για μεγάλους φόρτους εργασίας μικρής διάρκειας λόγω του μοντέλου χρέωσης ανά χρήση ενώ διευκολύνει μια επιχείρηση στην μετέπειτα διαχείριση του κόστους με βάση τις προβλέψεις της ζήτησης της υπηρεσίας που αυτή @@ -265,13 +266,16 @@ portal) ή ενός εργαλείου γραμμής εντολών (command li αναδιαμόρφωσή τους ούτως ώστε να ικανοποιούνται οι ανάγκες ενός συστήματος (όπως η αύξηση της χρήσης των φυσικών του πόρων). Εφαρμόζεται σε μια πληθώρα πόρων, όπως είναι οι διακομιστές, το λειτουργικό σύστημα, ακόμα και τα -δεδομένα. Η πιο συνηθισμένη χρήση εικονικοποίησης είναι αυτή των διακομιστών η -οποία αποτελεί και τον πυλώνα της νεφο-υπολογιστικής. Προκειμένου να -επιτευχθεί, απαιτείται η χρήση ενός υπερ-επόπτη. Δηλαδή, ενός λογισμικού -υπεύθυνου για την κατάτμηση των φυσικών πόρων ενός διακομιστή σε μια ή -περισσότερες εικονικές αναπαραστάσεις ενός συνόλου αυτών με σκοπό να -χρησιμοποιηθούν ως ξεχωριστοί εικονικοί διακομιστές (virtual hosts/servers) (οι -κοινώς λεγόμενες εικονικές μηχανές). +δεδομένα. Μπορεί επομένως να χωριστεί σε εικονικοποίηση φυσικών (υπολογιστικών +ή μη) πόρων ή λογισμικού. + +Η πιο συνηθισμένη χρήση εικονικοποίησης είναι αυτή των διακομιστών η οποία +αποτελεί και τον πυλώνα της νεφο-υπολογιστικής. Προκειμένου να επιτευχθεί, +απαιτείται η χρήση ενός υπερ-επόπτη. Δηλαδή, ενός λογισμικού υπεύθυνου για την +κατάτμηση των φυσικών πόρων ενός διακομιστή σε μια ή περισσότερες εικονικές +αναπαραστάσεις ενός συνόλου αυτών με σκοπό να χρησιμοποιηθούν ως ξεχωριστοί +εικονικοί διακομιστές (virtual hosts/servers) (οι κοινώς λεγόμενες εικονικές +μηχανές). Ένας υπερ-επόπτης μπορεί να ανήκει σε δύο αποκλειστικές κατηγορίες. Είτε πρόκειται για υπερ-επόπτη τύπου 1 στην περίπτωση απευθείας πρόσβασης με το @@ -286,7 +290,7 @@ portal) ή ενός εργαλείου γραμμής εντολών (command li εκτελέσει. Η εικονικοποίηση διακομιστών χωρίζεται σε δύο κατηγορίες βάσει της μεθόδου -επίτευξης της: την πλήρη εικονικοποίηση (full virtualization) και την +επίτευξής της: την πλήρη εικονικοποίηση (full virtualization) και την παρα-εικονικοποίηση \cite{abacusFullParaOSVirtualization} (paravirtualization). Στην πρώτη περίπτωση το λειτουργικό σύστημα που εκτελείται στον εικονικό διακομιστή συμπεριφέρεται όπως θα συμπεριφερόταν σε έναν φυσικό διακομιστή. @@ -308,7 +312,506 @@ portal) ή ενός εργαλείου γραμμής εντολών (command li στο υποκείμενο φυσικό υλικό συμβάλλει στην αύξηση της αποδοτικότητας - αυτό επιτυγχάνεται κυρίως για ορισμένα είδη πόρων. -\subsection{Ορισμός Εικονικοποίησης} \label{virtualizationDefinition} +Σχετικά με την εικονικοποίηση λογισμικού, η πιο συνηθισμένη χρήση της είναι η +εικονικοποίηση ΛΣ όπου τότε αναφερόμαστε στην δοχειοποίηση. Κατά την +δοχειοποίηση, ενθυλακώνεται ένα πρόγραμμα εξ ολοκλήρου σε ένα εικονικό +περιβάλλον που ονομάζεται δοχείο. Έπειτα, το δοχείο αυτό εκτελείται ως +διεργασία του ΛΣ και μοιράζεται τους υποκείμενους πόρους του συστήματος με τα +υπόλοιπα δοχεία και τα λοιπά προγράμματα που μπορεί να εκτελούνται στο σύστημα +αυτό. Περισσότερες λεπτομέρειες για την δοχειοποίηση, αναφέρονται και στην +Ενότητα \ref{containersAndContainerization}. + +\clearpage + +\subsection{Είδη εικονικοποίησης} \label{virtualizationImplementations} + +Υπάρχουν πολλά είδη εικονικοποίησης. Πέντε βασικά αυτών, όπως αναφέρονται από +την Red Hat \cite{redhatVirtualization}, συνδυαστικά με τρία ακόμα που +χρησιμοποιούνται συχνά, είναι τα παρακάτω: + +\begin{itemize} + + \item \textbf{Εικονικοποίηση Δεδομένων}: + + \begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = .5\textwidth]{Figures/RedHat_Virtualization/redhat_data_virtualization.png} + \captionof{figure}{Εικονικοποίηση Δεδομένων \cite{redhatVirtualization}} + \label{fig:dataVirtualization} + \end{figure} + \vspace*{-30pt} + \end{center} + +\end{itemize} + +Η εικονικοποίηση δεδομένων είναι μια προσέγγιση ενσωμάτωσης δεδομένων από +διαφορετικές πηγές, σε μια ολιστική, λογική προβολή δίχως την ανάγκη της +φυσικής μετακίνησής τους \cite{dataVirtualization}. Δηλαδή, διασκορπισμένα +ετερογενή δεδομένα παρεχόμενα από πηγές διαφόρων τοποθεσιών δύναται να +συσσωματωθούν σε μοναδικά, λογικά τεμάχια μιας ενιαίας εικονικής πηγής. Με +αυτόν τον τρόπο, οι εταιρείες μπορούν από ένα μόνο μοντέλο διαχείρισης +δεδομένων να οργανώσουν και να επεξεργαστούν διασκορπισμένες πληροφορίες με +γνώμονα τις ανάγκες των χρηστών με μεγαλύτερη ευκολία και αποδοτικότητα, χωρίς +την ανάγκη να γνωρίζουν τεχνικές λεπτομέρειες (όπως γλώσσες πρόσβασης, δομές +αποθήκευσης κα.). Τομείς οι οποίοι επωφελούνται από την εικονικοποίηση +δεδομένων είναι η λήψη αποφάσεων, η επιχειρηματική αναλυτική και η αξιολόγηση +των κινδύνων. + +\clearpage + +\begin{itemize} + + \item \textbf{Εικονικοποίηση Επιφάνειας Εργασίας}: + + \begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = .5\textwidth]{Figures/RedHat_Virtualization/redhat_desktop_virtualization.png} + \captionof{figure}{Εικονικοποίηση Επιφάνειας Εργασίας \cite{redhatVirtualization}} + \label{fig:desktopVirtualization} + \end{figure} + \vspace*{-30pt} + \end{center} + +\end{itemize} + +Με την εικονικοποίηση επιφάνειας εργασίας, δίνεται σε έναν κεντρικό διαχειριστή +η ικανότητα διαμοιρασμού προσομοιωμένων περιβαλλόντων εργασίας σε εκατοντάδες +φυσικές μηχανές ή συσκευές ταυτοχρόνως. Εν αντιθέσει με τα παραδοσιακά +περιβάλλοντα εργασίας που χρήζουν εγκατάστασης, διαμόρφωσης και ενημέρωσης σε +κάθε υπολογιστή, η εικονικοποίηση επιφάνειας εργασίας καθιστά δυνατή τη μαζική +διαμόρφωση, ενημέρωση και έλεγχο ασφαλείας σε όλα τα εικονικά περιβάλλοντα +εργασίας που παρέχονται από έναν μόνο διακομιστή. Καθ' αυτόν τον τρόπο, οι +επιχειρήσεις επιτρέπουν στους χρήστες να μπορούν να εργαστούν από οπουδήποτε +και με κάθε συσκευή ανεξαρτήτως του είδους ή του λειτουργικού συστήματός τους +\cite{desktopVirtualization}. + +\clearpage + +\begin{itemize} + + \item \textbf{Εικονικοποίηση Διακομιστών}: + + \begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = .5\textwidth]{Figures/RedHat_Virtualization/redhat_server_virtualization.png} + \captionof{figure}{Εικονικοποίηση Διακομιστών \cite{redhatVirtualization}} + \label{fig:serverVirtualization} + \end{figure} + \vspace*{-30pt} + \end{center} + +\end{itemize} + +Οι διακομιστές είναι υπολογιστές σχεδιασμένοι με σκοπό να επεξεργάζονται πολύ +καλά έναν μεγάλο όγκο συγκεκριμένων διεργασιών, ώστε οι κύριοι υπολογιστές μιας +επιχείρησης να μπορούν να δίνουν προτεραιότητα σε άλλες εργασίες. Με την +εικονικοποίηση διακομιστών αναφερόμαστε στην διαδικασία κατά την οποία ένας +φυσικός διακομιστής χωρίζεται σε πολλούς μικρότερους εικονικούς διακομιστές, με +απώτερο σκοπό την αποτελεσματικότερη αξιοποίηση των πόρων του. Αυτό είναι +απαραίτητο διότι προτιμάται για λόγους ευκολίας της διαχείρισής τους, κάθε +διακομιστής να είναι υπεύθυνος για μια μόνο διεργασία την φορά. Μετά την +κατάτμησή του, ενώ μπορεί να ακολουθείται η ίδια πρακτική, παύει το φυσικό +μηχάνημα να μένει με αχρησιμοποίητους πόρους και πρακτικά μπορεί το σύνολο τον +πόρων του να χρησιμοποιηθεί για την εξυπηρέτηση πολλαπλών λειτουργιών. Ο +ορισμός της εικονικοποίησης διακομιστών αναλύεται πιο λεπτομερώς και στην +Ενότητα \ref{virtualizationDefinition}. + +\clearpage + +\begin{itemize} + + \item \textbf{Εικονικοποίηση Λειτουργικού Συστήματος}: + + \begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = .5\textwidth]{Figures/RedHat_Virtualization/redhat_os_virtualization.png} + \captionof{figure}{Εικονικοποίηση Λειτουργικού Συστήματος \cite{redhatVirtualization}} + \label{fig:operatingSystemVirtualization} + \end{figure} + \vspace*{-30pt} + \end{center} + +\end{itemize} + +Η εικονικοποίηση λειτουργικού συστήματος είναι κάτι που συμβαίνει στον πυρήνα +(ΛΣ). Ουσιαστικά, αναφερόμαστε στην διαδικασία της δοχειοποίησης λειτουργικών +συστημάτων. Κατά την εφαρμογή της, μπορούν να εκτελεστούν ταυτοχρόνως πολλαπλά +λειτουργικά συστήματα μέσα σε απομονωμένα εικονικά περιβάλλοντα, όπου το κάθε +ένα από αυτά μοιράζεται τον ίδιο πυρήνα με το λειτουργικό σύστημα φιλοξενίας. +Μεγαλύτερη ανάλυση της εικονικοποίησης σε επίπεδο λειτουργικού συστήματος +πραγματοποιείται στην Ενότητα \ref{osVirtualization}. + +\clearpage + +\begin{itemize} + + \item \textbf{Εικονικοποίηση Λειτουργιών Δικτύου}: + + \begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = .5\textwidth]{Figures/RedHat_Virtualization/redhat_network_function_virtualization.png} + \captionof{figure}{Εικονικοποίηση Λειτουργιών Δικτύου \cite{redhatVirtualization}} + \label{fig:networkFunctionVirtualization} + \end{figure} + \vspace*{-30pt} + \end{center} + +\end{itemize} + +Η εικονικοποίηση λειτουργιών δικτύου (Network Functions Virtualization - NFV) +αφορά τον διαχωρισμό των βασικών λειτουργιών ενός δικτύου (όπως ο διαμοιρασμός +αρχείων, και η διαμόρφωση IP) από το φυσικό υλικό (που συνήθως χρησιμοποιούνταν +για την εκτέλεσή τους), ώστε να μπορούν να διανεμηθούν σε διάφορα περιβάλλοντα. +Παραδοσιακά, οι λειτουργίες δικτύου εκτελούνταν σε ιδιόκτητο υλικό +συγκεκριμένου σκοπού και επομένως ήταν απαραίτητο να πραγματοποιηθεί αγορά, +ρύθμιση και συντήρηση του κάθε φυσικού εξαρτήματος. Με την αύξηση όμως της +δημοτικότητας των τεχνολογιών εικονικοποίησης, άρχισε να γίνεται πιο δημοφιλής +και η πρακτική πακεταρίσματος των λειτουργιών των εξαρτημάτων αυτών σε +διακομιστές κοινής χρήσης (commodity servers). Το αποτέλεσμα αυτού, ήταν η +απόκτηση της δυνατότητας εκτέλεσης των λειτουργιών δικτύου μιας επιχείρησης σε +τυπικούς διακομιστές γενικού σκοπού και κατά προέκταση, η αντικατάσταση κάθε +ξεχωριστού φυσικού μηχανήματος με ένα αντίστοιχο εικονικό εκτελούμενο μέσα από +μια εικονική μηχανή \cite{redhatNFV}. Η εικονικοποίηση των λειτουργιών δικτύων +μειώνει τον αριθμό των φυσικών εξαρτημάτων, όπως οι μεταγωγείς, δρομολογητές, +διακομιστές, καλώδια και κόμβοι, που απαιτούνται για τη δημιουργία πολλαπλών, +ανεξάρτητων δικτύων και είναι ιδιαίτερα δημοφιλής στον κλάδο των +τηλεπικοινωνιών. + +\clearpage + +\begin{itemize} + + \item \textbf{Εικονικοποίηση Μνήμης}: + + \begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = .5\textwidth]{Figures/VMWARE_Virtualization/vmware_memory_virtualization.png} + \captionof{figure}{Εικονικοποίηση Μνήμης \cite{vmwareMemoryVirtualization}} + \label{fig:memoryVirtualization} + \end{figure} + \vspace*{-30pt} + \end{center} + +\end{itemize} + +Η εικονικοποίηση μνήμης αποτελεί ένα κομμάτι της ευρύτερης έννοιας της +εικονικοποίησης πόρων \cite{hostitsmartMemoryVirtualization}. Συγκεκριμένα, +είναι μια τεχνική κατά την οποία δύναται να διαχειριστούμε με έναν πιο +αποδοτικό τρόπο την φυσική μνήμη (RAM) που χρησιμοποιείται στα υπολογιστικά μας +συστήματα. Αυτό συμβαίνει διότι στην βασικότερη μορφή της, η εικονικοποίηση +μνήμης εμφανίζεται ως εικονική μνήμη ή όπως η μνήμη swap σε διακομιστές και +σταθμούς εργασίας \cite{petriMemoryVirtualization}. Δηλαδή, ως επιπρόσθετη +μνήμη την οποία το σύστημα εκλαμβάνει ως πραγματική και μπορεί να την +χρησιμοποιήσει. Για να επιτευχθεί αυτό, μέσω του υπερ-επόπτη πραγματοποιείται +αντιστοίχιση σελίδων φυσικής μνήμης του φιλοξενούμενου λειτουργικού συστήματος +στις σελίδες φυσικής μνήμης της υποκείμενης μηχανής. Καθ' αυτόν τον τρόπο, κάθε +εικονική μηχανή βλέπει έναν συνεχόμενο χώρο διευθύνσεων μνήμης που δύναται να +χρησιμοποιήσει \cite{vmwareMemoryVirtualization}. Ως αποτέλεσμα, επιτυγχάνεται +εν γένει υψηλότερη αξιοποίηση της μνήμης και η δυνατότητα διαμοιρασμού μιας +κοινής δεξαμενής μνήμης ακόμα και σε κατανεμημένα συστήματα, παρακάμπτοντας +τους περιορισμούς της φυσικής μνήμης \cite{codingninjasMemoryVirtualization}. + +\clearpage + +\begin{itemize} + + \item \textbf{Εικονικοποίηση Αποθήκευσης}: + + \begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = .5\textwidth]{Figures/UnixArena_Virtualization/unixarena_storage_virtualization.png} + \captionof{figure}{Εικονικοποίηση Αποθήκευσης \cite{unixarenaVirtualization}} + \label{fig:storageVirtualization} + \end{figure} + \vspace*{-30pt} + \end{center} + +\end{itemize} + +Ένα ακόμα κομμάτι της ευρύτερης έννοιας της εικονικοποίησης πόρων είναι και η +εικονικοποίηση αποθήκευσης. Συγκεκριμένα, ο όρος εικονικοποίηση αποθήκευσης +αναφέρεται στην πρακτική της συγκέντρωσης φυσικού αποθηκευτικού χώρου από +πολλαπλές συσκευές αποθήκευσης σε μια φαινομενικά ενιαία, εικονική συσκευή +\cite{ubackupStorageVirtualization}. Παρομοίως με την εικονικοποίηση μνήμης, +αυτό είναι κάτι που θα επιτρέψει την υψηλότερη αξιοποίηση ενός πόρου. +Συγκεκριμένα, του αποθηκευτικού χώρου (πχ. ενός δίσκου). Με την χρήση της +έρχονται πολλά πλεονεκτήματα. Αρχικά, επιφέρει μεγαλύτερη ευελιξία στον τομέα +της αποθήκευσης. Επιπλέον, εγγυάται υψηλή διαθεσιμότητα και ευκολία στην +δημιουργία αντιγράφων ασφαλείας. Χρήσιμη λειτουργία που παρέχεται μέσω της +εικονικοποίησης αποθήκευσης αποτελεί και η αφαίρεση ή το κρύψιμο ετερογένειας +αποθηκευτικών συσκευών που εικονικοποιούνται, οι οποίες μπορεί να προέρχονται +από διαφορετικούς πωλητές ή από τις εφαρμογές που τις διαχειρίζονται. Τέλος, +προσφέρει έναν ενιαίο τρόπο διαχείρισης των συσκευών μέσω κεντρικοποιημένων +κονσόλων ή APIs και επομένως, αποτελεί ένα πιο διαχειρίσιμο μοντέλο χώρου +αποθήκευσης σε σχέση με το παραδοσιακό, όπου κάθε υπολογιστής έχει πρόσβαση +μονάχα στον δικό του δίσκο. + +Προκειμένου να γίνει πράξη, απαιτείται αναλόγως την μέθοδο εικονικοποίησης και +τον τύπο της, είτε να χρησιμοποιηθεί ένας αλγόριθμος για να εντοπίσει δυναμικά +τα δεδομένα είτε να δημιουργηθεί ένας χάρτης αντιστοίχισής τους χρησιμοποιώντας +μεταδεδομένα \cite{cloudinfraStorageVirtualization}. Αφότου γίνει αυτό, τα +δεδομένα πλέον αποθηκεύονται σε ένα αρχείο και οι συστοιχίες δίσκων +τοποθετούνται μέσα σε μια εικονική δεξαμενή. Έπειτα, κάθε αίτημα ανάγνωσης και +εγγραφής από τις εφαρμογές φιλτράρεται και δύναται, πχ. έμμεσα μέσω των +αντιστοιχιών, η δυνατότητα εύρεσης και αποθήκευσης δεδομένων. + +\begin{itemize} + + \item \textbf{Εικονικοποίηση Εφαρμογών}: + + \begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = .5\textwidth]{Figures/TutorialsPoint_Virtualization/tutorialspoint_application_virtualization.jpg} + \captionof{figure}{Εικονικοποίηση Εφαρμογών \cite{tutorialsPointVirtualization}} + \label{fig:applicationVirtualization} + \end{figure} + \vspace*{-30pt} + \end{center} + +\end{itemize} + +Η εικονικοποίηση εφαρμογών είναι μια τεχνολογία λογισμικού που ενθυλακώνει τα +προγράμματα από το υποκείμενο λειτουργικό σύστημα στο οποίο εκτελούνται. +Υπάγεται στην διαδικασία της δοχειοποίησης και επομένως, τα προγράμματα που +ενθυλακώνονται, συμπεριλαμβανομένων των βιβλιοθηκών και εξαρτήσεών τους, +παίρνουν την μορφή δοχείων. Στα δοχεία αυτά, εικονικοποιούνται οι απαραίτητοι +υπολογιστικοί πόροι όπως το λειτουργικό σύστημα, η μνήμη και η κεντρική μονάδα +επεξεργασίας \cite{geeksforgeeksApplicationVirtualization}, κάνοντας χρήση των +διαθέσιμων μηχανισμών απομόνωσης του πυρήνα του λειτουργικού συστήματος. +Περισσότερες λεπτομέρειες για τον τρόπο κατά τον οποίο επιτυγχάνεται αυτό, +παρουσιάζονται στην Ενότητα \ref{osVirtualization}. + +\subsection{Ιστορική αναδρομή της εικονικοποίησης} \label{virtualizationHistory} + +Όπως αναφέρει μια θυγατρική της IBM \cite{redhatVirtualization}, ενώ η +τεχνολογία εικονικοποίησης χρονολογείται από τη δεκαετία του 1960, δεν +υιοθετήθηκε ευρέως μέχρι τις αρχές της δεκαετίας του 2000. Οι τεχνολογίες που +την έκαναν πραγματικότητα, όπως οι υπερ-επόπτες, αναπτύχθηκαν πριν από +δεκαετίες για να δώσουν σε πολλούς χρήστες ταυτόχρονη πρόσβαση σε υπολογιστές +που επεξεργαζόντουσαν πολλά δεδομένα ταυτόχρονα. Κάτι ιδιαίτερα δημοφιλές στον +τομέα των επιχειρήσεων για καθήκοντα ρουτίνας (routine tasks) που έπρεπε να +εκτελεστούν χιλιάδες φορές και πολύ γρήγορα όπως η μισθοδοσία υπαλλήλων. + +Ωστόσο, μέσα στις επόμενες δεκαετίες, ήρθαν στο προσκήνιο άλλες λύσεις στο +πρόβλημα διαμοιρασμού ενός μηχανήματος σε πολλούς χρήστες, μειώνοντας έτσι το +ενδιαφέρον για την τεχνολογία εικονικοποίησης. Μία από αυτές ήταν ο +διαμοιρασμός χρόνου (time-sharing), όπου ένας χρήστης μπορούσε να χρησιμοποιεί +το λειτουργικό σύστημα απομονωμένα από τους υπόλοιπους. Κάτι που οδήγησε στη +δημιουργία λειτουργικών συστημάτων όπως το UNIX, το οποίο με τη σειρά του +άνοιξε το δρόμο για την άφιξη του Linux. Καθ' όλη τη διάρκεια αυτή, η +εικονικοποίηση παρέμεινε σε μεγάλο βαθμό μη διαδεδομένη. + +Προχωρώντας στη δεκαετία του 1990, οι περισσότερες επιχειρήσεις διέθεταν +φυσικούς διακομιστές και στοίβες μηχανημάτων ενός προμηθευτή, οι οποίες δεν +είχαν τη δυνατότητα εκτέλεσης εφαρμογών σε υλικό διαφορετικού προμηθευτή. Καθώς +οι εταιρείες αναβάθμιζαν τα περιβάλλοντα πληροφορικής τους με λιγότερο +δαπανηρούς διακομιστές, λειτουργικά συστήματα και εφαρμογές από διάφορους +προμηθευτές, ήταν υποχρεωμένες να υπολειτουργούν το φυσικό υλικό, αφού κάθε +διακομιστής μπορούσε συνήθως να εκτελέσει μόνο μια εργασία/εφαρμογή που είχε +υλοποιηθεί με βάση το υλικό του συγκεκριμένου προμηθευτή (του διακομιστή). + +Από εκείνο το σημείο και έπειτα, άρχισε να γίνεται εμφανής η ανάγκη της +εικονικοποίησης και να ανεβαίνει η δημοτικότητά της. Οι εταιρείες μπορούσαν +πλέον να διαμερίσουν τους διακομιστές τους και να εκτελούν ακόμα και τις +παλαιές τους εφαρμογές σε πολλούς τύπους και εκδόσεις λειτουργικών συστημάτων. +Οι διακομιστές άρχισαν να χρησιμοποιούνται πιο αποδοτικά ή και καθόλου (όταν η +ζήτηση ήταν ελάχιστη), μειώνοντας το απαιτούμενο κόστος αγοράς, εγκατάστασης, +συντήρησης και ψύξης τους. + +Η ευρεία εφαρμογή της εικονικοποίησης συνέβαλε στη μείωση του εγκλωβισμού σε +έναν μόνο προμηθευτή και την κατέστησε το θεμέλιο του υπολογιστικού νέφους. +Σήμερα είναι τόσο διαδεδομένη σε όλες τις επιχειρήσεις που συχνά απαιτείται +εξειδικευμένο λογισμικό διαχείρισης των εικονικών πόρων +\cite{redhatVirtualizationManagement} για να μπορέσει κανείς να παρακολουθεί τα +δρώμενα μιας επιχείρησης. Πρόκειται για ένα λογισμικό το οποίο διασυνδέεται με +εικονικά περιβάλλοντα και το υποκείμενο φυσικό υλικό τους με απώτερο σκοπό την +απλοποίηση της διαχείρισης πόρων, τη βελτίωση της ανάλυσης δεδομένων και τον +εξορθολογισμό των λειτουργιών τους. Ουσιαστικά, αποτελεί ένα λογισμικό που +συνδέεται απομακρυσμένα με υπερ-επόπτες, προσφέροντας μια φιλική προς τον χρήση +διεπαφή και επιπρόσθετες λειτουργίες, όπως η συγκρότηση αναφορών χρήσης, η +αυτοματοποίηση επιβολής κανόνων και η παρακολούθηση χρήσης εικονικών +περιβαλλόντων. + +\subsection{Τι είναι ένας υπερ-επόπτης} \label{hypervisors} + +Προτού οι υπερ-επόπτες έρθουν στο προσκήνιο, οι περισσότεροι φυσικοί +υπολογιστές μπορούσαν να εκτελέσουν ένα λειτουργικό σύστημα τη φορά. Αυτό +συνέβαλε στη σταθερότητα τους μιας και δε χρειαζόταν να διαχειριστούν αιτήματα +από άλλα λειτουργικά συστήματα. Αυτή η προσέγγιση όμως είχε ένα μειονέκτημα. +Μεγάλο κομμάτι των πόρων του συστήματος έμενε ανεκμετάλλευτο. + +Τη λύση σε αυτό το πρόβλημα την έφερε η εισαγωγή των υπερ-εποπτών. Πρόκειται +για μια στρώση λογισμικού που καθιστά δυνατή την εκτέλεση πολλαπλών +λειτουργικών συστημάτων, το ένα δίπλα στο άλλο, μοιράζοντας τους ίδιους +φυσικούς πόρους σε κάθε ένα από αυτά. Η πράξη αυτή ονομάζεται εικονικοποίηση +και τα στιγμιότυπα των λειτουργικών συστημάτων λέγονται εικονικές μηχανές και +αντιπροσωπεύουν προσομοιώσεις φυσικών υπολογιστών. + +Οι υπερ-επόπτες είναι υπεύθυνοι για τη διαχείριση των εικονικών μηχανών +χωρίζοντάς τις και αναθέτοντας σε κάθε μια ένα κομμάτι της διαθέσιμης +υπολογιστικής ισχύος, μνήμης και χώρου αποθήκευσης. Αυτή η διαδικασία τις +αποτρέπει από την αλληλεπίδραση μεταξύ τους. Μάλιστα, στην περίπτωση +κατάρρευσης μιας εικονικής μηχανής, οι υπόλοιπες παραμένουν ανεπηρέαστες. + +\subsubsection{Είδη υπερ-εποπτών} \label{hypervisorTypes} + +Οι υπερ-επόπτες χωρίζονται σε δύο κατηγορίες ανάλογα με το περιβάλλον στο οποίο +εκτελούνται. Με βάση την \citeauthor{ibmHypervisorDefinition} +\cite{ibmHypervisorDefinition}, αυτές είναι: + +\begin{itemize} + + \item \textbf{Τύπου 1 (Bare Metal)}: + + Ένας υπερ-επόπτης τύπου 1 εκτελείται απευθείας στο φυσικό υλικό του + υποκείμενου υπολογιστή, αλληλεπιδρώντας άμεσα με την κεντρική μονάδα + επεξεργασίας, τη μνήμη και το φυσικό αποθηκευτικό χώρο. Για το λόγο + αυτό, οι υπερ-επόπτες τύπου 1 αναφέρονται επίσης ως bare-metal + υπερ-επόπτες και αντικαθιστούν το λειτουργικό σύστημα του κεντρικού + υπολογιστή. Η άμεση πρόσβαση στο φυσικό υλικό, τους καθιστά ιδιαίτερα + αποδοτικούς. Παρ' όλα αυτά, επειδή αντικαθιστούν το ΛΣ, προκειμένου να + μπορούν να αξιοποιηθούν απομακρυσμένα, συχνά απαιτείται μια ξεχωριστή + μηχανή στην οποία θα εκτελείται λογισμικό διαχείρισης εικονικών πόρων + \cite{phoenixnapHypervisors}, μέσω του οποίου προσφέρεται μια διεπαφή + για τον έλεγχο των εικονικών μηχανών και του υλικού του κεντρικού + υπολογιστή. + + \item \textbf{Τύπου 2 (Hosted)}: + + Ένας υπερ-επόπτης τύπου 2 δεν εκτελείται απευθείας στο υποκείμενο + υλικό. Αντ' αυτού, εκτελείται ως εφαρμογή σε ένα υπάρχον λειτουργικό + σύστημα. Η χρήση τους δε συνηθίζεται σε περιβάλλοντα με πολλούς + διακομιστές λόγω της καθυστέρησης που εισάγεται εξαιτίας της συνεχούς + επικοινωνίας του με το ΛΣ φιλοξενίας και επειδή το υποκείμενο αυτό ΛΣ + βάζει σε προτεραιότητα τις δικές του εφαρμογές και λειτουργίες έναντι + αυτών του υπερ-επόπτη \cite{amazonHypervisors}. + +\end{itemize} + +Σε κάθε τύπο υπερ-επόπτη, όταν το φιλοξενούμενο ΛΣ αιτηθεί πρόσβαση στους +πόρους υπολογισμού, μνήμης και δικτύου του φυσικού υλικού, όλες οι προσβάσεις +περνάνε πρώτα από αυτόν. Στην περίπτωση όμως υπερ-επόπτη τύπου 2, επειδή +εκτελείται ως εφαρμογή του ΛΣ φιλοξενίας, οι προσβάσεις αυτές χρειάζεται να +μεταφραστούν προτού περάσουν στο φιλοξενούμενο ΛΣ και τους υποκείμενους πόρους +του. Επομένως, σε αντίθεση με τους υπερ-επόπτες τύπου 1 όπου η πρόσβαση γίνεται +άμεσα, η χρήση υπερ-εποπτών τύπου 2 εισάγει προβλήματα καθυστέρησης που μπορεί +να επηρεάσουν την απόδοση. Κατά την χρήση υπερ-επόπτη τύπου 2 παρέχεται +μεγαλύτερη συμβατότητα/γκάμα υλικού διότι αυτό διαχειρίζεται από το υποκείμενο +ΛΣ φιλοξενίας. Επιπροσθέτως, εισάγεται πιθανός κίνδυνος ασφαλείας εάν ένας +εισβολέας παραβιάσει το κεντρικό λειτουργικό σύστημα, επειδή θα μπορούσε στη +συνέχεια να χειραγωγήσει οποιοδήποτε φιλοξενούμενο λειτουργικό σύστημα +εκτελείται σε αυτό. + +Από την άλλη μεριά, οι υπερ-επόπτες τύπου 2 είναι καταλληλότεροι για +μεμονωμένους τελικούς χρήστες υπολογιστών που έχουν την ανάγκη να εκτελέσουν +πολλαπλά λειτουργικά συστήματα (σε έναν υπολογιστή). Παραδείγματα τέτοιων +χρηστών είναι μηχανικοί, επαγγελματίες ασφαλείας που αναλύουν κακόβουλο +λογισμικό και υπάλληλοι επιχειρήσεων που χρειάζονται πρόσβαση σε εφαρμογές που +είναι διαθέσιμες αποκλειστικά σε διαφορετικές πλατφόρμες λογισμικού από τη δική +τους. Διατίθενται συχνά πρόσθετες εργαλειοθήκες για τους χρήστες, οι οποίες +μπορούν να εγκατασταθούν στο υποκείμενο λειτουργικό σύστημα προκειμένου να +παρέχουν βελτιωμένες συνδέσεις μεταξύ του υποκείμενου λειτουργικού συστήματος +και εκείνου της εικονικής μηχανής. Οι πρόσθετες δυνατότητες που υποστηρίζονται +μετά την παραπάνω διαδικασία μπορεί να είναι η αποκοπή και επικόλληση μεταξύ +των δύο συστημάτων ή η κοινή πρόσβαση στον αποθηκευτικό χώρο. Η τρέχουσα +προσέγγιση επιτρέπει τη γρήγορη εναλλαγή σε διαφορετικά λειτουργικά συστήματα +πέραν του ήδη υπάρχοντος, πράγμα που αυξάνει την παραγωγικότητα του τελικού +χρήστη, αφού μπορεί να έχει πρόσβαση σε εργαλεία που δεν υποστηρίζονται στο +δικό του (αρχικό/υπάρχον σύστημα). + +Εξαίρεση στον κανόνα απουσίας λειτουργικού συστήματος αποτελεί η χρήση ενός +υπερ-επόπτη ανοιχτού κώδικα βασισμένου στο KVM (Kernel-based Virtual Machine), +που επιτρέπει στο Linux να συμπεριφέρεται ως ένας υπερ-επόπτης. Αυτό συμβαίνει +διότι το KVM αποτελεί κομμάτι του πυρήνα του Linux από την έκδοση 2.6.20 και +έπειτα, επιτρέποντάς του να επωφεληθεί από τους διαθέσιμους μηχανισμούς +απομόνωσης μέσω αυτού. Επομένως, του προσφέρεται η ικανότητα να λάβει +αποκλειστικούς πόρους από το φυσικό μηχάνημα \cite{kvm}, κάτι που εξαλείφει το +μειονέκτημα έλλειψης προτεραιότητας των διεργασιών ενός υπερ-επόπτη τύπου 2 +έναντι αυτών του λειτουργικού συστήματος φιλοξενίας. + +\subsubsection{Χαρακτηριστικά ενός υπερ-επόπτη} \label{hypervisorCharacteristics} + +Αν και υπάρχουν διαφορετικά είδη υπερ-εποπτών, όλοι έχουν κάποια χαρακτηριστικά +που πρέπει να λάβει κανείς υπόψιν όταν επιλέγει ποιον θα χρησιμοποιήσει. Μερικά +σημαντικά αυτών, όπως αναφέρονται από την \citeauthor{ibmHypervisorDefinition} +\cite{ibmHypervisorDefinition}, είναι: + +\begin{itemize} + + \item \textbf{Απόδοση}: + + Βασικό χαρακτηριστικό ενός υπερ-επόπτη είναι η απόδοσή του. Αυτή + διαφέρει από τον ένα υπερ-επόπτη στον άλλο αναλόγως την κατασκευή και + τον τύπο του. Όμως, εν γένει, οι υπερ-επόπτες τύπου 1 θα πρέπει να + παρέχουν απόδοση κοντά στην εγγενή λόγω της απουσίας ανάγκης μετάφρασης + των αιτημάτων του φιλοξενούμενου ΛΣ. + + \item \textbf{Εργαλεία διαχείρισης}: + + Η εκτέλεση εικονικών μηχανών δεν αποτελεί το μοναδικό καθήκον ενός + διαχειριστή κατά τη χρήση ενός υπερ-επόπτη. Απαραίτητες πρόσθετες + ενέργειες είναι η συντήρηση και η ανάλυσή τους, καθώς και η διαγραφή + όσων δε χρησιμοποιούνται πλέον. Επομένως, η ύπαρξη εργαλείων που να + καθιστούν δυνατές αυτές τις ενέργειες αποτελεί σημαντικό παράγοντα κατά + την επιλογή λογισμικού υπερ-επόπτη. + +\clearpage + + \item \textbf{Οικοσύστημα}: + + Για τη διαχείριση ενός υπερ-επόπτη σε διάφορες κλίμακες πρέπει να + υπάρχει καλή τεκμηρίωση και διάφορα εργαλεία διαχείρισης είτε επίσημα + είτε από την κοινότητα που να επιτρέπουν δυνατότητες, όπως δημιουργία + αντιγράφων ασφαλείας, ανάλυση χωρητικότητας και διαχείριση εναλλαγής + εικονικών μηχανών \cite{vmfailover} με αντίγραφά τους σε περιπτώσεις + σφάλματος του λειτουργικού συστήματος της εκτελούμενης (εικονικής + μηχανής). + + \item \textbf{Μεταφορά κατά τη λειτουργία}: + + Πρέπει να υπάρχει η δυνατότητα μεταφοράς εικονικών μηχανών από έναν + υπερ-επόπτη σε έναν δεύτερο σε διαφορετική φυσική μηχανή, ιδανικά χωρίς + την ανάγκη διακοπής της λειτουργίας τους. Ένα χαρακτηριστικό που + χρησιμεύει τόσο για την αποτροπή αποτυχίας παροχής υπηρεσιών της + εκάστοτε επιχείρησης όσο και για την εξισορρόπηση του φόρτου εργασίας. + + \item \textbf{Κόστος}: + + Το κόστος είναι ένας παράγοντας που πρέπει να ληφθεί υπόψιν κατά την + επιλογή ενός υπερ-επόπτη. Οι περισσότεροι είναι δωρεάν αλλά υπάρχουν + και εμπορικές εκδόσεις που προσφέρουν περισσότερες δυνατότητες. Για + παράδειγμα, μπορεί να προσφέρεται λογισμικό διαχείρισης των λειτουργιών + τους που να επιτρέπει την εύκολη κλιμάκωση με βάση τις απαιτήσεις της + επιχείρησης. + +\end{itemize} + +\subsubsection{Επιλογή υπερ-επόπτη} \label{hypervisorSelection} + +Σε κάθε περίπτωση, η ασφάλεια αποτελεί έναν σημαντικό παράγοντα επιλογής +υπερ-επόπτη διότι στην περίπτωση παραβίασής του, η χειραγώγηση όλων των +εικονικών μηχανών που αυτός διαχειρίζεται θα μπορεί να πραγματοποιηθεί χωρίς +μεγάλη δυσκολία. + +Η επιλογή του τύπου υπερ-επόπτη που θα χρησιμοποιηθεί είναι άμεσα εξαρτώμενη +από τις ανάγκες του κάθε τελικού χρήση ή επιχείρησης ζυγίζοντας τα +πλεονεκτήματα και μειονεκτήματα που έρχονται με την κάθε επιλογή. Παραδείγματος +χάριν, αν η ταχύτητα και η απόδοση θεωρούνται από τον χρήστη χαρακτηριστικά +υψίστης σημασίας, τότε η επιλογή υπερ-επόπτη τύπου 1 αποτελεί μονόδρομο. +Επιπλέον, ο μεγαλύτερος βαθμός απομόνωσης που προσφέρουν, παρέχει και +μεγαλύτερη ασφάλεια. Από την άλλη, αν η προτεραιότητα είναι η ευκολία +διαχείρισης και η ευελιξία ταχείας εναλλαγής σε διαφορετικά λειτουργικά +συστήματα, η πιο ταιριαστή επιλογή είναι ένας υπερ-επόπτης τύπου 2. + +\subsection{Εικονικοποίηση Διακομιστών} \label{virtualizationDefinition} Σύμφωνα με τον ορισμό της Red Hat \cite{redhatVirtualizationDefinition}, η εικονικοποίηση είναι μια τεχνολογία που μας επιτρέπει να δημιουργήσουμε @@ -319,7 +822,20 @@ portal) ή ενός εργαλείου γραμμής εντολών (command li δίνει τη δυνατότητα διαμερισμού ενός συστήματος σε ξεχωριστά, διακριτά και ασφαλή περιβάλλοντα, γνωστά και ως εικονικές μηχανές (Virtual Machines - VMs). Επομένως, αυτές οι εικονικές μηχανές βασίζονται στην ικανότητα του υπερ-επόπτη -να διαχωρίζει τους πόρους της μηχανής και να τους κατανέμει κατάλληλα. +να διαχωρίζει τους πόρους της μηχανής και να τους κατανέμει κατάλληλα. Οι +εικονικές μηχανές έχουν τη μορφή ενός ενιαίου αρχείου, πράγμα που καθιστά +εύκολη τη μεταφορά και ανάγνωσή τους από οποιονδήποτε υπολογιστή αναμένοντας +τον ίδιο τρόπο λειτουργίας. + +\begin{center} +\begin{figure}[!ht] +\centering + \includegraphics[width = .5\textwidth]{Figures/RedHat_Virtualization/redhat_virtualization_architecture.png} + \captionof{figure}{Υπερ-επόπτης πάνω σε διακομιστές \cite{redhatVirtualization}} + \label{fig:hypervisorOnServers} +\end{figure} +\vspace*{-30pt} +\end{center} Το φυσικό υλικό, εξοπλισμένο με έναν υπερ-επόπτη, ονομάζεται ξενιστής (host) ή μηχάνημα φιλοξενίας (hosting machine), ενώ οι πολλές εικονικές μηχανές που @@ -396,529 +912,181 @@ off). Το τελευταίο είναι χρήσιμο κυρίως όταν η ως προς το κλείσιμο των διακομιστών που δεν απαιτούνται για την κάλυψη της παρούσας ζήτησης. -\subsection{Ιστορική αναδρομή της εικονικοποίησης} \label{virtualizationHistory} +\subsubsection{Παρα-εικονικοποίηση} \label{paraVirtualization} -Όπως αναφέρει μια θυγατρική της IBM \cite{redhatVirtualization}, ενώ η -τεχνολογία εικονικοποίησης χρονολογείται από τη δεκαετία του 1960, δεν -υιοθετήθηκε ευρέως μέχρι τις αρχές της δεκαετίας του 2000. Οι τεχνολογίες που -την έκαναν πραγματικότητα, όπως οι υπερ-επόπτες, αναπτύχθηκαν πριν από -δεκαετίες για να δώσουν σε πολλούς χρήστες ταυτόχρονη πρόσβαση σε υπολογιστές -που επεξεργαζόντουσαν πολλά δεδομένα ταυτόχρονα. Κάτι ιδιαίτερα δημοφιλές στον -τομέα των επιχειρήσεων για καθήκοντα ρουτίνας (routine tasks) που έπρεπε να -εκτελεστούν χιλιάδες φορές και πολύ γρήγορα όπως η μισθοδοσία υπαλλήλων. +Όταν αναφερόμαστε στην εικονικοποίηση συνήθως μιλάμε για την πιο συνηθισμένη +μορφή της, η οποία είναι η πλήρης εικονικοποίηση. Με την πάροδο του χρόνου και +την αύξηση της δημοτικότητας της εικονικοποίησης, αναπτύχθηκαν πολλοί +υπερ-επόπτες που μπορεί να διαφέρουν όχι μόνο στα χαρακτηριστικά τους αλλά και +στις διάφορες τεχνικές που χρησιμοποιούν για να κάνουν την εικονικοποίηση +πραγματικότητα. Μια από αυτές ονομάζεται παρα-εικονικοποίηση +(paravirtualization) \cite{suseParavirtualizationDefinition}. -Ωστόσο, μέσα στις επόμενες δεκαετίες, ήρθαν στο προσκήνιο άλλες λύσεις στο -πρόβλημα διαμοιρασμού ενός μηχανήματος σε πολλούς χρήστες, μειώνοντας έτσι το -ενδιαφέρον για την τεχνολογία εικονικοποίησης. Μία από αυτές ήταν ο -διαμοιρασμός χρόνου (time-sharing), όπου ένας χρήστης μπορούσε να χρησιμοποιεί -το λειτουργικό σύστημα απομονωμένα από τους υπόλοιπους. Κάτι που οδήγησε στη -δημιουργία λειτουργικών συστημάτων όπως το UNIX, το οποίο με τη σειρά του -άνοιξε το δρόμο για την άφιξη του Linux. Καθ' όλη τη διάρκεια αυτή, η -εικονικοποίηση παρέμεινε σε μεγάλο βαθμό μη διαδεδομένη. +Κάθε εικονική μηχανή απαιτεί ένα συγκεκριμένο ποσοστό χρήσης υπολογιστικών +πόρων του φυσικού διακομιστή για να εκτελείται. Μέσα σε αυτό το ποσοστό, +συμπεριλαμβάνεται και η επιβάρυνση που εισάγει η συνεχής μετάφραση εικονικών σε +φυσικούς πόρους. Έχοντας υπόψιν πως κάθε φυσικός διακομιστής διαθέτει +πεπερασμένους πόρους, με την πλήρη εικονικοποίηση επιβάλλεται ένα όριο στον +αριθμό των εικονικών μηχανών που μπορεί αυτός να υποστηρίξει. Επιπροσθέτως, +προκύπτουν και προβλήματα καθυστέρησης αφού η διαδικασία της μετάφρασης απαιτεί +κάποιο χρόνο για να διεκπεραιωθεί. -Προχωρώντας στη δεκαετία του 1990, οι περισσότερες επιχειρήσεις διέθεταν -φυσικούς διακομιστές και στοίβες μηχανημάτων ενός προμηθευτή, οι οποίες δεν -είχαν τη δυνατότητα εκτέλεσης εφαρμογών σε υλικό διαφορετικού προμηθευτή. Καθώς -οι εταιρείες αναβάθμιζαν τα περιβάλλοντα πληροφορικής τους με λιγότερο -δαπανηρούς διακομιστές, λειτουργικά συστήματα και εφαρμογές από διάφορους -προμηθευτές, ήταν υποχρεωμένες να υπολειτουργούν το φυσικό υλικό, αφού κάθε -διακομιστής μπορούσε συνήθως να εκτελέσει μόνο μια εργασία/εφαρμογή που είχε -υλοποιηθεί με βάση το υλικό του συγκεκριμένου προμηθευτή (του διακομιστή). +Επομένως, η πλήρης εικονικοποίηση περιορίζει σημαντικά τον αριθμό των εικονικών +μηχανών που δύναται ένας διακομιστής να εκτελέσει παράλληλα, όπως επίσης και τα +είδη εφαρμογών που μπορούν να εκτελεστούν σε μια εικονική μηχανή (εφόσον η +ταχύτητα εκτέλεσης τους παίζει σημαντικό ρόλο στην ευχρηστία τους). -Από εκείνο το σημείο και έπειτα, άρχισε να γίνεται εμφανής η ανάγκη της -εικονικοποίησης και να ανεβαίνει η δημοτικότητά της. Οι εταιρείες μπορούσαν -πλέον να διαμερίσουν τους διακομιστές τους και να εκτελούν ακόμα και τις -παλαιές τους εφαρμογές σε πολλούς τύπους και εκδόσεις λειτουργικών συστημάτων. -Οι διακομιστές άρχισαν να χρησιμοποιούνται πιο αποδοτικά ή και καθόλου (όταν η -ζήτηση ήταν ελάχιστη), μειώνοντας το απαιτούμενο κόστος αγοράς, εγκατάστασης, -συντήρησης και ψύξης τους. +Η παρα-εικονικοποίηση είναι μια τεχνική εικονικοποίησης που αναπτύχθηκε +προκειμένου να ξεπεραστούν τα προαναφερόμενα προβλήματα επιδόσεων που έρχονται +με την χρήση της πλήρους εικονικοποίησης. Κατά την χρήση της, το φιλοξενούμενο +λειτουργικό σύστημα δεν είναι πλήρως απομονωμένο από το υλικό αλλά απομονώνεται +μερικώς \cite{serverWatchParavirtualization} και έχει άμεση επικοινωνία με +αυτό. Υπάρχει δηλαδή επίγνωση της εικονικοποίησης από μεριάς του ΛΣ των +εικονικών μηχανών και αξιοποίηση της, μέσω της χρήσης υπερ-κλήσεων προς τον +υπερ-επόπτη. Οι κλήσεις αυτές, επιτρέπουν σε κάθε ΛΣ να ζητάει πόρους κατά +παραγγελία και να αναθέτει την εκτέλεση διεργασιών του απευθείας στο υλικό. Για +να μπορέσει να επιτευχθεί αυτό, απαιτείται η τροποποίηση του φιλοξενούμενου +λειτουργικού συστήματος, η οποία θα του επιτρέπει την υλοποίηση ενός ειδικού +API, ώστε να μπορεί να κάνει χρήση των υπερ-κλήσεων +\cite{servermaniaParavirtualization}, ενώ επιβάλλεται να υποστηρίζεται και από +τον υπερ-επόπτη η κατανόησή τους. -Η ευρεία εφαρμογή της εικονικοποίησης συνέβαλε στη μείωση του εγκλωβισμού σε -έναν μόνο προμηθευτή και την κατέστησε το θεμέλιο του υπολογιστικού νέφους. -Σήμερα είναι τόσο διαδεδομένη σε όλες τις επιχειρήσεις που συχνά απαιτείται -εξειδικευμένο λογισμικό διαχείρισης των εικονικών πόρων -\cite{redhatVirtualizationManagement} για να μπορέσει κανείς να παρακολουθεί τα -δρώμενα μιας επιχείρησης. Πρόκειται για ένα λογισμικό το οποίο διασυνδέεται με -εικονικά περιβάλλοντα και το υποκείμενο φυσικό υλικό τους με απώτερο σκοπό την -απλοποίηση της διαχείρισης πόρων, τη βελτίωση της ανάλυσης δεδομένων και τον -εξορθολογισμό των λειτουργιών τους. Ουσιαστικά, αποτελεί ένα λογισμικό που -συνδέεται απομακρυσμένα με υπερ-επόπτες, προσφέροντας μια φιλική προς τον χρήση -διεπαφή και επιπρόσθετες λειτουργίες, όπως η συγκρότηση αναφορών χρήσης, η -αυτοματοποίηση επιβολής κανόνων και η παρακολούθηση χρήσης εικονικών -περιβαλλόντων. +Η παρα-εικονικοποίηση παρέχει ορισμένα πλεονεκτήματα συγκριτικά με την πλήρη +εικονικοποίηση. Καταρχάς, η απόδοση των εικονικών μηχανών είναι συγκρίσιμη με +αυτή των φυσικών μηχανών, αφού η παρα-εικονικοποίηση δεν επιβάλλει την +επιβάρυνση της μετάφρασης εικονικών σε φυσικούς πόρους. Επιπροσθέτως, το +γεγονός πως το φιλοξενούμενο λειτουργικό σύστημα γνωρίζει πως εκτελείται σε +εικονικό περιβάλλον, του δίνει την δυνατότητα να αποφύγει την χρήση περιττών +προγραμμάτων που μπορεί να αποτελέσουν ευπαθή σημεία για επιθέσεις, όπως για +παράδειγμα το BIOS. Επομένως, η χρήση της παρα-εικονικοποίσης παρέχει +μεγαλύτερη ασφάλεια στο σύστημα. Μερικοί τομείς που επωφελούνται από την +παρα-εικονικοποίηση είναι η χρήση λογισμικών που επιτρέπουν την ανάκαμψη από +καταστροφές, την μετανάστευση δεδομένων μεταξύ λειτουργικών συστημάτων +\cite{insightsForProfessionalsParavirtualization} ή ακόμα και λογισμικά +ενσωματωμένων συστημάτων αυτοκινήτων \cite{blackberryParavirtualization}. -\section{Τι είναι ένας υπερ-επόπτης} \label{hypervisors} +Παρ' όλα τα πλεονεκτήματα που παρέχει η χρήση της παρα-εικονικοποίησης, +υπάρχουν και μερικά ζητήματα που πρέπει να ληφθούν υπόψιν. Εξαιτίας της ανάγκης +τροποποίησης του λειτουργικού συστήματος των φιλοξενούμενων λειτουργικών +συστημάτων, κάτι που δεν είναι πάντοτε εφικτό, αυτά καθίστανται λιγότερο φορητά +σε σχέση με την πλήρη εικονικοποίηση, αφού τροποποιούνται για την υποστήριξη +συγκεκριμένου υλικού αντί ενός υπερ-επόπτη \cite{blackberryParavirtualization}. +Ταυτοχρόνως, η στενή εξάρτηση μεταξύ του υπερ-επόπτη και των φιλοξενούμενων ΛΣ +μπορεί να διακοπεί από τις ενημερώσεις του λειτουργικού συστήματος +\cite{insightsForProfessionalsParavirtualization}, κάνοντας την +παρα-εικονικοποίηση λιγότερο αξιόπιστη. -Προτού οι υπερ-επόπτες έρθουν στο προσκήνιο, οι περισσότεροι φυσικοί -υπολογιστές μπορούσαν να εκτελέσουν ένα λειτουργικό σύστημα τη φορά. Αυτό -συνέβαλε στη σταθερότητα τους μιας και δε χρειαζόταν να διαχειριστούν αιτήματα -από άλλα λειτουργικά συστήματα. Αυτή η προσέγγιση όμως είχε ένα μειονέκτημα. -Μεγάλο κομμάτι των πόρων του συστήματος έμενε ανεκμετάλλευτο. - -Τη λύση σε αυτό το πρόβλημα την έφερε η εισαγωγή των υπερ-εποπτών. Πρόκειται -για μια στρώση λογισμικού που καθιστά δυνατή την εκτέλεση πολλαπλών -λειτουργικών συστημάτων, το ένα δίπλα στο άλλο, μοιράζοντας τους ίδιους -φυσικούς πόρους σε κάθε ένα από αυτά. Η πράξη αυτή ονομάζεται εικονικοποίηση -και τα στιγμιότυπα των λειτουργικών συστημάτων λέγονται εικονικές μηχανές και -αντιπροσωπεύουν προσομοιώσεις φυσικών υπολογιστών. - -Οι υπερ-επόπτες είναι υπεύθυνοι για τη διαχείριση των εικονικών μηχανών -χωρίζοντάς τις και αναθέτοντας σε κάθε μια ένα κομμάτι της διαθέσιμης -υπολογιστικής ισχύος, μνήμης και χώρου αποθήκευσης. Αυτή η διαδικασία τις -αποτρέπει από την αλληλεπίδραση μεταξύ τους. Μάλιστα, στην περίπτωση -κατάρρευσης μιας εικονικής μηχανής, οι υπόλοιπες παραμένουν ανεπηρέαστες. - -\subsection{Είδη υπερ-εποπτών} \label{hypervisorTypes} - -Οι υπερ-επόπτες χωρίζονται σε δύο κατηγορίες ανάλογα με το περιβάλλον στο οποίο -εκτελούνται. Με βάση την \citeauthor{ibmHypervisorDefinition} -\cite{ibmHypervisorDefinition}, αυτές είναι: - -\begin{itemize} - - \item \textbf{Τύπου 1 (Bare Metal)}: - - Ένας υπερ-επόπτης τύπου 1 εκτελείται απευθείας στο φυσικό υλικό του - υποκείμενου υπολογιστή, αλληλεπιδρώντας άμεσα με την κεντρική μονάδα - επεξεργασίας, τη μνήμη και το φυσικό αποθηκευτικό χώρο. Για το λόγο - αυτό, οι υπερ-επόπτες τύπου 1 αναφέρονται επίσης ως bare-metal - υπερ-επόπτες και αντικαθιστούν το λειτουργικό σύστημα του κεντρικού - υπολογιστή. Η άμεση πρόσβαση στο φυσικό υλικό, τους καθιστά ιδιαίτερα - αποδοτικούς. Παρ' όλα αυτά, επειδή αντικαθιστούν το ΛΣ, προκειμένου να - μπορούν να αξιοποιηθούν απομακρυσμένα, συχνά απαιτείται μια ξεχωριστή - μηχανή στην οποία θα εκτελείται λογισμικό διαχείρισης εικονικών πόρων - \cite{phoenixnapHypervisors}, μέσω του οποίου προσφέρεται μια διεπαφή - για τον έλεγχο των εικονικών μηχανών και του υλικού του κεντρικού - υπολογιστή. - - \item \textbf{Τύπου 2 (Hosted)}: - - Ένας υπερ-επόπτης τύπου 2 δεν εκτελείται απευθείας στο υποκείμενο - υλικό. Αντ' αυτού, εκτελείται ως εφαρμογή σε ένα υπάρχον λειτουργικό - σύστημα. Η χρήση τους δε συνηθίζεται σε περιβάλλοντα με πολλούς - διακομιστές λόγω της καθυστέρησης που εισάγεται εξαιτίας της συνεχούς - επικοινωνίας του με το ΛΣ φιλοξενίας και επειδή το υποκείμενο αυτό ΛΣ - βάζει σε προτεραιότητα τις δικές του εφαρμογές και λειτουργίες έναντι - αυτών του υπερ-επόπτη \cite{amazonHypervisors}. - -\end{itemize} - -Σε κάθε τύπο υπερ-επόπτη, όταν το φιλοξενούμενο ΛΣ αιτηθεί πρόσβαση στους -πόρους υπολογισμού, μνήμης και δικτύου του φυσικού υλικού, όλες οι προσβάσεις -περνάνε πρώτα από αυτόν. Στην περίπτωση όμως υπερ-επόπτη τύπου 2, επειδή -εκτελείται ως εφαρμογή του ΛΣ φιλοξενίας, οι προσβάσεις αυτές χρειάζεται να -μεταφραστούν προτού περάσουν στο φιλοξενούμενο ΛΣ και τους υποκείμενους πόρους -του. Επομένως, σε αντίθεση με τους υπερ-επόπτες τύπου 1 όπου η πρόσβαση γίνεται -άμεσα, η χρήση υπερ-εποπτών τύπου 2 εισάγει προβλήματα καθυστέρησης που μπορεί -να επηρεάσουν την απόδοση. Κατά την χρήση υπερ-επόπτη τύπου 2 παρέχεται -μεγαλύτερη συμβατότητα/γκάμα υλικού διότι αυτό διαχειρίζεται από το υποκείμενο -ΛΣ φιλοξενίας. Επιπροσθέτως, εισάγεται πιθανός κίνδυνος ασφαλείας εάν ένας -εισβολέας παραβιάσει το κεντρικό λειτουργικό σύστημα, επειδή θα μπορούσε στη -συνέχεια να χειραγωγήσει οποιοδήποτε φιλοξενούμενο λειτουργικό σύστημα -εκτελείται σε αυτό. - -Από την άλλη μεριά, οι υπερ-επόπτες τύπου 2 είναι καταλληλότεροι για -μεμονωμένους τελικούς χρήστες υπολογιστών που έχουν την ανάγκη να εκτελέσουν -πολλαπλά λειτουργικά συστήματα (σε έναν υπολογιστή). Παραδείγματα τέτοιων -χρηστών είναι μηχανικοί, επαγγελματίες ασφαλείας που αναλύουν κακόβουλο -λογισμικό και υπάλληλοι επιχειρήσεων που χρειάζονται πρόσβαση σε εφαρμογές που -είναι διαθέσιμες αποκλειστικά σε διαφορετικές πλατφόρμες λογισμικού από τη δική -τους. Διατίθενται συχνά πρόσθετες εργαλειοθήκες για τους χρήστες, οι οποίες -μπορούν να εγκατασταθούν στο υποκείμενο λειτουργικό σύστημα προκειμένου να -παρέχουν βελτιωμένες συνδέσεις μεταξύ του υποκείμενου λειτουργικού συστήματος -και εκείνου της εικονικής μηχανής. Οι πρόσθετες δυνατότητες που υποστηρίζονται -μετά την παραπάνω διαδικασία μπορεί να είναι η αποκοπή και επικόλληση μεταξύ -των δύο συστημάτων ή η κοινή πρόσβαση στον αποθηκευτικό χώρο. Η τρέχουσα -προσέγγιση επιτρέπει τη γρήγορη εναλλαγή σε διαφορετικά λειτουργικά συστήματα -πέραν του ήδη υπάρχοντος, πράγμα που αυξάνει την παραγωγικότητα του τελικού -χρήστη, αφού μπορεί να έχει πρόσβαση σε εργαλεία που δεν υποστηρίζονται στο -δικό του (αρχικό/υπάρχον σύστημα). - -\subsection{Χαρακτηριστικά ενός υπερ-επόπτη} \label{hypervisorCharacteristics} - -Αν και υπάρχουν διαφορετικά είδη υπερ-εποπτών, όλοι έχουν κάποια χαρακτηριστικά -που πρέπει να λάβει κανείς υπόψιν όταν επιλέγει ποιον θα χρησιμοποιήσει. Μερικά -σημαντικά αυτών, όπως αναφέρονται από την \citeauthor{ibmHypervisorDefinition} -\cite{ibmHypervisorDefinition}, είναι: - -\begin{itemize} - - \item \textbf{Απόδοση}: - - Βασικό χαρακτηριστικό ενός υπερ-επόπτη είναι η απόδοσή του. Αυτή - διαφέρει από τον ένα υπερ-επόπτη στον άλλο αναλόγως την κατασκευή και - τον τύπο του. Όμως, εν γένει, οι υπερ-επόπτες τύπου 1 θα πρέπει να - παρέχουν απόδοση κοντά στην εγγενή λόγω της απουσίας ανάγκης μετάφρασης - των αιτημάτων του φιλοξενούμενου ΛΣ. - - \item \textbf{Εργαλεία διαχείρισης}: - - Η εκτέλεση εικονικών μηχανών δεν αποτελεί το μοναδικό καθήκον ενός - διαχειριστή κατά τη χρήση ενός υπερ-επόπτη. Απαραίτητες πρόσθετες - ενέργειες είναι η συντήρηση και η ανάλυσή τους, καθώς και η διαγραφή - όσων δε χρησιμοποιούνται πλέον. Επομένως, η ύπαρξη εργαλείων που να - καθιστούν δυνατές αυτές τις ενέργειες αποτελεί σημαντικό παράγοντα κατά - την επιλογή λογισμικού υπερ-επόπτη. - - \item \textbf{Οικοσύστημα}: - - Για τη διαχείριση ενός υπερ-επόπτη σε διάφορες κλίμακες πρέπει να - υπάρχει καλή τεκμηρίωση και διάφορα εργαλεία διαχείρισης είτε επίσημα - είτε από την κοινότητα που να επιτρέπουν δυνατότητες, όπως δημιουργία - αντιγράφων ασφαλείας, ανάλυση χωρητικότητας και διαχείριση εναλλαγής - εικονικών μηχανών \cite{vmfailover} με αντίγραφά τους σε περιπτώσεις - σφάλματος του λειτουργικού συστήματος της εκτελούμενης (εικονικής - μηχανής). - - \item \textbf{Μεταφορά κατά τη λειτουργία}: - - Πρέπει να υπάρχει η δυνατότητα μεταφοράς εικονικών μηχανών από έναν - υπερ-επόπτη σε έναν δεύτερο σε διαφορετική φυσική μηχανή, ιδανικά χωρίς - την ανάγκη διακοπής της λειτουργίας τους. Ένα χαρακτηριστικό που - χρησιμεύει τόσο για την αποτροπή αποτυχίας παροχής υπηρεσιών της - εκάστοτε επιχείρησης όσο και για την εξισορρόπηση του φόρτου εργασίας. - - \item \textbf{Κόστος}: - - Το κόστος είναι ένας παράγοντας που πρέπει να ληφθεί υπόψιν κατά την - επιλογή ενός υπερ-επόπτη. Οι περισσότεροι είναι δωρεάν αλλά υπάρχουν - και εμπορικές εκδόσεις που προσφέρουν περισσότερες δυνατότητες. Για - παράδειγμα, μπορεί να προσφέρεται λογισμικό διαχείρισης των λειτουργιών - τους που να επιτρέπει την εύκολη κλιμάκωση με βάση τις απαιτήσεις της - επιχείρησης. - -\end{itemize} - -\subsection{Επιλογή υπερ-επόπτη} \label{hypervisorSelection} - -Σε κάθε περίπτωση, η ασφάλεια αποτελεί έναν σημαντικό παράγοντα επιλογής -υπερ-επόπτη διότι στην περίπτωση παραβίασής του, η χειραγώγηση όλων των -εικονικών μηχανών που αυτός διαχειρίζεται θα μπορεί να πραγματοποιηθεί χωρίς -μεγάλη δυσκολία. - -Η επιλογή του τύπου υπερ-επόπτη που θα χρησιμοποιηθεί είναι άμεσα εξαρτώμενη -από τις ανάγκες του κάθε τελικού χρήση ή επιχείρησης ζυγίζοντας τα -πλεονεκτήματα και μειονεκτήματα που έρχονται με την κάθε επιλογή. Παραδείγματος -χάριν, αν η ταχύτητα και η απόδοση θεωρούνται από τον χρήστη χαρακτηριστικά -υψίστης σημασίας, τότε η επιλογή υπερ-επόπτη τύπου 1 αποτελεί μονόδρομο. -Επιπλέον, ο μεγαλύτερος βαθμός απομόνωσης που προσφέρουν, παρέχει και -μεγαλύτερη ασφάλεια. Από την άλλη, αν η προτεραιότητα είναι η ευκολία -διαχείρισης και η ευελιξία ταχείας εναλλαγής σε διαφορετικά λειτουργικά -συστήματα, η πιο ταιριαστή επιλογή είναι ένας υπερ-επόπτης τύπου 2. - -\section {Τρόπος λειτουργίας της εικονικοποίησης} \label{virtualizationOperation} - -Για να πραγματοποιηθεί η εικονικοποίηση, χρειαζόμαστε έναν υπερ-επόπτη. Δηλαδή -ενός λογισμικού που διαχωρίζει τους φυσικούς πόρους από τα εικονικά -περιβάλλοντα, τα οποία τους χρειάζονται. Ένας υπερ-επόπτης μπορεί να -τοποθετηθεί πάνω σε ένα λειτουργικό σύστημα ή να εγκατασταθεί απευθείας στο -υλικό. Η τελευταία εναλλακτική είναι αυτή που επιλέγουν οι περισσότερες -επιχειρήσεις για λόγους αποδοτικότητας αφού θα βρίσκεται μια στρώση πιο κοντά -στο υλικό το οποίο θα διαχειρίζεται. Η δουλειά ενός υπερ-επόπτη είναι -ουσιαστικά να λάβει τους φυσικούς πόρους ενός (φυσικού) μηχανήματος και να τους -χωρίσει με τέτοιο τρόπο ώστε να μπορούν να χρησιμοποιηθούν από τα εικονικά μας -περιβάλλοντα \cite{redhatVirtualization}. +Στο Σχήμα \ref{fig:FullVirtualization} +\cite{geeksforgeeksParavirtualizationDefinition} παρουσιάζεται η αρχιτεκτονική +της πλήρους εικονικοποίησης όπου το φιλοξενούμενο λειτουργικό σύστημα (της +εικονικής μηχανής) επιβάλλεται να περάσει τα αιτήματά του (πρόσβασης πόρων) +μέσω του υπερ-επόπτη. \begin{center} \begin{figure}[!ht] \centering - \includegraphics[width = .5\textwidth]{Figures/RedHat_Virtualization/redhat_virtualization_architecture.png} - \captionof{figure}{Υπερ-επόπτης πάνω σε διακομιστές \cite{redhatVirtualization}} - \label{fig:hypervisorOnServers} + \includegraphics[width = .7\textwidth]{Figures/GeeksForGeeksParavirtualization/Full-Virualization.png} + \captionof{figure}{Πλήρης εικονικοποίηση \cite{geeksforgeeksParavirtualizationDefinition}} + \label{fig:FullVirtualization} \end{figure} \vspace*{-30pt} \end{center} -Μετά τη δημιουργία μιας εικονικής μηχανής, οι χρήστες αλληλεπιδρούν με αυτή -όπως θα αλληλεπιδρούσαν με μια φυσική. Οι εικονικές μηχανές έχουν τη μορφή ενός -ενιαίου αρχείου, πράγμα που καθιστά εύκολη τη μεταφορά και ανάγνωσή τους από -οποιονδήποτε υπολογιστή αναμένοντας τον ίδιο τρόπο λειτουργίας. Κατά την -εκτέλεση του εικονικού περιβάλλοντος, όταν ένας χρήστης ή ένα πρόγραμμα εκδώσει -μία εντολή που απαιτεί περισσότερους πόρους από τους διαθέσιμούς του, ο -υπερ-επόπτης είτε αναμεταδίδει το αίτημα αυτό στο φυσικό σύστημα είτε πρώτα το -μεταφράζει και μεταδίδει το μεταφρασμένο αν είναι υπερ-επόπτης τύπου 2. Έπειτα, -μπορεί να διαθέσει τους απαραίτητους για την εκτέλεση πόρους. Όλα αυτά -συμβαίνουν με σχεδόν εγγενή ταχύτητα αν γίνεται χρήση υπερ-επόπτη τύπου 1 όπου -δεν υπάρχει λειτουργικό σύστημα ανάμεσα στις εικονικές μηχανές και το φυσικό -μηχάνημα. +Αντιθέτως, στο Σχήμα \ref{fig:ParaVirtualization} όπου και φαίνεται η +αρχιτεκτονική της παρα-εικονικοποίησης, βλέπουμε πως μέσω των υπερ-κλήσεων, όλα +τα αιτήματα προορίζονται στη στρώση εικονικοποίησης και από εκεί στο κύριο +σύστημα (χωρίς την ανάγκη κάποιας επεξεργασίας ή μετάφρασης). -Εξαίρεση στον κανόνα απουσίας λειτουργικού συστήματος αποτελεί η χρήση ενός -υπερ-επόπτη ανοιχτού κώδικα βασισμένου στο KVM (Kernel-based Virtual Machine), -που επιτρέπει στο Linux να συμπεριφέρεται ως ένας υπερ-επόπτης. Αυτό συμβαίνει -διότι το KVM αποτελεί κομμάτι του πυρήνα του Linux από την έκδοση 2.6.20 και -έπειτα, επιτρέποντάς του να επωφεληθεί από τους διαθέσιμους μηχανισμούς -απομόνωσης μέσω αυτού. Επομένως, του προσφέρεται η ικανότητα να λάβει -αποκλειστικούς πόρους από το φυσικό μηχάνημα \cite{kvm}, κάτι που εξαλείφει το -μειονέκτημα έλλειψης προτεραιότητας των διεργασιών ενός υπερ-επόπτη τύπου 2 -έναντι αυτών του λειτουργικού συστήματος φιλοξενίας. - -\subsection{Είδη εικονικοποίησης} \label{virtualizationImplementations} - -Υπάρχουν πολλά είδη εικονικοποίησης. Πέντε βασικά αυτών, όπως αναφέρονται από -την Red Hat \cite{redhatVirtualization}, συνδυαστικά με τρία ακόμα που -χρησιμοποιούνται συχνά, είναι τα παρακάτω: - -\begin{itemize} - - \item \textbf{Εικονικοποίηση Δεδομένων}: - - \begin{center} - \begin{figure}[!ht] - \centering - \includegraphics[width = .5\textwidth]{Figures/RedHat_Virtualization/redhat_data_virtualization.png} - \captionof{figure}{Εικονικοποίηση Δεδομένων \cite{redhatVirtualization}} - \label{fig:dataVirtualization} - \end{figure} - \vspace*{-30pt} - \end{center} - -\end{itemize} - -Η εικονικοποίηση δεδομένων είναι μια προσέγγιση ενσωμάτωσης δεδομένων από -διαφορετικές πηγές, σε μια ολιστική, λογική προβολή δίχως την ανάγκη της -φυσικής μετακίνησής τους \cite{dataVirtualization}. Δηλαδή, διασκορπισμένα -ετερογενή δεδομένα παρεχόμενα από πηγές διαφόρων τοποθεσιών δύναται να -συσσωματωθούν σε μοναδικά, λογικά τεμάχια μιας ενιαίας εικονικής πηγής. Με -αυτόν τον τρόπο, οι εταιρείες μπορούν από ένα μόνο μοντέλο διαχείρισης -δεδομένων να οργανώσουν και να επεξεργαστούν διασκορπισμένες πληροφορίες με -γνώμονα τις ανάγκες των χρηστών με μεγαλύτερη ευκολία και αποδοτικότητα, χωρίς -την ανάγκη να γνωρίζουν τεχνικές λεπτομέρειες (όπως γλώσσες πρόσβασης, δομές -αποθήκευσης κα.). Τομείς οι οποίοι επωφελούνται από την εικονικοποίηση -δεδομένων είναι η λήψη αποφάσεων, η επιχειρηματική αναλυτική και η αξιολόγηση -των κινδύνων. +\begin{center} +\begin{figure}[!ht] +\centering + \includegraphics[width = .7\textwidth]{Figures/GeeksForGeeksParavirtualization/Paravirtualization.png} + \captionof{figure}{Παρα-εικονικοποίηση \cite{geeksforgeeksParavirtualizationDefinition}} + \label{fig:ParaVirtualization} +\end{figure} +\vspace*{-30pt} +\end{center} \clearpage -\begin{itemize} +\noindent Οι διαφορές της πλήρους εικονικοποίησης με την παρα-εικονικοποίηση με +βάση τον οργανισμό \citeauthor{geeksforgeeksParavirtualizationDefinition} +\cite{geeksforgeeksParavirtualizationDefinition} είναι οι εξής: - \item \textbf{Εικονικοποίηση Επιφάνειας Εργασίας}: +\begin{savenotes} % by the package footnote because footfullcite did not work inside a tabular +\selectfont +\begin{table}[!ht] +\caption{Διαφορές πλήρους εικονικοποίησης και παρα-εικονικοποίησης} +\renewcommand{\arraystretch}{1.5} +\centering +\newcolumntype{C}{>{\centering\arraybackslash}m{5.5cm}} +\textgreek{\begin{tabular}{||c|C|C||} +\hline - \begin{center} - \begin{figure}[!ht] - \centering - \includegraphics[width = .8\textwidth]{Figures/RedHat_Virtualization/redhat_desktop_virtualization.png} - \captionof{figure}{Εικονικοποίηση Επιφάνειας Εργασίας \cite{redhatVirtualization}} - \label{fig:desktopVirtualization} - \end{figure} - \vspace*{-30pt} - \end{center} +Κριτήρια & Πλήρης εικονικοποίηση & Παρα-εικονικοποίηση \\ [0.5ex] -\end{itemize} +\hline\hline -Με την εικονικοποίηση επιφάνειας εργασίας, δίνεται σε έναν κεντρικό διαχειριστή -η ικανότητα διαμοιρασμού προσομοιωμένων περιβαλλόντων εργασίας σε εκατοντάδες -φυσικές μηχανές ή συσκευές ταυτοχρόνως. Εν αντιθέσει με τα παραδοσιακά -περιβάλλοντα εργασίας που χρήζουν εγκατάστασης, διαμόρφωσης και ενημέρωσης σε -κάθε υπολογιστή, η εικονικοποίηση επιφάνειας εργασίας καθιστά δυνατή τη μαζική -διαμόρφωση, ενημέρωση και έλεγχο ασφαλείας σε όλα τα εικονικά περιβάλλοντα -εργασίας που παρέχονται από έναν μόνο διακομιστή. Καθ' αυτόν τον τρόπο, οι -επιχειρήσεις επιτρέπουν στους χρήστες να μπορούν να εργαστούν από οπουδήποτε -και με κάθε συσκευή ανεξαρτήτως του είδους ή του λειτουργικού συστήματός τους -\cite{desktopVirtualization}. +Βαθμός απομόνωσης & -\clearpage +Πλήρης απομόνωση της εικονικής μηχανής. & -\begin{itemize} +Μερική απομόνωση και χρήση API για αμεσότερη επικοινωνία. \\ - \item \textbf{Εικονικοποίηση Διακομιστών}: +\hline - \begin{center} - \begin{figure}[!ht] - \centering - \includegraphics[width = .8\textwidth]{Figures/RedHat_Virtualization/redhat_server_virtualization.png} - \captionof{figure}{Εικονικοποίηση Διακομιστών \cite{redhatVirtualization}} - \label{fig:serverVirtualization} - \end{figure} - \vspace*{-30pt} - \end{center} +Επίπεδο ασφάλειας & -\end{itemize} +Λιγότερο ασφαλής. & -Οι διακομιστές είναι υπολογιστές σχεδιασμένοι με σκοπό να επεξεργάζονται πολύ -καλά έναν μεγάλο όγκο συγκεκριμένων διεργασιών, ώστε οι κύριοι υπολογιστές μιας -επιχείρησης να μπορούν να δίνουν προτεραιότητα σε άλλες εργασίες. Με την -εικονικοποίηση διακομιστών αναφερόμαστε στην διαδικασία κατά την οποία ένας -φυσικός διακομιστής χωρίζεται σε πολλούς μικρότερους εικονικούς διακομιστές, με -απώτερο σκοπό την αποτελεσματικότερη αξιοποίηση των πόρων του. Αυτό είναι -απαραίτητο διότι προτιμάται για λόγους ευκολίας της διαχείρισής τους, κάθε -διακομιστής να είναι υπεύθυνος για μια μόνο διεργασία την φορά. Μετά την -κατάτμησή του, ενώ μπορεί να ακολουθείται η ίδια πρακτική, παύει το φυσικό -μηχάνημα να μένει με αχρησιμοποίητους πόρους και πρακτικά μπορεί το σύνολο τον -πόρων του να χρησιμοποιηθεί για την εξυπηρέτηση πολλαπλών λειτουργιών. Ο -ορισμός της εικονικοποίησης διακομιστών αναλύθηκε πιο λεπτομερώς και στο -\ref{virtualizationDefinition}. +Υπάρχει επίγνωση του εικονικού περιβάλλοντος και δε γίνεται εκκίνηση του BIOS +\cite{ParavirtualizationSecurity}, πράγμα που την καθιστά ασφαλέστερη. \\ -\clearpage +\hline -\begin{itemize} +Τρόπος λειτουργίας & - \item \textbf{Εικονικοποίηση Λειτουργικού Συστήματος}: +Χρήση δυαδικής μετάφρασης\footnote{\textgreek{Αυτό ισχύει στην περίπτωση +εικονικοποίησης υποβοηθούμενη από το λογισμικό.}}. & - \begin{center} - \begin{figure}[!ht] - \centering - \includegraphics[width = .8\textwidth]{Figures/RedHat_Virtualization/redhat_os_virtualization.png} - \captionof{figure}{Εικονικοποίηση Λειτουργικού Συστήματος \cite{redhatVirtualization}} - \label{fig:operatingSystemVirtualization} - \end{figure} - \vspace*{-30pt} - \end{center} +Χρήση υπερ-κλήσεων κατά την εκτέλεση. \\ -\end{itemize} +\hline -Η εικονικοποίηση λειτουργικού συστήματος είναι κάτι που συμβαίνει στον πυρήνα -(ΛΣ). Αποτελεί υποκατηγορία της εικονικοποίησης διακομιστών και -πραγματοποιείται σε επίπεδο λειτουργικού συστήματος. Ουσιαστικά αναφερόμαστε -στην διαδικασία της δοχειοποίησης λειτουργικών συστημάτων. Κατά την εφαρμογή -της, μπορούν να εκτελεστούν ταυτοχρόνως πολλαπλά λειτουργικά συστήματα μέσα σε -απομονωμένα εικονικά περιβάλλοντα, όπου το κάθε ένα από αυτά μοιράζεται τον -ίδιο πυρήνα με το λειτουργικό σύστημα φιλοξενίας. Μεγαλύτερη ανάλυση της -εικονικοποίησης σε επίπεδο λειτουργικού συστήματος πραγματοποιείται στο -\ref{osVirtualization}. +Απόδοση & -\clearpage +Πιο αργές ταχύτητες\footnote{\textgreek{Με βάση την VMware, η απόδοση της +παρα-εικονικοποίησης είναι καλύτερη υπό ορισμένες περιπτώσεις, ενώ η +πλήρης εικονικοποίηση με χρήση δυαδικής μετάφρασης παρέχει καλύτερη +απόδοση από την πρώτη γενιά εικονικοποίησης υποβοηθούμενη από το υλικό.}} +\cite{ParavirtualizationVmware}. & -\begin{itemize} +Γρηγορότερη εκτέλεση. \\ - \item \textbf{Εικονικοποίηση Λειτουργιών Δικτύου}: +\hline - \begin{center} - \begin{figure}[!ht] - \centering - \includegraphics[width = .7\textwidth]{Figures/RedHat_Virtualization/redhat_network_function_virtualization.png} - \captionof{figure}{Εικονικοποίηση Λειτουργιών Δικτύου \cite{redhatVirtualization}} - \label{fig:networkFunctionVirtualization} - \end{figure} - \vspace*{-30pt} - \end{center} +Μεταφερσιμότητα & -\end{itemize} +Μεγαλύτερη συμβατότητα και μεταφερσιμότητα. & -Η εικονικοποίηση λειτουργιών δικτύου (Network Functions Virtualization - NFV) -διαχωρίζει τις βασικές λειτουργίες ενός δικτύου (όπως ο διαμοιρασμός αρχείων, -και η διαμόρφωση IP) από το φυσικό υλικό (που συνήθως χρησιμοποιούνταν για την -εκτέλεσή τους), ώστε να μπορούν να διανεμηθούν σε διάφορα περιβάλλοντα. Από τη -στιγμή που οι λειτουργίες λογισμικού του δικτύου είναι ανεξάρτητες από τα -φυσικά μηχανήματα στα οποία εκτελούνται, αυτές μπορούν να πακεταριστούν και να -κατανέμονται σε ξεχωριστά περιβάλλοντα. Η εικονικοποίηση των λειτουργιών -δικτύων μειώνει τον αριθμό των φυσικών εξαρτημάτων, όπως οι μεταγωγείς, -δρομολογητές, διακομιστές, καλώδια και κόμβοι, που απαιτούνται για τη -δημιουργία πολλαπλών, ανεξάρτητων δικτύων και είναι ιδιαίτερα δημοφιλής στον -κλάδο των τηλεπικοινωνιών. Παραδοσιακά, οι λειτουργίες δικτύου εκτελούνταν σε -ιδιόκτητο υλικό συγκεκριμένου σκοπού και επομένως ήταν απαραίτητο να -πραγματοποιηθεί αγορά, ρύθμιση και συντήρηση του κάθε φυσικού εξαρτήματος. Με -την αύξηση όμως της δημοτικότητας των τεχνολογιών εικονικοποίησης, άρχισε να -γίνεται πιο δημοφιλής και η πρακτική πακεταρίσματος των λειτουργιών των -εξαρτημάτων αυτών σε διακομιστές κοινής χρήσης (commodity servers). Το -αποτέλεσμα αυτού, ήταν η απόκτηση της δυνατότητας εκτέλεσης των λειτουργιών -δικτύου μιας επιχείρησης σε τυπικούς διακομιστές γενικού σκοπού και κατά -προέκταση, η αντικατάσταση κάθε ξεχωριστού φυσικού μηχανήματος με ένα -αντίστοιχο εικονικό εκτελούμενο μέσα από μια εικονική μηχανή \cite{redhatNFV}. +Λόγω της αρχιτεκτονικής της είναι δυσκολότερη η μεταφορά εικονικών μηχανών (από +έναν φυσικό διακομιστή σε έναν άλλο) \\ -\clearpage +\hline -\begin{itemize} +Ευκολία χρήσης & - \item \textbf{Εικονικοποίηση Μνήμης}: +Υποστήριξη όλων των συστημάτων χωρίς την απαίτηση τροποποιήσεων. & - \begin{center} - \begin{figure}[!ht] - \centering - \includegraphics[width = .8\textwidth]{Figures/VMWARE_Virtualization/vmware_memory_virtualization.png} - \captionof{figure}{Εικονικοποίηση Μνήμης \cite{vmwareMemoryVirtualization}} - \label{fig:memoryVirtualization} - \end{figure} - \vspace*{-30pt} - \end{center} +Απαιτείται τροποποίηση του φιλοξενούμενου λειτουργικού συστήματος για να κάνει +χρήση υπερ-κλήσεων. \\ -\end{itemize} - -Η εικονικοποίηση μνήμης αποτελεί ένα κομμάτι της ευρύτερης έννοιας της -εικονικοποίησης πόρων \cite{hostitsmartMemoryVirtualization}. Συγκεκριμένα, -είναι μια τεχνική κατά την οποία δύναται να διαχειριστούμε με έναν πιο -αποδοτικό τρόπο την φυσική μνήμη (RAM) που χρησιμοποιείται στα υπολογιστικά μας -συστήματα. Αυτό συμβαίνει διότι στην βασικότερη μορφή της, η εικονικοποίηση -μνήμης εμφανίζεται ως εικονική μνήμη ή όπως η μνήμη swap σε διακομιστές και -σταθμούς εργασίας \cite{petriMemoryVirtualization}. Δηλαδή, ως επιπρόσθετη -μνήμη την οποία το σύστημα εκλαμβάνει ως πραγματική και μπορεί να την -χρησιμοποιήσει. Για να επιτευχθεί αυτό, μέσω του υπερ-επόπτη πραγματοποιείται -αντιστοίχιση σελίδων φυσικής μνήμης του φιλοξενούμενου λειτουργικού συστήματος -στις σελίδες φυσικής μνήμης της υποκείμενης μηχανής. Καθ' αυτόν τον τρόπο, κάθε -εικονική μηχανή βλέπει έναν συνεχόμενο χώρο διευθύνσεων μνήμης που δύναται να -χρησιμοποιήσει \cite{vmwareMemoryVirtualization}. Ως αποτέλεσμα, επιτυγχάνεται -εν γένει υψηλότερη αξιοποίηση της μνήμης και η δυνατότητα διαμοιρασμού μιας -κοινής δεξαμενής μνήμης ακόμα και σε κατανεμημένα συστήματα, παρακάμπτοντας -τους περιορισμούς της φυσικής μνήμης \cite{codingninjasMemoryVirtualization}. - -\clearpage - -\begin{itemize} - - \item \textbf{Εικονικοποίηση Αποθήκευσης}: - - \begin{center} - \begin{figure}[!ht] - \centering - \includegraphics[width = .5\textwidth]{Figures/UnixArena_Virtualization/unixarena_storage_virtualization.png} - \captionof{figure}{Εικονικοποίηση Αποθήκευσης \cite{unixarenaVirtualization}} - \label{fig:storageVirtualization} - \end{figure} - \vspace*{-30pt} - \end{center} - -\end{itemize} - -Ένα ακόμα κομμάτι της ευρύτερης έννοιας της εικονικοποίησης πόρων είναι και η -εικονικοποίηση αποθήκευσης. Συγκεκριμένα, ο όρος εικονικοποίηση αποθήκευσης -αναφέρεται στην πρακτική της συγκέντρωσης φυσικού αποθηκευτικού χώρου από -πολλαπλές συσκευές αποθήκευσης σε μια φαινομενικά ενιαία, εικονική συσκευή -\cite{ubackupStorageVirtualization}. Παρομοίως με την εικονικοποίηση μνήμης, -αυτό είναι κάτι που θα επιτρέψει την υψηλότερη αξιοποίηση αποθηκευτικού χώρου -(πχ. ενός δίσκου), θα επιφέρει μεγαλύτερη ευελιξία στον τομέα της αποθήκευσης -και επιπλέον, θα αποτελέσει ένα πιο διαχειρίσιμο μοντέλο χώρου αποθήκευσης σε -σχέση με το παραδοσιακό, όπου κάθε υπολογιστής έχει πρόσβαση μονάχα στον δικό -του δίσκο. - -Προκειμένου να γίνει πράξη, απαιτείται αναλόγως την μέθοδο εικονικοποίησης και -τον τύπο της, είτε να χρησιμοποιηθεί ένας αλγόριθμος για να εντοπίσει δυναμικά -τα δεδομένα είτε να δημιουργηθεί ένας χάρτης αντιστοίχισής τους χρησιμοποιώντας -μεταδεδομένα \cite{cloudinfraStorageVirtualization}. Αφότου γίνει αυτό, τα -δεδομένα πλέον αποθηκεύονται σε ένα αρχείο και οι συστοιχίες δίσκων -τοποθετούνται μέσα σε μια εικονική δεξαμενή. Έπειτα, κάθε αίτημα ανάγνωσης και -εγγραφής από τις εφαρμογές φιλτράρεται και δύναται, πχ. έμμεσα μέσω των -αντιστοιχιών, η δυνατότητα εύρεσης και αποθήκευσης δεδομένων. - -\clearpage - -\begin{itemize} - - \item \textbf{Εικονικοποίηση Εφαρμογών}: - - \begin{center} - \begin{figure}[!ht] - \centering - \includegraphics[width = .8\textwidth]{Figures/TutorialsPoint_Virtualization/tutorialspoint_application_virtualization.jpg} - \captionof{figure}{Εικονικοποίηση Εφαρμογών \cite{tutorialsPointVirtualization}} - \label{fig:applicationVirtualization} - \end{figure} - \vspace*{-30pt} - \end{center} - -\end{itemize} - -Όπως και η εικονικοποίηση λειτουργικού συστήματος, έτσι και η εικονικοποίηση -εφαρμογών αποτελεί υποκατηγορία της εικονικοποίησης διακομιστών και υπάγεται -στην διαδικασία της δοχειοποίησης. Το επιθυμητό αποτέλεσμα της εικονικοποίησης -εφαρμογών είναι ο διαχωρισμός των βιβλιοθηκών και εξαρτήσεων τους από το -περιβάλλον στο οποίο εκτελούνται μέσω της δημιουργίας δοχείων. Στα δοχεία αυτά, -εικονικοποιούνται οι απαραίτητοι υπολογιστικοί πόροι όπως το λειτουργικό -σύστημα, η μνήμη και η κεντρική μονάδα επεξεργασίας -\cite{geeksforgeeksApplicationVirtualization}, κάνοντας χρήση των διαθέσιμων -μηχανισμών απομόνωσης του πυρήνα του λειτουργικού συστήματος. Περισσότερες -λεπτομέρειες για τον τρόπο κατά τον οποίο επιτυγχάνεται αυτό, παρουσιάζονται -στο \ref{osVirtualization}. - -\clearpage +\hline +\end{tabular}} +\label{table:virtualizationTypesDifferences} +\renewcommand{\arraystretch}{1} +\end{table} +\end{savenotes} \subsection{Πλεονεκτήματα της εικονικοποίησης} \label{virtualizationAdvantages} @@ -928,6 +1096,8 @@ off). Το τελευταίο είναι χρήσιμο κυρίως όταν η \begin{itemize} +\clearpage + \item \textbf{Αποδοτικότητα πόρων}: Η χρήση εικονικοποίησης συνεπάγεται την μείωση του αριθμού των φυσικών @@ -975,175 +1145,6 @@ off). Το τελευταίο είναι χρήσιμο κυρίως όταν η \end{itemize} -\subsection{Παρα-εικονικοποίηση} \label{paraVirtualization} - -Όταν αναφερόμαστε στην εικονικοποίηση συνήθως μιλάμε για την πιο συνηθισμένη -μορφή της, η οποία είναι η πλήρης εικονικοποίηση. Με την πάροδο του χρόνου και -την αύξηση της δημοτικότητας της εικονικοποίησης, αναπτύχθηκαν πολλοί -υπερ-επόπτες που μπορεί να διαφέρουν όχι μόνο στα χαρακτηριστικά τους αλλά και -στις διάφορες τεχνικές που χρησιμοποιούν για να κάνουν την εικονικοποίηση -πραγματικότητα. Μια από αυτές ονομάζεται παρα-εικονικοποίηση -(paravirtualization) \cite{suseParavirtualizationDefinition}. - -Κάθε εικονική μηχανή απαιτεί ένα συγκεκριμένο ποσοστό χρήσης υπολογιστικών -πόρων του φυσικού διακομιστή για να εκτελείται. Μέσα σε αυτό το ποσοστό, -συμπεριλαμβάνεται και η επιβάρυνση που εισάγει η συνεχής μετάφραση εικονικών σε -φυσικούς πόρους. Έχοντας υπόψιν πως κάθε φυσικός διακομιστής διαθέτει -πεπερασμένους πόρους, με την πλήρη εικονικοποίηση επιβάλλεται ένα όριο στον -αριθμό των εικονικών μηχανών που μπορεί αυτός να υποστηρίξει. Επιπροσθέτως, -προκύπτουν και προβλήματα καθυστέρησης αφού η διαδικασία της μετάφρασης απαιτεί -κάποιο χρόνο για να διεκπεραιωθεί. - -Επομένως, η πλήρης εικονικοποίηση περιορίζει σημαντικά τον αριθμό των εικονικών -μηχανών που δύναται ένας διακομιστής να εκτελέσει παράλληλα, όπως επίσης και τα -είδη εφαρμογών που μπορούν να εκτελεστούν σε μια εικονική μηχανή (εφόσον η -ταχύτητα εκτέλεσης τους παίζει σημαντικό ρόλο στην ευχρηστία τους). Μερικοί -τομείς που επωφελούνται από την παρα-εικονικοποίηση είναι η χρήση λογισμικών -που επιτρέπουν την ανάκαμψη από καταστροφές, την μετανάστευση δεδομένων μεταξύ -λειτουργικών συστημάτων \cite{insightsForProfessionalsParavirtualization} ή -ακόμα και λογισμικά ενσωματωμένων συστημάτων αυτοκινήτων -\cite{blackberryParavirtualization}. - -Η παρα-εικονικοποίηση είναι μια τεχνική εικονικοποίησης που αναπτύχθηκε -προκειμένου να ξεπεραστούν τα προαναφερόμενα προβλήματα επιδόσεων που έρχονται -με την χρήση της πλήρους εικονικοποίησης. Κατά την χρήση της, το φιλοξενούμενο -λειτουργικό σύστημα δεν είναι πλήρως απομονωμένο από το υλικό αλλά απομονώνεται -μερικώς \cite{serverWatchParavirtualization} και έχει άμεση επικοινωνία με -αυτό. Υπάρχει δηλαδή επίγνωση της εικονικοποίησης από μεριάς του ΛΣ των -εικονικών μηχανών και αξιοποίηση της, μέσω της χρήσης υπερ-κλήσεων προς τον -υπερ-επόπτη. Οι κλήσεις αυτές, επιτρέπουν σε κάθε ΛΣ να ζητάει πόρους κατά -παραγγελία και να αναθέτει την εκτέλεση διεργασιών του απευθείας στο υλικό. Για -να μπορέσει να επιτευχθεί αυτό, απαιτείται η τροποποίηση του φιλοξενούμενου -λειτουργικού συστήματος, η οποία θα του επιτρέπει την υλοποίηση ενός ειδικού -API, ώστε να μπορεί να κάνει χρήση των υπερ-κλήσεων -\cite{servermaniaParavirtualization}, ενώ επιβάλλεται να υποστηρίζεται και από -τον υπερ-επόπτη η κατανόησή τους. - -Παρ' όλα τα πλεονεκτήματα που παρέχει η χρήση της παρα-εικονικοποίησης, -υπάρχουν και μερικά ζητήματα που πρέπει να ληφθούν υπόψιν. Εξαιτίας της ανάγκης -τροποποίησης του λειτουργικού συστήματος των φιλοξενούμενων λειτουργικών -συστημάτων, αυτά καθίστανται λιγότερο φορητά σε σχέση με την πλήρη -εικονικοποίηση, αφού τροποποιούνται για την υποστήριξη συγκεκριμένου υλικού -αντί ενός υπερ-επόπτη \cite{blackberryParavirtualization}. Ταυτοχρόνως, η στενή -εξάρτηση μεταξύ του υπερ-επόπτη και των φιλοξενούμενων ΛΣ μπορεί να διακοπεί -από τις ενημερώσεις του λειτουργικού συστήματος -\cite{insightsForProfessionalsParavirtualization}, κάνοντας την -παρα-εικονικοποίηση λιγότερο αξιόπιστη. - -Στο Σχήμα \ref{fig:FullVirtualization} -\cite{geeksforgeeksParavirtualizationDefinition} παρουσιάζεται η αρχιτεκτονική -της πλήρους εικονικοποίησης όπου το φιλοξενούμενο λειτουργικό σύστημα (της -εικονικής μηχανής) επιβάλλεται να περάσει τα αιτήματά του (πρόσβασης πόρων) -μέσω του υπερ-επόπτη. - -\begin{center} -\begin{figure}[!ht] -\centering - \includegraphics[width = .8\textwidth]{Figures/GeeksForGeeksParavirtualization/Full-Virualization.png} - \captionof{figure}{Πλήρης εικονικοποίηση \cite{geeksforgeeksParavirtualizationDefinition}} - \label{fig:FullVirtualization} -\end{figure} -\vspace*{-30pt} -\end{center} - -\clearpage - -Αντιθέτως, στο Σχήμα \ref{fig:ParaVirtualization} όπου και φαίνεται η -αρχιτεκτονική της παρα-εικονικοποίησης, βλέπουμε πως μέσω των υπερ-κλήσεων, όλα -τα αιτήματα προορίζονται στη στρώση εικονικοποίησης και από εκεί στο κύριο -σύστημα (χωρίς την ανάγκη κάποιας επεξεργασίας ή μετάφρασης). - -\begin{center} -\begin{figure}[!ht] -\centering - \includegraphics[width = .8\textwidth]{Figures/GeeksForGeeksParavirtualization/Paravirtualization.png} - \captionof{figure}{Παρα-εικονικοποίηση \cite{geeksforgeeksParavirtualizationDefinition}} - \label{fig:ParaVirtualization} -\end{figure} -\vspace*{-30pt} -\end{center} - -\clearpage - -\noindent Οι διαφορές της πλήρους εικονικοποίησης με την παρα-εικονικοποίηση με -βάση τον οργανισμό \citeauthor{geeksforgeeksParavirtualizationDefinition} -\cite{geeksforgeeksParavirtualizationDefinition} είναι οι εξής: - -\begin{savenotes} % by the package footnote because footfullcite did not work inside a tabular -\selectfont -\begin{table}[!ht] -\caption{Διαφορές πλήρους εικονικοποίησης και παρα-εικονικοποίησης} -\renewcommand{\arraystretch}{1.5} -\centering -\newcolumntype{C}{>{\centering\arraybackslash}m{6cm}} -\textgreek{\begin{tabular}{||c|C|C||} -\hline - -Νούμερο & Πλήρης εικονικοποίηση & Παρα-εικονικοποίηση \\ [0.5ex] - -\hline\hline - -1 & - -Πλήρης απομόνωση της εικονικής μηχανής. & - -Μερική απομόνωση και χρήση API για αμεσότερη επικοινωνία. \\ - -\hline - -2 & - -Λιγότερο ασφαλής. & - -Υπάρχει επίγνωση του εικονικού περιβάλλοντος και δε γίνεται εκκίνηση του BIOS -\cite{ParavirtualizationSecurity}, πράγμα που την καθιστά ασφαλέστερη. \\ - -\hline - -3 & - -Χρήση δυαδικής μετάφρασης\footnote{\textgreek{Αυτό ισχύει στην περίπτωση -εικονικοποίησης υποβοηθούμενη από το λογισμικό.}}. & - -Χρήση υπερ-κλήσεων κατά την εκτέλεση. \\ - -\hline - -4 & - -Πιο αργές ταχύτητες\footnote{\textgreek{Με βάση την VMware, η απόδοση της -παρα-εικονικοποίησης είναι καλύτερη υπό ορισμένες περιπτώσεις, ενώ η -πλήρης εικονικοποίηση με χρήση δυαδικής μετάφρασης παρέχει καλύτερη -απόδοση από την πρώτη γενιά εικονικοποίησης υποβοηθούμενη από το υλικό.}} -\cite{ParavirtualizationVmware}. & - -Γρηγορότερη εκτέλεση. \\ - -\hline - -5 & - -Μεγαλύτερη συμβατότητα και μεταφερσιμότητα. & - -Λόγω της αρχιτεκτονικής της είναι δυσκολότερη η μεταφορά εικονικών μηχανών (από -έναν φυσικό διακομιστή σε έναν άλλο) \\ - -\hline - -6 & - -Υποστήριξη όλων των συστημάτων χωρίς την απαίτηση τροποποιήσεων. & - -Απαιτείται τροποποίηση του φιλοξενούμενου λειτουργικού συστήματος για να κάνει -χρήση υπερ-κλήσεων. \\ - -\hline -\end{tabular}} -\label{table:virtualizationTypesDifferences} -\renewcommand{\arraystretch}{1} -\end{table} -\end{savenotes} - \section{Ασφάλεια στην εικονικοποίηση} \label{virtualizationSecurity} Η χρήση της εικονικοποίησης παρέχει αρκετά εγγενή οφέλη ασφαλείας με την μορφή @@ -1171,11 +1172,11 @@ API, ώστε να μπορεί να κάνει χρήση των υπερ-κλ να εντοπιστεί λόγω της ικανότητας του υπερ-επόπτη να επιτρέπει στις εικονικές μηχανές τη μεταξύ τους επικοινωνία χωρίς την αλληλεπίδραση με το φυσικό δίκτυο. Τέλος, η ακεραιότητα του συστήματος εξαρτάται άμεσα και από τον τύπο του -υπερ-επόπτη. Αυτό συμβαίνει διότι για υπερ-επόπτες τύπου 2, υπάρχει πολλές -φορές η ανάγκη διαμοιρασμού δεδομένων μεταξύ των εικονικών μηχανών και του ΛΣ -φιλοξενίας. Επομένως, η παραβίαση ενός υπερ-επόπτη τύπου 2 μπορεί δυνητικά να -οδηγήσει στην εξάπλωση κακόβουλου λογισμικού και να κινδυνεύσει όλο το σύστημα -\cite{techtargetHypervisorSecurity}. +υπερ-επόπτη. Αυτό συμβαίνει διότι ειδικότερα για υπερ-επόπτες τύπου 2, υπάρχει +πολλές φορές η ανάγκη διαμοιρασμού δεδομένων μεταξύ των εικονικών μηχανών και +του ΛΣ φιλοξενίας. Επομένως, η παραβίαση ενός υπερ-επόπτη τύπου 2 μπορεί +δυνητικά να οδηγήσει στην εξάπλωση κακόβουλου λογισμικού και να κινδυνεύσει όλο +το σύστημα \cite{techtargetHypervisorSecurity}. \subsection{Απειλές στην εικονικοποίηση} \label{virtualizationThreats} @@ -1284,8 +1285,9 @@ Cross-site scripting (XSS), έγχυσης SQL (SQL injection), χειραγώγ εκμετάλλευσης μη ασφαλούς ρύθμισης, θέτοντας έτσι σε κίνδυνο ευαίσθητες πληροφορίες και δεδομένα των επιχειρήσεων. Επιπλέον, επειδή όλα τα δίκτυα είναι επιρρεπή σε επιθέσεις αν δεν έχουν ληφθεί τα κατάλληλα μέτρα προστασίας, ένας -πάροχος πρέπει να μπορεί να προστατευτεί από επιθέσεις, όπως η κατασκοπεία και -διείσδυση δικτύου (network penetration) \cite{arif2015virtualization}. +πάροχος πρέπει να μπορεί να προστατευτεί από επιθέσεις, όπως η κατασκοπεία +(surveillance) και διείσδυση δικτύου (network penetration) +\cite{arif2015virtualization}. \subsubsection{Απειλές για τον πάροχο νέφους μέσω εικονικών μηχανών} \label{cloudProviderAttackOverVMs} @@ -1304,9 +1306,10 @@ Cross-site scripting (XSS), έγχυσης SQL (SQL injection), χειραγώγ απαιτείται να έχει λάβει τα κατάλληλα μέτρα προστασίας έναντι μολυσμένων ή κακόβουλων εικονικών μηχανών. -Με βάση την ανάλυση που έγινε στο \cite{virtualizationSecurity}, σχετικά με -απειλές από εικονική μηχανή σε εικονική μηχανή, οι πιο συνηθισμένες είναι η -επίθεση πλευρικού καναλιού (cross VM side channel attack), οι επιθέσεις βάσει +Με βάση την ανάλυση που έγινε στο \cite{virtualizationSecurity}, υπάρχουν +διάφορες απειλές που εκμεταλλεύονται ευπάθειες των εικονικών μηχανών ή του +υποκείμενου υπερ-επόπτη τους. Από αυτές, οι πιο συνηθισμένες είναι η επίθεση +πλευρικού καναλιού (cross VM side channel attack), οι επιθέσεις βάσει χρονοπρογραμματιστή (Scheduler based attacks) και οι επιθέσεις που στοχεύουν τρωτότητες της διαδικασίας μετανάστευσης και επαναφοράς εικονικών μηχανών (VM migration and rollback attacks). Από την άλλη, όσον αφορά τις απειλές από @@ -1316,6 +1319,110 @@ migration and rollback attacks). Από την άλλη, όσον αφορά τ \citeauthor{Aalam_2021} \cite{Aalam_2021}, είναι η κλοπή εικονικών μηχανών και η τροποποίηση του υπερ-επόπτη. +\begin{center} +\begin{figure}[!ht] +\centering + \includegraphics[width = \textwidth]{Figures/ThreatsLitchfield/threats.png} + \captionof{figure}{Απειλές στην εικονικοποίηση \cite{litchfield2016virtualization}} + \label{fig:virtualizationThreats} +\end{figure} +\vspace*{-30pt} +\end{center} + +\noindent Ακολουθεί συνοπτική επεξήγηση των παραπάνω απειλών: + +\begin{itemize} + + \item \textbf{Επίθεση πλευρικού καναλιού}: + + Κατά την επίθεση πλευρικού καναλιού, ο επιτιθέμενος, έχοντας πρόσβαση σε + μια εικονική μηχανή, προσπαθεί να ανακτήσει πληροφορίες από άλλες εικονικές + μηχανές του ίδιου φυσικού διακομιστή. Αυτό μπορεί να επιτευχθεί με την + παρακολούθηση και ανάλυση της χρήσης των πόρων του φυσικού διακομιστή, όπως + της μνήμης και του επεξεργαστή. Μέσα στις πληροφορίες που μπορεί να + ανακτηθούν μπορεί να βρίσκονται και ιδιωτικά κλειδιά κρυπτογράφησης, τα + οποία μπορούν αργότερα να χρησιμοποιηθούν για πραγματοποίηση επιθέσεων + ενδιάμεσου και παρακολούθησης δικτύου, όπως αναφέρεται στο + \cite{litchfield2016virtualization} μέσω του \cite{zhang2012crossvmkeys}. + + \item \textbf{Επίθεση βάσει χρονοπρογραμματιστή}: + + Σε μια επίθεση βάσει χρονοπρογραμματιστή, ο επιτιθέμενος προσπαθεί να + επηρεάσει τον χρονοπρογραμματιστή του υπερ-επόπτη προκειμένου να + καταναλώσει περισσότερο χρόνο επεξεργασίας στον επεξεργαστή του φυσικού + μηχανήματος, εισάγοντας διεργασίες με μεγαλύτερη προτεραιότητα. Έτσι, + μπορεί να επιτύχει την αποκλειστική χρήση του επεξεργαστή και να προκαλέσει + απώλεια απόδοσης στις υπόλοιπες εικονικές μηχανές. + + \item \textbf{Επιθέσεις κατά της διαδικασίας μετανάστευσης και επαναφοράς}: + + Στις επιθέσεις που στοχεύουν τη διαδικασία μετανάστευσης και επαναφοράς + εικονικών μηχανών, ο επιτιθέμενος προσπαθεί να επηρεάσει την + εμπιστευτικότητα των δεδομένων μιας εικονικής μηχανής. Ανά πάσα στιγμή, + ένας υπερ-επόπτης μπορεί να δημιουργεί στιγμιότυπα της κατάστασης μιας + εικονικής μηχανής προκειμένου να συνεχίσει την εκτέλεση σε αυτά, χωρίς να + το γνωρίζει ο χρήστης. Έτσι, δεδομένου ότι ένα κομμάτι του ιστορικού + εκτέλεσής της χάνεται, ο επιτιθέμενος προσπαθεί να εκμεταλλευτεί αυτό το + γεγονός για να αποκτήσει πρόσβαση σε ευαίσθητες πληροφορίες μιας εικονικής + μηχανής ενός παραβιασμένου υπερ-επόπτη (η οποία δεν εκτελείται επί της + παρούσης). Μπορεί για παράδειγμα να παρακάμψει κάποιους ελέγχους ασφαλείας + που κανονικά θα ήταν προγραμματισμένοι για την εκάστοτε εικονική μηχανή, ή + ακόμα και να αναιρέσει ορισμένες ενημερώσεις ασφαλείας της + \cite{vmrollbackattack}. + + \item \textbf{Μεταπήδηση εικονικής μηχανής}: + + Η μεταπήδηση εικονικής μηχανής, είναι μια μέθοδος επίθεσης κατά την οποία + ένας επιτιθέμενος, έχοντας παραβιάσει μια εικονική μηχανή μπορεί να + μεταπηδήσει από εκείνη σε μια άλλη \cite{technopediaVmHopping}. Αυτό + ευνοείται από το γεγονός ότι πολλές φορές, οι εικονικές μηχανές συνυπάρχουν + με άλλες στον ίδιο υπολογιστή. Έτσι, ένας επιτιθέμενος μπορεί να + εκμεταλλευτεί αδυναμίες στην δυνατότητα του υπερ-επόπτη να επιτρέπει την + πρόσβαση σε μια εικονική μηχανή από μια άλλη. Η επίθεση αυτή βασίζεται στην + γνώση πληροφοριών, όπως η διεύθυνση IP μιας εικονικής μηχανής. Έπειτα, αφού + μια εικονική μηχανή παραβιαστεί, δύναται ο επιτιθέμενος να διαχειριστεί την + ροή της δικτυακής κυκλοφορίας της, να δημιουργήσει άρνηση υπηρεσιών και να + τροποποιήσει τα αρχεία της, αλλοιώνοντας το αρχείο διαμόρφωσής της. + +\clearpage + + \item \textbf{Απόδραση εικονικής μηχανής}: + + Στις επιθέσεις απόδρασης εικονικής μηχανής, ένας επιτιθέμενος επιχειρεί να + χρησιμοποιήσει κακόβουλες εφαρμογές για να αποκτήσει πρόσβαση στον + υπερ-επόπτη. Αυτό μπορεί να επιτευχεθεί με την εκμετάλλευση αδυναμιών της + απομόνωσης που προσφέρει ο υπερ-επόπτης στις εικονικές μηχανές και ως + αποτέλεσμα, να μπορέσει να ξεφύγει από τα όρια της εικονικής μηχανής και να + επηρεάσει όχι μόνο τις υπόλοιπες εικονικές μηχανές αλλά και το κύριο + σύστημα στο οποίο αυτές στεγάζονται \cite{abusaimeh2020virtual}. + + \item \textbf{Κλοπή εικονικής μηχανής}: + + Η κλοπή εικονικών μηχανών επιτυγχάνεται μετά από παραβίαση του υπερ-επόπτη. + Ένα γεγονός που μπορεί να πραγματοποιηθεί δίχως την ανάγκη φυσικής + πρόσβασης στο υποκείμενο μηχάνημα. Τα δεδομένα μιας εικονικής μηχανής + αποθηκεύονται σε έναν εικονικό δίσκο με την μορφή μιας εικόνας μηχανής. + Αυτό συμβαίνει για να μπορεί ένας υπερ-επόπτης να δημιουργεί αντίγραφα + ασφαλείας των εικονικών μηχανών και να μπορούν αυτά έπειτα να μεταφερθούν + σε ένα διαφορετικό φυσικό μηχάνημα. Ένας επιτιθέμενος, έχοντας πρόσβαση + στον υπερ-επόπτη, μπορεί να αντιγράψει αυτές τις εικόνες εικονικών μηχανών + στο δικό του μηχάνημα μέσω του διαδικτύου και έχοντας αρκετό χρόνο στην + διάθεσή του, να καταφέρει αργότερα να ανακτήσει ευαίσθητες πληροφορίες μέσα + από αυτές. + + \item \textbf{Τροποποίηση του υπερ-επόπτη}: + + Η τροποποίηση του υπερ-επόπτη πραγματοποιείται με την χρήση rootkit που + βασίζονται στις εικονικές μηχανές (VMBR - Virtual Machine Based Rootkis). + Πρόκειται για ένα κακόβουλο λογισμικό, το οποίο δύσκολα ανιχνεύεται. Με την + χρήση ενός VMBR μπορεί ένας κακόβουλος χρήστης να παραβιάσει το + φιλοξενούμενο ΛΣ της εικονικής μηχανής και έπειτα να συνεχίσει στην + παραβίαση του υπερ-επόπτη ή να παραβιάσει κατευθείαν τον υπερ-επόπτη με + σκοπό να αποκτήσει απόλυτο έλεγχο του συστήματος στο οποίο αυτός + εκτελείται. + +\end{itemize} + \clearpage \subsubsection{Κατηγοριοποίηση απειλών στην εικονικοποίηση} \label{virtualizationThreatsCategorization} @@ -1325,113 +1432,52 @@ migration and rollback attacks). Από την άλλη, όσον αφορά τ \cite{virtualizationSecurity} ως εξής: \begin{table}[!ht] -\caption{Κατηγοριοποίηση απειλών στην εικονικοποίηση} +\caption{Κατηγοριοποίηση απειλών και στην εικονικοποίηση} \renewcommand{\arraystretch}{1.3} \aboverulesep=-0.1ex \belowrulesep=-0.1ex \centering -\newcolumntype{C}{>{\centering\arraybackslash}m{6cm}} +\newcolumntype{C}{>{\centering\arraybackslash}m{7cm}} \textgreek{\begin{tabular}{||C|C||} \hline - Κατηγορία & Απειλές και πιθανά ευπαθή σημεία \\ \hline\hline -\multirow{11}{*}{\hfil Απειλές Δικτύου} & XML Signature Wrapping Attacks \\ \cmidrule(lr){2-2} - & Flooding Attacks (DDoS) \\ \cmidrule(lr){2-2} - & Metadata Spoofing Attacks \\ \cmidrule(lr){2-2} - & Insecure Web Apps \& APIs \\ \cmidrule(lr){2-2} - & Cross Site Scripting Attacks \\ \cmidrule(lr){2-2} - & Port scanning \\ \cmidrule(lr){2-2} - & Botnets \\ \cmidrule(lr){2-2} - & Spoofing attacks \\ \cmidrule(lr){2-2} - & DNS attacks \\ \cmidrule(lr){2-2} - & Sniffer attacks \\ \cmidrule(lr){2-2} - & Denial of Service (DoS) \\ \hline -\multirow{9}{*}{\hfil Απειλές για τον Πάροχο} & Sniffing Attacks \\ \cmidrule(lr){2-2} - & Spoofing Attacks \\ \cmidrule(lr){2-2} - & Denial of Service Attacks \\ \cmidrule(lr){2-2} - & cross VM side channel attacks \\ \cmidrule(lr){2-2} - & VM scheduler based attacks \\ \cmidrule(lr){2-2} - & VM Hopping \\ \cmidrule(lr){2-2} - & VM Escape \\ \cmidrule(lr){2-2} - & Dynamic Data Updates \\ \cmidrule(lr){2-2} - & Data scavenging \\ \hline -\multirow{6}{*}{\hfil Απειλές για τις Εφαρμογές} & Malware injection \\ \cmidrule(lr){2-2} - & Steganography attacks \\ \cmidrule(lr){2-2} - & Web services attacks \\ \cmidrule(lr){2-2} - & Protocol-based attacks \\ \cmidrule(lr){2-2} - & Security Misconfigurations \\ \cmidrule(lr){2-2} - & SQL Injection Attacks \\ \hline + Κατηγορία & Απειλές/Επιθέσεις και πιθανά ευπαθή σημεία \\ \hline\hline +\multirow{11}{*}{\hfil Απειλές/Επιθέσεις Δικτύου} & XML Signature Wrapping Attacks \\ \cmidrule(lr){2-2} + & Flooding Attacks (DDoS) \\ \cmidrule(lr){2-2} + & Metadata Spoofing Attacks \\ \cmidrule(lr){2-2} + & Insecure Web Apps \& APIs \\ \cmidrule(lr){2-2} + & Cross Site Scripting Attacks (XSS) \\ \cmidrule(lr){2-2} + & Port Scanning \\ \cmidrule(lr){2-2} + & Botnets \\ \cmidrule(lr){2-2} + & Spoofing Attacks \\ \cmidrule(lr){2-2} + & DNS Attacks \\ \cmidrule(lr){2-2} + & Sniffer Attacks \\ \cmidrule(lr){2-2} + & Denial of Service (DoS) \\ \hline +\multirow{9}{*}{\hfil Απειλές/Επιθέσεις για τον Πάροχο} & Sniffing Attacks \\ \cmidrule(lr){2-2} + & Spoofing Attacks \\ \cmidrule(lr){2-2} + & Denial of Service (DoS) \\ \cmidrule(lr){2-2} + & Cross VM Side Channel Attacks \\ \cmidrule(lr){2-2} + & VM Scheduler Based Attacks \\ \cmidrule(lr){2-2} + & VM Hopping \\ \cmidrule(lr){2-2} + & VM Escape \\ \cmidrule(lr){2-2} + & Dynamic Data Updates \\ \cmidrule(lr){2-2} + & Data Scavenging \\ \hline +\multirow{6}{*}{\hfil Απειλές/Επιθέσεις για τις Εφαρμογές} & Malware Injection \\ \cmidrule(lr){2-2} + & Steganography Attacks \\ \cmidrule(lr){2-2} + & Web Services Attacks \\ \cmidrule(lr){2-2} + & Protocol Based Attacks \\ \cmidrule(lr){2-2} + & Security Misconfigurations \\ \cmidrule(lr){2-2} + & SQL Injection Attacks \\ \hline \end{tabular}} \label{table:virtualizationThreatCategories} \renewcommand{\arraystretch}{1} \end{table} -% Same result but with 23 warning about wrong hline usage -% \begin{table}[!ht] -% \caption{Κατηγοριοποίηση απειλών στην εικονικοποίηση} -% \renewcommand{\arraystretch}{1.5} -% \centering -% \newcolumntype{C}{>{\centering\arraybackslash}m{6cm}} -% \newcommand\Tstrut{\rule{0pt}{2.6ex}} % = `top' strut -% \newcommand\Bstrut{\rule[-0.9ex]{0pt}{0pt}} % = `bottom' strut -% \textgreek{\begin{tabular}{||C|C||} -% \hline -% % -% Κατηγορία & Απειλές και πιθανά ευπαθή σημεία \\ [0.5ex] -% % -% \hline\hline -% % -% Απειλές Δικτύου & -% % -% XML Signature Wrapping Attacks\Tstrut\Bstrut\hline -% Flooding Attacks (DDoS)\Tstrut\Bstrut\hline -% Metadata Spoofing Attacks\Tstrut\Bstrut\hline -% Insecure Web Apps \& APIs\Tstrut\Bstrut\hline -% Cross Site Scripting Attacks\Tstrut\Bstrut\hline -% Port scanning\Tstrut\Bstrut\hline -% Botnets\Tstrut\Bstrut\hline -% Spoofing attacks\Tstrut\Bstrut\hline -% DNS attacks\Tstrut\Bstrut\hline -% Sniffer attacks\Tstrut\Bstrut\hline -% Denial of Service (DoS)\Tstrut\Bstrut \\ -% % -% \hline -% % -% Απειλές για τον Πάροχο & -% % -% Sniffing Attacks\Tstrut\Bstrut\hline -% Spoofing Attacks\Tstrut\Bstrut\hline -% Denial of Service Attacks\Tstrut\Bstrut\hline -% cross VM side channel attacks\Tstrut\Bstrut\hline -% VM scheduler based attacks\Tstrut\Bstrut\hline -% VM Hopping\Tstrut\Bstrut\hline -% VM Escape\Tstrut\Bstrut\hline -% Dynamic Data Updates\Tstrut\Bstrut\hline -% Data scavenging\Tstrut\Bstrut \\ -% % -% \hline -% % -% Απειλές για τις Εφαρμογές & -% % -% Malware injection\Tstrut\Bstrut\hline -% Steganography attacks\Tstrut\Bstrut\hline -% Web services attacks\Tstrut\Bstrut\hline -% Protocol-based attacks\Tstrut\Bstrut\hline -% Security Misconfigurations\Tstrut\Bstrut\hline -% SQL Injection Attacks\Tstrut\Bstrut \\ -% % -% \hline -% \end{tabular}} -% \label{table:virtualizationThreatCategories} -% \renewcommand{\arraystretch}{1} -% \end{table} - \clearpage -Κατηγοριοποίηση με μεγαλύτερη λεπτομέρεια ως προς τις κατηγορίες αδυναμιών όπου -δύναται να υπάρχουν τρωτότητες και τις αντιστοιχούμενες αδυναμίες αυτών, -πραγματοποιήθηκε από τον οργανισμό \citeauthor{enisaSecurityOfVirtualization} -στο \cite{enisaSecurityOfVirtualization} όπου και απεικονίζεται στο ακόλουθο -σχήμα: +\noindent Μια πιο εκτενής κατηγοριοποίηση για την κατηγορία των απειλών σε +εφαρμογές, πραγματοποιήθηκε από τον οργανισμό +\citeauthor{enisaSecurityOfVirtualization} στο +\cite{enisaSecurityOfVirtualization} όπου και απεικονίζεται στο ακόλουθο σχήμα: \begin{center} \begin{figure}[!ht] @@ -1466,7 +1512,10 @@ migration and rollback attacks). Από την άλλη, όσον αφορά τ σχεδιασμό των βάσεων δεδομένων και της συντήρησής τους σε περιβάλλοντα νέφους αλλά και η χρήση ορθών πρακτικών, όπως ο περιοδικός έλεγχος των δεδομένων για την ανίχνευση πιθανών αλλοιώσεων και η χρήση μηχανισμών - αναγνώρισης και αποκατάστασης σφαλμάτων. + αναγνώρισης και αποκατάστασης σφαλμάτων. Επιπρόσθετα, απαιτείται να + υπάρχει και κατάλληλος έλεγχος πρόσβασης, αφού η πρόσβαση από μη + εξουσιοδοτημένους φορείς αποτελεί απειλή για την ακεραιότητα των + δεδομένων. \item \textbf{Εμπιστευτικότητα δεδομένων} \label{dataConfidentiality} @@ -1478,9 +1527,12 @@ migration and rollback attacks). Από την άλλη, όσον αφορά τ έναν εισβολέα παραβιάζοντας έτσι τις βάσεις δεδομένων της επιχείρησης. Επειδή σε ένα περιβάλλον νέφους δεν έχει η ίδια η επιχείρηση πρόσβαση στις υποδομές που χρησιμοποιεί, πέρα από μέτρα προστασίας που θα πρέπει - να λάβει η ίδια, είναι απαραίτητη και η επικοινωνία με τον πάροχο - νέφους προκειμένου να διαπιστωθεί ο τρόπος εξασφάλισης της - εμπιστευτικότητας των δεδομένων από μεριάς του. + να λάβει η ίδια, όπως η διασφάλιση ύπαρξης ρυθμίσεων ασφαλείας και + μηχανισμών περιοσιμού πρόσβασης στα δεδομένα της, είναι απαραίτητη και + η επικοινωνία με τον πάροχο νέφους προκειμένου να διαπιστωθεί ο τρόπος + εξασφάλισης της εμπιστευτικότητας των δεδομένων από μεριάς του. + +\clearpage \item \textbf{Διαθεσιμότητα δεδομένων} \label{dataAvailability} @@ -1532,6 +1584,8 @@ migration and rollback attacks). Από την άλλη, όσον αφορά τ την χρήση πολύπλοκων κωδικών πρόσβασης και να τους αλλάζουν τακτικά, καθώς και την χρήση αυθεντικοποίησης πολλαπλών παραγόντων. +\clearpage + \item \textbf{Έλεγχος των μηχανημάτων που έχουν πρόσβαση στον υπερ-επόπτη}: Οι επιχειρήσεις πρέπει να ελέγχουν συχνά ποια μηχανήματα έχουν πρόσβαση @@ -1541,8 +1595,6 @@ migration and rollback attacks). Από την άλλη, όσον αφορά τ ληφθούν τα κατάλληλα μέτρα περιορισμού των ατόμων που επιχειρούν να εισέλθουν στον υπερ-επόπτη. -\clearpage - \item \textbf{Περιορισμός δικτυακής πρόσβασης στο διαχειριστικό πάνελ του υπερ-επόπτη}: Η πρόσβαση στο διαχειριστικό πάνελ του υπερ-επόπτη πρέπει να @@ -1564,8 +1616,9 @@ migration and rollback attacks). Από την άλλη, όσον αφορά τ για τον διαμοιρασμό αποθηκευτικού χώρου). Επιβάλλεται να εφαρμοστούν πολιτικές που να διαχειρίζονται την φυσική και λογική κατάτμηση πόρων. Αυτό θα αποτρέψει την μη εξουσιοδοτημένη πρόσβαση, θα μειώσει τις - επιθέσεις έγχυσης κώδικα από μια εικονική μηχανή σε μια άλλη, καθώς και - το ρίσκο επίθεσης τύπου άρνησης υπηρεσίας. + επιθέσεις έγχυσης κώδικα από μια εικονική μηχανή σε μια άλλη, τις + επιθέσεις πλευρικού καναλιού, καθώς και το ρίσκο επίθεσης τύπου άρνησης + υπηρεσίας. \item \textbf{Παρακολούθηση των πόρων}: @@ -1575,6 +1628,8 @@ migration and rollback attacks). Από την άλλη, όσον αφορά τ βοηθήσει στην ορθότερη εκτέλεση υπαρχόντων μηχανισμών ασφαλείας και ανίχνευσης εισβολών. +\clearpage + \item \textbf{Ορθή διαχείριση στιγμιοτύπων εικονικών μηχανών}: Κάθε στιγμιότυπο μιας εικονικής μηχανής, δύναται να περιέχει ευαίσθητα @@ -1584,8 +1639,6 @@ migration and rollback attacks). Από την άλλη, όσον αφορά τ περιλαμβάνει την ορθή κρυπτογράφησή τους και την διαγραφή όσων στιγμιοτύπων δεν χρειάζονται πλέον. -\clearpage - \item \textbf{Ασφάλιση του μηχανήματος φιλοξενίας}: Το μηχάνημα φιλοξενίας αποτελεί ένα από τα πιο σημαντικά σημεία που @@ -1596,63 +1649,55 @@ migration and rollback attacks). Από την άλλη, όσον αφορά τ μηχάνημα, να εφαρμόζουν πολύπλοκους κωδικούς πρόσβασης και να παρακολουθούν την πρόσβαση σε αυτό. + \item \textbf{Σκλήρυνση των εικονικών μηχανών}: + + Οι εικονικές μηχανές πρέπει να σκληρύνουν προκειμένου να περιοριστεί η + πρόσβαση σε αυτές, διότι πολύ συχνά αποτελούν σημείο εισόδου για την + εξάπλωση κακόβουλου λογισμικού. Αυτό περιλαμβάνει μεταξύ άλλων την + απενεργοποίηση υπηρεσιών που δεν χρειάζονται και την εφαρμογή πολιτικών + πρόσβασης και ασφαλείας. + \end{itemize} -\section{Δοχεία και εικόνες δοχείων} \label{containersAndContainerImages} +\section{Δοχεία και δοχειοποίηση (containerization)} \label{containersAndContainerization} Τα δοχεία αποτελούν και αυτά κομμάτι των τεχνολογιών εικονικοποίησης αλλά σε επίπεδο λειτουργικού συστήματος. Κατά την περιγραφή της διαδικασίας δημιουργίας δοχείων δεν χρησιμοποιείται πλέον ο όρος εικονικοποίηση αλλά δοχειοποίηση -(containerization). Σε αντίθεση με τις τεχνολογίες εικονικοποίησης που -αναφέρθηκαν στην Ενότητα \ref{virtualizationTechnologiesIntroduction}, για την +(containerization). Σε αντίθεση με την εικονικοποίηση διακομιστών που +αναφέρθηκε στην Ενότητα \ref{virtualizationTechnologiesIntroduction}, για την δοχειοποίηση δεν είναι αναγκαία η ύπαρξη υπερ-επόπτη αλλά έναν παρόμοιο ρόλο -αναλαμβάνει η μηχανή δοχείων. Επιπλέον, ενώ οι εικονικές μηχανές καταλήγουν να -περιέχουν εικονικό αντίγραφο του υλικού, δικό τους λειτουργικό σύστημα και -εγκατεστημένα πακέτα προς υποστήριξη ενός λογισμικού, τα δοχεία αποτελούνται -μονάχα από το λογισμικό προς εκτέλεση και τις εξαρτήσεις (βιβλιοθήκες και -προγράμματα) που χρειάζεται προκειμένου αυτό να είναι λειτουργικό. +αναλαμβάνει η μηχανή δοχείων. Τα απαραίτητα συστατικά για την επίτευξη της δοχειοποίησης είναι μια εικόνα δοχείου και μια μηχανή δοχείων. Στην εικόνα δοχείου εμπεριέχονται τα συστατικά μέρη ενός λογισμικού και οδηγίες συναρμολόγησής του προς ανάγνωση από την -μηχανή δοχείων. Η συναρμολόγησή του πραγματοποιείται σε στρώσεις. Δηλαδή για να -φτάσουμε στο τελικό αποτέλεσμα, κάθε αυτοτελές κομμάτι του λογισμικού εισάγεται -πάνω από το προηγούμενό του. Από εκεί και πέρα, για την δημιουργία δοχείων από -τις αντίστοιχες εικόνες τους υπάρχει μια αλληλουχία βημάτων που πρέπει να -περαιωθεί. Αρχικά, η μηχανή δοχείων θα προσπελάσει την εικόνα δοχείου +μηχανή δοχείων. Η συναρμολόγησή αυτή πραγματοποιείται σε στρώσεις. Δηλαδή, για +να φτάσουμε στο τελικό αποτέλεσμα, κάθε αυτοτελές κομμάτι του λογισμικού +εισάγεται πάνω από το προηγούμενό του. Από εκεί και πέρα, για την δημιουργία +δοχείων από τις αντίστοιχες εικόνες τους υπάρχει μια αλληλουχία βημάτων που +πρέπει να περαιωθεί. Αρχικά, η μηχανή δοχείων θα προσπελάσει την εικόνα δοχείου προκειμένου να εξακριβώσει τις προδιαγραφές του. Έπειτα, με την βοήθεια των μεθόδων απομόνωσης που έχει στην διάθεσή της μέσω των μηχανισμών εικονικοποίησης του πυρήνα του λειτουργικού συστήματος φιλοξενίας, θα δημιουργήσει ένα εικονικό περιβάλλον απομονωμένο από το ήδη υπάρχον φυσικό και τέλος, θα πραγματοποιήσει εκκίνηση του δοχείου ως διεργασία του συστήματος. -Ορισμένα από αυτά τα βήματα περιλαμβάνουν και άλλες διαδικασίες για τις οποίες -είναι υπεύθυνα συγκεκριμένα προγράμματα με τα οποία συνεργάζεται η μηχανή -δοχείων. Υπάρχουν και μηχανές δοχείων χαμηλού επιπέδου έναντι των πιο γνωστών -υψηλού επιπέδου όπως το Docker, στις οποίες λείπουν ορισμένες λειτουργίες, όπως -η απόκτηση εικόνων δοχείων από ένα κεντρικό αποθετήριο και ο έλεγχος -εγκυρότητας των ρυθμίσεων των εικόνων αυτών. Οι μηχανές δοχείων υψηλού επιπέδου -είναι ουσιαστικά μια συλλογή εργαλείων που διευκολύνουν την δοχειοποίηση -απαλλάσσοντας τον χρήστη από την ανάγκη της χειροκίνητης εκτέλεσης των βημάτων -της \cite{sysdigContainerRuntime}. - -Το τελικό επιθυμητό αποτέλεσμα είναι η δημιουργία ενός απομονωμένου -περιβάλλοντος στο οποίο πραγματοποιείται η εκτέλεση ενός λογισμικού με -βιβλιοθήκες και εξαρτήσεις διαφορετικών εκδόσεων συγκριτικά με αυτές που μπορεί -να προϋπάρχουν στο σύστημα. Το περιβάλλον αυτό είναι υποχρεωμένο να -χρησιμοποιήσει ένα υποσύνολο των πόρων του συστήματος που του απονεμήθηκε μέσω -της μηχανής δοχείων. Τα παραπάνω είναι εφικτά και με την χρήση εικονικών -μηχανών αλλά με κόστος την επιβάρυνση του συστήματος φιλοξενίας λόγω της -αδυναμίας διαμοιρασμού των πόρων με τον τρόπο που το επιτυγχάνουν τα δοχεία. -Κάθε δοχείο μοιράζεται τον πυρήνα του λειτουργικού συστήματος φιλοξενίας με τα -υπόλοιπα ενώ κάθε στρώση μιας εικόνας δοχείου αντιστοιχουμένη σε ένα -στιγμιότυπο λογισμικού, δύναται να χρησιμοποιηθεί ταυτοχρόνως από περισσότερα -του ενός δοχεία προς αποφυγή διπλής αποθήκευσης -\cite{codemotionContainerImages}. Επιπλέον, κάθε εικόνα δοχείου δύναται να -χρησιμοποιηθεί ως πρότυπο για την δημιουργία μιας καινούριας, καθιστώντας έτσι -ευκολότερη την επεκτασιμότητα ενός λογισμικού σε αντίθεση με τις εικονικές -μηχανές, όπου κάθε νέο στιγμιότυπό τους απαιτεί την επαναληπτική εκτέλεση των -βημάτων δημιουργίας τους. +Ορισμένα από τα βήματα δημιουργίας των δοχείων περιλαμβάνουν και άλλες +διαδικασίες για τις οποίες είναι υπεύθυνα συγκεκριμένα προγράμματα με τα οποία +συνεργάζεται η μηχανή δοχείων. Σε κάθε περίπτωση, θα χρησιμοποιηθεί ένα +πρόγραμμα για τον ρόλο ενός container runtime χαμηλού επιπέδου, όπως είναι το +runc. Αυτού του είδους τα προγράμματα είναι υπεύθυνα για την επικοινωνία με τον +πυρήνα του ΛΣ φιλοξενίας ώστε να ξεκινήσουν οι διαδικασίες χαμηλού επιπέδου, +όπως η ανάθεση χώρων ονομάτων και ομάδων ελέγχου σε δοχεία. Υπάρχουν και +μηχανές δοχείων χαμηλού επιπέδου έναντι των πιο γνωστών υψηλού επιπέδου όπως το +Docker, στις οποίες λείπουν ορισμένες λειτουργίες, όπως η απόκτηση εικόνων +δοχείων από ένα κεντρικό αποθετήριο και ο έλεγχος εγκυρότητας των ρυθμίσεων των +εικόνων αυτών. Οι μηχανές δοχείων υψηλού επιπέδου είναι ουσιαστικά μια συλλογή +εργαλείων που διευκολύνουν την δοχειοποίηση απαλλάσσοντας τον χρήστη από την +ανάγκη της χειροκίνητης εκτέλεσης των βημάτων της +\cite{sysdigContainerRuntime}. Αυτές αναλαμβάνουν πολλές φορές ονομάζονται και +container runtimes υψηλού επιπέδου \cite{containerRuntime}. \subsection{Μηχανές δοχείων και εικονικοποίηση σε επίπεδο ΛΣ} \label{osVirtualization} @@ -1662,63 +1707,45 @@ migration and rollback attacks). Από την άλλη, όσον αφορά τ οποίες μπορεί να επιτευχθεί ο περιορισμός πόρων σε ένα υποσύνολο διεργασιών, καθώς και οι χώροι ονομάτων χρηστών (user namespaces) που προσφέρουν την δυνατότητα περιορισμού των δικαιωμάτων που έχει μια διεργασία στο σύστημα -αρχείων. Με την βοήθεια των εργαλείων που έχουν οι μηχανές δοχείων στην διάθεσή -τους, δύναται να πραγματοποιηθεί εικονικοποίηση σε επίπεδο ΛΣ. Μια μέθοδος -εικονικοποίησης λογισμικού όπου ο πυρήνας ενός ΛΣ επιτρέπει την ύπαρξη -πολλαπλών απομονωμένων περιβαλλόντων \cite{teimouriOsVirtualizationDefinition}, -τα οποία συμπεριφέρονται ως ξεχωριστά συστατικά λογισμικού -\cite{webopediaOsVirtualizationDefinition}. +αρχείων. Με την βοήθεια των εργαλείων αυτών, δύναται να πραγματοποιηθεί +εικονικοποίηση σε επίπεδο ΛΣ. Μια μέθοδος εικονικοποίησης λογισμικού όπου ο +πυρήνας ενός ΛΣ επιτρέπει την ύπαρξη πολλαπλών απομονωμένων περιβαλλόντων +\cite{teimouriOsVirtualizationDefinition}, τα οποία έπειτα θα συμπεριφέρονται +ως ξεχωριστά συστατικά λογισμικού \cite{webopediaOsVirtualizationDefinition}. Μια από τις υποχρεώσεις της μηχανής δοχείων είναι η επικοινωνία με τον πυρήνα του λειτουργικού συστήματος φιλοξενίας για να επιτευχθεί αυτή η εικονικοποίηση. -Πρόκειται για μια διαδικασία κατά την οποία ένα λειτουργικό σύστημα επιτρέπει -την απομόνωση των διεργασιών που εκτελούνται σε χώρους ονομάτων και την ανάθεση -αποκλειστικών πόρων συστήματος σε αυτές. Με αυτό τον τρόπο, οι διεργασίες είναι -ανεξάρτητες μεταξύ τους και απομονωμένες ενώ διαμοιράζονται με ασφαλή τρόπο (σε -ένα βαθμό) τους πόρους του συστήματος. Ένα δοχείο μπορεί να θεωρηθεί πως -αντιστοιχεί σε μια τέτοια απομονωμένη διεργασία. +Ουσιαστικά, η μηχανή δοχείων λειτουργεί ως διαμεσολαβητής των δοχείων για να +μοιράζονται το ίδιο λειτουργικό σύστημα και κατά προέκταση τους υποκείμενους +πόρους του μεταξύ τους. Αυτό συμβαίνει διότι αυτή αιτείται από το λειτουργικό +σύστημα να επιτρέψει την απομόνωση των διεργασιών που εκτελούνται σε χώρους +ονομάτων και να αναθέσει αποκλειστικούς πόρους συστήματος σε αυτές. Με αυτό τον +τρόπο, οι διεργασίες είναι ανεξάρτητες μεταξύ τους και απομονωμένες ενώ +διαμοιράζονται με ασφαλή τρόπο (σε ένα βαθμό) τους πόρους του συστήματος. Ένα +δοχείο μπορεί να θεωρηθεί πως αντιστοιχεί σε μια τέτοια απομονωμένη διεργασία. -\section{Δοχειοποίηση (Containerization)} \label{containerizationDefinition} - -Πέραν της πλήρους εικονικοποίησης και της παρα-εικονικοποίησης, εδώ και αρκετά -χρόνια πολλές επιχειρήσεις στρέφονται σε τεχνολογίες που χρησιμοποιούν μια -υποκατηγορία της εικονικοποίησης, ονόματι δοχειοποίηση (containerization). Με -βάση την \citeauthor{ibmContainerizationDefinition} -\cite{ibmContainerizationDefinition}, πρόκειται για το πακετάρισμα λογισμικού -μονάχα με τις βιβλιοθήκες και τις εξαρτήσεις που χρειάζεται για να εκτελεστεί, -δημιουργώντας ένα εκτελέσιμο \textquote{δοχείο} που πάντοτε θα εκτελείται με -την ίδια συμπεριφορά ανεξαρτήτως υποδομής. Με την παραδοσιακή μέθοδο ανάπτυξης -λογισμικού, υπήρχε πάντα το ρίσκο το πρόγραμμα που αναπτύχθηκε σε ένα -συγκεκριμένο περιβάλλον να μη λειτουργεί με τον αναμενόμενο τρόπο κατά τη -μεταφορά του σε ένα άλλο, εκτός εάν έχει ελεγχθεί ότι υπάρχουν όλες οι -εξαρτήσεις που χρειάζεται στις εκδόσεις που τις χρειάζεται. Ακόμα και σε αυτήν -την περίπτωση όμως, πέραν του κόπου για τον έλεγχο, είναι αρκετά πιθανό ένα -άλλο πρόγραμμα να χρειάζεται διαφορετικές εκδόσεις των ίδιων εξαρτήσεων. Αυτό -πρακτικά σήμαινε πως το έτερο αυτό πρόγραμμα θα έπρεπε να στεγαστεί σε -διαφορετικό διακομιστή, αυξάνοντας το σχετικό κόστος. - -Τα προβλήματα αυτά έρχεται να λύσει η τεχνολογία της δοχειοποίησης. Με τη -δοχειοποίηση, είναι δυνατή η συστέγαση δοχείων, δηλ. διαφορετικών προγραμμάτων -ή συστατικών προγραμμάτων στο ίδιο μηχάνημα (είτε αυτό είναι φυσικό είτε -εικονικό). Όπως θα αναφέρουμε και στην Ενότητα \ref{containerManagement}, από -το 2013 και έπειτα, η άφιξη του Docker επιτάχυνε κατά πολύ την υιοθέτηση της -τεχνολογίας αυτής. Σε τέτοιο βαθμό που σε μια έρευνα της IBM -\cite{ibmContainerSurvey} βρέθηκε πως το 61\% όσων ξεκίνησαν να χρησιμοποιούν -δοχεία, το κάνουν στο 50\% ή παραπάνω των εφαρμογών που δημιούργησαν τα -τελευταία δύο χρόνια, ενώ 64\% αυτών, αναμένουν στο 50\% των υπαρχουσών -εφαρμογών τους να κάνουν χρήση δοχείων στα επόμενα δύο χρόνια. - -Ένας από τους χαρακτηρισμούς των δοχείων είναι η \textquote{ελαφρότητα} τους σε -σχέση με μια εικονική μηχανή λόγω της ικανότητας τους να μοιράζονται τον πυρήνα -του ίδιου λειτουργικού συστήματος (ΛΣ). Η απαίτηση μιας εικονικής μηχανής να -χρειάζεται να έχει δικό της ΛΣ, την καθιστά μεγαλύτερη σε μέγεθος και λιγότερο -αποδοτική στη χρήση πόρων του συστήματος. Απεναντίας, τα δοχεία είναι εγγενώς -μικρότερα σε μέγεθος και έχουν και μικρότερο χρόνο εκκίνησης. Πράγμα που -τραβάει το ενδιαφέρον των επιχειρήσεων διότι αυτό μεταφράζεται σε υψηλότερη -αποδοτικότητα \& βαθμό χρήσης των διακομιστών και επομένως μειωμένα κόστη -λειτουργίας. Επίσης, τα δοχεία κλιμακώνονται αρκετά πιο γρήγορα σε σχέση με τις -εικονικές μηχανές, επιτρέποντας την αντίδραση σε οποιαδήποτε διακύμανση του -φόρτου εργασίας. +Το τελικό επιθυμητό αποτέλεσμα της δοχειοποίησης είναι η δημιουργία ενός +απομονωμένου περιβάλλοντος (δηλ. το εκτελέσιμο \textquote{δοχείο}) στο οποίο +πραγματοποιείται η εκτέλεση ενός λογισμικού με βιβλιοθήκες και εξαρτήσεις +διαφορετικών εκδόσεων συγκριτικά με αυτές που μπορεί να προϋπάρχουν στο +σύστημα. Το περιβάλλον αυτό είναι υποχρεωμένο να χρησιμοποιήσει ένα υποσύνολο +των πόρων του συστήματος που του απονεμήθηκε μέσω της μηχανής δοχείων και +αναμένεται να εκτελείται με την ίδια συμπεριφορά ανεξαρτήτως υποδομής. Τα +παραπάνω είναι εφικτά και με την χρήση εικονικών μηχανών αλλά με κόστος την +επιβάρυνση του συστήματος φιλοξενίας λόγω της αδυναμίας διαμοιρασμού των πόρων +με τον τρόπο που το επιτυγχάνουν τα δοχεία. Το γεγονός ότι κάθε δοχείο +μοιράζεται τον ίδιο πυρήνα του λειτουργικού συστήματος φιλοξενίας με τα +υπόλοιπα δοχεία, έχει ως αποτέλεσμα να μην χρειάζεται να απονεμηθούν πόροι για +εικονικοποίηση μηχανών με σκοπό την στέγαση ενός ολόκληρου ξεχωριστού +λειτουργικού συστήματος (όπως γίνεται στις εικονικές μηχανές). Επιπλέον, κάθε +στρώση μιας εικόνας δοχείου αντιστοιχουμένη σε ένα στιγμιότυπο λογισμικού, +δύναται να χρησιμοποιηθεί ταυτοχρόνως από περισσότερα του ενός δοχεία προς +αποφυγή διπλής αποθήκευσης \cite{codemotionContainerImages}. Αυτό το +χαρακτηριστικό συμβάλλει στην εξάλειψη περιττής υπολογιστικής ισχύος. Τέλος, +κάθε εικόνα δοχείου μπορεί να χρησιμοποιηθεί ως πρότυπο για την δημιουργία μιας +καινούριας, καθιστώντας έτσι ευκολότερη την επεκτασιμότητα ενός λογισμικού σε +αντίθεση με τις εικονικές μηχανές, όπου κάθε νέο στιγμιότυπό τους απαιτεί την +επαναληπτική εκτέλεση των βημάτων δημιουργίας τους. \subsection{Εργαλεία διαχείρισης δοχείων και έλευση του Docker} \label{containerManagement} @@ -1732,23 +1759,23 @@ migration and rollback attacks). Από την άλλη, όσον αφορά τ φάκελο, ο οποίος ορίζεται ως ο καινούριος αρχικός (root) (για την εφαρμογή αυτή). Ο κύριος σκοπός του chroot ήταν η ενίσχυση της ασφάλειας ούτως ώστε στην περίπτωση εκμετάλλευσης μιας εσωτερικής ευπάθειας της εφαρμογής, να παραμένουν -ανεπηρέαστα τα μέρη του συστήματος εκτός του φακέλου στον οποίο είχε πρόσβαση. -Εκείνη την εποχή αυτό ήταν αρκετό, αλλά οι απαιτήσεις ασφαλείας με τον καιρό -αυξάνονταν και υπήρχε η ανάγκη διαφορετικών μεθόδων απομόνωσης μιας και από -κατασκευής του, το chroot δεν περιόριζε έναν χρήστη ή μια διεργασία με +ανεπηρέαστα τα μέρη του συστήματος εκτός του φακέλου στον οποίο αυτή είχε +πρόσβαση. Εκείνη την εποχή αυτό ήταν αρκετό, αλλά οι απαιτήσεις ασφαλείας με +τον καιρό αυξάνονταν και υπήρχε η ανάγκη διαφορετικών μεθόδων απομόνωσης μιας +και από κατασκευής του, το chroot δεν περιόριζε έναν χρήστη ή μια διεργασία με διαχειριστικά δικαιώματα \cite{chrootRestrictions}. Μερικά χρόνια αργότερα, το 2004 δημιουργήθηκαν και ενσωματώθηκαν στον πυρήνα του Linux οι ομάδες ελέγχου, με την βοήθεια των οποίων ήταν πλέον δυνατή η απομόνωση πόρων του συστήματος σε ένα υποσύνολο διεργασιών. Αυτές οι τεχνολογίες σήμαναν της έναρξη της ιδέας της δοχειοποίησης και έτσι το -2008 ήρθε στο προσκήνιο το LXC (Linux Container Technology) \footfullcite{LXC}. -Το πρώτο εργαλείο που χρησιμοποιούσε τεχνολογίες δοχείων για την δημιουργία και -εκτέλεση πολλαπλών λειτουργικών συστημάτων Linux στο ίδιο μηχάνημα. -Χρησιμοποιώντας μηχανισμούς που προσέφερε το λειτουργικό σύστημα, επέτρεπε -πλήρη εικονικοποίηση ενός στιγμιότυπου Linux σε μορφή δοχείου και παρείχε -αρκετές λειτουργίες, όπως η δημιουργία, η εκκίνηση και η διαγραφή LXC δοχείων. -Παρ' όλα αυτά, επικεντρωνόταν στην δοχειοποίηση λειτουργικών συστημάτων και όχι +2008 ήρθε στο προσκήνιο το LXC (Linux Containers) \footfullcite{LXC}. Το πρώτο +εργαλείο που χρησιμοποιούσε τεχνολογίες δοχείων για την δημιουργία και εκτέλεση +πολλαπλών λειτουργικών συστημάτων Linux στο ίδιο μηχάνημα. Χρησιμοποιώντας +μηχανισμούς που προσέφερε το λειτουργικό σύστημα, επέτρεπε την πλήρη +εικονικοποίηση ενός στιγμιότυπου Linux σε μορφή δοχείου και παρείχε αρκετές +λειτουργίες, όπως η δημιουργία, η εκκίνηση και η διαγραφή LXC δοχείων. Παρ' όλα +αυτά, επικεντρωνόταν στην δοχειοποίηση λειτουργικών συστημάτων και όχι εφαρμογών \cite{LXCvsDocker}, καθιστώντας δύσκολη και περίπλοκη την χρήση του όταν η κύρια ανάγκη ήταν η απομόνωση εφαρμογών. @@ -1757,7 +1784,7 @@ migration and rollback attacks). Από την άλλη, όσον αφορά τ του εξειδικευμένου σκοπού ύπαρξής τους δεν είχαν υιοθετηθεί ευρέως. Όλα τα παραπάνω οδήγησαν στην δημιουργία του Docker το 2013, με την έλευση του οποίου η τεχνολογία των δοχείων εκτοξεύτηκε. Το Docker είναι ένα σύνολο προϊόντων PaaS -(Platform-as-a-Service) (Πλατφόρμα ως Υπηρεσία). Κάθε τέτοιο προϊόν παρέχει μια +(Platform-as-a-Service) (Πλατφόρμα ως Υπηρεσία) και μέσω αυτού, παρέχεται μια πλατφόρμα με μηχανισμούς για συναρμολόγηση, θέση σε λειτουργία, εκτέλεση, ενημέρωση και διαχείριση προγραμμάτων σε μορφή δοχείων. Σε αντίθεση με το LXC, το Docker αποτελεί μια μηχανή δοχείων υψηλού επιπέδου με κύριο στόχο την @@ -1766,28 +1793,52 @@ migration and rollback attacks). Από την άλλη, όσον αφορά τ (φιλοξενίας), παρέχει και δυνατότητες επικοινωνίας με αποθετήρια εικόνων δοχείων, όπως είναι το Docker Hub \footfullcite{dockerhub}, το επίσημο αποθετήριο του Docker, το Quay \footfullcite{quay}, ένα εναλλακτικό αποθετήριο -της Red Hat ή οποιοδήποτε άλλο αποθετήριο συμβατό με τις προδιαγραφές που έχει -ορίσει η ανοικτή δομή διοίκησης OCI (Open Container Initiative) -\footfullcite{oci}. Μέσω τέτοιων υπηρεσιών, οι χρήστες έχουν πρόσβαση και -διαμοιράζονται χιλιάδες εικόνες δοχείων που τους επιτρέπουν να ολοκληρώσουν +της Red Hat και οποιοδήποτε άλλο αποθετήριο συμβατό με τις προδιαγραφές που +έχει ορίσει η ανοικτή δομή διοίκησης OCI (Open Container Initiative) +\footfullcite{oci}. Μέσω υπηρεσιών αυτού του είδους, οι χρήστες έχουν πρόσβαση +και διαμοιράζονται χιλιάδες εικόνες δοχείων που τους επιτρέπουν να ολοκληρώσουν διάφορα μέρη μιας υπάρχουσας ή νέας εφαρμογής. Επιπλέον, όντας μια μηχανή -δοχείων υψηλού επιπέδου όλες οι λειτουργίες που θα απαιτούσαν εξειδικευμένες -γνώσεις προκειμένου να πραγματοποιηθούν, έχουν συμπυκνωθεί σε απλές εντολές, -καθιστώντας έτσι εύκολη την χρήση του για προγραμματιστές κάθε επιπέδου και -απλοποιώντας κατά πολύ την διαδικασία ανάπτυξης και παράδοσης κατανεμημένων +δοχείων υψηλού επιπέδου, όλες οι λειτουργίες που θα απαιτούσαν εξειδικευμένες +γνώσεις προκειμένου να πραγματοποιηθούν, έχουν συμπυκνωθεί σε απλές εντολές. +Έτσι, καθίσταται εύκολη η χρήση του Docker για προγραμματιστές κάθε επιπέδου +και απλοποιείται κατά πολύ την διαδικασία ανάπτυξης και παράδοσης κατανεμημένων εφαρμογών. Προσφέροντας μια φιλική προς τον χρήστη διεπαφή, έλεγχο εκδόσεων (version control) για δοχεία \cite{LXCvsDocker2} και ένα οικοσύστημα γύρω από όλα αυτά, είναι εμφανής ο λόγος που κατάφερε να επισκιάσει το LXC. \subsection{Χρήση δοχείων στην ανάπτυξη και παράδοση εφαρμογών} \label{containerUsage} -Οι μέθοδοι ανάπτυξης και παράδοσης εφαρμογών έχουν αλλάξει δραματικά τα -τελευταία χρόνια. Από τις παραδοσιακές μεθόδους, όπως το μοντέλο καταρράκτη -(waterfall) \cite{waterfall} βάσει του οποίου υπήρχε ένα συγκεκριμένο -αμετάβλητο σχέδιο ανάπτυξης που καλούνταν να ακολουθήσει μια ομάδα ανάπτυξης -λογισμικού, έχουμε φτάσει σε μια εποχή όπου οι απαιτήσεις της αγοράς αλλάζουν -συνεχώς, με αποτέλεσμα να υπάρχει ανάγκη για καινούριες μεθόδους που να -ανταποκρίνονται τάχιστα στις αλλαγές αυτές. Έτσι, έχουν δημιουργηθεί +Ο λόγος που πολλές επιχειρήσεις στρέφονται στην χρήση της δοχειοποίησης είναι +διότι με την παραδοσιακή μέθοδο ανάπτυξης λογισμικού, υπήρχε πάντα το ρίσκο ένα +πρόγραμμα που αναπτύχθηκε σε ένα συγκεκριμένο περιβάλλον να μη λειτουργεί με +τον αναμενόμενο τρόπο κατά τη μεταφορά του σε ένα άλλο, εκτός εάν έχει ελεγχθεί +ότι υπάρχουν όλες οι εξαρτήσεις που χρειάζεται, στις εκδόσεις που τις +χρειάζεται. Ακόμα και σε αυτήν την περίπτωση όμως, πέραν του κόπου για τον +έλεγχο και τον παράγοντα ανθρώπινου λάθους, είναι αρκετά πιθανό ένα άλλο +πρόγραμμα να χρειάζεται διαφορετικές εκδόσεις των ίδιων εξαρτήσεων. Αυτό +πρακτικά σήμαινε πως το έτερο αυτό πρόγραμμα θα έπρεπε να στεγαστεί σε +διαφορετικό διακομιστή, αυξάνοντας το σχετικό κόστος. + +Τα παραπάνω προβλήματα έρχεται να λύσει η τεχνολογία της δοχειοποίησης, αφού +αυτή καθιστά δυνατή την συστέγαση δοχείων, δηλ. διαφορετικών προγραμμάτων ή +συστατικών προγραμμάτων στο ίδιο μηχάνημα (είτε αυτό είναι φυσικό είτε +εικονικό) και μάλιστα με λιγότερη επιβάρυνση συγκριτικά με την χρήση εικονικών +μηχανών. Όπως αναφέραμε και στην Ενότητα \ref{containerManagement}, από το 2013 +και έπειτα, η άφιξη του Docker επιτάχυνε κατά πολύ την υιοθέτηση της +τεχνολογίας αυτής. Σε τέτοιο βαθμό, που σε μια έρευνα της IBM +\cite{ibmContainerSurvey} βρέθηκε πως το 61\% όσων ξεκίνησαν να χρησιμοποιούν +δοχεία, το κάνουν στο 50\% ή παραπάνω των εφαρμογών που δημιούργησαν τα +τελευταία δύο χρόνια, ενώ 64\% αυτών, αναμένουν στο 50\% των υπαρχουσών +εφαρμογών τους να κάνουν χρήση δοχείων στα επόμενα δύο χρόνια. + +Ένας ακόμα λόγος που επιτάχυνε την υιοθέτηση της τεχνολογίας της δοχειοποίησης, +είναι πως τα τελευταία χρόνια έχουν αλλάξει δραματικά και οι μέθοδοι ανάπτυξης +και παράδοσης εφαρμογών. Από τις παραδοσιακές μεθόδους, όπως το μοντέλο +καταρράκτη (waterfall) \cite{waterfall} βάσει του οποίου υπήρχε ένα +συγκεκριμένο αμετάβλητο σχέδιο ανάπτυξης που καλούνταν να ακολουθήσει μια ομάδα +ανάπτυξης λογισμικού, έχουμε φτάσει σε μια εποχή όπου οι απαιτήσεις της αγοράς +αλλάζουν συνεχώς, με αποτέλεσμα να υπάρχει ανάγκη για καινούριες μεθόδους που +να ανταποκρίνονται τάχιστα στις αλλαγές αυτές. Έτσι, έχουν δημιουργηθεί μεθοδολογίες όπως η Agile \cite{agile} κατά την οποία η ανάπτυξη και η παράδοση λογισμικού πραγματοποιείται σε πολλές μικρές και ευμετάβλητες φάσεις προκειμένου να προσαρμόζεται στις αλλαγές που ενδέχεται να υπάρξουν στον αρχικό @@ -1806,23 +1857,26 @@ migration and rollback attacks). Από την άλλη, όσον αφορά τ απομακρυσμένη κατανάλωση από τους πελάτες τους. Τα δοχεία αποτελούν ιδανική επιλογή για την εφαρμογή των παραπάνω μεθοδολογιών -και πρακτικών καθώς επιτρέπουν το γρήγορο και αποτελεσματικό πακετάρισμα -εφαρμογών και την εκτέλεσή τους σε οποιοδήποτε περιβάλλον. Λόγω των -χαρακτηριστικών τους, εξαλείφουν τυχόν προβλήματα ασυμβατότητας μεταξύ των -περιβαλλόντων εκτέλεσής τους και προσφέρουν μεγαλύτερη αποδοτικότητα πόρων αφού -μπορεί κανείς να εκτελέσει πολλά περισσότερα αντίγραφα ενός προγράμματος για -συγκεκριμένη ποσότητα πόρων σε σχέση με τον αριθμό που θα μπορούσε να εκτελέσει -χρησιμοποιώντας εικονικές μηχανές πάνω από αυτούς τους πόρους. Γεγονός που -μειώνει ιδιαίτερα το κόστος λειτουργίας και αυξάνει την κλιμακωσιμότητα. -Επιπλέον, λόγω της ταχείας διάθεσης και εκτέλεσής τους, συμβαδίζουν πλήρως με -τον ρυθμό ανάπτυξης και παράδοσης που υποστηρίζουν οι παραπάνω μεθοδολογίες. -Έχοντας αυτά υπόψιν, γίνεται εμφανής και ο λόγος που τα δοχεία είναι η -προτιμότερη επιλογή για την ανάπτυξη και παράδοση εφαρμογών που ακολουθούν την -αρχιτεκτονική μικρο-υπηρεσιών. Επιπρόσθετα, η ανεξαρτησία των δοχείων μεταξύ -τους, καθιστά πιο σταθερή την εφαρμογή αφού σε περίπτωση που κάποιο από αυτά -αποτύχει, η υπόλοιπη εφαρμογή θα συνεχίσει να λειτουργεί κανονικά και η +και πρακτικών, καθώς επιτρέπουν το γρήγορο και αποτελεσματικό πακετάρισμα +εφαρμογών (ή συστατικών (components) εφαρμογής) και την εκτέλεσή τους σε +οποιαδήποτε πλατφόρμα ή περιβάλλον νέφους. Λόγω των χαρακτηριστικών τους, +εξαλείφουν τυχόν προβλήματα ασυμβατότητας μεταξύ των περιβαλλόντων εκτέλεσής +τους και προσφέρουν μεγαλύτερη αποδοτικότητα πόρων διότι μπορεί κανείς να +εκτελέσει πολλά περισσότερα αντίγραφα ενός προγράμματος για συγκεκριμένη +ποσότητα πόρων σε σχέση με τον αριθμό που θα μπορούσε να εκτελέσει +χρησιμοποιώντας εικονικές μηχανές πάνω από αυτούς τους πόρους. Το τελευταίο +μάλιστα μειώνει ιδιαίτερα το κόστος λειτουργίας και αυξάνει την +κλιμακωσιμότητα. Τα δοχεία επίσης, λόγω της ταχείας διάθεσης και εκτέλεσής +τους, συμβαδίζουν πλήρως και με τον ρυθμό ανάπτυξης και παράδοσης που +υποστηρίζουν οι παραπάνω μεθοδολογίες. Τέλος, η ανεξαρτησία των δοχείων μεταξύ +τους, καθιστά πιο σταθερή την εφαρμογή, αφού σε περίπτωση που κάποιο από αυτά +αποτύχει, η υπόλοιπη εφαρμογή θα συνεχίσει να λειτουργεί κανονικά, ενώ η ανακατασκευή του δοχείου που απέτυχε μπορεί να επιτευχθεί εύκολα και γρήγορα με -μια απλή τροποποίηση της εκάστοτε εικόνας δοχείου. +μια απλή τροποποίηση της εκάστοτε εικόνας δοχείου. Έχοντας αυτά υπόψιν, γίνεται +εμφανής και ο λόγος που τα δοχεία και εν γένει η δοχειοποίηση εφαρμογών είναι η +προτιμότερη επιλογή για περιπτώσεις ανάπτυξης και παράδοσης εφαρμογών που +ακολουθούν την αρχιτεκτονική μικρο-υπηρεσιών, καθώς και περιπτώσεις εφαρμογής +μεθόδων DevOps \cite{applicationContainerization}. \subsection{Χρήσεις του Docker στο νέφος} \label{dockerInCloudComputing} @@ -1834,10 +1888,10 @@ migration and rollback attacks). Από την άλλη, όσον αφορά τ εγκατάσταση δοχείων σε εικονικές μηχανές και η εγκατάσταση δοχείων έμμεσα σε πόρους χωρίς την ανάγκη δημιουργίας εικονικής μηχανής. Η δεύτερη περίπτωση χρήσης εντάσσεται στην κατηγορία υπηρεσιών CaaS \cite{caas} (Container as a -Service), όπως η ECS (Elastic Container Service) της Amazon. Μια υπηρεσία όπου -ένας πάροχος νέφους αντί να παρέχει πρόσβαση σε υπολογιστικούς πόρους γενικού -σκοπού, παρέχει μια ευέλικτη υποδομή, έτοιμη για την εκτέλεση δοχείων -\cite{caasVsIaas}. +Service) (Δοχείο ως Υπηρεσία), όπως η ECS (Elastic Container Service) της +Amazon. Μια υπηρεσία όπου ένας πάροχος νέφους αντί να παρέχει πρόσβαση σε +υπολογιστικούς πόρους γενικού σκοπού, παρέχει μια ευέλικτη υποδομή, κατάλληλα +ρυθμισμένη για την εκτέλεση δοχείων \cite{caasVsIaas}. Από τις δύο αυτές επιλογές, η πρώτη προσφέρει μια ευελιξία ως προς την διαμόρφωση του περιβάλλοντος εκτέλεσης των δοχείων. Οι χρήστες έχουν την @@ -1858,7 +1912,7 @@ Service), όπως η ECS (Elastic Container Service) της Amazon. Μια υπ περιπτώσεις που οι επιχειρήσεις δεν έχουν υπαλλήλους με την απαραίτητη εμπειρία και ικανότητες σε αυτόν τον τομέα ή δεν έχουν τον απαραίτητο προϋπολογισμό για αυτό. Η χρήση υπηρεσιών CaaS αυτομάτως εξασφαλίζει στις επιχειρήσεις τα -πλεονεκτήματα των υπηρεσιών IaaS όπως η κλιμάκωση, η αντοχή σε αποτυχίες και η +πλεονεκτήματα των υπηρεσιών IaaS, όπως η κλιμάκωση, η αντοχή σε αποτυχίες και η ευελιξία, ενώ ταυτόχρονα προσφέρει και τα πλεονεκτήματα των δοχείων, όπως η ταχεία διάθεση και απόσυρσή τους αλλά και η υψηλή τους απόδοση κατά την εκτέλεση. Συγκεκριμένα, μέσω των υπηρεσιών CaaS, οι χρήστες διαθέτουν @@ -1885,64 +1939,56 @@ Docker Swarm \cite{dockerSwarm}, που παρέχουν αυτή την δυν μην βασίζονται αποκλειστικά σε έναν πάροχο νέφους για όλες τις λειτουργίες μιας εφαρμογής \cite{multiCloud} αλλά να εκμεταλλεύονται τα οφέλη (πχ. περισσότερη ασφάλεια, ποιότητα και αυξημένη διαθεσιμότητα) χρήσης υπηρεσιών από πολλούς -παρόχους με βάση τις ανάγκες τους. - -\subsection{Δοχειοποίηση Εφαρμογών (Application Containerization)} \label{applicationContainerization} - -Τα δοχεία ενθυλακώνουν ένα λογισμικό ή ένα συστατικό (component) εφαρμογής ως -ένα αυτόνομο πακέτο που περιέχει τον κώδικα, τις βιβλιοθήκες και τις εξαρτήσεις -που χρειάζεται για να εκτελεστεί. Οι διεργασίες ενός δοχείου θεωρούνται -απομονωμένες με την έννοια ότι δεν έχουν ανάγκη για ένα αντίγραφο του -λειτουργικού συστήματος αλλά αντ' αυτού μιας μηχανής εκτέλεσης δοχείων -(container execution engine) στο μηχάνημα (φιλοξενίας) που λειτουργεί ως -διαμεσολαβητής των δοχείων για να μοιράζονται το ίδιο λειτουργικό σύστημα και -κατά προέκταση τους υποκείμενους πόρους του μεταξύ τους. Κοινές βιβλιοθήκες ή -εκτελέσιμα αρχεία μιας στρώσης εικόνας δοχείων μπορούν επίσης να -χρησιμοποιηθούν για την δημιουργία πολλών δοχείων, συμβάλλοντας έτσι στην -εξάλειψη περιττής υπολογιστικής ισχύος, καθιστώντας τα δοχεία μικρά στον χώρο -που καταλαμβάνουν, γρήγορα στην εκκίνηση και ικανά να εκτελεστούν σε -οποιαδήποτε πλατφόρμα ή περιβάλλον νέφους \cite{ibmContainerizationDefinition}. - -Η δοχειοποίηση εφαρμογών αποτελεί εν γένει την πιο δημοφιλή μορφή δοχειοποίησης -που χρησιμοποιείται σήμερα. Είθισται να χρησιμοποιείται σε περιπτώσεις χρήσης -μικρο-υπηρεσιών, CI/CD pipelines, επαναλαμβανόμενων διεργασιών και εφαρμογής -μεθόδων DevOps \cite{applicationContainerization}. +παρόχους με γνώμονα τις ανάγκες τους. \subsection{Πλεονεκτήματα δοχείων έναντι εικονικών μηχανών} \label{containerAdvantages} -Ενώ μια εικονική μηχανή είναι μια πλήρης αναπαράσταση ενός φυσικού διακομιστή, -ένα δοχείο εξομοιώνει μονάχα το περιβάλλον εκτέλεσης ενός λογισμικού. Αυτό -σημαίνει πως εάν θεωρηθεί ως τελικός στόχος η εκτέλεση ενός λογισμικού -απομονωμένο από το υπόλοιπο σύστημα, αυτό επιτυγχάνεται με δύο διαφορετικούς -τρόπους, αφού οι εικονικές μηχανές και τα δοχεία χρησιμοποιούν διαφορετικού -είδους εικονικοποίηση. Στην περίπτωση των δοχείων δεν έχουμε απομόνωση μηχανών -αλλά διεργασιών. Γεγονός που συμβάλλει στην αποφυγή της επιβάρυνσης του -συστήματος που θα επιβάλλονταν από τις διεργασίες του υπερ-επόπτη και της -καθυστέρησης που θα υπήρχε για την εκκίνηση ενός ολόκληρου λειτουργικού -συστήματος. Επιπλέον, η μη χρήση τεχνολογιών εικονικοποίησης σε επίπεδο υλικού -αυξάνει την μεταφερσιμότητα των δοχείων αφού σε μια εικόνα δοχείου μπορούν να -ορισθούν όλες οι απαραίτητες εξαρτήσεις ενός λογισμικού και να αναδημιουργηθούν -σε οποιοδήποτε περιβάλλον νέφους. - Παρ' όλο που πολλές φορές τα δοχεία συγχέονται με τις εικονικές μηχανές, οι δύο αυτές έννοιες έχουν αρκετές διαφορές στην αρχιτεκτονική τους. Στην παραδοσιακή εικονικοποίηση είτε αυτή γίνεται στις υπάρχουσες υποδομές μιας επιχείρησης είτε σε ένα περιβάλλον νέφους, ένας υπερ-επόπτης πρέπει να χρησιμοποιηθεί για να -εικονικοποιήσει φυσικό υλικό. Κάθε εικονική μηχανή έχει ένα δικό της -λειτουργικό σύστημα και ένα εικονικό αντίγραφο του υλικού που απαιτεί για να -εκτελεστεί μαζί με μια εφαρμογή, τις βιβλιοθήκες και τις εξαρτήσεις της. Από -την άλλη, ένα δοχείο αντί να εικονικοποιήσει το υλικό, εικονικοποιεί το -λειτουργικό σύστημα ούτως ώστε κάθε δοχείο να περιέχει μόνο την εφαρμογή, τις -βιβλιοθήκες και τις εξαρτήσεις της \cite{ibmContainerVsVm}. +εικονικοποιήσει φυσικό υλικό. Αυτό συμβαίνει διότι μια εικονική μηχανή είναι +μια πλήρης αναπαράσταση ενός φυσικού διακομιστή. Από την άλλη, ένα δοχείο αντί +να εικονικοποιήσει το υλικό, εικονικοποιεί το λειτουργικό σύστημα, ή αλλιώς +εξομοιώνει μονάχα το περιβάλλον εκτέλεσης ενός λογισμικού. Άρα, εάν θεωρηθεί ως +τελικός στόχος η εκτέλεση ενός λογισμικού απομονωμένο από το υπόλοιπο σύστημα, +αυτό επιτυγχάνεται με δύο διαφορετικούς τρόπους, αφού οι εικονικές μηχανές και +τα δοχεία χρησιμοποιούν διαφορετικού είδους εικονικοποίηση. Στην περίπτωση των +δοχείων δεν έχουμε απομόνωση μηχανών αλλά διεργασιών. Γεγονός που συμβάλλει +στην αποφυγή της επιβάρυνσης του συστήματος που θα επιβάλλονταν από τις +διεργασίες του υπερ-επόπτη και της καθυστέρησης που θα υπήρχε για την εκκίνηση +ενός ολόκληρου λειτουργικού συστήματος. Επιπλέον, η μη χρήση τεχνολογιών +εικονικοποίησης σε επίπεδο υλικού αυξάνει την μεταφερσιμότητα των δοχείων, +καθώς σε μια εικόνα δοχείου μπορούν να ορισθούν όλες οι απαραίτητες εξαρτήσεις +ενός λογισμικού και τα δοχεία μπορούν να αναδημιουργηθούν και να εκτελεστούν σε +οποιοδήποτε περιβάλλον νέφους είναι ήδη εγκατεστημένη μια μηχανή δοχείων (όπως +το Docker) όπου μάλιστα η ταχύτητα δημιουργίας τους είναι πολύ πιο γρήγορη σε +σχέση με αυτή των εικονικών μηχανών λόγω του μικρού μεγέθους και των ελάχιστων +μη λειτουργικών απαιτήσεών τους. + +Ένας από τους χαρακτηρισμούς των δοχείων είναι η \textquote{ελαφρότητά} τους σε +σχέση με μια εικονική μηχανή λόγω της ικανότητάς τους να μοιράζονται τον πυρήνα +του ίδιου λειτουργικού συστήματος (ΛΣ). Η απαίτηση μιας εικονικής μηχανής να +χρειάζεται, εικονικό αντίγραφο του υλικού, δικό της ΛΣ και εγκατεστημένα πακέτα +προς υποστήριξη ενός λογισμικού την καθιστά μεγαλύτερη σε μέγεθος και λιγότερο +αποδοτική στη χρήση πόρων του συστήματος. Απεναντίας, τα δοχεία περιέχουν +μονάχα το λογισμικό προς εκτέλεση και τις εξαρτήσεις (βιβλιοθήκες και +προγράμματα) που χρειάζεται προκειμένου αυτό να είναι λειτουργικό +\cite{ibmContainerVsVm}. Επομένως, είναι εγγενώς μικρότερα σε μέγεθος και έχουν +και μικρότερο χρόνο εκκίνησης. Πράγμα που τραβάει το ενδιαφέρον των +επιχειρήσεων διότι αυτό μεταφράζεται σε υψηλότερη αποδοτικότητα \& βαθμό χρήσης +των διακομιστών και επομένως μειωμένα κόστη λειτουργίας. Επίσης, τα δοχεία +κλιμακώνονται αρκετά πιο γρήγορα σε σχέση με τις εικονικές μηχανές, +επιτρέποντας την αντίδραση σε οποιαδήποτε διακύμανση του φόρτου εργασίας. \noindent Το Σχήμα \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}} + \includegraphics[width = \textwidth]{Figures/ContainersVsVMs/containers-vs-vms.jpg} + \captionof{figure}{Χρήση εικονικοποίησης έναντι δοχείων \cite{containersVsVMs}} \label{fig:containerVsVm} \end{figure} \vspace*{-30pt} @@ -1950,11 +1996,11 @@ Docker Swarm \cite{dockerSwarm}, που παρέχουν αυτή την δυν \clearpage -Η απουσία του εικονικού λειτουργικού υλικού είναι που καθιστά τα δοχεία -γρήγορα, φορητά και μικρότερα σε μέγεθος. Για να γίνει πιο εμφανής η διαφορά, -σύμφωνα με τη Red Hat \cite{redhatContainerVsVm}, το μέγεθος των εικονικών -μηχανών είναι της τάξεως των gigabyte ενώ των δοχείων είναι της τάξεως των -megabyte. Πολλές φορές, όπως αναφέρεται και σε μια δημοσίευση +Η απουσία του εικονικού λειτουργικού υλικού είναι το χαρακτηριστικό που καθιστά +τα δοχεία γρήγορα, φορητά και μικρότερα σε μέγεθος. Για να γίνει πιο εμφανής η +διαφορά, σύμφωνα με τη Red Hat \cite{redhatContainerVsVm}, το μέγεθος των +εικονικών μηχανών είναι της τάξεως των gigabyte ενώ των δοχείων είναι της +τάξεως των megabyte. Πολλές φορές, όπως αναφέρεται και σε μια δημοσίευση \cite{ibmContainerVsVm} της \citeauthor{ibmContainerVsVm}, τα δοχεία χρησιμοποιούνται για εφαρμογές αρχιτεκτονικής μικρο-υπηρεσιών (microservices), όπου κάθε ξεχωριστό κομμάτι (δηλ. μικρο-υπηρεσία) αντιπροσωπεύει ένα συστατικό @@ -1973,7 +2019,7 @@ megabyte. Πολλές φορές, όπως αναφέρεται και σε μ (δηλ. εικονικών ή φυσικών μηχανών), όπως είναι το Kubernetes ή το Docker Swarm. Από την άλλη, αν είναι επιθυμητή η ενορχήστρωση των δοχείων μιας εφαρμογής σε έναν πόρο (φυσικό ή εικονικό μηχάνημα), τότε είναι δυνατή η χρήση εργαλείων -όπως το Docker Compose. +όπως το Docker Compose \footfullcite{dockerCompose}. Το μόνο μειονέκτημα της τεχνολογίας των δοχείων, το οποίο δεν επηρεάζει κατά πολύ τη χρήση τους, είναι το γεγονός ότι δοχεία που δημιουργήθηκαν για να @@ -1981,21 +2027,8 @@ megabyte. Πολλές φορές, όπως αναφέρεται και σε μ Windows δε μπορούν να εκτελεστούν σε ένα περιβάλλον με τον πυρήνα του Linux και το ίδιο ισχύει και αντιστρόφως \cite{containerOSlimitations}. -Εν γένει, τα βασικότερα πλεονεκτήματα των δοχείων σε σχέση με τις εικονικές -μηχανές είναι ο διαμοιρασμός του πυρήνα του λειτουργικού συστήματος φιλοξενίας -και η μεταφερσιμότητά τους. Το γεγονός ότι μοιράζονται τον ίδιο πυρήνα έχει ως -αποτέλεσμα να μην χρειάζεται να απονεμηθούν πόροι για εικονικοποίηση μηχανών με -σκοπό την στέγαση ενός ολόκληρου ξεχωριστού λειτουργικού συστήματος (όπως -γίνεται στις εικονικές μηχανές). Επιπλέον, τα δοχεία μπορούν να εκτελεστούν σε -οποιοδήποτε περιβάλλον είναι ήδη εγκατεστημένη μια μηχανή δοχείων (όπως το -Docker) όπου μάλιστα η ταχύτητα δημιουργίας τους είναι πολύ πιο γρήγορη σε -σχέση με αυτή των εικονικών μηχανών λόγω του μικρού μεγέθους και των ελάχιστων -μη λειτουργικών απαιτήσεών τους. - -\clearpage - -Τα δοχεία προσφέρουν μια σειρά από πλεονεκτήματα σε σχέση με τις παραδοσιακές -εικονικές μηχανές. Αυτά, σύμφωνα με την +\noindent Τα δοχεία προσφέρουν μια σειρά από πλεονεκτήματα σε σχέση με τις +παραδοσιακές εικονικές μηχανές. Αυτά, σύμφωνα με την \citeauthor{ibmContainerizationDefinition} \cite{ibmContainerizationDefinition}, μπορούν να συνοψιστούν ως εξής: @@ -2011,7 +2044,9 @@ Docker) όπου μάλιστα η ταχύτητα δημιουργίας το αυτό δίνει στα δοχεία πολύ μεγαλύτερο προβάδισμα στον τομέα της μεταφερσιμότητας σε σχέση με τις εικονικές μηχανές. - \item \textbf{Ευελιξία}: +\clearpage + + \item \textbf{Εύκολη και συνεπής χρήση}: Το Docker Engine ξεκίνησε το βιομηχανικό πρότυπο Docker για τη χρήση δοχείων προσφέροντας απλά εργαλεία ανάπτυξης και μια καθολική @@ -2042,8 +2077,6 @@ Docker) όπου μάλιστα η ταχύτητα δημιουργίας το αποσφαλμάτωση και εν τέλει στην πιο γρήγορη ανάπτυξη και συντήρηση προγραμμάτων. -\clearpage - \item \textbf{Μέγιστη χρηστικότητα πόρων}: Το γεγονός ότι τα δοχεία μοιράζονται το ίδιο ΛΣ και κοινά κομμάτια μιας @@ -2055,14 +2088,21 @@ Docker) όπου μάλιστα η ταχύτητα δημιουργίας το \item \textbf{Ευκολία διαχείρισης}: - Τα δοχεία σε ένα σύστημα είναι εύκολα διαχειρίσιμα με απλές εντολές. Η - διαδικασία ενημέρωσης, εκκίνησης, τερματισμού και εν γένει διαχείρισής - τους είναι γρήγορη και απλή. Ακόμα και για μια επιχείρηση με πολλούς - διακομιστές, όπου ο αντίστοιχος φόρτος διαχείρισης θα ήταν αρκετά - υψηλός, υπάρχουν πλατφόρμες ενορχήστρωσης δοχείων που πέραν της - αυτοματοποίησης αυτών των λειτουργιών διαχείρισης, βοηθάνε και στην - κλιμάκωση και διαχείριση του φόρτου εργασίας των δοχειοποιημένων - εφαρμογών τους κατά μήκος πολλαπλών διακομιστών. + Με την χρήση των δοχείων έχουμε και την δυνατότητα αυτοματοποίησης της + κλιμάκωσης \& διαχείρισης δοχειοποιημένων εφαρμογών κατά μήκος + πολλαπλών διακομιστών (εικονικών ή φυσικών) μέσω πλατφορμών + ενορχήστρωσης δοχείων. Δίχως την υποστήριξη τέτοιου είδους πλατφορμών, + ο φόρτος διαχείρισης θα ήταν αρκετά υψηλός και η διαχείριση του φόρτου + εργασίας των δοχειοποιημένων εφαρμογών σε περιβάλλοντα με πολλούς + διακομιστές θα απαιτούσε ειδικές γνώσεις για να πραγματοποιηθεί. + Παράλληλα, η διαχείριση των υποκείμενων φυσικών διακομιστών μπορεί να + αυτοματοποιηθεί μέσω της χρήσης διαχειριζόμενων εκδόσεων των πλατφορμών + (managed container orchestration platforms) αυτών που προσφέρονται από + παρόχους νέφους. Επιπρόσθετα, η διαχείριση δοχείων σε ένα μόνο σύστημα + είναι εξίσου εύκολη και απλή. Οι διαδικασίες ενημέρωσης, εκκίνησης, + τερματισμού και εν γένει διαχείρισης των δοχείων πραγματοποιούνται με + απλές εντολές, καθιστώντας την χρήση δοχείων προσιτή σε κάθε επιπέδου + προγραμματιστή. \item \textbf{Ασφάλεια}: @@ -2081,7 +2121,7 @@ Docker) όπου μάλιστα η ταχύτητα δημιουργίας το \subsection{Διαφορές σε υλοποιήσεις της δοχειοποίησης} \label{containerizationImplementationDifferences} -Στην Ενότητα \ref{containerizationDefinition} αναφέραμε την έννοια της +Στην Ενότητα \ref{containersAndContainerization} αναφέραμε την έννοια της δοχειοποίησης. Η ραγδαία αύξηση του ενδιαφέροντος και της χρήσης δοχείων οδήγησε στην ανάγκη για πρότυπα γύρω από την τεχνολογία αυτή. Έτσι, η Open Container Initiative (OCI), η οποία ιδρύθηκε τον Ιούνιο του 2015 από την Docker @@ -2132,16 +2172,6 @@ Docker για container runtime προτού υιοθετήσει το runC. Ο ανάπτυξη και επομένως δεν θα συνεχίζει να ανταγωνίζεται παρόμοια εργαλεία στον κλάδο των δοχείων. -Στην Ενότητα \ref{virtualizationImplementations} αναφέραμε την εικονικοποίηση -λειτουργικού συστήματος και στην \ref{containerManagement} το LXC. Αποτελεί και -αυτό ένα container runtime, με την διαφορά ότι αντί να επικεντρώνεται στην -δοχειοποίηση εφαρμογών, όπως κάνει το Docker χρησιμοποιώντας το runC, ο κύριος -σκοπός της δημιουργίας του ήταν η δοχειοποίηση λειτουργικών συστημάτων. Αν και -χρησιμοποιείται ακόμα στις μέρες μας, η δημοτικότητα του έχει πέσει από τότε -που το ενδιαφέρον τον επιχειρήσεων στράφηκε στην δοχειοποίηση εφαρμογών, με -αποτέλεσμα την ανάγκη δημιουργίας εργαλείων που να διευκολύνουν την διαδικασία -αυτή, η οποία οδήγησε στην δημιουργία του Docker. - Σχετικά με τα container runtimes runC και containerd, το πρώτο είναι ένα container runtime χαμηλού επιπέδου ενώ το δεύτερο υψηλού επιπέδου. Δημιουργήθηκαν και τα δύο από το Docker σε διαφορετικές χρονικές περιόδους. Από @@ -2157,9 +2187,9 @@ Docker να δουλεύουν ευκολότερα σε διαφορετικέ τον πυρήνα του Linux προκειμένου να χρησιμοποιήσει χαρακτηριστικά όπως, οι ομάδες ελέγχου (control groups), για να δημιουργήσει δοχεία. -\subsection{Ασφάλεια στο Docker} \label{dockerSecurityMore} +\section{Ασφάλεια στο Docker} \label{dockerSecurityMore} -Οι εφαρμογές σε δοχεία έχουν ένα εγγενές επίπεδο ασφαλείας αφού μπορούν να +Οι εφαρμογές σε δοχεία έχουν ένα εγγενές επίπεδο ασφαλείας, αφού μπορούν να εκτελούνται ως απομονωμένες διεργασίες και να λειτουργούν ανεξάρτητα από τα υπόλοιπα δοχεία. Αν εξασφαλιζόταν πλήρης απομόνωση, θα μπορούσε να αποτραπεί, στην περίπτωση μόλυνσης από κακόβουλο λογισμικό, ο κίνδυνος να επηρεαστούν άλλα @@ -2172,7 +2202,7 @@ Docker να δουλεύουν ευκολότερα σε διαφορετικέ Σχετικά με τις εικόνες δοχείων που αναφέρθηκαν στο \ref{virtualizationTechnologiesIntroduction} και το -\ref{containersAndContainerImages}, τα κομμάτια δηλαδή από τα οποία μια +\ref{containersAndContainerization}, τα κομμάτια δηλαδή από τα οποία μια εφαρμογή σε μορφή δοχείου αποτελείται και αντιστοιχούν σε καλούπια μέσω των οποίων παράγονται τα δοχεία της εφαρμογής, η ασφάλεια δεν είναι πάντα εγγυημένη. Αυτό είναι κάτι που συμβαίνει διότι ο καθένας έχει την δυνατότητα να @@ -2183,7 +2213,8 @@ Docker να δουλεύουν ευκολότερα σε διαφορετικέ μέτρα προστασίας όπως η χρήση εικόνων προερχόμενες μόνο από εγκεκριμένες πηγές, δηλαδή να υπάρχει εμπιστοσύνη ανάμεσα στον προμηθευτή μιας εικόνας δοχείου και τον τελικό χρήστη. Επιπροσθέτως, πριν την χρήση μιας εικόνας δοχείου, πρέπει -αυτή να εξετάζεται με εργαλεία ανίχνευσης τρωτοτήτων, καθώς και να έχει +αυτή να εξετάζεται με εργαλεία ανίχνευσης τρωτοτήτων (όπως το Snyk +\footfullcite{snyk} ή το Trivy \footfullcite{trivy}), καθώς και να έχει πραγματοποιηθεί επαρκώς σκλήρυνση του Docker ώστε να μειωθούν οι επιπτώσεις κατά την χρήση της εαν περιέχει κακόβουλο λογισμικό. @@ -2196,7 +2227,7 @@ Docker να δουλεύουν ευκολότερα σε διαφορετικέ περιορισμό χρήσης πόρων και του εύρους του συστήματος στο οποίο έχει πρόσβαση η μηχανή δοχείων \cite{ibmContainerizationDefinition}. -\subsubsection{Μετριασμός επιθέσεων στο Docker με χρήση χώρων ονομάτων} \label{dockerAttackVectorMitigation} +\subsection{Μετριασμός επιθέσεων στο Docker με χρήση χώρων ονομάτων} \label{dockerAttackVectorMitigation} Με βάση το μοντέλο που περιγράφει το \cite{reshetova2014security}, όπως αναφέρεται στο \cite{bui2015analysis}, έχουμε ένα μηχάνημα στο οποίο @@ -2264,7 +2295,7 @@ Docker να δουλεύουν ευκολότερα σε διαφορετικέ Αυτές οι δυνατότητες υποστηρίζονται από το Docker και μπορεί κανείς να τις εκμεταλλευτεί για να προστατεύσει το περιβάλλον του από επιθέσεις. Επιπλέον, υπάρχει και η δυνατότητα υποστήριξης Kernel Security Modules, όπως τα SELinux -\cite{selinux} και AppArmor \footfullcite{apparmor} αλλά και του Seccomp +\cite{selinux} και AppArmor \footfullcite{apparmor} αλλά και του seccomp \cite{seccomp} (στην περίπτωση χρήσης LXC), καθώς επίσης και συμβατότητα με Linux capabilities (ικανότητες), που θα μπορούσαν να εισάγουν ένα ακόμα επίπεδο ασφαλείας, αν χρησιμοποιηθούν σωστά, περιορίζοντας τα δικαιώματα των διεργασιών @@ -2276,7 +2307,7 @@ Linux capabilities (ικανότητες), που θα μπορούσαν να να χρησιμοποιήσουν όσες δυνατότητες είναι απαραίτητες προκειμένου να ανταπεξέλθουν σε κάθε επίθεση ανάλογα με το περιβάλλον και τις ανάγκες τους. -\subsubsection{Συχνά είδη επιθέσεων σε δοχεία και μέθοδοι πρόληψής τους} \label{commonAttacksAndPrevention} +\subsection{Συχνά είδη επιθέσεων σε δοχεία και μέθοδοι πρόληψής τους} \label{commonAttacksAndPrevention} Μερικά είδη επιθέσεων σε δοχεία με τους τρόπους αντιμετώπισής τους, όπως αναφέρονται στο \cite{yasrab2018mitigating}, είναι τα εξής: @@ -2289,18 +2320,20 @@ Linux capabilities (ικανότητες), που θα μπορούσαν να διεργασιών των δοχείων. Λόγω του διαμοιρασμού του πυρήνα του συστήματος με κάθε δοχείο το οποίο εκτελείται σε αυτό, εάν οποιοδήποτε από αυτά τεθεί υπό τον έλεγχο ενός κακόβουλου χρήστη, αυτός μπορεί δυνητικά να - πάρει τον έλεγχο του συστήματος και όλων των δοχείων αυτού. Ο τρόπος - αντιμετώπισης που προτείνεται είναι η χρήση SELinux ή AppArmor κατά την - εκτέλεση δοχείων σε συνδυασμό με εκμετάλλευση των user namespaces. - Επιπλέον, συνίσταται να μην εκτελούνται εφαρμογές με δικαιώματα - διαχειριστικού λογαριασμού. Μερικά ακόμα μέτρα προστασίας που μπορεί να - παρθούν αλλά πιθανώς να μην είναι εφικτά γιατί ενδεχομένως να πηγαίνουν - ενάντια στις λειτουργίες του εκάστοτε δοχείου, είναι να τεθεί το - σύστημα του σε επίπεδο πρόσβασης που επιτρέπει μόνο την ανάγνωση των - αρχείων, να απενεργοποιηθεί η επικοινωνία μεταξύ δοχείων και να - αποφευχθεί η εγκατάσταση περιττών προγραμμάτων σε αυτά. - -\clearpage + πάρει τον έλεγχο του συστήματος και όλων των δοχείων αυτού. Ορισμένοι + τρόποι με τους οποίους αυτό έχει επιτευχθεί στο παρελθόν, ήταν μέσω + εκμετάλλευσης μιας ευπάθειας των ομάδων ελέγχου \cite{kernexpcgroup} + και μέσω μιας ευπάθειας ονόματι \textquote{Dirty Pipe} + \cite{dirtyPipe}. Η μέθοδος αντιμετώπισης που προτείνεται είναι η χρήση + SELinux ή AppArmor κατά την εκτέλεση δοχείων σε συνδυασμό με + εκμετάλλευση των user namespaces. Επιπλέον, συνίσταται να μην + εκτελούνται εφαρμογές με δικαιώματα διαχειριστικού λογαριασμού μέσα σε + δοχεία. Υπάρχουν και άλλα μέτρα προστασίας που μπορεί να παρθούν αλλά + πιθανόν να μην είναι εφικτά διότι ενδέχεται να πηγαίνουν ενάντια στις + λειτουργίες του εκάστοτε δοχείου. Αυτά είναι, να τεθεί το σύστημα του + σε επίπεδο πρόσβασης που επιτρέπει μόνο την ανάγνωση των αρχείων, να + απενεργοποιηθεί η επικοινωνία μεταξύ δοχείων και να αποφευχθεί η + εγκατάσταση περιττών προγραμμάτων σε αυτά. \item \textbf{Άρνηση υπηρεσίας}: @@ -2320,16 +2353,19 @@ Linux capabilities (ικανότητες), που θα μπορούσαν να \item \textbf{Αποδράσεις Δοχείων (Container Breakouts)}: - Σε τέτοιου είδους επιθέσεις, ένας επιτιθέμενος προσπαθεί αφού απέκτησε - πρόσβαση σε ένα δοχείο, να καταφέρει μέσω αυτού να έχει πρόσβαση στα - αρχεία του κύριου συστήματος. Αυτό μπορεί να συμβεί με τη χρήση μιας - συνάρτησης που απαιτεί δικαιώματα διαχειριστικού λογαριασμού μέσα από - το δοχείο προκειμένου να κάνει κλήση μιας ικανότητας (capability) στην - οποία είχε πρόσβαση εξ αρχής. Σύμφωνα με το Docker, η μόνη έκδοσή του + Σε τέτοιου είδους επιθέσεις, ένας επιτιθέμενος προσπαθεί αφότου + απέκτησε πρόσβαση σε ένα δοχείο, να καταφέρει μέσω αυτού να έχει + πρόσβαση στα αρχεία του κύριου συστήματος. Αυτό μπορεί να συμβεί με τη + χρήση της συνάρτησης \textquote{open\_by\_handle\_at()} που απαιτεί + δικαιώματα διαχειριστικού λογαριασμού μέσα από το δοχείο, προκειμένου + να κάνει κλήση της ικανότητας (capability) + \textquote{CAP\_DAC\_READ\_SEARCH} στην οποία είχε πρόσβαση εξ αρχής + \cite{yasrab2018mitigating}. Σύμφωνα με το Docker, η μόνη έκδοσή του που μπορούσε να επηρεαστεί από αυτή την ευπάθεια ήταν η 0.11 και στην επόμενη διορθώθηκε. Για την πρόληψη μελλοντικών μεθόδων διεκπεραίωσης τέτοιου είδους επίθεσης, συνίσταται να τίθενται τα δοχεία και οι - αποθηκευτικοί τους χώροι σε κατάσταση μονάχα ανάγνωσης, καθώς και να + αποθηκευτικοί τους χώροι σε κατάσταση μονάχα ανάγνωσης, να αποφεύγεται + η χρήση διαχειριστικού λογαριασμού μέσα τα δοχεία, καθώς και να αποφεύγεται η χρήση της παραμέτρου \textquote{privileged}. \item \textbf{Δηλητηριασμένες εικόνες δοχείων}: @@ -2338,13 +2374,13 @@ Linux capabilities (ικανότητες), που θα μπορούσαν να για το οποίο έχουν βρεθεί (πλέον) ευπάθειες. Ο τωρινός τρόπος ελέγχου εγκυρότητάς τους βασίζεται μονάχα στην παρουσία ενός υπογεγραμμένου manifest αλλά δε γίνεται ποτέ αυθεντικοποίηση του αθροίσματος ελέγχου - (checksum) της κάθε εικόνας. Αυτό αφήνει ανοιχτό το ενδεχόμενο ένας - επιτιθέμενος να διαδώσει οποιαδήποτε εικόνα μαζί με το υπογεγραμμένο - manifest της. Επιβάλλεται οι χρήστες να κατεβάζουν εικόνες από - εγκεκριμένους προμηθευτές και επιπρόσθετα να τις ελέγχουν με κατάλληλα - εργαλεία ανίχνευσης τρωτοτήτων προτού τις χρησιμοποιήσουν. - -\clearpage + (checksum) της κάθε εικόνας από το σύστημα. Αυτό αφήνει ανοιχτό το + ενδεχόμενο ένας επιτιθέμενος να διαδώσει οποιαδήποτε εικόνα μαζί με το + υπογεγραμμένο manifest της. Επιβάλλεται λοιπόν, οι χρήστες να + κατεβάζουν εικόνες από εγκεκριμένους προμηθευτές και επιπρόσθετα να τις + ελέγχουν με κατάλληλα εργαλεία ανίχνευσης τρωτοτήτων προτού τις + χρησιμοποιήσουν. Τέλος, πρέπει οι ίδιοι να ελέγχουν το checksum ώστε να + εξακριβώνεται πριν την χρήση αν είναι όντως η εικόνα που ζητήθηκε. \item \textbf{Απόκτηση μυστικών κωδικών/κλειδιών}: @@ -2363,40 +2399,49 @@ Linux capabilities (ικανότητες), που θα μπορούσαν να Σε μια τέτοια επίθεση ένας κακόβουλος χρήστης προσπαθεί να μπει ανάμεσα στην επικοινωνία δύο οντοτήτων με σκοπό να αλλοιώσει, να υποκλέψει ή να - παρακολουθεί πληροφορίες. Το καλύτερο αντίμετρο είναι η απομόνωση + παρακολουθεί πληροφορίες. Με βάση το CVE-2020-13401 που αναφέρεται στο + \cite{dockermitm}, μετά από παραβίαση ενός δοχείου, εάν αυτό εκτελείται + με την ικανότητα \textquote{CAP\_NET\_RAW}, τότε μπορεί ένας + επιτιθέμενος να δημιουργήσει διαφημίσεις δρομολογητών IPv6 και κατά + συνέπεια, να παραποιήσει εξωτερικούς κεντρικούς υπολογιστές IPv6, ώστε + να αποκτήσει ευαίσθητες πληροφορίες ή να προκαλέσει άρνηση παροχής + υπηρεσιών. Το καλύτερο αντίμετρο αυτής της επίθεσης είναι η απομόνωση δικτύου. Πρέπει να γίνει ρύθμιση των δοχείων με τέτοιο τρόπο ώστε αυτά να μην έχουν πρόσβαση στη δικτυακή επικοινωνία του κύριου μηχανήματος ή άλλων δοχείων. Αυτά επιτυγχάνονται με χρήση network namespaces, καθώς και με την ορθότερη ρύθμιση των API που χρησιμοποιεί το Docker για την - επικοινωνία μέσω δικτύου. + επικοινωνία μέσω δικτύου. Τέλος, πρέπει να χρησιμοποιούνται ασφαλή + πρωτόκολλα επικοινωνίας με αμφίδρομη αυθεντικοποίηση. \item \textbf{Πλαστογράφηση ARP (ARP spoofing)}: Σε μια επίθεση πλαστογράφησης Address Resource Protocol (ARP), ο επιτιθέμενος επιχειρεί να στείλει ψεύτικα ARP μηνύματα σε ένα δίκτυο - τοπικής περιοχής (Local Area Network - LAN). Είναι πιθανό να - προσποιηθεί πως η συσκευή του είναι μια από τις συσκευές της - επιχείρησης, αλλάζοντας τη MAC διεύθυνσή του στην IP μιας συσκευής που - το σύστημα αναγνωρίζει. Επομένως, το σύστημα της επιχείρησης, θα - συμπεριφέρεται στην συσκευή του επιτιθέμενου με τον ίδιο τρόπο που θα - συμπεριφερόταν στην αυθεντική συσκευή. Δηλαδή, στέλνοντας σε αυτόν όλα - τα πακέτα και τα δεδομένα που προορίζονταν για εκείνη. Το Docker - χρησιμοποιεί το ARP για να κάνει την αντιστοίχιση IPv4 σε MAC - διευθύνσεις, οι οποίες χρησιμοποιούνται από την εικονική γέφυρα δικτύου - για να διανέμουν σωστά τα πλαίσια (frames) Ethernet αφού δεν υπάρχει - φίλτρο για τα πακέτα ARP και επομένως κανένας μηχανισμός άμυνας. Γι' - αυτό τον λόγο ένα δοχείο μπορεί να προσποιηθεί ότι είναι ένα άλλο ή - ακόμα και το κύριο μηχάνημα. Στην περίπτωση παραβίασης ενός δοχείου, - υπάρχει κίνδυνος ο επιτιθέμενος να υποκλέψει μυστικά της επιχείρησης ή - των τελικών χρηστών της υπηρεσίας που η επιχείρηση προσφέρει. Ένας από - τους τρόπους που βοηθάει στην αποφυγή τέτοιας επίθεσης είναι η εκτέλεση - δοχείων δίχως το NET\_RAW capability, αφού έτσι τα προγράμματα μέσα στο - δοχείο δε θα μπορούν να δημιουργήσουν PF\_PACKET sockets και θα ήταν - αδύνατη η διεκπεραίωση της επίθεσης. Βέβαια, αυτή η μέθοδος έχει - μειονεκτήματα αφού μπορεί αυτή η ικανότητα να ήταν άκρως απαραίτητη για - την ορθή λειτουργία της υπηρεσίας. Επομένως, μια εναλλακτική μέθοδος - προστασίας είναι η χρήση \textquote{ebtables} για φιλτράρισμα πλαισίων - Ethernet ούτως ώστε ARP πακέτα με λάθος πρωτόκολλο αποστολέα ή - διεύθυνση MAC να ανιχνεύονται εγκαίρως και να απορρίπτονται. + τοπικής περιοχής (Local Area Network - LAN). Με αυτόν τον τρόπο, είναι + πιθανό να προσποιηθεί πως η συσκευή του είναι μια από τις συσκευές της + επιχείρησης, αφού πλέον η MAC διεύθυνσή του, αντιστοιχεί στην MAC μιας + συσκευής της οποίας η IP αναγνωρίζεται από το σύστημα \cite{arpdocker}. + Επομένως, το σύστημα της επιχείρησης, θα συμπεριφέρεται στην συσκευή + του επιτιθέμενου με τον ίδιο τρόπο που θα συμπεριφερόταν στην αυθεντική + συσκευή. Δηλαδή, στέλνοντας σε αυτόν όλα τα πακέτα και τα δεδομένα που + προορίζονταν για εκείνη. Το Docker χρησιμοποιεί το ARP για να κάνει την + αντιστοίχιση IPv4 σε MAC διευθύνσεις, οι οποίες χρησιμοποιούνται από + την εικονική γέφυρα δικτύου για να διανέμουν σωστά τα πλαίσια (frames) + Ethernet, καθώς δεν υπάρχει φίλτρο για τα πακέτα ARP και επομένως + κανένας μηχανισμός άμυνας. Γι' αυτό τον λόγο ένα δοχείο μπορεί να + προσποιηθεί ότι είναι ένα άλλο ή ακόμα και το κύριο μηχάνημα. Ακόμα και + χωρίς την παραβίαση ενός δοχείου, αλλά έχοντας πρόσβαση στο τοπικό + δίκτυο, υπάρχει κίνδυνος ο επιτιθέμενος να υποκλέψει μυστικά της + επιχείρησης ή των τελικών χρηστών της υπηρεσίας που η επιχείρηση + προσφέρει. Ένας από τους τρόπους αποφυγής μιας τέτοιας επίθεσης, είναι + η εκτέλεση δοχείων δίχως την ικανότητα \textquote{NET\_RAW}, αφού έτσι + τα προγράμματα μέσα σε ένα δοχείο δε θα μπορούν να δημιουργήσουν + PF\_PACKET sockets και θα ήταν αδύνατη η διεκπεραίωση της επίθεσης. + Βέβαια, αυτή η μέθοδος έχει και μειονεκτήματα διότι αυτή η ικανότητα + μπορεί να ήταν άκρως απαραίτητη για την ορθή λειτουργία της υπηρεσίας. + Επομένως, μια εναλλακτική μέθοδος προστασίας είναι η χρήση + \textquote{ebtables} για φιλτράρισμα πλαισίων Ethernet, ούτως ώστε ARP + πακέτα με λάθος πρωτόκολλο αποστολέα ή διεύθυνση υλικού να ανιχνεύονται + εγκαίρως και να απορρίπτονται. \end{itemize} diff --git a/Chapters/3.RelevantWork.tex b/Chapters/3.RelevantWork.tex index d425861..7152b61 100644 --- a/Chapters/3.RelevantWork.tex +++ b/Chapters/3.RelevantWork.tex @@ -3,25 +3,31 @@ \noindent Με την πάροδο των χρόνων και τη ραγδαία αύξηση ενδιαφέροντος προς τον κλάδο της υπολογιστικής νέφους, άρχισε να γίνεται όλο και πιο επιτακτική η ανάγκη για αυτοματοποιημένο στήσιμο και προστασία των υποδομών των -επιχειρήσεων. Η χρήση τεχνολογιών εικονικοποίησης και η άνοδος υπηρεσιών IaaS, -έχει ελαφρύνει τον φόρτο εργασίας όσον αφορά το στήσιμο των υποδομών αυτών, -αφού πλέον υπάρχουν πολλά εργαλεία στα οποία γίνεται καθορισμός τους. Η -αυτοματοποίηση της ασφάλισής τους όμως είναι ακόμα σε πρώιμο στάδιο. Οι -περισσότερες υπηρεσίες που διατίθενται στους χρήστες κάνουν χρήση τεχνολογιών -εικονικοποίησης έμμεσα από τον πάροχο νέφους που χρησιμοποιούν και τεχνολογίες -δοχείων άμεσα από επιλογή τους λόγω της υπεροχής που παρέχουν στη διαχείρισή -τους. Όλες οι υπηρεσίες όμως είναι εν δυνάμει ευάλωτες σε επιθέσεις εάν δε +επιχειρήσεων. Η χρήση τεχνολογιών εικονικοποίησης και η άνοδος των υπηρεσιών +IaaS, έχει ελαφρύνει τον φόρτο εργασίας όσον αφορά το στήσιμο των υποδομών +αυτών, αφού πλέον υπάρχουν πολλά εργαλεία στα οποία γίνεται καθορισμός τους. +Πέραν από εργαλεία στα οποία δηλώνονται οι προδιαγραφές μιας εικονικής μηχανής +σε πραγματικό χρόνο με την χρήση παραμέτρων, υπάρχουν και άλλα που ανήκουν στην +οικογένεια εργαλείων IaC (Infrastructure as Code - Υποδομή ως κώδικας). Σε +αυτού του είδους τα εργαλεία, όλα τα χαρακτηριστικά μιας εικονικής μηχανής +δηλώνονται σε ένα αρχείο κειμένου και με βάση αυτό, ξεκινάει η διαδικασία +δημιουργίας τους. Η αυτοματοποίηση της ασφάλισης αυτών των εικονικών μηχανών +όμως, είναι ακόμα σε πρώιμο στάδιο. Οι περισσότερες υπηρεσίες που διατίθενται +στους χρήστες κάνουν χρήση τεχνολογιών εικονικοποίησης έμμεσα από τον πάροχο +νέφους που χρησιμοποιούν και τεχνολογίες δοχείων άμεσα από επιλογή τους λόγω +της υπεροχής που προσφέρουν στη διαχείριση και τη διασφάλιση των εφαρμογών +τους. Όλες οι υπηρεσίες όμως, είναι εν δυνάμει ευάλωτες σε επιθέσεις εάν δε ληφθούν τα απαραίτητα μέτρα προστασίας και αφήσουν ανοιχτά σημεία εισόδου στα συστήματά τους. Η παρούσα εργασία έχει ως στόχο την ανάπτυξη ενός εργαλείου που επιτυγχάνει την -αυτοματοποίηση τριών τομέων. Την επικοινωνία με τον πάροχο νέφους για την -αίτηση διάθεσης υπολογιστικών πόρων, την ασφάλιση των πόρων αυτών και τέλος την +αυτοματοποίηση τριών τομέων. Την επικοινωνία με παρόχους νέφους για την αίτηση +διάθεσης υπολογιστικών πόρων, την ασφάλιση των πόρων αυτών και τέλος, την εγκατάσταση, ασφάλιση και χρήση του Docker για τη διάθεση εφαρμογών που -βρίσκονται στο Docker Hub. Το επίσημο αποθετήριο του Docker. Στην ενότητα αυτή -θα γίνει αναφορά σε εργαλεία που έχουν αναπτυχθεί για έναν ή παραπάνω από -αυτούς τους τρεις τομείς και θα πραγματοποιηθεί σύγκρισή τους ανάλογα με τον -τρόπο λειτουργίας τους και τις δυνατότητες που παρέχουν. +βρίσκονται στο Docker Hub, δηλ. το επίσημο αποθετήριο εικόνων δοχείων του +Docker. Στην ενότητα αυτή θα γίνει αναφορά σε εργαλεία που έχουν αναπτυχθεί για +έναν ή παραπάνω από αυτούς τους τρεις τομείς και θα πραγματοποιηθεί σύγκρισή +τους ανάλογα με τον τρόπο λειτουργίας τους και τις δυνατότητες που παρέχουν. \section{Αυτοματοποίηση δημιουργίας εικονικών μηχανών} @@ -37,21 +43,20 @@ όταν αυτός χρειάζεται να πραγματοποιήσει ορισμένες παραμετροποιήσεις κατά την χρήση του. -\clearpage - \item \textbf{Ευκολία κατά την χρήση}: Το εργαλείο πρέπει να μπορεί να χρησιμοποιηθεί εύκολα από έναν χρήστη που έχει χρησιμοποιήσει στο παρελθόν εργαλεία γραμμής εντολών. Οι παράμετροί του πρέπει να ακολουθούν ένα μοτίβο που θα διευκολύνει την - κατανόηση της λειτουργίας τους και τον συνδυασμό τους για ένα επιθυμητό - αποτέλεσμα. + κατανόηση της σημασιολογίας τους και θα επιτρέπει τον συνδυασμό τους + για ένα επιθυμητό αποτέλεσμα. \item \textbf{Υποστήριξη μεγάλων ονομάτων στον κλάδο}: Το εργαλείο πρέπει να υποστηρίζει την επικοινωνία με τα νέφη μεγάλων - εταιρειών στον κλάδο της νεφο-υπολογιστικής, ώστε να είναι εύκολο για - να έναν χρήστη να παραμείνει στον πάροχο της επιλογής του. + εταιρειών στον κλάδο της νεφο-υπολογιστικής, τα οποία κατέχουν μεγάλο + μερίδιο της σχετικής αγοράς, ώστε να είναι εύκολο για να έναν χρήστη να + παραμείνει στον πάροχο της επιλογής του. \item \textbf{Ευκολία στην επέκταση}: @@ -62,7 +67,8 @@ \subsection{Εργαλεία δημιουργίας εικονικών μηχανών} -Τα εργαλεία με τα οποία θα γίνει σύγκριση περιγράφονται στην συνέχεια ως εξής: +Τα εργαλεία με τα οποία θα γίνει σύγκριση στον τομέα δημιουργίας εικονικών +μηχανών, περιγράφονται στην συνέχεια ως εξής: \begin{itemize} @@ -70,28 +76,29 @@ Το Terraform είναι ένα δημοφιλές εργαλείο ανοιχτού κώδικα που αναπτύχθηκε από την εταιρεία HashiCorp. Αποτελεί ένα εργαλείο, κατά την - χρήση του οποίου ο χρήστης καθορίζει τα χαρακτηριστικά της υποδομής που - θέλει να δημιουργήσει σε ένα αρχείο που ακολουθεί συγκεκριμένη σύνταξη. - Αυτό το εντάσσει στην κατηγορία \textquote{υποδομή ως κώδικας - (Infrastructure as Code - IaC)} και χρησιμοποιείται για τον καθορισμό - των υποδομών που θα χρησιμοποιηθούν για την στέγαση εφαρμογών. Το - Terraform υποστηρίζει πολλούς παρόχους νέφους και επιτρέπει την - αυτοματοποίηση της διαδικασίας δημιουργίας υποδομών σε αυτούς. Ο τρόπος - λειτουργίας του είναι αρκετά απλός. Αφού ο χρήστης έχει δημιουργήσει το - αρχείο που περιγράφει την υποδομή, το εκτελεί για να γίνουν οι - απαραίτητες ενέργειες. Έπειτα ο χρήστης μπορεί να αποδεσμεύσει τους - πόρους που δημιουργήθηκαν όταν δεν τους χρειάζεται πλέον. - -\clearpage + χρήση, του οποίου ο χρήστης καθορίζει τα χαρακτηριστικά της υποδομής + που θέλει να δημιουργήσει σε ένα αρχείο που ακολουθεί συγκεκριμένη + σύνταξη. Αυτό το χαρακτηριστικό, εντάσσει το Terraform στην κατηγορία + εργαλείων \textquote{υποδομή ως κώδικας (Infrastructure as Code - IaC)} + και χρησιμοποιείται για τον καθορισμό των υποδομών που θα + χρησιμοποιηθούν για την στέγαση εφαρμογών. Το Terraform υποστηρίζει + πολλούς παρόχους νέφους και επιτρέπει την αυτοματοποίηση της + διαδικασίας δημιουργίας υποδομών σε αυτούς. Ο τρόπος λειτουργίας του + είναι αρκετά απλός. Αφού ο χρήστης έχει δημιουργήσει το αρχείο που + περιγράφει την υποδομή, το εκτελεί για να γίνουν οι απαραίτητες + ενέργειες. Έπειτα, δημιουργούνται οι εικονικές μηχανές που + περιγράφονται στο αρχείο. Ο χρήστης μπορεί να αποδεσμεύσει τους πόρους + που δημιουργήθηκαν όταν δεν τους χρειάζεται πλέον και η διαδικασία της + αποδέσμευσης, είναι όσο απλή όσο και η δημιουργία τους. \item \textbf{Libcloud CLI} \footfullcite{libcloud-cli}: - Αποτελεί την δεύτερη τροποποιημένη έκδοση από ένα τρίτο πρόσωπο, ενός - προγράμματος που επιχειρούσε να επιτύχει την δημιουργία ενός εργαλείου - γραμμής εντολών που χρησιμοποιεί την βιβλιοθήκη libcloud για την - δημιουργία εικονικών μηχανών κατά μήκος διαφόρων παρόχων νέφους. Είναι - ένα εργαλείο γραμμής εντολών που απαιτεί αρχείο ρυθμίσεων μονάχα για - την αυθεντικοποίηση με τους παρόχους νέφους. + Το Libcloud CLI, αποτελεί την δεύτερη τροποποιημένη έκδοση από ένα + τρίτο πρόσωπο, ενός προγράμματος που επιχειρούσε να επιτύχει την + ανάπτυξη ενός εργαλείου γραμμής εντολών που χρησιμοποιεί την βιβλιοθήκη + libcloud για την δημιουργία εικονικών μηχανών κατά μήκος διαφόρων + παρόχων νέφους. Είναι ένα εργαλείο γραμμής εντολών που απαιτεί αρχείο + ρυθμίσεων μονάχα για την αυθεντικοποίηση με τους παρόχους νέφους. \end{itemize} @@ -105,7 +112,7 @@ \item \textbf{Σύγκριση με Terraform}: - Χρειάζεται την δημιουργία ενός αρχείου πριν την χρήση του και κάθε + Χρειάζεται την δημιουργία ενός αρχείου πριν την χρήση του, ενώ κάθε αλλαγή απαιτεί την τροποποίηση του αρχείου αυτού. Αυτό το καθιστά λιγότερο ευέλικτο σε σχέση με άλλα εργαλεία. Είναι σχετικά εύκολο στην χρήση όπως τα υπόλοιπα και δύναται να χρησιμοποιήσει τα νέφη όλων των @@ -114,23 +121,81 @@ \item \textbf{Σύγκριση με Libcloud CLI}: - Το δεύτερο πιο πρόσφατο εργαλείο που κάνει χρήση της βιβλιοθήκης - libcloud μετά από αυτό που προτείνει η διπλωματική εργασία. Είναι - αρκετά ευέλικτο και εύκολο στην χρήση, παρ' όλα αυτά πλέον υποστηρίζει - μονάχα έναν πάροχο νέφους, ο οποίος δεν αποτελεί δημοφιλή επιλογή - γενικότερα. Θα μπορούσε να επεκταθεί η λειτουργικότητά του αλλά έχει να - ανανεωθεί από το 2018. + Είναι αρκετά ευέλικτο και εύκολο στην χρήση, παρ' όλα αυτά πλέον + υποστηρίζει μονάχα έναν πάροχο νέφους, ο οποίος δεν αποτελεί δημοφιλή + επιλογή γενικότερα. Θα μπορούσε να επεκταθεί η λειτουργικότητά του, + αλλά έχει να ανανεωθεί από το 2018. \end{itemize} -Ο χρήστης δύναται κατά την χρήση του SecDep να επιλέξει τις ενέργειες και τα -χαρακτηριστικά που επιθυμεί για την εικονική μηχανή του. Όλες οι παράμετροι -είναι εύκολα κατανοητές και συνδυάζονται μεταξύ τους για να επιτευχθεί το -επιθυμητό αποτέλεσμα. Υποστηρίζει όλους τους δημοφιλείς παρόχους νέφους και -όλες τις καλές πρακτικές ενός εργαλείου γραμμής εντολών όπως ο έλεγχος -σφαλμάτων κατά την εισαγωγή παραμέτρων. Επιπλέον, μπορεί εύκολα να επεκταθεί η -χρήση του, είτε εισάγοντας έτοιμες εντολές σε αρχεία bash είτε προσθέτοντας -νέες ενέργειες στον κώδικά του αφού πρόκειται για ένα αρχείο python. +Ο χρήστης δύναται κατά την χρήση του SecDep (μέσω της εκτέλεσης του secdep.py) +να επιλέξει τις ενέργειες και τα χαρακτηριστικά που επιθυμεί για την εικονική +μηχανή του. Όλες οι παράμετροι είναι εύκολα κατανοητές και συνδυάζονται μεταξύ +τους για να επιτευχθεί το επιθυμητό αποτέλεσμα. Υποστηρίζει όλους τους +δημοφιλείς παρόχους νέφους και όλες τις καλές πρακτικές ενός εργαλείου γραμμής +εντολών, όπως ο έλεγχος σφαλμάτων κατά την εισαγωγή παραμέτρων. Επιπλέον, +μπορεί εύκολα να επεκταθεί η χρήση του, είτε εισάγοντας έτοιμες εντολές σε +αρχεία bash είτε προσθέτοντας νέες ενέργειες στον κώδικά του, αφού πρόκειται +για ένα αρχείο python. + +\begin{savenotes} % by the package footnote because footfullcite did not work inside a tabular +\selectfont +\begin{table}[!ht] +\caption{Σύγκριση εργαλείων δημιουργίας εικονικών μηχανών} +\renewcommand{\arraystretch}{1.5} +\centering +\newcolumntype{C}{>{\centering\arraybackslash}m{3.5cm}} +\textgreek{\begin{tabular}{||C|C|C|C||} +\hline + +Κριτήρια & Terraform & Libcloud CLI & SecDep \\ [0.5ex] + +\hline\hline + +Ευελιξία κατά την χρήση & + +Όλες οι προδιαγραφές δηλώνονται σε αρχείο κειμένου. & + +Οι παράμετροι επιλέγονται κατά την δημιουργία της εντολής. & + +Οι παράμετροι επιλέγονται κατά την δημιουργία της εντολής. \\ + +\hline + +Ευκολία χρήσης & + +Κάθε αλλαγή απαιτεί τροποποίηση του αρχείου προδιαγραφών. & + +Οι παράμετροι είναι εύκολες στην κατανόηση και την χρήση. & + +Οι παράμετροι είναι εύκολες στην κατανόηση και την χρήση. \\ + +\hline + +Εύρος υποστήριξης παρόχων & + +Όλοι οι μεγάλοι και μικροί πάροχοι υποστηρίζονται. & + +Μονάχα ένας πάροχος υποστηρίζεται. & + +Υποστηρίζονται όλοι οι μεγάλοι πάροχοι. \\ + +\hline + +Επεκτασιμότητα & + +Λόγω της αρχιτεκτονικής του είναι δυσκολότερη η επέκτασή του. & + +Επεκτείνεται εύκολα με τροποποίηση του εκτελέσιμου αρχείου. & + +Επεκτείνεται εύκολα με τροποποίηση του εκτελέσιμου αρχείου. \\ + +\hline +\end{tabular}} +\label{table:vmCreationTools} +\renewcommand{\arraystretch}{1} +\end{table} +\end{savenotes} \section{Αυτοματοποίηση σκλήρυνσης εικονικών μηχανών} @@ -148,21 +213,28 @@ \item \textbf{Ευκολία κατά την χρήση}: Το εργαλείο πρέπει να μπορεί να χρησιμοποιηθεί εύκολα από έναν χρήστη. - Ιδανικά να αρκεί η εκτέλεσή του σε μια εικονική μηχανή χωρίς την ανάγκη - εγκατάστασης εξαρτήσεων. + Ιδανικά, να αρκεί η εκτέλεσή του σε μια εικονική μηχανή χωρίς την + ανάγκη εγκατάστασης εξαρτήσεων. \item \textbf{Εύρος σκλήρυνσης}: Το εργαλείο πρέπει να μπορεί να σκληρύνει την εικονική μηχανή σε - ικανοποιητικό βαθμό και να μην περιορίζεται σε λίγες μονάχα επιλογές. + ικανοποιητικό βαθμό και να μην περιορίζεται σε λίγες μονάχα + δυνατότητες. + + \item \textbf{Υποστήριξη διαρκούς σκλήρυνσης}: + + Το εργαλείο πρέπει να παρέχει την δυνατότητα διαρκούς σκλήρυνσης, + προσφέροντας μηχανισμούς που θα εκτελούνται περιοδικά με σκοπό την + διατήρησή της. \end{itemize} \subsection{Εργαλεία σκλήρυνσης εικονικών μηχανών} -Τα παρακάτω εργαλεία θα συγκριθούν με το harden. Το δεύτερο εκτελέσιμο αρχείο -του εργαλείου SecDep, το οποίο μετά από επιλογή του χρήστη εκτελείται σε μια -εικονική μηχανή αφότου αυτή δημιουργηθεί. +Τα παρακάτω εργαλεία θα συγκριθούν με το harden. Με άλλα λόγια, το δεύτερο +εκτελέσιμο αρχείο του εργαλείου SecDep, το οποίο μετά από επιλογή του χρήστη +εκτελείται σε μια εικονική μηχανή αφότου αυτή δημιουργηθεί. \begin{itemize} @@ -174,21 +246,20 @@ τρόπος λειτουργίας του είναι η εκτέλεσή του ως χρήστης με διαχειριστικά δικαιώματα στο σύστημα. -\clearpage - \item \textbf{nixarmor} \footfullcite{nixarmor}: - Ένα εργαλείο ανοιχτού κώδικα που στεγάζεται στο GitHub και αναπτύχθηκε - από τον Emir Ozer. Περιέχει διαφορετικά εκτελέσιμα αρχεία για την - σκλήρυνση διάφορων διανομών Linux, τα οποία μπορούν να εκτελεστούν ως - αυτόνομα προγράμματα από τον χρήστη. + Το nixarmor, αποτελεί και αυτό ένα εργαλείο ανοιχτού κώδικα, το οποίο + στεγάζεται στο GitHub και αναπτύχθηκε από τον Emir Ozer. Περιέχει + διαφορετικά εκτελέσιμα αρχεία για την σκλήρυνση διάφορων διανομών + Linux, τα οποία μπορούν να εκτελεστούν ως αυτόνομα προγράμματα από τον + χρήστη. \end{itemize} -\subsection{Σύγκριση με το harden} +\subsection{Σύγκριση με τον τομέα σκλήρυνσης VM του harden} -Σχετικά με τα δηλωθέντα κριτήρια, το SecDep ικανοποιεί όλους τους παραπάνω -στόχους. +Σχετικά με τα δηλωθέντα κριτήρια, το SecDep (μέσω του harden) ικανοποιεί όλους +τους παραπάνω στόχους. \begin{itemize} @@ -198,65 +269,320 @@ και η ευκολία στην χρήση του το καθιστά ένα εργαλείο που μπορεί να χρησιμοποιηθεί από έναν χρήστη με μικρή εμπειρία στον κλάδο. Παρ' όλα αυτά, δεν υποστηρίζει πολλές διανομές και οι εκδόσεις των διανομών που - υποστηρίζονται μέσω αυτού είναι αρκετό καιρό ξεπερασμένες. Θα μπορούσε + υποστηρίζονται μέσω αυτού, είναι αρκετό καιρό ξεπερασμένες. Θα μπορούσε να βελτιωθεί με μια ανανέωση του πηγαίου του κώδικα αλλά η ανάπτυξή του φαίνεται να έχει σταματήσει το 2019. \item \textbf{Σύγκριση με το nixarmor}: - Σε αντίθεση με το JShielder, το nixarmor για να χρησιμοποιηθεί με τον - ίδιο τρόπο που χρησιμοποιούνται τα υπόλοιπα εργαλεία θα πρέπει να + Σε αντίθεση με το JShielder, το nixarmor, για να χρησιμοποιηθεί με τον + ίδιο τρόπο που χρησιμοποιούνται τα υπόλοιπα εργαλεία, θα πρέπει να επεκταθεί με την προσθήκη κώδικα που να του επιτρέπει να ξεχωρίζει ποιο - είναι το κατάλληλο εκτελέσιμο για την κάθε διανομή. Στην αντίθετη - περίπτωση, πάλι η χρήση του είναι εύκολη διότι ο χρήστης μπορεί να - επιλέξει και να εκτελέσει χειροκίνητα ένα από τα εκτελέσιμα αρχεία που - περιέχει. Η σκλήρυνση που παρέχει καλύπτει πολλούς τομείς μιας διανομής - και μπορεί εύκολα να προστεθούν επιπλέον συναρτήσεις στον κώδικά του. - Παρ' όλα αυτά, η ανάπτυξή του έχει παύσει από το 2015 και οι - υποστηριζόμενες διανομές του έχουν περιοριστεί σε μονάχα 4. + είναι το κατάλληλο εκτελέσιμο για την κάθε διανομή. Αν αγνοήσουμε το + μειονέκτημα αυτό, μπορούμε να χαρακτηρίσουμε τη χρήση του εύκολη για + χρήστες που έχουν την εμπειρία να διακρίνουν με κάποιο τρόπο τη + τρέχουσα διανομή και άρα είναι σε θέση να επιλέξουν και να εκτελέσουν + χειροκίνητα ένα από τα εκτελέσιμα αρχεία που το nixarmor περιέχει. Η + σκλήρυνση που παρέχει καλύπτει πολλούς τομείς μιας διανομής και μπορούν + εύκολα να προστεθούν επιπλέον συναρτήσεις στον κώδικά του. Παρ' όλα + αυτά, η ανάπτυξή του έχει παύσει από το 2015 και οι υποστηριζόμενες + διανομές του έχουν περιοριστεί σε μονάχα 4. \end{itemize} Συγκριτικά με τα παραπάνω εργαλεία, το harden υποστηρίζει την ικανότητα -αναγνώρισης της διανομής στην οποία εκτελείται και μπορεί δυναμικά να αλλοιώσει -την συμπεριφορά του αναλόγως. Οι υποστηριζόμενες διανομές είναι 6 και οι -λειτουργίες του αν και σύμφωνα με τα αποτελέσματα του Κεφαλαίου +αναγνώρισης της διανομής στην οποία εκτελείται και μπορεί δυναμικά να +διαμορφώσει την συμπεριφορά του αναλόγως. Οι υποστηριζόμενες διανομές είναι 6 +και οι λειτουργίες του, αν και σύμφωνα με τα αποτελέσματα του Κεφαλαίου \ref{experimentationANDresults} είναι ικανοποιητικές, θα μπορούσαν εύκολα να -επεκταθούν με την προσθήκη νέων συναρτήσεων. Επιπλέον, αυτό το ένα εκτελέσιμο, -παράγει κατά την εκτέλεσή του δύο ακόμα, τα οποία θα εκτελούνται περιοδικά με -σκοπό την αυτόματη ενημέρωση του συστήματος και το κλείσιμο αχρησιμοποίητων -θυρών. +επεκταθούν με την προσθήκη νέων συναρτήσεων. Επιπλέον, αν και το harden +αποτελεί ένα εκτελέσιμο, παράγει κατά την εκτέλεσή του δύο ακόμα εκτελέσιμα, τα +οποία μπορούν να εκτελούνται περιοδικά με σκοπό την αυτόματη ενημέρωση του +συστήματος και το κλείσιμο αχρησιμοποίητων θυρών. Αυτό σημαίνει πως η σκλήρυνση +μπορεί να είναι διαρκής και όχι στατική, εκτελούμενη μόνο μια φορά. + +\begin{savenotes} % by the package footnote because footfullcite did not work inside a tabular +\selectfont +\begin{table}[!ht] +\caption{Σύγκριση εργαλείων σκλήρυνσης εικονικών μηχανών} +\renewcommand{\arraystretch}{1.5} +\centering +\newcolumntype{C}{>{\centering\arraybackslash}m{3.5cm}} +\textgreek{\begin{tabular}{||C|C|C|C||} +\hline + +Κριτήρια & JShielder & nixarmor & SecDep \\ [0.5ex] + +\hline\hline + +Εύρος υποστήριξης διανομών & + +Υποστηρίζεται μια διανομή με δύο εκδόσεις. & + +Υποστηρίζονται 4 διανομές. & + +Υποστηρίζονται 6 διανομές με πολλαπλές εκδόσεις τους. \\ + +\hline + +Ευκολία χρήσης & + +Αρκεί η εκτέλεσή του με διαχειριστικά δικαιώματα. & + +Αρκεί η εκτέλεση ενός εκτελέσιμου αρχείου του με διαχειριστικά δικαιώματα. & + +Αρκεί η εκτέλεσή του με διαχειριστικά δικαιώματα. \\ + +\hline + +Εύρος σκλήρυνσης & + +Παρέχεται ικανοποιητικό εύρος σκλήρυνσης, καλύπτοντας πολλούς τομείς. & + +Το εύρος σκλήρυνσης του συστήματος είναι μικρότερο από τα άλλα εργαλεία. & + +Η σκλήρυνση του συστήματος επιτυγχάνεται σε ικανοποιητικό βαθμό. \\ + +\hline + +Υποστήριξη διαρκούς σκλήρυνσης & + +Υποστηρίζεται η διαρκής ενημέρωση πακέτων. & + +Υποστηρίζονται οι διαρκείς ενημερώσεις ασφαλείας σε μια διανομή. & + +Υποστηρίζεται η δημιουργία δύο περιοδικά εκτελέσιμων αρχείων για την ενημέρωση +των πακέτων κάθε υποστηριζόμενης διανομής και το κλείσιμο των αχρησιμοποίητων +θυρών. \\ + +\hline +\end{tabular}} +\label{table:vmHardeningTools} +\renewcommand{\arraystretch}{1} +\end{table} +\end{savenotes} + +\clearpage \section{Αυτοματοποίηση εγκατάστασης/σκλήρυνσης του Docker} +Για τα εργαλεία αυτοματοποίησης της διαδικασίας εγκατάστασης/σκλήρυνσης του +Docker, τα κριτήρια που θα πρέπει να ικανοποιούνται είναι τα παρακάτω: + +\begin{itemize} + + \item \textbf{Ευκολία κατά την χρήση}: + + Ιδανικά, θα πρέπει να αρκεί η εκτέλεση του εργαλείου με διαχειριστικά + δικαιώματα, δίχως την ανάγκη περαιτέρω ενεργειών από τον χρήστη. + + \item \textbf{Εύρος σκλήρυνσης}: + + Αναμένεται η σκλήρυνση του Docker να επιτευχθεί σε ικανοποιητικό βαθμό, + πραγματοποιώντας τις απαραίτητες ρυθμίσεις στον δαίμονά του. + + \item \textbf{Υποστήριξη διαρκούς σκλήρυνσης}: + + Το εργαλείο πρέπει να πραγματοποιεί βήματα που θα διασφαλίσουν την + διαρκή σκλήρυνση του Docker ή/και των δοχείων του. + + \item \textbf{Επεκτασιμότητα}: + + Θα πρέπει να μπορεί ένας έμπειρος χρήστης να προσθέσει νέες λειτουργίες + με σκοπό την επέκταση των δυνατοτήτων του. + +\end{itemize} + +\subsection{Εργαλεία εγκατάστασης/σκλήρυνσης του Docker} + Μια από τις λειτουργίες του εκτελέσιμου harden πέρα από την σκλήρυνση του -συστήματος, είναι και η αυτόματη εγκατάσταση και σκλήρυνση του Docker. Αυτό -επιτυγχάνεται με την εγκατάσταση μιας τροποποιημένης έκδοσής του, η οποία -δύναται να εκτελεστεί από οποιονδήποτε χρήστη του συστήματος, δίχως την ανάγκη -διαχειριστικών δικαιωμάτων. Έπειτα πραγματοποιείται αντικατάσταση του αρχικού -container runtime (runC) με το runsc, από το gVisor. Αυτό, αναπτύχθηκε από την -Google και αποτελεί μια ασφαλέστερη επιλογή από το αρχικό, διότι περιορίζει τις -κλήσεις του συστήματος (system calls) στις άκρως απαραίτητες για την λειτουργία -του Docker. Ο συνδυασμός αυτών των δύο βημάτων έχει ήδη περιορίσει την -επιφάνεια επίθεσης σε περίπτωση απόδρασης από ένα δοχείο και έχει μειώσει την -πιθανότητα κάτι τέτοιο να συμβεί. +συστήματος, είναι και η αυτόματη εγκατάσταση και σκλήρυνση του Docker. Τα +εργαλεία που αποσκοπούν στην αυτοματοποίηση της διαδικασίας αυτής, τα οποία θα +συγκριθούν με το harden σε αυτόν τον τομέα, είναι τα παρακάτω: -Επιπροσθέτως, ρυθμίζεται ο δαίμονας του Docker ώστε να εκτελείται με μεγαλύτερη -ασφάλεια. Αυτό επιτυγχάνεται χρησιμοποιώντας παραμέτρους όπως -\textquote{no-new-privileges} για να μην μπορεί ένα δοχείο να λάβει περισσότερα -δικαιώματα στην συνέχεια της εκτέλεσής του, καθώς και ενεργοποιώντας τις -δυνατότητες του SELinux εάν αυτό υποστηρίζεται από την εκάστοτε υποκείμενη -διανομή του συστήματος. Τέλος, πραγματοποιείται εγκατάσταση της υπηρεσίας σε -μορφή δοχείου ονόματι \textquote{watchtower}, η οποία έχει ως στόχο την -αυτόματη ενημέρωση των δοχείων που εκτελούνται στο σύστημα. +\begin{itemize} -\subsection{Καινοτομία του SecDep} + \item \textbf{docker-rootless-setup} \footfullcite{docker-rootless-setup}: -Δεδομένου ότι πολλές από τις παραπάνω τεχνολογίες είναι σχετικά νέες, δεν -υπάρχουν στην αγορά εργαλεία που να έχουν ως κύριο στόχο την αυτόματη εφαρμογή -τους. Τα περισσότερα επικεντρώνονται στην σκλήρυνση των δοχείων και όχι του -δαίμονα, ενώ όσα επιχειρούν να σκληρύνουν τον δαίμονα έχουν να ανανεωθούν πολύ -προτού έρθουν στο προσκήνιο οι τεχνολογίες που χρησιμοποιεί το harden. -Επομένως, δεν θα υπήρχε δίκαιη σύγκριση με αυτά. Στον συγκεκριμένο τομέα, το -SecDep προσφέρει μια ολοκληρωμένη λύση, η οποία εκτελεί όλα τα παραπάνω βήματα -δίχως την ανάγκη αλληλεπίδρασης ή περαιτέρω ρυθμίσεων από τον χρήστη. + Το docker-rootless-setup είναι ένα εργαλείο ανοιχτού κώδικα, το οποίο + στεγάζεται στο GitHub. Θεωρείται πως ανήκει στην κατηγορία εργαλείων + σκλήρυνσης του Docker διότι αποσκοπεί στην αυτοματοποίηση της + εγκατάστασης του Rootless Docker. Το αποτέλεσμα μετά την εγκατάστασή + αυτού, είναι να μπορεί πλέον το Docker να λειτουργεί χωρίς την ανάγκη + διαχειριστικών δικαιωμάτων, αυξάνοντας έτσι την ασφάλεια του + συστήματος. Για την χρήση του αρκεί μονάχα η εκτέλεσή του στο σύστημα + που θέλουμε να εγκαταστήσουμε το Rootless Docker. Η επέκτασή του είναι + εύκολα εφικτή, μιας και πρόκειται για ένα εκτελέσιμο αρχείο bash. + + \item \textbf{docksec} \footfullcite{docksec}: + + Το docksec είναι ένα ακόμα εργαλείο ανοιχτού κώδικα, το οποίο επιχειρεί + να ασφαλίσει τον δαίμονα του Docker. Ο τρόπος με τον οποίο γίνεται + αυτό, είναι με την διασφάλιση ορισμένων ενεργειών που συστήνει το + docker-bench-security \footfullcite{docker-bench-security}. Το + docker-bench-security είναι ένα εργαλείο που στεγάζεται στο GitHub υπό + τον επίσημο λογαριασμό της ομάδας ανάπτυξης του Docker. Χρησιμοποιείται + για τον έλεγχο των ρυθμίσεων ασφαλείας μιας εγκατάστασης του Docker και + παρέχει οδηγίες για την βελτίωσή τους. Το docksec πραγματοποιεί + παρόμοιους ελέγχους για την ύπαρξη ορισμένων ρυθμίσεων που προτείνει το + docker-bench-security και προσφέρει την δυνατότητα αυτόματης εφαρμογής + τους. Αρκεί να εκτελεστεί στο σύστημα που είναι εγκατεστημένο το + Docker, ενώ η επέκταση των δυνατοτήτων του πραγματοποιείται το ίδιο + εύκολα με τα υπόλοιπα εργαλεία. + +\end{itemize} + +\subsection{Σύγκριση με τον τομέα σκλήρυνσης του Docker μέσω του harden} + +Σε σχέση με τα κριτήρια που πρέπει να ικανοποιούνται, το harden μπορεί και πάλι +να τα καλύψει όλα. + +\begin{itemize} + + \item \textbf{Σύγκριση με docker-rootless-setup}: + + Όπως το docker-rootless-setup, έτσι και το harden εκτελείται στο + σύστημα για το οποίο θέλει να πραγματοποιήσει την εγκατάσταση/σκλήρυνση + του Docker. Αυτό που συμβαίνει και στις δύο περιπτώσεις είναι η + εγκατάσταση μιας τροποποιημένης έκδοσης του Docker, η οποία δύναται να + εκτελεστεί από οποιονδήποτε χρήστη του συστήματος, δίχως την ανάγκη + διαχειριστικών δικαιωμάτων. Ωστόσο, το harden υποστηρίζει περισσότερες + διανομές από το docker-rootless-setup (που περιορίζεται μόνο σε + διανομές βασισμένες στο Debian) και παρέχει περισσότερες δυνατότητες + σκλήρυνσης. Πέρα από την εγκατάσταση του Rootless Docker, με το harden + πραγματοποιείται αντικατάσταση του αρχικού container runtime (runC) με + το runsc, από το gVisor. Αυτό, αναπτύχθηκε από την Google και αποτελεί + μια ασφαλέστερη επιλογή από το αρχικό (runC), διότι περιορίζει τις + κλήσεις του συστήματος (system calls) στις άκρως απαραίτητες για την + λειτουργία του Docker. Ο συνδυασμός αυτών των δύο βημάτων, όχι μόνο + περιορίζει την επιφάνεια επίθεσης σε περίπτωση απόδρασης από ένα + δοχείο, αλλά μειώνει και την πιθανότητα κάτι τέτοιο να συμβεί. + + \item \textbf{Σύγκριση με docksec}: + + Το docksec, ενώ επιτυγχάνει την σκλήρυνση του δαίμονα του Docker, + βασιζόμενο σε οδηγίες του docker-bench-security, περιορίζεται μονάχα σε + αυτό. Δεν πραγματοποιεί ούτε την εγκατάσταση του Rootless Docker, ούτε + την αντικατάσταση του runC με το runsc. Επιπλέον, δεν υποστηρίζει την + αυτόματη ενημέρωση των δοχείων που εκτελούνται στο σύστημα, όπως κάνει + το harden. Με την εκτέλεση του harden, πέρα από τα παραπάνω βήματα, + ρυθμίζεται ο δαίμονας του Docker ώστε να εκτελείται με μεγαλύτερη + ασφάλεια. Αυτό επιτυγχάνεται χρησιμοποιώντας παραμέτρους όπως + \textquote{no-new-privileges} για να μην μπορεί ένα δοχείο να λάβει + περισσότερα δικαιώματα στην συνέχεια της εκτέλεσής του, καθώς και + ενεργοποιώντας τις δυνατότητες του SELinux εάν αυτό υποστηρίζεται από + την εκάστοτε υποκείμενη διανομή του συστήματος. Τέλος, πραγματοποιείται + εγκατάσταση της υπηρεσίας σε μορφή δοχείου ονόματι + \textquote{watchtower}, η οποία έχει ως στόχο την αυτόματη ενημέρωση + των δοχείων που εκτελούνται στο σύστημα. + +\end{itemize} + +Επομένως, το harden παρέχει μια ολοκληρωμένη λύση για την εγκατάσταση και +σκλήρυνση του Docker, η οποία εκτελεί όλα τα παραπάνω βήματα δίχως την ανάγκη +αλληλεπίδρασης ή περαιτέρω ρυθμίσεων από τον χρήστη. Υποστηρίζει πολλές +διανομές για τις οποίες μπορεί να κατεβάσει τα απαραίτητα πακέτα για την +λειτουργία του Rootless Docker και πέρα από την εγκατάσταση αυτού, επιτυγχάνει +να σκληρύνει τον δαίμονα του Docker με κατάλληλες ρυθμίσεις και αντικατάσταση +του προκαθορισμένου container runtime. + +\clearpage + +\begin{savenotes} % by the package footnote because footfullcite did not work inside a tabular +\selectfont +\begin{table}[!ht] +\caption{Σύγκριση εργαλείων σκλήρυνσης του Docker} +\renewcommand{\arraystretch}{1.5} +\centering +\newcolumntype{C}{>{\centering\arraybackslash}m{3.5cm}} +\textgreek{\begin{tabular}{||C|C|C|C||} +\hline + +Κριτήρια & docker-rootless-setup & docksec & SecDep \\ [0.5ex] + +\hline\hline + +Ευκολία χρήσης & + +Αρκεί η εκτέλεσή του με διαχειριστικά δικαιώματα. & + +Αρκεί να εκτελεστεί με διαχειριστικά δικαιώματα. & + +Αρκεί η εκτέλεσή του με διαχειριστικά δικαιώματα. \\ + +\hline + +Εύρος σκλήρυνσης & + +Περιορίζεται στην εγκατάσταση του Rootless Docker. & + +Περιορίζεται στη σκλήρυνση του Docker μέσω καλύτερων ρυθμίσεων. & + +Καταφέρνει να ρυθμίσει καλύτερα τον δαίμονα, να εγκαταστήσει το Rootless Docker +και να αντικαταστήσει το προκαθορισμένο container runtime με ένα ασφαλέστερο. +\\ + +\hline + +Υποστήριξη διαρκούς σκλήρυνσης & + +Δεν λαμβάνονται βήματα για την διασφάλιση διαρκούς σκλήρυνσης. & + +Μετά την εκτέλεσή του δεν πραγματοποιεί παραπάνω βήματα. & + +Πέρα από την σκλήρυνση του Docker, εγκαθιστά και το watchtower για να +διασφαλίσει πως τα δοχεία του συστήματος θα ενημερώνονται διαρκώς. \\ + +\hline + +Επεκτασιμότητα & + +Αρκεί η προσθήκη νέων λειτουργιών στο εκτελέσιμο αρχείο του. & + +Αρκεί η προσθήκη νέων λειτουργιών στο εκτελέσιμο αρχείο του. & + +Αρκεί η προσθήκη νέων λειτουργιών στο εκτελέσιμο αρχείο του. \\ + +\hline +\end{tabular}} +\label{table:dockerHardeningTools} +\renewcommand{\arraystretch}{1} +\end{table} +\end{savenotes} + +\section{Συμπεράσματα συγκρίσεων} + +Μετά από τις συγκρίσεις του SecDep με τα προαναφερθέντα εργαλεία, ακολουθώντας +τα κριτήρια που έχουν οριστεί για τον κύριο σκοπό του καθενός, μπορούμε να +συμπεράνουμε πως το SecDep όχι μόνο υπερτερεί σε σχέση με τα υπόλοιπα, αλλά +προσφέρει μια ολοκληρωμένη λύση με τις δυνατότητες όλων των παραπάνω. Παρέχει +δηλαδή, λειτουργίες αυτοματοποίησης για την δημιουργία και σκλήρυνση ενός +συστήματος νέφους, ειδικά ρυθμισμένο για την ασφαλή εκτέλεση εφαρμογών που +προσφέρονται σε μορφή δοχείων. + +Στον τομέα της αυτοματοποίησης δημιουργίας εικονικών μηχανών, με την χρήση της +βιβλιοθήκης libcloud, προσφέρεται μια πληθώρα επιλογών για την χρήση νεφών όλων +των μεγάλων παρόχων νέφους. Υποστηρίζονται πολλές διανομές, διάφορα μεγέθη +εικονικών μηχανών και αρκετές τοποθεσίες. Επιπροσθέτως, ακολουθούνται όλες οι +ορθές πρακτικές εργαλείων γραμμής εντολών, όπως ο έλεγχος εγκυρότητας των +παραμέτρων και η ευκολία στην κατανόηση της σημασιολογίας και της χρήσης τους. +Τέλος, επιτρέπει και την αποδοτική διαχείριση όλων των εικονικών μηχανών που +δημιουργήθηκαν μέσω αυτού, κατά μήκος όλων των παρόχων νέφους που υποστηρίζει. + +Σχετικά με την σκλήρυνση των εικονικών μηχανών, το SecDep υποστηρίζει πολλές +διανομές, σκληραίνει τα συστήματα σε ικανοποιητικό βαθμό και επιπρόσθετα, +προσφέρει μηχανισμούς για την υποστήριξη διαρκούς σκλήρυνσης. + +Για την σκλήρυνση του Docker, δεδομένου ότι πολλές από τις τεχνολογίες που +χρησιμοποιεί είναι σχετικά νέες, δεν υπάρχουν στην αγορά εργαλεία που να έχουν +ως κύριο στόχο την αυτόματη εφαρμογή τους. Τα περισσότερα επικεντρώνονται στην +σκλήρυνση των δοχείων και όχι του δαίμονα, ενώ όσα επιχειρούν να σκληρύνουν τον +δαίμονα έχουν να ανανεωθούν πολύ προτού έρθουν στο προσκήνιο οι τεχνολογίες που +χρησιμοποιεί το harden. + +Το SecDep παρέχει ένα σύνολο δυνατοτήτων που δεν προσφέρονται από κανένα άλλο +αυτοτελές εργαλείο και επιτυγχάνει τον σκοπό του με ευκολία και +αποτελεσματικότητα. Για την απόκτηση ίδιου επιπέδου λειτουργιών και +αποτελεσμάτων, θα απαιτούνταν η εκτέλεση και η τροποποίηση πολλών ξεχωριστών +εργαλείων. Επομένως, μπορεί να θεωρηθεί πως είναι ένα πιο ολοκληρωμένο εργαλείο +που όμοιό του δεν υπάρχει ακόμα διαθέσιμο. diff --git a/Chapters/4.ProjectDevelopment.tex b/Chapters/4.ProjectDevelopment.tex index 0b9e1c6..346ee1c 100644 --- a/Chapters/4.ProjectDevelopment.tex +++ b/Chapters/4.ProjectDevelopment.tex @@ -2,114 +2,26 @@ \noindent Στην παρούσα ενότητα θα αναλυθούν οι τεχνολογίες που χρησιμοποιήθηκαν για την υλοποίηση του συστήματος, οι αποφάσεις που πάρθηκαν κατά την ανάπτυξή -του και οι σχεδιαστικές επιλογές που έγιναν. Επίσης, θα πραγματοποιηθεί -απεικόνιση των συσχετίσεων μεταξύ των συστατικών του συστήματος και θα αναλυθεί -περαιτέρω η λειτουργία τους. +του και οι σχεδιαστικές επιλογές που πραγματοποιήθηκαν. Επίσης, θα αναλυθεί η +αρχιτεκτονική του συστήματος και θα επεξηγηθούν οι λειτουργίες των συστατικών +του. -\section{Αποφάσεις που πάρθηκαν κατά την ανάπτυξη} \label{developmentDecisions} +\section{Μοντέλο ανάπτυξης} -Κατά την ανάπτυξη του συστήματος, προκειμένου να επιτευχθούν οι στόχοι που -θέσαμε στην Ενότητα \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 παρόχους. Κατά την σελίδα τεκμηρίωσης -\cite{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, -είναι διότι ο αριθμός των διαθέσιμων διανομών και εκδόσεών τους είναι -υπερβολικά μεγάλος και κατά την εκτέλεση της λειτουργίας δημιουργίας λίστας -τους ή κατά τον έλεγχο της ορθότητας δεδομένων που εισάγει ο χρήστης, το -πρόγραμμα θα καθυστερούσε σε τεράστιο βαθμό να ολοκληρωθεί. - -\clearpage +Για την ανάπτυξη του SecDep, ακολουθήθηκε το μοντέλο καταρράκτη. Στο μοντέλο +αυτό, κάθε στάδιο της δραστηριότητας ανάπτυξης εκτελείται σειριακά. Δηλαδή, για +την μετάβαση σε κάθε επόμενο στάδιο, απαιτείται η επιτυχής ολοκλήρωση του +προηγούμενου. Έτσι και εδώ, ξεκινάμε με την ανάλυση απαιτήσεων, έπειτα +προχωράμε στη σχεδίαση του συστήματος και τέλος φτάνουμε στην υλοποίησή του. Η +επίδειξη της τελικής μορφής του εργαλείου καλύπτεται στο Κεφάλαιο +\ref{installationANDShowcase}, ενώ η αποτίμηση των αποτελεσμάτων εκτέλεσής του, +στο Κεφάλαιο \ref{experimentationANDresults}. \section{Απαιτήσεις από το εργαλείο} \label{toolRequirements} Κατά την ανάπτυξη του εργαλείου, έγινε μια προσπάθεια να καλυφθούν ορισμένες -βασικές απαιτήσεις που θα έπρεπε να ικανοποιεί. Όπως όλα τα εργαλεία, έτσι και -αυτό έχει έναν σκοπό να εκπληρώσει. Ο σκοπός αυτός είναι η διευκόλυνση του +βασικές απαιτήσεις που θα έπρεπε αυτό να ικανοποιεί. Όπως όλα τα εργαλεία, έτσι +και αυτό έχει έναν σκοπό να εκπληρώσει. Ο σκοπός αυτός είναι η διευκόλυνση του χρήστη ή ενός οργανισμού, στην εγκατάσταση και διαμόρφωση με αυτοματοποιημένο τρόπο ενός ασφαλούς, κατανεμημένου περιβάλλοντος για την εγκατάσταση και λειτουργία μιας εφαρμογής μικρο-υπηρεσιών. Για να γίνει αυτό πραγματικότητα, @@ -119,86 +31,87 @@ Python, πάρθηκε επίσης η απόφαση για την υποστή \begin{itemize} - \item \textbf{Το εργαλείο πρέπει να υποστηρίζει την χρήση των 3 μεγαλύτερων - ονομάτων στον κλάδο της νεφο-υπολογιστικής} + \item Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την λειτουργία + εμφάνισης λίστας των διαθέσιμων μεγεθών εικονικής μηχανής - \item \textbf{Το εργαλείο πρέπει να υποστηρίζει την χρήση των 6 - δημοφιλέστερων διανομών για περιβάλλον διακομιστή} + \item Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την λειτουργία + εμφάνισης λίστας των διαθέσιμων τοποθεσιών - \item \textbf{Το εργαλείο πρέπει να λειτουργεί μέσω της γραμμής εντολών - ώστε να μπορεί να αυτοματοποιηθεί περαιτέρω η εκτέλεση των εντολών του} + \item Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την λειτουργία + εμφάνισης λίστας των διαθέσιμων διανομών - \item \textbf{Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την - λειτουργία εμφάνισης λίστας των διαθέσιμων μεγεθών εικονικής μηχανής} + \item Το εργαλείο πρέπει για κάθε εντολή που επιδέχεται παραμέτρους, να + ρωτάει τον χρήστη για κάθε παράμετρο που δεν δόθηκε - \item \textbf{Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την - λειτουργία εμφάνισης λίστας των διαθέσιμων τοποθεσιών} + \item Το εργαλείο πρέπει να ελέγχει την εγκυρότητα κάθε παραμέτρου που + δίνεται από τον χρήστη - \item \textbf{Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την - λειτουργία εμφάνισης λίστας των διαθέσιμων διανομών} + \item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία δημιουργίας + εικονικής μηχανής - \item \textbf{Το εργαλείο πρέπει για κάθε εντολή που επιδέχεται - παραμέτρους, να ρωτάει τον χρήστη για κάθε παράμετρο που δεν δόθηκε} + \item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία παύσης εικονικής + μηχανής - \item \textbf{Το εργαλείο πρέπει να ελέγχει την εγκυρότητα κάθε παραμέτρου - που δίνεται από τον χρήστη} + \item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία εκκίνησης εικονικής + μηχανής - \item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία δημιουργίας - εικονικής μηχανής} + \item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία επανεκκίνησης + εικονικής μηχανής - \item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία παύσης - εικονικής μηχανής} + \item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία διαγραφής εικονικής + μηχανής - \item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία εκκίνησης - εικονικής μηχανής} + \item Το εργαλείο πρέπει να υποστηρίζει την σύνδεση με SSH ακόμα και χωρίς + να διαθέτει ο χρήστης πελάτη SSH - \item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία - επανεκκίνησης εικονικής μηχανής} + \item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία εμφάνισης όλων των + εικονικών μηχανών που διαχειρίζεται - \item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία διαγραφής - εικονικής μηχανής} + \item Το εργαλείο πρέπει να εμφανίζει μηνύματα λάθους σε περίπτωση που κάτι + πάει στραβά κατά την εκτέλεση - \item \textbf{Το εργαλείο πρέπει να υποστηρίζει την σύνδεση με SSH ακόμα - και χωρίς να διαθέτει ο χρήστης πελάτη SSH} + \item Το εργαλείο πρέπει να υποστηρίζει την διαδραστική διαμόρφωση του + αρχείου ρυθμίσεών του - \item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία εμφάνισης - όλων των εικονικών μηχανών που διαχειρίζεται} + \item Το εργαλείο πρέπει να υποστηρίζει την εκτέλεση εξωτερικού εκτελέσιμου + αρχείου στις εικονικές μηχανές με σκοπό την σκλήρυνσή τους - \item \textbf{Το εργαλείο πρέπει να εμφανίζει μηνύματα λάθους σε περίπτωση - που κάτι πάει στραβά κατά την εκτέλεση} + \item Το εργαλείο πρέπει να εγκαθιστά και να σκληραίνει και το Docker πέρα + από το λειτουργικό σύστημα - \item \textbf{Το εργαλείο πρέπει να υποστηρίζει την διαδραστική διαμόρφωση - του αρχείου ρυθμίσεων του} + \item Το εργαλείο θα ενημερώνει περιοδικά τα πακέτα της εικονικής μηχανής + και θα κλείνει αχρησιμοποίητες θύρες - \item \textbf{Το εργαλείο πρέπει να υποστηρίζει την εκτέλεση εξωτερικού - εκτελέσιμου αρχείου στις εικονικές μηχανές με σκοπό την σκλήρυνσή τους} + \item Το εργαλείο πρέπει να υποστηρίζει την εγκατάσταση δοχείων στις + εικονικές μηχανές που δημιουργεί, κατά την διάρκεια της σκλήρυνσής + τους, μέσω ενός αρχείου docker-compose.yml που θα βρίσκεται στον ίδιο + φάκελο με το εκτελέσιμο αρχείο του - \item \textbf{Το εργαλείο πρέπει να υποστηρίζει την εγκατάσταση δοχείων - στις εικονικές μηχανές που δημιουργεί, κατά την διάρκεια της - σκλήρυνσής τους, μέσω ενός αρχείου docker-compose.yml που θα - βρίσκεται στον ίδιο φάκελο με το εκτελέσιμο αρχείο του} + \item Το εργαλείο πρέπει να μπορεί να εγκαθιστά δοχεία στις εικονικές + μηχανές, κατά την διάρκεια σκλήρυνσής τους, μέσω παραμέτρων που έχει + εισάγει ο χρήστης - \item \textbf{Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης όλων των - διαθέσιμων εντολών του} + \item Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης όλων των + διαθέσιμων εντολών του - \item \textbf{Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης - συμπλήρωσης εντολών και για τα 3 πιο δημοφιλή κελύφη εντολών} + \item Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης συμπλήρωσης + εντολών και για τα 3 πιο δημοφιλή κελύφη εντολών (Bash, Zsh, tcsh) - \item \textbf{Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης της - έκδοσης του} + \item Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης της έκδοσής του - \item \textbf{Το εργαλείο πρέπει να διαθέτει παράμετρο για την προσπέραση - του βήματος επιβεβαίωσης κατά την δημιουργία εικονικών μηχανών} + \item Το εργαλείο πρέπει να διαθέτει παράμετρο για την προσπέραση + (bypassing) του βήματος επιβεβαίωσης κατά την δημιουργία εικονικών + μηχανών - \item \textbf{Το εργαλείο πρέπει να διαθέτει μηχανισμό συγκεκριμενοποίησης - περιοχής για τον πάροχο AWS} + \item Το εργαλείο πρέπει να διαθέτει μηχανισμό συγκεκριμενοποίησης περιοχής + για τον πάροχο AWS - \item \textbf{Το εργαλείο πρέπει να διαθέτει μηχανισμό επιλογής θύρας για - την λειτουργία σύνδεσης μέσω SSH} + \item Το εργαλείο πρέπει να διαθέτει μηχανισμό επιλογής θύρας για την + λειτουργία σύνδεσης μέσω SSH - \item \textbf{Το εργαλείο πρέπει να υποστηρίζει την αρχικοποίηση μονάχα - ενός παρόχου δίχως την συμπλήρωση κενών πεδίων για τους υπόλοιπους - από τον χρήστη} + \item Το εργαλείο πρέπει να υποστηρίζει την αρχικοποίηση μονάχα ενός + παρόχου δίχως την συμπλήρωση κενών πεδίων για τους υπόλοιπους από τον + χρήστη \end{itemize} @@ -206,36 +119,39 @@ Python, πάρθηκε επίσης η απόφαση για την υποστή \begin{itemize} - \item \textbf{Το εργαλείο πρέπει να είναι εύκολο στην χρήση για έναν χρήστη - που έχει χρησιμοποιήσει προγράμματα γραμμής εντολών στο παρελθόν} + \item Το εργαλείο πρέπει να υποστηρίζει την χρήση των 3 μεγαλύτερων + ονομάτων στον κλάδο της νεφο-υπολογιστικής (Amazon, Google, Microsoft) - \item \textbf{Το εργαλείο πρέπει να δημιουργεί ξεχωριστό αρχείο για τις - ρυθμίσεις του στον ίδιο φάκελο που βρίσκεται και το εκτελέσιμο αρχείο - του} + \item Το εργαλείο πρέπει να υποστηρίζει την χρήση των 6 δημοφιλέστερων + διανομών για περιβάλλον διακομιστή (Debian, Ubuntu, Red Hat Enterprise + Linux, Fedora, CentOS, openSUSE Leap) - \item \textbf{Το εργαλείο πρέπει να κρατάει αρχείο των διευθύνσεων IP των - εικονικών μηχανών που δημιουργεί ώστε να μπορούν να διαμορφωθούν - περαιτέρω εάν ο χρήστης επιθυμεί να χρησιμοποιήσει άλλα προγράμματα - όπως το Ansible} + \item Το εργαλείο πρέπει να λειτουργεί μέσω της γραμμής εντολών ώστε να + μπορεί να αυτοματοποιηθεί περαιτέρω η εκτέλεση των εντολών του - \item \textbf{Το εργαλείο πρέπει να διαθέτει ένα μοτίβο εντολών που να - μπορεί ο χρήστης να καταλαβαίνει και να διαμορφώνει ανάλογα με τις - ανάγκες του} + \item Το εργαλείο πρέπει να είναι εύκολο στην χρήση για έναν χρήστη που + έχει χρησιμοποιήσει προγράμματα γραμμής εντολών στο παρελθόν - \item \textbf{Το εργαλείο πρέπει να δημιουργεί κλειδιά SSH σε περίπτωση που - δεν υπάρχουν, στον ίδιο φάκελο με το εκτελέσιμο αρχείο του} + \item Το εργαλείο θα πρέπει να είναι αξιόπιστο, δηλαδή κάθε εκτέλεση να + επιφέρει τα αναμενόμενα αποτελέσματα - \item \textbf{Το δεύτερο εκτελέσιμο αρχείο του εργαλείου πρέπει να - εγκαθιστά και να σκληραίνει και το Docker πέρα από το λειτουργικό - σύστημα} + \item Το εργαλείο πρέπει να δημιουργεί ξεχωριστό αρχείο για τις ρυθμίσεις + του στον ίδιο φάκελο που βρίσκεται και το εκτελέσιμο αρχείο του - \item \textbf{Το δεύτερο εκτελέσιμο αρχείο του εργαλείου πρέπει να - δημιουργεί στην εικονική μηχανή δύο επιπλέον εκτελέσιμα αρχεία για - περιοδική ενημέρωση των πακέτων και κλείσιμο αχρησιμοποίητων θυρών} + \item Το εργαλείο πρέπει να κρατάει αρχείο των διευθύνσεων IP των εικονικών + μηχανών που δημιουργεί ώστε να μπορούν να διαμορφωθούν περαιτέρω εάν ο + χρήστης επιθυμεί να χρησιμοποιήσει άλλα προγράμματα, όπως το Ansible - \item \textbf{Το δεύτερο εκτελέσιμο αρχείο του εργαλείου πρέπει να - εγκαθιστά προγράμματα για την περαιτέρω σκλήρυνση του Docker και την - διευκόλυνση του χρήστη κατά την εγκατάσταση δοχείων} + \item Το εργαλείο πρέπει να διαθέτει ένα μοτίβο εντολών που να μπορεί ο + χρήστης να καταλαβαίνει και να διαμορφώνει ανάλογα με τις ανάγκες του + + \item Το εργαλείο πρέπει να δημιουργεί κλειδιά SSH σε περίπτωση που δεν + υπάρχουν, στον ίδιο φάκελο με το εκτελέσιμο αρχείο του + + \item Το εργαλείο θα πρέπει να εγκαθιστά τις υπηρεσίες watchtower και + portainer \footfullcite{portainer} για την περαιτέρω σκλήρυνση του + Docker και την διευκόλυνση του χρήστη κατά την εγκατάσταση δοχείων + αντίστοιχα \end{itemize} @@ -251,14 +167,15 @@ Python, πάρθηκε επίσης η απόφαση για την υποστή \ref{fig:useCaseDiagram} δημιουργήθηκε με την βοήθεια του εργαλείου \textquote{yuml} \footfullcite{yuml}. Επιπλέον, με το εργαλείο \textquote{mermaid} \footfullcite{mermaid}, δημιουργήθηκε ένα διάγραμμα ροής -για το SecDep που απεικονίζεται στο Σχήμα \ref{fig:flowchartDiagram}. Το -διάγραμμα ροής, απεικονίζει την ροή των εντολών που μπορεί να επιλεγούν από τον -χρήστη κατά την εκτέλεση του προγράμματος. +(flowchart) για το SecDep που απεικονίζεται στο Σχήμα +\ref{fig:flowchartDiagram}. Το διάγραμμα ροής αυτό, απεικονίζει την ροή των +εντολών που μπορεί να επιλεγούν από τον χρήστη κατά την εκτέλεση του +προγράμματος. \begin{center} \begin{figure}[!ht] \centering - \includegraphics[width = 0.9\textwidth]{Figures/Diagrams/secdep-use-case-diagram.jpg} + \includegraphics[width = 0.8\textwidth]{Figures/Diagrams/secdep-use-case-diagram.jpg} \captionof{figure}{Διάγραμμα περιπτώσεων χρήσης} \label{fig:useCaseDiagram} \end{figure} @@ -275,8 +192,8 @@ Python, πάρθηκε επίσης η απόφαση για την υποστή \begin{center} \begin{figure}[!ht] \centering - \includegraphics[width = 1.0\textwidth]{Figures/Diagrams/secdep-flowchart-diagram.png} - \captionof{figure}{Διάγραμμα ροής} + \includegraphics[width = 1.4\textwidth]{Figures/Diagrams/flowchart/1secdep-flowchart-diagram.png} + \captionof{figure}{Διάγραμμα ροής - Γενικό} \label{fig:flowchartDiagram} \end{figure} \vspace*{-30pt} @@ -284,20 +201,140 @@ Python, πάρθηκε επίσης η απόφαση για την υποστή \end{landscape} +\begin{landscape} +\thispagestyle{empty} + +\noindent Λόγω της πολυπλοκότητας του Σχήματος \ref{fig:flowchartDiagram}, αυτό +διασπάστηκε σε 6 ξεχωριστά διαγράμματα ροής, για τις εξής λειτουργίες του +SecDep: + +\begin{itemize} + + \item Εκτέλεση απλών μεθόδων + + \begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = 1.3\textwidth]{Figures/Diagrams/flowchart/2secdep-flowchart-diagramSimpleFunctions.png} + \captionof{figure}{Διάγραμμα ροής - Απλές λειτουργίες} + \label{fig:flowchartDiagram1} + \end{figure} + \vspace*{-30pt} + \end{center} + +\end{itemize} +\end{landscape} + +\clearpage + +\begin{itemize} + + \item Απόκτηση λίστας εικονικών μηχανών + + \begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = 0.5\textwidth]{Figures/Diagrams/flowchart/3secdep-flowchart-ListVMs.png} + \captionof{figure}{Διάγραμμα ροής - Λίστα εικονικών μηχανών} + \label{fig:flowchartDiagram2} + \end{figure} + \vspace*{-30pt} + \end{center} + +\end{itemize} + +\clearpage + +\begin{itemize} + + \item Εκτέλεση ενέργειας σε εικονική μηχανή + + \begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = 0.55\textwidth]{Figures/Diagrams/flowchart/4secdep-flowchart-ActionOnVM.png} + \captionof{figure}{Διάγραμμα ροής - Ενέργεια σε εικονική μηχανή} + \label{fig:flowchartDiagram3} + \end{figure} + \vspace*{-30pt} + \end{center} + +\end{itemize} + +\clearpage + +\begin{itemize} + + \item Σύνδεση SSH σε εικονική μηχανή + + \begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = 0.6\textwidth]{Figures/Diagrams/flowchart/5secdep-flowchart-SSHToVM.png} + \captionof{figure}{Διάγραμμα ροής - Σύνδεση SSH σε εικονική μηχανή} + \label{fig:flowchartDiagram4} + \end{figure} + \vspace*{-30pt} + \end{center} + +\end{itemize} + +\clearpage + +\begin{itemize} + + \item Απόκτηση πληροφοριών πόρων παρόχου + + \begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = 0.35\textwidth]{Figures/Diagrams/flowchart/6secdep-flowchart-ResourceInfo.png} + \captionof{figure}{Διάγραμμα ροής - Απόκτηση πληροφοριών πόρων παρόχου} + \label{fig:flowchartDiagram5} + \end{figure} + \vspace*{-30pt} + \end{center} + +\end{itemize} + +\clearpage + +\begin{landscape} +\thispagestyle{empty} +\begin{itemize} + + \item Δημιουργία εικονικής μηχανής + + \begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = 0.7\textwidth]{Figures/Diagrams/flowchart/7secdep-flowchart-CreateVM.png} + \captionof{figure}{Διάγραμμα ροής - Δημιουργία εικονικής μηχανής} + \label{fig:flowchartDiagram6} + \end{figure} + \vspace*{-30pt} + \end{center} + +\end{itemize} +\end{landscape} +\clearpage + Ουσιαστικά, κατά την πραγματική χρήση του SecDep υπάρχουν πάντοτε δύο οντότητες που αλληλεπιδρούν μεταξύ τους. Ο χρήστης και ο πάροχος νέφους. Ο χρήστης μπορεί -να ζητήσει πληροφορίες για διαθέσιμους πόρους όπως οι εικονικές του μηχανές ή -τα συστατικά που έχει στην διάθεσή του για την δημιουργία τους όπως οι +να ζητήσει πληροφορίες για διαθέσιμους πόρους, όπως οι εικονικές του μηχανές, ή +τα συστατικά που έχει στην διάθεσή του για την δημιουργία τους, όπως οι διανομές, τα μεγέθη και οι τοποθεσίες τους. Αυτή η αλληλεπίδραση μεταξύ του -χρήστη και του παρόχου νέφους, απεικονίζεται στο Σχήμα +χρήστη και του παρόχου νέφους, απεικονίζεται καλύτερα στο Σχήμα \ref{fig:sequenceDiagram}, το οποίο δημιουργήθηκε με το εργαλείο -\textquote{mermaid}. +\textquote{mermaid}. Πρόκειται για ένα διάγραμμα ακολουθίας (sequence diagram), +στο οποίο απεικονίζεται η αλληλεπίδραση του χρήστη με τον πάροχο νέφους μέσω +του SecDep, κατά την δημιουργία μιας εικονικής μηχανής. \begin{center} \begin{figure}[!ht] \centering - \includegraphics[width = .9\textwidth]{Figures/Diagrams/secdep-sequence-diagram.png} - \captionof{figure}{Διάγραμμα αλληλεπίδρασης χρήστη - παρόχου νέφους} + \includegraphics[width = 1\textwidth]{Figures/Diagrams/secdep-sequence-diagram.png} + \captionof{figure}{Διάγραμμα ακολουθίας για την δημιουργία εικονικής μηχανής} \label{fig:sequenceDiagram} \end{figure} \vspace*{-30pt} @@ -366,8 +403,169 @@ pydeps -T png --cluster --include-missing --max-bacon=1 --noshow --reverse --ran \vspace*{-30pt} \end{center} +\noindent Οι παραπάνω βιβλιοθήκες, αποτελούν τους πυλώνες του SecDep. Κάθε μια +από αυτές, εξειδικεύεται σε διαφορετικούς τομείς και χρησιμοποιείται για την +κάλυψη διαφόρων λειτουργιών του SecDep. Με την σειρά που απεικονίζονται, έχουν +τις εξής αρμοδιότητες: + +\begin{itemize} + + \item \textbf{azure}: + + Η βιβλιοθήκη της azure, χρησιμοποιείται για την επικοινωνία και + αυθεντικοποίηση με τον πάροχο νέφους Azure. Ο λόγος που χρειάζεται να + χρησιμοποιηθεί συνδυαστικά με την libcloud, είναι για επιτύχουμε την + ομοιόμορφη συμπεριφορά του εργαλείου κατά μήκος όλων των παρόχων που + αυτό υποστηρίζει. Συγκεκριμένα, την χρειαζόμαστε για την επίτευξη των + λειτουργιών δημιουργίας Resource Group και Virtual Network, καθώς αυτές + λειτουργίες δεν υποστηρίζονται από την libcloud την παρούσα στιγμή. + + \item \textbf{dotenv}: + + Η βιβλιοθήκη dotenv \footfullcite{dotenv} χρησιμοποιείται για την + ανάγνωση αρχείων \textquote{.env}. Το SecDep κάνει χρήση ενός αρχείου + \textquote{.env}, στο οποίο δηλώνονται οι τιμές που χρειάζεται για την + αυθεντικοποίηση με τους παρόχους νέφους. + + \item \textbf{libcloud}: + + Η βιβλιοθήκη libcloud είναι υπεύθυνη για την αυθεντικοποίηση με τους + παρόχους νέφους, με σκοπό την εκτέλεση διαφόρων λειτουργιών σχετικά με + τις εικονικές μηχανές του καθενός. Μας επιτρέπει να δημιουργούμε και να + διαχειριζόμαστε εικονικές μηχανές, καθώς και να λαμβάνουμε πληροφορίες + για πόρους του κάθε παρόχου νέφους. + + \item \textbf{rich}: + + Η βιβλιοθήκη rich \footfullcite{rich} εμπλουτίζει την εμφάνιση του + SecDep. Βοηθάει στην καλύτερη διαμόρφωση της εμφάνισης των + αποτελεσμάτων των εντολών του, με σκοπό την θετική αύξηση της εμπειρίας + χρήσης του εργαλείου. + + \item \textbf{shtab}: + + Η βιβλιοθήκη shtab \footfullcite{shtab} χρησιμοποιείται για την + δημιουργία συμπληρώσεων κελύφους. Αυτό αποτελεί βασικό χαρακτηριστικό + για την ευχρηστία του εργαλείου, καθώς διευκολύνει τον χρήστη στην + εύρεση των διαθέσιμων παραμέτρων και στην ταχύτερη σύνταξη εντολών. + + \item \textbf{paramiko}: + + Η βιβλιοθήκη paramiko \footfullcite{paramiko} αποτελεί εξάρτηση της + libcloud για την επικοινωνία με τις εικονικές μηχανές, κάνοντας χρήση + του πρωτοκόλλου SSH. Το SecDep, χρησιμοποιεί την βιβλιοθήκη αυτή για + την διαδραστική σύνδεση σε εικονικές μηχανές μέσω SSH σε περίπτωση + απουσίας πελάτη που να προσφέρει αυτή τη δυνατότητα. Επιπλέον, + χρησιμοποιείται για την δημιουργία κλειδιών SSH. + +\end{itemize} + \clearpage +\section{Αποφάσεις που πάρθηκαν κατά την ανάπτυξη} \label{developmentDecisions} + +Κατά την ανάπτυξη του συστήματος, προκειμένου να επιτευχθούν οι στόχοι που +θέσαμε στην Ενότητα \ref{overcomingDockerDisadvantages} και συγκεκριμένα για +την επικοινωνία και διασύνδεση με διάφορους παρόχους νέφους, επιλέχθηκε να +γίνει χρήση της βιβλιοθήκης libcloud \footfullcite{libcloud}. Μια από τις δύο +επιλογές βιβλιοθηκών της Apache \footfullcite{apache} για την επικοινωνία με +παρόχους νέφους στα πλαίσια της υλοποίησης multi-cloud εφαρμογών, πλατφορμών +και εργαλείων. Συγκριτικά με την βιβλιοθήκη jclouds \footfullcite{jclouds}, η +οποία σχεδιάστηκε για την γλώσσα Java \footfullcite{java}, η libcloud είναι πιο +απλή στην χρήση, αφού είναι σχεδιασμένη για την γλώσσα Python +\footfullcite{python}. Επιπροσθέτως, η libcloud είναι πιο διαδεδομένη, ενώ η +γλώσσα python αποτελεί μια πιο ευέλικτη επιλογή για τις ανάγκες της ανάπτυξης +του εργαλείου μας. Αυτό συμβαίνει διότι σε σχέση με την Java, η python είναι +απλούστερη στην σύνταξή της, προεγκατεστημένη σε πολλά λειτουργικά συστήματα +και διαθέτει πολλές επιβοηθητικές βιβλιοθήκες, επίσημες ή από τρίτους, οι +οποίες δύναται να εμπλουτίσουν τα προγράμματα σε python, με παραπάνω +λειτουργίες. + +Η ανάγκη για μια βιβλιοθήκη που θα λειτουργεί ως μεσάζοντας μεταξύ του +εργαλείου και των παρόχων νέφους, οφείλεται στο γεγονός ότι οι πάροχοι νέφους +δεν διαθέτουν ένα κοινό API για την διαχείριση των υποδομών τους. Απεναντίας, ο +καθένας από αυτούς διαθέτει το δικό του API, το οποίο χρησιμοποιείται έμμεσα +μέσω του πίνακα ελέγχου του, που βρίσκεται στην ιστοσελίδα του, ενός δικού του +εργαλείου γραμμής εντολών, ή άμεσα μέσω της βιβλιοθήκης που παρέχει ο ίδιος. Η +libcloud αποτελεί μια προσπάθεια δημιουργίας ενός ενιαίου API, το οποίο +χρησιμοποιώντας τις ίδιες μεθόδους, επιχειρεί να προσκομίσει πανομοιότυπα +αποτελέσματα (πχ. δημιουργία εικονικής μηχανής με συγκεκριμένα χαρακτηριστικά) +ανεξαρτήτως του παρόχου νέφους που στοχεύει. + +Παρ' όλη την προσπάθεια που καταβλήθηκε από την libcloud όμως, για την +ενοποίηση αυτή, οι διαφορές στους τρόπους λειτουργίας του κάθε παρόχου αρχίζουν +να εμφανίζονται σύντομα κατά την ανάπτυξη. Για το εργαλείο SecDep που προτείνει +η παρούσα διπλωματική εργασία, χρειάζεται να γίνει χρήση των λειτουργιών +\textquote{Compute} της βιβλιοθήκης libcloud. Στην αρχική σελίδα της +βιβλιοθήκης, αναφέρεται υποστήριξη για πάνω από 50 παρόχους. Κατά την σελίδα +τεκμηρίωσης \cite{libcloudProviders} για τις λειτουργίες \textquote{Compute}, +αναφέρονται 48 πάροχοι σε έναν πίνακα, ο οποίος αναγράφει την υποστήριξη ή +απουσία αυτής, για διάφορες λειτουργίες/μεθόδους (διαχείρισης) εικονικών +μηχανών. Στις λειτουργίες αυτές περιλαμβάνονται η δημιουργία εικονικών μηχανών, +η εκκίνηση, η παύση, η διαγραφή τους και εν γένει όσες λειτουργίες είναι +απαραίτητες για την ολοκληρωμένη λειτουργία του προτεινούμενού μας εργαλείου. +Από αυτούς τους 48 παρόχους, οι 25 υποστηρίζουν και τις 9 λειτουργίες +διαχείρισης. Ωστόσο, από αυτούς τους 25 έπρεπε να αφαιρεθούν οι 20 για λόγους, +όπως η μη ύπαρξη τεκμηρίωσης χρήσης από την libcloud, η μη συνέχιση της +λειτουργίας τους, η έλλειψη πληροφοριών τιμής ή δοκιμαστικής περιόδου για τις +υπηρεσίες τους και η αδυναμία δημιουργίας λογαριασμού στην επίσημη σελίδα τους. +Επομένως, υπάρχουν εν τέλει 5 πάροχοι νέφους που δύναται να χρησιμοποιηθούν, +υποστηρίζοντας όλες τις πιθανές λειτουργίες διαχείρισης εικονικών μηχανών. +Τέλος, από αυτούς τους 5, επιλέχθηκαν για επίσημη υποστήριξη από το εργαλείο +που προτείνεται στην παρούσα διπλωματική εργασία, τα τρία μεγαλύτερα ονόματα +του χώρου, οι Amazon, Google και Microsoft. Οι άλλοι δύο είτε δεν παρείχαν +δοκιμαστική περίοδο των υπηρεσιών τους, είτε δεν υπήρχε εμπιστοσύνη ως προς την +ποιότητα των υπηρεσιών αυτών. + +Παρακάτω θα διαπιστώσουμε πως ακόμα και με την χρήση της βιβλιοθήκης libcloud +και την επίσημη υποστήριξη όλων των λειτουργιών για κάθε πάροχο, υπήρχε η +ανάγκη χρήσης της επίσημης βιβλιοθήκης της Azure (Microsoft Azure SDK) για την +δημιουργία Resource Group \footfullcite{azure-mgmt-resource} και Virtual +Network \footfullcite{azure-mgmt-network} διότι αυτές οι λειτουργίες δεν +υποστηρίζονται μέσω της libcloud. Επιπροσθέτως, δίχως την υποστήριξη των +λειτουργιών αυτών, ο χρήστης θα ήταν υποχρεωμένος να δημιουργεί αυτούς τους +πόρους χειροκίνητα ή να είναι περιορισμένος μονάχα σε μια γεωγραφική τοποθεσία. +Οι δύο τελευταίες επιλογές πάνε ενάντια σε έναν από τους βασικότερους στόχους +του εργαλείου. Την ομοιόμορφη λειτουργία για κάθε πάροχο νέφους που +υποστηρίζεται. + +Πέρα από την απόφαση για την χρήση της 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{architecture} Οι διαθέσιμες συναρτήσεις και μεταβλητές του secdep.py, απεικονίζονται στα diff --git a/Figures/ContainersVsVMs/containers-vs-vms.jpg b/Figures/ContainersVsVMs/containers-vs-vms.jpg new file mode 100644 index 0000000..37599bc Binary files /dev/null and b/Figures/ContainersVsVMs/containers-vs-vms.jpg differ diff --git a/Figures/Diagrams/flowchart/1secdep-flowchart-diagram.png b/Figures/Diagrams/flowchart/1secdep-flowchart-diagram.png new file mode 100644 index 0000000..4dd89fc Binary files /dev/null and b/Figures/Diagrams/flowchart/1secdep-flowchart-diagram.png differ diff --git a/Figures/Diagrams/flowchart/2secdep-flowchart-diagramSimpleFunctions.png b/Figures/Diagrams/flowchart/2secdep-flowchart-diagramSimpleFunctions.png new file mode 100644 index 0000000..5a77b7a Binary files /dev/null and b/Figures/Diagrams/flowchart/2secdep-flowchart-diagramSimpleFunctions.png differ diff --git a/Figures/Diagrams/flowchart/3secdep-flowchart-ListVMs.png b/Figures/Diagrams/flowchart/3secdep-flowchart-ListVMs.png new file mode 100644 index 0000000..8333937 Binary files /dev/null and b/Figures/Diagrams/flowchart/3secdep-flowchart-ListVMs.png differ diff --git a/Figures/Diagrams/flowchart/4secdep-flowchart-ActionOnVM.png b/Figures/Diagrams/flowchart/4secdep-flowchart-ActionOnVM.png new file mode 100644 index 0000000..047eed3 Binary files /dev/null and b/Figures/Diagrams/flowchart/4secdep-flowchart-ActionOnVM.png differ diff --git a/Figures/Diagrams/flowchart/5secdep-flowchart-SSHToVM.png b/Figures/Diagrams/flowchart/5secdep-flowchart-SSHToVM.png new file mode 100644 index 0000000..c1243d6 Binary files /dev/null and b/Figures/Diagrams/flowchart/5secdep-flowchart-SSHToVM.png differ diff --git a/Figures/Diagrams/flowchart/6secdep-flowchart-ResourceInfo.png b/Figures/Diagrams/flowchart/6secdep-flowchart-ResourceInfo.png new file mode 100644 index 0000000..79c8318 Binary files /dev/null and b/Figures/Diagrams/flowchart/6secdep-flowchart-ResourceInfo.png differ diff --git a/Figures/Diagrams/flowchart/7secdep-flowchart-CreateVM.png b/Figures/Diagrams/flowchart/7secdep-flowchart-CreateVM.png new file mode 100644 index 0000000..97f85e8 Binary files /dev/null and b/Figures/Diagrams/flowchart/7secdep-flowchart-CreateVM.png differ diff --git a/Figures/Diagrams/secdep-flowchart-diagram.png b/Figures/Diagrams/flowchart/secdep-flowchart-diagramOLD.png similarity index 100% rename from Figures/Diagrams/secdep-flowchart-diagram.png rename to Figures/Diagrams/flowchart/secdep-flowchart-diagramOLD.png diff --git a/Figures/Diagrams/secdep-sequence-diagram.png b/Figures/Diagrams/secdep-sequence-diagram.png index e400244..31c7b72 100644 Binary files a/Figures/Diagrams/secdep-sequence-diagram.png and b/Figures/Diagrams/secdep-sequence-diagram.png differ diff --git a/Figures/Diagrams/secdep-sequence-diagramold.png b/Figures/Diagrams/secdep-sequence-diagramold.png new file mode 100644 index 0000000..e400244 Binary files /dev/null and b/Figures/Diagrams/secdep-sequence-diagramold.png differ diff --git a/Figures/Diagrams/secdep-use-case-diagram.jpg b/Figures/Diagrams/secdep-use-case-diagram.jpg index fa3210e..421bb1a 100644 Binary files a/Figures/Diagrams/secdep-use-case-diagram.jpg and b/Figures/Diagrams/secdep-use-case-diagram.jpg differ diff --git a/Figures/Diagrams/secdep-use-case-diagramNoNote.jpg b/Figures/Diagrams/secdep-use-case-diagramNoNote.jpg new file mode 100644 index 0000000..37d90ba Binary files /dev/null and b/Figures/Diagrams/secdep-use-case-diagramNoNote.jpg differ diff --git a/Figures/Diagrams/secdep-use-case-diagramOLD.jpg b/Figures/Diagrams/secdep-use-case-diagramOLD.jpg new file mode 100644 index 0000000..fa3210e Binary files /dev/null and b/Figures/Diagrams/secdep-use-case-diagramOLD.jpg differ diff --git a/Figures/GeeksForGeeksParavirtualization/Full-Virualization.png b/Figures/GeeksForGeeksParavirtualization/Full-Virualization.png index 50c43b6..d571e36 100644 Binary files a/Figures/GeeksForGeeksParavirtualization/Full-Virualization.png and b/Figures/GeeksForGeeksParavirtualization/Full-Virualization.png differ diff --git a/Figures/GeeksForGeeksParavirtualization/Full-VirualizationOld.png b/Figures/GeeksForGeeksParavirtualization/Full-VirualizationOld.png new file mode 100644 index 0000000..50c43b6 Binary files /dev/null and b/Figures/GeeksForGeeksParavirtualization/Full-VirualizationOld.png differ diff --git a/Figures/GeeksForGeeksParavirtualization/Paravirtualization.png b/Figures/GeeksForGeeksParavirtualization/Paravirtualization.png index b48a50c..d922fcf 100644 Binary files a/Figures/GeeksForGeeksParavirtualization/Paravirtualization.png and b/Figures/GeeksForGeeksParavirtualization/Paravirtualization.png differ diff --git a/Figures/GeeksForGeeksParavirtualization/ParavirtualizationOld.png b/Figures/GeeksForGeeksParavirtualization/ParavirtualizationOld.png new file mode 100644 index 0000000..b48a50c Binary files /dev/null and b/Figures/GeeksForGeeksParavirtualization/ParavirtualizationOld.png differ diff --git a/Figures/ThreatsLitchfield/threats.png b/Figures/ThreatsLitchfield/threats.png new file mode 100644 index 0000000..2aaaf1c Binary files /dev/null and b/Figures/ThreatsLitchfield/threats.png differ diff --git a/Thesis_Cholidis.tex b/Thesis_Cholidis.tex index e8007b0..cfd1ce4 100644 --- a/Thesis_Cholidis.tex +++ b/Thesis_Cholidis.tex @@ -167,7 +167,7 @@ Dennis Ritchie (1941 - 2011) %% ---------------------------------------------------------------- % Now begin the Appendices, including them as separate files -\addtocontents{toc}{\vspace{2em}} % Add a gap in the Contents, for aesthetics +% \addtocontents{toc}{\vspace{2em}} % Add a gap in the Contents, for aesthetics \appendix % Cue to tell LaTeX that the following 'chapters' are Appendices @@ -175,10 +175,12 @@ Dennis Ritchie (1941 - 2011) % Εδώ μπαίνουν τα παραρτήματα -\addtocontents{toc}{\vspace{2em}} % Add a gap in the Contents, for aesthetics +% \addtocontents{toc}{\vspace{2em}} % Add a gap in the Contents, for aesthetics %% ---------------------------------------------------------------- \label{Bibliography} +\addtocontents{toc}{} +\addtotoc{Βιβλιογραφία} \lhead{\textgreek{Βιβλιογραφία}} % Change the left side page header to "Bibliography" \renewcommand*{\bibfont}{\textbf\small} % Have the correct font