diff --git a/Abbreviations/abbreviations.tex b/Abbreviations/abbreviations.tex index 86150ad..119978c 100644 --- a/Abbreviations/abbreviations.tex +++ b/Abbreviations/abbreviations.tex @@ -7,7 +7,11 @@ \textbf{PaaS} & \textbf{P}latform \textbf{a}s \textbf{a} \textbf{S}ervice \\ \textbf{SaaS} & \textbf{S}oftware \textbf{a}s \textbf{a} \textbf{S}ervice \\ \textbf{AWS} & \textbf{A}mazon \textbf{W}eb \textbf{S}ervices \\ +\textbf{GCE} & \textbf{G}oogle \textbf{C}ompute \textbf{E}ngine \\ +\textbf{OWASP} & \textbf{O}pen \textbf{W}eb \textbf{A}pplication \textbf{S}ecurity \textbf{P}roject \\ \textbf{EC2} & \textbf{E}lastic \textbf{C}ompute \textbf{C}loud \\ +\textbf{IAM} & \textbf{I}dentity and \textbf{A}ccess \textbf{M}anagement \\ +\textbf{IaC} & \textbf{I}nfrastructure \textbf{a}s \textbf{C}ode \\ \textbf{API} & \textbf{A}pplication \textbf{P}rogramming \textbf{I}nterface \\ \textbf{SDK} & \textbf{S}oftware \textbf{D}evelopment \textbf{K}it \\ \textbf{OS} & \textbf{O}perating \textbf{S}ystem \\ @@ -15,7 +19,7 @@ \textbf{UEFI} & \textbf{U}nified \textbf{E}xtensible \textbf{F}irmware \textbf{I}nterface \\ \textbf{MAC} & \textbf{M}andatory \textbf{A}ccess \textbf{C}ontrol \\ \textbf{XSS} & \textbf{C}ross \textbf{S}ite \textbf{S}cripting \\ -\textbf{cgroups} & \textbf{c}ontrol groups \\ +\textbf{cgroups} & \textbf{c}ontrol \textbf{groups} \\ \textbf{CI/CD} & \textbf{C}ontinuous \textbf{I}ntegration / \textbf{C}ontinuous \textbf{D}elivery \\ \textbf{DevOps} & \textbf{Dev}elopment \textbf{Op}eration\textbf{s} \\ \textbf{LXC} & \textbf{L}inu\textbf{x} \textbf{C}ontainers \\ @@ -27,6 +31,28 @@ \textbf{VMM} & \textbf{V}irtual \textbf{M}achine \textbf{M}onitor \\ \textbf{NFV} & \textbf{N}etwork \textbf{F}unction \textbf{V}irtualization \\ \textbf{IPC} & \textbf{I}nter \textbf{P}rocess \textbf{C}ommunication \\ +\textbf{Vuls} & \textbf{VUL}nerability \textbf{S}canner \\ +\textbf{LUNAR} & \textbf{L}ockdown \textbf{UN}ix \textbf{A}uditing and \textbf{R}eporting \\ +\textbf{CVE} & \textbf{C}ommon \textbf{V}ulnerabilities and \textbf{E}xposures \\ +\textbf{NVD} & \textbf{N}ational \textbf{V}ulnerability \textbf{D}atabase \\ +\textbf{CVSS} & \textbf{C}ommon \textbf{V}ulnerability \textbf{S}coring \textbf{S}ystem \\ +\textbf{CPE} & \textbf{C}ommon \textbf{P}latform \textbf{E}numeration \\ +\textbf{CWE} & \textbf{C}ommon \textbf{W}eakness \textbf{E}numeration \\ +\textbf{NIST} & \textbf{N}ational \textbf{I}nstitute of \textbf{S}tandards and \textbf{T}echnology \\ +\textbf{OVAL} & \textbf{O}pen \textbf{V}ulnerability and \textbf{A}ssessment \textbf{L}anguage \\ +\textbf{CISA} & \textbf{C}ybersecurity \& \textbf{I}nfrastructure \textbf{S}ecurity \textbf{A}gency \\ +\textbf{CERT} & \textbf{C}omputer \textbf{E}mergency \textbf{R}esponse \textbf{T}eam \\ +\textbf{CAPEC} & \textbf{C}ommon \textbf{A}ttack \textbf{P}attern \textbf{E}nnumeration and \textbf{C}lassification \\ +\textbf{CCE} & \textbf{C}ommon \textbf{C}onfiguration \textbf{E}numeration \\ +\textbf{ATT\&CK} & \textbf{A}dversarial \textbf{T}actics, \textbf{T}echniques, and \textbf{C}ommon \textbf{K}nowledge \\ +\textbf{PoC} & \textbf{P}roof \textbf{o}f \textbf{C}oncept \\ +\textbf{SSH} & \textbf{S}ecure \textbf{SH}ell \\ +\textbf{AMI} & \textbf{A}mazon \textbf{M}achine \textbf{I}mage \\ +\textbf{GiB} & \textbf{G}ibi\textbf{B}yte \\ +\textbf{EBS} & \textbf{E}lastic \textbf{B}lock \textbf{S}tore \\ +\textbf{GHz} & \textbf{G}iga\textbf{H}ertz \\ +\textbf{Gbps} & \textbf{G}iga\textbf{b}its \textbf{p}er \textbf{s}econd \\ +\textbf{CIS} & \textbf{C}enter for \textbf{I}nternet \textbf{S}ecurity \\ \textbf{ARP} & \textbf{A}ddress \textbf{R}esolution \textbf{P}rotocol \\ \textbf{DNS} & \textbf{D}omain \textbf{N}ame \textbf{S}ystem \\ \textbf{MitM} & \textbf{M}an-\textbf{i}n-\textbf{t}he-\textbf{M}iddle \\ diff --git a/Abstract/abstract.tex b/Abstract/abstract.tex index 9ebbff9..0279816 100644 --- a/Abstract/abstract.tex +++ b/Abstract/abstract.tex @@ -49,6 +49,9 @@ κάποια ειδική γνώση πάνω σε τεχνικά ζητήματα αλλά ούτε και στον τομέα της ασφάλειας υποδομών και των λειτουργικών συστημάτων. +\vskip 60pt +\noindent \textbf{Λέξεις κλειδιά:} Νέφος, Ασφάλεια, Εικονικοποίηση, Δοχεία, Μικρο-υπηρεσίες, Αυτοματοποίηση + } \clearpage % Abstract ended, start a new page diff --git a/Abstract/abstractenglish.tex b/Abstract/abstractenglish.tex new file mode 100644 index 0000000..5fbc593 --- /dev/null +++ b/Abstract/abstractenglish.tex @@ -0,0 +1,60 @@ +\abstractenglish{ +% skip indentation just for this paragraph +\textenglish{ + +\noindent Today, more and more people rely on IaaS services over traditional +on-premise infrastructure to provide operational support to applications, +services and business processes. This is because in this way this way, the +costs of an organization or business are reduced as long as there is no need +expenditure/investment on the purchase of equipment and the operational costs +of using services IaaS is based on flexible billing models based on usage (of +infrastructure resources that offered). In addition, it is possible to scale +the offered remote infrastructure depending on the needs of the organisation +and the current workload of the services and applications to be supported. In +this way, the responsibility for and maintenance of the equipment to third +parties while at the same time introducing a new model of trust between the +user/organisation and the cloud provider. The increase interest by enterprises +in virtualisation technologies which are a key the foundation of IaaS services, +but also the rapid rise in popularity of technologies container technologies +such as Docker has in turn begun to drive the adoption of the architectural +microservices architecture for application development. An architecture based +on both on virtualization technologies for housing applications in cloud +infrastructures and container technologies for partitioning their functions, +providing a an appropriate level of performance and scalability +\footfullcite{awsMicroservices}. However, they remain directly addressable. +security issues that may affect the cloud itself and/or the technologies on +which it is based. + +} + +\clearpage + +\textenglish{ + +In this paper we will first analyse the security issues related to the cloud +and in particular those related to virtualization and container technologies. +Then, we will analyze how these 2 technologies can be used with more safety +security. But the purpose of the paper goes beyond that and moves to a +practical level, proposing the solution of a tool that can implement in this +way the proposed safe use of these technologies. In particular, this tool does +not not only can create virtual machines across multiple cloud providers but +also harden them in an automated manner. In addition, it is capable of +installing these virtual machines the Docker container machine, which it can +also harden. The main goal of the work is to make it easier for an organization +to install and configure in an automated manner a secure, distributed +environment (pro- host and operation) for the deployment and operation of a +microservices application. This automation lies in the correct configuration of +the tool, which does not require and does not require any special knowledge of +technical or security issues. infrastructure and operating systems. + +} + +\vskip 60pt + +\textenglish{ +\noindent \textbf{Keywords:} Cloud, Security, Virtualization, Containers, Micro-services, Automation +} + +} + +\clearpage % Abstract ended, start a new page diff --git a/Bibliography.bib b/Bibliography.bib index 1e3b8df..ae40681 100644 --- a/Bibliography.bib +++ b/Bibliography.bib @@ -12,7 +12,8 @@ numpages = {8}, keywords = {security, elastic compute cloud service, cloud computing}, location = {Trento, Italy}, - series = {SAC '12} + series = {SAC '12}, + urldate = {2023-12-04}, } @inproceedings{manu2016study, @@ -23,7 +24,8 @@ volume = {}, number = {}, pages = {1-13}, - doi = {10.1109/ICCPCT.2016.7530284} + doi = {10.1109/ICCPCT.2016.7530284}, + urldate = {2023-08-07}, } @online{bui2015analysis, @@ -34,7 +36,8 @@ title = {Analysis of Docker Security}, publisher = {arXiv}, year = {2015}, - copyright = {arXiv.org perpetual, non-exclusive license} + copyright = {arXiv.org perpetual, non-exclusive license}, + urldate = {2023-06-02}, } @inproceedings{wenhao2020vulnerability, @@ -45,7 +48,8 @@ volume = {}, number = {}, pages = {354-357}, - doi = {10.1109/ICISCAE51034.2020.9236837} + doi = {10.1109/ICISCAE51034.2020.9236837}, + urldate = {2023-03-10}, } @article{combe2016docker, @@ -59,7 +63,8 @@ keywords = {}, doi = {10.1109/MCC.2016.100}, ISSN = {2325-6095}, - month = {Sep.} + month = {Sep.}, + urldate = {2023-11-07}, } @inproceedings{loukidis2018docker, @@ -70,7 +75,8 @@ volume = {}, number = {}, pages = {1561-1564}, - doi = {10.1109/ICDCS.2018.00169} + doi = {10.1109/ICDCS.2018.00169}, + urldate = {2023-01-07}, } @inproceedings{mp2016enhancing, @@ -81,21 +87,24 @@ volume = {}, number = {}, pages = {94-99}, - doi = {10.1109/ICATCCT.2016.7911971} + doi = {10.1109/ICATCCT.2016.7911971}, + urldate = {2023-07-25}, } @article{jogi2017establishing, title = {Establishing, Implementing and Auditing Linux Operating System Hardening Standard for Security Compliance}, author = {Jogi, Martin}, journal = {University of Tartu, Tartu}, - year = {2017} + year = {2017}, + urldate = {2023-04-06}, } @article{kaur2014hardening, title = {Hardening OS Identity by Customised Masking Techniques}, author = {Kaur, Ratinder and Singh, Maninder}, journal = {Thapar University, Punjab, India}, - year = {2014} + year = {2014}, + urldate = {2023-03-31}, } @article{zhu2021lic, @@ -108,590 +117,686 @@ doi = {https://doi.org/10.1016/j.jisa.2021.102924}, url = {https://www.sciencedirect.com/science/article/pii/S2214212621001435}, author = {Hui Zhu and Christian Gehrmann}, - keywords = {Docker-sec, LiCShield, Lic-Sec, Container, Security evaluation, Docker} + keywords = {Docker-sec, LiCShield, Lic-Sec, Container, Security evaluation, Docker}, + urldate = {2023-02-22}, } @misc{John2020OS, title = {OS Hardening - Making systems more secure}, author = {John Ostrowski}, - year = {2020} + year = {2020}, + urldate = {2023-12-09}, } @online{containerHistory, title = {The evolution of containers: Docker, Kubernetes and the future}, author = {Emily Mell}, year = {2023}, - url = {https://www.techtarget.com/searchitoperations/feature/Dive-into-the-decades-long-history-of-container-technology} + url = {https://www.techtarget.com/searchitoperations/feature/Dive-into-the-decades-long-history-of-container-technology}, + urldate = {2023-10-31}, } @online{chrootCommand, title = {The chroot command in Linux – Beginners Introduction}, author = {Deeptendu Santra}, year = {2021}, - url = {https://www.linuxfordevices.com/tutorials/linux/chroot-command-in-linux} + url = {https://www.linuxfordevices.com/tutorials/linux/chroot-command-in-linux}, + urldate = {2023-04-07}, } @online{SIDDARTH201910simple, title = {10 Simple Steps to Harden Your Docker Containers}, author = {SIDDARTH SENTHILKUMAR}, url = {https://sidsbits.com/10-Simple-Steps-to-Harden-Docker-Containers/}, - year = {2019} + year = {2019}, + urldate = {2023-10-04}, } @online{LXC, title = {What's LXC?}, author = {Linux Containers}, url = {https://linuxcontainers.org/lxc/introduction/}, + urldate = {2023-02-02}, } @online{LXCvsDocker, title = {LXC vs Docker: Which Container Platform Is Right for You?}, author = {Eric Kahuha}, year = {2023}, - url = {https://earthly.dev/blog/lxc-vs-docker/} + url = {https://earthly.dev/blog/lxc-vs-docker/}, + urldate = {2023-08-05}, } @online{chrootRestrictions, title = {Is chroot a security feature?}, author = {March 27, 2013Josh Bressers}, year = {2023}, - url = {https://www.redhat.com/en/blog/chroot-security-feature} + url = {https://www.redhat.com/en/blog/chroot-security-feature}, + 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, title = {The Untold Story: Containers Before Docker's Rise - The LXC Revolution}, author = {Dinesh Patil}, year = {2023}, - url = {https://www.linkedin.com/pulse/untold-story-containers-before-dockers-rise-lxc-revolution-patil} + url = {https://www.linkedin.com/pulse/untold-story-containers-before-dockers-rise-lxc-revolution-patil}, + urldate = {2023-09-20}, } @online{Hyperjacking, title = {What Is Hyperjacking? How to Prevent Hyperjacking on a VM}, author = {Allan Jay Monteclaro}, year = {2023}, - url = {https://www.serverwatch.com/virtualization/hyperjacking/} + url = {https://www.serverwatch.com/virtualization/hyperjacking/}, + urldate = {2023-08-20}, } @online{waterfall, title = {Waterfall Methodology: A Comprehensive Guide}, author = {ATLASSIAN}, - url = {https://www.atlassian.com/agile/project-management/waterfall-methodology} + url = {https://www.atlassian.com/agile/project-management/waterfall-methodology}, + urldate = {2023-03-26}, } @online{agile, title = {What Is Agile Project Management? The Ultimate Guide}, author = {Lee Davis}, year = {2022}, - url = {https://www.forbes.com/advisor/business/what-is-agile-project-management/} + url = {https://www.forbes.com/advisor/business/what-is-agile-project-management/}, + urldate = {2023-06-20}, } @online{devops, title = {DevOps}, author = {Synopsys}, - url = {https://www.synopsys.com/glossary/what-is-devops.html} + url = {https://www.synopsys.com/glossary/what-is-devops.html}, + urldate = {2023-02-06}, } @online{cicd, title = {What is CI/CD?}, author = {GitLab}, - url = {https://about.gitlab.com/topics/ci-cd/} + url = {https://about.gitlab.com/topics/ci-cd/}, + urldate = {2023-03-19}, } @online{caas, title = {What is CaaS?}, author = {Sumo Logic}, - url = {https://www.sumologic.com/glossary/caas/} + url = {https://www.sumologic.com/glossary/caas/}, + urldate = {2023-05-24}, } @online{caasVsIaas, title = {Container as a Service: The Basics and Top 4 Providers}, author = {aquasec}, year = {2023}, - url = {https://www.aquasec.com/cloud-native-academy/container-platforms/container-as-a-service/} + url = {https://www.aquasec.com/cloud-native-academy/container-platforms/container-as-a-service/}, + urldate = {2023-04-30}, } @online{howCaasWorks, title = {The Guide to Containers-as-a-Service (CaaS)}, author = {Karim Traiaia}, year = {2023}, - url = {https://www.kerno.io/blog/containers-as-a-service-caas} + url = {https://www.kerno.io/blog/containers-as-a-service-caas}, + urldate = {2023-07-24}, } @online{multiCloud, title = {What Is Multi-Cloud? Features, Architecture, Pros \& Cons}, author = {Sarim Javaid}, year = {2023}, - url = {https://www.cloudways.com/blog/what-is-multi-cloud/} + url = {https://www.cloudways.com/blog/what-is-multi-cloud/}, + urldate = {2023-03-05}, } @online{containerSecurity, title = {Containers or virtual machines: Which is more secure? The answer will surprise you}, author = {Steven Vaughan-Nichols}, year = {2018}, - url = {https://www.zdnet.com/article/which-is-more-secure-containers-or-virtual-machines-the-answer-will-surprise-you/} + url = {https://www.zdnet.com/article/which-is-more-secure-containers-or-virtual-machines-the-answer-will-surprise-you/}, + urldate = {2023-08-25}, } @online{containerSecurityExplained, title = {Containers and Cloud Security}, author = {James Bottomley}, year = {2018}, - url = {https://blog.hansenpartnership.com/containers-and-cloud-security/} + url = {https://blog.hansenpartnership.com/containers-and-cloud-security/}, + urldate = {2023-07-27}, } @online{containerEscapeTechniques, title = {7 Ways to Escape a Container}, author = {Ori Abargil}, year = {2023}, - url = {https://www.panoptica.app/research/7-ways-to-escape-a-container} + url = {https://www.panoptica.app/research/7-ways-to-escape-a-container}, + urldate = {2023-10-23}, } @online{saasPricingModel, title = {Our guide to every SaaS pricing model}, author = {vendr}, year = {2022}, - url = {https://www.vendr.com/blog/saas-pricing-model#value-based-saas-pricing-models} + url = {https://www.vendr.com/blog/saas-pricing-model#value-based-saas-pricing-models}, + urldate = {2023-11-03}, } @online{paasPricingModel, title = {PaaS (Platform-as-a-Service) - definition \& overview}, author = {Sumo Logic}, - url = {https://www.sumologic.com/glossary/paas/} + url = {https://www.sumologic.com/glossary/paas/}, + urldate = {2023-04-08}, } @online{cloudDeploymentModels, title = {An Overview of Cloud Deployment Models}, author = {Intel}, - url = {https://www.intel.com/content/www/us/en/cloud-computing/deployment-models.html} + url = {https://www.intel.com/content/www/us/en/cloud-computing/deployment-models.html}, + urldate = {2023-07-08}, } @online{redhatVirtualizationManagement, title = {What is virtualization management?}, author = {Red Hat}, year = {2018}, - url = {https://www.redhat.com/en/topics/virtualization/what-is-virtualization-management} + url = {https://www.redhat.com/en/topics/virtualization/what-is-virtualization-management}, + urldate = {2023-01-11}, } @online{phoenixnapHypervisors, title = {What is a Hypervisor? Types of Hypervisors 1 \& 2}, author = {Sofija Simic}, year = {2022}, - url = {https://phoenixnap.com/kb/what-is-hypervisor-type-1-2} + url = {https://phoenixnap.com/kb/what-is-hypervisor-type-1-2}, + urldate = {2023-06-26}, } @online{amazonHypervisors, title = {What’s the Difference Between Type 1 and Type 2 Hypervisors?}, author = {Amazon Web Services}, - url = {https://aws.amazon.com/compare/the-difference-between-type-1-and-type-2-hypervisors/} + url = {https://aws.amazon.com/compare/the-difference-between-type-1-and-type-2-hypervisors/}, + urldate = {2023-01-29}, } @online{vmfailover, title = {What Is a Failover? Clustering and Replication Use Cases}, author = {NAKIVO Team}, year = {2023}, - url = {https://www.nakivo.com/blog/vm-failover-guide/} + url = {https://www.nakivo.com/blog/vm-failover-guide/}, + urldate = {2023-10-23}, } @online{kvm, title = {What is KVM?}, author = {Red Hat}, year = {2022}, - url = {https://www.redhat.com/en/topics/virtualization/what-is-KVM} + url = {https://www.redhat.com/en/topics/virtualization/what-is-KVM}, + urldate = {2023-01-27}, } @online{dataVirtualization, title = {Data Virtualization: Process, Components, Benefits, and Available Tools}, author = {altexsoft}, year = {2021}, - url = {https://www.altexsoft.com/blog/data-virtualization/} + url = {https://www.altexsoft.com/blog/data-virtualization/}, + urldate = {2023-10-07}, } @online{desktopVirtualization, title = {What is Desktop Virtualization?}, author = {VMware}, - url = {https://www.vmware.com/topics/glossary/content/desktop-virtualization.html} + url = {https://www.vmware.com/topics/glossary/content/desktop-virtualization.html}, + urldate = {2023-11-11}, } @online{redhatNFV, title = {What is NFV?}, author = {Red Hat}, year = {2019}, - url = {https://www.redhat.com/en/topics/virtualization/what-is-nfv} + url = {https://www.redhat.com/en/topics/virtualization/what-is-nfv}, + urldate = {2023-08-18}, } @online{vmwareMemoryVirtualization, title = {Memory Virtualization}, author = {VMware}, year = {2019}, - url = {https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.vsphere.resmgmt.doc/GUID-6E85F6DE-7365-4C28-B902-725D3C76C2E6.html} + url = {https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.vsphere.resmgmt.doc/GUID-6E85F6DE-7365-4C28-B902-725D3C76C2E6.html}, + urldate = {2023-03-24}, } @online{codingninjasMemoryVirtualization, title = {Processor and Memory Virtualization}, author = {Rajat Agrawal}, year = {2023}, - url = {https://www.codingninjas.com/studio/library/processor-and-memory-virtualization} + url = {https://www.codingninjas.com/studio/library/processor-and-memory-virtualization}, + urldate = {2023-12-10}, } @online{ubackupStorageVirtualization, title = {What Is Storage Virtualization | Introduction and Implementation}, author = {Crystal}, year = {2022}, - url = {https://www.ubackup.com/enterprise-backup/storage-virtualization-jkzbj.html} + url = {https://www.ubackup.com/enterprise-backup/storage-virtualization-jkzbj.html}, + urldate = {2023-11-13}, } @online{unixarenaVirtualization, title = {Virtualization & Hypervisor – Basic Interview Questions}, author = {LINGESH}, year = {2019}, - url = {https://www.unixarena.com/2019/08/virtualization-hypervisor-basic-interview-questions.html/} + url = {https://www.unixarena.com/2019/08/virtualization-hypervisor-basic-interview-questions.html/}, + urldate = {2023-09-01}, } @online{cloudinfraStorageVirtualization, title = {Storage Virtualization in Cloud Computing – How it Works (Use Cases)}, author = {Dennis Muvaa}, - url = {https://cloudinfrastructureservices.co.uk/storage-virtualization-in-cloud-computing-how-it-works-use-cases/} + url = {https://cloudinfrastructureservices.co.uk/storage-virtualization-in-cloud-computing-how-it-works-use-cases/}, + urldate = {2023-08-17}, } @online{tutorialsPointVirtualization, title = {Virtualization 2.0 - Overview}, author = {Tutorials Point}, - url = {https://www.tutorialspoint.com/virtualization2.0/virtualization2.0_overview.htm} + url = {https://www.tutorialspoint.com/virtualization2.0/virtualization2.0_overview.htm}, + urldate = {2023-02-28}, } @online{geeksforgeeksApplicationVirtualization, title = {Virtualisation with Docker Containers}, author = {GeeksforGeeks}, year = {2023}, - url = {https://www.geeksforgeeks.org/virtualisation-with-docker-containers/} + url = {https://www.geeksforgeeks.org/virtualisation-with-docker-containers/}, + urldate = {2023-04-02}, } @online{mediumVirtualization, title = {Virtualization in Cloud Computing: Bridging the Gap Between Resources and Efficiency}, author = {TechClaw}, - url = {https://medium.com/@techclaw/virtualization-in-cloud-computing-bridging-the-gap-between-resources-and-efficiency-3c5a9c65981e} + year = {2023}, + url = {https://medium.com/@techclaw/virtualization-in-cloud-computing-bridging-the-gap-between-resources-and-efficiency-3c5a9c65981e}, + urldate = {2023-11-30}, } @online{insightsForProfessionalsParavirtualization, title = {Paravirtualization vs. Full Virtualization: Pros and Cons}, author = {Insights for Professionals}, year = {2022}, - url = {https://www.insightsforprofessionals.com/it/data-center/paravirtualization-alternative-full-virtualization} + url = {https://www.insightsforprofessionals.com/it/data-center/paravirtualization-alternative-full-virtualization}, + urldate = {2023-08-23}, } @online{blackberryParavirtualization, title = {Paravirtualization}, author = {BlackBerry}, - url = {https://blackberry.qnx.com/en/ultimate-guides/automotive-hypervisor/paravirtualization} + url = {https://blackberry.qnx.com/en/ultimate-guides/automotive-hypervisor/paravirtualization}, + urldate = {2023-11-30}, } @online{serverWatchParavirtualization, title = {What Is Paravirtualization? Definition and Uses}, author = {Ray Fernandez}, year = {2023}, - url = {https://www.serverwatch.com/virtualization/what-is-paravirtualization/} + url = {https://www.serverwatch.com/virtualization/what-is-paravirtualization/}, + urldate = {2023-11-13}, } @online{vmblogParavirtualization, title = {What Are the Benefits of Paravirtualization?}, author = {David Marshall}, year = {2019}, - url = {https://vmblog.com/archive/2019/07/23/what-are-the-benefits-of-paravirtualization.aspx} + url = {https://vmblog.com/archive/2019/07/23/what-are-the-benefits-of-paravirtualization.aspx}, + urldate = {2023-01-26}, } @online{servermaniaParavirtualization, title = {What is Paravirtualization in Cloud Computing?}, author = {Milad Karimyar}, year = {2023}, - url = {https://blog.servermania.com/what-is-paravirtualization} + url = {https://blog.servermania.com/what-is-paravirtualization}, + urldate = {2023-12-09}, } @online{vmSnapshots, title = {Understanding the Correct Use of VM Snapshots}, author = {Nicolette Carklin}, year = {2021}, - url = {https://www.parallels.com/blogs/ras/vm-snapshot/} + url = {https://www.parallels.com/blogs/ras/vm-snapshot/}, + urldate = {2023-03-25}, } @online{techtargetHypervisorSecurity, title = {Virtual security tactics for Type 1 and Type 2 hypervisors}, author = {Stephen J. Bigelow}, year = {2013}, - url = {https://www.techtarget.com/searchitoperations/answer/Virtual-security-tactics-for-Type-1-and-Type-2-hypervisors} + url = {https://www.techtarget.com/searchitoperations/answer/Virtual-security-tactics-for-Type-1-and-Type-2-hypervisors}, + urldate = {2023-03-31}, } @online{hostitsmartMemoryVirtualization, title = {Memory Virtualization in Cloud Computing}, author = {Host IT Smart}, - url = {https://www.hostitsmart.com/blog/memory-virtualization-in-cloud-computing/} + url = {https://www.hostitsmart.com/blog/memory-virtualization-in-cloud-computing/}, + urldate = {2023-08-02}, } @online{petriMemoryVirtualization, title = {Intro to Virtualization: Hardware, Software, Memory, Storage, Data and Network Virtualization Defined}, author = {Bill Hill}, year = {2012}, - url = {https://petri.com/intro-to-virtualization/} + url = {https://petri.com/intro-to-virtualization/}, + urldate = {2023-01-13}, } @online{containerEscapeRepercussions, title = {5 security concerns when using Docker}, author = {Adrian Mouat}, year = {2016}, - url = {https://www.oreilly.com/content/five-security-concerns-when-using-docker/} + url = {https://www.oreilly.com/content/five-security-concerns-when-using-docker/}, + urldate = {2023-12-06}, } @online{kubernetes, title = {What is Kubernetes?}, author = {Justin Ellingwood}, year = {2018}, - url = {https://www.digitalocean.com/community/tutorials/an-introduction-to-kubernetes} + url = {https://www.digitalocean.com/community/tutorials/an-introduction-to-kubernetes}, + urldate = {2023-01-21}, } @online{dockerSwarm, title = {What is Docker Swarm: Modes, Example and Working}, author = {Simplilearn}, year = {2023}, - url = {https://www.simplilearn.com/tutorials/docker-tutorial/docker-swarm} + url = {https://www.simplilearn.com/tutorials/docker-tutorial/docker-swarm}, + urldate = {2023-10-14}, } @online{Yathi2017Hardening, title = {Hardening Docker containers, images, and host - security toolkit}, author = {Yathi Naik}, year = {2017}, - url = {https://cloud.redhat.com/blog/hardening-docker-containers-images-and-host-security-toolkit} + url = {https://cloud.redhat.com/blog/hardening-docker-containers-images-and-host-security-toolkit}, + urldate = {2023-08-04}, } @online{StackRox2019Docker, title = {Docker Container Security 101: Risks and 33 Best Practices}, author = {StackRox}, year = {2019}, - url = {https://www.stackrox.io/blog/docker-security-101/} + url = {https://www.stackrox.io/blog/docker-security-101/}, + urldate = {2023-10-15}, } @online{Marcin2019Hardening, title = {Hardening Docker Quick Tips}, author = {Marcin Teodorczyk}, year = {2019}, - url = {https://medium.com/intive-developers/hardening-docker-quick-tips-54ca9c283964} + url = {https://medium.com/intive-developers/hardening-docker-quick-tips-54ca9c283964}, + urldate = {2023-08-19}, } @online{deviceWhitelistController, title = {Device Whitelist Controller}, author = {The Linux kernel user’s and administrator’s guide}, - url = {https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/devices.html} + url = {https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/devices.html}, + urldate = {2023-03-26}, } @online{dockerInherentSecurity, title = {The Inherent Security Benefits of Docker Containers}, author = {Christopher Tozzi}, - url = {https://cloudnativenow.com/features/security-benefits-docker-containers/} + year = {2017}, + url = {https://cloudnativenow.com/features/security-benefits-docker-containers/}, + urldate = {2023-12-10}, } @online{gVisor, title = {The Container Security Platform}, author = {Google}, - url = {https://gvisor.dev/} + url = {https://gvisor.dev/}, + urldate = {2023-09-25}, } @online{ibmVirtualizationDefinition, title = {What is virtualization?}, author = {IBM}, - url = {https://www.ibm.com/topics/virtualization} + url = {https://www.ibm.com/topics/virtualization}, + urldate = {2023-02-20}, } @online{redhatVirtualization, title = {What is virtualization?}, author = {Red Hat}, year = {2018}, - url = {https://www.redhat.com/en/topics/virtualization/what-is-virtualization} + url = {https://www.redhat.com/en/topics/virtualization/what-is-virtualization}, + urldate = {2023-05-21}, } @online{suseParavirtualizationDefinition, title = {Paravirtualization}, author = {SUSE}, - url = {https://www.suse.com/suse-defines/definition/paravirtualization/} + url = {https://www.suse.com/suse-defines/definition/paravirtualization/}, + urldate = {2023-06-09}, } @online{geeksforgeeksParavirtualizationDefinition, title = {Difference between Full Virtualization and Paravirtualization}, author = {GeeksforGeeks}, - url = {https://www.geeksforgeeks.org/difference-between-full-virtualization-and-paravirtualization/} + year = {2022}, + url = {https://www.geeksforgeeks.org/difference-between-full-virtualization-and-paravirtualization/}, + urldate = {2023-04-25}, } @online{geeksforgeeksHardwareAssistedVirtualization, title = {Hardware Based Virtualization}, author = {GeeksforGeeks}, - url = {https://www.geeksforgeeks.org/hardware-based-virtualization/} + url = {https://www.geeksforgeeks.org/hardware-based-virtualization/}, + urldate = {2023-03-29}, } @online{sysdigContainerRuntime, title = {What are Container Runtimes?}, author = {Sysdig}, - url = {https://sysdig.com/learn-cloud-native/container-security/what-are-container-runtimes/} + url = {https://sysdig.com/learn-cloud-native/container-security/what-are-container-runtimes/}, + urldate = {2023-01-25}, } @online{redhatContainerRuntime, title = {How Kubernetes creates and runs containers: An illustrated guide}, author = {Bob Reselman}, year = {2022}, - url = {https://www.redhat.com/architect/how-kubernetes-creates-runs-containers} + url = {https://www.redhat.com/architect/how-kubernetes-creates-runs-containers}, + urldate = {2023-09-08}, } @online{codemotionContainerImages, title = {Container Images: Technical Refresher and Security Best Practices}, author = {Gilad David Maayan}, year = {2023}, - url = {https://www.codemotion.com/magazine/cybersecurity/container-images-technical-refresher-and-security-best-practices/} + url = {https://www.codemotion.com/magazine/cybersecurity/container-images-technical-refresher-and-security-best-practices/}, + urldate = {2023-10-28}, } @online{osVirtualizationInfo, title = {OS-Level Virtualization}, author = {Vikas Jain, Vibha Goyal, Nitin Kundapur Bhat}, year = {2016}, - url = {https://courses.engr.illinois.edu/cs423/sp2016/lectures/VirtOS.pdf} + url = {https://courses.engr.illinois.edu/cs423/sp2016/lectures/VirtOS.pdf}, + urldate = {2023-11-18}, } @online{teimouriOsVirtualizationDefinition, title = {Operating-system-level virtualization}, author = {Davoud Teimouri}, year = {2017}, - url = {https://www.teimouri.net/operating-system-level-virtualization/} + url = {https://www.teimouri.net/operating-system-level-virtualization/}, + urldate = {2023-01-06}, } @online{webopediaOsVirtualizationDefinition, title = {Operating System-Level Virtualization}, author = {Vangie Beal}, year = {2021}, - url = {https://www.webopedia.com/definitions/operating-system-level-virtualization/} + url = {https://www.webopedia.com/definitions/operating-system-level-virtualization/}, + urldate = {2023-09-24}, } @online{ParavirtualizationSecurity, title = {Why Your Virtual Servers May be More Secure Than Their Physical Counterparts}, author = {Andrew Mallett}, year = {2019}, - url = {https://ine.com/blog/why-your-virtual-servers-may-be-more-secure-than-their-physical-counterparts} + url = {https://ine.com/blog/why-your-virtual-servers-may-be-more-secure-than-their-physical-counterparts}, + urldate = {2023-03-11}, } @online{ParavirtualizationVmware, title = {Understanding Full Virtualization, Paravirtualization and Hardware Assisted Virtualization}, author = {VMware}, year = {2007}, - url = {https://www.vmware.com/content/dam/digitalmarketing/vmware/en/pdf/techpaper/VMware_paravirtualization.pdf} + url = {https://www.vmware.com/content/dam/digitalmarketing/vmware/en/pdf/techpaper/VMware_paravirtualization.pdf}, + urldate = {2023-03-23}, } @online{awsMicroservices, title = {What are Microservices?}, author = {AWS}, - url = {https://aws.amazon.com/microservices/} + url = {https://aws.amazon.com/microservices/}, + urldate = {2023-11-19}, } @online{cloudzeroScalability, title = {Horizontal Vs. Vertical Scaling: How Do They Compare?}, author = {Cody Slingerland}, year = {2023}, - url = {https://www.cloudzero.com/blog/horizontal-vs-vertical-scaling/} + url = {https://www.cloudzero.com/blog/horizontal-vs-vertical-scaling/}, + urldate = {2023-05-08}, } @online{abacusFullParaOSVirtualization, title = {Three Types of Server Virtualization Explained}, author = {Abacus}, - url = {https://goabacus.com/three-types-of-server-virtualization-explained/} + url = {https://goabacus.com/three-types-of-server-virtualization-explained/}, + urldate = {2023-11-29}, } @online{ibmHypervisorDefinition, title = {What are hypervisors?}, author = {IBM}, - url = {https://www.ibm.com/topics/hypervisors} + url = {https://www.ibm.com/topics/hypervisors}, + urldate = {2023-03-31}, } @online{ibmContainerizationDefinition, title = {What is containerization?}, author = {IBM}, - url = {https://www.ibm.com/topics/containerization} + url = {https://www.ibm.com/topics/containerization}, + urldate = {2023-11-29}, } @online{ibmContainerSurvey, title = {Containers in the enterprise}, author = {IBM}, - url = {https://www.ibm.com/downloads/cas/VG8KRPRM} + year = {2020}, + url = {https://www.ibm.com/downloads/cas/VG8KRPRM}, + urldate = {2023-12-08}, } @online{ibmContainerVsVm, title = {Containers vs. Virtual Machines (VMs): What’s the Difference?}, author = {IBM}, - url = {https://www.ibm.com/blog/containers-vs-vms/} + year = {2021}, + url = {https://www.ibm.com/blog/containers-vs-vms/}, + urldate = {2023-11-17}, } @online{ciaTriad, title = {What is the CIA triad (confidentiality, integrity and availability)?}, author = {Wesley Chai}, - url = {https://www.techtarget.com/whatis/definition/Confidentiality-integrity-and-availability-CIA} + year = {2023}, + url = {https://www.techtarget.com/whatis/definition/Confidentiality-integrity-and-availability-CIA}, + urldate = {2023-11-11}, } @online{redhatVirtualizationDefinition, title = {Understanding virtualization}, author = {Red Hat}, - url = {https://www.redhat.com/en/topics/virtualization} + year = {2018}, + url = {https://www.redhat.com/en/topics/virtualization}, + urldate = {2023-08-11}, } @online{redhatContainerVsVm, title = {Containers vs VMs}, author = {Red Hat}, year = {2020}, - url = {https://www.redhat.com/en/topics/containers/containers-vs-vms} + url = {https://www.redhat.com/en/topics/containers/containers-vs-vms}, + urldate = {2023-06-02}, } @online{dockerAlternatives, title = {What Are The Best Docker Alternatives in 2022?}, author = {Cody Slingerland}, year = {2022}, - url = {https://www.cloudzero.com/blog/docker-alternatives/} + url = {https://www.cloudzero.com/blog/docker-alternatives/}, + urldate = {2023-06-07}, } @article{yasrab2018mitigating, title = {Mitigating docker security issues}, author = {Yasrab, Robail}, year = {2018}, - journal = {arXiv preprint arXiv:1804.05039} + journal = {arXiv preprint arXiv:1804.05039}, + urldate = {2023-07-29}, } @online{ansible, title = {Ansible}, author = {Red Hat}, - url = {https://www.ansible.com/} + url = {https://www.ansible.com/}, + urldate = {2023-11-23}, } @online{terraform, title = {Terraform}, author = {HashiCorp}, - url = {https://www.terraform.io/} + url = {https://www.terraform.io/}, + urldate = {2023-09-19}, } @article{mell2011nist, title = {The NIST Definition of Cloud Computing}, author = {Peter Mell and Timothy Grance}, year = {2011}, - month = {2011-09-28}, + month = {09}, publisher = {Special Publication (NIST SP), National Institute of Standards and Technology, Gaithersburg, MD}, doi = {https://doi.org/10.6028/NIST.SP.800-145}, language = {en}, + urldate = {2023-11-12}, } @online{AkihiroSuda, @@ -700,7 +805,8 @@ year = {2020}, publisher = {GitHub}, journal = {GitHub repository}, - url = {https://github.com/rootless-containers/rootlesskit} + url = {https://github.com/rootless-containers/rootlesskit}, + urldate = {2023-07-18}, } @inproceedings{reshetova2014security, @@ -709,14 +815,16 @@ booktitle = {Nordic Conference on Secure IT Systems}, pages = {77--93}, year = {2014}, - organization = {Springer} + organization = {Springer}, + urldate = {2023-08-01}, } @online{enisaSecurityOfVirtualization, title = {Security aspects of virtualization}, author = {ENISA}, year = {2017}, - url = {https://www.enisa.europa.eu/publications/security-aspects-of-virtualization} + url = {https://www.enisa.europa.eu/publications/security-aspects-of-virtualization}, + urldate = {2023-10-14}, } @article{arif2015virtualization, @@ -726,7 +834,8 @@ volume = {8}, number = {2}, pages = {237--246}, - year = {2015} + year = {2015}, + urldate = {2023-09-30}, } @inproceedings{wen2008sevmm, @@ -735,7 +844,8 @@ booktitle = {2008 International Conference on Cyberworlds}, pages = {820--823}, year = {2008}, - organization = {IEEE} + organization = {IEEE}, + urldate = {2023-02-14}, } @inproceedings{virtualizationSecurity, @@ -744,7 +854,8 @@ month = {12}, pages = {1317-1322}, title = {A Review of Virtualization, Hypervisor and VM Allocation Security: Threats, Vulnerabilities, and Countermeasures}, - doi = {10.1109/CSCI46756.2018.00255} + doi = {10.1109/CSCI46756.2018.00255}, + urldate = {2023-06-13}, } @article{Aalam_2021, @@ -759,64 +870,320 @@ author = {Zunaid Aalam and Vinod Kumar and Surendra Gour}, title = {A review paper on hypervisor and virtual machine security}, journal = {Journal of Physics: Conference Series}, + urldate = {2023-04-20}, } @online{geeksforgeeksVirtualizationSecurityGoodPractices, title = {Hypervisor Security in Cloud Computing}, author = {GeeksforGeeks}, year = {2023}, - url = {https://www.geeksforgeeks.org/hypervisor-security-in-cloud-computing/} + url = {https://www.geeksforgeeks.org/hypervisor-security-in-cloud-computing/}, + urldate = {2023-07-07}, } @online{accessAuthorizationPlugin, title = {Access authorization plugin}, author = {Docker}, - url = {https://docs.docker.com/engine/extend/plugins_authorization/#access-authorization-plugin} + url = {https://docs.docker.com/engine/extend/plugins_authorization/#access-authorization-plugin}, + urldate = {2023-05-25}, } @online{podman, title = {What is Podman?}, author = {Red Hat}, year = {2022}, - url = {https://www.redhat.com/en/topics/containers/what-is-podman} + url = {https://www.redhat.com/en/topics/containers/what-is-podman}, + urldate = {2023-05-01}, } @online{containerdRunc, title = {The differences between Docker, containerd, CRI-O and runc}, author = {Tom Donohue}, year = {2023}, - url = {https://www.tutorialworks.com/difference-docker-containerd-runc-crio-oci/} + url = {https://www.tutorialworks.com/difference-docker-containerd-runc-crio-oci/}, + urldate = {2023-05-13}, } @online{containerOSlimitations, title = {Virtualization vs. Containerization — Comparing Differences}, author = {Liquid Web}, year = {2023}, - url = {https://www.liquidweb.com/kb/virtualization-vs-containerization/} + url = {https://www.liquidweb.com/kb/virtualization-vs-containerization/}, + urldate = {2023-12-10}, } @online{applicationContainerization, title = {Containerized Applications Overview}, author = {Knowledge Center}, - url = {https://www.datadoghq.com/knowledge-center/containerized-applications/} + url = {https://www.datadoghq.com/knowledge-center/containerized-applications/}, + urldate = {2023-10-29}, } @online{apparmor, title = {AppArmor}, author = {AppArmor}, - url = {https://apparmor.net/} + url = {https://apparmor.net/}, + urldate = {2023-02-06}, } @online{selinux, title = {What is SELinux?}, author = {Red Hat}, year = {2019}, - url = {https://www.redhat.com/en/topics/linux/what-is-selinux} + url = {https://www.redhat.com/en/topics/linux/what-is-selinux}, + urldate = {2023-04-08}, } @online{seccomp, title = {Improving Linux container security with seccomp}, author = {Valentin Rothberg}, year = {2020}, - url = {https://www.redhat.com/sysadmin/container-security-seccomp} + url = {https://www.redhat.com/sysadmin/container-security-seccomp}, + 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, + title = {Vuls Architecture}, + author = {future-architect}, + url = {https://vuls.io/docs/en/architecture-remote-scan.html}, + urldate = {2023-12-05}, +} + +@online{vulsDeepScan, + title = {Fast-Root Scan}, + author = {Vuls}, + url = {https://vuls.io/docs/en/architecture-fast-root-scan.html}, + 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, + title = {Apache Libcloud - Supported Providers}, + author = {The Apache Software Foundation}, + url = {https://libcloud.readthedocs.io/en/stable/compute/supported_providers.html}, + urldate = {2023-08-07}, +} + +@online{azure-mgmt-network, + title = {Microsoft Azure SDK for Python}, + author = {Microsoft}, + url = {https://pypi.org/project/azure-mgmt-network/}, + urldate = {2023-02-12}, +} + +@online{azure-mgmt-resource, + title = {Microsoft Azure SDK for Python}, + author = {Microsoft}, + url = {https://pypi.org/project/azure-mgmt-resource/}, + urldate = {2023-05-21}, +} + +@online{yuml, + title = {yUML}, + author = {yUML}, + url = {https://yuml.me/}, + urldate = {2023-12-30}, +} + +@online{libcloud-cli, + title = {libcloud-cli}, + author = {Terradue}, + url = {https://github.com/Terradue/libcloud-cli}, + urldate = {2023-08-31}, +} + +@online{jshielder, + title = {JShielder}, + author = {Jsitech}, + url = {https://github.com/Jsitech/JShielder}, + urldate = {2023-12-05}, +} + +@online{nixarmor, + title = {nixarmor}, + author = {Emir Ozer}, + url = {https://github.com/emirozer/nixarmor}, + urldate = {2023-12-05}, +} + +@online{ubuntu, + title = {Ubuntu}, + author = {Canonical}, + url = {https://ubuntu.com/}, + urldate = {2023-12-30}, +} + +@online{debian, + title = {Debian}, + author = {Debian}, + url = {https://www.debian.org/}, + urldate = {2023-12-30}, +} + +@online{centos, + title = {CentOS}, + author = {CentOS}, + url = {https://www.centos.org/}, + urldate = {2023-12-30}, +} + +@online{fedora, + title = {Fedora}, + author = {Fedora}, + url = {https://fedoraproject.org/}, + urldate = {2023-12-30}, +} + +@online{redhat, + title = {Red Hat}, + author = {Red Hat}, + url = {https://www.redhat.com/}, + urldate = {2023-12-30}, +} + +@online{opensuse, + title = {openSUSE}, + author = {openSUSE}, + url = {https://www.opensuse.org/}, + urldate = {2023-12-30}, +} + +@online{mermaid, + title = {Mermaid}, + author = {Mermaid}, + url = {https://mermaid.live/}, + urldate = {2024-01-05}, +} + +@online{code2flow, + title = {code2flow}, + author = {Scott Rogowski}, + url = {https://github.com/scottrogowski/code2flow}, + urldate = {2024-01-05}, +} + +@online{callGraph, + title = {callGraph}, + author = {Chris Koknat}, + url = {https://github.com/koknat/callGraph}, + urldate = {2024-01-15}, +} + +@online{pydeps, + title = {pydeps}, + author = {Bjorn}, + url = {https://github.com/thebjorn/pydeps}, + urldate = {2024-01-05}, +} + +@online{doxygen, + title = {Doxygen}, + author = {Dimitri van Heesch}, + url = {https://github.com/doxygen/doxygen}, + urldate = {2024-01-05}, } diff --git a/Chapters/1.Introduction.tex b/Chapters/1.Introduction.tex index a05da7b..3caba4c 100644 --- a/Chapters/1.Introduction.tex +++ b/Chapters/1.Introduction.tex @@ -264,13 +264,14 @@ MySQL και το διακομιστή ιστού Nginx. Με αυτό τον τ λειτουργικό σύστημα ούτως ώστε κάθε δοχείο να περιέχει μόνο την εφαρμογή, τις βιβλιοθήκες και τις εξαρτήσεις της \footfullcite{ibmContainerVsVm}. -Η εικόνα \ref{fig:containerVsVm} παρουσιάζει τη διαφορά των δύο αρχιτεκτονικών +Το σχήμα \ref{fig:containerVsVm} παρουσιάζει τις διαφορές ανάμεσα στην +αρχιτεκτονική της εικονικοποίησης και των δοχείων: \begin{center} \begin{figure}[!ht] \centering \includegraphics[width = .8\textwidth]{Figures/RedHat_Virtualization/virtualization-vs-containers_transparent.png} - \captionof{figure}{Εικονικοποίηση έναντι δοχείων \cite{redhatVirtualizationDefinition}} + \captionof{figure}{Χρήση εικονικοποίησης έναντι δοχείων \cite{redhatVirtualizationDefinition}} \label{fig:containerVsVm} \end{figure} \vspace*{-30pt} @@ -411,8 +412,6 @@ Docker, το Quay \footfullcite{quay}, ένα εναλλακτικό αποθε της ταχείας διάθεσης και εκτέλεσης τους, συμβαδίζουν πλήρως με τον ρυθμό ανάπτυξης και παράδοσης που υποστηρίζουν οι παραπάνω μεθοδολογίες. -\clearpage - Έχοντας αυτά υπόψιν, γίνεται εμφανής και ο λόγος που τα δοχεία είναι η προτιμότερη επιλογή για την ανάπτυξη και παράδοση εφαρμογών που ακολουθούν την αρχιτεκτονική μικρο-υπηρεσιών. Σε αυτήν την περίπτωση, η εφαρμογή αποτελείται diff --git a/Chapters/2.Background.tex b/Chapters/2.Background.tex index 01195e4..8decb36 100644 --- a/Chapters/2.Background.tex +++ b/Chapters/2.Background.tex @@ -942,7 +942,7 @@ API, ώστε να μπορεί να κάνει χρήση των υπερ-κλ \clearpage -Στην εικόνα \ref{fig:FullVirtualization} +Στο σχήμα \ref{fig:FullVirtualization} \cite{geeksforgeeksParavirtualizationDefinition} παρουσιάζεται η αρχιτεκτονική της πλήρους εικονικοποίησης όπου το φιλοξενούμενο λειτουργικό σύστημα (της εικονικής μηχανής) επιβάλλεται να περάσει τα αιτήματα του (πρόσβασης πόρων) @@ -958,7 +958,7 @@ API, ώστε να μπορεί να κάνει χρήση των υπερ-κλ \vspace*{-30pt} \end{center} -Αντιθέτως, στην εικόνα \ref{fig:ParaVirtualization} όπου και απεικονίζεται η +Αντιθέτως, στo σχήμα \ref{fig:ParaVirtualization} όπου και απεικονίζεται η αρχιτεκτονική της παρα-εικονικοποίησης, βλέπουμε πως μέσω των υπερ-κλήσεων, όλα τα αιτήματα προορίζονται στη στρώση εικονικοποίησης και από εκεί στο κύριο σύστημα (χωρίς την ανάγκη κάποιας επεξεργασίας ή μετάφρασης). diff --git a/Chapters/3.RelevantWork.tex b/Chapters/3.RelevantWork.tex index 762ed78..39084c9 100644 --- a/Chapters/3.RelevantWork.tex +++ b/Chapters/3.RelevantWork.tex @@ -1,24 +1,267 @@ \chapter{Σχετικές Εργασίες} \label{relevantWork} -Με την πάροδο των χρόνων και τη ραγδαία αύξηση ενδιαφέροντος προς τον κλάδο της -υπολογιστικής νέφους, άρχισε να γίνεται όλο και πιο επιτακτική η ανάγκη για -αυτοματοποιημένο στήσιμο και προστασία των υποδομών των επιχειρήσεων. Η χρήση -τεχνολογιών εικονικοποίησης και η άνοδος υπηρεσιών IaaS, έχει ελαφρύνει τον -φόρτο εργασίας όσον αφορά το στήσιμο των υποδομών αφού πλέον υπάρχουν πολλά -εργαλεία στα οποία γίνεται καθορισμός τους. Η αυτοματοποίηση της ασφάλισης τους -όμως είναι ακόμα σε πρώιμο στάδιο. Οι περισσότερες υπηρεσίες που διατίθενται -στους χρήστες κάνουν χρήση τεχνολογιών εικονικοποίησης έμμεσα από τον πάροχο -νέφους που χρησιμοποιούν και τεχνολογίες δοχείων άμεσα από επιλογή τους λόγω -της υπεροχής που παρέχουν στη διαχείριση. Όλες οι υπηρεσίες όμως είναι εν -δυνάμει ευάλωτες σε επιθέσεις εάν δε ληφθούν τα απαραίτητα μέτρα προστασίας και -αφήσουν ανοιχτά σημεία εισόδου στο δίκτυο τους. +\noindent Με την πάροδο των χρόνων και τη ραγδαία αύξηση ενδιαφέροντος προς τον +κλάδο της υπολογιστικής νέφους, άρχισε να γίνεται όλο και πιο επιτακτική η +ανάγκη για αυτοματοποιημένο στήσιμο και προστασία των υποδομών των +επιχειρήσεων. Η χρήση τεχνολογιών εικονικοποίησης και η άνοδος υπηρεσιών IaaS, +έχει ελαφρύνει τον φόρτο εργασίας όσον αφορά το στήσιμο των υποδομών αυτών, +αφού πλέον υπάρχουν πολλά εργαλεία στα οποία γίνεται καθορισμός τους. Η +αυτοματοποίηση της ασφάλισης τους όμως είναι ακόμα σε πρώιμο στάδιο. Οι +περισσότερες υπηρεσίες που διατίθενται στους χρήστες κάνουν χρήση τεχνολογιών +εικονικοποίησης έμμεσα από τον πάροχο νέφους που χρησιμοποιούν και τεχνολογίες +δοχείων άμεσα από επιλογή τους λόγω της υπεροχής που παρέχουν στη διαχείριση. +Όλες οι υπηρεσίες όμως είναι εν δυνάμει ευάλωτες σε επιθέσεις εάν δε ληφθούν τα +απαραίτητα μέτρα προστασίας και αφήσουν ανοιχτά σημεία εισόδου στα συστήματά +τους. Η παρούσα εργασία έχει ως στόχο την ανάπτυξη ενός εργαλείου που επιτυγχάνει την αυτοματοποίηση τριών τομέων. Την επικοινωνία με τον πάροχο νέφους για την αίτηση διάθεσης υπολογιστικών πόρων, την ασφάλιση των πόρων αυτών και τέλος την εγκατάσταση, ασφάλιση και χρήση του Docker για τη διάθεση εφαρμογών που -βρίσκονται στο Dockerhub. Το επίσημο αποθετήριο του Docker. +βρίσκονται στο Docker Hub. Το επίσημο αποθετήριο του Docker. -Στην παρούσα ενότητα θα γίνει αναφορά σε εργαλεία που έχουν αναπτυχθεί για έναν -ή παραπάνω από αυτούς τους τρεις τομείς και θα πραγματοποιηθεί σύγκριση τους +Στην ενότητα αυτή θα γίνει αναφορά σε εργαλεία που έχουν αναπτυχθεί για έναν ή +παραπάνω από αυτούς τους τρεις τομείς και θα πραγματοποιηθεί σύγκριση τους ανάλογα με τον τρόπο λειτουργίας τους και τις δυνατότητες που παρέχουν. + +\clearpage + +\section{Αυτοματοποίηση δημιουργίας εικονικών μηχανών} + +Σε σχέση με τα εργαλεία αυτοματοποίησης δημιουργίας εικονικών μηχανών, τα +κριτήρια που θα ληφθούν υπόψιν για την σύγκριση με το εργαλείο που προτείνει η +διπλωματική εργασία είναι τα εξής: + +\begin{itemize} + + \item \textbf{Ευελιξία κατά την χρήση}: + + Το εργαλείο πρέπει να μπορεί να προσαρμόζεται στις ανάγκες του χρήστη + όταν αυτός χρειάζεται να πραγματοποιήσει ορισμένες αλλαγές κατά την + χρήση του. + + \item \textbf{Ευκολία κατά την χρήση}: + + Το εργαλείο πρέπει να μπορεί να χρησιμοποιηθεί εύκολα από έναν χρήστη + που έχει χρησιμοποιήσει στο παρελθόν εργαλεία γραμμής εντολών. Οι + παράμετροι του πρέπει να ακολουθούν ένα μοτίβο που θα διευκολύνει την + κατανόηση της λειτουργίας τους και τον συνδυασμό τους για ένα επιθυμητό + αποτέλεσμα. + + \item \textbf{Υποστήριξη μεγάλων ονομάτων στον κλάδο}: + + Το εργαλείο πρέπει να υποστηρίζει την επικοινωνία με τα νέφη μεγάλων + εταιρειών στον κλάδο της νεφο-υπολογιστικής, ώστε να είναι εύκολο για + να έναν χρήστη να παραμείνει στον πάροχο της επιλογής του. + + \item \textbf{Ευκολία στην επέκταση}: + + Το εργαλείο πρέπει να είναι εύκολο στην επέκταση του, ώστε να μπορεί να + αυτοματοποιηθεί περισσότερο η διαδικασία δημιουργίας εικονικών μηχανών. + +\end{itemize} + +\clearpage + +\subsection{Εργαλεία δημιουργίας εικονικών μηχανών} + +Τα εργαλεία με τα οποία θα γίνει σύγκριση περιγράφονται στην συνέχεια ως εξής: + +\begin{itemize} + + \item \textbf{Terraform}: + + Το Terraform είναι ένα δημοφιλές εργαλείο ανοιχτού κώδικα που + αναπτύχθηκε από την εταιρεία HashiCorp. Αποτελεί ένα εργαλείο, κατά την + χρήση του οποίου ο χρήστης καθορίζει τα χαρακτηριστικά της υποδομής που + θέλει να δημιουργήσει σε ένα αρχείο που ακολουθεί συγκεκριμένη σύνταξη. + Αυτό το εντάσσει στην κατηγορίας \textquote{υποδομή ως κώδικας + (Infrastructure as Code - IaC)} και χρησιμοποιείται για τον καθορισμό + των υποδομών που θα χρησιμοποιηθούν για την στέγαση εφαρμογών. Το + Terraform υποστηρίζει πολλούς παρόχους νέφους και επιτρέπει την + αυτοματοποίηση της διαδικασίας δημιουργίας υποδομών σε αυτούς. Ο τρόπος + λειτουργίας του είναι αρκετά απλός. Αφού ο χρήστης έχει δημιουργήσει το + αρχείο που περιγράφει την υποδομή, το εκτελεί για να γίνουν οι + απαραίτητες ενέργειες. Έπειτα ο χρήστης μπορεί να αποδεσμεύσει τους + πόρους που δημιουργήθηκαν όταν δεν τους χρειάζεται πλέον. + + \item \textbf{Libcloud CLI} \footfullcite{libcloud-cli}: + + Αποτελεί την δεύτερη τροποποιημένη έκδοση από ένα τρίτο πρόσωπο, ενός + προγράμματος που επιχειρούσε να επιτύχει την δημιουργία ενός εργαλείου + γραμμής εντολών που χρησιμοποιεί την βιβλιοθήκη libcloud για την + δημιουργία εικονικών μηχανών κατά μήκος διάφορων παρόχων νέφους. Είναι + ένα εργαλείο γραμμής εντολών που απαιτεί αρχείο ρυθμίσεων μονάχα για + την αυθεντικοποίηση με τους παρόχους νέφους. + +\end{itemize} + +\clearpage + +\subsection{Σύγκριση με το SecDep} + +Σχετικά με τα κριτήρια που έχουν οριστεί για την σύγκριση με εργαλεία που ως +κύριο στόχο έχουν την δημιουργία εικονικών μηχανών, το εργαλείο που προτείνει η +διπλωματική εργασία παρέχει όλα τα απαραίτητα χαρακτηριστικά. + +\begin{itemize} + + \item \textbf{Σύγκριση με Terraform}: + + Χρειάζεται την δημιουργία ενός αρχείου πριν την χρήση του και κάθε αλλαγή + απαιτεί την τροποποίηση του. Αυτό το καθιστά λιγότερο ευέλικτο σε σχέση με άλλα + εργαλεία. Είναι σχετικά εύκολο στην χρήση όπως τα υπόλοιπα και δύναται να + χρησιμοποιήσει τα νέφη όλων των μεγάλων παρόχων. Παρόλα αυτά δεν αποτελεί + εργαλείο που μπορεί να επεκταθεί εύκολα καθώς ο τρόπος λειτουργίας του το + καθιστά αυτοτελές. + + \item \textbf{Σύγκριση με Libcloud CLI}: + + Το δεύτερο πιο πρόσφατο εργαλείο που κάνει χρήση της βιβλιοθήκης + libcloud μετά από αυτό που προτείνει η διπλωματική εργασία. Είναι + αρκετά ευέλικτο και εύκολο στην χρήση, παρόλα αυτά πλέον υποστηρίζει + μονάχα έναν πάροχο νέφους, ο οποίος δεν αποτελεί δημοφιλή επιλογή + γενικότερα. Θα μπορούσε να επεκταθεί η λειτουργικότητα του αλλά έχει να + ανανεωθεί από το 2018. + +\end{itemize} + +Ο χρήστης δύναται κατά την χρήση του SecDep να επιλέξει τις ενέργειες και τα +χαρακτηριστικά που επιθυμεί για την εικονική μηχανή του. Όλες οι παράμετροι +είναι εύκολα κατανοητές και συνδυάζονται μεταξύ τους για να επιτευχθεί το +επιθυμητό αποτέλεσμα. Υποστηρίζει όλους τους δημοφιλείς παρόχους νέφους και +όλες τις καλές πρακτικές ενός εργαλείου γραμμής εντολών όπως ο έλεγχος +σφαλμάτων κατά την εισαγωγή παραμέτρων. Επιπλέον, μπορεί εύκολα να επεκταθεί η +χρήση του, είτε εισάγοντας έτοιμες εντολές σε αρχεία bash είτε προσθέτοντας +νέες ενέργειες στον κώδικα του αφού πρόκειται για ένα αρχείο python. + +\clearpage + +\section{Αυτοματοποίηση σκλήρυνσης εικονικών μηχανών} + +Τα κριτήρια που θα ληφθούν υπόψιν για α εργαλεία αυτοματοποίησης σκλήρυνσης +εικονικών μηχανών είναι τα εξής: + +\begin{itemize} + + \item \textbf{Υποστήριξη πολλών διανομών}: + + Το εργαλείο πρέπει να υποστηρίζει διάφορες διανομές Linux και να είναι + αρκετά ευέλικτο ώστε να μπορεί να ξεχωρίσει την διανομή στην οποία + εκτελείται. + + \item \textbf{Ευκολία κατά την χρήση}: + + Το εργαλείο πρέπει να μπορεί να χρησιμοποιηθεί εύκολα από έναν χρήστη. + Ιδανικά να αρκεί η εκτέλεσή του σε μια εικονική μηχανή χωρίς την ανάγκη + εγκατάστασης εξαρτήσεων. + + \item \textbf{Εύρος σκλήρυνσης}: + + Το εργαλείο πρέπει να μπορεί να σκληρύνει την εικονική μηχανή σε + ικανοποιητικό βαθμό και να μην περιορίζεται σε λίγες μονάχα επιλογές. + +\end{itemize} + +\subsection{Εργαλεία σκλήρυνσης εικονικών μηχανών} + +Τα παρακάτω εργαλεία θα συγκριθούν με το harden. Το δεύτερο εκτελέσιμο αρχείο +του εργαλείου SecDep, το οποίο κατά την επιλογή του χρήστη εκτελείται σε μια +εικονική μηχανή μετά την δημιουργία της. + +\begin{itemize} + + \item \textbf{JShielder} \footfullcite{jshielder}: + + Το JShielder είναι ένα εργαλείο ανοιχτού κώδικα που αναπτύχθηκε από τον + Jason Soto με σκοπό την αυτοματοποίηση σκλήρυνσης λειτουργικών + συστημάτων Linux. Ο πηγαίος κώδικας του βρίσκεται στο GitHub και ο + τρόπος λειτουργίας του είναι η εκτέλεση του ως χρήστης με διαχειριστικά + δικαιώματα στο σύστημα. + + \item \textbf{nixarmor} \footfullcite{nixarmor}: + + Ένα εργαλείο ανοιχτού κώδικα που στεγάζεται στο GitHub και αναπτύχθηκε + από τον Emir Ozer. Περιέχει διαφορετικά εκτελέσιμα αρχεία για την + σκλήρυνση διάφορων διανομών Linux τα οποία μπορούν να εκτελεστούν ως + αυτόνομα προγράμματα από τον χρήστη. + +\end{itemize} + +\subsection{Σύγκριση με το harden} + +Σχετικά με τα δηλωθέντα κριτήρια, το SecDep ικανοποιεί όλους τους παραπάνω +στόχους. + +\begin{itemize} + + \item \textbf{Σύγκριση με JShielder}: + + Το JShielder παρέχει ένα ικανοποιητικό εύρος σκλήρυνσης του συστήματος + και η ευκολία στην χρήση του το καθιστά ένα εργαλείο που μπορεί να + χρησιμοποιηθεί από έναν χρήστη με μικρή εμπειρία στον κλάδο. Παρόλα + αυτά, δεν υποστηρίζει πολλές διανομές και οι εκδόσεις των διανομών που + υποστηρίζονται μέσω αυτού είναι αρκετό καιρό ξεπερασμένες. Θα μπορούσε + να βελτιωθεί με μια ανανέωση του πηγαίου του κώδικα αλλά η ανάπτυξή του + φαίνεται να έχει σταματήσει το 2019. + + \item \textbf{Σύγκριση με το nixarmor}: + + Σε αντίθεση με το JShielder, το nixarmor για να χρησιμοποιηθεί με τον + ίδιο τρόπο που χρησιμοποιούνται τα υπόλοιπα εργαλεία θα πρέπει να + επεκταθεί με την προσθήκη κώδικα που να του επιτρέπει να ξεχωρίζει ποιο + είναι το κατάλληλο εκτελέσιμο για την κάθε διανομή. Στην αντίθετη + περίπτωση, πάλι η χρήση του είναι εύκολη διότι ο χρήστης μπορεί να + επιλέξει και να εκτελέσει χειροκίνητα ένα από τα εκτελέσιμα αρχεία που + περιέχει. Η σκλήρυνση που παρέχει καλύπτει πολλούς τομείς μιας διανομής + και μπορεί εύκολα να προστεθούν επιπλέον συναρτήσεις στον κώδικα του. + Παρόλα αυτά, η ανάπτυξη του έχει παύσει από το 2015 και οι διανομές που + υποστηρίζει έχουν περιοριστεί σε μονάχα 4. + +\end{itemize} + +Συγκριτικά με τα παραπάνω εργαλεία, το harden υποστηρίζει την ικανότητα +αναγνώρισης της διανομής στην οποία εκτελείται και μπορεί δυναμικά να αλλοιώσει +την συμπεριφορά του ανάλογα την διανομή. Οι υποστηριζόμενες διανομές είναι 6 +και οι λειτουργίες του αν και σύμφωνα με τα αποτελέσματα του κεφαλαίου +\ref{experimentationANDresults} είναι ικανοποιητικές, θα μπορούσαν εύκολα να +επεκταθούν με την προσθήκη νέων συναρτήσεων. Επιπλέον, αυτό το ένα εκτελέσιμο, +παράγει κατά την εκτέλεση του δύο ακόμα, τα οποία θα εκτελούνται περιοδικά με +σκοπό την αυτόματη ενημέρωση του συστήματος και το κλείσιμο αχρησιμοποίητων +θυρών. + +\clearpage + +\section{Αυτοματοποίηση εγκατάστασης/σκλήρυνσης του Docker} + +Μια από τις λειτουργίες του εκτελέσιμου harden πέρα από την σκλήρυνση του +συστήματος, είναι και η αυτόματη εγκατάσταση και σκλήρυνση του Docker. Αυτό +επιτυγχάνεται με την εγκατάσταση μιας τροποποιημένης έκδοσης του, η οποία +δύναται να εκτελεστεί από οποιονδήποτε χρήστη του συστήματος, δίχως την ανάγκη +διαχειριστικών δικαιωμάτων. Έπειτα πραγματοποιείται αντικατάσταση του αρχικού +container runtime (runC) με το runsc, από το gVisor. Αυτό, αναπτύχθηκε από την +Google και αποτελεί μια ασφαλέστερη επιλογή από το αρχικό, διότι περιορίζει τις +κλήσεις του συστήματος (system calls) στις άκρως απαραίτητες για την λειτουργία +του Docker. Ο συνδυασμός αυτών των δύο βημάτων έχει ήδη περιορίσει την +επιφάνεια επίθεσης σε περίπτωση απόδρασης από ένα δοχείο και έχει μειώσει την +πιθανότητα κάτι τέτοιο να συμβεί. + +Επιπροσθέτως, ρυθμίζεται ο δαίμονας του Docker ώστε να εκτελείται με μεγαλύτερη +ασφάλεια. Αυτό επιτυγχάνεται χρησιμοποιώντας παραμέτρους όπως +\textquote{no-new-privileges} για να μην μπορεί ένα δοχείο να λάβει περισσότερα +δικαιώματα στην συνέχεια της εκτέλεσης του, καθώς και ενεργοποιώντας τις +δυνατότητες του SELinux εάν αυτό υποστηρίζεται από την εκάστοτε υποκείμενη +διανομή του συστήματος. Τέλος, πραγματοποιείται εγκατάσταση της υπηρεσίας σε +μορφή δοχείου ονόματι \textquote{watchtower}, η οποία έχει ως στόχο την +αυτόματη ενημέρωση των δοχείων που εκτελούνται στο σύστημα. + +\subsection{Καινοτομία του SecDep} + +Δεδομένου ότι πολλές από τις παραπάνω τεχνολογίες είναι σχετικά νέες, δεν +υπάρχουν στην αγορά εργαλεία που να έχουν ως κύριο στόχο την αυτόματη εφαρμογή +τους. Τα περισσότερα επικεντρώνονται στην σκλήρυνση των δοχείων και όχι του +δαίμονα, ενώ όσα επιχειρούν να σκληρύνουν τον δαίμονα έχουν να ανανεωθούν πολύ +προτού έρθουν στο προσκήνιο οι τεχνολογίες που χρησιμοποιεί το harden. +Επομένως, δεν θα υπήρχε δίκαιη σύγκριση με αυτά. Στον συγκεκριμένο τομέα, το +SecDep προσφέρει μια ολοκληρωμένη λύση, η οποία εκτελεί όλα τα παραπάνω βήματα +δίχως την ανάγκη αλληλεπίδρασης ή περαιτέρω ρυθμίσεων από τον χρήστη. diff --git a/Chapters/4.ProjectDevelopment.tex b/Chapters/4.ProjectDevelopment.tex index 6826595..278ab91 100644 --- a/Chapters/4.ProjectDevelopment.tex +++ b/Chapters/4.ProjectDevelopment.tex @@ -1,3 +1,495 @@ \chapter{Ανάπτυξη Συστήματος} \label{projectDevelopment} -\section{Αρχές και Πλαίσιο Σχεδίασης για ασφαλές στήσιμο υπηρεσιών σε μια ιδεατή μηχανή με χρήση της τεχνολογίας Docker} \label{framework} +\noindent Στην παρούσα ενότητα θα αναλυθούν οι τεχνολογίες που χρησιμοποιήθηκαν +για την υλοποίηση του συστήματος, οι αποφάσεις που πάρθηκαν κατά την ανάπτυξη +του και οι σχεδιαστικές επιλογές που έγιναν. Επίσης, θα πραγματοποιηθεί +απεικόνιση των συσχετίσεων μεταξύ των συστατικών του συστήματος και θα αναλυθεί +περαιτέρω η λειτουργία τους. + +\section{Αποφάσεις που πάρθηκαν κατά την ανάπτυξη} \label{developmentDecisions} + +Κατά την ανάπτυξη του συστήματος, προκειμένου να επιτευχθούν οι στόχοι που +θέσαμε στην ενότητα \ref{overcomingDockerDisadvantages} και συγκεκριμένα για +την επικοινωνία με διάφορους παρόχους νέφους, επιλέχθηκε να γίνει χρήση της +βιβλιοθήκης libcloud \footfullcite{libcloud}. Μια από τις δύο επιλογές +βιβλιοθηκών της Apache \footfullcite{apache} για την επικοινωνία με παρόχους +νέφους. Συγκριτικά με την βιβλιοθήκη jclouds \footfullcite{jclouds}, η οποία +σχεδιάστηκε για την γλώσσα Java \footfullcite{java}, η libcloud είναι πιο απλή +στην χρήση, αφού είναι σχεδιασμένη για την γλώσσα Python \footfullcite{python}. +Επιπροσθέτως, η libcloud είναι πιο διαδεδομένη και η γλώσσα python αποτελεί μια +πιο ευέλικτη επιλογή για τις ανάγκες του εργαλείου. + +Η ανάγκη για μια βιβλιοθήκη που θα λειτουργεί ως μεσάζοντας μεταξύ του +εργαλείου και των παρόχων νέφους, οφείλεται στο γεγονός ότι οι πάροχοι νέφους +δεν διαθέτουν ένα κοινό API για την διαχείριση των υποδομών τους. Απεναντίας, ο +καθένας από αυτούς διαθέτει το δικό του API, το οποίο χρησιμοποιείται έμμεσα +μέσω του πίνακα ελέγχου του παρόχου που βρίσκεται στην ιστοσελίδα του, ενός +δικού του εργαλείου γραμμής εντολών, ή άμεσα μέσω της βιβλιοθήκης που παρέχει ο +ίδιος. Η libcloud αποτελεί μια προσπάθεια δημιουργίας ενός ενιαίου API, το +οποίο χρησιμοποιώντας τις ίδιες συναρτήσεις, επιχειρεί να προσκομίσει ίδια +αποτελέσματα ανεξαρτήτως του παρόχου νέφους που επιλέχθηκε. + +\clearpage + +Παρ όλη την προσπάθεια που καταβλήθηκε από την libcloud όμως, για την ενοποίηση +αυτή, οι διαφορές στους τρόπους λειτουργίας του κάθε παρόχου αρχίζουν να +εμφανίζονται σύντομα κατά την ανάπτυξη. Για το εργαλείο που προτείνει η παρούσα +διπλωματική εργασία, χρειάζεται να γίνει χρήση των λειτουργιών +\textquote{Compute} της βιβλιοθήκης. Στην αρχική σελίδα της, αναφέρεται +υποστήριξη για πάνω από 50 παρόχους. Κατά την σελίδα τεκμηρίωσης +\footfullcite{libcloudProviders} για τις λειτουργίες \textquote{Compute}, +αναφέρονται 48 πάροχοι σε έναν πίνακα ο οποίος αναγράφει την υποστήριξη ή +απουσία αυτής, διάφορων συναρτήσεων εικονικών μηχανών. Στις συναρτήσεις αυτές +περιλαμβάνονται η δημιουργία εικονικών μηχανών, η εκκίνηση, η παύση, η διαγραφή +τους και εν γένει όσες λειτουργίες είναι απαραίτητες για την ολοκληρωμένη +λειτουργία του εργαλείου. Από αυτούς τους 48 παρόχους, οι 25 υποστηρίζουν και +τις 9 συναρτήσεις. Ωστόσο, από αυτούς τους 25 έπρεπε να αφαιρεθούν οι 20 για +λόγους όπως η μη ύπαρξη τεκμηρίωσης χρήσης από την libcloud, η μη συνέχιση +λειτουργίας τους, η έλλειψη πληροφοριών τιμής ή δοκιμαστικής περιόδου για τις +υπηρεσίες τους και η αδυναμία δημιουργίας λογαριασμού στην επίσημη σελίδα τους. +Επομένως, υπάρχουν εν τέλει 5 πάροχοι νέφους που δύναται να χρησιμοποιηθούν +υποστηρίζοντας όλες τις πιθανές λειτουργίες διαχείρισης εικονικών μηχανών. +Τέλος, από αυτούς τους 5, επιλέχθηκαν για επίσημη υποστήριξη από το εργαλείο +που προτείνεται στην παρούσα διπλωματική εργασία, τα τρία μεγαλύτερα ονόματα +του χώρου, οι Amazon, Google και Microsoft. Οι άλλοι δύο είτε δεν παρείχαν +δοκιμαστική περίοδο των υπηρεσιών τους, είτε δεν υπήρχε εμπιστοσύνη ως προς την +ποιότητα των υπηρεσιών αυτών. + +Παρακάτω θα διαπιστώσουμε πως ακόμα και με την χρήση της βιβλιοθήκης libcloud +και την επίσημη υποστήριξη όλων των λειτουργιών για κάθε πάροχο, υπήρχε η +ανάγκη χρήσης της επίσημης βιβλιοθήκης της Azure για την δημιουργία Resource +Group \footfullcite{azure-mgmt-resource}, Virtual Network +\footfullcite{azure-mgmt-network} διότι αυτές οι λειτουργίες δεν υποστηρίζονται +μέσω της libcloud. Επιπροσθέτως, δίχως την υποστήριξη των λειτουργιών αυτών, ο +χρήστης θα ήταν υποχρεωμένος να δημιουργεί αυτούς τους πόρους χειροκίνητα ή να +είναι περιορισμένος μονάχα σε μια γεωγραφική τοποθεσία. Οι δύο τελευταίες +επιλογές πάνε ενάντια σε έναν από τους βασικότερους στόχους του εργαλείου. Την +ομοιόμορφη λειτουργία για κάθε πάροχο νέφους που υποστηρίζεται. + +\clearpage + +Πέρα από την απόφαση για την χρήση της libcloud και την γλώσσα προγραμματισμού +Python, πάρθηκε επίσης η απόφαση για την υποστήριξη των 6 δημοφιλέστερων +επιλογών για λειτουργικά συστήματα Linux σε περιβάλλοντα διακομιστών. Οι +διανομές αυτές υποστηρίζονται και για τους 3 παρόχους νέφους και κάθε μια από +αυτές περιλαμβάνει διαφορετικές εκδόσεις της κάθε διανομής. Αυτές είναι οι εξής +για κάθε πάροχο: + +\begin{savenotes} +\selectfont +\begin{table}[!ht] +\caption{Υποστηριζόμενες εκδόσεις διανομών για κάθε πάροχο} +\renewcommand{\arraystretch}{1.5} +\centering +\textgreek{\begin{tabular}{lc|c|c|c|} +\cline{3-5} + & & \multicolumn{3}{c|}{Πάροχοι} \\ \cline{3-5} + & & AWS & Azure & GCE \\ \hline +\multicolumn{1}{|c|}{\multirow{6}{*}{\rotatebox{90}{Διανομές}}} & Ubuntu \footfullcite{ubuntu} & 22.04, 22.10 & 22.04, 22.10 & Όλες \\ \cline{2-5} +\multicolumn{1}{|c|}{} & Debian \footfullcite{debian} & 10, 11 & 10, 11 & Όλες \\ \cline{2-5} +\multicolumn{1}{|c|}{} & CentOS \footfullcite{centos} & 7, 8, 9 & 8.4, 8.5 & Όλες \\ \cline{2-5} +\multicolumn{1}{|c|}{} & Fedora \footfullcite{fedora} & 37 & 36, 37 & Όλες \\ \cline{2-5} +\multicolumn{1}{|c|}{} & Red Hat Enterprise Linux \footfullcite{redhat} & 7.9, 8.6, 9 & 8.6, 9.1 & Όλες \\ \cline{2-5} +\multicolumn{1}{|c|}{} & openSUSE Leap \footfullcite{opensuse} & 15.3, 15.4 & 15.3 15.4 & Όλες \\ \hline +\end{tabular}} +\label{table:supportedDistributions} +\renewcommand{\arraystretch}{1} +\end{table} +\end{savenotes} + +Ο λόγος που οι εκδόσεις είναι συγκεκριμένες για τους παρόχους AWS και Azure, +είναι διότι ο αριθμός των διαθέσιμων διανομών και εκδόσεων τους είναι +υπερβολικά μεγάλος και κατά την εκτέλεση της λειτουργίας δημιουργίας λίστας +τους ή κατά τον έλεγχο της ορθότητας δεδομένων που εισάγει ο χρήστης, το +πρόγραμμα θα καθυστερούσε σε τεράστιο βαθμό να ολοκληρωθεί. + +\section{Απαιτήσεις από το εργαλείο} \label{toolRequirements} + +Κατά την ανάπτυξη του εργαλείου, έγινε μια προσπάθεια να καλυφθούν ορισμένες +βασικές απαιτήσεις που θα έπρεπε να ικανοποιεί. Όπως όλα τα εργαλεία, έτσι και +αυτό έχει έναν σκοπό να εκπληρώσει. Ο σκοπός αυτός είναι η διευκόλυνση του +χρήστη ή ενός οργανισμού, στην εγκατάσταση και διαμόρφωση με αυτοματοποιημένο +τρόπο ενός ασφαλούς, κατανεμημένου περιβάλλοντος για την εγκατάσταση και +λειτουργία μιας εφαρμογής μικρο-υπηρεσιών. Για να γίνει αυτό πραγματικότητα, +πρέπει το εργαλείο να ικανοποιεί τις παρακάτω απαιτήσεις. + +\clearpage + +\subsection{Λειτουργικές απαιτήσεις} + +\begin{itemize} + + \item \textbf{Το εργαλείο πρέπει να υποστηρίζει την χρήση των 3 μεγαλύτερων + ονομάτων στον κλάδο της νεφο-υπολογιστικής} + + \item \textbf{Το εργαλείο πρέπει να υποστηρίζει την χρήση των 6 + δημοφιλέστερων διανομών για περιβάλλον διακομιστή} + + \item \textbf{Το εργαλείο πρέπει να λειτουργεί μέσω της γραμμής εντολών + ώστε να μπορεί να αυτοματοποιηθεί περαιτέρω η εκτέλεση των εντολών του} + + \item \textbf{Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την + λειτουργία εμφάνισης λίστας των διαθέσιμων μεγεθών εικονικής μηχανής} + + \item \textbf{Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την + λειτουργία εμφάνισης λίστας των διαθέσιμων τοποθεσιών} + + \item \textbf{Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την + λειτουργία εμφάνισης λίστας των διαθέσιμων διανομών} + + \item \textbf{Το εργαλείο πρέπει για κάθε εντολή που επιδέχεται + παραμέτρους, να ρωτάει τον χρήστη για κάθε παράμετρο που δεν δόθηκε} + + \item \textbf{Το εργαλείο πρέπει να ελέγχει την εγκυρότητα κάθε παραμέτρου + που δίνεται από τον χρήστη} + + \item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία δημιουργίας + εικονικής μηχανής} + + \item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία παύσης + εικονικής μηχανής} + + \item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία εκκίνησης + εικονικής μηχανής} + + \item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία + επανεκκίνησης εικονικής μηχανής} + + \item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία διαγραφής + εικονικής μηχανής} + + \item \textbf{Το εργαλείο πρέπει να υποστηρίζει την σύνδεση με ssh ακόμα + και χωρίς να διαθέτει ο χρήστης πρόγραμμα ssh} + + \item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία εμφάνισης + όλων των εικονικών μηχανών που διαχειρίζεται} + + \item \textbf{Το εργαλείο πρέπει να εμφανίζει μηνύματα λάθους σε περίπτωση + που κάτι πάει στραβά κατά την εκτέλεση} + + \item \textbf{το εργαλείο πρέπει να υποστηρίζει την διαδραστική διαμόρφωση + του αρχείου ρυθμίσεων του} + + \item \textbf{Το εργαλείο πρέπει να υποστηρίζει την εκτέλεση εξωτερικού + εκτελέσιμου αρχείου στις εικονικές μηχανές με σκοπό την σκλήρυνσή τους} + + \item \textbf{Το εργαλείο πρέπει να υποστηρίζει την εγκατάσταση δοχείων + στις εικονικές μηχανές που δημιουργεί, κατά την διάρκεια της + σκλήρυνσής τους, μέσω ενός αρχείου docker-compose.yml που θα + βρίσκεται στον ίδιο φάκελο με το εκτελέσιμο αρχείο} + + \item \textbf{Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης όλων των + διαθέσιμων εντολών του} + + \item \textbf{Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης + συμπλήρωσης εντολών και για τα 3 πιο δημοφιλή κελύφη εντολών} + + \item \textbf{Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης της + έκδοσης του} + + \item \textbf{Το εργαλείο πρέπει να διαθέτει παράμετρο για την προσπέραση + του βήματος επιβεβαίωσης κατά την δημιουργία εικονικών μηχανών} + + \item \textbf{Το εργαλείο πρέπει να διαθέτει μηχανισμό συγκεκριμενοποίησης + περιοχής για τον πάροχο AWS} + + \item \textbf{Το εργαλείο πρέπει να διαθέτει μηχανισμό επιλογής θύρας για + την λειτουργία σύνδεσης μέσω ssh} + + \item \textbf{Το εργαλείο πρέπει να υποστηρίζει την αρχικοποίηση μονάχα + ενός παρόχου δίχως την συμπλήρωση από τον χρήστη κενών πεδίων για + τους υπόλοιπους} + +\end{itemize} + +\clearpage + +\subsection{Μη λειτουργικές απαιτήσεις} + +\begin{itemize} + + \item \textbf{Το εργαλείο πρέπει να είναι εύκολο στην χρήση για έναν χρήστη + που έχει χρησιμοποιήσει προγράμματα γραμμής εντολών στο παρελθόν} + + \item \textbf{Το εργαλείο πρέπει να δημιουργεί ξεχωριστό αρχείο για τις + ρυθμίσεις του στον ίδιο φάκελο που βρίσκεται και το εκτελέσιμο αρχείο} + + \item \textbf{Το εργαλείο πρέπει να κρατάει αρχείο των διευθύνσεων + IP των εικονικών μηχανών που δημιουργεί ώστε να μπορούν να + διαμορφωθούν περαιτέρω εάν ο χρήστης επιθυμεί να + χρησιμοποιήσει άλλα προγράμματα όπως το Ansible} + + \item \textbf{Το εργαλείο πρέπει να διαθέτει ένα μοτίβο εντολών που + να μπορεί ο χρήστης να καταλαβαίνει και να διαμορφώνει ανάλογα + τις ανάγκες του} + + \item \textbf{Το εργαλείο πρέπει να δημιουργεί κλειδιά ssh σε + περίπτωση που δεν υπάρχουν, στον ίδιο φάκελο με το εκτελέσιμο + αρχείο του} + + \item \textbf{Το δεύτερο εκτελέσιμο αρχείο του εργαλείου πρέπει να + εγκαθιστά και να σκληραίνει και το Docker πέρα από το + λειτουργικό σύστημα} + + \item \textbf{Το δεύτερο εκτελέσιμο αρχείο του εργαλείου πρέπει να + δημιουργεί στην εικονική μηχανή δύο επιπλέον εκτελέσιμα + αρχεία για περιοδική ενημέρωση των πακέτων και κλείσιμο + αχρησιμοποίητων θυρών} + + \item \textbf{Το δεύτερο εκτελέσιμο αρχείο του εργαλείου πρέπει να + εγκαθιστά προγράμματα για την περαιτέρω σκλήρυνση του Docker και την + διευκόλυνση του χρήστη κατά την εγκατάσταση δοχείων} + +\end{itemize} + +\clearpage + +\begin{landscape} +\thispagestyle{empty} + +\section{Διαγραμματική Μοντελοποίηση} \label{designModels} + +Οι παραπάνω απαιτήσεις και ο τρόπος λειτουργίας του εργαλείου, μεταφράζονται +καλύτερα στον χρήστη μέσω ενός σχεδιαγράμματος περίπτωσης χρήσης. Το σχήμα +\ref{fig:useCaseDiagram} δημιουργήθηκε με την βοήθεια του εργαλείου +\textquote{yuml} \footfullcite{yuml}. Επιπλέον, με το εργαλείο +\textquote{mermaid} \footfullcite{mermaid}, δημιουργήθηκε ένα διάγραμμα ροής +για το SecDep που απεικονίζεται στο σχήμα \ref{fig:flowchartDiagram}. Το +διάγραμμα αυτό, απεικονίζει την ροή των εντολών που μπορεί να επιλεγούν από τον +χρήστη κατά την εκτέλεση του προγράμματος. + +\begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = 1.0\textwidth]{Figures/Diagrams/secdep-use-case-diagram.jpg} + \captionof{figure}{Διάγραμμα περιπτώσεων χρήσης} + \label{fig:useCaseDiagram} + \end{figure} +\vspace*{-30pt} +\end{center} + +\end{landscape} + +\clearpage + +\begin{landscape} +\thispagestyle{empty} + +\begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = 1.0\textwidth]{Figures/Diagrams/secdep-flowchart-diagram.png} + \captionof{figure}{Διάγραμμα ροής} + \label{fig:flowchartDiagram} + \end{figure} +\vspace*{-30pt} +\end{center} + +\end{landscape} + +Ουσιαστικά, κατά την πραγματική χρήση του SecDep υπάρχουν πάντοτε δύο οντότητες +που αλληλεπιδρούν μεταξύ τους. Ο χρήστης και ο πάροχος νέφους. Ο χρήστης μπορεί +να ζητήσει πληροφορίες για διαθέσιμους πόρους όπως οι εικονικές του μηχανές ή +τα συστατικά που έχει στην διάθεση του για την δημιουργία τους όπως οι +διανομές, τα μεγέθη και οι τοποθεσίες τους. Αυτή η αλληλεπίδραση μεταξύ του +χρήστη και του παρόχου νέφους, απεικονίζεται στο σχήμα +\ref{fig:sequenceDiagram}, το οποίο δημιουργήθηκε με το εργαλείο mermaid. + +\begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = .9\textwidth]{Figures/Diagrams/secdep-sequence-diagram.png} + \captionof{figure}{Διάγραμμα αλληλεπίδρασης χρήστη - παρόχου νέφους} + \label{fig:sequenceDiagram} + \end{figure} +\vspace*{-30pt} +\end{center} + +\begin{landscape} +\thispagestyle{empty} + +Mε το \textquote{code2flow} \footfullcite{code2flow} δημιουργήθηκε ένα +διάγραμμα που απεικονίζει τις κλήσεις συναρτήσεων που γίνονται κατά την +εκτέλεση του αρχείου secdep.py. Παράλληλα, το ίδιο αποτέλεσμα επιτεύχθηκε για +το αρχείο harden με την βοήθεια του \textquote{callGraph} +\footfullcite{callGraph}. Τα παραπάνω απεικονίζονται στα σχήματα +\ref{fig:secdepFunctionCallDiagram} και \ref{fig:hardenFunctionCallDiagram} +αντίστοιχα. + +\begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = 1.1\textwidth]{Figures/Diagrams/secdep-function-relationships.png} + \captionof{figure}{Διάγραμμα κλήσεων συναρτήσεων του secdep.py} + \label{fig:secdepFunctionCallDiagram} + \end{figure} +\vspace*{-30pt} +\end{center} + +\end{landscape} + +\begin{landscape} +\thispagestyle{empty} + +\begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = 1.1\textwidth]{Figures/Diagrams/harden-function-relationships.png} + \captionof{figure}{Διάγραμμα κλήσεων συναρτήσεων του harden} + \label{fig:hardenFunctionCallDiagram} + \end{figure} +\vspace*{-30pt} +\end{center} + +\end{landscape} + +Επιπλέον, ένας χάρτης των σημαντικών εξαρτήσεων του secdep.py δημιουργήθηκε με +την βοήθεια του \textquote{pydeps} \footfullcite{pydeps}. Αυτό έγινε με την +εκτέλεση της παρακάτω εντολής: + +\begin{listing}[!ht] +\begin{bashcode} +pydeps -T png --cluster --include-missing --max-bacon=1 --noshow --reverse --rankdir RL -o secdep-module-dependencies-organized.png secdep.py +\end{bashcode} +\caption{Εντολή δημιουργίας χάρτη εξαρτήσεων του secdep.py} +\label{lst:secdepModuleDependencies} +\vspace*{-10pt} +\end{listing} + +\begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = .9\textwidth]{Figures/Diagrams/secdep-module-dependencies-organized.png} + \captionof{figure}{Διάγραμμα σημαντικών εξαρτήσεων του secdep.py} + \label{fig:secdepModules} + \end{figure} +\vspace*{-30pt} +\end{center} + +\clearpage + +\section{Αρχιτεκτονική} \label{architecture} + +Οι διαθέσιμες συναρτήσεις και μεταβλητές του secdep.py, απεικονίζονται στα +σχήματα \ref{fig:secdepFunctions} και \ref{fig:secdepVariables} αντίστοιχα. Η +δημιουργία τους πραγματοποιήθηκε με το εργαλείο \textquote{doxygen} +\footfullcite{doxygen}. + +\begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = .9\textwidth]{Figures/doxygen/secdepFunctions.png} + \captionof{figure}{Συναρτήσεις του secdep.py} + \label{fig:secdepFunctions} + \end{figure} +\vspace*{-30pt} +\end{center} + +\begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = .9\textwidth]{Figures/doxygen/secdepVariables.png} + \captionof{figure}{Μεταβλητές του secdep.py} + \label{fig:secdepVariables} + \end{figure} +\vspace*{-30pt} +\end{center} + +\clearpage + +Το SecDep αποτελείται από δύο εκτελέσιμα αρχεία. Το πρώτο αρχείο, το secdep.py, +είναι το κύριο αρχείο του προγράμματος. Αυτό το αρχείο είναι υπεύθυνο για την +επικοινωνία με τους παρόχους νέφους και την διαχείριση των εικονικών μηχανών. +Το δεύτερο αρχείο, το \textquote{harden}, είναι υπεύθυνο για την σκλήρυνση των +εικονικών μηχανών και την εγκατάσταση/σκλήρυνση του Docker. Το harden, +εκτελείται μόνο στις εικονικές μηχανές κατά την δημιουργία τους και μόνο εάν ο +χρήστης το επιθυμεί. + +Οι βασικότερες συναρτήσεις του secdep.py είναι οι εξής: + +\begin{itemize} + + \item \textbf{create\_node}: + + Η συνάρτηση \textquote{create\_node}, είναι αυτή που δημιουργεί τις + εικονικές μηχανές λαμβάνοντας ή ζητώντας από τον χρήστη τις κατάλληλες + παραμέτρους. Οι βασικές παράμετροι που μπορεί να λάβει είναι: + + \begin{itemize} + + \item \textbf{provider} + \item \textbf{name} + \item \textbf{location} + \item \textbf{size} + \item \textbf{image} + + \item \textbf{confirm}: Για επιβεβαίωση της δημιουργίας της + εικονικής μηχανής χωρίς να χρειαστεί η επιβεβαίωση του χρήστη. + \item \textbf{deploy}: Για την εκτέλεση του harden. + + \end{itemize} + + \item \textbf{node\_action}: + + Η συνάρτηση \textquote{node\_action}, είναι αυτή που εκτελεί τις + ενέργειες πάνω στις εικονικές μηχανές. Στις ενέργειες αυτές περιλαμβάνονται: + + \begin{itemize} + + \item \textbf{start} + \item \textbf{stop} + \item \textbf{reboot} + \item \textbf{delete} + + \end{itemize} + +\clearpage + + \item \textbf{list\_all\_nodes}: Η συνάρτηση \textquote{list\_all\_nodes}, + είναι αυτή που εμφανίζει τις εικονικές μηχανές που διαχειρίζεται το + SecDep. Χωρίς παραμέτρους θα εμφάνιζε όλες τις εικονικές μηχανές από + όλους τους παρόχους. Επειδή όμως δεν είναι πάντοτε απαραίτητο να + εμφανίζονται όλες οι εικονικές μηχανές, ο χρήστης μπορεί να δώσει τις + παρακάτω παραμέτρους: + + \begin{itemize} + + \item \textbf{provider} + + \item \textbf{filterIn}: Χρησιμοποιείται για το φιλτράρισμα της + λίστας κατά την χρήση της συνάρτησης \textquote{node\_action}. + + \item \textbf{awsRegion}: Μόνο για τον πάροχο AWS. Χρησιμοποιείται + για την επιλογή της περιοχής. Δίχως την παράμετρο αυτή, θα + γινόταν έρευνα για εικονικές μηχανές σε όλες τις περιοχές. Κάτι + που θα έκανε την εκτέλεση της εντολής πολύ αργή, ειδικά εάν ο + χρήστης γνωρίζει πως χρησιμοποιεί μονάχα μια περιοχή. + + \end{itemize} + +\end{itemize} + +Το αρχείο harden, αποτελείται από πολλές συναρτήσεις που εκτελούνται με την +σειρά προκειμένου να ασφαλιστεί το σύστημα στο οποίο εκτελείται. Οι πιο +αξιοσημείωτες από αυτές είναι: + +\begin{itemize} + + \item \textbf{hardenSSH}: + + Η συνάρτηση υπεύθυνη για την σκλήρυνση του SSH. + + \item \textbf{dockerInit}: + + Η συνάρτηση υπεύθυνση για την εγκατάσταση/σκλήρυνση του Docker. + + \item \textbf{kernelSecurityModuleInit}: + + Η συνάρτηση υπεύθυνη για την εγκατάσταση/ρύθμιση του κατάλληλου για την + διανομή kernel security module. + + \item \textbf{configureFail2ban}: Αφότου έχει προηγηθεί η εγκατάσταση του + κατάλληλου για την διανομή προγράμματος firewall, η συνάρτηση αυτή + ρυθμίζει το fail2ban για την προστασία από επιθέσεις brute force. + +\end{itemize} diff --git a/Chapters/5.ProjectShowcase.tex b/Chapters/5.ProjectShowcase.tex index 2e2a965..729d30d 100644 --- a/Chapters/5.ProjectShowcase.tex +++ b/Chapters/5.ProjectShowcase.tex @@ -1,3 +1,364 @@ \chapter{Εγκατάσταση \& Επίδειξη του εργαλείου SecDep} \label{installationANDShowcase} -\section{Υλοποίηση και Συστατικά Μέρη} \label{platform} +\noindent Στην παρούσα ενότητα θα παρουσιαστεί η διαδικασία εγκατάστασης του +εργαλείου SecDep, καθώς και η ρύθμισή του για την χρήση των υποδομών νέφους της +Amazon. Μετά την ολοκλήρωση των παραπάνω διαδικασιών θα πραγματοποιηθεί +επίδειξη της λειτουργίας του με βάση ορισμένα σενάρια χρήσης. + +\section{Εγκατάσταση του πηγαίου κώδικα του SecDep} + +Για την εγκατάσταση του πηγαίου κώδικα του SecDep απαιτείται η χρήση του +προγράμματος git ή η πρόσβαση σε έναν φυλλομετρητή. Στην περίπτωση που ο +χρήστης δεν έχει εγκατεστημένο το git, πρέπει να μεταβεί στην ιστοσελίδα του +αποθετηρίου \footfullcite{secdep} και να επιλέξει είτε την επιλογή αποθήκευσης +ως αρχείο zip, είτε ως tar.gz όπως απεικονίζεται παρακάτω. Έπειτα, πρέπει να +αποσυμπιεστεί με τα κατάλληλα για τον τύπο αρχείου προγράμματα. + +\begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = .8\textwidth]{Figures/Installation/secdep_install_without_git.png} + \captionof{figure}{Αποθήκευση του πηγαίου κώδικα του SecDep ως αρχείο} + \label{fig:secdep_install_without_git} + \end{figure} +\vspace*{-30pt} +\end{center} + +\clearpage + +Η πιο εύκολη μέθοδος για την εγκατάσταση του SecDep είναι η χρήση του git η +οποία απαιτεί μονάχα την εκτέλεση της παρακάτω εντολής. + +\begin{listing}[!ht] +\begin{bashcode} +git clone https://git.konsthol.eu/konsthol/SecDep.git +\end{bashcode} +\caption{Εγκατάσταση του SecDep με την χρήση του git} +\label{lst:secdep_install_with_git} +\vspace*{-10pt} +\end{listing} + +\subsection{Εγκατάσταση των απαιτούμενων εξαρτήσεων} + +Μετά την ολοκλήρωση της εγκατάστασης του πηγαίου κώδικα του SecDep, αφού ο +χρήστης μεταβεί στον φάκελο με τα περιεχόμενα που απεικονίζονται στο σχήμα +\ref{fig:secdep_install_without_git}, επιβάλλεται να γίνει χρήση του +προγράμματος pip \footfullcite{pip} για την εγκατάσταση των βιβλιοθηκών που +απαιτούνται για την λειτουργία του εργαλείου. Αυτό επιτυγχάνεται με την +εκτέλεση της παρακάτω εντολής. + +\begin{listing}[!ht] +\begin{bashcode} +pip install -r requirements.txt +\end{bashcode} +\caption{Εγκατάσταση των απαιτούμενων βιβλιοθηκών για την λειτουργία του SecDep} +\label{lst:secdep_install_requirements} +\vspace*{-10pt} +\end{listing} + +Στην περίπτωση που η παραπάνω εντολή αποτύχει λόγω πρόσφατων τροποποιήσεων στις +τελευταίες εκδόσεις του pip, η εντολή πρέπει να μετατραπεί στην παρακάτω. + +\begin{listing}[!ht] +\begin{bashcode} +pip install -r requirements.txt --break-system-packages +\end{bashcode} +\caption{Εξαναγκασμένη μορφή της εντολής εγκατάστασης εξαρτήσεων του SecDep} +\label{lst:focre_secdep_install_requirements} +\vspace*{-10pt} +\end{listing} + +\section{Ρύθμιση του SecDep} + +Αφού έχει ολοκληρωθεί η εγκατάσταση των απαιτούμενων εξαρτήσεων, ο χρήστης +πρέπει να δώσει στο εργαλείο τα απαραίτητα διαπιστευτήρια για την χρήση των +υποδομών νέφους της επιλογής του. Ενώ υποστηρίζονται και οι τρεις μεγαλύτεροι +πάροχοι υπηρεσιών IaaS, επιλέχθηκε για την παρούσα ενότητα η κάλυψη της χρήσης +των υπηρεσιών της Amazon έναντι της Azure και της GCE, λόγω της ευκολότερης και +απλούστερης διαδικασίας αυθεντικοποίησης που παρέχει. Συγκεκριμένα, απαιτεί την +συμπλήρωση μονάχα δύο πεδίων. Αυτά είναι, το +\textquote{SECDEP\_AWS\_ACCESS\_KEY} και \textquote{SECDEP\_AWS\_SECRET\_KEY}. + +\subsection{Δημιουργία κλειδιού πρόσβασης με την AWS} + +Για την απόκτηση των παραπάνω διαπιστευτηρίων, ο χρήστης πρέπει να επισκεφθεί +την ιστοσελίδα διαχείρισης του λογαριασμού που έχει δημιουργήσει με την AWS και +να μεταβεί στην ενότητα IAM (Identity and Access Management) προκειμένου να +δημιουργήσει ένα κλειδί πρόσβασης. Αυτό απεικονίζεται ως εξής: + +\begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = .6\textwidth]{Figures/AWS_setup/go_to_iam.png} + \captionof{figure}{Μετάβαση στην ενότητα IAM της AWS} + \label{fig:go_to_iam} + \end{figure} +\vspace*{-30pt} +\end{center} + +Έπειτα, πρέπει να εισέλθει στην ενότητα \textquote{Manage Access Keys} και να +δημιουργήσει ένα νέο κλειδί πρόσβασης όπως φαίνεται παρακάτω: + +\begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = .6\textwidth]{Figures/AWS_setup/create_access_key.png} + \captionof{figure}{Δημιουργία νέου κλειδιού πρόσβασης} + \label{fig:create_access_key} + \end{figure} +\vspace*{-30pt} +\end{center} + +\clearpage + +Η αντιστοιχία των απαιτούμενων πεδίων με το κλειδί πρόσβασης που δημιουργήθηκε +είναι η εξής: + +\begin{savenotes} +\selectfont +\begin{table}[!ht] +\caption{Αντιστοιχία των πεδίων του SecDep με το κλειδί πρόσβασης της AWS} +\renewcommand{\arraystretch}{1.5} +\centering +\newcolumntype{C}{>{\centering\arraybackslash}m{7cm}} +\textgreek{\begin{tabular}{||C|C||} +\hline + +Μεταβλητή του SecDep & Αντιστοιχία \\ [0.5ex] + +\hline\hline + +SECDEP\_AWS\_ACCESS\_KEY & Το αναγνωριστικό του κλειδιού \\ + +\hline + +SECDEP\_AWS\_SECRET\_KEY & Το περιεχόμενο του κλειδιού \\ + +\hline +\end{tabular}} +\label{table:} +\renewcommand{\arraystretch}{1} +\end{table} +\end{savenotes} + +\subsection{Αντιστοίχιση των πεδίων του SecDep με το κλειδί πρόσβασης της AWS} + +Μετά το πέρας της δημιουργίας του κλειδιού πρόσβασης, ο χρήστης πρέπει να +αρχικοποιήσει τις μεταβλητές του SecDep με τις τιμές που αντιστοιχούν στην κάθε +μια. Υπάρχουν πολλοί τρόποι για την επίτευξη αυτού του σκοπού. Στην προκειμένη +περίπτωση που θα γίνει χρήση ενός μονάχα παρόχου, αρκεί η εκτέλεση της παρακάτω +εντολής: + +\begin{listing}[!ht] +\begin{bashcode} +python3 secdep.py --init aws +\end{bashcode} +\caption{Αρχικοποίηση των μεταβλητών του SecDep για την χρήση της AWS} +\label{lst:secdep_init_aws} +\vspace*{-10pt} +\end{listing} + +Όπου και θα ζητηθούν από τον χρήστη τα αντίστοιχα διαπιστευτήρια. Οι μεταβλητές +αυτές θα αποθηκευτούν στο αρχείο \textquote{.env} που θα δημιουργηθεί στον +φάκελο που βρίσκεται το εκτελέσιμο του SecDep. Στην περίπτωση που ο χρήστης +μελλοντικά θέλει να αλλάξει τις τιμές των μεταβλητών ή να προσθέσει νέες, +μπορεί να το κάνει αλλάζοντας τα περιεχόμενα του αρχείου \textquote{.env} +χειροκίνητα ή με την εκτέλεση της εντολής: + +\begin{listing}[!ht] +\begin{bashcode} +python3 secdep.py --edit +\end{bashcode} +\caption{Επεξεργασία των μεταβλητών του SecDep} +\label{lst:secdep_edit} +\vspace*{-10pt} +\end{listing} + +Η εντολή αυτή θα προτρέψει τον χρήστη να επιλέξει ποια μεταβλητή να αλλάξει και +θα αναγράφει την προηγούμενη τιμή της ώστε να γίνεται ευδιάκριτη η αλλαγή. + +\clearpage + +\section{Επίδειξη του SecDep} + +Ανά πάσα στιγμή, ο χρήστης μπορεί να εκτελέσει την παρακάτω εντολή για να λάβει +πληροφορίες σχετικά με τις διαθέσιμες παραμέτρους: + +\begin{listing}[!ht] +\begin{bashcode} +python3 secdep.py --help +\end{bashcode} +\caption{Εκτέλεση της παραμέτρου help του SecDep} +\label{lst:secdep_help} +\vspace*{-10pt} +\end{listing} + +Σχετικά με την δημιουργία εικονικών μηχανών, που είναι και μια από τις βασικές +λειτουργίες του SecDep, ο χρήστης μπορεί να εκτελέσει την παρακάτω εντολή για +να δημιουργήσει μια εικονική μηχανή με λειτουργικό σύστημα Debian 11 στην +περιοχή eu-north-1 με μέγεθος t3.micro (διαθέσιμο για χρήστες εντός της δωρεάν +δοκιμαστικής περιόδου ενός χρόνου): + +\begin{listing}[!ht] +\begin{bashcode} +python3 secdep.py --provider aws --create --name test-node --size t3.micro --image ami-08869bacfa1188ec9 +\end{bashcode} +\caption{Εκτέλεση της παραμέτρου create του SecDep} +\label{lst:secdep_create} +\vspace*{-10pt} +\end{listing} + +Μετά την δημιουργία της εικονικής μηχανής, επιστρέφεται στον χρήση η διεύθυνση +IP της και η εντολή που μπορεί να εκτελέσει προκειμένου να συνδεθεί σε αυτήν +χρησιμοποιώντας το πρωτόκολλο SSH. Η εντολή αυτή σχηματίζεται δυναμικά από το +εργαλείο λαμβάνοντας υπόψιν την θύρα που θα χρησιμοποιηθεί (σε περίπτωση που η +εικονική μηχανή έχει σκληρυνθεί), το μονοπάτι μέχρι το κλειδί SSH που +δημιουργήθηκε μαζί με την μηχανή στον ίδιο φάκελο με το εργαλείο και την +διεύθυνση της. + +Εάν ο χρήστης δεν διαθέτει πρόγραμμα ικανό να συνδεθεί μέσω SSH σε έναν +απομακρυσμένο διακομιστή, υποστηρίζεται και η παράμετρος \textquote{--ssh}. + +Χωρίς την παράμετρο \textquote{--yes}, θα ζητηθεί από τον χρήστη να +επιβεβαιώσει την δημιουργία της εικονικής μηχανής παρέχοντας πληροφορίες +σχετικά με τις επιλογές του. + +Με την προσθήκη της παραμέτρου \textquote{--deploy}, θα εκτελεστεί η ίδια +διαδικασία αλλά με την διαφορά πως θα πραγματοποιηθεί εκτέλεση και του αρχείου +harden στην εικονική μηχανή το οποίο θα σκληρύνει το λειτουργικό της σύστημα +και θα εγκαταστήσει την μηχανή δοχείων Docker την οποία επίσης θα σκληρύνει. + +\clearpage + +Το αποτέλεσμα μετά την δημιουργία εικονικής μηχανής με την παράμετρο για +σκλήρυνση απεικονίζεται ως: + +\begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = .8\textwidth]{Figures/AWS_hardened/aws-hardened.png} + \captionof{figure}{Δημιουργία εικονικής μηχανής με παράμετρο για σκλήρυνση} + \label{fig:aws_hardened} + \end{figure} +\vspace*{-30pt} +\end{center} + +Με μια ακόμα προσθήκη παραμέτρου, συγκεκριμένα της +\textquote{--docker\_compose}, θα εκτελεστεί στην εικονική μηχανή και ένα +αρχείο docker-compose.yml που θα πρέπει ο χρήστης να έχει μεταφέρει στον ίδιο +φάκελο με το εργαλείο. + +Για οποιαδήποτε παράμετρο που δεν έχει δοθεί ή έχει δοθεί λανθασμένα, θα +προτρέπεται ο χρήστης να την δώσει ξανά εως ότου ολοκληρωθεί η διαδικασία ή +ακυρωθεί από τον χρήστη. + +Εάν ο χρήστης δεν γνωρίζει τις διαθέσιμες επιλογές για τις παραμέτρους που +εισάγει, υποστηρίζονται ξεχωριστές εντολές που ακολουθούν παρόμοιο μοτίβο για +την κάθε μια. Παραδείγματα εντολών που υποστηρίζονται είναι οι παρακάτω: + +\begin{listing}[!ht] +\begin{bashcode} +python3 secdep.py --provider aws --listimages --print +\end{bashcode} +\caption{Εκτέλεση της παραμέτρου listimages του SecDep} +\label{lst:secdep-listimages} +\vspace*{-10pt} +\end{listing} + +Το αποτέλεσμα της εντολής \ref{lst:secdep-listimages} είναι να εμφανιστεί μια +λίστα με τις διαθέσιμες εικόνες που μπορεί να χρησιμοποιήσει ο χρήστης για την +δημιουργία εικονικών μηχανών. Έπειτα, με την επιλογή μιας από αυτές, θα +εμφανιστούν πληροφορίες σχετικά με την εικόνα που επιλέχθηκε οι οποίες θα είναι +της μορφής: + +\begin{listing}[!ht] +\begin{bashcode} + +\end{bashcode} +\caption{Πληροφορίες σχετικά με την εικόνα που επιλέχθηκε} +\label{lst:secdep_image_info} +\vspace*{-10pt} +\end{listing} + +Από την παραπάνω πληροφορία, ο χρήστης χρειάζεται το αναγνωριστικό (id) της εικόνας. + +Εάν χρειάζεται πληροφορίες σχετικά με τα διαθέσιμα μεγέθη των εικονικών +μηχανών, αυτό επιτυγχάνεται με την εντολή: + +\begin{listing}[!ht] +\begin{bashcode} +python3 secdep.py --provider aws --listsizes --print +\end{bashcode} +\caption{Εκτέλεση της παραμέτρου listsizes του SecDep} +\label{lst:secdep_listsizes} +\vspace*{-10pt} +\end{listing} + +Η διαδικασία επιλογής του μεγέθους είναι παρόμοια με την επιλογή της εικόνας, +ενώ το αποτέλεσμα είναι της μορφής: + +\begin{listing}[!ht] +\begin{bashcode} + +\end{bashcode} +\caption{Πληροφορίες σχετικά με το μέγεθος που επιλέχθηκε} +\label{lst:secdep_size_info} +\vspace*{-10pt} +\end{listing} + +Από την παραπάνω πληροφορία, το σημαντικό είναι το αναγνωριστικό (id) του μεγέθους. + +Μερικές από τις εντολές που δύναται να χρησιμοποιεί ένας χρήστης συχνά μπορεί +να είναι για την διαγραφή εικονικών μηχανών ή την εμφάνιση τους. Αυτές οι δύο +λειτουργίες υποστηρίζονται με τις παρακάτω εντολές: + +\begin{listing}[!ht] +\begin{bashcode} +python3 secdep.py --provider aws --awsregion us-east-2 --list +\end{bashcode} +\caption{Εκτέλεση της παραμέτρου list του SecDep} +\label{lst:secdep_list} +\vspace*{-10pt} +\end{listing} + +\clearpage + +Το αποτέλεσμα της παραπάνω εντολής μπορεί να απεικονίζεται ως εξής: + +\begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = .8\textwidth]{Figures/AWS_listing/aws-instances.png} + \captionof{figure}{Λίστα με τις εικονικές μηχανές που έχουν δημιουργηθεί} + \label{fig:instance_list_output} + \end{figure} +\vspace*{-30pt} +\end{center} + +Η παράμετρος \textquote{--awsregion} είναι προαιρετική και χρησιμοποιείται +αποκλειστικά για την Amazon. Η παράλειψη της θα είχε ως αποτέλεσμα να γίνει +έρευνα σε όλες τις διαθέσιμες περιοχές. Γεγονός που ενδεχομένως να αποτελούσε +σπατάλη χρόνου. + +Με την παρακάτω εντολή, ο χρήστης λαμβάνει μια λίστα με τις διαθέσιμες +εικονικές μηχανές του παρόχου Amazon που έχουν δημιουργηθεί στην περιοχή +\textquote{eu-north-1} και επιλέγει μια από αυτές για να διαγραφεί. Μετά από +επιτυχή διαγραφή, λαμβάνει επιβεβαίωση στην οθόνη του. + +\begin{listing}[!ht] +\begin{bashcode} +python3 secdep.py --provider aws --action delete --awsregion eu-north-1 +\end{bashcode} +\caption{Εκτέλεση της παράμετρου delete του SecDep} +\label{lst:secdep_delete} +\vspace*{-10pt} +\end{listing} + +Εάν ήθελε να διαγράψει όλες τις εικονικές μηχανές της περιοχής, η επιλογή της +παραμέτρου \textquote{--action}, από \textquote{delete} θα έπρεπε να +αντικατασταθεί σε \textquote{deleteall}. Με παρόμοιο τρόπο υποστηρίζονται και +εντολές για εκκίνηση, επανεκκίνηση ή διακοπή εικονικών μηχανών. + +Πιο λεπτομερείς οδηγίες χρήσης και εγκατάστασης περιέχονται και στην σελίδα του +αποθετηρίου του SecDep \footfullcite{secdep} μέσω του αρχείου +\textquote{README.md}. diff --git a/Chapters/6.Experimentation.tex b/Chapters/6.Experimentation.tex index 91f7ed9..87818bc 100644 --- a/Chapters/6.Experimentation.tex +++ b/Chapters/6.Experimentation.tex @@ -1 +1,892 @@ -\chapter{Πειραματισμός \& Αποτελέσματα} \label{experimentationANDresults} +\chapter{Πειραματική Αποτίμηση Εργαλείου} \label{experimentationANDresults} + +\noindent Το εργαλείο που αναπτύχθηκε στα πλαίσια της διπλωματικής εργασίας +αυτής, έχει τρεις βασικούς στόχους. Την δημιουργία εικονικών μηχανών κατά μήκος +πολλών παρόχων νέφους, την σκλήρυνση του λειτουργικού συστήματος τους και την +σκλήρυνση της μηχανής δοχείων Docker που εγκαθιστά σε αυτές. Στην παρούσα +ενότητα θα παρουσιαστούν τα αποτελέσματα της αξιολόγησης της ασφάλειας των +εικονικών μηχανών που δημιουργήθηκαν, χρησιμοποιώντας τρία διαφορετικά εργαλεία +αξιολόγησης. Τα εργαλεία αυτά, με την σειρά που θα αναλυθούν είναι το Vuls, το +Lynis και το LUNAR. + +\section{Εργαλεία Αξιολόγησης} \label{measurementTools} + +Όλα τα εργαλεία αξιολόγησης που χρησιμοποιήθηκαν στην παρούσα εργασία, είναι +εργαλεία ανοιχτού κώδικα και διατίθενται δωρεάν στο κοινό. Τα εργαλεία αυτά +επιλέχθηκαν με βάση την δημοτικότητα τους, την ευκολία εγκατάστασης και χρήσης +τους και την ποικιλία των ελέγχων που πραγματοποιούν. Στην συνέχεια θα +παρουσιαστούν τα εργαλεία αυτά και ο τρόπος με τον οποίο χρησιμοποιήθηκαν. + +\subsection{Vuls: VULnerability Scanner} \label{vuls} + +Το Vuls \footfullcite{vuls} είναι ένα εργαλείο ανοιχτού κώδικα, το οποίο +αναπτύχθηκε από την Future Corp χρησιμοποιώντας την γλώσσα προγραμματισμού Go. +Πρόκειται για ένα εργαλείο αξιολόγησης ασφάλειας, το οποίο είναι σε θέση να +εντοπίσει ευπάθειες σε τοπικούς ή και απομακρυσμένους διακομιστές +χρησιμοποιώντας δεδομένα από πολλές διαφορετικές πηγές. Με βάση την σελίδα του +στο GitHub \footfullcite{vulsGithubPage}, στις πηγές αυτές περιλαμβάνονται: + +\begin{itemize} + + \item \textbf{NVD (National Vulnerability Database)} + + \item \textbf{τα αρχεία ορισμού OVAL (Open Vulnerability and Assessment Language)} + που διατίθενται από τις διανομές Linux + +\clearpage + + \item \textbf{Συμβουλευτικές πηγές ασφαλείας} + + \begin{itemize} + + \item \textbf{Alpine-secdb} + \item \textbf{Red Hat Security Advisories} + \item \textbf{Debian Security Bug Tracker} + \item \textbf{Ubuntu CVE Tracker} + \item \textbf{Microsoft CVRF} + + \end{itemize} + + \item \textbf{Πηγές με PoC (Proof of Concept) εκμετάλλευσης ευπαθειών} + + \begin{itemize} + + \item \textbf{Exploit Database} + \item \textbf{Metasploit-Framework modules} + + \end{itemize} + + \item \textbf{CERT (Computer Emergency Readiness Team)} + + \item \textbf{CISA (Cybersecurity \& Infrastructure Security Agency)} + + \item \textbf{Cyber Threat Intelligence(MITRE ATT\&CK and CAPEC)} + + \item \textbf{Βιβλιοθήκες ευπαθειών όπως αυτή της Aquasecurity} + +\end{itemize} + +Ο χρήστης του εργαλείου απαιτείται να έχει εγκατεστημένο το Vuls σε έναν +υπολογιστή και να έχει αποθηκεύσει βάσει των οδηγιών εγκατάστασης, τα δεδομένα +των πηγών που θα χρησιμοποιηθούν. Έπειτα σε ένα αρχείο toml ρυθμίζονται τα +διαπιστευτήρια των διακομιστών που θα αξιολογηθούν διότι η απομακρυσμένη +σύνδεση θα πραγματοποιηθεί με χρήση SSH. Υπάρχει η δυνατότητα δύο επιπέδων +αξιολόγησης. Αυτά είναι τα παρακάτω: + +\begin {itemize} + + \item \textbf{Γρήγορη σάρωση}: + + Σε αυτό το επίπεδο αξιολόγησης, το Vuls δεν απαιτεί την σύνδεση με + χρήστη διαχειριστικών δικαιωμάτων στον απομακρυσμένο διακομιστή αλλά + ούτε και την ύπαρξη πακέτων λογισμικού για την υποβοήθηση της + διαδικασίας σάρωσης. Επιπροσθέτως, επιβάλλει ελάχιστο φόρτο εργασιών + στον διακομιστή που αξιολογείται. + + \item \textbf{Εκτεταμένη σάρωση}: + + Στο δεύτερο επίπεδο αξιολόγησης, το Vuls χρειάζεται να συνδεθεί ως ένας + χρήστης ικανός να εκτελέσει εντολές διαχειριστικού επιπέδου. Η σάρωση + που πραγματοποιείται είναι πιο εκτεταμένη και περιλαμβάνει ελέγχους που + απαιτούν την ύπαρξη πακέτων λογισμικού στον απομακρυσμένο διακομιστή + όπως το lsof, debian-goodies και reboot-notifier. + +\end{itemize} + +Στο σχήμα \ref{fig:vuls-architecture}, όπως αυτό πάρθηκε από την επίσημη +ιστοσελίδα του εργαλείου, απεικονίζεται η αρχιτεκτονική του Vuls κατά την +διαδικασία σάρωσης απομακρυσμένου διακομιστή. + +\begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = \textwidth]{Figures/VULS/vuls-architecture.png} + \captionof{figure}{Αρχιτεκτονική του Vuls \cite{vulsArchitecture}} + \label{fig:vuls-architecture} + \end{figure} +\vspace*{-30pt} +\end{center} + +\clearpage + +Στο σχήμα \ref{fig:vulsScan}, το οποίο παρομοίως αποκτήθηκε από την επίσημη +σελίδα του, απεικονίζεται η διαδικασία που ακολουθείται κατά την εκτέλεση της +σάρωσης ενός συστήματος. + +\begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = \textwidth]{Figures/VULS/vuls-scan-flow-fast-root.png} + \captionof{figure}{Διαδικασία εκτεταμένης σάρωσης του Vuls \cite{vulsDeepScan}} + \label{fig:vulsScan} + \end{figure} +\vspace*{-30pt} +\end{center} + +\subsection{Lynis - Security auditing and hardening tool, for UNIX-based systems.} \label{lynis} + +Το Lynis \footfullcite{lynis} είναι το δεύτερο εργαλείο ανοιχτού κώδικα που +χρησιμοποιήθηκε για την αξιολόγηση της ασφάλειας των εικονικών μηχανών. Σε +αντίθεση με το Vuls, το Lynis εκτελείται αποκλειστικά στον απομακρυσμένο +διακομιστή. Πραγματοποιεί μια εκτενή ανάλυση του συστήματος εντοπίζοντας πιθανά +σημεία που μπορεί να αποτελέσουν σημεία εισόδου για επιτιθέμενους με βάση τις +βέλτιστες πρακτικές ασφάλειας. Έπειτα, επιστρέφει στον χρήστη μια λεπτομερή +αναφορά με τα ευρήματα του και προτάσεις για την επίλυση τους. Στο τελευταίο +κομμάτι της αναφοράς, παρέχεται και μια βαθμολογία της ασφάλειας του συστήματος +η οποία κυμαίνεται από το 0 έως το 100. Εκτελείται εύκολα σε κάθε σύστημα Linux +διότι πρόκειται για ένα απλό εκτελέσιμο αρχείο bash. + +Στο σχήμα \ref{fig:lynisScan}, απεικονίζεται ένα κομμάτι της αναφοράς που +επιστρέφει. + +\begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = \textwidth]{Figures/lynis/lynis-screenshot.png} + \captionof{figure}{Κομμάτι της αναφοράς του Lynis \cite{lynis}} + \label{fig:lynisScan} + \end{figure} +\vspace*{-30pt} +\end{center} + +\subsection{LUNAR - Lockdown UNix Auditing and Reporting} \label{lunar} + +Το τελευταίο εργαλείο αξιολόγησης που χρησιμοποιήθηκε είναι το LUNAR +\footfullcite{lunar}. Πρόκειται για ένα εκτελέσιμο αρχείο bash, το οποίο όπως +και το Lynis, εκτελείται στον διακομιστή του οποίου την ασφάλεια αξιολογεί. Ο +τρόπος λειτουργίας του είναι προσεγγίσιμος και απλός. Εκτελεί μια σειρά ελέγχων +στο σύστημα χρησιμοποιώντας το κριτήριο αναφοράς CIS, καθώς και άλλα πλαίσια +και επιστρέφει στον χρήστη μια αναφορά με τα ευρήματα του. Παρομοίως με το +Lynis, στο τέλος της αναφοράς του περιέχεται ο αριθμός των ελέγχων που +εκτελέστηκαν, σε συνδυασμό με τον αριθμό αποτυχιών και επιτυχιών τους. + +\section{Προετοιμασία περιβαλλόντων προς αξιολόγηση} \label{environtmentPreparation} + +Για την αποτίμηση της ασφάλισης του συστήματος δημιουργήθηκαν δύο εικονικές +μηχανές, χρησιμοποιώντας τον πάροχο νέφους AWS. Από αυτές, μονάχα για την +δεύτερη επιλέχθηκε η επιλογή σκλήρυνσης. Για το λειτουργικό σύστημα τους, +επιλέχθηκε το AMI με αναγνωριστικό κωδικό ami-08869bacfa1188ec9, το οποίο +αντιστοιχεί στην διανομή Debian 11 και στην περιοχή eu-north-1, η οποία +μεταφράζεται ως Europe (Stockholm). Για τα τεχνικά χαρακτηριστικά των εικονικών +μηχανών χρησιμοποιήθηκε το t3.micro με τα προνόμια της δοκιμαστικής περιόδου +ενός χρόνου που παρέχει η Amazon για νέους χρήστες. Το t3.micro υπάγεται στην +σειρά υπολογιστών γενικού σκοπού με τα εξής χαρακτηριστικά, όπως αυτά +αναφέρονται στην επίσημη ιστοσελίδα της Amazon \footfullcite{awst3micro} και +στην σελίδα του Vantage \footfullcite{vantaget3micro}: + +\begin{itemize} + + \item \textbf{Τιμή On Demand}: 0.01\$ ανά ώρα (για συστήματα Linux) + \item \textbf{Μνήμη}: 1 GiB + \item \textbf{vCPU}: 2 + \item \textbf{Μνήμη ανά vCPU}: 0.5 GiB + \item \textbf{Επεξεργαστής}: Intel Skylake E5 2686 v5 + \item \textbf{Ταχύτητα ρολογιού}: 3.1 GHz + \item \textbf{Ταχύτητα δικτύου}: 5 Gbps + \item \textbf{Αποθηκευτικός χώρος}: 30 GiB (EBS) + +\end{itemize} + +Οι εντολές που χρησιμοποιήθηκαν για την δημιουργία τους, έχουν την παρακάτω +μορφή διότι έχει εισαχθεί το εκτελέσιμο αρχείο secdep.py στο PATH του +συστήματος και έχει δηλωθεί ως alias της το secdep. Στην περίπτωση που αυτά τα +βήματα δεν έχουν ληφθεί θα πρέπει οι εντολές να είναι της μορφής: + +\begin{bashcode} +python3 secdep.py <παράμετροι χρήστη> +\end{bashcode} + +Χρησιμοποιήθηκε η εξής εντολή για την δημιουργία των εικονικής μηχανής χωρίς +σκλήρυνση λειτουργικού συστήματος: + +\begin{listing}[!ht] +\begin{bashcode} +secdep -P aws -c -n test-node -s t3.micro -i ami-08869bacfa1188ec9 --yes +\end{bashcode} +\caption{SecDep - Δημιουργία εικονικής μηχανής χωρίς σκλήρυνση συστήματος} +\label{lst:secdep-aws-creation} +\vspace*{-10pt} +\end{listing} + +Ο χρόνος εκτέλεσης της είναι κατά μέσο όρο 37 δευτερόλεπτα. + +Για την δημιουργία εικονικής μηχανής με σκλήρυνση λειτουργικού συστήματος, +εγκατάσταση και σκλήρυνση της μηχανής δοχείων Docker και εισαγωγής ενός αρχείου +docker-compose.yml που βρίσκεται στον ίδιο φάκελο με το SecDep χρησιμοποιήθηκε +η εντολή: + +\begin{listing}[!ht] +\begin{bashcode} +secdep -P aws -c -n test-node -s t3.micro -i ami-08869bacfa1188ec9 --yes --docker_compose --deploy +\end{bashcode} +\caption{SecDep - Δημιουργία εικονικής μηχανής με σκλήρυνση συστήματος} +\label{lst:secdep-aws-creation-hardened} +\vspace*{-10pt} +\end{listing} + +Η εντολή αυτή έχει χρόνο εκτέλεσης 2 λεπτά και 55 δευτερόλεπτα. + +\section{Εγκατάσταση/Χρήση των εργαλείων αξιολόγησης} \label{toolsInstallation} + +Αφότου έχουν δημιουργηθεί οι εικονικές μηχανές, μπορεί να ξεκινήσει η +διαδικασία αξιολόγησης της ασφάλειας τους. Αρχικά, θα παρουσιαστεί η διαδικασία +εγκατάστασης του κάθε εργαλείου και έπειτα θα παρουσιαστεί η διαδικασία χρήσης +τους. + +\clearpage + +\subsection{Εγκατάσταση και προετοιμασία του Vuls} \label{vulsInstallation} + +Για την εγκατάσταση του Vuls, αρκεί σε έναν υπολογιστή της επιλογής μας να +εκτελεστεί η παρακάτω εντολή, η οποία λαμβάνει το αρχείο εντολών εγκατάστασης +και το εκτελεί με το κέλυφος bash: + +\begin{listing}[!ht] +\begin{bashcode} +bash <( curl -s \ +https://raw.githubusercontent.com\ +/vulsio/vulsctl/master/install-host/install.sh ) +\end{bashcode} +\caption{Εγκατάσταση του Vuls} +\label{lst:vuls-installation} +\vspace*{-10pt} +\end{listing} + +Ορθή πρακτική θα ήταν να γίνει έλεγχος του περιεχομένου του αρχείου πριν την +εκτέλεση της εντολής αυτής για να βεβαιωθεί κανείς ότι δεν περιέχει κάποιο +κακόβουλο κώδικα. + +Στην συνέχεια, θα πρέπει να δημιουργηθεί ο φάκελος που θα περιέχει τα δεδομένα +των πηγών από όπου και θα αντλεί τις πληροφορίες ευπαθειών, καθώς και ένα +αρχείο config.toml στο οποίο θα δηλωθούν τα διαπιστευτήρια των διακομιστών που +θα αξιολογηθούν. + +Αυτό επιτυγχάνεται με τις παρακάτω εντολές: + +\begin{listing}[!ht] +\begin{bashcode} +mkdir -p /usr/share/vuls-data +\end{bashcode} +\caption{Δημιουργία φακέλου} +\label{lst:create-vuls-data-folder} +\vspace*{-10pt} +\end{listing} + +\begin{listing}[!ht] +\begin{bashcode} +cat < /usr/share/vuls-data/config.toml +[cveDict] +type = "sqlite3" +SQLite3Path = "/usr/share/vuls-data/cve.sqlite3" + +[ovalDict] +type = "sqlite3" +SQLite3Path = "/usr/share/vuls-data/oval.sqlite3" + +[gost] +type = "sqlite3" +SQLite3Path = "/usr/share/vuls-data/gost.sqlite3" + +[metasploit] +type = "sqlite3" +SQLite3Path = "/usr/share/vuls-data/go-msfdb.sqlite3" + +[servers] + +[servers.secdepawsFresh] +host = "" +port = "22" +user = "secdep" +keyPath = "<πλήρες μονοπάτι ιδιωτικού κλειδιού ssh>" +scanMode = [ "deep" ] + +[servers.secdepawsHardened] +host = "" +port = "22100" +user = "secdep" +keyPath = "<πλήρες μονοπάτι ιδιωτικού κλειδιού ssh>" +scanMode = [ "deep" ] +EOF +\end{bashcode} +\caption{Δημιουργία και αρχικοποίηση του αρχείου ρυθμίσεων του Vuls} +\label{lst:create-vuls-config-file} +\vspace*{-10pt} +\end{listing} + +\clearpage + +Για να μπορέσει ο διακομιστής στον οποίο είναι εγκατεστημένο το Vuls να +συνδεθεί στους διακομιστές της Amazon, απαιτείται η εκτέλεση δύο εντολών της +μορφής: + +\begin{listing}[!ht] +\begin{bashcode} +ssh-keyscan -H -p <θύρα ssh> >> ~/.ssh/known_hosts +\end{bashcode} +\caption{Εισαγωγή του διακομιστή της Amazon στο known\_hosts} +\label{lst:insert-host-with-ssh-keyscan} +\vspace*{-10pt} +\end{listing} + +Επιπροσθέτως, θα πρέπει να μεταφερθεί στον υπολογιστή που έχει εγκατεστημένο το +Vuls, το ιδιωτικό κλειδί του διακομιστή (ένα αρχείο ονόματι secdep), το οποίο +δημιουργείται στον ίδιο φάκελο με το εργαλείο SecDep. + +Για την αρχικοποίηση της βάσης δεδομένων ευπαθειών του Vuls, εκτελούνται με +σειρά οι εντολές: + +\begin{listing}[!ht] +\begin{bashcode} +cd /usr/share/vuls-data +\end{bashcode} +\caption{Μεταφορά στον φάκελο δεδομένων του Vuls} +\label{lst:move-to-vuls-data-folder} +\vspace*{-10pt} +\end{listing} + +\begin{listing}[!ht] +\begin{bashcode} +gost fetch debian --dbpath /usr/share/vuls-data/gost.sqlite3 +\end{bashcode} +\caption{Απόκτηση δεδομένων μέσω της εντολή gost} +\label{lst:gost-fetch} +\vspace*{-10pt} +\end{listing} + +\begin{listing}[!ht] +\begin{bashcode} +go-cve-dictionary fetch nvd --dbpath /usr/share/vuls-data/cve.sqlite3 +\end{bashcode} +\caption{Απόκτηση δεδομένων μέσω της εντολής go-cve-dictionary} +\label{lst:go-cve-dictionary-fetch} +\vspace*{-10pt} +\end{listing} + +\begin{listing}[!ht] +\begin{bashcode} +goval-dictionary fetch debian 11 --dbpath /usr/share/vuls-data/oval.sqlite3 +\end{bashcode} +\caption{Απόκτηση δεδομένων μέσω της εντολής goval-dictionary} +\label{lst:goval-dictionary-fetch} +\vspace*{-10pt} +\end{listing} + +\begin{listing}[!ht] +\begin{bashcode} +go-msfdb fetch msfdb --dbpath /usr/share/vuls-data/go-msfdb.sqlite3 +\end{bashcode} +\caption{Απόκτηση δεδομένων μέσω της εντολής go-msfdb} +\label{lst:go-msfdb-fetch} +\vspace*{-10pt} +\end{listing} + +Έπειτα, στο σύστημα του διακομιστή, πρέπει να εγκατασταθούν ορισμένα πακέτα +λογισμικού και να εισαχθεί ο χρήστης secdep στο αρχείο sudoers με το +περιεχόμενο \textquote{secdep ALL=(ALL) NOPASSWD:ALL} ώστε να εκτελεί εντολές +που απαιτούν διαχειριστικά δικαιώματα δίχως την ανάγκη εισαγωγής κωδικού. Αυτά +επιτυγχάνονται με τις παρακάτω εντολές: + +\clearpage + +\begin{listing}[!ht] +\begin{bashcode} +sudo visudo +\end{bashcode} +\caption{Άνοιγμα αρχείου sudoers} +\label{lst:open-sudoers-file} +\vspace*{-10pt} +\end{listing} + +\begin{listing}[!ht] +\begin{bashcode} +sudo apt update +\end{bashcode} +\caption{Ενημέρωση αποθετηρίων λογισμικού} +\label{lst:update-software-repositories} +\vspace*{-10pt} +\end{listing} + +\begin{listing}[!ht] +\begin{bashcode} +sudo install -y debian-goodies reboot-notifier aptitude lsof +\end{bashcode} +\caption{Εγκατάσταση πακέτων λογισμικού} +\label{lst:install-software-packages} +\vspace*{-10pt} +\end{listing} + +Για τον έλεγχο συνδεσιμότητας στους διακομιστές χρειάζεται να εκτελεστεί η +εντολή: + +\begin{listing}[!ht] +\begin{bashcode} +vuls configtest +\end{bashcode} +\caption{Έλεγχος συνδεσιμότητας του Vuls} +\label{lst:vuls-configtest} +\vspace*{-10pt} +\end{listing} + +Αφότου έχουν εκτελεστεί όλα τα παραπάνω βήματα και το αποτέλεσμα της εντολής +\ref{lst:vuls-configtest} περιλαμβάνει τα ονόματα των διακομιστών, όπως αυτά +ορίσθηκαν στο αρχείο ρυθμίσεων, ο διακομιστής είναι έτοιμος για αξιολόγηση. +Αυτό επιτυγχάνεται με την εντολή: + +\begin{listing}[!ht] +\begin{bashcode} +vuls scan <όνομα διακομιστή> +\end{bashcode} +\caption{Εκκίνηση αξιολόγησης μέσω του Vuls} +\label{lst:vuls-scan} +\vspace*{-10pt} +\end{listing} + +Αφότου έχει ολοκληρωθεί η διαδικασία αξιολόγησης, μπορούμε να εκτελέσουμε την +παρακάτω εντολή προκειμένου να παραχθεί η αναφορά σε μορφή json: + +\begin{listing}[!ht] +\begin{bashcode} +vuls report -format-json +\end{bashcode} +\caption{Παραγωγή αναφοράς σε μορφή json} +\label{lst:vuls-report-json} +\vspace*{-10pt} +\end{listing} + +Για να μπορέσουμε να δούμε τα αποτελέσματα σε μια ευανάγνωστη μορφή, μπορούμε +να κατεβάσουμε στον διακομιστή μας το εργαλείο VulsRepo +\footfullcite{vulsrepo}. Θα πρέπει να μεταφερθούμε σε έναν φάκελο της επιλογής +μας και έπειτα να το κατεβάσουμε μέσω της εντολής git και να αρχικοποιήσουμε το +αρχείο ρυθμίσεων του. Αυτά τα βήματα επιτυγχάνονται με τις παρακάτω εντολές: + +\begin{listing}[!ht] +\begin{bashcode} +cd /opt +\end{bashcode} +\caption{Μεταφορά στον φάκελο εγκατάστασης του VulsRepo} +\label{lst:move-to-vulsrepo-folder} +\vspace*{-10pt} +\end{listing} + +\begin{listing}[!ht] +\begin{bashcode} +git clone https://github.com/ishiDACo/vulsrepo.git +\end{bashcode} +\caption{Εγκατάσταση του VulsRepo} +\label{lst:install-vulsrepo} +\vspace*{-10pt} +\end{listing} + +\begin{listing}[!ht] +\begin{bashcode} +cd /opt/vulsrepo/server/ +\end{bashcode} +\caption{Μεταφορά στον φάκελο του εκτελέσιμου αρχείου του VulsRepo} +\label{lst:move-to-vulsrepo-server-folder} +\vspace*{-10pt} +\end{listing} + +\begin{listing}[!ht] +\begin{bashcode} +cp vulsrepo-config.toml.sample vulsrepo-config.toml +\end{bashcode} +\caption{Αρχικοποίηση του αρχείου ρυθμίσεων του VulsRepo} +\label{lst:vulsrepo-config-file} +\vspace*{-10pt} +\end{listing} + +\begin{listing}[!ht] +\begin{bashcode} +cat < /opt/vulsrepo/server/vulsrepo-config.toml +[server] +rootPath = "/opt/vulsrepo" +resultsPath = "/usr/share/vuls-data/results" +serverPort = "<θύρα του VulsRepo>" +serverIP = "" +EOF +\end{bashcode} +\caption{Προσαρμογή του αρχείου ρυθμίσεων του VulsRepo} +\label{lst:vulsrepo-config-file-adjustment} +\vspace*{-10pt} +\end{listing} + +\clearpage + +Τέλος, για να εκκινήσει το VulsRepo, εκτελούμε την εντολή: + +\begin{listing}[!ht] +\begin{bashcode} +./vulsrepo-server +\end{bashcode} +\caption{Εκκίνηση του VulsRepo} +\label{lst:vulsrepo-start} +\vspace*{-10pt} +\end{listing} + +\subsection{Εγκατάσταση και προετοιμασία του Lynis} \label{lynisInstallation} + +Σε αντίθεση με το Vuls, η εγκατάσταση του Lynis και λειτουργία του Lynis είναι +πιο απλή. Εδώ τα βήματα που πρέπει να ακολουθηθούν είναι η σύνδεση στους +διακομιστές της Amazon μέσω ssh (για την οποία οι εντολή είναι έτοιμη μετά την +δημιουργία κάθε διακομιστή), η εγκατάσταση του εργαλείου μέσω git και η +εκτέλεση του. Αυτά πραγματοποιούνται ως εξής: + +\begin{listing}[!ht] +\begin{bashcode} +ssh -p <θύρα του διακομιστή> -i <πλήρες μονοπάτι ιδιωτικού κλειδιού ssh> secdep@ +\end{bashcode} +\caption{Σύνδεση στον διακομιστή της Amazon} +\label{lst:ssh-to-amazon-server} +\vspace*{-10pt} +\end{listing} + +\begin{listing}[!ht] +\begin{bashcode} +sudo su +\end{bashcode} +\caption{Μετάβαση σε χρήστη διαχειριστικών δικαιωμάτων} +\label{lst:switch-to-root-user} +\vspace*{-10pt} +\end{listing} + +\begin{listing}[!ht] +\begin{bashcode} +git clone https://github.com/CISOfy/lynis +\end{bashcode} +\caption{Εγκατάσταση του Lynis} +\label{lst:install-lynis} +\vspace*{-10pt} +\end{listing} + +\begin{listing}[!ht] +\begin{bashcode} +cd lynis +\end{bashcode} +\caption{Μεταφορά στον φάκελο του Lynis} +\label{lst:move-to-lynis-folder} +\vspace*{-10pt} +\end{listing} + +\begin{listing}[!ht] +\begin{bashcode} +./lynis audit system > ~/lynis.log +\end{bashcode} +\caption{Εκκίνηση αξιολόγησης (και αποθήκευση της) μέσω του Lynis} +\label{lst:lynis-audit} +\vspace*{-10pt} +\end{listing} + +\subsection{Εγκατάσταση και προετοιμασία του LUNAR} \label{lunarInstallation} + +Όπως και το Lynis, το LUNAR εγκαθίσταται και εκτελείται με τον ίδιο τρόπο. +Αφότου έχει πραγματοποιηθεί η σύνδεση στον διακομιστή και έχουμε μεταβεί σε +χρήστη με διαχειριστικά δικαιώματα, πρέπει να εκτελεστούν οι εξής εντολές: + +\begin{listing}[!ht] +\begin{bashcode} +git clone https://github.com/lateralblast/lunar +\end{bashcode} +\caption{Εγκατάσταση του LUNAR} +\label{lst:install-lunar} +\vspace*{-10pt} +\end{listing} + +\begin{listing}[!ht] +\begin{bashcode} +cd lunar +\end{bashcode} +\caption{Μεταφορά στον φάκελο του LUNAR} +\label{lst:move-to-lunar-folder} +\vspace*{-10pt} +\end{listing} + +\begin{listing}[!ht] +\begin{bashcode} +./lunar.sh -a > ~/lunar.log +\end{bashcode} +\caption{Εκκίνηση αξιολόγησης (και αποθήκευση της) μέσω του LUNAR} +\label{lst:lunar-audit} +\vspace*{-10pt} +\end{listing} + +\section{Αποτελέσματα αξιολόγησης} \label{evaluationResults} + +Μετά το πέρας της αξιολόγησης των δύο διακομιστών, τα αποτελέσματα που +παρήχθησαν από τα εργαλεία αξιολόγησης αναδεικνύουν τις διαφορές στην ασφάλεια +των δύο διακομιστών. Στην παρούσα ενότητα θα αναλυθούν τα αποτελέσματα του κάθε +εργαλείου αξιολόγησης ξεχωριστά και έπειτα θα βγει μια συμπερασματική +αξιολόγηση τους. + +\subsection{Αποτελέσματα αξιολόγησης με το Vuls} \label{vulsResults} + +Η εκτέλεση του Vuls στους δύο διακομιστές, στο τελευταίο κομμάτι της αναφέρει +μια μείωση των CVEs που απειλούν τον κάθε διακομιστή. Συγκεκριμένα αναφέρονται +τα εξής: + +\begin{itemize} + + \item \textbf{secdepawsFresh}: + + \begin{itemize} + + \item \textbf{Αριθμός CVEs που εντοπίσθηκαν με το OVAL}: \textbf{0} + \item \textbf{Αριθμός CVEs που εντοπίσθηκαν με το gost}: \textbf{774} + \item \textbf{Αριθμός CVEs που εντοπίσθηκαν με το CPE}: \textbf{0} + \item \textbf{Αριθμός PoC}: \textbf{0} + \item \textbf{Αριθμός εκμεταλλεύσεων}: \textbf{1} + + \end{itemize} + +\clearpage + + \item \textbf{secdepawsHardened}: + + \begin{itemize} + + \item \textbf{Αριθμός CVEs που εντοπίσθηκαν με το OVAL}: \textbf{0} + \item \textbf{Αριθμός CVEs που εντοπίσθηκαν με το gost}: \textbf{568} + \item \textbf{Αριθμός CVEs που εντοπίσθηκαν με το CPE}: \textbf{0} + \item \textbf{Αριθμός PoC}: \textbf{0} + \item \textbf{Αριθμός εκμεταλλεύσεων}: \textbf{1} + + \end{itemize} + +\end{itemize} + +Γραφικά, αυτό μεταφράζεται ως εξής: + +\begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = \textwidth]{Figures/Scans/Vuls/CVEs_Διακομιστών.png} + \captionof{figure}{CVEs διακομιστών} + \label{fig:vuls-cves} + \end{figure} +\vspace*{-30pt} +\end{center} + +Από τα παραπάνω μέχρι στιγμής αποτελέσματα, παρατηρούμε ότι από τους δύο +διακομιστές μας, ο διακομιστής secdepawsHardened, σχετικά με τα CVEs που +εντοπίστηκαν, έχει ασφαλιστεί κατά 26.615\%. + +Επιπροσθέτως, με βάση τα γραφήματα που παράχθηκαν από το VulsRepo, μπορούμε να +διακρίνουμε μια άμεση πτώση των ευπαθειών με βάση την κατηγορία σοβαρότητας +τους στο σχήμα \ref{fig:vuls-cvss-severity-table}. + +\begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = .8\textwidth]{Figures/Scans/Vuls/count_servername_by_cvss_severity_table_chart.png} + \captionof{figure}{Πίνακας συνολικών ευπαθειών ανά κατηγορία σοβαρότητας} + \label{fig:vuls-cvss-severity-table} + \end{figure} +\vspace*{-30pt} +\end{center} + +Το παραπάνω σχήμα απεικονίζεται και γραφικά ως εξής: + +\begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = .8\textwidth]{Figures/Scans/Vuls/count_servername_by_cvss_severity_area_chart.png} + \captionof{figure}{Γράφημα συνολικών ευπαθειών ανά κατηγορία σοβαρότητας} + \label{fig:vuls-cvss-severity-area-chart} + \end{figure} +\vspace*{-30pt} +\end{center} + +\clearpage + +Πιο συγκεκριμένα, παρατηρήθηκε 14.5663\% μείωση των ευπαθειών δικτύου και +13.5793\% των φυσικών ευπαθειών. Αυτό απεικονίζεται ορθότερα στα παρακάτω +σχήματα. + +\begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = .8\textwidth]{Figures/Scans/Vuls/network_attacks_by_servername.png} + \captionof{figure}{Ευπάθειες δικτύου} + \label{fig:vuls-network-vulnerabilities} + \end{figure} +\vspace*{-30pt} +\end{center} + +\begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = .8\textwidth]{Figures/Scans/Vuls/network_attacks_by_servername_line_chart.png} + \captionof{figure}{Μείωση ευπαθειών δικτύου} + \label{fig:vuls-network-vulnerabilities-drop} + \end{figure} +\vspace*{-30pt} +\end{center} + +\begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = .8\textwidth]{Figures/Scans/Vuls/physical_attacks_by_servername.png} + \captionof{figure}{Φυσικές ευπάθειες} + \label{fig:vuls-physical-vulnerabilities} + \end{figure} +\vspace*{-30pt} +\end{center} + +\begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = .8\textwidth]{Figures/Scans/Vuls/physical_attacks_by_servername_line_chart.png} + \captionof{figure}{Μείωση φυσικών ευπαθειών} + \label{fig:vuls-physical-vulnerabilities-drop} + \end{figure} +\vspace*{-30pt} +\end{center} + +\clearpage + +\subsection{Αποτελέσματα αξιολόγησης με το Lynis} \label{lynisResults} + +Αφότου ολοκληρώθηκε η εκτέλεση του Lynis στους δύο διακομιστές, ήταν πλέον +δυνατή η σύγκριση του δείκτη ασφαλείας τους με την εξής εντολή: + +\begin{listing}[!ht] +\begin{bashcode} +cat lynis.log | grep -i index | sed 's/^ *//g' | cut -d' ' -f4 +\end{bashcode} +\caption{Εκτύπωση δείκτη ασφαλείας} +\label{lst:lynis-security-index} +\vspace*{-10pt} +\end{listing} + +Το αποτέλεσμα της εντολής \ref{lst:lynis-security-index} είναι διαφέρει προς το +καλύτερο όταν το SecDep χρησιμοποιείται με την παράμετρο σκλήρυνσης όπως +δείχνουν τα αποτελέσματα: + +\begin{savenotes} +\selectfont +\begin{table}[!ht] +\caption{Δείκτης ασφαλείας του Lynis} +\renewcommand{\arraystretch}{1.5} +\centering +\newcolumntype{C}{>{\centering\arraybackslash}m{6cm}} +\textgreek{\begin{tabular}{||C|C||} +\hline + +Διακομιστής & Δείκτης Ασφαλείας \\ [0.5ex] + +\hline\hline + +Προ σκλήρυνσης & 65 \\ + +\hline + +Μετά σκλήρυνσης & 71 \\ + +\hline +\end{tabular}} +\label{table:lynis-security-index-table} +\renewcommand{\arraystretch}{1} +\end{table} +\end{savenotes} + +H αύξηση ασφαλείας του διακομιστή ανέρχεται στο 9.23077\% και απεικονίζεται +γραφικά στο σχήμα \ref{fig:lynis-security-index}. + +\begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = .8\textwidth]{Figures/Scans/Lynis/Lynis_Hardening_Index.png} + \captionof{figure}{Αύξηση δείκτη ασφαλείας του Lynis} + \label{fig:lynis-security-index} + \end{figure} +\vspace*{-30pt} +\end{center} + +\subsection{Αποτελέσματα αξιολόγησης με το LUNAR} \label{lunarResults} + +Παρόμοια με το Lynis, εφόσον το LUNAR ολοκληρώσει την αξιολόγηση του διακομιστή +παράγεται μια αναφορά. Στο τελικό μέρος της αναφοράς παρουσιάζονται, ο αριθμός +των ελέγχων που πραγματοποιήθηκαν, των θετικών αποτελεσμάτων και των +προειδοποιήσεων για σημεία που ενδέχεται να χρήζουν βελτίωσης. + +Προκειμένου να εξάγουμε μια βαθμολογία, θα λάβουμε υπόψιν τον αριθμό των +προειδοποιήσεων, τον οποίο θα αποκτήσουμε με την εκτέλεση της παρακάτων +εντολής: + +\begin{listing}[!ht] +\begin{bashcode} +cat lunar.log | grep -i "warnings:" | awk '{print $2}' +\end{bashcode} +\caption{Εκτύπωση συνολικών προειδοποιήσεων του Lunar} +\label{lst:lunar-warnings} +\vspace*{-10pt} +\end{listing} + +\begin{savenotes} +\selectfont +\begin{table}[!ht] +\caption{Συνολικές προειδοποιήσεις του Lunar} +\renewcommand{\arraystretch}{1.5} +\centering +\newcolumntype{C}{>{\centering\arraybackslash}m{6cm}} +\textgreek{\begin{tabular}{||C|C||} +\hline + +Διακομιστής & Αριθμός Προειδοποιήσεων \\ [0.5ex] + +\hline\hline + +Προ σκλήρυνσης & 266 \\ + +\hline + +Μετά σκλήρυνσης & 260 \\ + +\hline +\end{tabular}} +\label{table:lunar-warnings-table} +\renewcommand{\arraystretch}{1} +\end{table} +\end{savenotes} + +Από τον πίνακα \ref{table:lunar-warnings-table} διαπιστώνεται πως έχουμε +2.25564\% αύξηση της ασφάλειας, το οποίο απεικονίζεται και ως εξής: + +\begin{center} + \begin{figure}[!ht] + \centering + \includegraphics[width = .7\textwidth]{Figures/Scans/Lunar/lunar_warnings.png} + \captionof{figure}{Συνολικές προειδοποιήσεις του Lunar} + \label{fig:lunar-warnings} + \end{figure} +\vspace*{-30pt} +\end{center} + +\section{Συμπεράσματα αποτελεσμάτων αξιολόγησης} \label{evaluationResultsConclusion} + +Από τα αποτελέσματα των τριών εργαλείων αξιολόγησης, προκύπτει ότι μετά την +εφαρμογή της παραμέτρου σκλήρυνσης, ένας διακομιστής μπορεί να ασφαλιστεί σε +ικανοποιητικό βαθμό. Η συγκεκριμένη παράμετρος σκληραίνει τον διακομιστή και με +μεθόδους που δεν είναι μετρήσιμες, όπως η δημιουργία εκτελέσιμων αρχείων και η +εφαρμογή περιοδικής τους εκτέλεσης με στόχους την ενημέρωση των πακέτων +λογισμικού και το κλείσιμο θυρών που δεν χρησιμοποιούνται αντίστοιχα. + +Επιπρόσθετα, η σκλήρυνση της μηχανής δοχείων Docker δεν απεικονίζεται σε κανένα +από τα παραπάνω γραφήματα. Αυτό συμβαίνει διότι δεν υπάρχει εργαλείο που να +μπορεί να αξιολογήσει την ασφάλεια του Docker όταν αυτό χρησιμοποιείται χωρίς +διαχειριστικά δικαιώματα. Ωστόσο, η σκλήρυνση του έχει πετύχει διότι η απαλλαγή +από τον περιορισμό των διαχειριστικών δικαιωμάτων έχει ως αποτέλεσμα την μείωση +της επιφάνειας επίθεσης σε περίπτωση παραβίασης του, ενώ η αντικατάσταση του +runC με το runsc μειώνει την πιθανότητα παραβίασης. Για την ενίσχυση της +ασφάλειας του Docker, εκτελούνται και βήματα όπως η ρύθμιση της παραμέτρου του +δαίμονα \textquote{no-new-privileges} που αποτρέπει τα δοχεία από το να +λαμβάνουν επιπρόσθετα δικαιώματα και η παράμετρος \textquote{selinux-enabled} +εάν υποστηρίζεται από την διανομή. Τέλος, το secdep ασφαλίζει το Docker +επιπρόσθετα με έμμεσο τρόπο, εκτελώντας την υπηρεσία watchtower +\footfullcite{watchtower}, η οποία είναι υπεύθυνη για την αυτόματη ενημέρωση +των εικόνων δοχείων του συστήματος. + +Επομένως, το συμπέρασμα που προκύπτει είναι πως η χρήση του SecDep μπορεί να +αυξήσει την ασφάλεια ενός συστήματος. Ωστόσο, ενώ τα εργαλεία αξιολόγησης +παρουσιάζουν ένα ποσοστό αύξησης της ασφάλειας, η πραγματική αύξηση είναι +μεγαλύτερη διότι πολλές από τις αλλαγές που πραγματοποιούνται δεν +αντικατοπτρίζονται στα αποτελέσματα των αποτιμήσεων. diff --git a/Chapters/7.Conclusions.tex b/Chapters/7.Conclusions.tex index 33b7e12..7d7b4a8 100644 --- a/Chapters/7.Conclusions.tex +++ b/Chapters/7.Conclusions.tex @@ -1 +1,66 @@ \chapter{Συμπεράσματα \& Προτάσεις για Μελλοντική Έρευνα} \label{conclusions} + +\noindent Σήμερα, η τεχνολογία της εικονικοποίησης χρησιμοποιείται ευρέως σε +πολλούς τομείς της πληροφορικής. Πρακτικά, όλες οι μεγάλες εταιρείες παροχής +υπηρεσιών, σε παγκόσμιο επίπεδο, χρησιμοποιούν εικονικές μηχανές για την παροχή +των υπηρεσιών τους. Επιπλέον, η τεχνολογία των δοχείων, έχει αποτελέσει μια από +τις μεγαλύτερες επαναστατικές εξελίξεις της τελευταίας δεκαετίας, δίνοντας την +δυνατότητα στους προγραμματιστές να αναπτύσσουν και να εκτελούν εφαρμογές σε +οποιοδήποτε περιβάλλον, χωρίς να χρειάζεται να ανησυχούν για τα χαρακτηριστικά +του συστήματος στο οποίο θα εκτελεστεί η εφαρμογή. Ωστόσο, η χρήση των παραπάνω +τεχνολογιών, όπως και οποιασδήποτε άλλης τεχνολογίας, προϋποθέτει την υπακοή σε +κάποιους κανόνες και πρωτόκολλα, προκειμένου να επιτευχθεί η αποδοτικότερη και +ασφαλέστερη λειτουργία τους. + +Στην παρούσα διπλωματική εργασία, παρουσιάστηκαν διάφορα ζητήματα ασφαλείας που +αφορούν περιβάλλοντα εικονικών μηχανών και δοχείων. Με γνώμονα τα ζητήματα +αυτά, πραγματοποιήθηκε η ανάπτυξη ενός εργαλείου, που μπορεί με +αυτοματοποιημένο τρόπο να δημιουργήσει εικονικές μηχανές στις οποίες θα +εγκατασταθούν δοχεία Docker, αντιμετωπίζοντας ταυτόχρονα τα προαναφερθέντα +ζητήματα ασφαλείας. Το εργαλείο αυτό, ονομάζεται SecDep και αποτελείται από δύο +εκτελέσιμα αρχεία, τα οποία μπορούν να εκτελεστούν και ως αυτοτελείς εφαρμογές. +Το πρώτο, υπεύθυνο για την δημιουργία και διαχείριση των εικονικών μηχανών και +το δεύτερο, για την σκλήρυνση του συστήματος και την εγκατάσταση/σκλήρυνση του +δαίμονα Docker. + +\section{Συμπεράσματα} + +Με βάση τα αποτελέσματα των πειραμάτων που πραγματοποιήθηκαν στο κεφάλαιο +\ref{experimentationANDresults}, μπορούμε να συμπεράνουμε ότι το εργαλείο +SecDep, είναι ικανό να δημιουργήσει εικονικές μηχανές που έχουν σκληρυνθεί σε +ικανοποιητικό βαθμό, χωρίς περαιτέρω παρέμβαση από τον χρήστη. Μπορεί λοιπόν να +αποτελέσει ένα χρήσιμο εργαλείο για την αυτοματοποιημένη δημιουργία και +διαμόρφωση ενός ασφαλούς κατανεμημένου περιβάλλοντος, έτοιμο να υποδεχτεί +δοχεία Docker για την στέγαση εφαρμογών μικρο-υπηρεσιών. Μιας αρχιτεκτονικής +που έχει αρχίσει να αποκτά ιδιαίτερη δημοτικότητα τα τελευταία χρόνια. + +Επιπλέον, το εργαλείο SecDep, μπορεί να αποτελέσει ένα χρήσιμο εργαλείο για την +εκπαίδευση σε θέματα ασφάλειας, καθώς ο χρήστης έχει την δυνατότητα να +μελετήσει τον πηγαίο κώδικα του και να προσθέσει τις δικές του λειτουργίες, +προκειμένου να επεκτείνει την λειτουργικότητα του. Το εργαλείο διανέμεται με +την άδεια χρήσης \href{https://www.gnu.org/licenses/gpl-3.0.html}{GPLv3}, η +οποία παρέχει το δικαίωμα στον χρήστη να το χρησιμοποιήσει, να το μελετήσει, να +το τροποποιήσει και να το διανείμει ελεύθερα. + +\section{Προτάσεις για Μελλοντική Έρευνα} + +Παρόλο που το SecDep, είναι ένα πλήρες και λειτουργικό εργαλείο, υπάρχουν +πολλές δυνατότητες για την επέκταση του. Αρχικά, θα μπορούσε να επεκταθεί η +λειτουργικότητα του, ώστε να υποστηρίζει και άλλους παρόχους νέφους. Αυτό +βέβαια εξαρτάται άμεσα και από το εύρος της υποστήριξης συγκεκριμένων +συναρτήσεων από την βιβλιοθήκη libcloud. Επιπλέον, θα μπορούσε να αλλοιωθεί με +σκοπό την υποστήριξη παραπάνω μεθόδων της βιβλιοθήκης, δίνοντας στον χρήστη +δυνατότητες όπως η ρύθμιση DNS, εξωτερικής αποθήκευσης δεδομένων και +εξισορρόπησης φόρτου εργασιών. + +Τα παραπάνω αφορούν την επέκταση ενός από τα δύο εκτελέσιμα αρχεία του SecDep. +Το δεύτερο, το οποίο επικεντρώνεται στην σκλήρυνση του συστήματος, θα μπορούσε +και αυτό να επεκταθεί, προσθέτοντας νέες λειτουργίες. Μια από αυτές θα μπορούσε +να είναι η επιλογή του χρήστη για εφαρμογή συγκεκριμένων ρυθμίσεων ασφαλείας. +Επίσης, θα μπορούσε να χωριστεί σε δύο ανεξάρτητα εκτελέσιμα αρχεία, το ένα +υπεύθυνο για την σκλήρυνση του συστήματος και το άλλο για την εγκατάσταση και +σκλήρυνση του δαίμονα Docker. Με αυτόν τον τρόπο, ο χρήστης θα μπορούσε να +επιλέξει να εγκαταστήσει τον δαίμονα Docker σε ένα σύστημα που έχει ήδη +σκληρυνθεί, χωρίς να χρειάζεται να εκτελέσει το πρώτο εκτελέσιμο αρχείο. Τέλος, +θα μπορούσε να βελτιωθεί η διαδικασία σκλήρυνσης. Τα αποτελέσματα είναι ήδη +αρκετά ικανοποιητικά, ωστόσο πάντα υπάρχουν περιθώρια βελτίωσης. diff --git a/Declaration/declaration.tex b/Declaration/declaration.tex index 1689348..8db72bb 100644 --- a/Declaration/declaration.tex +++ b/Declaration/declaration.tex @@ -3,31 +3,57 @@ \addtocontents{toc}{\vspace{1em}} % Add a gap in the Contents, for aesthetics \noindent Εγώ, ο Χωλίδης Κωνσταντίνος, δηλώνω ότι αυτή η διπλωματική εργασία με -τίτλο, Σκλήρυνση Μηχανής Δοχείων και Λειτουργικού Συστήματος σε Περιβάλλοντα -Linux, και η δουλειά που παρουσιάζεται σε αυτή είναι δικά μου. Επιβεβαιώνω ότι: +τίτλο, \textquote{Σκλήρυνση Μηχανής Δοχείων και Λειτουργικού Συστήματος σε +Περιβάλλοντα Linux}, και η δουλειά που παρουσιάζεται σε αυτή είναι δικά μου. +Επιβεβαιώνω ότι: \begin{itemize} -\item[\tiny{$\blacksquare$}] Αυτή η δουλειά πραγματοποιήθηκε ολοκληρωτικά ή κυρίως κατά την υποψηφιότητά μου για τίτλο προπτυχιακών σπουδών σε αυτό το πανεπιστήμιο. -\item[\tiny{$\blacksquare$}] Όπου οποιοδήποτε μέρος αυτής της πτυχιακής εργασίας έχει προηγουμένως κατατεθεί για την απόκτηση πτυχίου ή άλλου τίτλου σε αυτό ή άλλο πανεπιστήμιο, αυτό διατυπώνεται ξεκάθαρα. + \item[\tiny{$\blacksquare$}] Αυτή η δουλειά πραγματοποιήθηκε ολοκληρωτικά ή + κυρίως κατά την υποψηφιότητά μου για τίτλο προπτυχιακών σπουδών σε αυτό + το πανεπιστήμιο. -\item[\tiny{$\blacksquare$}] Όπου έχω συμβουλευτεί την δημοσιευμένη δουλειά τρίτων, αυτό αποδίδεται ορθώς. + \item[\tiny{$\blacksquare$}] Όπου οποιοδήποτε μέρος αυτής της διπλωματικής + εργασίας έχει προηγουμένως κατατεθεί για την απόκτηση πτυχίου ή άλλου + τίτλου σε αυτό ή άλλο πανεπιστήμιο, αυτό διατυπώνεται ξεκάθαρα. -\item[\tiny{$\blacksquare$}] Όπου έχω παραθέσει από δουλειά τρίτων, η πηγή δίνεται πάντα. Με εξαίρεση αυτές τις παραθέσεις, αυτή η πτυχιακή εργασία είναι εξ ολοκλήρου προσωπική μου δουλειά. + \item[\tiny{$\blacksquare$}] Όπου έχω συμβουλευτεί την δημοσιευμένη δουλειά + τρίτων, αυτό αποδίδεται ορθώς. -\item[\tiny{$\blacksquare$}] Έχω παραθέσει όλες τις κύριες πηγές βοήθειας. + \item[\tiny{$\blacksquare$}] Όπου έχω παραθέσει από δουλειά τρίτων, η πηγή + δίνεται πάντα. Με εξαίρεση αυτές τις παραθέσεις, αυτή η διπλωματική + εργασία είναι εξ ολοκλήρου προσωπική μου δουλειά. + + \item[\tiny{$\blacksquare$}] Έχω παραθέσει όλες τις κύριες πηγές βοήθειας. + + \item[\tiny{$\blacksquare$}] Όπου αυτή η διπλωματική εργασία είναι + βασισμένη σε συνεργατική δουλειά δική μου και τρίτων, έχω καταστήσει + ξεκάθαρο ποια κομμάτια έχουν πραγματοποιηθεί από άλλους και πώς + συνέβαλα εγώ. -\item[\tiny{$\blacksquare$}] Όπου αυτή η πτυχιακή εργασία είναι βασισμένη σε συνεργατική δουλειά δική μου και τρίτων, έχω καταστήσει ξεκάθαρο ποια κομμάτια έχουν πραγματοποιηθεί από άλλους και πώς συνέβαλα εγώ. % Alternative to "\\" without the "Underfull \hbox (badness 10000) in paragraph" error \vspace{\baselineskip} \end{itemize} \vfill\vfill -Υπογραφή:\\ -\rule[1em]{25em}{0.5pt} % This prints a line for the signature +% Υπογραφή:\\ +% \rule[1em]{25em}{0.5pt} % This prints a line for the signature + +% Ημερομηνία:\\ +% \rule[1em]{25em}{0.5pt} % This prints a line to write the date + +\small\noindent Αυτή η διπλωματική εργασία είναι διαθέσιμη υπό τους όρους της άδειας χρήσης: \\ +\small\textbf{Αναφορά Δημιουργού - Μη Εμπορική Χρήση - Παρόμοια Διανομή 4.0 Διεθνές} + +\begin{center} + \begin{figure}[!ht] + \centering + \href{https://creativecommons.org/licenses/by-nc-sa/4.0/deed.el}{ + \includegraphics[width = .3\textwidth]{Figures/License/by-nc-sa.eu.png}} + \end{figure} +\vspace*{-30pt} +\end{center} -Ημερομηνία:\\ -\rule[1em]{25em}{0.5pt} % This prints a line to write the date } \clearpage % Declaration ended, now start a new page diff --git a/Figures/AWS_hardened/aws-hardened.png b/Figures/AWS_hardened/aws-hardened.png new file mode 100644 index 0000000..7bcafcd Binary files /dev/null and b/Figures/AWS_hardened/aws-hardened.png differ diff --git a/Figures/AWS_listing/aws-instances.png b/Figures/AWS_listing/aws-instances.png new file mode 100644 index 0000000..badf5d4 Binary files /dev/null and b/Figures/AWS_listing/aws-instances.png differ diff --git a/Figures/AWS_setup/create_access_key.png b/Figures/AWS_setup/create_access_key.png new file mode 100644 index 0000000..42c3613 Binary files /dev/null and b/Figures/AWS_setup/create_access_key.png differ diff --git a/Figures/AWS_setup/go_to_iam.png b/Figures/AWS_setup/go_to_iam.png new file mode 100644 index 0000000..b810a8c Binary files /dev/null and b/Figures/AWS_setup/go_to_iam.png differ diff --git a/Figures/Diagrams/harden-function-relationships.png b/Figures/Diagrams/harden-function-relationships.png new file mode 100644 index 0000000..72b6c50 Binary files /dev/null and b/Figures/Diagrams/harden-function-relationships.png differ diff --git a/Figures/Diagrams/secdep-flowchart-diagram.png b/Figures/Diagrams/secdep-flowchart-diagram.png new file mode 100644 index 0000000..6187381 Binary files /dev/null and b/Figures/Diagrams/secdep-flowchart-diagram.png differ diff --git a/Figures/Diagrams/secdep-function-relationships.png b/Figures/Diagrams/secdep-function-relationships.png new file mode 100644 index 0000000..7c494b3 Binary files /dev/null and b/Figures/Diagrams/secdep-function-relationships.png differ diff --git a/Figures/Diagrams/secdep-module-dependencies-organized.png b/Figures/Diagrams/secdep-module-dependencies-organized.png new file mode 100644 index 0000000..1453b41 Binary files /dev/null and b/Figures/Diagrams/secdep-module-dependencies-organized.png differ diff --git a/Figures/Diagrams/secdep-sequence-diagram.png b/Figures/Diagrams/secdep-sequence-diagram.png new file mode 100644 index 0000000..e400244 Binary files /dev/null and b/Figures/Diagrams/secdep-sequence-diagram.png differ diff --git a/Figures/Diagrams/secdep-use-case-diagram.jpg b/Figures/Diagrams/secdep-use-case-diagram.jpg new file mode 100644 index 0000000..fa3210e Binary files /dev/null and b/Figures/Diagrams/secdep-use-case-diagram.jpg differ diff --git a/Figures/Installation/secdep_install_without_git.png b/Figures/Installation/secdep_install_without_git.png new file mode 100644 index 0000000..ba7644a Binary files /dev/null and b/Figures/Installation/secdep_install_without_git.png differ diff --git a/Figures/License/by-nc-sa.eu.png b/Figures/License/by-nc-sa.eu.png new file mode 100644 index 0000000..433bc81 Binary files /dev/null and b/Figures/License/by-nc-sa.eu.png differ diff --git a/Figures/Scans/Lunar/lunar_warnings.png b/Figures/Scans/Lunar/lunar_warnings.png new file mode 100644 index 0000000..13b99b8 Binary files /dev/null and b/Figures/Scans/Lunar/lunar_warnings.png differ diff --git a/Figures/Scans/Lynis/Lynis_Hardening_Index.png b/Figures/Scans/Lynis/Lynis_Hardening_Index.png new file mode 100644 index 0000000..7c4f280 Binary files /dev/null and b/Figures/Scans/Lynis/Lynis_Hardening_Index.png differ diff --git a/Figures/Scans/Vuls/CVEs_Διακομιστών.png b/Figures/Scans/Vuls/CVEs_Διακομιστών.png new file mode 100644 index 0000000..24585d6 Binary files /dev/null and b/Figures/Scans/Vuls/CVEs_Διακομιστών.png differ diff --git a/Figures/Scans/Vuls/count_servername_by_cvss_severity_area_chart.png b/Figures/Scans/Vuls/count_servername_by_cvss_severity_area_chart.png new file mode 100644 index 0000000..aa9264a Binary files /dev/null and b/Figures/Scans/Vuls/count_servername_by_cvss_severity_area_chart.png differ diff --git a/Figures/Scans/Vuls/count_servername_by_cvss_severity_table_chart.png b/Figures/Scans/Vuls/count_servername_by_cvss_severity_table_chart.png new file mode 100644 index 0000000..439727c Binary files /dev/null and b/Figures/Scans/Vuls/count_servername_by_cvss_severity_table_chart.png differ diff --git a/Figures/Scans/Vuls/network_attacks_by_servername.png b/Figures/Scans/Vuls/network_attacks_by_servername.png new file mode 100644 index 0000000..ded96f5 Binary files /dev/null and b/Figures/Scans/Vuls/network_attacks_by_servername.png differ diff --git a/Figures/Scans/Vuls/network_attacks_by_servername_line_chart.png b/Figures/Scans/Vuls/network_attacks_by_servername_line_chart.png new file mode 100644 index 0000000..d27c493 Binary files /dev/null and b/Figures/Scans/Vuls/network_attacks_by_servername_line_chart.png differ diff --git a/Figures/Scans/Vuls/physical_attacks_by_servername.png b/Figures/Scans/Vuls/physical_attacks_by_servername.png new file mode 100644 index 0000000..dfe14f4 Binary files /dev/null and b/Figures/Scans/Vuls/physical_attacks_by_servername.png differ diff --git a/Figures/Scans/Vuls/physical_attacks_by_servername_line_chart.png b/Figures/Scans/Vuls/physical_attacks_by_servername_line_chart.png new file mode 100644 index 0000000..86ced5e Binary files /dev/null and b/Figures/Scans/Vuls/physical_attacks_by_servername_line_chart.png differ diff --git a/Figures/VULS/vuls-architecture.png b/Figures/VULS/vuls-architecture.png new file mode 100644 index 0000000..ec1e9c0 Binary files /dev/null and b/Figures/VULS/vuls-architecture.png differ diff --git a/Figures/VULS/vuls-scan-flow-fast-root.png b/Figures/VULS/vuls-scan-flow-fast-root.png new file mode 100644 index 0000000..3782cc5 Binary files /dev/null and b/Figures/VULS/vuls-scan-flow-fast-root.png differ diff --git a/Figures/doxygen/secdepFunctions.png b/Figures/doxygen/secdepFunctions.png new file mode 100644 index 0000000..ff68699 Binary files /dev/null and b/Figures/doxygen/secdepFunctions.png differ diff --git a/Figures/doxygen/secdepVariables.png b/Figures/doxygen/secdepVariables.png new file mode 100644 index 0000000..71a935f Binary files /dev/null and b/Figures/doxygen/secdepVariables.png differ diff --git a/Figures/lynis/lynis-screenshot.png b/Figures/lynis/lynis-screenshot.png new file mode 100644 index 0000000..43d2319 Binary files /dev/null and b/Figures/lynis/lynis-screenshot.png differ diff --git a/SettingsAndPackages/formatsAndDefs.tex b/SettingsAndPackages/formatsAndDefs.tex index 370ae38..faec5f3 100644 --- a/SettingsAndPackages/formatsAndDefs.tex +++ b/SettingsAndPackages/formatsAndDefs.tex @@ -30,6 +30,7 @@ \usepackage{tcolorbox} % LaTeX support for the Text Companion fonts \usepackage{textcomp} +\usepackage{pdflscape} % Select alternative section titles (Better chapter, section and subsection titles) \usepackage{titlesec} @@ -75,7 +76,7 @@ % Include any extra LaTeX packages required % biblatex because it has foocite built-in % Sophisticated Bibliographies in LaTeX -\usepackage[backend=biber,style=trad-abbrv,backref=true,autocite=plain,sorting=none,natbib=true]{biblatex} % Use the "Natbib" style for the references in the Bibliography +\usepackage[backend=biber,style=trad-abbrv,backref=true,autocite=plain,sorting=none,natbib=true,accessdate=true]{biblatex} % Use the "Natbib" style for the references in the Bibliography \DefineBibliographyStrings{greek}{ backrefpage={Αναφορά στη σελίδα}, @@ -115,7 +116,10 @@ \iffieldundef{urlyear} {} {\setunit*{\addspace}% - \printtext[urldate]{\printurldate}}} + % \printtext[urldate]{\printurldate} + {\printurldate} + } + } %%% %%%% @@ -138,6 +142,11 @@ %%%% +\renewcommand{\listoflistingscaption}{Κατάλογος Εντολών} +\renewcommand{\listingscaption}{Οδηγία} + +\newminted{bash}{style=sas,breaklines,frame=lines} + \addbibresource{Bibliography.bib} % The references (bibliography) information are stored in the file named "Bibliography.bib" % Reimplementation of and extensions to LaTeX verbatim @@ -151,6 +160,11 @@ % Define enumerated description lists % Control layout of itemize, enumerate, description \usepackage{enumitem} +% \usepackage[ +% type={CC}, +% modifier={by-nc-sa}, +% version={3.0}, +% ]{doclicense} \newcounter{descriptcount} \newcounter{descriptcount2} \newlist{enumdescript}{description}{2} diff --git a/Thesis.cls b/Thesis.cls index 5922760..5c959eb 100644 --- a/Thesis.cls +++ b/Thesis.cls @@ -103,12 +103,6 @@ \newtheorem{remark}[theorem]{Remark} \usepackage[centerlast,small,sc]{caption} \setlength{\captionmargin}{20pt} -% \newcommand{\fref}[1]{Figure~\ref{#1}} -% \newcommand{\tref}[1]{Table~\ref{#1}} -% \newcommand{\eref}[1]{Equation~\ref{#1}} -% \newcommand{\cref}[1]{Chapter~\ref{#1}} -% \newcommand{\sref}[1]{Section~\ref{#1}} -% \newcommand{\aref}[1]{Appendix~\ref{#1}} \renewcommand{\topfraction}{0.85} \renewcommand{\bottomfraction}{.85} \renewcommand{\textfraction}{0.1} @@ -124,6 +118,8 @@ \usepackage{booktabs} \usepackage{rotating} \usepackage{listings} +\usepackage{minted} +\usepackage{multirow} \usepackage{lstpatch} \lstset{captionpos=b, frame=tb, @@ -138,7 +134,7 @@ \usepackage[pdfpagemode={UseOutlines},bookmarks=true,bookmarksopen=true, bookmarksopenlevel=0,bookmarksnumbered=true,hypertexnames=false, colorlinks,linkcolor={blue},citecolor={blue},urlcolor={red}, - pdfstartview={FitV},unicode,breaklinks=true]{hyperref} + pdfstartview={FitV},unicode,breaklinks=true,pdfusetitle]{hyperref} \pdfstringdefDisableCommands{ \let\\\space } @@ -155,6 +151,7 @@ \newcommand*{\subject}[1]{\def\subjectname{#1}} \newcommand*{\keywords}[1]{\def\keywordnames{#1}} \newcommand*{\supervisor}[1]{\def\supname{#1}} + \examiner {} \degree {} \authors {} @@ -176,9 +173,19 @@ \FACULTY {\texorpdfstring{\href{https://www.aegean.gr/schools/πολυτεχνική-σχολή} {ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ}} {FACULTY NAME (IN BLOCK CAPITALS)}} -\supervisor {\texorpdfstring{\href{https://www.icsd.aegean.gr/profile.php?member=2112} - {Επιβλέπων Καθηγητής: Δρ. Κρητικός Κυριάκος}} - {Supervising Proffessor's name}} +\supervisor { + \texorpdfstring{ + {Επιβλέπων Καθηγητής:} + \href{https://www.icsd.aegean.gr/profile.php?member=2112}{Δρ. Κρητικός Κυριάκος}\\ + {Αναπληρωτής Καθηγητής Τμήματος ΜΠΕΣ}\\ + {Μέλη εξεταστικής επιτροπής:} + \vfill + \href{https://www.icsd.aegean.gr/profile.php?member=one}{κάποιος,} + \href{https://www.icsd.aegean.gr/profile.php?member=two}{κάποιος άλλος} + } + {Supervising Proffessor's name and committee member's names} + } + \addresses {} \subject {} \keywords {} @@ -204,9 +211,9 @@ \setlength{\parskip}{0pt} {\large\textbf{\UNIVNAME}\par} \vfill - {\huge \textbf \@title \par} + {\LARGE \textbf \@title \par} \vfill - {\LARGE του \par} + {\large του \par} \smallskip {\LARGE \authornames \par} \vfill @@ -252,14 +259,16 @@ \setlength{\parskip}{0pt} {\normalsize \UNIVNAME \par} \bigskip - {\huge{\textit{Σύνοψη}} \par} + \bigskip + {\huge{\textgreek{\textbf{Σύνοψη}}} \par} + \bigskip \bigskip {\normalsize \facname \par} {\normalsize \deptname \par} \bigskip - {\normalsize Προπτυχιακός Τίτλος Σπουδών\par} + {\normalsize Προπτυχιακός Τίτλος Σπουδών \par} \bigskip - {\normalsize\bfseries \@title \par} + {\normalsize \textbf{Σκλήρυνση Μηχανής Δοχείων και Λειτουργικού Συστήματος σε Περιβάλλοντα Linux} \par} \medskip {\normalsize του \authornames \par} \bigskip @@ -269,6 +278,33 @@ \vfil\vfil\vfil\null \cleardoublepage } +\newenvironment{abstractenglish} +{ + \thispagestyle{empty} + \null\vfil + \begin{center} + \setlength{\parskip}{0pt} + {\normalsize University of the Aegean \par} + \bigskip + \bigskip + {\huge{\textgreek{\textbf{Abstract}}} \par} + \bigskip + \bigskip + {\normalsize School of Engineering \par} + {\normalsize Department of Information and Communication Systems Engineering \par} + \bigskip + {\normalsize Undergraduate Studies \par} + \bigskip + {\normalsize \textbf{Container Engine and Operating System Hardening in Linux Environments} \par} + \medskip + {\normalsize of Cholidis Konstantinos \par} + \bigskip + \end{center} +} +{ + \vfil\vfil\vfil\null + \cleardoublepage +} \addtocounter{secnumdepth}{1} \setcounter{tocdepth}{6} \newcounter{dummy} @@ -365,7 +401,7 @@ \btypeout{Acknowledgements} \addtotoc{Ευχαριστίες} \thispagestyle{plain} -\begin{center}{\huge{\textit{Ευχαριστίες}} \par}\end{center} +\begin{center}{\huge{\textbf{Ευχαριστίες}} \par}\end{center} {\normalsize #1} \vfil\vfil\null diff --git a/Thesis.tex b/Thesis.tex index 5c7ca63..5511bc9 100644 --- a/Thesis.tex +++ b/Thesis.tex @@ -18,12 +18,12 @@ \title{Σκλήρυνση Μηχανής Δοχείων και Λειτουργικού Συστήματος σε Περιβάλλοντα Linux} \authors {\texorpdfstring - {\href{mailto:icsd16221@aegean.gr}{Χωλίδης Κωνσταντίνος - 321/2016221}} - {Χωλίδης Κωνσταντίνος (321/2016221)} + {\href{mailto:konsthol@proton.me}{Χωλίδης Κωνσταντίνος}} + {Χωλίδης Κωνσταντίνος} } \addresses {\groupname\\\deptname\\\univname} % Do not change this here, instead these must be set in the "Thesis.cls" file, please look through it instead -\date {Σάμος, Ιούλιος 2022} -\subject {} +\date {Σάμος, Φεβρουάριος 2024} +\subject {Διπλωματική Εργασία} \keywords {docker, linux, security, virtualization, cloud, hardening, containers, virtual machines} \maketitle @@ -63,6 +63,7 @@ Dennis Ritchie (1941 - 2011) % The Abstract Page \input{Abstract/abstract} % Include the abstract page +\input{Abstract/abstractenglish} % Include the abstract page in english %% ---------------------------------------------------------------- @@ -72,7 +73,17 @@ Dennis Ritchie (1941 - 2011) \acknowledgements{ \addtocontents{toc}{\vspace{1em}} % Add a gap in the Contents, for aesthetics -Εδώ γράφονται οι ευχαριστίες. +\noindent Στο σημείο αυτό, θέλω να ευχαριστήσω όλους τους ανθρώπους που +στάθηκαν δίπλα μου καθ' όλη την διάρκεια των σπουδών μου. Κυρίως, ευχαριστώ την +οικογένεια μου που με στήριξε και συνεχίζει να με στηρίζει με κάθε τρόπο σε όλα +τα επαγγελματικά και προσωπικά μου βήματα. Επίσης, ευχαριστώ βαθύτατα τους +φίλους μου, που βρίσκονται πάντα δίπλα μου σε κάθε στάδιο της ζωής μου. + +Τέλος, θέλω να ευχαριστήσω τον επιβλέποντα καθηγητή μου, κύριο Κυριάκο Κρητικό, +που μου προσέφερε την ευκαιρία να ασχοληθώ με ένα θέμα που με ενδιέφερε κατόπιν +συζήτησης μαζί του. Η συνεργασία μας ήταν πολύ εποικοδομητική και η εκπόνηση +της παρούσας διπλωματικής εργασίας με βοήθησε να εμβαθύνω τις γνώσεις μου σε +όλες τις τεχνολογίες που χρειάστηκαν για την υλοποίησή της. } \clearpage % End of the Acknowledgements @@ -94,6 +105,11 @@ Dennis Ritchie (1941 - 2011) \lhead{\textgreek{Κατάλογος Πινάκων}} % Set the left side page header to "List of Tables" \listoftables % Write out the List of Tables +%% ---------------------------------------------------------------- +\lhead{\textgreek{Κατάλογος Εντολών}} % Set the left side page header to "List of Listings" +\addtotoc{Λίστα Εντολών} +\listoflistings % Write out the List of Listings + %% ---------------------------------------------------------------- \input{Abbreviations/abbreviations} % Include a list of abbreviations (a table of two columns) @@ -105,7 +121,13 @@ Dennis Ritchie (1941 - 2011) \setstretch{1.3} % Return the line spacing back to 1.3 \pagestyle{empty} % Page style needs to be empty for this page -\dedicatory{Αφιέρωση (προαιρετική)} +\dedicatory{ + +Την παρούσα διπλωματική εργασία την αφιερώνω στην οικογένειά μου, τους φίλους +μου, καθώς και σε όλους τους ανθρώπους που με στήριξαν κατά την διάρκεια των +σπουδών μου. + +} \addtocontents{toc}{\vspace{2em}} % Add a gap in the Contents, for aesthetics