Low On Caffeine, Please Forgive Coding Style

This commit is contained in:
2024-01-31 20:32:04 +02:00
parent b948e93063
commit a2bc06e09f
6 changed files with 905 additions and 856 deletions

View File

@@ -12,6 +12,7 @@
\textbf{BIOS} & \textbf{B}asic \textbf{I}nput/\textbf{O}utput \textbf{S}ystem \\ \textbf{BIOS} & \textbf{B}asic \textbf{I}nput/\textbf{O}utput \textbf{S}ystem \\
\textbf{CaaS} & \textbf{C}ontainer \textbf{a}s \textbf{a} \textbf{S}ervice \\
\textbf{CAPEC} & \textbf{C}ommon \textbf{A}ttack \textbf{P}attern \textbf{E}numeration and \textbf{C}lassification \\ \textbf{CAPEC} & \textbf{C}ommon \textbf{A}ttack \textbf{P}attern \textbf{E}numeration and \textbf{C}lassification \\
\textbf{CCE} & \textbf{C}ommon \textbf{C}onfiguration \textbf{E}numeration \\ \textbf{CCE} & \textbf{C}ommon \textbf{C}onfiguration \textbf{E}numeration \\
\textbf{CERT} & \textbf{C}omputer \textbf{E}mergency \textbf{R}esponse \textbf{T}eam \\ \textbf{CERT} & \textbf{C}omputer \textbf{E}mergency \textbf{R}esponse \textbf{T}eam \\

View File

@@ -45,7 +45,7 @@ goal of this work is to make it easier for an organization to install and
configure in an automated manner a secure, distributed environment for the configure in an automated manner a secure, distributed environment for the
deployment and operation of a microservices application. This automation lies deployment and operation of a microservices application. This automation lies
in the correct configuration of our tool, which does not require any special in the correct configuration of our tool, which does not require any special
knowledge on technical or security issues in regard to infrastructure and knowledge on technical or security issues concerning the infrastructure and
operating systems. operating systems.
} }
@@ -53,7 +53,7 @@ operating systems.
\vskip 60pt \vskip 60pt
\textenglish{ \textenglish{
\noindent \textbf{Keywords:} Cloud, Security, Virtualization, Virtual Machines, Containers, Container \mbox{Engine}, Micro-services, Automation, Hardening \noindent \textbf{Keywords:} Cloud, Security, Virtualization, Virtual Machines, Containers, Container Engine, Micro-services, Automation, Hardening
} }
} }

View File

@@ -44,13 +44,6 @@
urldate = {2023-04-07}, urldate = {2023-04-07},
} }
@online{LXC,
title = {What's LXC?},
author = {Linux Containers},
url = {https://linuxcontainers.org/lxc/introduction/},
urldate = {2023-02-02},
}
@online{LXCvsDocker, @online{LXCvsDocker,
title = {LXC vs Docker: Which Container Platform Is Right for You?}, title = {LXC vs Docker: Which Container Platform Is Right for You?},
author = {Eric Kahuha}, author = {Eric Kahuha},
@@ -67,27 +60,6 @@
urldate = {2023-08-07}, urldate = {2023-08-07},
} }
@online{dockerhub,
title = {Build and Ship any Application Anywhere},
author = {Docker},
url = {https://hub.docker.com/},
urldate = {2023-04-06},
}
@online{quay,
title = {Quay builds, analyzes, distributes your container images},
author = {Red Hat},
url = {https://quay.io/},
urldate = {2023-11-16},
}
@online{oci,
title = {Open Container Initiative},
author = {The Linux Foundation},
url = {https://opencontainers.org/},
urldate = {2023-04-08},
}
@online{LXCvsDocker2, @online{LXCvsDocker2,
title = {The Untold Story: Containers Before Docker's Rise - The LXC Revolution}, title = {The Untold Story: Containers Before Docker's Rise - The LXC Revolution},
author = {Dinesh Patil}, author = {Dinesh Patil},
@@ -435,13 +407,6 @@
urldate = {2023-12-10}, urldate = {2023-12-10},
} }
@online{gVisor,
title = {The Container Security Platform},
author = {Google},
url = {https://gvisor.dev/},
urldate = {2023-09-25},
}
@online{ibmVirtualizationDefinition, @online{ibmVirtualizationDefinition,
title = {What is virtualization?}, title = {What is virtualization?},
author = {IBM}, author = {IBM},
@@ -618,20 +583,6 @@
urldate = {2023-07-29}, urldate = {2023-07-29},
} }
@online{ansible,
title = {Ansible},
author = {Red Hat},
url = {https://www.ansible.com/},
urldate = {2023-11-23},
}
@online{terraform,
title = {Terraform},
author = {HashiCorp},
url = {https://www.terraform.io/},
urldate = {2023-09-19},
}
@article{mell2011nist, @article{mell2011nist,
title = {The NIST Definition of Cloud Computing}, title = {The NIST Definition of Cloud Computing},
author = {Peter Mell and Timothy Grance}, author = {Peter Mell and Timothy Grance},
@@ -643,16 +594,6 @@
urldate = {2023-11-12}, urldate = {2023-11-12},
} }
@online{AkihiroSuda,
author = {Akihiro Suda},
title = {rootlesskit},
year = {2020},
publisher = {GitHub},
journal = {GitHub repository},
url = {https://github.com/rootless-containers/rootlesskit},
urldate = {2023-07-18},
}
@inproceedings{reshetova2014security, @inproceedings{reshetova2014security,
title = {Security of OS-level virtualization technologies}, title = {Security of OS-level virtualization technologies},
author = {Reshetova, Elena and Karhunen, Janne and Nyman, Thomas and Asokan, N}, author = {Reshetova, Elena and Karhunen, Janne and Nyman, Thomas and Asokan, N},
@@ -763,13 +704,6 @@
urldate = {2023-10-29}, urldate = {2023-10-29},
} }
@online{apparmor,
title = {AppArmor},
author = {AppArmor},
url = {https://apparmor.net/},
urldate = {2023-02-06},
}
@online{selinux, @online{selinux,
title = {What is SELinux?}, title = {What is SELinux?},
author = {Red Hat}, author = {Red Hat},
@@ -786,20 +720,6 @@
urldate = {2023-07-11}, urldate = {2023-07-11},
} }
@online{vuls,
title = {Vuls},
author = {Kota Kanbe},
url = {https://vuls.io/},
urldate = {2023-12-05},
}
@online{vulsGithubPage,
title = {Vuls},
author = {future-architect},
url = {https://github.com/future-architect/vuls},
urldate = {2023-06-28},
}
@online{vulsArchitecture, @online{vulsArchitecture,
title = {Vuls Architecture}, title = {Vuls Architecture},
author = {future-architect}, author = {future-architect},
@@ -814,98 +734,6 @@
urldate = {2023-12-05}, urldate = {2023-12-05},
} }
@online{lynis,
title = {Lynis},
author = {CISOfy},
url = {https://cisofy.com/lynis/},
urldate = {2023-12-06},
}
@online{lunar,
title = {Lunar},
author = {Lateral Blast},
url = {https://github.com/lateralblast/lunar},
urldate = {2023-12-06},
}
@online{vulsrepo,
title = {VulsRepo},
author = {ishiDACo},
url = {https://github.com/ishiDACo/vulsrepo},
urldate = {2023-12-06},
}
@online{awst3micro,
title = {Amazon EC2 T3 Instances},
author = {Amazon Web Services},
url = {https://aws.amazon.com/ec2/instance-types/t3/},
urldate = {2023-12-07},
}
@online{vantaget3micro,
title = {t3.micro},
author = {Vantage},
url = {https://instances.vantage.sh/aws/ec2/t3.micro},
urldate = {2023-12-07},
}
@online{watchtower,
title = {Watchtower},
author = {Containrrr},
url = {https://containrrr.dev/watchtower/},
urldate = {2023-11-10},
}
@online{secdep,
title = {SecDep},
author = {konsthol},
year = {2023},
url = {https://git.konsthol.eu/konsthol/SecDep},
urldate = {2023-09-28},
}
@online{pip,
title = {The Python package installer},
author = {pypa},
url = {https://github.com/pypa/pip},
urldate = {2023-08-12},
}
@online{libcloud,
title = {Apache Libcloud},
author = {The Apache Software Foundation},
url = {https://libcloud.apache.org/},
urldate = {2023-12-03},
}
@online{apache,
title = {Apache},
author = {The Apache Software Foundation},
url = {https://www.apache.org/},
urldate = {2023-08-07},
}
@online{jclouds,
title = {Apache jclouds},
author = {The Apache Software Foundation},
url = {https://jclouds.apache.org/},
urldate = {2023-07-26},
}
@online{java,
title = {Java},
author = {Oracle},
url = {https://www.java.com/en/},
urldate = {2023-09-15},
}
@online{python,
title = {Python},
author = {Python Software Foundation},
url = {https://www.python.org/},
urldate = {2023-04-12},
}
@online{libcloudProviders, @online{libcloudProviders,
title = {Apache Libcloud - Supported Providers}, title = {Apache Libcloud - Supported Providers},
author = {The Apache Software Foundation}, author = {The Apache Software Foundation},
@@ -913,137 +741,315 @@
urldate = {2023-08-07}, urldate = {2023-08-07},
} }
@online{lynis,
title = {Lynis},
author = {CISOfy},
url = {https://cisofy.com/lynis/},
}
urldate = {2023-12-06},
@online{lunar,
title = {Lunar},
author = {Lateral Blast},
url = {https://github.com/lateralblast/lunar},
}
urldate = {2023-12-06},
@online{vulsrepo,
title = {VulsRepo},
author = {ishiDACo},
url = {https://github.com/ishiDACo/vulsrepo},
}
urldate = {2023-12-06},
@online{awst3micro,
title = {Amazon EC2 T3 Instances},
author = {Amazon Web Services},
url = {https://aws.amazon.com/ec2/instance-types/t3/},
}
urldate = {2023-12-07},
@online{vantaget3micro,
title = {t3.micro},
author = {Vantage},
url = {https://instances.vantage.sh/aws/ec2/t3.micro},
}
urldate = {2023-12-07},
@online{watchtower,
title = {Watchtower},
author = {Containrrr},
url = {https://containrrr.dev/watchtower/},
}
urldate = {2023-11-10},
@online{secdep,
title = {SecDep},
author = {konsthol},
year = {2023},
url = {https://git.konsthol.eu/konsthol/SecDep},
}
urldate = {2023-09-28},
@online{pip,
title = {The Python package installer},
author = {pypa},
url = {https://github.com/pypa/pip},
}
urldate = {2023-08-12},
@online{libcloud,
title = {Apache Libcloud},
author = {The Apache Software Foundation},
url = {https://libcloud.apache.org/},
}
urldate = {2023-12-03},
@online{apache,
title = {Apache},
author = {The Apache Software Foundation},
url = {https://www.apache.org/},
}
urldate = {2023-08-07},
@online{jclouds,
title = {Apache jclouds},
author = {The Apache Software Foundation},
url = {https://jclouds.apache.org/},
}
urldate = {2023-07-26},
@online{java,
title = {Java},
author = {Oracle},
url = {https://www.java.com/en/},
}
urldate = {2023-09-15},
@online{python,
title = {Python},
author = {Python Software Foundation},
url = {https://www.python.org/},
}
urldate = {2023-04-12},
@online{azure-mgmt-network, @online{azure-mgmt-network,
title = {Microsoft Azure SDK for Python}, title = {Microsoft Azure SDK for Python},
author = {Microsoft}, author = {Microsoft},
url = {https://pypi.org/project/azure-mgmt-network/}, url = {https://pypi.org/project/azure-mgmt-network/},
urldate = {2023-02-12},
} }
urldate = {2023-02-12},
@online{azure-mgmt-resource, @online{azure-mgmt-resource,
title = {Microsoft Azure SDK for Python}, title = {Microsoft Azure SDK for Python},
author = {Microsoft}, author = {Microsoft},
url = {https://pypi.org/project/azure-mgmt-resource/}, url = {https://pypi.org/project/azure-mgmt-resource/},
urldate = {2023-05-21},
} }
urldate = {2023-05-21},
@online{yuml, @online{yuml,
title = {yUML}, title = {yUML},
author = {yUML}, author = {yUML},
url = {https://yuml.me/}, url = {https://yuml.me/},
urldate = {2023-12-30},
} }
urldate = {2023-12-30},
@online{libcloud-cli, @online{libcloud-cli,
title = {libcloud-cli}, title = {libcloud-cli},
author = {Terradue}, author = {Terradue},
url = {https://github.com/Terradue/libcloud-cli}, url = {https://github.com/Terradue/libcloud-cli},
urldate = {2023-08-31},
} }
urldate = {2023-08-31},
@online{jshielder, @online{jshielder,
title = {JShielder}, title = {JShielder},
author = {Jsitech}, author = {Jsitech},
url = {https://github.com/Jsitech/JShielder}, url = {https://github.com/Jsitech/JShielder},
urldate = {2023-12-05},
} }
urldate = {2023-12-05},
@online{nixarmor, @online{nixarmor,
title = {nixarmor}, title = {nixarmor},
author = {Emir Ozer}, author = {Emir Ozer},
url = {https://github.com/emirozer/nixarmor}, url = {https://github.com/emirozer/nixarmor},
urldate = {2023-12-05},
} }
urldate = {2023-12-05},
@online{ubuntu, @online{ubuntu,
title = {Ubuntu}, title = {Ubuntu},
author = {Canonical}, author = {Canonical},
url = {https://ubuntu.com/}, url = {https://ubuntu.com/},
urldate = {2023-12-30},
} }
urldate = {2023-12-30},
@online{debian, @online{debian,
title = {Debian}, title = {Debian},
author = {Debian}, author = {Debian},
url = {https://www.debian.org/}, url = {https://www.debian.org/},
urldate = {2023-12-30},
} }
urldate = {2023-12-30},
@online{centos, @online{centos,
title = {CentOS}, title = {CentOS},
author = {CentOS}, author = {CentOS},
url = {https://www.centos.org/}, url = {https://www.centos.org/},
urldate = {2023-12-30},
} }
urldate = {2023-12-30},
@online{fedora, @online{fedora,
title = {Fedora}, title = {Fedora},
author = {Fedora}, author = {Fedora},
url = {https://fedoraproject.org/}, url = {https://fedoraproject.org/},
urldate = {2023-12-30},
} }
urldate = {2023-12-30},
@online{redhat, @online{redhat,
title = {Red Hat}, title = {Red Hat},
author = {Red Hat}, author = {Red Hat},
url = {https://www.redhat.com/}, url = {https://www.redhat.com/},
urldate = {2023-12-30},
} }
urldate = {2023-12-30},
@online{opensuse, @online{opensuse,
title = {openSUSE}, title = {openSUSE},
author = {openSUSE}, author = {openSUSE},
url = {https://www.opensuse.org/}, url = {https://www.opensuse.org/},
urldate = {2023-12-30},
} }
urldate = {2023-12-30},
@online{mermaid, @online{mermaid,
title = {Mermaid}, title = {Mermaid},
author = {Mermaid}, author = {Mermaid},
url = {https://mermaid.live/}, url = {https://mermaid.live/},
urldate = {2024-01-05},
} }
urldate = {2024-01-05},
@online{code2flow, @online{code2flow,
title = {code2flow}, title = {code2flow},
author = {Scott Rogowski}, author = {Scott Rogowski},
url = {https://github.com/scottrogowski/code2flow}, url = {https://github.com/scottrogowski/code2flow},
urldate = {2024-01-05},
} }
urldate = {2024-01-05},
@online{callGraph, @online{callGraph,
title = {callGraph}, title = {callGraph},
author = {Chris Koknat}, author = {Chris Koknat},
url = {https://github.com/koknat/callGraph}, url = {https://github.com/koknat/callGraph},
urldate = {2024-01-05},
} }
urldate = {2024-01-05},
@online{pydeps, @online{pydeps,
title = {pydeps}, title = {pydeps},
author = {Bjorn}, author = {Bjorn},
url = {https://github.com/thebjorn/pydeps}, url = {https://github.com/thebjorn/pydeps},
urldate = {2024-01-05},
} }
urldate = {2024-01-05},
@online{doxygen, @online{doxygen,
title = {Doxygen}, title = {Doxygen},
author = {Dimitri van Heesch}, author = {Dimitri van Heesch},
url = {https://github.com/doxygen/doxygen}, url = {https://github.com/doxygen/doxygen},
urldate = {2024-01-05},
} }
urldate = {2024-01-05},
@online{mysql, @online{mysql,
title = {MySQL}, title = {MySQL},
author = {Oracle}, author = {Oracle},
url = {https://www.mysql.com/}, url = {https://www.mysql.com/},
urldate = {2024-01-05},
} }
urldate = {2024-01-05},
@online{nginx, @online{nginx,
title = {NGINX}, title = {NGINX},
author = {NGINX}, author = {NGINX},
url = {https://nginx.org/en/}, url = {https://nginx.org/en/},
}
urldate = {2024-01-05}, urldate = {2024-01-05},
@online{LXC,
title = {What's LXC?},
author = {Linux Containers},
url = {https://linuxcontainers.org/lxc/introduction/},
}
urldate = {2023-02-02},
@online{dockerhub,
title = {Build and Ship any Application Anywhere},
author = {Docker},
url = {https://hub.docker.com/},
}
urldate = {2023-04-06},
@online{quay,
title = {Quay builds, analyzes, distributes your container images},
author = {Red Hat},
url = {https://quay.io/},
}
urldate = {2023-11-16},
@online{oci,
title = {Open Container Initiative},
author = {The Linux Foundation},
url = {https://opencontainers.org/},
}
urldate = {2023-04-08},
@online{gVisor,
title = {The Container Security Platform},
author = {Google},
url = {https://gvisor.dev/},
}
urldate = {2023-09-25},
@online{ansible,
title = {Ansible},
author = {Red Hat},
url = {https://www.ansible.com/},
}
urldate = {2023-11-23},
@online{terraform,
title = {Terraform},
author = {HashiCorp},
url = {https://www.terraform.io/},
}
urldate = {2023-09-19},
@online{AkihiroSuda,
author = {Akihiro Suda},
title = {rootlesskit},
year = {2020},
publisher = {GitHub},
journal = {GitHub repository},
url = {https://github.com/rootless-containers/rootlesskit},
}
urldate = {2023-07-18},
@online{apparmor,
title = {AppArmor},
author = {AppArmor},
url = {https://apparmor.net/},
}
urldate = {2023-02-06},
@online{vuls,
title = {Vuls},
author = {Kota Kanbe},
url = {https://vuls.io/},
}
urldate = {2023-12-05},
@online{vulsGithubPage,
title = {Vuls},
author = {future-architect},
url = {https://github.com/future-architect/vuls},
}
urldate = {2023-06-28},
@online{rkt,
title = {rkt},
author = {rkt},
url = {https://github.com/rkt/rkt},
} }
inproceedings{manu2016study, inproceedings{manu2016study,

View File

@@ -4,14 +4,14 @@
\noindent Παραδοσιακά, όταν ένας χρήστης/εταιρεία επιθυμούσε να διαθέτει μια \noindent Παραδοσιακά, όταν ένας χρήστης/εταιρεία επιθυμούσε να διαθέτει μια
υπηρεσία στο ευρύ κοινό θα έπρεπε να επενδύσει ένα κατάλληλο κεφάλαιο για την υπηρεσία στο ευρύ κοινό θα έπρεπε να επενδύσει ένα κατάλληλο κεφάλαιο για την
αγορά εξοπλισμού. Σε περίπτωση που η υπηρεσία αυτή τύγχανε ευρείας αποδοχής, αγορά σχετικού εξοπλισμού. Σε περίπτωση που η υπηρεσία αυτή τύγχανε ευρείας
καθίστατο επιτακτική η ανάγκη της επέκτασης του υφιστάμενου εξοπλισμού αλλά και αποδοχής, καθίστατο επιτακτική η ανάγκη της επέκτασης του υφιστάμενου
της εγκατάστασης όλων των αναγκαίων πόρων λογισμικού (βάσεων δεδομένων εξοπλισμού αλλά και της εγκατάστασης όλων των αναγκαίων πόρων λογισμικού
(Databases), λογισμικό της υπηρεσίας, αρχείων ρυθμίσεων, κ.λπ.) στα νέα (βάσεων δεδομένων (Databases), λογισμικό της υπηρεσίας, αρχείων ρυθμίσεων,
κομμάτια εξοπλισμού που αγοράσθηκαν. Η παραπάνω διαδικασία απαιτούσε επιπλέον κ.λπ.) στα νέα κομμάτια εξοπλισμού που αγοράσθηκαν. Η παραπάνω διαδικασία
κεφάλαιο και αρκετές εργατοώρες προκειμένου να γίνει πράξη. Επιπρόσθετα, η απαιτούσε επιπλέον κεφάλαιο και αρκετές εργατοώρες προκειμένου να γίνει πράξη.
λειτουργία του εξοπλισμού και η συντήρησή του είχε κι αυτή ένα σημαντικό Επιπρόσθετα, η λειτουργία του εξοπλισμού και η συντήρησή του είχε κι αυτή ένα
κόστος. σημαντικό κόστος.
Στις αρχές του 2000 ο τρόπος διεξαγωγής της παραπάνω διαδικασίας άλλαξε ριζικά Στις αρχές του 2000 ο τρόπος διεξαγωγής της παραπάνω διαδικασίας άλλαξε ριζικά
όταν η Amazon, ψάχνοντας τρόπους να κλιμακώσει τις υπηρεσίες που προσέφερε στον όταν η Amazon, ψάχνοντας τρόπους να κλιμακώσει τις υπηρεσίες που προσέφερε στον
@@ -36,22 +36,23 @@ AWS (Amazon Web Services). Η AWS άρχισε να προσφέρει υπηρ
προσφέρουν υπηρεσίες νεφο-υπολογιστικής και μάλιστα μερικές από αυτές, όπως η προσφέρουν υπηρεσίες νεφο-υπολογιστικής και μάλιστα μερικές από αυτές, όπως η
Linode, Vultr και Digital Ocean, προσφέρουν ως την κύρια υπηρεσία τους τη Linode, Vultr και Digital Ocean, προσφέρουν ως την κύρια υπηρεσία τους τη
δυνατότητα διάθεσης υπολογιστικών πόρων στους χρήστες με τη μορφή ενοικίασης δυνατότητα διάθεσης υπολογιστικών πόρων στους χρήστες με τη μορφή ενοικίασης
εικονικών μηχανών (Virtual Machines). εικονικών μηχανών (Virtual Machines - VMs).
\section{Ασφάλεια Περιβαλλόντων Νέφους} \label{cloudComputingSecurity} \section{Ασφάλεια Περιβαλλόντων Νέφους} \label{cloudComputingSecurity}
Η ασφάλεια των περιβαλλόντων νέφους είναι ένα θέμα που απασχολεί πολύ τους Η ασφάλεια των περιβαλλόντων νέφους είναι ένα θέμα που απασχολεί πολύ τους
χρήστες και ακόμα περισσότερο τις επιχειρήσεις που βασίζονται σε υπηρεσίες χρήστες και ακόμα περισσότερο τις επιχειρήσεις που βασίζονται σε υπηρεσίες
νεφο-υπολογιστικής για την διάθεση των δικών τους υπηρεσιών. Η επίτευξή της νεφο-υπολογιστικής για την διάθεση των δικών τους υπηρεσιών. Η επίτευξη
εξαρτάται από τρεις βασικούς παράγοντες. Ο πρώτος είναι η ασφάλεια των υποδομών κατάλληλου επιπέδου ασφάλειας εξαρτάται από τρεις βασικούς παράγοντες. Ο πρώτος
νέφους, όπου στην περίπτωση χρήσης υπηρεσιών IaaS υπεύθυνος είναι ο πάροχος είναι η ασφάλεια των υποδομών νέφους, όπου στην περίπτωση χρήσης υπηρεσιών IaaS
νέφους. Ο δεύτερος παράγοντας είναι η ασφάλεια των τεχνολογιών εικονικοποίησης υπεύθυνος είναι ο πάροχος νέφους. Ο δεύτερος παράγοντας είναι η ασφάλεια των
που χρησιμοποιούνται, όπου υπεύθυνος είναι εν μέρει ο πάροχος για τις τεχνολογιών εικονικοποίησης που χρησιμοποιούνται, όπου υπεύθυνος είναι εν μέρει
τεχνολογίες που επέλεξε προκειμένου να διαθέσει τους απομακρυσμένους ο πάροχος για τις τεχνολογίες που επέλεξε προκειμένου να διαθέσει τους
(εικονικούς) διακομιστές του και ο τελικός χρήστης εφόσον προβεί στην χρήση απομακρυσμένους (εικονικούς) διακομιστές του και ο τελικός χρήστης εφόσον
δοχείων. Ο τρίτος και τελευταίος παράγοντας είναι οι ενέργειες στις οποίες προβεί στην χρήση τεχνολογιών δοχείων (containers) (δηλ. ένα είδος τεχνολογίας
οφείλει να προβεί ο χρήστης προκειμένου να διατηρήσει ή να ενισχύσει την εικονικοποίησης). Ο τρίτος και τελευταίος παράγοντας είναι οι ενέργειες στις
ασφάλεια της υπηρεσίας του (που θα φιλοξενείται από μια υποδομή νέφους) σύμφωνα οποίες οφείλει να προβεί ο χρήστης προκειμένου να διατηρήσει ή να ενισχύσει την
ασφάλεια της υπηρεσίας του (που θα φιλοξενείται σε μια υποδομή νέφους) σύμφωνα
με τις ανάγκες του. με τις ανάγκες του.
Όταν επιλέξει ένας χρήστης να δημιουργήσει εικονικές μηχανές μέσω μιας από τις Όταν επιλέξει ένας χρήστης να δημιουργήσει εικονικές μηχανές μέσω μιας από τις
@@ -60,7 +61,7 @@ Linode, Vultr και Digital Ocean, προσφέρουν ως την κύρια
προσφέρονται, τις περισσότερες φορές διατίθενται διάφορες διανομές λειτουργικού προσφέρονται, τις περισσότερες φορές διατίθενται διάφορες διανομές λειτουργικού
συστήματος Linux, οι οποίες ενδέχεται να έχουν εγκατεστημένα και ρυθμισμένα εκ συστήματος Linux, οι οποίες ενδέχεται να έχουν εγκατεστημένα και ρυθμισμένα εκ
των προτέρων διάφορα λογισμικά, όπως το σύστημα διαχείρισης βάσεων δεδομένων των προτέρων διάφορα λογισμικά, όπως το σύστημα διαχείρισης βάσεων δεδομένων
MySQL \footfullcite{mysql} και το διακομιστή ιστού Nginx \footfullcite{nginx}. MySQL \footfullcite{mysql} και ο διακομιστής ιστού nginx \footfullcite{nginx}.
Με αυτό τον τρόπο, η διαδικασία δημιουργίας εικονικής μηχανής είναι αρκετά Με αυτό τον τρόπο, η διαδικασία δημιουργίας εικονικής μηχανής είναι αρκετά
εύκολη για τον χρήστη, ο οποίος δεν χρειάζεται να έχει ειδικές γνώσεις στο εύκολη για τον χρήστη, ο οποίος δεν χρειάζεται να έχει ειδικές γνώσεις στο
υλικό για να το πετύχει αυτό. Στην προκειμένη περίπτωση, ενώ υπάρχει μηδενική υλικό για να το πετύχει αυτό. Στην προκειμένη περίπτωση, ενώ υπάρχει μηδενική
@@ -76,7 +77,7 @@ MySQL \footfullcite{mysql} και το διακομιστή ιστού Nginx \fo
Όπως αναφέρεται και στο \citealt{balduzzi2012security}, υπάρχουν υπηρεσίες IaaS Όπως αναφέρεται και στο \citealt{balduzzi2012security}, υπάρχουν υπηρεσίες IaaS
που προσφέρουν διανομές λειτουργικού συστήματος Linux με εγκατεστημένα και που προσφέρουν διανομές λειτουργικού συστήματος Linux με εγκατεστημένα και
ρυθμισμένα εκ τω προτέρων προγράμματα από τρίτους. Σε ορισμένες περιπτώσεις ρυθμισμένα εκ των προτέρων προγράμματα από τρίτους. Σε ορισμένες περιπτώσεις
όπου υπάρχει τυφλή εμπιστοσύνη προς την ορθότητα των ρυθμίσεων αυτών σε όπου υπάρχει τυφλή εμπιστοσύνη προς την ορθότητα των ρυθμίσεων αυτών σε
συνδυασμό με έλλειψη γνώσης των εργαλείων, ενδέχεται λόγω ανθρώπινου λάθους ή συνδυασμό με έλλειψη γνώσης των εργαλείων, ενδέχεται λόγω ανθρώπινου λάθους ή
στοχευμένα, να μένει ο τελικός χρήστης ευάλωτος σε ρίσκα ασφαλείας, όπως μη στοχευμένα, να μένει ο τελικός χρήστης ευάλωτος σε ρίσκα ασφαλείας, όπως μη
@@ -85,9 +86,10 @@ MySQL \footfullcite{mysql} και το διακομιστή ιστού Nginx \fo
παραλείψει να εφαρμόσει τις απαραίτητες ενημερώσεις ασφαλείας στις τεχνολογίες παραλείψει να εφαρμόσει τις απαραίτητες ενημερώσεις ασφαλείας στις τεχνολογίες
εικονικοποίησης που χρησιμοποιεί, είναι πιθανό κάποιο από τα προγράμματα αυτά εικονικοποίησης που χρησιμοποιεί, είναι πιθανό κάποιο από τα προγράμματα αυτά
να μπορέσει να πραγματοποιήσει μια επίθεση hyperjacking \cite{Hyperjacking} και να μπορέσει να πραγματοποιήσει μια επίθεση hyperjacking \cite{Hyperjacking} και
να αποκτήσει έλεγχο του υπερ-επόπτη με αποτέλεσμα να είναι σε θέση να να αποκτήσει έλεγχο του υπερ-επόπτη (hypervisor) με αποτέλεσμα να είναι σε θέση
προκαλέσει ζημιές είτε σε διαφορετικές εικονικές μηχανές είτε στον (φυσικό) να προκαλέσει ζημιές είτε σε διαφορετικές εικονικές μηχανές που ελέγχονται από
διακομιστή στον οποίο εκτελείται. τον υπερ-επόπτη είτε στον (φυσικό) διακομιστή (host machine ή απλώς host) στον
οποίο αυτός εκτελείται.
\section{Εικονικοποίηση και τεχνολογίες υλοποίησής της} \label{virtualizationTechnologiesIntroduction} \section{Εικονικοποίηση και τεχνολογίες υλοποίησής της} \label{virtualizationTechnologiesIntroduction}
@@ -99,36 +101,31 @@ MySQL \footfullcite{mysql} και το διακομιστή ιστού Nginx \fo
\ref{virtualizationImplementations} αλλά οι δύο βασικότερες υλοποιήσεις της \ref{virtualizationImplementations} αλλά οι δύο βασικότερες υλοποιήσεις της
είναι η εικονικοποίηση διακομιστών και λειτουργικών συστημάτων (δοχειοποίηση). είναι η εικονικοποίηση διακομιστών και λειτουργικών συστημάτων (δοχειοποίηση).
Στην εικονικοποίηση διακομιστών, ένας φυσικός διακομιστής χωρίζει με την Στην εικονικοποίηση διακομιστών (host virtualization), ένας φυσικός διακομιστής
βοήθεια ενός υπερ-επόπτη τους πόρους του, όπως η μνήμη, ο αποθηκευτικός χώρος χωρίζει με την βοήθεια ενός υπερ-επόπτη τους πόρους του, όπως είναι η μνήμη, ο
και ο επεξεργαστής του, σε πολλά μικρότερα εικονικά μηχανήματα. Κάθε εικονικό αποθηκευτικός χώρος και ο επεξεργαστής του, σε πολλές μικρότερες εικονικές
μηχάνημα μπορεί να εκτελεί διαφορετικό λειτουργικό σύστημα και να έχει μηχανές. Κάθε εικονική μηχανή μπορεί να εκτελεί διαφορετικό λειτουργικό σύστημα
διαφορετικές ρυθμίσεις από τα υπόλοιπα. Η διάθεση ενός εικονικού μηχανήματος και να έχει διαφορετικές ρυθμίσεις από τις υπόλοιπες. Η διάθεση μιας εικονικής
δεν περιορίζεται μονάχα σε τοπικούς υπολογιστές και έτσι πολλές φορές μηχανής δεν περιορίζεται μονάχα σε τοπικούς υπολογιστές και έτσι πολλές φορές
συνηθίζεται η ενοικίαση τέτοιων μηχανημάτων προκειμένου να μπορέσουν να συνηθίζεται η ενοικίαση τέτοιων μηχανών (σε περιβάλλοντα νέφους) προκειμένου να
χρησιμοποιηθούν από τρίτα πρόσωπα για την επίτευξη των δικών τους διεργασιών. μπορέσουν να χρησιμοποιηθούν από τρίτα πρόσωπα για την επίτευξη των δικών τους
διαδικασιών.
Η δοχειοποίηση αποτελεί μια ειδική περίπτωση εικονικοποίησης όπου αντί για το Κατά την δοχειοποίηση (containerization), μιας ειδικής περίπτωσης
υλικό, εικονικοποιείται το λειτουργικό σύστημα. Αυτό, καθιστά την δοχειοποίηση εικονικοποίησης, αντί για το υλικό, εικονικοποιείται το λειτουργικό σύστημα.
πιο αποδοτική από την εικονικοποίηση διακομιστών, καθώς δεν χρειάζεται να Επομένως, τα δοχεία είναι ένα προϊόν της δοχειοποίησης και αποτελούν το
εκτελεστεί ένας υπερ-επόπτης για την διαχείριση υπολογιστικών πόρων. Επιπλέον, αποτέλεσμα της εικονικοποίησης σε επίπεδο λειτουργικού συστήματος. Με την
η δοχειοποίηση επιτρέπει την εκτέλεση περισσότερων εικονικών περιβαλλόντων στον βοήθεια του λειτουργικού συστήματος, δημιουργούνται εικονικά περιβάλλοντα στα
ίδιο φυσικό διακομιστή και έτσι, η απόδοση του υλικού αυξάνεται ακόμα οποία μπορούν αυτά να εκτελεστούν. Ουσιαστικά, μια μηχανή δοχείων αιτείται από
περισσότερο. Συνήθως χρησιμοποιείται για την διάθεση προγραμμάτων στο ευρύ το λειτουργικό σύστημα την διάθεση ενός εικονικού περιβάλλοντος για την
κοινό, τα οποία ακολουθούν την αρχιτεκτονική μικρο-υπηρεσιών (microservices) εκτέλεση των διεργασιών ενός προγράμματος. Το πρόγραμμα αυτό, καθώς και όλες οι
και λόγω του ότι τα παράγωγά της περιέχουν όλες τις απαραίτητες βιβλιοθήκες για βιβλιοθήκες που χρειάζεται, καθορίζονται σε μια εικόνα δοχείου (container
την εκτέλεσή τους, χωρίς να βασίζονται στο υποκείμενο νέφος στο οποίο image), την οποία η μηχανή δοχείων θα πρέπει να ανακτήσει, να αποθηκεύσει και
στεγάζονται, αποτελούν αρκετά δημοφιλή επιλογή τεχνολογίας διάθεσης υπηρεσιών. με βάση αυτήν να δημιουργήσει το αντιστοιχούμενο δοχείο που αυτή περιγράφει. Η
πιο συνηθισμένη υλοποίηση της δοχειοποίησης είναι η δοχειοποίηση εφαρμογών μέσω
Τα δοχεία είναι ένα προϊόν της δοχειοποίησης και αποτελούν το αποτέλεσμα της της μηχανής δοχείων Docker. Αυτό συμβαίνει διότι μέσω της πλατφόρμας που αυτό
εικονικοποίησης σε επίπεδο λειτουργικού συστήματος. Με την βοήθεια του παρέχει, η διαχείριση και χρήση δοχείων επιτυγχάνεται εύκολα από ομάδες
λειτουργικού συστήματος, δημιουργούνται εικονικά περιβάλλοντα στα οποία μπορούν ανάπτυξης λογισμικού κάθε επιπέδου.
αυτά να εκτελεστούν. Ουσιαστικά, μια μηχανή δοχείων αιτείται από το λειτουργικό
σύστημα την διάθεση ενός εικονικού περιβάλλοντος για την εκτέλεση των
διεργασιών ενός προγράμματος. Το πρόγραμμα αυτό, καθώς και όλες οι βιβλιοθήκες
που χρειάζεται, καθορίζονται σε μια εικόνα δοχείου (container image) την οποία
η μηχανή δοχείων θα πρέπει να ανακτήσει, να αποθηκεύσει και με βάση αυτήν να
δημιουργήσει το αντιστοιχούμενο δοχείο που αυτή περιγράφει.
Η δοχειοποίηση αποτελεί μια ελαφρύτερη εναλλακτική λύση σε σύγκριση με την Η δοχειοποίηση αποτελεί μια ελαφρύτερη εναλλακτική λύση σε σύγκριση με την
εικονικοποίηση και είθισται να προτιμάται για την ανάπτυξη και διάθεση εικονικοποίηση και είθισται να προτιμάται για την ανάπτυξη και διάθεση
@@ -136,251 +133,19 @@ MySQL \footfullcite{mysql} και το διακομιστή ιστού Nginx \fo
δοχείων μπορεί να πραγματοποιηθεί σε κάθε περιβάλλον και νέφος, καθώς και στο δοχείων μπορεί να πραγματοποιηθεί σε κάθε περιβάλλον και νέφος, καθώς και στο
γεγονός ότι αυτά απαιτούν λιγότερους πόρους σε σχέση με τις εικονικές μηχανές, γεγονός ότι αυτά απαιτούν λιγότερους πόρους σε σχέση με τις εικονικές μηχανές,
αφού οι υποκείμενοι πόροι του συστήματος μπορούν να μοιραστούν μεταξύ των αφού οι υποκείμενοι πόροι του συστήματος μπορούν να μοιραστούν μεταξύ των
διαφορετικών δοχείων. διαφορετικών δοχείων. Αυτό, καθιστά την δοχειοποίηση πιο αποδοτική από την
εικονικοποίηση διακομιστών, καθώς δεν χρειάζεται να εκτελεστεί ένας
υπερ-επόπτης για την διαχείριση υπολογιστικών πόρων. Επιπλέον, η δοχειοποίηση
επιτρέπει την εκτέλεση περισσότερων εικονικών περιβαλλόντων στον ίδιο φυσικό
διακομιστή και έτσι, η απόδοση του υλικού αυξάνεται ακόμα περισσότερο. Συνήθως
χρησιμοποιείται για την διάθεση εφαρμογών στο ευρύ κοινό, οι οποίες ακολουθούν
την αρχιτεκτονική μικρο-υπηρεσιών (microservices). Δηλαδή, της διαμέρισης των
λειτουργιών τους σε δοχεία. Λόγω του ότι τα παράγωγα της δοχειοποίησης
περιέχουν όλες τις απαραίτητες βιβλιοθήκες για την εκτέλεσή τους, χωρίς να
βασίζονται στο υποκείμενο νέφος στο οποίο στεγάζονται, η δοχειοποίηση αποτελεί
αρκετά δημοφιλή επιλογή τεχνολογίας διάθεσης υπηρεσιών.
\subsection{Πλεονεκτήματα δοχείων έναντι εικονικών μηχανών} \label{containerAdvantages} \section{Ασφάλεια συστήματος κατά τη χρήση του Docker} \label{dockerSecurity}
Ενώ μια εικονική μηχανή είναι μια πλήρης αναπαράσταση ενός φυσικού διακομιστή,
ένα δοχείο εξομοιώνει μονάχα το περιβάλλον εκτέλεσης ενός λογισμικού. Αυτό
σημαίνει πως εάν θεωρηθεί ως τελικός στόχος η εκτέλεση ενός λογισμικού
απομονωμένο από το υπόλοιπο σύστημα, αυτό επιτυγχάνεται με δύο διαφορετικούς
τρόπους, αφού οι εικονικές μηχανές και τα δοχεία χρησιμοποιούν διαφορετικού
είδους εικονικοποίηση. Στην περίπτωση των δοχείων δεν έχουμε απομόνωση μηχανών
αλλά διεργασιών. Γεγονός που συμβάλλει στην αποφυγή της επιβάρυνσης του
συστήματος που θα επιβάλλονταν από τις διεργασίες του υπερ-επόπτη και της
καθυστέρησης που θα υπήρχε για την εκκίνηση ενός ολόκληρου λειτουργικού
συστήματος. Επιπλέον, η μη χρήση τεχνολογιών εικονικοποίησης σε επίπεδο υλικού
αυξάνει την μεταφερσιμότητα των δοχείων αφού σε μια εικόνα δοχείου μπορούν να
ορισθούν όλες οι απαραίτητες εξαρτήσεις ενός λογισμικού και να αναδημιουργηθούν
σε οποιοδήποτε περιβάλλον νέφους.
Παρ' όλο που πολλές φορές τα δοχεία συγχέονται με τις εικονικές μηχανές, οι δύο
αυτές έννοιες έχουν αρκετές διαφορές στην αρχιτεκτονική τους. Στην παραδοσιακή
εικονικοποίηση είτε αυτή γίνεται στις υπάρχουσες υποδομές μιας επιχείρησης είτε
σε ένα περιβάλλον νέφους, ένας υπερ-επόπτης πρέπει να χρησιμοποιηθεί για να
εικονικοποιήσει φυσικό υλικό. Κάθε εικονική μηχανή έχει ένα δικό της
λειτουργικό σύστημα και ένα εικονικό αντίγραφο του υλικού που απαιτεί για να
εκτελεστεί μαζί με μια εφαρμογή, τις βιβλιοθήκες και τις εξαρτήσεις της. Από
την άλλη, ένα δοχείο αντί να εικονικοποιήσει το υλικό, εικονικοποιεί το
λειτουργικό σύστημα ούτως ώστε κάθε δοχείο να περιέχει μόνο την εφαρμογή, τις
βιβλιοθήκες και τις εξαρτήσεις της \cite{ibmContainerVsVm}.
\noindent Το Σχήμα \ref{fig:containerVsVm} παρουσιάζει τις διαφορές ανάμεσα
στην αρχιτεκτονική της εικονικοποίησης και των δοχείων.
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = \textwidth]{Figures/RedHat_Virtualization/virtualization-vs-containers_transparent.png}
\captionof{figure}{Χρήση εικονικοποίησης έναντι δοχείων \cite{redhatVirtualizationDefinition}}
\label{fig:containerVsVm}
\end{figure}
\vspace*{-30pt}
\end{center}
Η απουσία του εικονικού λειτουργικού υλικού είναι που καθιστά τα δοχεία
γρήγορα, φορητά και μικρότερα σε μέγεθος. Για να γίνει πιο εμφανής η διαφορά,
σύμφωνα με τη Red Hat \cite{redhatContainerVsVm}, το μέγεθος των εικονικών
μηχανών είναι της τάξεως των gigabyte ενώ των δοχείων είναι της τάξεως των
megabyte. Πολλές φορές, όπως αναφέρεται και σε μια δημοσίευση
\cite{ibmContainerVsVm} της \citeauthor{ibmContainerVsVm}, τα δοχεία
χρησιμοποιούνται για εφαρμογές αρχιτεκτονικής μικρο-υπηρεσιών (microservices),
όπου κάθε ξεχωριστό κομμάτι (δηλ. μικρο-υπηρεσία) αντιπροσωπεύει ένα συστατικό
της εφαρμογής που παίρνει την μορφή ενός δοχείου. Με αυτόν τον τρόπο, είναι
ευκολότερη η κλιμάκωση μιας εφαρμογής απ' ότι θα ήταν με μια μονολιθική
αρχιτεκτονική. Αυτό συμβαίνει διότι μπορεί να κλιμακώνεται μόνο το μέρος ή τα
μέρη της που έχουν αύξηση του φόρτου εργασίας τους, μέσω της χρήσης
περισσότερων δοχείων που αντιστοιχούν σε αυτά τα μέρη/μικρο-υπηρεσίες.
Αντιθέτως, η κλιμάκωση μιας μονολιθικής εφαρμογής θα απαιτούσε την δημιουργία
πολλαπλών δοχείων μεγάλου μεγέθους ή πολλαπλών εικονικών μηχανών, οδηγώντας σε
μεγάλη και αχρείαστη σπατάλη πόρων. Λόγω του γεγονότος πως μια εφαρμογή
αποτελείται από πολλαπλές μικρο-υπηρεσίες, οι οποίες μπορεί να έχουν πολλαπλά
στιγμιότυπα (δηλ. μεγάλο αριθμό δοχείων) ανά πάσα χρονική στιγμή, απαιτείται η
χρήση μιας πλατφόρμας ενορχήστρωσης δοχείων για την αυτοματοποίηση της
εγκατάστασης, εκτέλεσης και κλιμάκωσης της εφαρμογής κατά μήκος πολλαπλών πόρων
(δηλ. εικονικών ή φυσικών μηχανών), όπως είναι το Kubernetes ή το Docker Swarm.
Από την άλλη, αν είναι επιθυμητή η ενορχήστρωση των δοχείων μιας εφαρμογής σε
έναν πόρο (φυσικό ή εικονικό μηχάνημα), τότε είναι δυνατή η χρήση εργαλείων
όπως το Docker Compose.
Το μόνο μειονέκτημα της τεχνολογίας των δοχείων, το οποίο δεν επηρεάζει κατά
πολύ τη χρήση τους, είναι το γεγονός ότι δοχεία που δημιουργήθηκαν για να
εκτελούν προγράμματα που απαιτούν την ύπαρξη του λειτουργικού συστήματος
Windows δε μπορούν να εκτελεστούν σε ένα περιβάλλον με τον πυρήνα του Linux και
το ίδιο ισχύει και αντιστρόφως \cite{containerOSlimitations}.
Εν γένει, τα βασικότερα πλεονεκτήματα των δοχείων σε σχέση με τις εικονικές
μηχανές είναι ο διαμοιρασμός του πυρήνα του λειτουργικού συστήματος φιλοξενίας
και η μεταφερσιμότητά τους. Το γεγονός ότι μοιράζονται τον ίδιο πυρήνα έχει ως
αποτέλεσμα να μην χρειάζεται να απονεμηθούν πόροι για εικονικοποίηση μηχανών με
σκοπό την στέγαση ενός ολόκληρου ξεχωριστού λειτουργικού συστήματος (όπως
γίνεται στις εικονικές μηχανές). Επιπλέον, τα δοχεία μπορούν να εκτελεστούν σε
οποιοδήποτε περιβάλλον είναι ήδη εγκατεστημένη μια μηχανή δοχείων (όπως το
Docker) όπου μάλιστα η ταχύτητα δημιουργίας τους είναι πολύ πιο γρήγορη σε
σχέση με αυτή των εικονικών μηχανών λόγω του μικρού μεγέθους και των ελάχιστων
μη λειτουργικών απαιτήσεών τους.
\subsection{Εργαλεία διαχείρισης δοχείων και έλευση του Docker} \label{containerManagement}
Στις μέρες μας, η δημοτικότητα του Docker έχει συνταυτίσει τους όρους Docker
και Container (δοχείο) αν και είναι διαφορετικοί. Παρ' όλα αυτά, η ιδέα της
δημιουργίας απομονωμένων περιβαλλόντων εκτέλεσης λογισμικού υπήρχε προτού βγει
το Docker στην αγορά. Ιστορικά, οι πρώτες τεχνολογίες περί δοχείων έκαναν την
είσοδό τους από το 1979, όταν εισήχθη το chroot \cite{chrootCommand} στην
έβδομη έκδοση του Unix \cite{containerHistory}. Πρόκειται για μια εντολή που
περιορίζει την πρόσβαση αρχείων που διαθέτει μια εφαρμογή, σε ένα συγκεκριμένο
φάκελο, ο οποίος ορίζεται ως ο καινούριος αρχικός (root). Ο κύριος σκοπός του
chroot ήταν η ενίσχυση της ασφάλειας ούτως ώστε στην περίπτωση εκμετάλλευσης
μιας εσωτερικής ευπάθειας της εφαρμογής, να παραμένουν ανεπηρέαστα τα μέρη του
συστήματος εκτός του φακέλου στον οποίο είχε πρόσβαση. Εκείνη την εποχή αυτό
ήταν αρκετό, αλλά οι απαιτήσεις ασφαλείας με τον καιρό αυξάνονταν και υπήρχε η
ανάγκη διαφορετικών μεθόδων απομόνωσης μιας και από κατασκευής του, το chroot
δεν περιόριζε έναν χρήστη ή μια διεργασία με διαχειριστικά δικαιώματα
\cite{chrootRestrictions}. Μερικά χρόνια αργότερα, το 2004 δημιουργήθηκαν και
ενσωματώθηκαν στον πυρήνα του Linux οι ομάδες ελέγχου, με την βοήθεια των
οποίων ήταν πλέον δυνατή η απομόνωση πόρων του συστήματος σε ένα υποσύνολο
διεργασιών.
Αυτές οι τεχνολογίες σήμαναν της έναρξη της ιδέας της δοχειοποίησης και έτσι το
2008 ήρθε στο προσκήνιο το LXC (Linux Container Technology) \footfullcite{LXC}.
Το πρώτο εργαλείο που χρησιμοποιούσε τεχνολογίες δοχείων για την δημιουργία και
εκτέλεση πολλαπλών λειτουργικών συστημάτων Linux στο ίδιο μηχάνημα.
Χρησιμοποιώντας μηχανισμούς που προσέφερε το λειτουργικό σύστημα, επέτρεπε
πλήρη εικονικοποίηση ενός στιγμιότυπου Linux σε μορφή δοχείου και παρείχε
αρκετές λειτουργίες όπως η δημιουργία, η εκκίνηση και η διαγραφή LXC δοχείων.
Παρ' όλα αυτά, επικεντρωνόταν στην δοχειοποίηση λειτουργικών συστημάτων και όχι
εφαρμογών \cite{LXCvsDocker}, καθιστώντας δύσκολη και περίπλοκη την χρήση του
όταν η κύρια ανάγκη ήταν η απομόνωση εφαρμογών.
Ενώ λοιπόν προϋπήρχαν εργαλεία διαχείρισης δοχείων, τα οποία χρησιμοποιούνται
ακόμα και στις μέρες μας, λόγω του συνδυασμού της δυσκολίας στην χρήση τους και
του εξειδικευμένου σκοπού ύπαρξής τους δεν είχαν υιοθετηθεί αρκετά. Όλα τα
παραπάνω οδήγησαν στην δημιουργία του Docker το 2013, με την έλευση του οποίου
η τεχνολογία των δοχείων εκτοξεύτηκε. Το Docker είναι ένα σύνολο προϊόντων PaaS
(Platform-as-a-Service) (Πλατφόρμα ως Υπηρεσία) και παρέχει μια πλατφόρμα με
μηχανισμούς για συναρμολόγηση, θέση σε λειτουργία, εκτέλεση, ενημέρωση και
διαχείριση προγραμμάτων σε μορφή δοχείων. Σε αντίθεση με το LXC, αποτελεί μια
μηχανή δοχείων υψηλού επιπέδου με κύριο στόχο την δοχειοποίηση εφαρμογών. Εκτός
από τον διαχωρισμό ανάμεσα στον πηγαίο κώδικα, τις βιβλιοθήκες και εξαρτήσεις
ενός λογισμικού από το κύριο σύστημα (φιλοξενίας), παρέχει και δυνατότητες
επικοινωνίας με αποθετήρια εικόνων δοχείωv, όπως είναι το Docker Hub
\footfullcite{dockerhub}, το επίσημο αποθετήριο του Docker, το Quay
\footfullcite{quay}, ένα εναλλακτικό αποθετήριο της Red Hat ή οποιοδήποτε άλλο
αποθετήριο συμβατό με τις προδιαγραφές που έχει ορίσει η OCI (Open Container
Initiative) \footfullcite{oci}. Μέσω τέτοιων υπηρεσιών, οι χρήστες έχουν
πρόσβαση και διαμοιράζονται χιλιάδες εικόνες δοχείων που τους επιτρέπουν να
ολοκληρώσουν διάφορα μέρη μιας υπάρχουσας ή νέας εφαρμογής. Επιπλέον, όντας μια
μηχανή δοχείων υψηλού επιπέδου όλες οι λειτουργίες που θα απαιτούσαν
εξειδικευμένες γνώσεις προκειμένου να πραγματοποιηθούν, έχουν συμπυκνωθεί σε
απλές εντολές, καθιστώντας έτσι εύκολη την χρήση του για προγραμματιστές κάθε
επιπέδου και απλοποιώντας κατά πολύ την διαδικασία ανάπτυξης και παράδοσης
κατανεμημένων εφαρμογών. Προσφέροντας μια φιλική προς τον χρήστη διεπαφή,
έλεγχο εκδόσεων (version control) για δοχεία \cite{LXCvsDocker2} και ένα
οικοσύστημα γύρω από όλα αυτά, είναι εμφανής ο λόγος που κατάφερε να επισκιάσει
το LXC.
\subsection{Χρήση δοχείων στην ανάπτυξη και παράδοση εφαρμογών} \label{containerUsage}
Οι μέθοδοι ανάπτυξης και παράδοσης εφαρμογών έχουν αλλάξει δραματικά τα
τελευταία χρόνια. Από τις παραδοσιακές μεθόδους, όπως το μοντέλο καταρράκτη
(waterfall) \cite{waterfall} βάσει του οποίου υπήρχε ένα συγκεκριμένο
αμετάβλητο σχέδιο που καλούνταν να ακολουθήσει μια ομάδα ανάπτυξης λογισμικού,
έχουμε φτάσει σε μια εποχή όπου οι απαιτήσεις της αγοράς αλλάζουν συνεχώς, με
αποτέλεσμα να υπάρχει ανάγκη για καινούριες μεθόδους που να ανταποκρίνονται
στις αλλαγές αυτές. Έτσι, έχουν δημιουργηθεί μεθοδολογίες όπως η Agile
\cite{agile} κατά την οποία η ανάπτυξη και η παράδοση λογισμικού
πραγματοποιείται σε πολλές μικρές και ευμετάβλητες φάσεις προκειμένου να
προσαρμόζεται στις αλλαγές που ενδέχεται να υπάρξουν στον αρχικό σχεδιασμό. Η
μεθοδολογία αυτή συνεργάζεται με πρακτικές όπως το DevOps \cite{devops} όπου οι
ομάδες υπεύθυνες για την ανάπτυξη και λειτουργία μιας εφαρμογής επικοινωνούν
στενά με σκοπό να υπάρχει μια συνεχής ροή παραγωγής και παράδοσης λογισμικού.
Αυτό επιτυγχάνεται με μια υποκατηγορία του DevOps, το CI/CD (Continuous
Integration/Continuous Delivery) (Συνεχής Ενοποίηση/Συνεχής Παράδοση)
\cite{cicd}. Κατά το μοντέλο αυτό, δημιουργούνται αυτοματοποιημένες διαδικασίες
που εκτελούνται κατά την διάρκεια της ανάπτυξης και παράδοσης μιας εφαρμογής
προκειμένου να πραγματοποιείται έλεγχος της ποιότητας του κώδικα, να
εντοπίζονται σφάλματα και να παράγονται εκτελέσιμα πακέτα τα οποία μετά μπορούν
απευθείας να διατίθενται στο κοινό (continuous deployment).
Τα δοχεία αποτελούν ιδανική επιλογή για την εφαρμογή των παραπάνω μεθοδολογιών
και πρακτικών καθώς επιτρέπουν το γρήγορο και αποτελεσματικό πακετάρισμα
εφαρμογών και την εκτέλεσή τους σε οποιοδήποτε περιβάλλον. Λόγω των
χαρακτηριστικών τους, εξαλείφουν τυχόν προβλήματα ασυμβατότητας μεταξύ των
περιβαλλόντων εκτέλεσής τους και προσφέρουν μεγαλύτερη αποδοτικότητα πόρων αφού
μπορεί κανείς να εκτελέσει πολλά περισσότερα αντίγραφα ενός προγράμματος για
συγκεκριμένη ποσότητα πόρων σε σχέση με τον αριθμό που θα μπορούσε να εκτελέσει
χρησιμοποιώντας εικονικές μηχανές πάνω από αυτούς τους πόρους. Γεγονός που
μειώνει ιδιαίτερα το κόστος λειτουργίας και αυξάνει την κλιμακωσιμότητα.
Επιπλέον, λόγω της ταχείας διάθεσης και εκτέλεσής τους, συμβαδίζουν πλήρως με
τον ρυθμό ανάπτυξης και παράδοσης που υποστηρίζουν οι παραπάνω μεθοδολογίες.
Έχοντας αυτά υπόψιν, γίνεται εμφανής και ο λόγος που τα δοχεία είναι η
προτιμότερη επιλογή για την ανάπτυξη και παράδοση εφαρμογών που ακολουθούν την
αρχιτεκτονική μικρο-υπηρεσιών. Επιπρόσθετα, η ανεξαρτησία των δοχείων μεταξύ
τους, καθιστά πιο σταθερή την εφαρμογή αφού σε περίπτωση που κάποιο από αυτά
αποτύχει, η υπόλοιπη εφαρμογή θα συνεχίσει να λειτουργεί κανονικά και η
ανακατασκευή του δοχείου που απέτυχε μπορεί να επιτευχθεί εύκολα και γρήγορα με
μια απλή τροποποίηση της εκάστοτε εικόνας δοχείου.
\subsection{Χρήσεις του Docker στο νέφος} \label{dockerInCloudComputing}
Οι δυνατότητες που προσφέρει το Docker το καθιστούν την καταλληλότερη επιλογή
τόσο για επιχειρήσεις που λειτουργούν αποκλειστικά με ενοικιαζόμενους
υπολογιστικούς πόρους όσο και για αυτές που επιλέγουν να λειτουργούν με έναν
συνδυασμό ενοικιαζόμενων και ιδιόκτητων φυσικών εγκαταστάσεων. Υπάρχουν δύο
βασικές περιπτώσεις χρήσης του Docker στο νέφος. Συγκεκριμένα αυτές είναι: η
εγκατάσταση δοχείων σε εικονικές μηχανές και η εγκατάσταση δοχείων έμμεσα σε
πόρους χωρίς την ανάγκη δημιουργίας εικονικής μηχανής. Η δεύτερη περίπτωση
χρήσης εντάσσεται στην κατηγορία υπηρεσιών CaaS \cite{caas} (Container as a
Service), όπως η ECS (Elastic Container Service) της Amazon. Μια υπηρεσία όπου
ένας πάροχος νέφους αντί να παρέχει πρόσβαση σε υπολογιστικούς πόρους γενικού
σκοπού, παρέχει μια ευέλικτη υποδομή, έτοιμη για την εκτέλεση δοχείων
\cite{caasVsIaas}.
Από τις δύο αυτές επιλογές, η πρώτη προσφέρει μια ευελιξία ως προς την
διαμόρφωση του περιβάλλοντος εκτέλεσης των δοχείων. Οι χρήστες έχουν την
δυνατότητα να ακολουθήσουν ορισμένες ορθές πρακτικές ασφαλείας που μπορεί να
έχουν θεσπιστεί στην εταιρεία τους, να εγκαταστήσουν επιπλέον λογισμικό
παρακολούθησης και ελέγχου ποιότητας των δοχείων και να προσαρμόσουν το
περιβάλλον εκτέλεσης των δοχείων στις ανάγκες τους. Επιπλέον, η ύπαρξη μιας
επιπλέον στρώσης απομόνωσης μεταξύ των δοχείων και του κύριου συστήματος
αποτελεί ένα επιπρόσθετο εμπόδιο σε περιπτώσεις που ένα δοχείο βρεθεί σε
κατάσταση παραβίασης. Το Docker επιτρέποντας μέσω των δοχείων την περιορισμένη
έκθεση των πόρων του συστήματος στον έξω κόσμο, καθιστά ευκολότερη την
ανίχνευση και απομόνωση των προβλημάτων ασφαλείας, καθώς επίσης και την
αποκατάστασή τους.
Από την άλλη, η δεύτερη περίπτωση χρήσης επιτρέπει στους χρήστες να
επικεντρωθούν στην ανάπτυξη των δοχειοποιημένων εφαρμογών και να αφήσουν την
διαχείριση της υποδομής στον πάροχο νέφους. Αυτό είναι ιδιαίτερα χρήσιμο σε
περιπτώσεις που οι χρήστες δεν έχουν την απαραίτητη εμπειρία σε αυτόν τον τομέα
ή δεν είναι σε θέση να διαθέσουν τον απαιτούμενο χρόνο για αυτό. Η χρήση
υπηρεσιών CaaS αυτομάτως εξασφαλίζει στους χρήστες τα πλεονεκτήματα των
υπηρεσιών IaaS όπως η κλιμάκωση, η αντοχή σε αποτυχίες και η ευελιξία, ενώ
ταυτόχρονα προσφέρει και τα πλεονεκτήματα των δοχείων, όπως η ταχεία διάθεση
και απόσυρσή τους αλλά και η υψηλή τους απόδοση κατά την εκτέλεση.
Συγκεκριμένα, μέσω των υπηρεσιών CaaS, οι χρήστες διαθέτουν δυνατότητες
ενορχήστρωσης δοχείων \cite{howCaasWorks} χωρίς την ανάγκη χειροκίνητου
στησίματος πλατφορμών όπως το Kubernetes \cite{kubernetes} και το Docker Swarm
\cite{dockerSwarm}, που παρέχουν αυτή την δυνατότητα.
Σε κάθε περίπτωση, λόγω των πλεονεκτημάτων που παρέχει η χρήση δοχείων, είναι
πολύ συνήθης η θέση σε λειτουργία, εφαρμογών μέσω Docker σε περιβάλλοντα νέφους
επειδή απομονώνει τις αναγκαίες βιβλιοθήκες και εξαρτήσεις τους από το υπόλοιπο
σύστημα και επιτρέπει την αποδοτικότερη διαχείριση των εφαρμογών αυτών μέσω της
διεπαφής του με εντολές για εκκίνηση, επιτήρηση πόρων, παύση και άλλες
λειτουργίες. Τα προβλήματα που μπορεί να προέκυπταν σε ένα περιβάλλον
ανάπτυξης, όπως μη συμβατές εκδόσεις προγραμμάτων και η δυσκολία διαχείρισής
τους, εξαλείφονται με την χρήση δοχείων αφήνοντας το Docker να εγκαθιδρύσει
έναν συστημικό τρόπο διανομής και ελέγχου εφαρμογών. Επιπροσθέτως, καθιστά πολύ
εύκολη τη μεταφορά τους σε οποιοδήποτε μηχάνημα (εφόσον αυτό υποστηρίζει την
εκτέλεση της μηχανής δοχείων του Docker) ή ακόμα και νέφος, θέτοντας το
κορυφαία επιλογή για επιχειρήσεις που επιλέγουν να ακολουθήσουν την στρατηγική
πολλαπλών νεφών (multi-cloud computing) κατά την κατασκευή εφαρμογών. Δηλαδή να
μην βασίζονται αποκλειστικά σε έναν πάροχο νέφους για όλες τις λειτουργίες μιας
εφαρμογής \cite{multiCloud} αλλά να εκμεταλλεύονται οφέλη από πολλούς παρόχους
με βάση τις ανάγκες τους.
\section{Ασφάλεια του συστήματος κατά τη χρήση του Docker} \label{dockerSecurity}
Μία από τις πιο σημαντικές προκλήσεις των επιχειρήσεων κατά την διάθεση Μία από τις πιο σημαντικές προκλήσεις των επιχειρήσεων κατά την διάθεση
υπηρεσιών είναι η επίτευξη και διατήρηση της ασφάλειας. Παραδοσιακά, κατά την υπηρεσιών είναι η επίτευξη και διατήρηση της ασφάλειας. Παραδοσιακά, κατά την
@@ -393,8 +158,8 @@ Service), όπως η ECS (Elastic Container Service) της Amazon. Μια υπ
αρχικές ρυθμίσεις. αρχικές ρυθμίσεις.
Για τον λόγο αυτό, εάν η μέγιστη δυνατή απόδοση δεν είναι μια από τις κύριες Για τον λόγο αυτό, εάν η μέγιστη δυνατή απόδοση δεν είναι μια από τις κύριες
προτεραιότητες της επιχείρησης, προκειμένου να αυξηθεί η ασφάλεια του προτεραιότητες μιας επιχείρησης, προκειμένου να αυξηθεί η ασφάλεια του
συστήματος διατηρώντας τα πλεονεκτήματα του Docker όσον αφορά την συστήματός της, διατηρώντας τα πλεονεκτήματα του Docker όσον αφορά την
μεταφερσιμότητα και την απαλλαγή από τις εξαρτήσεις του εκάστοτε προγράμματος μεταφερσιμότητα και την απαλλαγή από τις εξαρτήσεις του εκάστοτε προγράμματος
ακόμα και χωρίς την περαιτέρω διαμόρφωση των ρυθμίσεών του, η προτεινόμενη ακόμα και χωρίς την περαιτέρω διαμόρφωση των ρυθμίσεών του, η προτεινόμενη
χρήση είναι η εκτέλεσή του μέσω μιας εικονικής μηχανής. Σε περιπτώσεις χρήση είναι η εκτέλεσή του μέσω μιας εικονικής μηχανής. Σε περιπτώσεις
@@ -402,10 +167,13 @@ Service), όπως η ECS (Elastic Container Service) της Amazon. Μια υπ
ανάμεσα στα προγράμματα και το μηχάνημα στο οποίο εκτελούνται αποτελεί ένα ανάμεσα στα προγράμματα και το μηχάνημα στο οποίο εκτελούνται αποτελεί ένα
παραπάνω εμπόδιο που θα πρέπει να ξεπεράσει ένας επιτιθέμενος για να προκαλέσει παραπάνω εμπόδιο που θα πρέπει να ξεπεράσει ένας επιτιθέμενος για να προκαλέσει
ζημιές στο κύριο σύστημα, αφού θα πρέπει πρώτα να περάσει από τον εικονικό ζημιές στο κύριο σύστημα, αφού θα πρέπει πρώτα να περάσει από τον εικονικό
πυρήνα και έπειτα από τον υπερ-επόπτη. Παράλληλα, ο συνδυασμός με την πυρήνα (πυρήνα ΛΣ της εικονικής μηχανής) και έπειτα από τον υπερ-επόπτη.
αρχιτεκτονική δοχείων παρέχει ένα επιπρόσθετο επίπεδο απομόνωσης εφόσον στην Παράλληλα, ο συνδυασμός με την αρχιτεκτονική δοχείων παρέχει ένα επιπρόσθετο
προκειμένη περίπτωση η άμεση επικοινωνία με τον πυρήνα του συστήματος αφορά το επίπεδο απομόνωσης εφόσον στην προκειμένη περίπτωση η άμεση επικοινωνία με τον
φιλοξενούμενο ΛΣ και όχι το κύριο σύστημα. πυρήνα του συστήματος αφορά το φιλοξενούμενο ΛΣ και όχι το κύριο σύστημα.
Συνεπώς, ένας επιτιθέμενος πρέπει να πραγματοποιήσει δύο αποδράσεις. Μια από
την μηχανή ενορχήστρωσης δοχείων ή περιβάλλον δοχειοποίησης και έπειτα μια
επιπλέον από το εικονικοποιημένο περιβάλλον.
Παρ' όλα αυτά, υπάρχουν περιπτώσεις όπου η απόδοση του συστήματος δεν δύναται Παρ' όλα αυτά, υπάρχουν περιπτώσεις όπου η απόδοση του συστήματος δεν δύναται
να θυσιαστεί για χάρη της ασφάλειας. Σε αυτές τις περιπτώσεις, επιβάλλεται η να θυσιαστεί για χάρη της ασφάλειας. Σε αυτές τις περιπτώσεις, επιβάλλεται η
@@ -419,11 +187,13 @@ Service), όπως η ECS (Elastic Container Service) της Amazon. Μια υπ
να ληφθεί υπόψιν το ποσοστό των υποδομών που βρίσκεται υπό την ευθύνη του να ληφθεί υπόψιν το ποσοστό των υποδομών που βρίσκεται υπό την ευθύνη του
χρήστη και να θεωρηθεί δεδομένο πως οι πάροχοι νέφους θα ακολουθήσουν όλες τις χρήστη και να θεωρηθεί δεδομένο πως οι πάροχοι νέφους θα ακολουθήσουν όλες τις
ορθές πρακτικές ασφαλείας για να προστατεύσουν το κομμάτι των υποδομών που τους ορθές πρακτικές ασφαλείας για να προστατεύσουν το κομμάτι των υποδομών που τους
αντιστοιχεί. Σε αυτήν την περίπτωση, εάν ο χρήστης χρησιμοποιεί υπηρεσίες CaaS, αντιστοιχεί. Σε αυτήν την περίπτωση, εάν ο χρήστης χρησιμοποιεί υπηρεσίες CaaS
τότε είναι υπεύθυνος για την ασφάλιση πολύ μικρότερου ποσοστού επιφάνειας (Container-as-a-Service) κατά τις οποίες ο πάροχος νέφους προσφέρει υποδομές
επίθεσης συγκριτικά με τον πάροχο και επωφελείται άμεσα από τις προσπάθειες προσαρμοσμένες συγκεκριμένα για την εκτέλεση δοχείων, τότε αυτός είναι
ασφάλισης του παρόχου για το ποσοστό του. Επομένως, συμπεραίνεται πως από την υπεύθυνος για την ασφάλιση πολύ μικρότερου ποσοστού επιφάνειας επίθεσης
οπτική γωνία του τελικού χρήστη είναι πιο ασφαλές να χρησιμοποιήσει τεχνολογίες συγκριτικά με τον πάροχο και επωφελείται άμεσα από τις προσπάθειες ασφάλισης
του παρόχου για το ποσοστό του. Επομένως, συμπεραίνεται πως από την οπτική
γωνία του τελικού χρήστη είναι πιο ασφαλές να χρησιμοποιήσει τεχνολογίες
εικονικοποίησης ΛΣ μέσω ενός παρόχου νέφους για την παροχή των υπηρεσιών του εικονικοποίησης ΛΣ μέσω ενός παρόχου νέφους για την παροχή των υπηρεσιών του
\cite{containerSecurityExplained}. \cite{containerSecurityExplained}.
@@ -438,20 +208,20 @@ Service), όπως η ECS (Elastic Container Service) της Amazon. Μια υπ
δοχείων, είναι διακριτή η διευκόλυνση στον εντοπισμό της πηγής τους. δοχείων, είναι διακριτή η διευκόλυνση στον εντοπισμό της πηγής τους.
Ένα εξίσου σημαντικό όφελος αποτελεί το επιπρόσθετο επίπεδο ασφάλειας που Ένα εξίσου σημαντικό όφελος αποτελεί το επιπρόσθετο επίπεδο ασφάλειας που
παρέχεται. Σε περιβάλλον εικονικής μηχανής θα πρέπει να σκληρύνει το ΛΣ παρέχεται. Σε περιβάλλον εικονικής μηχανής θα πρέπει να σκληρυνθεί το ΛΣ
φιλοξενίας (αν υπάρχει), ο υπερ-επόπτης, το φιλοξενούμενο ΛΣ και η εκτελούμενη φιλοξενίας (αν υπάρχει), ο υπερ-επόπτης, το φιλοξενούμενο ΛΣ και η εκτελούμενη
υπηρεσία. Σε περιβάλλον δοχείου, πρέπει να σκληρύνει το ΛΣ που φιλοξενεί τη υπηρεσία. Σε περιβάλλον δοχείου, πρέπει να σκληρυνθεί το ΛΣ που φιλοξενεί τη
μηχανή δοχείων, η μηχανή δοχείων και η υπηρεσία. Πράγμα που σημαίνει πως σε ένα μηχανή δοχείων, η μηχανή δοχείων και η υπηρεσία. Πράγμα που σημαίνει πως σε ένα
εικονικό περιβάλλον, με την χρήση του Docker έχουμε επιπρόσθετα επίπεδα που εικονικό περιβάλλον, με την χρήση του Docker έχουμε επιπρόσθετα επίπεδα που
χρειάζονται σκλήρυνση. Συνεπώς, σε εικονικά περιβάλλοντα, η χρήση δοχείων χρειάζονται σκλήρυνση. Συνεπώς, σε εικονικά περιβάλλοντα, η χρήση δοχείων
έρχεται με την σκλήρυνση ενός επιπλέον συστατικού, της μηχανής δοχείων, οπότε έρχεται με την σκλήρυνση ενός επιπλέον συστατικού, της μηχανής δοχείων, οπότε
προσφέρει καλύτερο επίπεδο ασφάλειας. αυτή προσφέρει καλύτερο επίπεδο ασφάλειας.
Δύο ακόμα σημαντικά πλεονεκτήματα είναι η ευκολία εφαρμογής ενημερώσεων Δύο ακόμα σημαντικά πλεονεκτήματα είναι η ευκολία εφαρμογής ενημερώσεων
ασφαλείας στα δοχεία και η σταθερότητα του περιβάλλοντος που προσφέρεται μέσω ασφαλείας στα δοχεία και η σταθερότητα του περιβάλλοντος που προσφέρεται μέσω
αυτών στις εφαρμογές. Ειδικότερα, η ενημέρωση ενός δοχείου είναι μια διαδικασία αυτών στις εφαρμογές. Ειδικότερα, η ενημέρωση ενός δοχείου είναι μια διαδικασία
δύο μόνο εντολών, ενώ το προσφερόμενο περιβάλλον είναι σταθερό με την λογική δύο μόνο εντολών, ενώ το προσφερόμενο περιβάλλον είναι σταθερό με την λογική
πως η μηχανή δοχείων παρέχει ένα επίπεδο πάνω από το ΛΣ, κι επομένως το πως η μηχανή δοχείων παρέχει ένα επίπεδο πάνω από το ΛΣ, και επομένως το
περιβάλλον αυτό δεν είναι ξεχωριστά ευμετάβλητο από την εκάστοτε εφαρμογή που περιβάλλον αυτό δεν είναι ξεχωριστά ευμετάβλητο από την εκάστοτε εφαρμογή που
εκτελείται μέσα σε αυτό. Άρα, δεν κινδυνεύει από νέα προβλήματα ασφαλείας που εκτελείται μέσα σε αυτό. Άρα, δεν κινδυνεύει από νέα προβλήματα ασφαλείας που
θα μπορούσαν να επιφέρουν τυχόν ενημερώσεις των εξαρτήσεων της εφαρμογής χωρίς θα μπορούσαν να επιφέρουν τυχόν ενημερώσεις των εξαρτήσεων της εφαρμογής χωρίς
@@ -481,7 +251,7 @@ Service), όπως η ECS (Elastic Container Service) της Amazon. Μια υπ
που εκτελούνται στο σύστημα. που εκτελούνται στο σύστημα.
Σχετικά με τις επιθέσεις που αποσκοπούν στην απόκτηση πρόσβασης στο κύριο Σχετικά με τις επιθέσεις που αποσκοπούν στην απόκτηση πρόσβασης στο κύριο
σύστημα μέσω του δοχείου, ο κίνδυνος οφείλεται στον τρόπο λειτουργίας των σύστημα μέσω ενός δοχείου, ο κίνδυνος οφείλεται στον τρόπο λειτουργίας των
δοχείων σε συνδυασμό με τις αρχικές ρυθμίσεις ασφαλείας του Docker. Λόγω της δοχείων σε συνδυασμό με τις αρχικές ρυθμίσεις ασφαλείας του Docker. Λόγω της
απευθείας επικοινωνίας τους με τον πυρήνα του συστήματος, τα δοχεία είναι άμεσα απευθείας επικοινωνίας τους με τον πυρήνα του συστήματος, τα δοχεία είναι άμεσα
ευεπηρέαστα από ευπάθειες του πυρήνα. Συνεπώς, ένας επιτιθέμενος που στοχεύει ευεπηρέαστα από ευπάθειες του πυρήνα. Συνεπώς, ένας επιτιθέμενος που στοχεύει
@@ -490,7 +260,7 @@ Service), όπως η ECS (Elastic Container Service) της Amazon. Μια υπ
διαχειριστικά δικαιώματα, μετά από μια επιτυχημένη επίθεση Container Escape θα διαχειριστικά δικαιώματα, μετά από μια επιτυχημένη επίθεση Container Escape θα
έχει διαχειριστικά δικαιώματα και ο ίδιος \cite{containerEscapeRepercussions}. έχει διαχειριστικά δικαιώματα και ο ίδιος \cite{containerEscapeRepercussions}.
\subsection{Ξεπερνώντας τα μειονεκτήματα ασφαλείας του Docker} \label{overcomingDockerDisadvantages} \section{Συνεισφορά Διπλωματικής} \label{overcomingDockerDisadvantages}
Οι πιο συνήθεις τρόποι αντιμετώπισης της ανεπαρκούς προκαθορισμένης ασφάλειας Οι πιο συνήθεις τρόποι αντιμετώπισης της ανεπαρκούς προκαθορισμένης ασφάλειας
του Docker (δηλ. της ελαστικής απομόνωσης) είναι η ρύθμιση καλύτερων προφίλ του Docker (δηλ. της ελαστικής απομόνωσης) είναι η ρύθμιση καλύτερων προφίλ
@@ -505,17 +275,18 @@ Docker, όπως η σκλήρυνσή του, η αποφυγή χρήσης τ
καθώς και να εγκαθιστά σε αυτά, με βάση τις προαναφερόμενες οδηγίες προστασίας καθώς και να εγκαθιστά σε αυτά, με βάση τις προαναφερόμενες οδηγίες προστασίας
του Docker και των δοχείων του, μια σκληρυμένη έκδοση του Docker. του Docker και των δοχείων του, μια σκληρυμένη έκδοση του Docker.
Με τη χρήση του εργαλείου SecDep που αναπτύχθηκε στα πλαίσια της παρούσας Η ανάγκη αυτή ικανοποιήθηκε με την ανάπτυξη του εργαλείου SecDep (Secure
διπλωματικής εργασίας, το οποίο θα περιγράψουμε παρακάτω στο Κεφάλαιο Deployment) που αναπτύχθηκε στα πλαίσια της παρούσας διπλωματικής εργασίας, το
\ref{installationANDShowcase}, θα επιτευχθεί η ασφάλιση του Docker και του οποίο θα περιγράψουμε παρακάτω στο Κεφάλαιο \ref{installationANDShowcase}. Με
συστήματος με αυτοματοποιημένο τρόπο ακολουθώντας ορθές πρακτικές, την χρήση του, θα επιτευχθεί η ασφάλιση του Docker και του συστήματος με
χρησιμοποιώντας ένα ασφαλέστερο από το αρχικό Container Runtime και εκτελώντας αυτοματοποιημένο τρόπο ακολουθώντας ορθές πρακτικές, χρησιμοποιώντας ένα
το Docker εξ ολοκλήρου χωρίς την ανάγκη διαχειριστικών δικαιωμάτων. Το εργαλείο ασφαλέστερο από το αρχικό Container Runtime και εκτελώντας το Docker εξ
αυτό εστιάζει στην χρήση εικονικοποιημένων περιβαλλόντων, μιας και παρέχουν ολοκλήρου χωρίς την ανάγκη διαχειριστικών δικαιωμάτων. Το εργαλείο αυτό
εστιάζει στην χρήση εικονικοποιημένων περιβαλλόντων, μιας και παρέχουν
περισσότερα επίπεδα προς διείσδυση για έναν επιτιθέμενο, εμποδίζοντάς τον στην περισσότερα επίπεδα προς διείσδυση για έναν επιτιθέμενο, εμποδίζοντάς τον στην
επίτευξη του στόχου αυτού. Επικοινωνεί με πολλούς παρόχους νέφους στέλνοντάς επίτευξη του στόχου αυτού. Επικοινωνεί με πολλούς παρόχους νέφους στέλνοντάς
τους παραμέτρους για τις προδιαγραφές εικονικών μηχανών προκειμένου να τους παραμέτρους για τις προδιαγραφές εικονικών μηχανών προκειμένου να
μπορέσουν να δημιουργηθούν αυτόματα. Με αυτόν τον τρόπο, επιτρέπει την μπορέσουν αυτές να δημιουργηθούν αυτόματα. Με αυτόν τον τρόπο, επιτρέπει την
δημιουργία πολλαπλών ασφαλών περιβαλλόντων ώστε να μπορεί ένας χρήστης να δημιουργία πολλαπλών ασφαλών περιβαλλόντων ώστε να μπορεί ένας χρήστης να
εγκαθιστά εκεί τα δοχεία της εφαρμογής του. Με την εφαρμογή των κατάλληλων εγκαθιστά εκεί τα δοχεία της εφαρμογής του. Με την εφαρμογή των κατάλληλων
μέτρων και πρακτικών ασφαλείας σε κάθε επίπεδο, τα περιβάλλοντα αυτά μέτρων και πρακτικών ασφαλείας σε κάθε επίπεδο, τα περιβάλλοντα αυτά
@@ -523,7 +294,7 @@ Docker, όπως η σκλήρυνσή του, η αποφυγή χρήσης τ
επιτυγχάνεται με την εκτέλεση πολλών βημάτων στα οποία μεταξύ άλλων επιτυγχάνεται με την εκτέλεση πολλών βημάτων στα οποία μεταξύ άλλων
περιλαμβάνεται η σκλήρυνση του SSH, ο εντοπισμός, η εγκατάσταση, η ρύθμιση και περιλαμβάνεται η σκλήρυνση του SSH, ο εντοπισμός, η εγκατάσταση, η ρύθμιση και
η ενεργοποίηση των κατάλληλων για την εκάστοτε διανομή, προγραμμάτων για η ενεργοποίηση των κατάλληλων για την εκάστοτε διανομή, προγραμμάτων για
ανάχωμα ασφαλείας και για παροχή MAC (Mandatory Access Control) και η ανάχωμα ασφαλείας και για παροχή MAC (Mandatory Access Control) καθώς και η
δημιουργία και ενεργοποίηση περιοδικά εκτελέσιμων προγραμμάτων για την δημιουργία και ενεργοποίηση περιοδικά εκτελέσιμων προγραμμάτων για την
ενημέρωση του συστήματος και το άνοιγμα/κλείσιμο θυρών προγραμμάτων. Η ενημέρωση του συστήματος και το άνοιγμα/κλείσιμο θυρών προγραμμάτων. Η
απεξάρτηση από τον διαχειριστικό λογαριασμό επιτυγχάνεται χάρη στη δουλειά του απεξάρτηση από τον διαχειριστικό λογαριασμό επιτυγχάνεται χάρη στη δουλειά του
@@ -540,21 +311,20 @@ Akihiro Suda πάνω στο rootlesskit \footfullcite{AkihiroSuda}, επιτρ
πλούσια τεκμηρίωση και οδηγίες εγκατάστασης στο αποθετήριό του, ενώ οι γνώσεις πλούσια τεκμηρίωση και οδηγίες εγκατάστασης στο αποθετήριό του, ενώ οι γνώσεις
που απαιτούνται στον τομέα των τεχνολογιών νέφους για την χρήση του είναι που απαιτούνται στον τομέα των τεχνολογιών νέφους για την χρήση του είναι
ελάχιστες. Επιπλέον, είναι ευέλικτο και επεκτάσιμο διότι αποτελείται από δύο ελάχιστες. Επιπλέον, είναι ευέλικτο και επεκτάσιμο διότι αποτελείται από δύο
εκτελέσιμα προγράμματα τα οποία μπορεί κάθε χρήστης να τροποποιήσει ώστε να εκτελέσιμα προγράμματα, τα οποία μπορεί κάθε χρήστης να τροποποιήσει ώστε να
προσθέσει τις δικές του λειτουργίες αν το επιθυμεί. Τέλος, οι παράμετροι του προσθέσει τις δικές του λειτουργίες αν το επιθυμεί. Τέλος, οι παράμετροι του
είναι εύκολα κατανοητές και προσαρμόσιμες στις ανάγκες του χρήστη. Επομένως, το είναι εύκολα κατανοητές και προσαρμόσιμες στις ανάγκες του χρήστη. Επομένως, το
εργαλείο αυτό αποτελεί ένα κατάλληλο μέσο για την δημιουργία, διαχείριση και εργαλείο αυτό αποτελεί ένα κατάλληλο μέσο για την δημιουργία, διαχείριση και
ασφάλιση περιβαλλόντων εφαρμογών που εκτελούνται σε δοχεία. ασφάλιση περιβαλλόντων δοχειοποιημένων εφαρμογών (containerized applications),
δηλ. εφαρμογών που παίρνουν την μορφή δοχείων.
\clearpage
\section{Δομή Εργασίας} \label{structure} \section{Δομή Εργασίας} \label{structure}
Η υπόλοιπη δομή της αναφοράς είναι η εξής. Στο Κεφάλαιο \ref{background}, θα Η υπόλοιπη δομή της αναφοράς είναι η εξής. Στο Κεφάλαιο \ref{background}, θα
αναλύσουμε τις έννοιες της νεφο-υπολογιστικής και εικονικοποίησης, τις διάφορες αναλύσουμε τις έννοιες της νεφο-υπολογιστικής και εικονικοποίησης, τις διάφορες
τεχνολογίες εικονικοποίησης και θα εμβαθύνουμε στην τεχνολογία των δοχείων με τεχνολογίες εικονικοποίησης και θα εμβαθύνουμε στην τεχνολογία των δοχείων με
επίκεντρο την ασφάλεια του Docker. Στο επόμενο κεφάλαιο (δηλαδή το επίκεντρο την ασφάλεια του Docker. Στο επόμενο κεφάλαιο (δηλαδή το Κεφάλαιο
\ref{relevantWork}), θα δούμε εργασίες σχετικές με την παρούσα και θα \ref{relevantWork}), θα παρουσιάσουμε εργασίες σχετικές με την παρούσα και θα
πραγματοποιηθεί ανάλυση και σύγκριση αυτών με την προτεινόμενη εργασία της πραγματοποιηθεί ανάλυση και σύγκριση αυτών με την προτεινόμενη εργασία της
διπλωματικής. Αμέσως μετά, στο Κεφάλαιο \ref{projectDevelopment}, αναφερόμαστε διπλωματικής. Αμέσως μετά, στο Κεφάλαιο \ref{projectDevelopment}, αναφερόμαστε
στην διαδικασία ανάπτυξης του προτεινόμενου εργαλείου και τα παράγωγά της στην διαδικασία ανάπτυξης του προτεινόμενου εργαλείου και τα παράγωγά της

File diff suppressed because it is too large Load Diff

View File

@@ -85,7 +85,7 @@
\DefineBibliographyStrings{greek}{ \DefineBibliographyStrings{greek}{
backrefpage={\textgreek{Αναφορά: σελίδα}}, backrefpage={\textgreek{Αναφορά: σελίδα}},
backrefpages={\textgreek{Αναφορά: σελίδες}}, backrefpages={\textgreek{Αναφορά: σελίδες}},
urlseen = {\textgreek{Επίσκεψη}}, urlseen={\textgreek{Επίσκεψη}},
} }
% https://tex.stackexchange.com/questions/29802/biblatex-and-new-line-for-doi-url-and-eprint % https://tex.stackexchange.com/questions/29802/biblatex-and-new-line-for-doi-url-and-eprint
@@ -98,13 +98,16 @@
\setunit{\par\nobreak}} \setunit{\par\nobreak}}
{}} {}}
\renewbibmacro*{url+urldate}{% \renewbibmacro*{url+urldate}{%
\usebibmacro{bbx:parunit}% Added \usebibmacro{bbx:parunit}% Added
\printfield{url} \iffieldundef{url}
{}
\printurldate {\setunit*{\par\nobreak}%
% Space here is needed for the access date to be printed in a new line. Unfortunately it also adds a space in the footfullcite \printfield{url}}
} \iffieldundef{urlyear}
{}
{\setunit*{\addspace}%
\\\printurldate}}
\DeclareFieldFormat[inproceedings]{pages}{#1} % to not have "Στο σελίδες" in inproceedings \DeclareFieldFormat[inproceedings]{pages}{#1} % to not have "Στο σελίδες" in inproceedings