Ufernandezr TFM0621 Memoria
Ufernandezr TFM0621 Memoria
Ufernandezr TFM0621 Memoria
código”
2
Abstract (in English, 250 words or less):
This essay aims to study different SAST, DAST, IAST and SCA tools mentioned
in the OWASP website. Three different complementing tools are selected,
offering a way to integrate them within the development and deployment cycle
of a WordPress-based website built with open source components by a small
team. The goal is to find a solution that doesn’t impact the workflow of the
development process, doesn’t require a high learning curve, and significantly
reduces the number of vulnerabilities.
To achieve the objective, the work is divided into two parts, first analysing the
strengths and weaknesses, performance and the way in which various tools
present their results. We then proceed to integrate the selected tools into the
SDLC, implementing a methodology to reduce false positives through a
pragmatic strategy of learning good security practices in an iterative way.
The proposed solution is composed entirely of open source tools backed by
OWASP itself: ASST (SAST), ZAP (DAST) and Dependency-Check (SCA).
There’s also a proposal of how to integrate each tool in the different phases and
how to take advantage of their results in a process of continuous improvement.
As an example, the results of analyses on a real website developed a year and
a half ago in WordPress are shown.
Despite the obvious differences in functionality and integration capabilities
between powerful commercial tools and these open source solutions, the latter
have proven to be able to adapt to the context with great potential for
improvement and learning opportunities.
3
Índice
. 1. Introducción....................................................................................................6
. 1.1 Contexto y justificación..............................................................................6
. 1.2 Objetivos del Trabajo.................................................................................7
. 1.3 Enfoque y método seguido........................................................................8
. 1.4 Planificación del Trabajo............................................................................9
. 1.5 Diagrama de Gantt..................................................................................11
. 1.6 Revisión del estado del arte....................................................................13
. 1.7 Análisis metodologías de desarrollo de software....................................15
. 1.8 Recursos y presupuesto del proyecto.....................................................22
. 1.9 Análisis de riesgos...................................................................................22
. 2. Fase de investigación...................................................................................24
. 2.1 Prácticas de programación seguras........................................................24
. 2.2 Herramientas para Pruebas de Seguridad de Aplicaciones Estáticas....29
.2.2.1 Análisis herramientas SAST............................................................29
.2.2.2 Selección herramientas SAST.........................................................31
. 2.3 Herramientas para Pruebas de Seguridad de Aplicaciones Dinámicas. 36
.2.3.1 Análisis herramientas DAST............................................................36
.2.3.2 Selección herramientas DAST.........................................................38
. 2.4 Herramientas para las Pruebas de Seguridad de Apps Interactivas......42
.2.4.1 Análisis herramientas IAST..............................................................42
.2.4.2 Selección herramientas IAST...........................................................43
. 2.5 Herramientas para el Análisis de la composición del software...............44
.2.5.1 Análisis herramientas SCA..............................................................44
.2.5.2 Selección herramientas SCA...........................................................45
. 3. Fase de implementación...............................................................................49
. 3.1 Integración herramientas en el ciclo de vida de desarrollo de un sistema
(SDLC).............................................................................................................49
.3.1.1 Metodología para reducir falsos positivos........................................49
.3.1.2 Integración herramientas en un entorno de desarrollo integrado....50
.3.1.3 Análisis de sistemas de control de versiones..................................51
.3.1.4 Integración herramientas en sistemas de control de versiones......55
.3.1.5 Propuesta de integración dentro del ciclo de desarrollo y despliegue
de una aplicación.......................................................................................61
. 4. Conclusiones y recomendaciones................................................................71
. 4.1 Conclusiones...........................................................................................71
. 4.2 Evaluación de objetivos alcanzados........................................................72
. 4.3 Recomendaciones y trabajo futuro..........................................................73
. 5. Bibliografía y fuentes consultadas................................................................74
4
Índice de ilustraciones
5
.1. Introducción
6
La industria ha puesto recursos y el foco en el testeo de vulnerabilidades
conocidas en aplicaciones que están ya publicadas y en funcionamiento, y se
ha dedicado poca atención en reforzar el proceso de desarrollo para ir
corrigiendo los fallos de programación y seguridad durante todas las fases del
ciclo de desarrollo. La falta de recursos (económicos, temporales, de
personal…) con las que muchos equipos de desarrollo afrontan sus proyectos,
y el hecho de que normalmente quien se dedica al desarrollo de software no ha
recibido formación sobre prácticas de programación seguras, obligan a la
búsqueda de soluciones que se integren de forma sencilla y automaticen lo
máximo posible el uso de este tipo de herramientas.
Si bien es cierto que en el movimiento del software libre prima más la libertad y
derechos de las personas que utilizan el software licenciado, frente al enfoque
del campo del código abierto que se basa más en los beneficios prácticos[6], a
lo largo de este documento se utilizará tanto el término “código abierto” como
“software libre” indistintamente para referirse al mismo tipo de soluciones
basadas en software que se distribuyen con licencias abiertas y permisivas con
respecto al código fuente y el uso que se puede hacer del mismo.
7
pequeños y medianos que utilizan componentes de código abierto, siendo
estos emprendimientos normalmente realizados por equipos compuestos por
pocas personas.
8
deben ser capaces de proporcionar información sencilla de interpretar a fin de
aplicar las correcciones necesarias.
9
3.1.1 Metodología para reducir falsos positivos 31/3/21 2/4/21 3
3.1.2 Integración herramientas en IDE 5/4/21 8/4/21 4
3.1.3 Análisis de sistemas de control de versiones (Git, 9/4/21 13/4/21 3
Subversion, Mercurial...)
3.1.4 Integración herramientas en sistemas de control de 14/4/21 19/4/21 4
versiones
3.1.5 Propuesta de integración en ciclo de desarrollo y 19/4/21 22/4/21 4
despliegue de una aplicación
3.2 Entrega del PEC3 27/4/21 Hito
3.2.1 Recopilar información sobre implementación 22/4/21 23/4/21 2
3.2.2 Redacción de la memoria 23/4/21 27/4/21 3
4 Fase final
4.1 Entrega del PEC4 1/6/21 Hito
4.1.1 Revisión y complementación de la documentación 28/4/21 5/5/21 6
4.1.2 Elaboración de conclusiones y recomendaciones 6/5/21 13/5/21 6
4.1.3 Revisión estilo 14/5/21 20/5/21 5
4.1.4 Revisión bibliográfica 21/5/21 25/5/21 3
4.1.5 Redacción de memoria final 25/5/21 31/5/21 5
4.1.6 Maquetación de memoria final 31/5/21 1/6/21 2
4.2 Preparación vídeo presentación de la memoria 2/6/21 8/6/21 Hito
10
.1.5 Diagrama de Gantt
Se incluye a continuación la planificación temporal del trabajo mediante un diagrama de Gantt dividido en dos páginas. En la primera
encontramos las fases de planificación e investigación, y en la segunda las fases de implementación y la fase final:
.1.6 Revisión del estado del arte
14
Las herramientas SCA analizan las dependencias que incluyen las aplicaciones
para garantizar que no cuentan con vulnerabilidades conocidas, ya que se
estima que hasta un 80% de los componentes que se incluyen en las
aplicaciones web pueden tener vulnerabilidades[12]. SCA, por tanto, está más
orientado a código de terceros, algo muy habitual y necesario en proyectos de
software libre donde se combinan muchos componentes a la hora de construir
una app. Desde OWASP nos ofrecen un chequeo de dependencias[13] basado
en los diez riesgos de seguridad más importantes en aplicaciones web
(OWASP Top 10[14]), y genera un perfil de riesgo que tendremos que analizar.
15
cada fase del ciclo, y teniendo en cuenta que tanto OWASP como este trabajo
de fin de máster se enfocan en soluciones web, vamos a contextualizar el ciclo
de vida del desarrollo de software a una web sencilla que incluya elementos
básicos (p.ej: una página de aterrizaje (landing page), la posibilidad de
registrarse, ofrecer funciones de ingreso (login) o de salida del sistema).
Una vez recogidos los requerimientos del proyecto, los distintos equipos que se
verán involucrados (desarrollo, frontend/backend, testers...), deben realizar un
análisis de estos requerimientos con el objetivo de poder planificarlos mejor.
Por ejemplo, para el requerimiento de registro, la aplicación web necesita un
campo de recogida de nombre, otro para contraseña, un botón para aceptar los
términos y condiciones del sitio web, el botón de envío, y la funcionalidad de
poder guardar todos estos datos en una base de datos. El o la responsable de
proyecto cogerá todas las funcionalidades identificadas en el análisis de
requerimientos y los integrará en un sistema de gestión de proyectos.
Para poder detectar este y otro tipo de fallos que conllevarían un coste enorme
(no tanto en corrección del bug, sino en daños y reputación si la web estuviera
en marcha ya que las vulnerabilidades se correlacionan significativamente con
una disminución del precio de las empresas[18]), el equipo de pruebas necesita
que no solo esté todo el código programado, sino que todo el sistema
(servidores, bases de datos…) esté integrado y en funcionamiento. Con el
sistema completo en marcha pueden contrastar los casos de prueba
planificados y validar el buen funcionamiento de cada requerimiento (es decir,
9 User Interface
16
que funcionan como se espera y que no tienen fallos o resultados
inesperados). Los fallos de diseño y programación detectados se suelen
integrar en un sistema de seguimiento de bugs, y el o la responsable de
proyecto irá asignando los fallos al equipo de programación, ingeniería o
diseño, a quienes les corresponda corregirlos. Los bugs suelen tener su propio
ciclo de vida, desde que se detectan hasta que se consideran cerrados o
corregidos.
Cuando la aplicación web está ya disponible para las personas que lo vayan a
utilizar, nos encontramos en la fase final de uso y mantenimiento. Además de
mantener los servidores y el entorno sobre el que corre la solución web, es
necesario monitorizar la carga de tráfico de red o el consumo de recursos de
memoria o cómputo provocado por el uso que realizan estas personas. En
aplicaciones web, tradicionalmente esto se suele traducir en ampliaciones en la
arquitectura del sistema para sostener mejor situaciones de sobrecarga,
añadiendo más memoria, incluyendo balanceadores de carga, mejorando la
respuesta de las consultas a la base de datos o ampliando el ancho de banda
con el que se accede a la web.
17
Es importante considerar que aunque la aplicación esté terminada, quienes la
usen puedan encontrar fallos del sistema que no hayan sido detectados por el
equipo de pruebas, por lo que dependiendo del tipo de contrato de
mantenimiento que se haya acordado, el equipo de desarrollo seguiría
recibiendo estos reportes e incluirlos en el ciclo de vida de los bugs.
Cuando las mencionadas fases del ciclo de vida del desarrollo de software
transcurren de forma secuencial, nos encontramos ante un modelo de
desarrollo conocido como “en cascada” o waterfall. Este modelo de gestión de
proyectos de software es uno de los más sencillos de implementar, y por eso
es habitual encontrarlo en desarrollos web que pueden determinar de forma
definitiva todos los requerimientos de la aplicación en la primera fase.
Este modelo requiere que cada fase se finalice antes de comenzar con la
siguiente, lo que obliga a invertir mucho tiempo en la fase de recogida de
requerimientos ya que una vez definidos, el modelo no va a permitir apenas
cambios en las necesidades que cubrirá la aplicación web, las funcionalidades
que incorporará o los problemas que trata de resolver.
18
La fase de pruebas es la única que permite algo de flexibilidad, ya que al poder
dividir las soluciones de software en distintos componentes, es posible llevar a
cabo el testeo de algunos elementos programados e integrados en el sistema
mientras que otros elementos siguen su implementación. Aunque el modelo de
cascada permita dividir la implementación, el sistema en su totalidad debe ser
verificado al finalizar completamente la fase de implementación.
Para el tipo de proyectos web que estamos planteando en este trabajo, las
fases de despliegue y la de mantenimiento transcurrirían de forma secuencial.
19
La metodología ágil dentro de un desarrollo de software busca dividir el
proyecto en versiones limitadas que se conocen como “producto viable mínimo”
o MVP[19]. El MVP se refiere a la versión más pequeña y simple de lo que el
proyecto web trata de ofrecer, y el objetivo es tener lanzada cuanto antes esa
versión mínima pero funcional para poder obtener el retorno sobre dudas,
fallos, sugerencias de mejora o ver qué funciona mejor o peor entre las
funcionalidades implementadas.
Esta filosofía suele ser seguida por multitud de equipos de desarrollo con gran
pasión y alto grado de implicación, hasta el punto de que existe la posibilidad
de mostrar lealtad firmando[20] lo que se conoce como el “Manifiesto para el
desarrollo ágil de software”[21]:
Las metodologías ágiles permiten construir cierta tolerancia a los errores que
se cometen durante el desarrollo del software, pudiendo aprender de ellos,
pero siempre con el objetivo de que después de cada iteración y a medida que
nos acercamos a la versión final/completa, se cometan menos errores y se
solucionen más rápido.
Para conseguir este marco de trabajo, las metodologías ágiles se basan en tres
características principales: los sprints, el scrum master y los stand ups.
20
Un sprint[23] es una iteración de todo un ciclo dentro de un desarrollo ágil, y
normalmente transcurre en un breve periodo de tiempo (p.ej, dos o tres
semanas). En un breve sprint podemos ver todas las fases que vemos en el
tradicional ciclo de vida del desarrollo de software, pero cada fase tiene una
duración más corta y el retorno de quienes usen y testeen la app, y la
consecuente respuesta del equipo de desarrollo y diseño, es cada vez más
rápida y ajustada. En cada sprint se atiende un número de requisitos de los
cuales se indica también cuándo una tarea se considera finalizada, cuánto
debería durar su implementación y si depende de otras tareas o características
para ser implementado. El seguimiento de los requisitos se hace a través de
tickets, y las tareas que representan se gestionan a través de sistemas de
seguimiento de incidencias como JIRA[24] o Pivotal Tracker[25].
La planificación de los sprints tiene en cuenta que a veces una iteración puede
durar más o menos de lo previsto, y al final de cada sprint se determinan los
requerimientos que se van a implementar en la siguiente iteración. Esta fase
final del sprint se conoce como retrospectiva, y es el momento que se
aprovecha para analizar qué fue bien durante la iteración y qué se puede
mejorar.
21
.1.8 Recursos y presupuesto del proyecto
El presupuesto total del proyecto para los cinco meses en los que se desarrolla
es de 995€. No hay coste adicional por software ya que se instalarán y
analizarán en el ordenador personal tan solo las herramientas disponibles de
forma libre o gratuita, y el sistema operativo utilizado en el ordenador personal
será GNU/Linux, a través de la distribución Ubuntu.
22
◦ Se podrá analizar la herramienta en base a la documentación,
experiencias y revisiones realizados por terceros.
• Que las herramientas automatizadas creen una falsa sensación de
seguridad, y promueva al equipo de desarrollo a no implementar de
forma pro-activa prácticas de programación segura pensando que sus
errores se van a detectar por las herramientas. (RIESGO MEDIO)
◦ Se planteará una guía de buenas prácticas para equilibrar los
resultados de las auditorías con la necesidad de mantener código
seguro. Los resultados de las auditorías deben servir de aprendizaje
también.
• Que la propuesta de herramientas y procedimientos acabe generando
un backlog12 de vulnerabilidades inmanejable (p.ej, con demasiados
falsos positivos). (RIESGO ALTO)
◦ Se seleccionarán aquellas herramientas que ayuden a reducir el
número de falsos positivos, y se propondrá la integración de las
soluciones SAST/DAST/IAST o SCA en ciclos de desarrollo más
cortos y ágiles a fin de reducir el backlog de vulnerabilidades y
facilitar su tratamiento.
23
.2. Fase de investigación
.2.1 Prácticas de programación seguras
Para cumplir con su objetivo de ayudar a los sitios web y a personas expertas
en seguridad a proteger las aplicaciones web de los ciberataques, la OWASP
ofrece una serie de recomendaciones relacionadas con la programación
segura[28]. Para ello proponen una lista de verificación (checklist) que puede
integrarse en el ciclo de desarrollo de distintos tipos de proyectos de software,
y son lo suficientemente genéricos como para tenerlos en cuenta
independientemente de los lenguajes de programación usados en el proyecto.
Dado que las herramientas SAST, DAST, IAST o SCA arrojan resultados que
requieren cambios en el código fuente, es importante conocer buenas prácticas
de programación segura para poder implementar las correcciones necesarias,
así como saber identificar qué parte del código y cómo se debe modificar para
evitar las vulnerabilidades y exploits detectados en algunas herramientas.
La programación segura es condición sine qua non para lograr que el software
mantenga sus principales características de seguridad entorno a la
confidencialidad, integridad y disponibilidad de los datos. La lista de verificación
que propone OWASP está pensada para reducir las vulnerabilidades más
frecuentes en proyectos de software, y tienen estrecha relación con los diez
riesgos de seguridad más importantes que enumeran cada año para las
aplicaciones web (OWASP Top 10).
Ilustración 5: Comparativa de riesgos principales para webs en 2013 vs 2017 (fuente: OWASP)
24
mal análisis de requerimientos, un error en el diseño de la arquitectura de
software, o por la falta de una política de mantenimiento y actualización
adecuada de los distintos componentes que comprenden el proyecto.
Cada uno de los catorce grupos aglutina varios pasos que se debería tomar
para verificar que se han incorporado e implementado las recomendaciones a
nuestro proyecto de software. En este apartado, mencionaremos brevemente
algunos de los aspectos que habría que tener en cuenta a la hora de
desarrollar un sitio web securizado.
1. Validación de entradas
2. Codificación de salidas
Se recomienda codificar todos los caracteres salvo que sean reconocidos como
seguros por el interprete de destino, y esta codificación debe hacerse en un
entorno seguro (p.ej: en el servidor). Para securizar datos potencialmente
25
peligrosos y evitar inyecciones de código[29], se utilizan técnicas para
sanitizarlos, eliminando, reemplazando, codificando o invocando una
interpretación alternativa de los mismos (i.e. escapando).
4. Administración de sesiones
El sistema solo debe aceptar los controles del servidor o del framework para la
administración de sesiones. Los identificadores se deben crear en un servidor
de confianza y deben ser lo suficientemente aleatorios como para no predecir
el patrón.
26
5. Control de Acceso
6. Prácticas Criptográficas
8. Protección de datos
27
9. Seguridad en las comunicaciones
28
Conviene liberar recursos de forma directa (sin confiar solo en el recolector de
basura17) y evitar el uso de primitivas con vulnerabilidades conocidas.
Utilizar siempre código fiable y probado, así como las APIs oficiales o de
demostrado reconocimiento, evitando aquellas que invoquen una línea de
comandos (shell) para ejecutar otros comandos en el sistema operativo. Para
verificar la integridad de bibliotecas, ejecutables y otros archivos utilizados se
pueden usar funciones hash y comparar con los valores oficiales de las
versiones utilizadas.
29
De entre los puntos fuertes de las herramientas SAST podemos destacar la
mencionada integración con los IDE, así como la posibilidad de realizar análisis
frecuentes sobre todo el código fuente para poder estar informado en el día a
día de los posibles errores de seguridad. Normalmente, las herramientas SAST
ofrecen feedback útil y rápido de interpretar, ya que resaltan directamente la
línea de código en el IDE o indican en qué fichero y línea se encuentra el error.
Son especialmente útiles para encontrar variables donde puedan explotarse
desbordamientos de búfer o realizarse inyecciones SQL.
30
.2.2.2 Selección herramientas SAST
Agnitio Security Code Review Tool
31
Bandit
32
SearchDiggity 3.1
33
Horusec
Ilustración 10: Informe visual del panel de gestión de Horusec (Fuente: Horusec)
34
Automated Software Security Toolkit
Ilustración 11: Informe en formato HTML del analisis de ASST (Fuente: OWASP)
35
.2.3 Herramientas para Pruebas de Seguridad de Aplicaciones Dinámicas
En las aplicaciones web, las vulnerabilidades más frecuentes suelen ser las
inyecciones SQL o de otros comandos, las configuraciones inseguras del
servidor, o los ataques de tipo XSS19. Una herramienta DAST intenta replicar
de forma automatizada el trabajo que haría una persona con formación en
ciber-seguridad que realiza un prueba manual de penetración (pentesting) para
buscar vulnerabilidades en la aplicación.
36
Existe también un proyecto llamado WAVSEP (Web Application Vulnerability
Scanner Evaluation Project) que analiza cuatro herramientas DAST de código
abierto[51], dos de las cuales aparecen en el listado de OWASP.
Frente a los análisis estáticos, que tienen que estar diseñados para lenguajes
de programación concretos, DAST tiene la ventaja de que escanea una
aplicación web independientemente de los lenguajes y frameworks sobre el que
se haya construido. Es por eso que se utilizan mucho como herramientas de
pentesting22, pero queda en manos de la persona experta en seguridad en
saber configurarlo e interpretar después los resultados.
Como puntos débiles debemos destacar el alto número de falsos positivos que
arrojan las herramientas DAST, el extenso tiempo requerido para realizar cada
análisis, y la necesidad de realizar el análisis al final del ciclo de desarrollo.
Como no encuentran fallos en líneas concretas del código, estas herramientas
tampoco son capaces de dar consejos de programación segura al equipo de
desarrollo, y por eso muchas veces se complementan los análisis DAST con
otro tipo de herramientas y medidas de seguridad. Es común combinar
herramientas DAST y SAST, o utilizar una solución IAST que ya incorpore parte
de las dos metodologías en una misma herramienta.
Al realizar sus análisis sobre las URL descubiertas por la araña, es posible
también que no encuentre todos los recursos que habría que analizar por lo
que sería necesario incluir estas direcciones a mano. Existen también muchos
riesgos que no se pueden identificar desde el exterior, como ocurre con los
ataques a ciegas por inyección SQL o cuando la vulnerabilidad no está
identificada públicamente (conocidos como 0-day[52])
37
.2.3.2 Selección herramientas DAST
Arachni
38
Nikto
Ilustración 14: Inicio análisis de herramienta Nikto por línea de comandos (Fuente: CyberX)
39
Web Application Attack and Audit Framework (W3af)
40
Zed Attack Proxy (ZAP)
41
.2.4 Herramientas para las Pruebas de Seguridad de Apps Interactivas
Otra de las ventajas es su adecuación para probar APIs, ya que estos suelen
tener las pruebas funcionales ya automatizadas.
Las herramientas IAST tampoco impiden que ocurra la explotación, por lo que
estando activos y a la escucha, si hay un ataque real, lo detectaría y reportaría,
pero no lo bloquearía. Por eso a veces se usan también para analizar el tráfico,
pero si el objetivo es proteger el sistema es mejor soluciones de auto-
protección de la aplicación en tiempo de ejecución (RASP[59]), ya que no solo
son capaces de monitorizar el tráfico en tiempo real, sino también bloquear los
ataques.
OWASP sólo menciona en su web una herramienta IAST que es gratuita pero
no de código abierto, pero sin embargo, la herramienta Enlightn listada en la
sección SAST de OWASP puede considerarse un híbrido entre SAST+DAST e
IAST, por lo que se procederá a analizar la misma en esta sección.
42
.2.4.2 Selección herramientas IAST
Enlightn
43
.2.5 Herramientas para el Análisis de la composición del software
Ilustración 18: La flecha indica que una licencia se puede combinar con la otra, adoptando en
conjunto la licencia de la segunda[61] (Fuente: Wikipedia)
44
.2.5.2 Selección herramientas SCA
OWASP Dependency-Check
45
WhiteSource Renovate
46
Sonatype DepShield
47
OSS Review Toolkit
Ilustración 22: Resultados análisis con problemas detectados con varias licencias (fuente: GitHub)
27 Fichero donde se menciona qué partes del código fuente tienen una licencia diferente.
48
.3. Fase de implementación
.3.1 Integración herramientas en el ciclo de vida de desarrollo de un
sistema (SDLC)
Tanto las pruebas de “caja blanca” como de “caja negra”, así como las
comprobaciones en las dependencias de un proyecto de software arrojarán
muchos resultados que o bien se referirán a vulnerabilidades que no afectan al
proyecto, son erróneas o exageradas, son improbables y difíciles de explotar, o
no podemos abordar su corrección.
Las herramientas SAST, DAST, IAST y SCA que se utilicen, también han de
ser configuradas en la medida que sea posible para acotar el tipo de
vulnerabilidades que se busquen, a fin de que se ajusten a la arquitectura y la
realidad del proyecto web que queramos securizar. En las herramientas que lo
permitan, los resultados que se hayan considerado como falsos positivos en
una iteración, también se deberán marcar o añadir a listas blancas para evitar
que vuelvan a surgir en futuras iteraciones y análisis. A su vez, esto requiere
que en la planificación, en algún momento haya que volver a analizar los falsos
positivos a fin de evitar que por error se hayan marcado como tal cuando las
herramientas estuvieran detectando vulnerabilidades de suficiente importancia.
También se pueden combinar dos herramientas del mismo tipo, integrando una
en cada ciclo y dejando la otra para cuando se llegue a un hito (p.ej, antes de
publicar una nueva release de la aplicación o cada cierto número de
iteraciones).
49
aspectos que la OWASP recomienda en este ámbito para las aplicaciones web,
y cada ciertos ciclos sería conveniente verificar el grado de acierto que se ha
tenido tanto en la identificación de falsos positivos, como en la reducción total
de vulnerabilidades detectadas debido a la mejora de la calidad del código
seguro. Este proceso iterativo combinado ayudará a reducir el backlog de
vulnerabilidades y facilitará su tratamiento.
50
herramientas IAST analizadas, solo vemos que OSS Review Toolkit se integra
con el IDE JetBrains a través del plugin Kotest; al igual que con las
herramientas SAST analizadas, el resto tienen mayor integración con los
sistemas de control de versiones. IAST tiene que integrar elementos en el
código para poder ejecutarse con la aplicación y así analizar y contextualizar
los errores detectados; esto limita aún más la oferta de soluciones IAST
disponibles ya que son soluciones muy especificas.
51
Debido a su diseño, estos sistemas ofrecen funcionalidades adicionales que
facilitan la gestión del código fuente convirtiéndolas en una herramienta muy
potente. Entre las funcionalidades, podríamos destacar las siguientes:
52
que se sincroniza desde el tronco o rama principal a un directorio local y desde
el que se trabajará modificando los ficheros.
Es el más antiguo dentro del mundo del código abierto y por tanto, uno de los
más conocidos en entornos veteranos. Al igual que otros sistemas, CVS guarda
snapshots o copias completas del proyecto en un momento determinado
(podría ser análogo a una copia de seguridad).
53
Apache Subversion (SVN)[69]
Sin embargo, es más lento que CVS a la hora de comparar distintas versiones
de los ficheros, y no permite el control de versiones distribuido donde pueda
haber más de un repositorio (uno por cada cliente) que luego se sincronicen
con un repositorio central. SVN, al igual que CVS, también tiene problemas
cuando se renombran o mueven ficheros y directorios, ya que no se suele
guardar como una nueva versión.
Mercurial[71]
54
Es un sistema ligero que tiene buen rendimiento y ofrece escalabilidad, e
incorpora una interfaz web que facilita su gestión. Sin embargo, no permite
fusionar desde dos ramas padre30 diferentes.
Quizá la estrategia de ser sencillo y similar a SVN es la que hace que Mercurial
sea más modesto que otros sistemas distribuidos como Git, que veremos a
continuación.
Git[72]
Git fue desarrollado por Linus Torvalds (autor inicial del kernel de Linux)
cuando la empresa detrás de BitKeeper[73], el sistema de control de versiones
propietario que se usaba para gestionar el código fuente de Linux, empezó a
poner impedimentos a las condiciones con las que el equipo de desarrollo del
kernel de Linux podía usar el mismo de forma gratuita[74].
55
más completo, más compatible con otras herramientas, y más popular entre la
comunidad de desarrolladores de código abierto. Muchos de los proyectos de
software libre se encuentran en GitHub[77], plataforma de alojamiento de
código para el control de versiones y la colaboración propiedad de
Microsoft[78], y eso facilita encontrar en Internet de forma gratuita
documentación, tutoriales, ejemplos y foros donde poder resolver dudas. Del
grupo de soluciones SAST analizadas, podemos integrar con repositorios Git
las herramientas Bandit y Horusec.
Por su parte, Automated Software Security Toolkit (ASST) está pensado para
ser instalado en un entorno XAMPP y aunque tampoco se integra con ningún
sistema de control de versiones, el hecho de que busque vulnerabilidades web
basados en el Top 10 de OWASP lo hace muy atractivo para aplicaciones web
que corran también sobre un entorno XAMPP (aunque de momento solo para
aquellos proyectos basados en PHP ya que el sporte para Perl o Python aún no
se ha añadido).
$ wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key |
sudo apt-key add -
56
$ sudo systemctl start jenkins
on: [push]
jobs:
horusec-security:
57
name: horusec-security
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v2
- name: Running Horusec Security
run: |
curl -fsSL https://horusec.io/bin/install.sh | bash
horusec start -p="./" -e="true"
58
Con la herramienta ya instalada, debemos ir al apartado de repositorios de la
web de Enlightn, que una vez lo autoricemos, posibilitará que podamos
integrarla en los repositorios que le indiquemos. Es necesario tener una cuenta
(gratuita o de pago) para realizar este primer paso. El segundo paso, tal como
hemos visto con Horusec, requiere añadir una acción a GitHub con el siguiente
código YAML:
- name: Run Enlightn Checks and Trigger the Enlightn Bot
if: ${{ github.event_name == 'pull_request' }}
env:
ENLIGHTN_USERNAME: ${{ secrets.ENLIGHTN_USERNAME }}
ENLIGHTN_API_TOKEN: ${{ secrets.ENLIGHTN_API_TOKEN }}
ENLIGHTN_GITHUB_REPO: ${{ github.repository }}
run: |
cp .env.example .env
php artisan enlightn --ci --report --review --issue=$
{{ github.event.number }}
Para que la acción dentro de GitHub sea funcional, hay que añadir las
credenciales de Enlightn y la URL del repositorio en el fichero
config/enlightn.php. Con la acción configurada, el Bot será capaz de analizar el
código y añadir comentarios siempre que se haga una petición de validación
(pull request) contra el repositorio. En este tipo de peticiones, el cliente desde
donde se han realizado modificaciones en el código propone que esos cambios
se revisen y acepten por otra persona a fin de que esa contribución termine
fusionada en la rama del repositorio desde el que se esté trabajando.
El Bot que analiza el código utiliza como backend un servidor de Enlightn para
funcionar, pero no se envía código sino metadatos necesarios.
De las cuatro herramientas SCA analizadas, OSS Review Toolkit es la única
que no se puede integrar en algún sistema de control de versiones para
automatizar el análisis, pero como veíamos en el apartado 3.1.2, era la única
herramienta SCA que se se integraba con un entorno de desarrollo integrado.
Para poder crear una acción en GitLab similar a las que hemos creado en
GitHub, se utiliza la imagen Docker que incluye la aplicación y un código YAML
que se inserta en GitLab como Jobs[85]. Docker es una plataforma abierta para
distribuir aplicaciones. En la web de GitLab diponemos de una imagen de
Docker con la aplicación necesaria, una especie de copia completa de la
aplicación que al ser iniciada generaría un contenedor 33.
33 Paquete que incluye todos los elementos necesarios para ejecutar la aplicación en
cualquier sistema operativo compatible con Docker.
59
En el código YAML podemos ver cómo se ejecuta el script dependency-
check.sh que está incluido en la imagen de Docker ubicada en GitLab. El script
escanea el proyecto entero y comprueba la puntuación CVSS de las
vulnerabilidades que va encontrando, generando un informe en formato JSON
como salida.
owasp_dependency_check:
image:
name: registry.gitlab.com/gitlab-ci-utils/docker-dependency-
check:latest
entrypoint: [""]
stage: test
script:
# Job will scan the project root folder and fail if any
vulnerabilities with CVSS > 0 are found
- /usr/share/dependency-check/bin/dependency-check.sh --scan "./" --
format ALL --project "$CI_PROJECT_NAME" --failOnCVSS 0
# Dependency Check will only fail the job based on CVSS scores, and
in some cases vulnerabilities do not
# have CVSS scores (e.g. those from NPM audit), so they don't cause
failure. To fail for any vulnerabilities
# grep the resulting report for any "vulnerabilities" sections and
exit if any are found (count > 0).
- if [ $(grep -c "vulnerabilities" dependency-check-report.json) -gt
0 ]; then exit 2; fi
allow_failure: true
artifacts:
when: always
paths:
# Save the HTML and JSON report artifacts
- "./dependency-check-report.html"
- "./dependency-check-report.json"
60
Ilustración 29: Instalación via web de la App de renovate para GitHub (fuente: GitHub)
La última herramienta SCA, Sonatype DepShield, también tiene app para
GitHub[86] para integrarla a nuestros repositorios. La app ofrece monitorización
continua y genera propuestas donde menciona las vulnerabilidades de
seguridad encontradas.
61
La “ensalada” de herramientas seleccionada está basada en soluciones
implementadas y adoptadas oficialmente por la propia OWASP. Aunque alguna
de ellas aún no tenga una implementación y nivel de madurez suficiente como
para competir con otras herramientas analizadas, el apoyo y acompañamiento
de la fundación OWASP ayudarán que los proyectos tengan visibilidad y
reconocimiento dentro de la comunidad que sustenta y afronta la
ciberseguridad, y sigan mejorando y creciendo. Este apoyo para con su
mantenimiento es esencial ya que todas estas herramientas dejan de ser útiles
una vez se encuentren desactualizadas y dejen de encontrar las
vulnerabilidades más recientes.
Ilustración 30: Esquema de todo el ciclo de vida integrando soluciones para securizarla
62
Como veíamos en en ella análisis de metodologías de desarrollo de software
del apartado 1.7, la ventaja de la metodología ágil es que podemos abordar el
proyecto de forma iterativa reduciendo el alcance de las funcionalidades del
sitio web y por tanto, el número de errores y vulnerabilidades que habría que
detectar y corregir en cada iteración. De esta forma, el tratamiento de los falsos
positivos se hace más manejable, y se pueden incorporar las recomendaciones
planteadas en el apartado 3.1.1 para reducirlos.
Fase de planificación
63
resultados que arrojaron las herramientas SAST, DAST y SCA, y la forma en
que se corrigieron o atendieron las recomendaciones.
Fase de diseño
Fase de implementación
$ sudo mysql_secure_installation
$ sudo n 12.13.0
A partir de ahora, basta con poner nuestro proyecto web en la carpeta htdocs
(en Ubuntu está en /var/www/html) junto con la propia herramienta ASST que
podemos descargar/clonar con git:
64
Dentro de la carpeta ASST tenemos que configurar el fichero config.js
indicando en la variable DEFAULT_PROJECT_PATH_TO_SCAN la ruta
(relativa o absoluta) donde se encuentra nuestro proyecto Web, y en el fichero
config_php_lang.js habrá que especifirar algunos parámetros referentes a
nuestro servidor MySQL (IP, contraseña de root…). Una vez configurado,
lanzamos el script para realizar el análisis:
65
Ilustración 32: Informe completo generado por ASST
Como se puede apreciar en parte en la ilustración de arriba, la mayoría de las
vulnerabilidades de inyección detectadas están en los ficheros PHP que vienen
con WordPress, y el resto se encuentran en los plugins que también se
instalaron a la hora de construir la web. El proyecto web analizado fue
desarrollado hace más de un año y la versión de WordPress sobre la que está
construida la web es la 5.3.x, de la que se conocen algunas vulnerabilidades.
La última versión de WordPress, la 5.7.2, corrige muchos de los problemas
encontrados pero para poder actualizar habría que comprobar que todos los
componentes y plugins con los que ha sido diseñada la web, así como la
plantilla que se ha usado, siguen siendo compatibles con la última versión de
WordPress. En total, esta página web contaba con 937 posibles
vulnerabilidades de inyección.
66
instalados), 5 Vulnerabilidades de inyección de entidades externas XML (todos
ellos en varios plugins instalados en Wordpress) o hasta 2278 vulnerabilidades
de secuencias de comandos en sitios cruzados (XSS).
67
Ilustración 35: Informe completo producido por dependency-check
68
Los resultados obtenidos en ambos análisis deben ser tratados
apropiadamente, añadiendo aquellos errores que deban ser corregidos a un
sistema de seguimiento de bugs, y aprovechando los escenarios vulnerables
encontrados para preparar los casos de prueba para la siguiente fase:
Fase de pruebas
En esta fase, con el proyecto web en una versión MPV, es cuando lanzamos
nuestro análisis DAST. La instalación de OWASP ZAP es también trivial. Nos
descargamos el script instalador desde https://www.zaproxy.org/download/ y lo
instalamos con permisos de administrador:
$ chmod +x ZAP_2_10_0_unix.sh
$ sudo ./ZAP_2_10_0_unix.sh
69
Ilustración 38: Resultado del análisis DAST de OWASP ZAP
70
.4. Conclusiones y recomendaciones
Este último capítulo recoge las conclusiones que se han obtenido luego de
haber realizado todo el análisis e implementación de este trabajo de fin de
máster. También se incluye el grado de objetivos que se han cumplido, así
como algunas propuestas que se pudieran realizar a futuro partiendo del
trabajo realizado hasta ahora.
.4.1 Conclusiones
71
vulnerabilidades detectadas, ampliando mucho la horquilla de la que
disponemos para minimizar el impacto. Eso sí, a mayor dedicación e
integración con todas las fases del SDLC, mayores garantías de que el
producto final estará mejor securizado.
Sin lugar a dudas, este trabajo ha sido un ejercicio tanto exigente como
provechoso, y ha reforzado mi convicción de que proyectos ágiles, abiertos y
colaborativos son la base que hace crecer Internet y el mundo de las
aplicaciones y herramientas de software al ofrecer un espacio en el que todas
las personas, organizaciones e iniciativas se puedan sumar
independientemente de sus ingresos, presupuestos y expectativas.
72
robusta como para ser incorporada tal como está en el desarrollo de muchos
proyectos web.
Sería necesario también integrar la solución propuesta en este trabajo con los
sistemas de control de versiones para comprobar que este tipo de herramientas
facilitan la detección y corrección de ciertas vulnerabilidades sin causar gran
disrupción al ritmo y carga de trabajo.
73
5 Bibliografía y fuentes consultadas
. .
En este apartado se listan los artículos, páginas web e informes que se han
consultado durante la elaboración de este trabajo. Los enlaces a las páginas
web citadas a lo largo de este documento estaban activas y con la información
referenciada hasta la última comprobación realizada durante el mes de mayo
de 2021.
[3] Bird, J (2015) 2015 State of Application Security: Closing the Gap, SANS Institute:
Reading Room - Analyst Papers.
[4] Relative Cost of Fixing Defects: Dawson, M., Burrell, D., Rahim, E., & Brewster, S.
(2010). Integrating Software Assurance into the Software Development Life Cycle
(SDLC). Journal of Information Systems Technology and Planning, 3, 49-53.
[5] Defect Prevention: Reducing Costs and Enhancing Quality. (2010, febrero 26).
ISixSigma. https://www.isixsigma.com/tools-templates/software/defect-prevention-
reducing-costs-and-enhancing-quality/
[6] FLOSS and FOSS - GNU Project—Free Software Foundation. (s. f.). Recuperado 22 de
mayo de 2021, de https://www.gnu.org/philosophy/floss-and-foss.en.html
[8] Usage Statistics and Market Share of WordPress, May 2021. (s. f.). Recuperado 22 de
mayo de 2021, de https://w3techs.com/technologies/details/cm-wordpress
[9] Source Code Analysis Tools | OWASP. (s. f.). Recuperado 22 de mayo de 2021, de
https://owasp.org/www-community/Source_Code_Analysis_Tools
[11] OWASP ZAP Zed Attack Proxy. The ZAP Homepage. (s. f.). Recuperado 22 de mayo
de 2021, de https://www.zaproxy.org/
[12] Synopsys (2021) Open Source Security And Risk Analysis Report (OSSRA)
https://www.synopsys.com/software-integrity/resources/analyst-reports/open-source-
security-risk-analysis.html
[14] OWASP Top Ten Web Application Security Risks | OWASP. (s. f.). Recuperado 22 de
mayo de 2021, de https://owasp.org/www-project-top-ten
74
[15] Build Security In | CISA. (s. f.). Recuperado 22 de mayo de 2021, de https://us-
cert.cisa.gov/bsi
[18] Cavusoglu, H., Cavusoglu, H. & Zhang, J. (2006) Economics of Security Patch
Management, The Fifth Workshop on the Economics of Information Security (WEIS
2006)
[19] What is a Minimum Viable Product (MVP)? - Definition from Techopedia. (s. f.).
Techopedia.Com. Recuperado 22 de mayo de 2021, de
http://www.techopedia.com/definition/27809/minimum-viable-product-mvp
[20] Independent Signatories of The Manifesto for Agile Software Development. (s. f.).
Recuperado 22 de mayo de 2021, de https://agilemanifesto.org/display/index.html
[21] Manifiesto por el Desarrollo Ágil de Software. (s. f.). Recuperado 22 de mayo de 2021,
de https://agilemanifesto.org/iso/es/manifesto.html
[22] The 2020 Scrum Guide | Scrum Definition. (s. f.). Recuperado 22 de mayo de 2021, de
https://scrumguides.org/scrum-guide.html
[23] What are sprints? Atlassian. (s. f.). Sprints. Atlassian. Recuperado 22 de mayo de
2021, de https://www.atlassian.com/agile/scrum/sprints
[24] Atlassian. (s. f.). Jira | Issue & Project Tracking Software. Atlassian. Recuperado 22 de
mayo de 2021, de https://www.atlassian.com/software/jira
[26] Atlassian. (s. f.). Standups for agile teams. Atlassian. Recuperado 22 de mayo de
2021, de https://www.atlassian.com/agile/scrum/standups
[27] Eric S. Raymond (1999) Release Early, Release Often. The Cathedral and the Bazaar,
(s. f.). Recuperado 22 de mayo de 2021, de http://www.catb.org/~esr/writings/cathedral-
bazaar/cathedral-bazaar/ar01s04.html
[32] Adding Salt to Hashing: A Better Way to Store Passwords. (s. f.). Auth0 - Blog.
Recuperado 22 de mayo de 2021, de https://auth0.com/blog/adding-salt-to-hashing-a-
better-way-to-store-passwords/
[33] A10:2017-Insufficient Logging & Monitoring | OWASP. (s. f.). Recuperado 22 de mayo
de 2021, de https://owasp.org/www-project-top-ten/2017/A10_2017-
Insufficient_Logging%2526Monitoring.html
75
[34] General Data Protection Regulation (GDPR) – Official Legal Text. (s. f.). General Data
Protection Regulation (GDPR). Recuperado 22 de mayo de 2021, de https://gdpr-
info.eu/
[35] Cross Site Request Forgery (CSRF) | OWASP Foundation. (s. f.). Recuperado 22 de
mayo de 2021, de https://owasp.org/www-community/attacks/csrf
[36] Source Code Analysis Tools | OWASP. (s. f.). Recuperado 22 de mayo de 2021, de
https://owasp.org/www-community/Source_Code_Analysis_Tools
[37] Inc, E. F. (s. f.). The Community for Open Innovation and Collaboration | The Eclipse
Foundation. Recuperado 22 de mayo de 2021, de https://www.eclipse.org/
[40] Beaton, W. (s. f.). Eclipse Public License 2.0 | The Eclipse Foundation. Recuperado 22
de mayo de 2021, de https://www.eclipse.org/legal/epl-2.0/
[41] The GNU General Public License v3.0—GNU Project—Free Software Foundation.
(s. f.). Recuperado 22 de mayo de 2021, de https://www.gnu.org/licenses/gpl-
3.0.en.html
[42] T. pip. (s. f.). pip: The PyPA recommended tool for installing Python packages. (21.1.2)
[Python]. Recuperado 22 de mayo de 2021, de https://pip.pypa.io/
[45] Google Hacking Diggity Project Resources—Bishop Fox. (s. f.). Bishop Fox
Resources. Recuperado 22 de mayo de 2021, de
https://resources.bishopfox.com/resources/tools/google-hacking-diggity/
[51] Chen, S. (2017, noviembre 10). Security Tools Benchmarking: WAVSEP 2017/2018 -
Evaluating DAST against PT/SDL Challenges. Security Tools Benchmarking.
https://sectooladdict.blogspot.com/2017/11/wavsep-2017-evaluating-dast-against.html
[52] Zero-day (computing). (2021). En Wikipedia. https://en.wikipedia.org/wiki/Zero-
day_(computing)
[53] Arachni License. (2014, agosto 17). Arachni - Web Application Security Scanner
Framework. https://www.arachni-scanner.com/license/
76
[54] Arachni is no longer maintained. (2020, enero 28). Arachni - Web Application Security
Scanner Framework. https://www.arachni-scanner.com/blog/arachni-is-no-longer-
maintained/
[55] GNU General Public License v2.0—GNU Project—Free Software Foundation. (s. f.).
Recuperado 22 de mayo de 2021, de https://www.gnu.org/licenses/old-licenses/gpl-
2.0.en.html
[60] GNU Lesser General Public License v3.0—GNU Project—Free Software Foundation.
(s. f.). Recuperado 22 de mayo de 2021, de https://www.gnu.org/licenses/lgpl-
3.0.en.html
[61] The Free-Libre / Open Source Software (FLOSS) License Slide. (s. f.). Recuperado 22
de mayo de 2021, de https://dwheeler.com/essays/floss-license-slide.html
[64] GNU Affero General Public License—GNU Project—Free Software Foundation. (s. f.).
Recuperado 22 de mayo de 2021, de https://www.gnu.org/licenses/agpl-3.0.en.html
[65] Inc, S. (s. f.). Sonatype OSS Index. Sonatype OSS Index. Recuperado 22 de mayo de
2021, de https://ossindex.sonatype.org/
[68] CVS - Open Source Version Control. (s. f.). Recuperado 22 de mayo de 2021, de
https://www.nongnu.org/cvs/
[70] Understanding Open Source and Free Software Licenses. (2018, noviembre 15).
Kwork Innovations. https://www.kwork.me/open-source-free-software-licenses/
77
[74] A Git Origin Story | Linux Journal. (s. f.). Recuperado 22 de mayo de 2021, de
https://www.linuxjournal.com/content/git-origin-story
[75] Bhartiya, S. (2016, mayo 12). Linux is the largest software development project on the
planet: Greg Kroah-Hartman. CIO. https://www.cio.com/article/3069529/linux-is-the-
largest-software-development-project-on-the-planet-greg-kroah-hartman.html
[76] VI. Source Control. Stack Overflow Developer Survey 2015. (s. f.). Stack Overflow.
Recuperado 22 de mayo de 2021, de https://insights.stackoverflow.com/survey/2015
[77] Build software better, together. (s. f.). GitHub. Recuperado 22 de mayo de 2021, de
https://github.com
[82] Azure DevOps Services | Microsoft Azure. (s. f.). Recuperado 22 de mayo de 2021, de
https://azure.microsoft.com/en-us/services/devops/
[83] GitLab CI Utils / Docker Dependency Check. (s. f.). GitLab. Recuperado 22 de mayo
de 2021, de https://gitlab.com/gitlab-ci-utils/docker-dependency-check
[84] Iterate faster, innovate together. (s. f.). GitLab. Recuperado 22 de mayo de 2021, de
https://about.gitlab.com/
78