Artículo original

Características de las herramientas de pruebas estáticas de seguridad de las aplicaciones

 

Characteristics of static application security testing tools

Jorge Eterovic(1) (2), Valeria Silvestari(1), Martin Zeballos(1), Andrea Vera(1)

 

(1) Universidad Nacional de La Matanza

Departamento de Ingeniería e Investigaciones Tecnológicas

San Justo, Pcia. de Buenos Aires, Argentina

(2)eterovic@unlam.edu.ar

 

 

Resumen:

Las herramientas de Pruebas Estáticas de Seguridad de las Aplicaciones (SAST: Static Application Security Testing), permiten automatizar la detección de vulnerabilidades y se pueden integrar al sistema de distribución de las aplicaciones (CI/CD: Integración Continua/Distribución Continua) para que detecten las vulnerabilidades en etapas tempranas del ciclo de vida, lo que llevaría a implementar un ciclo de vida seguro de desarrollo de software.

Integrar una herramienta SAST al proceso de CI/CD permite detectar vulnerabilidades en la etapa de desarrollo, en vez de esperar a la etapa de prueba o que se detecten directamente en producción. En este trabajo se analizan las fortalezas, las debilidades, las características a considerar para la selección de una herramienta y se muestra un listado de las más usadas, ya sean open-source o pagas.

 

 

Abstract:

Static security test tools for applications (SAST: Static Application Security Testing), allow automating vulnerabilities detection and can be integrated into the applications distribution system (CI/CD: Continuous integration/continuous distribution) to detect Vulnerabilities in early stages of the life cycle, which would lead to implementing a safe software development life cycle.

Integrating a SAST tool into the CI/CD process allows you to detect vulnerabilities in the development stage, instead of waiting for the test stage or to be detected directly in production. In this work the strengths, weaknesses, characteristics to consider for the selection of a tool are analyzed and a list of the most used ones is shown, whether they are open-source or paid.

 

Palabras Clave: Herramienta SAST; Detección de Vulnerabilidades; Análisis Estático; Seguridad de las Aplicaciones.

 

Key Words: SAST tool; Vulnerability Detection; Static Analysis; Application Security.


Colaborador: Alesio Sinopoli

 


 


I. INTRODUCCIÓN

Existen muchas definiciones diferentes de DevOps disponibles en libros, en artículos de revistas o en Internet. A raíz de esta disparidad en las definiciones, surgen diversos estudios que tratan de darle una descripción académica [1] [2]. Según estos estudios, podemos definir DevOps como una cultura que trata de aunar a los equipos de desarrollo y operaciones, basándose en una serie de principios y prácticas [2] que pretenden acelerar las entregas del producto mejorando el feedback de los clientes y la capacidad de reacción ante los cambios [3].

El término DevOps surge a finales de los 2000, en un contexto en el que las metodologías de desarrollo ágiles cada vez tomaban mayor relevancia en la industria del desarrollo de software. La velocidad a la que se desarrollaban nuevas características o se corregían bugs distaba mucho de la velocidad a la que se realizaban los despliegues de estos cambios, con lo que el ciclo de desarrollo del software se veía ralentizado. Esta ralentización era resultado de la falta de comunicación existente entre el equipo de desarrollo y el de operaciones.

Fue Patrick Debois quien, en 2007, tras una experiencia frustrante trabajando en la migración de un gran centro de datos, se percató de cómo esta falta de comunicación entre desarrolladores y administradores de sistemas afectaba al flujo de trabajo [4]. En 2009, John Allspaw y Paul Hammond, ingenieros de Flickr, presentaron su charla "10 Deploys a Day: Dev and Ops Cooperation at Flickr" [5] donde propusieron integrar desarrollo y operaciones en un flujo automatizado. Patrick Debois, tras esta conferencia, decidió organizar una similar en Bélgica, a la que llamó DevOpsDays, de donde surge el término DevOps [6].

Un aspecto importante para seguir exitosamente la cultura DevOps es la automatización de procesos, al ser lo que permite mantener la agilidad durante el desarrollo del software. La importancia de la automatización de procesos ha hecho surgir una gran cantidad de herramientas que contemplan la construcción del software, la integración y el despliegue continuos, la gestión de logs y la monitorización [7].

Esto tiene grandes ventajas, pues permite tener feedback temprano del cliente para mejorar el producto desde las primeras fases de desarrollo, mejorando la adaptabilidad del producto con el entorno y permitiendo marcar la diferencia con la competencia gracias a la implementación de nuevas funcionalidades y la mejora del funcionamiento de las ya existentes [8].

DevSecOps surge para incluir la seguridad en DevOps, alineando los equipos de desarrollo, de operaciones y de seguridad durante todo el ciclo de vida de desarrollo. Esto se consigue haciendo participar al equipo de seguridad desde las primeras etapas del desarrollo [9]. De esta manera, al tenerla en cuenta desde el diseño de la aplicación, es posible realizar los controles de seguridad necesarios a lo largo del ciclo de desarrollo del software y automatizarlos para que sean rápidos, escalables y efectivos [10].

Al igual que en DevOps, las herramientas juegan un papel muy importante. Existen una gran cantidad de herramientas para llevar a cabo DevSecOps. Una referencia relevante es la guía OWASP DevSecOps Guideline [11] para establecer los aspectos más importantes relativos a la seguridad: la detección de vulnerabilidades, las Pruebas Estáticas de la Seguridad de la Aplicación (SAST), las Pruebas Dinámicas de la Seguridad de la Aplicación (DAST), el escaneo de la infraestructura y la comprobación del cumplimiento normativo.

 

II. PRUEBAS ESTÁTICAS DE LA SEGURIDAD DE LA APLICACIÓN (SAST)

Las pruebas estáticas de seguridad analizan el código fuente de la aplicación sin ejecutarlo, tratando así de encontrar vulnerabilidades o bugs [12]. Los análisis estáticos se pueden realizar de diferentes formas, desde las más sencillas y rápidas que contemplan sólo un análisis del código fuente en base al árbol, hasta las más complejas que combinan diversas representaciones del código como grafos de control y flujo de datos para realizar un análisis semántico en busca de patrones vulnerables [12].

Los factores a tener en cuenta para elegir una herramienta son la velocidad a la que se quiere realizar el análisis y la profundidad del mismo, ya que a más profundidad, más se tardará en realizar y viceversa. Además, se ha de considerar el porcentaje de falsos positivos que puede dar la herramienta y si contempla el lenguaje de programación de la aplicación.

 

III. CARACTERÍTICS DE LAS HERRAMIENTAS SAST

Se estima que el 90 por ciento de los incidentes de seguridad son el resultado de ataques que explotan errores de software conocidos, por lo que, eliminar esos errores en la fase de desarrollo podría reducir los riesgos de seguridad.

Las herramientas de Pruebas Estáticas de Seguridad de Aplicaciones analizan el código fuente o las versiones compiladas del código tratando de encontrar vulnerabilidades o fallas de seguridad antes de que se conviertan en una versión final de software.

Las herramientas SAST se pueden agregar al Entorno de Desarrollo Integrado (IDE: Integrated Development Environment). La retroalimentación de la herramienta SAST puede ahorrar tiempo y esfuerzo, especialmente en comparación con la búsqueda de vulnerabilidades en fases avanzadas del ciclo de vida del desarrollo de software.


Las fortalezas de las herramientas SAST son:

      Escalabilidad: se puede ejecutar en una gran cantidad de lenguajes de software y se puede ejecutar repetidamente (por ejemplo: compilaciones nocturnas o integración continua).

      Identifica ciertas vulnerabilidades bien conocidas, tales como:

o   Desbordamientos de búfer

o   Defectos de inyección de SQL

      La salida ayuda a los desarrolladores, ya que las herramientas SAST resaltan el código con problemas, por nombre de archivo, ubicación, número de línea e incluso el fragmento de código comprometido.

También presentan debilidades, tales como:

      Búsquedas difíciles de automatizar para muchos tipos de vulnerabilidades de seguridad, que incluyen:

o   Problemas de autenticación

o   Problemas de control de acceso

o   Uso inseguro de la criptografía

      Las herramientas SAST actuales son limitadas. Pueden identificar automáticamente solo un porcentaje relativamente pequeño de las fallas de seguridad de las aplicaciones.

      Existe un alto número de falsos positivos.

      Con frecuencia no se pueden encontrar problemas de configuración, ya que no están representados en el código.

      Es difícil 'probar' que un problema de seguridad identificado es una vulnerabilidad real.

      Muchas herramientas SAST tienen dificultades para analizar código que no se puede compilar.

      Con frecuencia, los analistas no pueden compilar código a menos que tengan:

o   Bibliotecas correctas

o   Instrucciones de compilación

o   Todo el código requerido

Algunas de las herramientas SAST más usadas son las siguientes:

 

Nombre

Tipo de Licencia

Bandit

open-source

Brakeman

open-source

Checkmarx

comercial

CodeQL

Gratis para repositorios Open Source. Paga para repositorios privados.

Contrast Scan

comercial (con Edición Comunitaria Gratuita)

Coverity Scan

comercial

Fortify Static
Code Analyzer

comercial

HCL AppScan

comercial (AppScan CodeSweep gratis)

Kiuwan Code
Security

comercial

Klocwork

comercial (con un Free Trial)

LGTM.COM

comercial (libre para proyectos open-source)

Reshift

comercial (Gratis para usuario individual)

Semgrep

comercial (con Edición Comunitaria
Gratuita)

Snyk

comercial (con edición de prueba limitada gratuita)

SonarQube

comercial (con edición Free Community)

Veracode Static Analysis

comercial

Fuente: recopilación propia

 

IV. CONCLUSIONES


Para seleccionar una herramienta SAST, se pueden seguir los siguientes criterios:

      Que contemple el lenguaje de programación utilizado.

      Que tenga capacidad para detectar vulnerabilidades, en base a:

o   El Top Ten de OWASP (Open Worldwide Application Security Project). Representa un amplio consenso sobre los riesgos de seguridad más críticos para las aplicaciones Web.

o   Otros criterios como:

-      OSSTMM (Open-Source Security Testing Methodology Manual). Proporciona una metodología para una exhaustiva prueba de seguridad a nivel operacional.

-      Prueba de penetración, también llamada pen test o hacking ético, es una técnica de seguridad cibernética que las organizaciones utilizan para identificar, probar y resaltar vulnerabilidades a su seguridad.

      Precisión:

o   Tasas de falso positivo/falso negativo.

o   Puntaje de referencia del Benchmark OWASP. OWASP Benchmark Project es un conjunto de pruebas en Java diseñado para evaluar la precisión, la cobertura y la velocidad de las herramientas SAST. Sin la capacidad de medir estas herramientas, es difícil comprender sus fortalezas y debilidades y compararlas entre sí.

      Capacidad para comprender las bibliotecas y los marcos que necesita.

      Requisito para el código fuente compilable.

      Capacidad para ejecutarse contra binarios (en lugar de fuente).

      Disponibilidad como complemento en los IDE usado por los desarrolladores.

      Facilidad de configuración y uso.

      Capacidad para ser incluidos en herramientas de integración/implementación continua (CI/CD).

      Costo de la licencia (puede variar según el usuario, la organización, la aplicación o las líneas de código).

      Interoperabilidad de salida:

o   SARIF (Static Analysis Results Interchange Format: Formato de Intercambio de Resultados de Análisis Estático). Es un estándar que define un formato de archivo de salida. El estándar SARIF se utiliza para optimizar la manera en el que las herramientas SAST comparten sus resultados.

 

V. REFERENCIAS

[1] de Franca, B. B. N., Jerónimo, H., & Travassos, G. H. (2016). Characterizing DevOps by Hearing Multiple Voices. Proceedings of the 30th Brazilian Symposium on Software Engineering - SBES '16. Published. https://doi.org/10.1145/2973839.2973845

[2] Jabbari, R., bin Ali, N., Petersen, K., & Tanveer, B. (2016). What is DevOps? Proceedings of the Scientific Workshop Proceedings of XP2016. Published. https://doi.org/10.1145/2962695.2962707

[3] Virani, M. (2015). Understanding DevOps & bridging the gap from continuous integration to continuous delivery. Fifth International Conference on the Innovative Computing Technology (INTECH 2015). Published. https://doi.org/10.1109/intech.2015.7173368

[4] Watts, S. (2019, 29 March). A Brief History of DevOps. BMC Blogs. https://www.bmc.com/blogs/ devops-history/

[5] Allspaw, J., & Hammond, P. (2009, Jun 22). 10+ Deployes per Day: Dev and Ops Cooperation at Flickr [Talk]. O'Reilly Velocity Conference, San Jose, California. https://www.youtube.com/ watch?v=LdOe18KhtT4

[6] Debois, P. (s. f.). About devopsdays. DevOpsDays. Recuperado 18 de enero de 2022, de https://devopsdays.org/about/

[7] Akshaya, H. L., Nisarga Jagadish, S., Bidya, J., & Veena, K. (2015). A Basic Introduction to DevOps Tools. International Journal of Computer Science and Information Technologies, 6(3). http://ijcsit.com/docs/Volume%206/vol6issue03/ijcsit2015060382.pdf

[8] Beck, K., Fowler, M., Martin, R. C., Beedle, M., Cockburn, A., Cunningham, W., Thomas, D., Mellor, S., Schwaber, K., Sutherland, J., Bennekum, A. V., Grenning, J., Highsmith, J., Hunt, A., Je_ries, R., Kern, J., & Marick, B. (2001, 13 February). Principios del Manifiesto Ágil. Agile Manifesto. http://agilemanifesto.org/iso/es/principles.html

[9] Shackleford, D. (2016, 8 March). A DevSecOps Playbook. SANS. https://www.sans.org/webcasts/ devsecops-playbook-101472

[10] Amazon Web Services. (2016, 9 November). Introduction to DevSecOps on AWS. https://www.slideshare.net/AmazonWebServices/introduction-todevsecops-on-aws-68522874

[11] The OWASP Foundation. (s. f.). OWASP DevSecOps Guideline. OWASP. Recuperado 24 de enero de 2022, de https://owasp.org/www-projectdevsecops-guideline/

[12] Adkins, H., Beyer, B., Blankinship, P., Lewandowski, P., Oprea, A., & Stubble _eld, A. (2020). Building Secure and Reliable Systems: Best Practices for Designing, Implementing, and Maintaining Systems (Illustrated ed.). O'Reilly Media. https://sre.google/books/building-secure-reliable-systems/

 

 

Recibido: 2022-12-01

Aprobado: 2022-12-16

Hipervínculo Permanente: https://doi.org/10.54789/reddi.7.2.3

Datos de edición: Vol. 7 - Nro. 2 - Art. 3

Fecha de edición: 2022-12-29