Cómo la seguridad en la cadena de suministro enfocada en el desarrollador te ayuda a entregar rápidamente software seguro

14 de julio de 2022 // 10 min read

image

Descubre por qué es necesaria la seguridad en la cadena de suministro y cómo la herramienta de seguridad en la cadena de suministro de GitHub puede ayudarte a entregar rápidamente software seguro.

¿Deseas proteger el código, pero no quieres pasos de seguridad adicionales que ralenticen tu trabajo? Hoy en día, los desarrolladores se enfrentan a menudo a la difícil disyuntiva de entregar lentamente software seguro o rápidamente software inseguro. En GitHub creemos que no deberías tener que elegir entre uno u otro. Sigue leyendo para saber por qué es necesaria la seguridad en la cadena de suministro, cómo se entretejen las dependencias en tu código y cómo puede ayudarte la herramienta de cadena de suministro de GitHub, Dependabot.

En esta página se tratarán los siguientes temas:
Cadena de suministro de software
Vulnerabilidades de código abierto
Seguridad de código abierto
Dependencias de software
Tipos de dependencias
Cambios en dependencias
Administración de dependencias
Análisis de composición de software (SCA)
Beneficios de SCA
¿Qué es Dependabot?
Funciones de Dependabot
Activar Dependabot
Dependabot y otras herramientas de GitHub

¿Qué es la cadena de suministro de software?

La cadena de suministro de software es una frase popular que se refiere a cómo se crea el software mediante el uso de todas las dependencias de fuente interna y de código abierto en su código base. Tal vez estés creando una aplicación JavaScript que utiliza dependencias de npm, o tal vez estés creando una aplicación compilada escrita en C# que utiliza una combinación de dependencias de fuente interna y Nugget. El modelo de amenazas para cada una de estas aplicaciones es diferente debido a la cadena de suministro de software de la que dependen. GitHub está aquí para ayudarte a entender el software que utilizas y mantenerlo más seguro mediante productos innovadores como Dependabot.

¿Qué son las vulnerabilidades del código abierto?

Las vulnerabilidades del código abierto son riesgos de seguridad que viven en sus componentes de código abierto. La mayoría de las vulnerabilidades son el resultado de errores bienintencionados que implican una falta de funcionalidades de seguridad, un código escrito de forma no ideal o una integración deficiente de los componentes. Por desgracia, pueden ser fácilmente explotadas por un atacante. Los agentes maliciosos pueden utilizar las vulnerabilidades del código para dañar los sistemas, robar los datos o abusar de los recursos. Además, explotar una sola debilidad puede tener profundas repercusiones al permitir a los hackers saltar a otros servicios vulnerables dentro de tu entorno.

Las vulnerabilidades pueden afectarte seriamente cuando no estás prestando atención y comprometer todo tu proyecto. Actualmente, los tipos más comunes de vulnerabilidades incluyen los siguientes:

  • Inyección de SQL Se trata de un ataque por inyección de código que se desencadena cuando un actor malintencionado agrega lógica dañina a tus sentencias SQL a través de la entrada del usuario. La vulnerabilidad se debe a que no se realiza la limpieza de entradas o se realiza de forma incorrecta. Las implicaciones incluyen el acceso no autorizado a los datos, su modificación y pérdida, y cambios en el contenido y comportamiento de una aplicación.

  • Inyección de comandos. Esta es otra forma de ataque por inyección de código que ocurre cuando un agente malicioso inserta un comando en una aplicación que luego se ejecutará en el sistema host utilizando los privilegios del sistema. Un ataque por inyección de comandos puede comprometer la aplicación, sus datos, los servidores conectados y otras infraestructuras.

  • Cross-site scripting (XSS). Este es un tipo de ataque por inyección web en el que se insertan scripts maliciosos en sitios web aparentemente inofensivos. Debido a que los scripts de JavaScript se ejecutan en el navegador del usuario afectado, los ataques XSS pueden robar datos confidenciales como cookies de autenticación. Esto es común en sitios web públicos, donde los atacantes pueden dirigirse a los visitantes del sitio agregando sus propios anuncios y mensajes de phishing.

  • Falsificación de petición en sitios cruzados (CSRF). Este ataque obliga al usuario final a ejecutar acciones no deseadas en una aplicación web en la que está autenticado. Las acciones no deseadas pueden incluir transferencias de fondos o un cambio de información personal. Básicamente, estos ataques aprovechan la confianza del sitio objetivo en las solicitudes iniciadas por usuarios autenticados que, en realidad, se inician desde otro lugar.


Para obtener más información sobre los tipos más frecuentes de vulnerabilidades, visita nuestra publicación en el blog sobre vulnerabilidades.


¿Qué es la seguridad de código abierto?

La seguridad de código abierto es una metodología que te proporciona una mejor visibilidad sobre el inventario de código abierto de las aplicaciones. Con la seguridad de código abierto, puedes identificar fácilmente todas las dependencias directas, las dependencias indirectas y la gran cantidad de información de seguridad relacionada con cada una de ellas. Realizar un seguimiento de estas cosas de forma manual lleva demasiado tiempo y se realiza comúnmente a través del análisis de composición de software (SCA), que exploraremos más adelante.

¿Qué son las dependencias de software?

Una dependencia de software es un paquete o biblioteca de código que se reutiliza en un nuevo software. Utilizar software de código abierto garantiza que puedas centrarte en las partes diferenciadas de tu proyecto y construir sobre las bases sólidas de la comunidad más amplia.

En la actualidad, casi todos los proyectos de software tienen algún tipo de dependencias. Y la cantidad no es pequeña; se estima que entre el 60 % y el 90 % de los códigos base están compuestos por componentes de código abierto. Por supuesto, si hay problemas de seguridad en alguno de estos códigos, afectará al producto final, al igual que los problemas de seguridad en el código con propietario.

¿Cuáles son los distintos tipos de dependencias?

Existen dos tipos de dependencias de software: directas e indirectas. Las dependencias directas son bibliotecas o paquetes que tu código llama directamente. Las dependencias indirectas son bibliotecas o paquetes que tus dependencias llaman. En otras palabras, son las dependencias de las dependencias.

Si bien ambos tipos de dependencias requieren administración para controlar los riesgos de seguridad, las dependencias indirectas requieren consideración adicional porque no es evidente de inmediato cuando están en juego. Las dependencias indirectas se anidan dentro de otras dependencias, formando un árbol de dependencias oculto pero complejo que puede pasarse por alto fácilmente al intentar asegurar tu cadena de suministro.

De un vistazo: los dos tipos de dependencias

  • Las dependencias directas son bibliotecas o paquetes que tu código llama directamente
  • Las dependencias indirectas son bibliotecas o paquetes que tus dependencias llaman

Asegurar ambos tipos es crucial, pero es más difícil detectar las dependencias transitivas.

¿Cómo ha cambiado el panorama de dependencias con el paso del tiempo?

En el pasado, descargar e instalar una biblioteca era un trabajo tedioso. Debido a esto, reutilizar paquetes más pequeños era poco práctico. Pero en las últimas dos décadas, herramientas como Maven y npm facilitaron el consumo y el trabajo con paquetes pequeños. Desde entonces, el número de paquetes disponibles para los desarrolladores ha explotado. Los paquetes de software son ahora una parte significativa de las aplicaciones modernas.

Sin embargo, la industria se enfrenta actualmente a una serie de problemas y cuestiones de seguridad. Como se mencionó, si hay un error en una dependencia, eso puede afectar a toda la aplicación. Además, las dependencias pueden volverse obsoletas rápidamente, limitando la calidad del software que las llama o incluso causando el fallo completo de la aplicación.

Si bien el uso de dependencias puede ayudarte a crear software más rápidamente, hay una serie de incidencias en las dependencias que pueden salir mal, que incluye los siguientes:

  • Vulnerabilidades de seguridad que afectan a todo tu programa Código obsoleto que compromete la calidad de tu software

¿Qué sucede cuando las organizaciones no administran las dependencias?

Puede haber mucha frustración cuando has instalado paquetes de software que dependen de versiones específicas de otros paquetes de software, y resolver una dependencia puede romper la compatibilidad con otra. Como un juego de aplastar al topo, esto te llevará a un lío interminable de dependencias.

Por eso es importante que administres eficazmente tus dependencias en todo el ciclo de vida del desarrollo de software (SDLC).

¿Qué es el análisis de composición de software (SCA)?

El SCA es un proceso automatizado que identifica los componentes de código abierto en tu código base. Estas herramientas inspeccionan administrador de paquetes, código fuente, archivos de manifiesto, imágenes de contenedor, archivos binarios y mucho más. Estos componentes se comparan con GitHub Advisory Database, que incluye información de la Base de Datos Nacional de Vulnerabilidades de los EUA (NVD) y otras bases de datos.

¿Qué son las bases de datos de vulnerabilidades?

Las bases de datos de vulnerabilidades almacenan información sobre vulnerabilidades conocidas y comunes. La Base de Datos Nacional de Vulnerabilidades de los EUA (NVD) es el repositorio de vulnerabilidades del gobierno de Estados Unidos y se utiliza ampliamente en la comunidad de código abierto. GitHub tiene su propia GitHub Advisory Database, que incluye avisos de todo el mundo del código abierto.

¿Qué componentes de la cadena de suministro inspeccionan las herramientas de SCA?

  • Administrador de paquetes
  • Archivos de manifiesto
  • Archivos binarios
  • Código fuente
  • Imágenes de contenedor
  • Componentes aprobados
  • Descargas para desarrolladores
  • Reutilización del código
  • Aplicaciones comerciales
  • Bibliotecas externas
  • Desarrollo externalizado

¿Cuáles son las ventajas del SCA?

Cuando se trata de proteger la cadena de suministro, las herramientas de análisis de composición de software ofrecen seguridad, rapidez y fiabilidad. El seguimiento manual de los componentes de código abierto ya no funciona, dada la enorme cantidad que se utiliza hoy en día. Además, la creciente prevalencia de aplicaciones nativas en la nube y tecnologías más complejas hacen que las herramientas de análisis de composición de software confiables sean obligatorias.

Nunca obligues a un humano a hacer lo que puede hacer un robot. –Lema del Equipo de seguridad de GitHub

A medida que los equipos crean y entregan software más rápido debido a la adopción de metodologías de DevOps, necesitas una solución de seguridad que pueda mantener tu velocidad de desarrollo, al igual que una herramienta de SCA.

Pero no todas las herramientas de análisis de composición de software tienen las mismas características. Lo mejor es seleccionar una herramientade análisis de composición de software que analice los componentes de código abierto en entornos de contenedores, identifique cualquier vulnerabilidad y aplique automáticamente las políticas. Las buenas herramientas de análisis de composición de software también tienen compatibilidad nativa con el registro de contenedor específico utilizado por tu sistema de TI.

Cuando se trata de organizaciones, la herramienta de SCA debería además informarte si tu código se comunica con la biblioteca afectada y sugerir soluciones cuando sea posible. La herramienta también debería identificar las bibliotecas de código abierto en el código base que necesitan ser parcheadas o actualizadas.

¿Qué es Dependabot y cómo puede mantener la seguridad en la cadena de suministro?

Dependabot es la herramienta de SCA de GitHub. Dependabot facilita la tarea de asegurar tu cadena de suministro al ayudarte a identificar tus dependencias, las vulnerabilidades en esas dependencias, y sugiriendo formas de corregirlas, parchearlas o actualizarlas. Dependabot se integra de forma nativa en tu flujo de trabajo del desarrollador, lo que te permite asegurar tu cadena de suministro en cuestión de minutos.

Dependabot detecta vulnerabilidades en tus dependencias en tiempo real, lo que te permite comprender lo siguiente:

  • Los datos de vulnerabilidad de cada dependencia, publicados por la base de datos consultiva GitHubs Advisory Database
  • El impacto de la vulnerabilidad en tu proyecto, por ejemplo, si tu código está realizando una llamada vulnerable.
  • Cómo tomar medidas y solucionar la vulnerabilidad con una pull request de Dependabot o con otra solución alternativa.

Dependabot también te ayuda a mantener actualizadas tus dependencias con las actualizaciones de versiones de Dependabot, lo que puede ayudarte a evitar muchas posibles vulnerabilidades en tu proyecto desde el principio.

Dependabot nos ayuda a escribir un código más seguro. –Max Williams, Principal Systems Engineer, Delivery Hero

¿Cuáles son las distintas funciones de Dependabot?

Dependabot incluye una serie de funciones de primera clase, que incluyen las siguientes:

  • Gráfica de dependencias. Esta gráfica identifica todas las dependencias ascendentes y descendentes públicas de un repositorio o paquete. Puedes ver las dependencias y cualquier vulnerabilidad detectada en la gráfica de dependencias.

  • Alertas de Dependabot. Estas alertas te informan sobre los repositorios afectados por vulnerabilidades recién descubiertas basadas en la gráfica de dependencias de GitHub y GitHub Advisory Database.

  • Actualizaciones de seguridad de Dependabot. Estas actualizaciones son pull requests automáticas enviadas por Dependabot para actualizar una dependencia a la versión mínima que resuelve una vulnerabilidad conocida.

  • Actualizaciones de versiones de Dependabot. Estas actualizaciones comprueban si hay nuevas versiones de las dependencias y sugieren actualizaciones, todo ello según las configuraciones que establezcas.

¿Cómo activo Dependabot?

Activar Dependabot es fácil. Solo tienes que seguir estos cinco pasos:

  1. Dirígete a GitHub.com.
  2. Ve a la página principal del repositorio.
  3. Bajo el nombre de tu repositorio, haz clic en “Settings”.
  4. En la barra lateral izquierda, haz clic en “Code security and analysis”.
  5. Finalmente, haz clic en el botón “Enable” en “Dependency graph” y “Dependabot alerts”. Si deseas que Dependabot te ayude a actualizar las dependencias, haz clic también en “Enable” en “Dependabot security updates”.


Creado solo para ti, Dependabot es:

  • Creado para ti. Puedes elegir la frecuencia de las notificaciones y el tipo de notificaciones que recibes. Las alertas de Dependabot se ordenan mediante un cálculo de “más importante”, que tiene en cuenta el impacto, la relevancia y la capacidad de acción de una vulnerabilidad para ayudarte a priorizar las alertas. Por ejemplo, cuando las vulnerabilidades llaman a funciones vulnerables conocidas, eso se tiene en cuenta en nuestro cálculo (y la información sobre llamadas a funciones vulnerables también está disponible con su alerta Dependabot).

  • Creado desde la comunidad.. La base de datos consultiva GitHub Advisory Database, que alimenta las alertas de Dependabot, es la mayor base de datos de vulnerabilidades en dependencias de software del mundo. Un equipo de expertos con dedicación exclusiva se encarga de su mantenimiento, con el apoyo de las contribuciones de toda la comunidad de GitHub.

  • Gratis para siempre. GitHub cree que los datos y soluciones de seguridad gratis y abiertos son fundamentales para potenciar la industria y garantizar la mejor seguridad posible en nuestras cadenas de suministro de software.

¿Cómo funcionan los productos Dependabot con otras herramientas de seguridad de GitHub?

En GitHub, proporcionamos un conjunto de herramientas de seguridad centradas en el desarrollador para ayudarte a encontrar y corregir vulnerabilidades. Si bien Dependabot te ayuda a asegurar tu cadena de suministro, nuestros otros productos de seguridad trabajan sinérgicamente con Dependabot para mantener tu código seguro desde casi todos los ángulos.

  • La detección del código, impulsada por CodeQL, es un producto de prueba estática de seguridad de aplicaciones (SAST) que detecta patrones comunes en su código. También puede ejecutarse dentro de tus pull requests, detectando vulnerabilidades antes de que lleguen a la main branch. Más allá de proteger tu código, CodeQL te enseña qué debes tener en cuenta en el futuro, ya que cada consulta contiene información sobre el patrón de vulnerabilidad detectado, incluidos ejemplos de código vulnerable, formas seguras de implementar el mismo código y referencias externas.

- Para obtener más información sobre cómo comenzar con la detección del código y CodeQL, visita nuestra página GitHub Docs code scanning.


  • La verificación de secretos evita accesos no autorizados e infracciones. Para ello, busca de forma proactiva en sus repositorios secretos filtrados que puedan haberse introducido accidentalmente en tu código. Esto implica escanear tu código en busca de patrones de nuestros socios, incluidos AWS, Slack, Google Cloud y Azure. Como las verificaciones duran menos de un segundo, podemos detectar rápidamente las fugas en el momento en que se producen.

- Para obtener más información sobre cómo comenzar con la verificación de secretos, visita nuestra página GitHub Docs secret scanning.


Información general sobre la seguridad: echa un vistazo concentrado y único a los riesgos de seguridad de toda la organización. Esto es especialmente efectivo si eres responsable de cientos o miles de repositorios. La herramienta muestra los riesgos de seguridad conocidos, así como los riesgos desconocidos donde aún no se han configurado las funciones de seguridad.


- Para obtener más información sobre cómo comenzar con la información general sobre la seguridad, visita nuestra página security overview Docs.


Todas estas herramientas forman parte de GiHub Advanced Security (GHAS) para empresas. GHAS integra de forma nativa la seguridad en el flujo de trabajo del desarrollador, lo que le permite proteger la cadena de suministro de software y el código con propietario a lo largo de todo el ciclo de vida de software. Con GHAS, se realizan verificaciones de seguridad automatizadas con cada pull request. Los problemas de seguridad detectados se comparten inmediatamente en el flujo de trabajo habitual de GitHub. Esto te permite solucionar las vulnerabilidades en cuestión de minutos, en lugar los meses, algo muy habitual en el sector.


- Para obtener más información sobre GHAS, visita nuestra página GHAS Docs.


La seguridad es fundamental, pero la fiabilidad también es importante. Dependemos de GitHub para implementar nuestros productos de forma rápida y segura. –Lee Cookson, Engineering Director, Dow Jones

Para hablar con un representante sobre cómo GitHub puede ayudar a tu organización a proteger su código, inscríbete en una demostración gratis.

Código seguro sin interrumpir la innovación Escalado de GitHub Advanced Security
GitHub Advanced Security te ayuda a encontrar y solucionar antes los problemas de seguridad en tu código para escalar y automatizar la seguridad de tus aplicaciones.

Más información
Hablemos sobre cómo puedes escalar y adoptar GitHub Advanced Security de manera automatizada y estructurada.

Más información


Tags