Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Julio, 2022
Trabajo Fin de Grado
Grado en Ingeniería Informática
Tecnología Específica de
Computadores
Julio, 2022
Dedicado a mi familia y a todos
aquellos que me apoyaron
iii
Declaración de Autoría
Yo, Ramón Fuentes Montoya con DNI 49216169, declaro que soy el único autor del
trabajo fin de grado titulado “Entorno para el testeo de seguridad de desarrollo web
siguiendo buenas prácticas” y que el citado trabajo no infringe las leyes en vigor sobre
propiedad intelectual y que todo el material no original contenido en dicho trabajo está
apropiadamente atribuido a sus legítimos autores.
Albacete, a.....
Fdo: ......
v
Resumen
Este trabajo de fin de grado titulado "Entorno para el testeo de seguridad de desarrollo
web siguiendo buenas prácticas" se ha hecho con el propósito de diseñar un entorno fácil
de utilizar, que sea capaz de analizar una página web siguiendo buenas prácticas como
es la metodología “OWASP TOP 10” donde se contemplan los diez mayores riesgos de
seguridad de las páginas web a día de hoy. Para realizar este entorno se han revisado
otras herramientas con funcionalidades parecidas. Entre ellas están “Nessus”, “OWASP
ZAP” y “Burp Suite”, aunque la primera referencia será Nessus por su sencillez. El entorno
se ha desarrollado en Python 3 donde se ha usado “tkinter” para hacer la interfaz junto
con otras librerías orientadas al funcionamiento de cada uno de los escáneres y la
creación de reportes. El entorno analiza (divididos en escáneres) concretamente 5 riesgos
de la metodología del OWASP TOP 10. Además, cuenta con otro escáner dedicado a la
recopilación de información. Para concluir esta memoria se han realizado una serie de
pruebas donde se ha ejecutado cada escáner y se han comentado los resultados vertidos
en sus correspondientes reportes.
vii
Agradecimientos
Este proyecto va dedicado a todas aquellas personas que me han ayudado durante estos
5 años. A mis padres por apoyarme financiera y emocionalmente en todas aquellas
ocasiones en las que estuve a punto de tirar todo por la borda. A mi abuela por estar
siempre ahí velando por mí y por tratarme con el mismo cariño con el que lo haría una
segunda madre. A mis amigos por apoyarme y ayudarme como si fueran mis hermanos.
También debo darle las gracias a José Luis (profesor de ciberseguridad), por haberme
introducido en este mundo mediante su asignatura, porque sus clases fueron realmente
entretenidas. Por último, quiero dar las gracias a mis tutores de este proyecto por su
trabajo, tanto a Enrique Arias Antúnez como a José Antonio Mateo Cortés.
Gracias.
ix
Índice general
1.1 Introducción________________________________________________________ 1
1.1.1 Conceptos Básicos _________________________________________________________ 3
2.1 Introducción________________________________________________________ 7
3.1 Introducción_______________________________________________________ 41
xi
Capítulo 4 Experimentos y Resultados _________________________________ 53
Bibliografía __________________________________________________________ 76
xii
Índice de ilustraciones
xiii
Ilustración 29. Ejemplo de Ataque de fuerza bruta a directorios. ............................................................. 33
Ilustración 30. Solicitudes detenidas ......................................................................................................... 33
Ilustración 31. Selección de la contraseña. ................................................................................................ 33
Ilustración 32. Addición de la wordlist ....................................................................................................... 34
Ilustración 33. Dashboard de Burp Suite.................................................................................................... 35
Ilustración 34. Ventana de Proxy ............................................................................................................... 36
Ilustración 35. Ventana del Intruder .......................................................................................................... 36
Ilustración 36. Ventana del Repeater ......................................................................................................... 36
Ilustración 37. Ventana del Sequencer ....................................................................................................... 37
Ilustración 38. Ventana del Decoder .......................................................................................................... 37
Ilustración 39. Ventana del Comparer ....................................................................................................... 38
Ilustración 40. Pantalla principal ................................................................................................................ 48
Ilustración 41. Ventana de los escáneres ................................................................................................... 48
Ilustración 43. Ventana del Output (salida) ............................................................................................... 49
Ilustración 43. Ventana del historial .......................................................................................................... 49
Ilustración 44. Ejemplo de ventana de parámetros ................................................................................... 50
Ilustración 45. Creación de un nuevo hilo .................................................................................................. 50
Ilustración 46. Ejecución de los comandos ................................................................................................ 51
Ilustración 47. Parámetros del CSRF requeridos por el entorno ................................................................ 54
Ilustración 48. Resultado obtenido de CSRF .............................................................................................. 54
Ilustración 49. Parámetros del Path Trasversal requeridos por el entorno ............................................... 55
Ilustración 50. Resultado obtenido de Path Trasversal ............................................................................. 56
Ilustración 51. Parámetros de Testssl requeridos por el entorno .............................................................. 56
Ilustración 52. Resultado de Testssl ........................................................................................................... 57
Ilustración 53. Parámetros de Shcheck requeridos por el entorno ........................................................... 58
Ilustración 54. Resultado obtenido de shcheck ......................................................................................... 58
Ilustración 55. Parámetros de Hydra requeridos por el entorno ............................................................... 60
Ilustración 56. Parámetros de Hydra (listas) requeridos por el entorno ................................................... 61
Ilustración 57. Resultado obtenido de Hydra............................................................................................. 61
Ilustración 58. Parámetros de Lighthouse requeridos por el entorno ....................................................... 62
Ilustración 59. Resultado obtenido de Lighthouse..................................................................................... 63
Ilustración 60. Resultado obtenido de Lighthouse (Passed audits) ........................................................... 64
Ilustración 61. Resultado obtenido de Lighthouse (Trust and safety) ....................................................... 64
Ilustración 62. Parámetros de Dependency-check requeridos por el entorno .......................................... 65
Ilustración 63. Resultado obtenido de Dependency-check........................................................................ 65
Ilustración 64. Parámetros de Nmap requeridos por el entorno ............................................................... 67
Ilustración 65. Resultado obtenido de Nmap ............................................................................................ 67
Ilustración 66. Parámetros de Whatweb requerido por el entorno .......................................................... 67
xiv
Ilustración 67. Resultado obtenido de Whatweb ...................................................................................... 68
Ilustración 68. Parametros de theHarvester requeridos por el entorno ................................................... 69
Ilustración 69. Resultado obtenido de theHarvester ................................................................................. 69
Índice de tablas
xvii
Capítulo 1
Introducción
1.1 Introducción
A medida que pasa el tiempo, las páginas web van quedándose obsoletas no solo en
cuanto a su funcionalidad o estética, también en materia de seguridad, por lo que
necesitan estar continuamente actualizándose para evitar posibles brechas de seguridad.
Este punto es realmente importante, ya que las consecuencias de un posible ataque
pueden llegar a comprometer a la empresa y perjudicarla de diversas maneras, como,
por ejemplo, dejándola sin sus servicios durante un periodo de tiempo prolongado, con
todas las pérdidas económicas que esto supone; o filtrando información interna de la
infraestructura de la empresa, de sus directivos o incluso de toda la plantilla, siendo
susceptible de esta manera de cualquier tipo de chantaje por parte del atacante.
Aunque pueda dar la sensación de que estos problemas pertenecen más a una película
de Hollywood que a la realidad, hay casos de este tipo todos los días a lo largo del mundo,
y es que, en ocasiones, la ficción se materializa e incluso se supera.
Sin ir muy atrás en el tiempo, concretamente en 2017, se distribuyó el famoso
ransomware “WannaCry” que consiguió infectar a compañías de la talla de Telefónica o
Iberdrola e incluso al “Servicio Sanitario Nacional” de Reino Unido. Este ransomware
alcanzó un ritmo de 10000 ordenadores infectados por hora durante 4 días y supuso unas
pérdidas estimadas en 4000 millones de dólares estadounidenses [1].
1
2 Capítulo 1 Introducción
1.2 Objetivo
El mundo de la ciberseguridad está dotado de una complejidad muy alta y requiere una
que el propio pentester se fusione con ese ambiente dado que la tecnología avanza y se
distribuye a la par que su vulnerabilidad y se expone cada vez más a posibles ataques de
crackers. Por esta razón, es necesario que todos conozcan la exposición a la que se
someten tanto en su vida privada, como en su vida laboral y es necesario que las personas
dispongan de un mínimo de conocimiento acerca de la fragilidad de su información y, por
ende, de su bienestar.
A pesar de lo importante que es disponer de cierta cultura de la ciberseguridad, es
entendible que no todo el mundo disponga del tiempo necesario y de la dedicación para
comprender este mundillo tan vertiginoso, además de estar continuamente actualizado
respecto a las diferentes vulnerabilidades que surgen cada día.
Estas razones son las que hacen que queramos crear una herramienta que democratice,
en cierto sentido, la capacidad para comprender la exposición a la que nuestras páginas
web están expuestas.
La misión en este Trabajo de Fin de Grado es comprender cómo analizar la seguridad de
una página web y, por lo tanto, visualizar sus posibles brechas de seguridad; comprender
cómo trabajan el resto de las herramientas del mismo tipo y a partir de este punto, crear
una herramienta adecuada para las personas que no disponen de los medios o
conocimientos para poder testear sus páginas web. Por ello, el objetivo es crear un
entorno amigable para cualquier persona que dispone de una página web, intentando
reducir de esta manera la complejidad del mundo de las pruebas de penetración web.
2.1 Introducción
Aclarados ciertos conceptos en la introducción, se prosigue con el estado del arte, donde
será necesario hablar sobre las metodologías y buenas prácticas más comunes e
importantes en el campo de las pruebas de penetración web y que se tendrán en cuenta
de cara al desarrollo de una herramienta que automatice todos los procedimientos
incluidos en dichas metodologías.
Dado que ya existen herramientas que automatizan estos análisis y comprobaciones de
seguridad, será necesario indagar sobre las mismas de cara a desarrollar un modelo
propio basado en los puntos más interesantes de las metodologías contempladas en este
apartado. Se tendrán en cuenta las más relevantes y las que concuerden con las
metodologías aquí descritas. Siguiendo esta línea, deberán tenerse en cuenta, a su vez,
herramientas para realizar las pruebas necesarias para comprobar la seguridad de una
aplicación de acuerdo con las metodologías y buenas prácticas descritas.
7
8 Capítulo 2 Estado del Arte
2.2 Metodologías
Para poder llevar a cabo este entorno primero es necesario conocer ciertas buenas
prácticas a la hora de realizar una prueba de penetración a la página web en cuestión.
Existen una amplia gama de metodologías y buenas prácticas de seguridad, de entre
todas, serán tomadas las que son de código abierto y gratuitas por las ventajas que ello
conlleva.
2.2.1 OWASP
Se trata de una organización sin ánimo de lucro que proporciona información referente
a la seguridad informática de forma gratuita. OWASP aparte de aportar formación en este
ámbito, también ofrece guías y metodologías para hacer más robusto y seguro el
software:
– OWASP Top 10
– Guía de desarrollo de OWASP
– Guía de pruebas de OWASP (WSTG)
– Estándar de verificación de seguridad de aplicaciones OWASP ASVS
– OWASP Guía de pruebas de seguridad móvil (MSTG)
– Y un largo etcétera de documentación.
Como se puede ver, aporta incluso guías de cara a la seguridad de las aplicaciones móviles
(OWASP MSTG) que tanto desarrolladores, pentesters e incluso, usuarios finales, pueden
llegar a utilizar.
De entre toda esta documentación, interesa principalmente para este proyecto tanto la
“Guía de pruebas de OWASP” como el “OWASP Top 10”.
La “Guía de pruebas de OWASP” [7] contiene información básica sobre lo que es una
prueba de penetración y otros términos más generales, además de un apartado dedicado
al SDLC o el ciclo de vida del desarrollo de software (se indica qué medidas hay que tomar
durante el SDLC para construir un software seguro) y de un apartado sobre el testeo de
seguridad a aplicaciones web, que es en el que más relevante para este proyecto, ya que
indica cómo funciona la metodología OWASP:
2.2 Metodologías 9
Esta metodología trata de reunir todas las técnicas de testeo posibles y está enfocada
específicamente a pruebas de caja negra donde el tester no tienen ningún conocimiento
de la aplicación que va a testear.
El modelo de prueba se compone del tester que es el que lleva a cabo el testeo, de las
herramientas y metodología utilizadas para realizar el testeo y de la “caja negra” que va
a ser testeada.
Según esta metodología, el tester debe seguir un conjunto de acciones para realizar
correctamente las pruebas de una prueba de penetración web. Todas estas están
resumidas en un esquema proporcionado por OWASP y que es el que podemos ver a
continuación:
10 Capítulo 2 Estado del Arte
La función del tester pasa primero por una recopilación de información sobre la empresa
(su infraestructura y web). Tras esto, se pasa por cada una de las pruebas que componen
la guía de OWASP (estas serán descritas a continuación brevemente). En caso de
encontrar una vulnerabilidad, se explota, de tal manera que se elabora una evaluación
sobre los riesgos que supone la existencia de esta en caso de que se consiga explotar esta
posible vulnerabilidad. El conjunto de pruebas de la guía de OWASP se repite hasta agotar
la posibilidad de encontrar riesgos y, por último, se crea un informe con los resultados
(vulnerabilidades encontradas y evaluación de las consecuencias e impacto en el servicio
web).
Las páginas web pueden tener una cantidad enorme de riesgos es por eso, que es
interesante contemplar aquellos que suponen un mayor problema por lo que es
necesario consultar el “OWASP Top 10” . Este es un documento que reúne los 10 riesgos
que suponen una mayor amenaza para las páginas web a día de hoy (la lista fue
actualizada a finales de 2021 por última vez)[9]. De estos 10 riesgos, OWASP decide los 8
que considera más importantes y los 2 restantes, son escogidos por parte de la
comunidad. A continuación, hablaré sobre cada uno de estos riesgos:
2.2 Metodologías 13
1. Broken Access Control [10]. Este tipo de riesgo está principalmente relacionado
con las siguientes vulnerabilidades: “CWE-352: Cross-Site Request Forgery
(CSRF)”, “CWE-200: Exposure of Sensitive Information to an Unauthorized Actor”,
“CWE-201: Insertion of Sensitive Information Into Sent Data”. El Access Control se
refiere a la política aplicada a cada usuario para determinar el acceso y permisos
que posee dentro de una página web, de manera que el Broken Access Control se
refiere a la posibilidad de un usuario de ir más allá de esta política, tal que puede
llevar a cabo acciones que no debería. Por ejemplo:
o Acceder a las capacidades de otros roles o usuarios.
o Elevación de privilegios. Actuar como un usuario sin haber iniciado sesión
o actuar como un administrador siendo un usuario corriente.
o Acceder a la API y poder realizar POST, PUT y DELETE.
o Forzar el buscador para acceder a paginas privilegiadas como un usuario
estándar.
Para evitar caer en este riesgo, es necesario, entre otras medidas:
o Denegar el acceso a los recursos no públicos.
o Implementar mecanismos de control de acceso y extenderlos a toda la
aplicación y minimizar el uso compartido de recursos.
o Registrar fallos de acceso en un log y advertir a los administradores en
caso de fallos repetidos o situaciones similares.
o Limitar el acceso a la API de manera que minimizamos los daños causados
por un ataque automatizado.
3. Injection [12]. Este tipo de riesgo está principalmente relacionado con las
siguientes vulnerabilidades: “CWE-79: Cross-site Scripting”, “CWE-89: SQL
Injection”, y “CWE-73: External Control of File Name or Path”. Tiene que ver con
la inyección o introducción de código en el objetivo para, por ejemplo, acceder a
datos restringidos.
Para evitar caer en este riesgo, es necesario, entre otras medidas:
o Utilizar una API segura que evite usar completamente el intérprete.
o Utilizar validación del lado del servidor
o Utilizar LIMIT y otros controles SQL para limitar el número de datos
mostrados en caso de una inyección SQL
4. Insecure Design [13]. Este tipo de riesgo está principalmente relacionado con las
siguientes vulnerabilidades: “CWE-209: Generation of Error Message Containing
Sensitive Information”, “CWE-256: Unprotected Storage of Credentials”, “CWE-
501: Trust Boundary Violation”, “CWE-522: Insufficiently Protected Credentials”.
Tiene que ver con el diseño inseguro de la aplicación y aunque, en principio pueda
parecerlo, esta no es la causa del resto de riesgos, ya que vienen dados por una
implementación insegura, que no es lo mismo. El diseño es una parte
importantísima, porque un diseño seguro puede tener una implementación
insegura, que puede ser reparada, pero una implementación perfecta de un
2.2 Metodologías 15
8. Software and Data Integrity Failures [17]. Este tipo de riesgo está principalmente
relacionado con las siguientes vulnerabilidades: "CWE-829: Inclusion of
Functionality from Untrusted Control Sphere", "CWE-494: Download of Code
Without Integrity Check" y "CWE-502: Deserialization of Untrusted Data". Se
produce debido a que el código e infraestructura no son capaces de proteger al
software y datos frente a violaciones de la integridad. Para entenderlo, es
necesario aclarar en qué consiste la integridad. Esta es la condición por la cual la
información se mantiene precisa y consistente durante el almacenamiento,
transmisión o uso, a no ser que la modificación sea autorizada. Un fallo a destacar
tiene que ver con el empleo de actualizaciones automáticas donde no se verifica
dicha actualización, ya que un posible atacante puede cargar sus propias
actualizaciones.
Algunas medidas para prevenir este riesgo son:
o Utilizar mecanismos para verificar que el software o datos provienen de
una fuente fiable y no fueron adulterados.
o Establecer un proceso de revisión de cambios en el código y configuración.
o Comprobar que las librerías y dependencias utilizan repositorios de
confianza.
9. Security Logging and Monitoring Failures [18]. Este tipo de riesgo está
principalmente relacionado con las siguientes vulnerabilidades: “CWE-117
Improper Output Neutralization for Logs”, “CWE-223 Omission of Security-
relevant Information”, and “CWE-532 Insertion of Sensitive Information into Log
File”. Tiene que ver con la incapacidad de detectar brechas de seguridad debido
a la escasez o ausencia de detección, monitorización y registro de eventos (inicios
de sesión, errores etc.). También tiene que ver con el almacenamiento de
información sensible en los logs, ya que la información podría quedar expuesta
en un ataque.
Algunas medidas para prevenir este riesgo son:
18 Capítulo 2 Estado del Arte
10. Server-Side Request Forgery [19]. Este tipo de riesgo está principalmente
relacionado con las siguientes vulnerabilidades: "CWE-918: Server-Side Request
Forgery (SSRF)". Esta vulnerabilidad consiste en, como dice su nombre, falsificar
solicitudes del lado del servidor. Se produce debido a que la web en cuestión
obtiene un recurso sin validar la URL dada por el usuario, tal que el atacante
puede enviar solicitudes a un dominio elegido por él mismo. Esto permite, entre
otras cosas, obtener información de la red interna de la organización en cuestión,
pudiendo baipasear fácilmente los firewalls existentes.
Algunas medidas para afrontar este riesgo son:
o Segmentar el acceso remoto a los recursos en redes separadas para
reducir las consecuencias del SSRF
o Tratar de denegar por defecto las políticas del firewall, excepto para el
tráfico esencial de la intranet
o Validar y sanitizar los datos proporcionados por los usuarios
o Desactivar las redirecciones HTTP
En este apartado se hablará sobre las herramientas que se tomarán de referencia para
hacer la de este proyecto. Estas herramientas suelen ser de pago dado la sencillez de uso
y el valor que aportan en una prueba de penetración.
2.3.1 Nessus
Una vez que se rellenan los parámetros, solo resta crear el escáner y, posteriormente,
ejecutar el análisis.
Como último paso queda revisar los resultados que ha obtenido el escáner. En las dos
siguientes imágenes podemos ver los hosts a los que se aplicó en escáner (Ilustración 15)
y las vulnerabilidades encontradas ordenadas por su criticidad (Ilustración 16).
2.3 Herramientas del mercado 27
2.3.2 OWASP
Escaneo automático
Si clicamos en el icono azul, se nos presenta la siguiente ventana (Ilustración 19):
2.3 Herramientas del mercado 29
Existe otra opción para ahorrar la configuración manual del proxy. En este caso tenemos
que clicar en el icono verde (Ilustración 18). Como consecuencia obtenemos la siguiente
pantalla (Ilustración 26):
32 Capítulo 2 Estado del Arte
OWASP ZAP es una herramienta muy útil además de gratuita, lo que supone una ventaja
muy grande respecto a otras herramientas que tienen una funcionalidad muy parecida
pero que se encuentran limitadas por una versión premium.
Esta herramienta esta desarrollada por la empresa PortSwigger y está escrita en Java [22].
Es una herramienta ampliamente usada por hackers profesionales, ya que proporciona
un amplio abanico de funciones . Burp Suite posee distintas versiones, la más básica es
Burp Suite Community que es la versiona gratuita y, por lo tanto, limitada y también
dispone de la versión Professional y la Enterprise.
Burpsuite profesional se compone de:
– Un escáner automático de vulnerabilidades
– Un fuzzer que cuya velocidad no se encuentra limitada
– Generación de reportes
– Acceso sin restricciones a nuevas extensiones
– Acceso a Burp Suite Collaborator
Burp Suite Enterprise está destinada para la realización de escaneos recurrentes. Posee
un escáner automatizado que se puede configurar para que se produzca periódicamente
de una manera muy parecida a Nessus tal y como vimos previamente.
Al abrir Burp, nos encontramos con el siguiente dashboard (Ilustración 33):
2.3 Herramientas del mercado 35
– Sequencer. Se utiliza para evaluar la aleatoriedad de tokens como las session cookies
u otro tipo de dato generado aleatoriamente (Ilustración 37).
Debido a que casi todas las herramientas únicamente están disponibles en Linux, el
entorno se desarrollará para Linux. Además del análisis de los riesgos Broken Access
control, Cryptographic failures, Security Misconfiguration y Vulnerable and outdated
components se ha introducido un escáner para la recopilación de información que puede
resultar interesante al igual que los escáneres más básicos que proporcionaba Nessus. En
el apartado siguiente dedicado a la implementación se hablará sobre las vulnerabilidades
escogidas para analizar y que se encuentran presentes en la tabla (Tabla 1).
Capítulo 3
Metodología y Desarrollo
3.1 Introducción
Para este trabajo, se han tenido en cuenta aquellas metodologías necesarias para
comprender cómo funciona un test de penetración y cuáles son los principales riesgos
que afectan a las páginas web hoy en día. Además, se revisaron algunos de los principales
escáneres del mercado y se eligieron ciertas herramientas que automatizan el análisis de
algunos de los riesgos ya mencionados anteriormente. En este capítulo, se describirá la
metodología de desarrollo seguida para realizar el entorno junto con el desarrollo de la
herramienta que se ha separado en una parte analítica, donde se explicarán las
vulnerabilidades que se analizarán con la herramienta; y en una parte técnica donde se
describirán los recursos utilizados para desarrollar la herramienta.
Para optimizar el flujo de trabajo es necesario establecer una metodología que sea capaz
de mejorar la productividad. Por esta razón ha sido escogida una metodología ágil,
específicamente SCRUM.
Podría pensarse que las metodologías ágiles tratan de establecer unas pautas sobre lo
que hay que hacer durante el desarrollo del software, en cambio, se centran en
establecer una forma de colaboración y de organización de los flujos de trabajo. Con esta
41
42 Capítulo 3 Metodología y Desarrollo
metodología se busca una mejora continua basada en la flexibilidad, ya que permite que
el desarrollo se adapte perfectamente a los cambios que se requieren del software.
Las metodologías ágiles nacieron en 2001 con el objetivo de buscar una forma nueva de
operar que se desprendiera de la linealidad de las metodologías en cascada [32]. Para
formalizar esta metodología, se creó el “Manifiesto para el desarrollo ágil de software”
que describe una serie de características primordiales y que son las siguientes:
– “Las personas y las interacciones antes que los procesos y las herramientas”.
– “El software en funcionamiento antes que la documentación exhaustiva”.
– “La colaboración con el cliente antes que la negociación contractual”.
– “La respuesta ante el cambio antes que el apego a un plan”.
Dentro de la metodología de SCRUM hay varios roles o papeles. Por una parte, está el rol
del Product Owner, que es el que representa el papel del cliente dentro del equipo y que
expresa el conjunto de necesidades o requisitos del cliente (Product Backlog); por otro
lado, está el rol del SCRUM Master, que es el que se encarga de que el equipo se ajuste a
la metodología de SCRUM; y por último está el rol del Equipo de desarrollo, que son
aquellas personas que llevan a cabo los requisitos escogidos (Sprint Backlog) para realizar
en un Sprint, que consiste en un periodo de tiempo que puede durar como máximo 30
días. En SCRUM también se realizan reuniones diarias llamadas Daily SCRUM, donde cada
miembro indica lo que hizo desde la anterior reunión, qué planea para la próxima reunión
y si tiene algún tipo de impedimento para cumplir el plan. También se realizan reuniones
al principio del Sprint (reuniones de planificación del Sprint), donde el Product Owner
presenta el Product Backlog y el equipo selecciona el mayor número posible de requisitos
que puede realizar en el Sprint; y al final del Sprint donde se hacen dos reuniones, una
reunión para revisar el proceso de desarrollo realizado y mejorarlo de cara al siguiente
Sprint (retrospectiva del Sprint) y otra reunión donde el equipo enseña al Product Owner
el desarrollo realizado y se determina el siguiente objetivo (revisión del Sprint) [33].
En el caso de este proyecto, al tratarse de un equipo muy pequeño y no disponer de
mucho tiempo, se ha optado por hacer unas cuantas modificaciones a la metodología
SCRUM. Dentro del equipo se han repartido los roles de la siguiente manera:
– Desarrollador: Ramón Fuentes Montoya.
– Product Owner: Enrique Arias Antúnez.
– SCRUM Master: José Antonio Mateo Cortés.
3.3 Desarrollo del entorno 43
– CSRF. Esta vulnerabilidad permite que el atacante lleve a cabo acciones en nombre
de una víctima. Para aprovechar esta vulnerabilidad, el atacante envía a la víctima una
dirección a una página maliciosa con lo que, al entrar en este link, la página maliciosa
puede emitir una petición en nombre de la víctima [34]. Para evitar este tipo de
ataques la página web puede introducir un CSRF token [35] que va asociado al id de
sesión del usuario, de tal manera que el atacante no puede acceder a este token y no
puede enviar peticiones en su nombre.
– Path Trasversal. Esta vulnerabilidad se da debido a que las páginas web incluyen
recursos locales mediante rutas que pueden ser introducidas por el usuario. Un
atacante podría aprovechar este fallo de configuración para introducir rutas que
pueden suponer un gran riesgo para la página web. Un ejemplo podría ser:
http://paginaweb/cargarImagen?filename=../../../etc/passwd. De esta forma se
suben un numero “x” de directorios hasta llegar al archivo “passwd” [36].
Cryptographic failures (número dos del OWASP TOP 10). Dentro de este riesgo se han
escogido vulnerabilidades relacionadas con una mala configuración del certificado
“TLS/SSL” y de las “Cabeceras”.
– Certificado TLS/SSL. El uso de un TLS/SSL desactualizado o su ausencia puede suponer
la exposición de información sensible. Cuando una página web dispone de un
certificado TLS/SSL, muestra en su dirección una “s” al final del protocolo, por ejemplo
“https” (protocolo de transferencia segura de hipertexto) lo cual significa que, en las
en los intercambios de información con el servidor, la información transmitida se
encuentra cifrada gracias a los algoritmos aportados por un certificado TLS/SSL. El
cifrado de datos dificulta a un atacante el hecho de poder interpretar la información
intercambiada [37]. Existen varias vulnerabilidades relacionadas con este apartado,
por ejemplo, Heartbleed. Cuando se produce una conexión entre un cliente y un
servidor, esta conexión tiende a ser cerrada por parte del servidor, ya que este tiene
un límite de conexiones con clientes por lo que el navegador envía un mensaje
indicando que no cierre la conexión, porque el cliente sigue ahí. Estos mensajes se
asemejan a los latidos de un corazón por lo que de ahí viene la palabra Heart (corazón
en inglés) y contienen cualquier cosa de hasta 64 KB. Los mensajes enviados por el
cliente son respondidos con 64 KB por parte del servidor. Para sustraer información
3.3 Desarrollo del entorno 45
lo que el atacante hace es enviar 1 KB de información que será respondida con 1KB
por parte del servidor, pero para sustraer información el cliente (atacante en este
caso) puede reclamar el resto de los datos que contiene este tipo de mensajes por lo
que el servidor enviará 1KB junto con 63KB de información adicional que puede
contener identificadores de sesión, contraseñas u otro tipo de información sensible.
De esta extracción de información viene la parte de Bleed (sangrar en castellano) que
termina el nombre Heartbleed [38].
– Cabeceras. Las cabeceras son unos parámetros que permiten enviar información
adicional al cliente o servidor a través de una petición o respuesta [39]. Una mala
configuración de las cabeceras puede convertirse en una posible vulnerabilidad. Un
ejemplo es la cabecera “X-XSS-Protection”, que evita posibles ataques de inyección
XSS. Esta vulnerabilidad consiste en la posibilidad de un atacante de inyectar de
scripts, los cuales que suelen ser redactados en JavaScript y que pueden ser de tres
tipos: el primer tipo son los XSS reflejados o no persistentes, llamados así porque se
reflejan en el navegador del usuario y porque no persisten en el servidor. El segundo
tipo son los XSS persistentes, que son aquellos que persisten en el servidor, y los del
tercer tipo son los XSS basados en DOM donde se permite modificar el DOM, que es
el árbol de objetos del html de la página web [40]. Otro ejemplo es la cabecera “X-
Frame-Options”, que puede evitar la vulnerabilidad “Clickjacking”, donde un atacante
puede establecer una interfaz en la página web vulnerable que hace de intermediaria
entre la página web y el usuario de tal manera que, por ejemplo, si el usuario inicia
sesión en la página, sus credenciales podrían ser sustraídas por parte del atacante sin
que el propio usuario se dé cuenta [41].
Security Misconfiguration (número cinco del OWASP TOP 10). Las vulnerabilidades de
este riesgo tienen que ver con la existencia de funciones innecesarias, cuentas con
valores predeterminados, uso de puertos innecesarios etc., por lo que el escáner evaluará
la URL introducida para analizar si se siguen una serie de buenas prácticas y para ver si
existen vulnerabilidades.
46 Capítulo 3 Metodología y Desarrollo
Vulnerable and outdated components (número seis del OWASP TOP 10). Con este escáner
se pretende analizar el proyecto de la página web en cuestión en busca de componentes
vulnerables y obsoletas.
Identification and autentication failures (número siete del OWASP TOP 10). La
vulnerabilidad relacionada con este riesgo son los ataques de fuerza bruta a logins. Con
este tipo de ataque lo que se hace es probar una lista muy larga de contraseñas (o incluso
nombres de usuario) en una ventana de inicio de sesión con el objetivo de encontrar la
contraseña o usuario correcto y ganar acceso al sistema. Este tipo de vulnerabilidades se
producen debido a que la página web no controla el número de intentos que puede
realizar un usuario al iniciar sesión.
Information gathering. Además de los riesgos anteriormente citados, al igual que en otros
entornos como Nessus, se ha añadido un escáner que puede llegar a ser de utilidad para
determinar la información sobre los puertos de la página web, información general
(lenguaje utilizado, servidor, etc.) e incluso información sobre los trabajadores de la
organización.
Existe la posibilidad de introducir otro tipo de riesgos como puede ser el riesgo número
tres (Injection) o el riesgo número diez (Server Side Request Forgery), pero dado que son
ataques complejos de llevar a cabo, necesitan ser estudiados en mayor detalle, por lo
que, al estar dirigida esta herramienta a PYMES, se ha prescindido de ellos, aunque no
está descartado añadirlos a largo plazo tal y como se mencionará durante el Capítulo 5
en el apartado de Trabajo Futuro. En cuanto al resto de riesgos existen cuestiones que
impiden en cierto modo comprobarlos de manera completamente automática. Algunos
de estos riesgos son:
Insecure desing. Este tipo de riesgo está relacionado con un diseño inseguro de la
aplicación el cual expone información sensible debido al uso de un ciclo de vida del
desarrollo del software inseguro. Alguna de este tipo de exposiciones de información
sensible tiene que ver con el uso de mensajes de error que contienen información
sensible (CWE-209) o el uso de credenciales insuficientemente protegidas (CWE-522). No
3.3 Desarrollo del entorno 47
Software and Data Integrity Failures. Este tipo de vulnerabilidades se producen debido a
la incapacidad del software para mantener la integridad de los datos. Para realizar este
tipo de comprobaciones sería necesaria una herramienta que probara qué datos pueden
encontrarse corruptos, pero no ha sido posible encontrar una herramienta que se ajuste
a este tipo de riesgo.
Security logging and monitoring failures. Estas vulnerabilidades están relacionadas con
una mala monitorización, registro de eventos o la ausencia de detección de errores o
inicios de sesión, con lo que este tipo de vulnerabilidades han detectarse no con un
escáner, si no con un sistema SIEM, que consiste en un sistema de seguridad que permite
tener control sobre los eventos que suceden en el sistema y permite detectar
comportamientos que se encuentren fuera de lo común [42]. También están relacionadas
con el almacenamiento de información sensible en logs. Esto significa que existiría la
posibilidad de acceder a esa información, por ejemplo, con una vulnerabilidad Path
trasversal, que está incluida en el escáner de Broken acess control.
Durante el proceso se ha utilizado como editor de código Visual Studio Code [43] en la
distribución de Linux, Kali Linux [44] la cual es una distribución hecha específicamente
para la ciberseguridad, ya que incluye multitud de herramientas. También se han
obtenido herramientas no incluidas en Kali mediante el uso de GitHub [45]. El entorno ha
sido desarrollado en Python 3 con multitud de librerías que han facilitado el proceso del
diseño de esta aplicación de escritorio. La librería sobre la que se cimenta la interfaz de
la aplicación es tkinter la cual ha sido usada por su sencillez y por la gran cantidad de
documentación que tiene disponible en la red. Se han empleado Widgets (objetos de la
librería tkinter) como Frames para hacer las ventanas, Buttons (botones), Labels para
introducir texto e imágenes y Entries (entradas) para que el usuario introduzca texto (lo
que se suele conocer como forms en HTML). Para crear el logo del entorno, llamado
48 Capítulo 3 Metodología y Desarrollo
“Apolo”, se ha utilizado Photoshop al igual que para editar cada imagen de cada escáner.
Cuando se abre la aplicación, se muestra la siguiente pantalla
4.1 Introducción
En este capítulo se hablará sobre las herramientas que posee cada escáner del entorno,
sobre la funcionalidad de cada una de ellas, sobre los parámetros requeridos por el
escáner del entorno, sobre el comando que se ejecuta en el código fuente de cada
herramienta y sobre los reportes obtenidos al ejecutar cada escáner sobre un objetivo.
Con el objetivo de preservar el anonimato de los objetivos sobre los que se han realizado
las pruebas, se censurará su identidad en todos los reportes mostrados en este capítulo.
Broken access control. En este escáner se utilizan dos herramientas, “Bolt CSRF”, para el
análisis de la vulnerabilidad CSRF y “Dotdotpwn”, para analizar URLs que puedan
contener un Path trasversal.
– Bolt CSRF. Esta herramienta detecta, en caso de que exista un CSRF Token, si el CSRF
Token de la página web evaluada es lo suficientemente fuerte, realizando, entre otras
medidas, una comparación de varios CSRF Token mediante la emisión de 100
peticiones simultaneas con el objetivo de determinar si en algún caso el CSRF Token
es similar o igual. La herramienta incorpora un crawler o rastreador que recopila los
53
54 Capítulo 4 Experimentos y Resultados
Path Trasversal junto con otros escáneres, ya que puede llevar una gran cantidad de
tiempo y puede entorpecer el resto de los escáneres. Para realizar el escáner con
Dotdotpwn se requiere la dirección del objetivo, y la URL específica que va a ser
testeada (Ilustración 49).
Este comando tiene varios parámetros. El primer parámetro es “-m”, que es para
escoger un módulo y, como en este caso es una web, se escoge el módulo “http-url”;
luego tiene “-h”, que es para escoger la dirección de la página web, por ejemplo:
http://www.ejemplo.com/; seguidamente tiene “-u”, para escoger la URL específica
a testear, por ejemplo http://www.ejemplo.com/path_trasversal.php?page=, esta
URL se iguala a la palabra clave “TRASVERSAL” para indicar de manera precisa dónde
se quiere ejecutar el ataque; posteriormente tiene el parámetro “-k”, que va seguido
de “root” y que sirve para indicar a la herramienta que cuando encuentre un fichero
con esa palabra clave (“root”), avise de que es vulnerable; por último tiene el
parámetro “-b” que indica a la herramienta que pare el ataque al encontrar un Path
Trasversal. Se ha decidido incluir el parámetro “-b” debido a que la intención es
detectar que esta vulnerabilidad existe no encontrar todas las combinaciones
posibles. En el caso de la página web testeada, el resultado es el de la Ilustración 50.
56 Capítulo 4 Experimentos y Resultados
Cryptographic failures. En este escáner se utilizan dos herramientas, una es “Testssl” para
el análisis de certificados TLS/SSL y otra es “Shcheck”, para el análisis de las cabeceras.
– Testssl. Esta herramienta analiza los certificados que utiliza la página web en
búsqueda de algún certificado que se encuentre ausente u obsoleto y determina si la
página es vulnerable a usa serie de vulnerabilidades comunes. Para realizar el escáner
con Testssl se requiere presionar el botón “testssl” y añadir la dirección del objetivo
(Ilustración 51).
Por una parte, se obtiene un análisis de las versiones de los certificados TLS/SSL que
la página web ofrece. Dentro de este análisis se ha obtenido que tanto el TLS 1 como
el TLS 1.1 se encuentran obsoletos. Por otra parte, se ha encontrado una
vulnerabilidad a la que potencialmente no se es vulnerable (“BREACH”) y otras dos a
las que sí es vulnerable. En cuanto a las que sí es vulnerable, consisten en “BEAST” y
“LUCKY13”. Ambas vulnerabilidades están relacionadas con el uso de TLS 1 y TLS 1.1
que utilizaba un tipo de cifrado débil, por lo que sería recomendarle dejar de utilizar
estas versiones (Ilustración 52).
– Shcheck. Esta herramienta revisa la página web en función a una lista de cabeceras,
buscando aquellas que le faltan y aquellas que posee. Para realizar el escáner con
58 Capítulo 4 Experimentos y Resultados
Visto desde el código fuente del entorno, el comando ejecutado sería el siguiente:
shcheck -k <objetivo>
Los parámetros introducidos son “-k”, que es para indicar que se muestren las
cabeceras que se encuentran desactualizadas y el objetivo al que se quiere lanzar la
herramienta. El resultado obtenido del análisis de la página en cuestión es el de la
Ilustración 54.
cuando se detecta un ataque XSS [46]. Esta cabecera sí que está presente en la
página web, pero se encuentra desactualizada.
– X-Frame-Options. Esta cabecera indica si un navegador puede renderizar una
página en un <frame>,<iframe>, <object> o <embed>. Evita la vulnerabilidad
Clicjacking, ya que su contenido no es embebido en otros sitios [47].
– X-Content-Type-Options. Cuando el administrador de una página web no
devuelve correctamente los tipos de archivos tratados en una página web (esto
se hace con la cabecera Content-Type), el navegador, tiene que determinar de
qué tipo es este archivo teniendo que inspeccionar el archivo que puede ser un
archivo camuflado como una imagen. Cuando el navegador entra en el archivo y
determina que es un HTML y no una imagen, intenta ejecutar dicho archivo que
podría contener algún tipo de JavaScript malicioso. Esta inspección del navegador
conocida como MIME sniffing, es la que precisamente esta cabecera bloquea [48].
– Strict-Transport-Security. Esta cabecera solo permite al sitio web comunicarse
con HTTPS en vez de HTTP [49].
– Content-Security-Policy. Esta cabecera permite establecer una lista de fuentes
fiables de las que aceptar scripts, imágenes u otros recursos. Por esta razón añade
una protección frente a inyecciones [50].
– X-Permitted-Cross-Domain-Policies. Se utiliza para indicar a clientes como Flash y
Acrobat qué peticiones de un dominio a otro pueden utilizar [51]. Esto se hace
con el objetivo de evitar posibles peticiones dañinas de documentos Adobe Flash
y PDF [52]. Esta cabecera se encuentra presente en la página web, pero esta
desactualizada.
– Expect-CT. Evita que la página web utilice certificados emitidos incorrectamente
y asegura que no pasen desapercibidos [53].
– Referrer-Policy. Esta cabecera permite restringir la información de referencia de
una solicitud anterior, es decir, evita que se filtre desde donde se ha realizado una
petición a la página web visitada. Este tipo de cabeceras es útil para evitar que se
filtre información sobre el usuario a páginas webs de terceros [54].
– Permissions-Policy. Esta cabecera permite controlar el acceso que tienen las
páginas web a los recursos o características del navegador a los que tiene acceso
una página. Un ejemplo: se tiene una página web llamada “ejemplo.com”. Esta
60 Capítulo 4 Experimentos y Resultados
Para elegir entre un usuario o lista de usuarios y una contraseña o lista de contraseñas,
basta con hacer clic en el botón “Usuario” y en el botón de “Contraseña”, de tal manera
que se cambiará el nombre de “Usuario” por “Lista de usuarios” y el de Contraseña por
el de “Lista de contraseñas”, a su vez, a la izquierda de los campos de los usuarios y
contraseñas, aparecerá un botón nombrado como “Browse” con el que se podrá buscar
la lista de usuarios o contraseñas deseada (Ilustración 56).
Primero se ha introducido “-l”, para añadir un solo usuario o “-L”, para añadir una lista de
usuarios, seguidamente se añade “-p”, para añadir una contraseña, o “-P” para añadir
una lista de contraseñas, posteriormente hay que indicar que se va a hacer la fuerza bruta
a un formulario poniendo “http-post-form” junto con la petición y el mensaje de error
que produce el login cuando se produce un intento fallido, por último, se añade “-V” para
ver cada uno de los intentos de Hydra en el output. En el caso de la página web testeada
el resultado es el de la Ilustración 57.
Vulnerable and outdated components. Para analizar este riesgo se ha utilizado una
herramienta que sea capaz de evaluar las dependencias de una página web, como es
“Dependency-check”. Para poder realizar este escáner es necesario un único parámetro
que es la ruta de la carpeta del código fuente de la página web, por lo tanto, para este
escáner se requiere la posesión del proyecto de la página web (Ilustración 62).
El parámetro introducido es simplemente “—scan” que sirve para indicar la ruta del
proyecto que se quiere analizar. Antes de mostrar la prueba, es necesario aclarar que en
esta prueba no ha sido necesario censurar la página web empleada como objetivo, ya
que el proyecto empleado pertenece al estudiante de Ingeniería Informática. En el caso
de la página web testeada, el resultado obtenido es el de la Ilustración 63 y la Ilustración
64.
Visto desde el código fuente del entorno, el comando ejecutado sería el siguiente:
Nmap <objetivo>
Este comando únicamente contiene la dirección del objetivo, ya que solo se pretende
obtener los puertos que se encuentran abiertos. En la página web testeada se han
encontrado los puertos mostrados en la Ilustración 66.
Whatweb <objetivo> -v
68 Capítulo 4 Experimentos y Resultados
mediante esta herramienta. Para realizar este escáner con theHarvester solo es
necesario pulsar el botón de “theHarvester” e introducir el objetivo (Ilustración 69).
En este capítulo se hablará sobre las conclusiones del trabajo realizado, pasando por unos
comentarios sobre el entorno, una reflexión sobre la importancia de la existencia de
entornos como el de este proyecto y se hablará sobre la utilidad del Grado en este
trabajo. Finalmente, se hablará en un apartado llamado “Trabajo Futuro” sobre las
posibles mejoras de este proyecto.
5.1 Conclusiones
A partir de los resultados obtenidos en los casos prácticos, se concluye que este proyecto
se ha finalizado con éxito, porque el entorno realizado es capaz de proporcionar una
manera sencilla de analizar una página web. Es cierto que el entorno tiene algunos puntos
que podrían mejorarse a largo plazo (se hablará de ellos en el apartado 5.2 titulado
“Trabajo Futuro”), pero se ha conseguido el resultado esperado. Lo que podría
considerarse como la principal desventaja de este entorno es que para leer los reportes
es necesario disponer de un mínimo de conocimientos, pero esto, en realidad, supone
una ventaja, ya que, facilitando el uso de estos escáneres, se consigue un acercamiento
más sencillo a la ciberseguridad, lo cual es muy importante ya no solo para las PYMES, a
las cuales va dirigido este entorno, si no para los particulares que no dispongan de tantos
conocimientos y decidan utilizarlo.
71
72 Capítulo 5 Conclusiones y Trabajo Futuro
Que la sociedad avance hacia un futuro totalmente ligado a las tecnologías, hace que un
entorno como el de este proyecto tome incluso más importancia, ya que las tecnologías
pueden facilitar la vida de las personas en muchos sentidos, pero si no se realiza un acto
de concienciación y no se toman las medidas pertinentes para aumentar la seguridad de
estas tecnologías, se estará avanzando hacia un futuro igual de caótico que tecnológico.
En este proyecto están plasmados, estos cinco años de experiencia y aprendizaje. Se han
tenido en cuenta varios conocimientos adquiridos durante el Grado de Ingeniería
Informática. Para comenzar, se ha tenido en cuenta el uso de metodologías de desarrollo,
las cuales fueron vistas durante la asignatura “Ingeniería del Software II”. Seguidamente,
para la creación de la interfaz del entorno, se ha tenido en cuenta la creación de
interfaces vista en Java, de la asignatura “Lenguajes de programación I” que, aunque, no
se haya utilizado para desarrollar el entorno, ha facilitado el aprendizaje del uso de
librería tkinter de Python, la cual presenta varias similitudes. A la hora de evitar que el
entorno se quedara bloqueado, se ha tenido en cuenta el manejo de hilos, de la
asignatura “Programación concurrente”. Por último, también se han tenido en cuenta
todos los conocimientos adquiridos durante la asignatura “Seguridad en redes”, donde
se vio terminología y conocimientos básicos de la ciberseguridad y algunas de las
herramientas utilizadas en los escáneres de este entorno, como son Nmap y
theHarvester.
Con este proyecto, también se han adquirido nuevos conocimientos. Se ha aprendido
sobre las metodologías empleadas en las pruebas de penetración web (metodologías de
OWASP) , sobre cómo una empresa establece sus políticas de ciberseguridad (ISO 27001),
sobre el uso metodologías de desarrollo ágiles (uso de una variante de SCRUM), sobre
cómo programar en Python 3 y sobre las principales vulnerabilidades que afectan a las
páginas web. Además, este trabajo no solo ha mejorado los conocimientos en
ciberseguridad, si no que ha aumentado el hambre de adquirir nuevos conocimientos de
cara a plantear un futuro profesional ligado a la ciberseguridad.
A lo largo de este trabajo se han aplicado varias competencias adquiridas a lo largo del
Grado. De entre todas las competencias se nombrarán las más destacadas y se justificará
su aplicación:
5.1 Conclusiones 73
Por último, se ilustrará mediante un diagrama de Gantt el tiempo dedicado a cada una
de las actividades realizadas durante el proyecto (Ilustración 71). En total se han dedicado
entorno a las 300 horas.
74 Capítulo 5 Conclusiones y Trabajo Futuro
75
76 Bibliografía
Bibliografía
[1] Avast, “El ataque del ransomware WannaCry: ¿qué es? | Avast.” Accessed: Jun.
08, 2022. [Online]. Available: https://www.avast.com/es-es/c-wannacry#topic-3
[2] i.blogs, “1366_2000.jpg (1200×794).”
https://i.blogs.es/3f5b3a/wannacrypt/1366_2000.jpg (accessed Jul. 02, 2022).
[3] Tekcrispy, “Estos han sido los hackeos más grandes de los últimos 5 años.”
Accessed: Jun. 08, 2022. [Online]. Available:
https://www.tekcrispy.com/2020/08/02/estos-han-sido-los-hackeos-mas-
grandes-de-los-ultimos-5-anos/
[4] Business Insider, “El impacto de los ciberdelitos ya es superior al 1% del PIB
mundial | Business Insider España.” Accessed: Jun. 08, 2022. [Online]. Available:
https://www.businessinsider.es/impacto-ciberdelitos-ya-superior-1-pib-
mundial-768519
[5] DSI UCLM, “Bloque 1. Introducción Tema 1.2. Introducción a la Seguridad
Informática y de la Información.” Accessed: Jul. 08, 2022. [Online]. Available:
https://campusvirtual.uclm.es/pluginfile.php/116353/mod_resource/content/3
/1.2%20-%20Seguridad%20-
%20Introduccio%CC%81n%20a%20la%20Seguridad.pdf
[6] INCIBE, “¿Qué es el pentesting? Auditando la seguridad de tus sistemas |
INCIBE.” https://www.incibe.es/protege-tu-empresa/blog/el-pentesting-
auditando-seguridad-tus-sistemas (accessed Jun. 08, 2022).
[7] OWASP, “4.0 Testing Guide”, Accessed: Jun. 08, 2022. [Online]. Available:
http://www.owasp.org
[8] OWASP, “OWASP Web Application Penetration Checklist Version 1.1.” [Online].
Available: http://csrc.nist.gov/publications/nistpubs/index.html#sp800-30
[9] OWASP, “OWASP Top 10:2021.” https://owasp.org/Top10/ (accessed Jun. 08,
2022).
Bibliografía 77
En esta sección se describirán una serie de pasos necesarios para la para instalación del
entorno del proyecto:
i) Para instalar la herramienta es necesario clonar el repositorio:
cd Apolo/Herramientas/
chmod +x Installer.sh
sudo ./Installer.sh
iii) Una vez instalado, para ejecutar la herramienta es necesario acceder al directorio:
cd ..
iv) Y ejecutar la herramienta:
python3 Apolo.py
83