-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
15 changed files
with
1,734 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
# This script prints "Hello World" to the console | ||
def main(): | ||
print("Hello World") | ||
|
||
if __name__ == "__main__": | ||
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
\addcontentsline{toc}{chapter}{Bibliografía} | ||
|
||
\printbibliography | ||
|
||
\bigskip | ||
\subsubsection{Páginas de consulta sobre licencias, desarrollo y uso del software analizado} | ||
|
||
% \begin{itemize} | ||
% \item {\tt Creative Commons Share Alike 4.0}. \url{https://creativecommons.org/licenses/by-sa/4.0/} | ||
% \item {\tt Diccionario RAE}. \url{http://dle.rae.es/} | ||
% \item Wikibooks ({\tt LaTeX}). \url{https://en.wikibooks.org/wiki/LaTeX} | ||
% \item OWASP ZAP Python API \url{https://github.com/zaproxy/zap-api-python} | ||
% \item nginx-config-builder \url{https://github.com/linkedin/nginx-config-builder} | ||
% \item {\tt Diccionario RAE}. \url{http://dle.rae.es/} | ||
% \item {\tt W3C}. \url{https://www.w3.org/} | ||
% \item {\tt HTML CodeSniffer}. \url{http://squizlabs.github.io/HTML_CodeSniffer/} | ||
% \item `Docker official documentation'. Docker, Inc.. \url{https://docs.docker.com/} | ||
% \item `NGINX Wiki'. NGINX, Inc., 2017. \url{https://www.nginx.com/resources/wiki/} | ||
% \item PEP8 Style Guide for Python Code \url{https://www.python.org/dev/peps/pep-0008/} | ||
% \end{itemize} | ||
% \bigskip | ||
% \subsubsection*{Otro material} | ||
% \begin{itemize} | ||
% \item Diversas consultas puntuales al sitio {\tt StackOverFlow}. | ||
% \item Material docente de las asignaturas \textbf{Fundamentos de Ingeniería del Software}, \textbf{Seguridad en Sistemas Operativos}, \textbf{Desarrollo de Aplicaciones para Internet} y \textbf{Servidores Web de Altas Prestaciones} impartidas en \textbf{Grado en Ingeniería Informática} en la \textbf{Universidad de Granada}. | ||
% \item Material docente de las asignaturas \textbf{Cloud Computing}, \textbf{Inteligencia Computacional} y \textbf{Planificación y Gestión de Proyectos Informáticos} impartidas en el \master de la \textbf{Universidad de Granada}. | ||
% \end{itemize} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
\chapter{Glosario de términos} | ||
|
||
\textbf{Alpine Linux}: Es una distribución Linux basada en BusyBox y la librería \texttt{musl}. Debido a su pequeño tamaño, es muy utilizado en plataformas de contenedores ya que proporciona tiempos de arranque muy rápidos. | ||
\bigskip | ||
|
||
\textbf{API (application programming interface)}: Son un conjunto de funciones que funcionan como una capa de abstracción para poder interactuar con un determinado software. | ||
\bigskip | ||
|
||
\textbf{Apache Benchmark}: Herramienta para realizar pruebas de carga de servidores web desarrollada por la Fundación Apache. | ||
\bigskip | ||
|
||
\textbf{Auditoría de seguridad}: Estudio que comprende el análisis de sistemas para identificar, enumerar y posteriormente describir las diversas vulnerabilidades que pudieran presentarse en una revisión exhaustiva de las estaciones de trabajo, redes de comunicaciones o servidores. | ||
\bigskip | ||
|
||
\textbf{Backend}: Es el motor de una aplicación, se encarga de realizar las funciones en segundo plano que se encargan de que la aplicación funcione. | ||
\bigskip | ||
|
||
\textbf{Balanceo de carga}: Técnica de configuración de servidores que permite que la carga de trabajo total se reparte entre varios de ellos para que no disminuya el rendimiento general de la infraestructura. | ||
\bigskip | ||
|
||
\textbf{Caddy}: Es un servidor web de código abierto escrito en Go. Utiliza la funcionalidad HTTP de la biblioteca estándar de Go. | ||
\bigskip | ||
|
||
\textbf{Clickjacking}: es una técnica maliciosa que consiste en engañar al usuario para que haga clic en algo diferente de lo que el usuario cree, revelando así información confidencial o permitiendo que otros tomen el control de su ordenador. | ||
\bigskip | ||
|
||
\textbf{CVSS}: El `Common Vulnerability Scoring System' es un formato abierto de métricas para la comunicación de vulnerabilidades. | ||
\bigskip | ||
|
||
\textbf{DEAP}: Es un \textit{framework} de código abierto abierto para la realización de algoritmos genéticos. Está desarrollado en Python. | ||
\bigskip | ||
|
||
\textbf{Exploit}: Es un código que se utiliza con fin de aprovechar una vulnerabilidad en un determinado software consiguiendo un comportamiento no deseado en el mismo. | ||
\bigskip | ||
|
||
\textbf{Expresión regular}: Secuencia de caracteres que forma un patrón de búsqueda, principalmente utilizada para la búsqueda de patrones de cadenas de caracteres u operaciones de sustitución. | ||
\bigskip | ||
|
||
\textbf{Frontend}: Es la interfaz de la aplicación, es la parte de la aplicación que el usuario utiliza para comunicarse con la misma. | ||
\bigskip | ||
|
||
\textbf{Fundación Mozilla}: Organización sin ánimo de lucro que desarrolla el navegador Firefox así como otros programas licenciados software libre. | ||
\bigskip | ||
|
||
\textbf{Hash}: Algoritmo que a partir de una entrada genera una salida alfanumérica que representa un resumen de dicha entrada. Un simple cambio en los datos de la entrada generará un resumen totalmente diferente. | ||
\bigskip | ||
|
||
\textbf{HTML (HyperText Markup Language)}: Lenguaje de marcado que se utiliza para la realización de páginas web. | ||
\bigskip | ||
|
||
\textbf{Iptables}: Es un poderoso \textit{firewall} integrado en el núcleo de \texttt{Linux} y que forma parte del proyecto \texttt{netfilter}. | ||
\bigskip | ||
|
||
\textbf{JavaScript}: Lenguaje de programación orientado a objetos interpretado que se utiliza principalmente para cargar programas desde el lado del cliente en los navegadores web. | ||
\bigskip | ||
|
||
\textbf{JSON (JavaScript Object Notation)}: Formato de texto plano usado para el intercambio de información, independientemente del lenguaje de programación. Es una simplificación del formato XML siendo mucho mas legible por humanos. | ||
\bigskip | ||
|
||
\textbf{LaTeX}: Sistema de composición de documentos que permite crear textos en diferentes formatos (artículos, cartas, libros, informes...) obteniendo una alta calidad en los documentos generados. | ||
\bigskip | ||
|
||
\textbf{MIME}: Las `Multipurpose Internet Mail Extensions', por sus siglas en inglés, son una especificación dirigida al intercambio de ficheros de diferentes formatos a través de Internet. Se usa en mayor medida para reconocer el tipo de dichos ficheros. | ||
\bigskip | ||
|
||
\textbf{Musl}: es una implementación de la librería estándar de C de pequeño tamaño destinada a sistemas operativos embebidos basados en el kernel de Linux, está publicada bajo la licencia MIT. | ||
\bigskip | ||
|
||
\textbf{OWASP ZAP}: `El Zed Attack Proxy' es una herramienta para realizar análisis de seguridad en aplicaciones web desarrollada por OWASP. Es uno de los proyectos de OWASP más activos. | ||
\bigskip | ||
|
||
\textbf{OWASP}: El `Open Web Application Security Project', por sus siglas en inglés, es una organización cuya misión es mejorar la seguridad del software. Ha desarrollado diversas herramientas así como estándares de comunicación de vulnerabilidades. Además cuenta con un popular \textit{ranking} anual de las 10 vulnerabilidades que consideran críticas en aplicaciones web de mayor y ofrece recomendaciones sobre como evitarlas. | ||
\bigskip | ||
|
||
\textbf{Prueba unitaria}: Es una técnica que sirve para comprobar de forma atómica el funcionamiento del codigo de un sistema software. Su uso está aconsejado, \textit{TDD} se basa en este tipo de pruebas. | ||
\bigskip | ||
|
||
\textbf{Ransomware}: es un tipo de \textit{malware} que restringe el acceso a los datos almacenados en un sistema informático, comúnmente mediante técnicas de cifrado, y exige que se pague un rescate al creador para restaurar dicho acceso. | ||
\bigskip | ||
|
||
\textbf{RSA}: Es un sistema de criptografía basado en clave pública y privada. Es usado para securizar la transferencia de datos. | ||
\bigskip | ||
|
||
\textbf{Sniffer}: También conocido como analizador de paquetes, es un programa informático que puede interceptar y registrar el tráfico que pasa por una red. | ||
\bigskip | ||
|
||
\textbf{Software libre}: Software cuya licencia permite que este sea usado, copiado, modificado y distribuido libremente según el tipo de licencia que adopte. | ||
\bigskip | ||
|
||
\textbf{SSH (Secure SHell)}: Protocolo que permite conectarse a máquinas remotas mediante conexiones seguras de red. | ||
\bigskip | ||
|
||
\textbf{SSL (Secure Sockets Layer)}: Serie de protocolos criptográficos que proporcionan comunicaciones seguras por una red. | ||
\bigskip | ||
|
||
\textbf{StatusCake}: Es un servicio web que permite monitorizar la disponibilidad de servicios online. | ||
\bigskip | ||
|
||
\textbf{STIG}: Las `Security Technical Implementation Guides' son unas directrices de ciberseguridad para estandarizar los protocolos de seguridad dentro de redes de ordenadores para mejorar la seguridad general. Estas guías, cuando se implementan, mejoran la seguridad del software, hardware, y arquitecturas físicas para reducir la exposición a vulnerabilidades. | ||
\bigskip | ||
|
||
\textbf{TDD}: El `Test Driven Development', por sus siglas en inglés, es una técnica de desarrollo en las que primero se escriben pruebas unitarias del código y luego se va desarrollando el código de forma incremental hasta que pasa las diferentes pruebas unitarias. | ||
\bigskip | ||
|
||
\textbf{URL (Uniform Resource Locator)}: nombre y con un formato estándar que permite acceder a un recurso de forma inequívoca. | ||
\bigskip | ||
|
||
\textbf{WireShark}: Es un analizador de red utilizado para auditar redes de comunicaciones. | ||
\bigskip | ||
|
||
\textbf{YML}: `YAML Ain't Markup Language' por sus siglas en inglés es un formato de archivo para almacenar datos serializados de forma legible para humanos. Es compatible con el formato JSON con la ventaja de que ademas de legible es fácilmente editable. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,121 @@ | ||
\chapter{Introducción} | ||
|
||
\section{Motivación} | ||
|
||
En un mundo interconectado los ciberataques son uno de los mayores problemas para muchas organizaciones. Las organizaciones cada vez invierten más recursos en la detección de ataques informáticos, pero debido al amplio espectro de los mismos todavía tenemos serias dificultades para prevenirlos. | ||
|
||
\bigskip | ||
Las pérdidas en la economía mundial causadas por el cibercrimen y el ciberespionaje se estiman en cientos de miles de millones de dólares \cite{herrero_cibercrimen_2015}. Según un estudio del Instituto de Investigación Interregional de Crimen y Justicia de las Naciones Unidas (UNICRI por sus siglas en inglés), el cibercrimen es una de las principales amenazas para la economía mundial pasando el coste asociado al cibercrimen de 400.000 millones de Dólares en 2014 \cite{zappa_cybercrime:_2014} a alcanzar, según la Interpol, una estimacionón de 750.000 millones de Euros sólo en Europa \cite{gil_cuanto_2018}. | ||
|
||
\bigskip | ||
Las pérdidas estimadas causadas por actividades cibernéticas maliciosas están dentro de los siguientes criterios \cite{armin_2020_2015}: | ||
|
||
\begin{itemize} | ||
\item Robo de propiedad intelectual e información comercial confidencial. | ||
\item Robo de información sensible, incluida la posible manipulación del mercado. | ||
\item Coste de oportunidad que incluye interrupciones en el servicio, y una menor confianza en las actividades en línea. | ||
\item Pérdida causada por daños a la reputación de los negocios pirateados. | ||
\end{itemize} | ||
|
||
\bigskip | ||
La forma mas común de realizar dichos ataques es haciendo uso de vulnerabilidades conocidas. Muchas de estas vulnerabilidades pueden ser causadas por una mala configuración o por una combinación inadecuada de parámetros. Además, un servicio determinado puede tener prácticamente infinitas configuraciones posibles, siendo unas menos funcionales y/o vulnerables que otras. | ||
|
||
\bigskip | ||
La protección contra multitud de amenazas de seguridad informática puede ser implementada mediante una correcta configuración del software existente sin necesidad de invertir en costosas soluciones de seguridad. | ||
|
||
\bigskip | ||
Asimismo, para mejorar el mecanismo de protección contra los ciberataques, el atacante puede ser engañado por un cambio continuo en la configuración de un determinado servicio y en el caso de que el atacante sea capaz de descubrir vulnerabilidades en un programa específico el algoritmo genético habrá cambiado la configuración antes de que el atacante pueda definir un ataque en base a las vulnerabilidades descubiertas. | ||
|
||
\bigskip | ||
Encontrar dichas configuraciones correctas, así como similares configuraciones totalmente funcionales, puede ser una tarea inabarcable si se realiza de forma manual por lo que lo ideal sería encontrar una forma de generad dichas configuraciones de forma automática. | ||
|
||
\bigskip | ||
Los algoritmos genéticos, que es una heurística de búsqueda, se podrían utilizan para descubrir nuevas configuraciones, seguras y diversas mediante el modelado de una determinada configuración como si fueran cromosomas y las distintas opciones de configuración individuales como si fueran genes \cite{john_evolutionary_2014}. La idea principal de los algoritmos genéticos es que mediante mutación, cruce y selección de dichos cromosomas obtengamos mejores configuraciones. Dichas mutaciones se incorporan al azar, lo que proporciona diversidad. | ||
|
||
\bigskip | ||
En este caso concreto, los algoritmos genéticos nos pueden proporcionar una mejor seguridad a través de la diversidad \cite{crouse_improving_2012}. | ||
|
||
\bigskip | ||
Todo el código utilizado para la realización de este proyecto así como las diferentes herramientas tienen licencias de código abierto, tanto por motivación ideológica como por seguridad, ya que diversos estudios indican que el Software Libre es mucho mas seguro que el propietario \cite{walia_comparative_2006} \cite{mansfield-devine_open_2008} \cite{clark_is_2009}. | ||
|
||
|
||
\section{Definición del problema} | ||
|
||
Un atacante suele comenzar su ataque realizando un reconocimiento previo. Luego planea su ataque de acuerdo con la información que encuentra, por lo tanto, un cambio periódico en la configuración es una ingeniosa forma de hacer que su esfuerzo de reconocimiento no sea efectivo y ayudaría a prevenir un ataque a un costo relativamente bajo. | ||
|
||
\bigskip | ||
La técnica del ``objetivo móvil'' o ``Moving Target Defense'' es aplicable incluso a elementos hardware como se ha visto en el diseño del procesador Morpheus que es capaz de cambiar su configuración interna cada 50 milisegundos \cite{gallagher_morpheus:_2019}. | ||
|
||
\bigskip | ||
Considerando los algoritmos genéticos como una de las líneas de la inteligencia artificial, lo utilizaríamos \cite{tribak_alisis_2012} para alterar la configuración de un servidor de forma regular saboteando así los esfuerzos de recopilación de información realizados por un posible atacante. | ||
|
||
\bigskip | ||
Las distintas configuraciones posibles van cambiando (mutando) mediante un algoritmo genético hasta alcanzar una solución óptima. Si dichas configuraciones óptimas son aplicadas de forma regular la información recopilada previamente por un posible atacante ya no es efectiva consiguiendo una capa de protección sencilla y económica a la vez que se optimiza la configuración del servicio \cite{gensch_evolving_2016}. | ||
|
||
\bigskip | ||
Es importante asegurarse de que las configuraciones generadas funcionen de una manera correcta, y es importante que dicha configuración sea segura. Es difícil encontrar una configuración segura debido a la gran cantidad de configuraciones para probar, y además de eso, es difícil encontrar la combinación entre las configuraciones que hace que los componentes sean seguros. Para solucionar este problema deberemos contar con una herramienta que nos pueda indicar el nivel de seguridad de una configuración determinada. | ||
|
||
|
||
\section{Estructura del proyecto} | ||
|
||
\bigskip | ||
Antes de pasar a detalles más técnicos, me gustaría detallar el contenido de este proyecto: | ||
|
||
\begin{itemize} | ||
\item En el \textit{capítulo 1} (\textbf{Introducción}) se encuentra una breve introducción a nuestra idea, así como las motivaciones que nos han llevado a realizarla. | ||
\item El \textit{capítulo 2} (\textbf{Objetivos}) define los objetivos que se quieren alcanzar con este proyecto. | ||
\item En el \textit{capítulo 3} (\textbf{Antecedentes}) se analiza el estado de arte actual, así como algunas de las tecnologías y paradigmas que utilizaremos en nuestro proyecto. | ||
\item En el \textit{capítulo 4} (\textbf{Metodología}) está la planificación y desarrollo de cada uno de los apartados del proyecto. | ||
\item En el \textit{capítulo 5} (\textbf{Resultados})se detallan todos los resultados obtenidos. | ||
\item En el \textit{capítulo 6} (\textbf{Conclusiones}) se pueden encontrar las conclusiones finales así como las recomendaciones para futuros trabajos. | ||
|
||
\end{itemize} | ||
|
||
\bigskip | ||
Para finalizar se incluye un anexo con el código fuente desarrollado y liberado bajo la licencia libre GPLv3 \cite{free_software_foundation_gnu_2007}. Dicho código fuente también se puede encontrar en la url \url{https://github.com/erseco/moving_target_defense}. | ||
|
||
|
||
|
||
% % | ||
% % Ejemplos de codigo LaTeX para uso futuro | ||
% % | ||
|
||
% \begin{figure}[h!] | ||
% \centering | ||
% \includegraphics[width=1.0\textwidth]{../images/sample1} | ||
% \caption{Sample Image 1} | ||
% \label{fig:sample1} | ||
% \end{figure} | ||
|
||
% Esto es un texto con una nota\footnote{Ejemplo de nota al pie} al pie. | ||
|
||
% Y esto es una ``Frase de alguien'' (\cite{john_evolutionary_2014}). | ||
|
||
% \begin{itemize} | ||
% \item \textbf{1.} Texto de ejemplo | ||
% \item \textbf{2.} Texto de ejemplo | ||
% \item \textbf{3.} Texto de ejemplo | ||
% \item \textbf{4.} Texto de ejemplo | ||
|
||
% \end{itemize} | ||
|
||
% \begin{enumerate} | ||
% \item Ejemplo 1. | ||
% \item Ejemplo 2. | ||
% \end{enumerate} | ||
|
||
% \begin{lstlisting}[language=html] | ||
% <!DOCTYPE html> | ||
% <html lang="es-ES"> | ||
% <head> | ||
% <meta charset="utf-8"> | ||
% <title>Ejemplo de 2 párrafos</title> | ||
% </head> | ||
% <body> | ||
% <p>Esto es un párrafo.</p> | ||
% <p>Esto es otro párrafo.</p> | ||
% </body> | ||
% </html> | ||
% \end{lstlisting} | ||
|
||
% Puedes verlo en \cite{merelo-guervos_comparison_2016}. Te recomiendo leer \cite{clark_is_2009, zhang_genetic_2009, schlenker_deceiving_2018, gensch_evolving_2016}. |
Oops, something went wrong.