Elevando la calidad del testing de seguridad condimentándolo con un poco de IA

Intro

Actualmente, la seguridad informática esta cobrando mayor protagonismo y es motivo de preocupación constante la situación en la que se encuentran muchas empresas en relación al tema.

Muchas empresas cuentan con equipos que se ocupan de identificar y solucionar las vulnerabilidades y fallos en el software. Los ataques informáticos, las vulnerabilidades y el malware acechan en todas partes, poniendo en riesgo los activos digitales de las organizaciones. La importancia de mantener un código seguro y proteger contra fallos de seguridad es innegable.

En este artículo, te compartiré contenidos y algunas ideas acerca de cómo el testing de seguridad, impulsado por la inteligencia artificial y herramientas como Sonarqube, puede desempeñar un papel crucial en la defensa contra las amenazas cibernéticas.

Seguridad Informática y Sus Desafíos

La seguridad informática implica la protección de sistemas y datos contra ataques y amenazas. Los riesgos asociados incluyen ataques informáticos, como intrusiones, robo de datos y daños a la integridad del sistema. Las vulnerabilidades y fallos en el código pueden servir como puertas de entrada para los ciberdelincuentes. Aquí es donde entra en juego el testing de seguridad, además del trabajo que también debe llevar a cabo del desarrollador sobre su código.

Testing de Seguridad y Testing Basado en Riesgos

El testing de seguridad se centra en identificar y corregir vulnerabilidades y fallos en el código de una aplicación o sistema. Para abordar eficazmente estos desafíos, se utiliza varios enfoques, uno de ellos es el enfoque de testing basado en riesgos. En lugar de realizar pruebas indiscriminadas, se priorizan las áreas de riesgo identificadas previamente. Esto permite una asignación eficiente de recursos para abordar las amenazas más críticas, considerando que los escenarios probables pueden ser múltiples. Ahora bien, toda esta gestión se debe realizar a través de herramientas y una con la cual podemos interactuar es Sonarqube.

SonarQube y Herramientas para Analizar Código

SonarQube es una herramienta poderosa que facilita la identificación de problemas de seguridad en el código fuente. Realiza análisis estáticos del código en busca de vulnerabilidades conocidas y posibles problemas de seguridad. Además, proporciona informes detallados que ayudan a los desarrolladores a comprender y solucionar estos problemas de manera proactiva. En esta herramienta hay un aspecto no menor a tener en cuenta y es el de definir los estándares de calidad contra los cuales los procedimientos de la herramientas estará confrontando y dándonos su resultado. Si bien Sonarqube es una herramienta muy potente, ahora estamos en presencia de un nuevo paradigma que nos está atravesando a todos y no se puede evitar: las inteligencias artificiales.

El Papel de la Inteligencia Artificial

La inteligencia artificial (IA) ha revolucionado todos los campos y uno de ellos es el de la seguridad informática. Los algoritmos de IA pueden identificar patrones y anomalías en el tráfico de red y el comportamiento del sistema, lo que permite una detección más rápida de ataques informáticos. La IA también se utiliza en la mejora de las herramientas de testing de seguridad al automatizar la identificación de vulnerabilidades y fallos. Cabe mencionar que hay mucho terreno por explorar aquí ya que es muy reciente todo y que aquí también esta presente el concepto de sesgo.

Combatiendo el Malware y el Spyware

El malware y el spyware son formas insidiosas de amenazas informáticas. El testing de seguridad, respaldado por IA, puede ayudar a detectar y prevenir la infiltración de este software malicioso. Las técnicas de análisis de comportamiento impulsadas por la IA pueden identificar actividad sospechosa y detener los ataques antes de que causen daño.

La Importancia del Código Seguro

En última instancia, un código seguro es la primera línea de defensa contra las amenazas cibernéticas. La seguridad no debe considerarse una capa adicional, sino un componente fundamental del desarrollo de software. La combinación de testing de seguridad, herramientas como SonarQube y el poder de la inteligencia artificial permite a las organizaciones mantener sus activos digitales seguros y protegidos.

Testing de Seguridad y su certificación

Seguridad también es un área de conocimiento contemplada por un programa de estudios del ISTQB y como todo programa, tiene definido los objetivos empresariales que puede estar cubriendo todo tester que haya certificado.

  • Planificar, realizar y evaluar pruebas de seguridad desde una variedad de perspectivas: basadas en políticas, basadas en riesgos, basadas en estándares, basadas en requisitos y basadas en vulnerabilidades.
  • Alinear las actividades de pruebas de seguridad con las actividades del ciclo de vida del proyecto.
  • Analizar el uso efectivo de técnicas de evaluación de riesgos en una situación dada para identificar amenazas de seguridad actuales y futuras y evaluar sus niveles de gravedad.
  • Evaluar el conjunto existente de pruebas de seguridad e identificar pruebas de seguridad adicionales si es necesario.
  • Analizar un conjunto dado de políticas y procedimientos de seguridad, junto con los resultados de las pruebas de seguridad, para determinar su efectividad.
  • Para un escenario de proyecto dado, identificar los objetivos de pruebas de seguridad basados en la funcionalidad, atributos tecnológicos y vulnerabilidades conocidas.
  • Analizar una situación dada y determinar qué enfoques de pruebas de seguridad son más propensos a tener éxito en esa situación.
  • Identificar áreas donde se puedan requerir pruebas de seguridad adicionales o mejoradas.
  • Evaluar la efectividad de los mecanismos de seguridad.
  • Ayudar a la organización a aumentar la conciencia de seguridad de la información.
  • Demostrar la mentalidad del atacante al descubrir información clave sobre un objetivo, realizar acciones en una aplicación de prueba en un entorno protegido que realizaría una persona maliciosa y comprender cómo se podría eliminar la evidencia del ataque.
  • Analizar un informe de estado de pruebas de seguridad intermedio para determinar el nivel de precisión, comprensión y adecuación a las partes interesadas.
  • Analizar y documentar las necesidades de pruebas de seguridad que deben abordarse mediante una o varias herramientas.
  • Analizar y seleccionar herramientas de pruebas de seguridad candidatas para una búsqueda de herramientas específicas.
  • Comprender los beneficios de utilizar estándares de pruebas de seguridad y dónde encontrarlos.

Los resultados que pueda conseguir todo tester que haya aplicado alguna/s de las acciones mencionadas, van más allá de la detección de vulnerabilidades y se centran en la alineación de la seguridad con los objetivos del proyecto y la concienciación sobre la seguridad de la información.

¿Cómo está la IA frente a Sonarqube?

Estuve investigando un poco acerca del tema y desde hace algún tiempo desde la Comunidad de Sonarqube van informando los avances en relación con la IA aplicando machine learning y deep learning.

Por ejemplo, la clasificación automática de problemas como falsos positivos es una aplicación.

También hay iniciativas de conseguir la predicción con respecto a los falsos positivos sobre la base de instancias anteriores y encontrar la correlación entre el conjunto de datos que pueden ayudar a predecir en un futuro próximo.

Ahora bien, ¿Porqué hay equipos investigadores que se están ocupando de desarrollar este tipo de soluciones impulsadas con IA?
Tengamos en cuenta nuestras realidades. Los equipos de desarrollo integrados por los devs y testers dedican mucho tiempo a localizar defectos y corregir errores. Corregir un fallo implica aislar la parte del código que provoca el comportamiento inesperado del programa y cambiarlo para provocar la corrección. La corrección de fallos es una tarea difícil, y los desarrolladores suelen dedicar más tiempo arreglando fallos y haciendo el código más mantenible que desarrollando nuevas y mejores prácticas para tener un código más seguro y limpio.

Por otra parte, todas estas tareas van dejando ‘huella’ y esas ‘huellas’ de alguna forma sirven para generar las famosas y preciadas ‘metricas’.
Tenemos métricas de proceso, métricas de código, métricas de fallos, y otras tantas.

¿Qué está ocurriendo con todo ésto?
No se logra comprender qué métrica o qué reglas de SonarQube se deben tener en cuenta para reducir la propensión a fallos del código sobre todo porque el conjunto de reglas puede estar incluyendo un volumen de reglas importante por lenguaje de desarrollo.

Hay iniciativas en las que se está trabajando con la predicción de fallos de diferentes características (reglas de SonarQube y métricas de producto y proceso) utilizando modelos de machine learning y modelos de Deep Learning, con un preprocesamiento de datos para mejorar la estrategia de validación de datos.

Reforzando conceptos

Machine Learning (aprendizaje automático)

El aprendizaje automático es una forma de utilizar la IA. Fue definida en los años 50 por Arthur Samuel, pionero de la IA, como «el campo de estudio que confiere a los ordenadores la capacidad de aprender sin ser programados explícitamente». Los sistemas de ML aprenden y mejoran con la experiencia y, con el tiempo, refinan un modelo que puede ser usado para predecir el resultado de las preguntas, basado en el aprendizaje previo.

El aprendizaje automático (Machine Learning, ML), es el subconjunto de AI.
El ML y la AI a menudo se usan indistintamente, pero no son lo mismo.

Actualmente nos enfrentamos a dos enfoques diferentes en la programación de sistemas informáticos: el convencional y el basado en Inteligencia Artificial (IA).
La diferencia entre estos dos enfoques radica en cómo se aborda la toma de decisiones y el procesamiento de datos.

En un sistema informático convencional, los humanos programan el software utilizando lenguajes imperativos. Estos lenguajes incluyen instrucciones como «if-then-else» y bucles que indican al sistema cómo responder frente a diferentes situaciones. Es un enfoque lógico y determinista que resulta relativamente fácil de entender para nosotros.

En cuanto a la IA basada en el Aprendizaje Automático (AM). En lugar de depender de reglas explícitas, los sistemas de IA utilizan patrones en los datos para tomar decisiones. Imaginemos un procesador de imágenes basado en IA diseñado para identificar caballos. En lugar de programar reglas específicas para reconocer un caballo, alimentamos al sistema con un conjunto de imágenes que sabemos que contienen caballos.

La IA, por sí misma, comienza a descubrir patrones y características dentro de esos datos. Puede ser la forma de las orejas, la textura del pelaje o cualquier otra característica que ni siquiera podríamos haber identificado nosotros mismos. Estos patrones se convierten en las «reglas» de la IA para reconocer caballos. Cuando le presentamos una nueva imagen, la IA aplica estos patrones y características aprendidos para determinar si contiene un caballo. Esto significa que el sistema de IA se ha vuelto autónomo para tomar decisiones basadas en su entrenamiento previo.

Aunque el aprendizaje automático es increíblemente efectivo, a veces puede ser un enigma para los humanos. Las reglas y patrones que utiliza para tomar decisiones no siempre son fácilmente comprensibles para nosotros.

Ejemplo de herramienta:
TensorFlow: es un marco de ML de código abierto basado en gráficos de flujo de datos para el aprendizaje automático escalable, proporcionado por Google.

Aprendizaje profundo (Deep Learning)

El aprendizaje profundo (Deep Learning, DL) se refiere a los sistemas que obtienen experiencia de conjuntos de datos masivos. DL utiliza redes neuronales artificiales (Artificial Neural Networks, ANN) para analizar grandes conjuntos de datos, por ejemplo, vehículos autónomos, procesamiento de texto de gran tamaño y aplicaciones de visión por computador, entre otros. [AG1].

El DL es un subconjunto del ML y el ML es un subconjunto de la AI.

El DL utiliza los mismos tipos de aprendizaje (Aprendizaje Supervisado, No Supervisado y de Refuerzo, RL) que el ML.

Ejemplo de herramienta:
Apache MxNet: Un marco de aprendizaje profundo de código abierto utilizado por Amazon para Amazon Web Services (AWS).

Fuente de inspiración:

ISTQB Certified Tester Advanced Level Syllabus Security Tester Version 2016
AiU Certified Tester in AI (CTAI) Syllabus Version 1.0R 2019
ISTQB Certified Tester AI Testing (CT-AI) Syllabus Version 1.0
https://christophm.github.io/interpretable-ml-book/agnostic.html
https://en.wikipedia.org/wiki/Arthur_Samuel

Comentario final

¿Te ha sido útil el contenido? Me ayudarías y mucho si consideras que vale compartir este artículo entre tus amigos y  poder así enterarte cuando publique contenidos relacionados con las certificaciones, con las buenas prácticas, con herramientas y con testing aplicado en inteligencia artificial.

Buscame y seguime en LinkedIn para conocer las opiniones de colegas respecto de los contenidos que publico y por supuesto me ayudarías y mucho si consideras que vale dejar un like, dejar comentarios, compartirlo con tus amigos.

Muchas gracias

Gus Terrera

Apasionado por el agile testing y la ia.