Buscando vulnerabilidades en el código con Kiuwan

0
90
Dos cámaras de seguridad instaladas en una pared de concreto.
Cámaras de seguridad como metáfora de la protección en ciberseguridad.

Índice

  1. Introducción
  2. Un ejemplo
  3. Conclusiones
  4. Glosario de términos
  5. Referencias bibliográficas

 

1. Introducción

Antes de comenzar, quiero dar las gracias a mi compañero Ivan Suárez Romero de Izertis que ha tenido la inmensa amabilidad de completar de manera proactiva este tutorial, que se había quedado en el tintero.

El número de ciberataques ha crecido enormemente en los últimos años, y con ello, la necesidad de mejorar la protección de nuestros sistemas de información.

La complejidad y variedad de las infraestructuras sobre las que corren nuestras aplicaciones, la gran cantidad de datos que se manejan y su ubicuidad junto a la diversidad de los sistemas de almacenamiento, el incremento del uso de código abierto (es más fácil atacar un código que es público y que se puede analizar), la explosión de la IA (de la misma manera que se puede usar para proteger, se puede usar para atacar), etc., hacen que sea cada vez más urgente abordar este problema de manera proactiva.

Generalmente, una brecha de seguridad no suele ser cuestión de un único factor, sino que es una combinación de varios factores encadenados que han fallado. Primero, los atacantes habrán tenido que pasar tiempo estudiando nuestro sistema buscando vulnerabilidades, mediante el análisis de nuestros dominios y subdominios, tratando de descubrir cómo es nuestra infraestructura, qué forma tienen nuestras APIs, qué bases de datos usamos, qué tecnologías, lenguajes, versiones, librerías o frameworks de terceros se usan y qué vulnerabilidades conocidas tienen.

Una vez que han encontrado una posible vulnerabilidad, tratan de explotarla, y para ello, la mayor parte de las veces se necesita la colaboración de algún ingenuo que abra un correo electrónico, haga clic en un enlace o descargue un archivo. Y además, suele ser necesaria también la colaboración de un equipo que haya dejado escapar un error durante el desarrollo, como por ejemplo, no haber validado correctamente una entrada de datos, no haber escapado correctamente una salida, o no haber configurado correctamente un servidor, framework o base de datos, que ha sido abandonado a la suerte de la configuración por defecto.

Como desarrolladores, podemos hacer poco para convencer a los atacantes de que no nos ataquen (podemos ponerles más difícil el análisis de nuestra infraestructura, ofuscando y omitiendo en la medida de lo posible información, pero poco más), y podemos hacer poco para evitar que algún usuario despistado haga clic en enlaces o descargue archivos, pero sí podemos hacer mucho para evitar exponer nuestro sistema a vulnerabilidades.

¿Qué podemos hacer? Pues, entre otras cosas, podemos seguir buenas prácticas de programación, estar al día de los tipos de ataque más comunes, conocer cómo son esos ataques y cómo evitarlos en la fundación OWASP, entre otras acciones. En definitiva, estar al día para poder incorporar este conocimiento en nuestras revisiones de código. Sin embargo, esto no es suficiente, y cada vez es más necesario incorporarlo de una manera más sistemática en nuestros procesos de desarrollo, integración y despliegue, lo que se ha venido a denominar en estos últimos años como DevSecOps:

Ciclo de DevSecOps mostrando la integración de seguridad en el desarrollo (Dev) y las operaciones (Ops).
Diagrama del ciclo DevSecOps, que ilustra la integración de la seguridad en cada fase del desarrollo y las operaciones. Imagen obtenida de DoD Enterprise DevSecOps Reference Design, versión 1.0, 12 de agosto de 2019.

En esta tarea de incorporar la seguridad en nuestros procesos de desarrollo, es fundamental la realización de análisis de seguridad de nuestras aplicaciones. Para ello, es muy conveniente contar con herramientas que, de manera automática e integrada, nos ayuden en esta labor.

Podemos hablar, entre otros, de diferentes tipos de análisis de seguridad:

  • Static Application Security Testing (SAST): Se realiza sobre el código fuente o binario sin ejecutarlo.
  • Software Composition Analysis (SCA): Se realiza sobre las dependencias de nuestro código.
  • Dynamic Application Security Testing (DAST): Se realiza sobre el código en ejecución.
  • Interactive Application Security Testing (IAST): Se realiza sobre el código en ejecución, pero interactuando con él.
  • Security Operations Center (SOC): Se realiza en tiempo real mediante la monitorización del entorno productivo para detectar y evitar amenazas de seguridad.
  • Pen testing: Se realiza sobre la infraestructura, aplicaciones, personas y procesos en el entorno productivo para encontrar vulnerabilidades.

Una de las herramientas que nos puede ayudar en esta labor es Kiuwan, una herramienta que nos permite realizar análisis de seguridad estáticos (SAST) y análisis de composición (SCA) en nuestras aplicaciones de manera automática, integrada en nuestros procesos de desarrollo. Proporciona información detallada de las vulnerabilidades encontradas, recomendaciones para su corrección y soporte para gestionar y controlar (Governance) las correcciones sugeridas.

En este tutorial, vamos a ver un pequeño ejemplo de uso de Kiuwan en un proyecto y cómo podemos interpretar los resultados obtenidos.

 

3. Un ejemplo

Lo primero que debemos hacer es registrarnos en Kiuwan y crear un proyecto. Para ello, vamos a la página de Kiuwan y nos registramos. Una vez registrados, iniciamos sesión en la plataforma.

Página de inicio de sesión de Kiuwan con opciones de registro y recuperación de contraseña
Pantalla de bienvenida de Kiuwan con opciones de inicio de sesión y acceso a herramientas DevOps adicionales de Idera

Paso 1: Descarga e instalación del analizador local de Kiuwan

Kiuwan ofrece un Analizador Local que nos permite analizar nuestro código desde nuestra máquina. Para descargarlo:

Menú de opciones en Kiuwan con la selección para descargar el Kiuwan Local Analyzer
Menú de Kiuwan mostrando el acceso para descargar el Kiuwan Local Analyzer
  1. Inicia sesión en tu cuenta de Kiuwan.
  2. Haz clic en tu nombre en la esquina superior derecha del panel principal de Kiuwan.
  3. Selecciona Download Kiuwan Local Analyzer.
  4. Acepta los términos de uso.
  5. Descargamos el ZIP de Kiuwan Local Analyzer compatible con nuestro sistema operativo.
  6. Una vez descargado, descomprimimos el archivo y ubicamos la carpeta en una ruta de fácil acceso.

Paso 2: Preparación del proyecto para el análisis

Para este ejemplo, utilizaremos un proyecto Java sencillo. Supongamos que tenemos una aplicación web desarrollada con Spring Boot.

Ventana de configuración para crear un nuevo proyecto Java en Eclipse, mostrando opciones de nombre, ubicación, y configuración de JRE.
Configuración inicial de un proyecto Java en Eclipse para preparar el análisis de Kiuwan
  1. Asegúrate de que el código fuente esté completo y actualizado.
  2. Si el proyecto utiliza herramientas de construcción como Maven o Gradle, ejecuta un clean para eliminar archivos temporales que no son necesarios analizar.

Paso 3: Ejecución del análisis

Abrimos una terminal y navegamos hasta la carpeta donde ubicamos el Kiuwan Local Analyzer. Ejecutamos el siguiente comando:

./kiuwan.sh -c -s /ruta/a/tu/proyecto -n NombreDeTuProyecto
  • -c indica que queremos realizar un análisis completo (código y seguridad).
  • -s especifica la ruta al código fuente de nuestro proyecto.
  • -n es el nombre del proyecto en Kiuwan.
Pantalla de terminal mostrando la ejecución del Kiuwan Local Analyzer, incluyendo detalles sobre la versión de OpenJDK, la versión del analizador y el estado de actualización del motor de análisis.
Ejecución de Kiuwan Local Analyzer en la terminal, mostrando detalles de configuración y versión antes de iniciar el análisis de código.

En sistemas Windows, el comando sería:

kiuwan.cmd -c -s \ruta\a\tu\proyecto -n NombreDeTuProyecto
Pantalla de configuración del análisis en Kiuwan Local Analyzer, mostrando opciones de alcance de análisis, nombre de la aplicación y carpetas a analizar.
Configuración inicial del análisis en Kiuwan Local Analyzer, donde se define el alcance y la ruta del proyecto a analizar.

Paso 4: Esperar a que finalice el análisis

El analizador comenzará a examinar el código. Dependiendo del tamaño del proyecto, este proceso puede tardar desde unos minutos hasta más tiempo. Durante el análisis, Kiuwan evaluará el código en busca de:

  • Vulnerabilidades de seguridad.
  • Problemas de calidad del código.
  • Uso de componentes de terceros y sus posibles riesgos.
Pantalla de resultados del análisis en Kiuwan Local Analyzer, mostrando información sobre el análisis de código en Java con indicadores de violaciones, métricas y duplicaciones.
Resultados del análisis en Kiuwan Local Analyzer, indicando el éxito en la detección de violaciones, métricas y duplicaciones en el código.

Paso 5: Revisión de los resultados en la plataforma

Una vez finalizado el análisis, podemos ver los resultados en la plataforma web de Kiuwan:

  • Inicia sesión en Kiuwan si aún no lo has hecho.
  • En el panel principal, ve a Applications y selecciona el proyecto que acabas de analizar.
  • Accederás a un dashboard con una visión general del estado de tu proyecto.
Pantalla de resumen en Kiuwan mostrando el índice de riesgo, indicadores globales, líneas de código útiles, defectos y esfuerzo estimado para cumplir con el objetivo de calidad.
Vista general del dashboard de Kiuwan, que presenta el índice de riesgo, indicadores globales, líneas de código, complejidad, porcentaje de código duplicado y defectos clasificados por eficiencia, mantenibilidad, portabilidad, fiabilidad y seguridad.

Interpretación de los resultados

  • Overview: Aquí obtienes una puntuación global del análisis, incluyendo indicadores de calidad y seguridad.
  • Defects: Lista detallada de los defectos encontrados, clasificados por severidad y tipo.
  • Vulnerabilities: En esta sección puedes ver las vulnerabilidades de seguridad detectadas, con información sobre el tipo de vulnerabilidad y las posibles formas de corregirla.
  • Components: Muestra los componentes de terceros utilizados en el proyecto y alerta sobre posibles riesgos asociados a ellos.
  • Action Plan: Kiuwan sugiere un plan de acción priorizado para abordar los problemas más críticos primero.
Pantalla de resultados de análisis en Kiuwan, mostrando gráficos de defectos clasificados por características, lenguaje y prioridad, junto con detalles de las reglas violadas y el esfuerzo estimado para corregir los problemas.
Vista del dashboard de análisis de Kiuwan, que presenta un resumen de los defectos detectados en el proyecto, incluyendo el tipo de características, lenguajes y prioridades.

Paso 6: Integración con el proceso de desarrollo

Para maximizar los beneficios, es recomendable integrar Kiuwan en nuestro flujo de trabajo:

  • Integración con IDEs: Kiuwan ofrece plugins para IDEs como Eclipse, IntelliJ IDEA y Visual Studio Code, permitiendo detectar problemas en tiempo real mientras codificas.
  • Integración con CI/CD: Puedes integrar Kiuwan con herramientas de integración continua como Jenkins, Azure DevOps o GitLab CI/CD para automatizar los análisis en cada build.
  • Configuración de umbrales: Establece criterios de aceptación para que, si se superan ciertos niveles de vulnerabilidades, el build falle y se notifique al equipo.

 

4. Conclusiones

La seguridad en el desarrollo de software es un aspecto crítico que no debe pasarse por alto. Herramientas como Kiuwan nos facilitan la identificación y corrección de vulnerabilidades y problemas de calidad en nuestro código de forma automática y sistemática.

Al integrar Kiuwan en nuestros procesos de desarrollo, no solo mejoramos la calidad y seguridad de nuestras aplicaciones, sino que también fomentamos una cultura de DevSecOps en nuestros equipos. Esto nos permite entregar software más seguro y robusto, reduciendo riesgos y potenciales costes asociados a brechas de seguridad.

Recordemos que la seguridad es responsabilidad de todos los involucrados en el ciclo de vida del software. Adoptar prácticas y herramientas que nos ayuden en esta tarea es fundamental para enfrentar los desafíos actuales en materia de ciberseguridad.

 

5. Glosario de términos

  • Ciberataques: Acciones maliciosas dirigidas a sistemas informáticos con el objetivo de robar, alterar o destruir información, o interrumpir los servicios de una organización.
  • Infraestructuras: Conjunto de hardware, software, redes y servicios necesarios para el funcionamiento y gestión de sistemas y aplicaciones.
  • APIs (Application Programming Interfaces): Interfaces de programación que permiten la comunicación y el intercambio de datos entre diferentes aplicaciones o servicios.
  • Vulnerabilidades: Debilidades o fallos en un sistema que pueden ser explotados por atacantes para comprometer su seguridad.
  • OWASP (Open Web Application Security Project): Organización sin fines de lucro que se enfoca en mejorar la seguridad del software, proporcionando recursos y herramientas para desarrolladores y profesionales de seguridad.
  • DevSecOps: Práctica que integra la seguridad en todas las fases del ciclo de vida del desarrollo de software, combinando desarrollo (Dev), operaciones (Ops) y seguridad (Sec).
  • SAST (Static Application Security Testing): Análisis de seguridad que se realiza sobre el código fuente o binario sin ejecutarlo, para identificar vulnerabilidades.
  • SCA (Software Composition Analysis): Proceso de analizar las dependencias y componentes de terceros en una aplicación para detectar posibles vulnerabilidades.
  • DAST (Dynamic Application Security Testing): Análisis de seguridad que se realiza sobre una aplicación en ejecución, simulando ataques para identificar vulnerabilidades.
  • IAST (Interactive Application Security Testing): Combina técnicas de SAST y DAST para analizar aplicaciones en ejecución, interactuando con ellas para detectar vulnerabilidades.
  • SOC (Security Operations Center): Centro de operaciones de seguridad que monitorea y analiza en tiempo real las actividades del sistema para detectar y responder a incidentes de seguridad.
  • Pen testing (Pruebas de penetración): Evaluaciones de seguridad que simulan ataques reales para identificar y explotar vulnerabilidades en sistemas y aplicaciones.
  • Kiuwan: Herramienta de análisis de código que ofrece funcionalidades de SAST y SCA, proporcionando información detallada sobre vulnerabilidades y recomendaciones para su corrección.
  • Análisis de seguridad estáticos: Evaluaciones de seguridad que se realizan sin ejecutar el código, examinando el código fuente o binario para encontrar vulnerabilidades.
  • Análisis de composición: Estudio de los componentes y bibliotecas de terceros utilizados en una aplicación para identificar posibles riesgos de seguridad.
  • Integración continua (CI): Práctica de desarrollo de software donde los cambios en el código se integran frecuentemente en un repositorio centralizado, seguido de builds y pruebas automáticas.
  • IDEs (Integrated Development Environments): Entornos de desarrollo integrados que proporcionan herramientas para escribir, depurar y probar código, como Eclipse, IntelliJ IDEA o Visual Studio Code.
  • CI/CD (Continuous Integration/Continuous Deployment): Conjunto de prácticas que automatizan la integración y el despliegue continuo de aplicaciones, facilitando entregas más rápidas y confiables.
  • Umbrales: Límites establecidos para ciertos indicadores o métricas, como niveles aceptables de vulnerabilidades antes de que un build falle.
  • Build: Proceso de compilar y ensamblar código fuente en un ejecutable o paquete listo para desplegar.
  • Dashboard: Panel de control visual que muestra información y métricas clave sobre el estado de un proyecto o sistema.
  • Repositorios: Almacenes donde se guarda y gestiona el código fuente y otros recursos, permitiendo el control de versiones y la colaboración entre desarrolladores.
  • Frameworks: Estructuras o entornos de trabajo que proporcionan una base de código reutilizable para facilitar el desarrollo de aplicaciones.
  • Ofuscación: Técnica que consiste en hacer el código fuente más difícil de entender para protegerlo de ingeniería inversa o análisis no autorizados.
  • Monitorización: Proceso de supervisar sistemas y aplicaciones en tiempo real para detectar anomalías o problemas de rendimiento y seguridad.
  • Governance: Marco de políticas y procedimientos que aseguran que las prácticas de desarrollo y operación cumplen con los estándares y regulaciones establecidos.
  • Plugins: Extensiones que agregan funcionalidades adicionales a un software o plataforma existente.
  • Ubiquidad: Presencia en todas partes; en tecnología, se refiere a la capacidad de acceder a información o servicios desde cualquier lugar y en cualquier momento.
  • Exploit: Programa o secuencia de comandos que aprovecha una vulnerabilidad específica para causar un comportamiento no deseado en un sistema.
  • Prácticas de programación seguras: Conjunto de métodos y técnicas diseñadas para desarrollar código que sea resistente a ataques y vulnerabilidades.

 

6. Referencias bibliográficas

  1. OWASP Foundation. (2021). OWASP Top Ten. Recuperado de
    https://owasp.org/www-project-top-ten/
  2. Kiuwan Documentation. (s.f.). User Guide and Documentation. Kiuwan. Recuperado de
    https://www.kiuwan.com/docs/
  3. Departamento de Defensa de los Estados Unidos. (2019). DoD Enterprise DevSecOps Reference Design, Version 1.0. Recuperado de
    https://dodcio.defense.gov/Portals/0/Documents/DoD%20Enterprise%20DevSecOps%20Reference%20Design%20v1.0_Public%20Release.pdf
  4. Instituto Nacional de Estándares y Tecnología (NIST). (2018). Framework for Improving Critical Infrastructure Cybersecurity, Version 1.1. Recuperado de
    https://nvlpubs.nist.gov/nistpubs/CSWP/NIST.CSWP.04162018.pdf
  5. SANS Institute. (2019). The Value of SAST and DAST in Application Security Testing. Recuperado de
    https://www.sans.org/white-papers/38980/
  6. Kim, G., Humble, J., Debois, P., & Willis, J. (2016). The DevOps Handbook: How to Create World-Class Agility, Reliability, and Security in Technology Organizations. IT Revolution Press.
  7. Myers, M., & Williams, L. (2018). Assessing the Coverage of SAST and DAST Security Tools Using Bug Injection. IEEE Transactions on Software Engineering, 44(9), 833-846.
  8. Chen, L. (2017). Continuous Delivery: Overcoming Adoption Challenges. Journal of Systems and Software, 128, 72-86.
  9. Guía de Pruebas OWASP. (2014). OWASP Testing Guide v4. Recuperado de
    https://owasp.org/www-project-web-security-testing-guide/assets/archive/OWASP_Testing_Guide_v4.pdf
  10. Contreras, J. (2020). Implementación de DevSecOps en Entornos Ágiles. Revista Latinoamericana de Seguridad Informática, 14(2), 45-53.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad