In this article
Dependencias de software: cómo administrarlas a gran escala
¿Qué son las dependencias de software?
Una dependencia de software es una biblioteca o un paquete de código que se reutiliza en un nuevo programa. Por ejemplo, un proyecto de aprendizaje automático podría usar una biblioteca de Python para crear modelos.
Las dependencias de software permiten a los desarrolladores entregar software más rápido al basarse en el trabajo existente. Han revolucionado el desarrollo de aplicaciones en las últimas décadas, pero también introducen riesgos que suelen pasar desapercibidos.
¿Qué tipos de dependencias existen?
Hay dos tipos de dependencias de software:
Directas: bibliotecas o paquetes a los que tu código llama directamente.
Transitivas: bibliotecas o paquetes a los que llaman tus dependencias. Son dependencias de tus dependencias.
Ambos tipos de dependencias requieren una administración cuidadosa para controlar los riesgos asociados. Las dependencias transitivas o indirectas requieren atención adicional, porque no es evidente de inmediato que una aplicación las esté usando. Las dependencias quedan anidadas dentro de otras y forman un árbol complejo, por lo que es fácil pasar por alto que tu aplicación usa una biblioteca con vulnerabilidades.
Informe de Snyk
Estado de la seguridad del código abierto en 2022
Un análisis de la complejidad y los riesgos de la cadena de suministro de software, en colaboración con The Linux Foundation.
Por qué es indispensable administrar las dependencias
En los primeros años de las dependencias de software, descargar e instalar una biblioteca necesaria era una tarea tediosa. Por eso, reutilizar paquetes pequeños no era práctico. Sin embargo, en las últimas dos décadas, los administradores de dependencias, como Node Package Manager (NPM) para Node.js y Maven para Java, han facilitado el uso de paquetes más pequeños, incluso los que constan de unas pocas líneas de código. Desde entonces, la cantidad de paquetes disponibles para los desarrolladores se ha disparado y las dependencias de software se han convertido en un componente esencial de las aplicaciones modernas.
Al usar dependencias de software prediseñadas, los desarrolladores pueden entregar software más rápido y acortar los ciclos de lanzamiento. Sin embargo, las dependencias introducen riesgos que suelen pasar desapercibidos. Incluir software externo como dependencia significa confiar en que sus desarrolladores escriban, prueben y mantengan correctamente ese código.
Además de las vulnerabilidades de seguridad que puedan existir en esas dependencias de software, también pueden quedar desactualizadas y limitar la calidad del software que las usa, o incluso provocar que falle. Estas dependencias pueden contener errores o problemas de seguridad que afectan el rendimiento y el perfil de riesgo de la aplicación. Por último, pueden estar sujetas a licencias con posibles consecuencias legales o de responsabilidad.
Desde esta perspectiva, es fundamental administrar las dependencias para minimizar los riesgos asociados. Sin embargo, muchas organizaciones les prestan poca atención. Si el software funciona correctamente, no ven la necesidad de arreglar lo que no está roto. Además, administrar dependencias es difícil. Las dependencias transitivas pueden tener varios vínculos o incluso dependencias circulares. Actualizar una dependencia puede romper toda la cadena y dejarte en el infierno de las dependencias.
Por qué debes administrar las dependencias de código abierto
En las primeras etapas de las dependencias de software, las empresas compraban paquetes de código a proveedores conocidos y confiables. Hoy, la mayoría de las dependencias son bibliotecas de terceros de código abierto, lo que agrega complejidad a su administración. Es probable que los colaboradores de código abierto que escriben y mantienen el código utilizado en el software de producción sean externos a tu organización.
Cuando aparecieron las primeras bibliotecas de código abierto, los desarrolladores solían copiar y pegar líneas de código directamente. Esto hacía imposible llevar un registro de los componentes y actualizarlos. Las técnicas más modernas consisten en usar un administrador de paquetes para administrar los componentes de código abierto o integrar estas bibliotecas en módulos internos. Estos enfoques facilitan el uso de código abierto en las aplicaciones. A pesar de la proliferación de componentes de código abierto, los desarrolladores suelen saber poco sobre las vulnerabilidades que pueden introducir.
En parte debido al enorme crecimiento de la cantidad de código que se crea, los expertos en seguridad descubren constantemente vulnerabilidades en componentes de código abierto. Si alguien malintencionado descubre una de ellas, puede usarla para lanzar ataques (la filtración de datos de Equifax), sobre todo en paquetes muy populares (Log4Shell). Además, las licencias de código abierto establecen condiciones de uso, y no cumplirlas puede acarrear multas elevadas y daños a la reputación.
Por estos motivos, es esencial desarrollar un sistema para administrar las dependencias de código abierto durante todo su ciclo de vida. Esto incluye desarrollar y aplicar políticas sobre cómo los desarrolladores deben manejar los componentes de código abierto.
5 desafíos de la administración de dependencias
Como vimos, las dependencias de código abierto permiten a los desarrolladores entregar aplicaciones más rápido, pero también exponen a las organizaciones a riesgos de seguridad y legales. Administrar estas dependencias requiere cuidado, en especial las transitivas, ya que pueden crear capas anidadas de dependencias. Un enfoque para administrar y mitigar los riesgos de las dependencias de código abierto es el análisis de composición de software.
El análisis de composición de software (SCA) es un enfoque de pruebas de seguridad de aplicaciones que permite rastrear y analizar componentes de software. El SCA incluye tanto metodologías de seguridad de aplicaciones como herramientas que supervisan el software para rastrear los componentes que se usan como dependencias. El SCA no se limita a los componentes de código abierto, pero el crecimiento de las dependencias de código abierto ha impulsado la proliferación de herramientas de SCA en los últimos años.
Para administrar con éxito los riesgos relacionados con las dependencias de código abierto, las herramientas de SCA deben superar algunos desafíos clave:
Las dependencias transitivas pueden ocultar paquetes de código abierto bajo varias capas, lo que dificulta tener visibilidad completa de todos los paquetes de código abierto que usa una aplicación. La investigación de Snyk ha descubierto que la gran mayoría de las vulnerabilidades se encuentran en estas dependencias ocultas. Por eso, es posible que los desarrolladores ni siquiera sepan que usan paquetes de código abierto con vulnerabilidades de seguridad.
Es importante entender cómo cada ecosistema administra las dependencias. Factores como los archivos de bloqueo y la resolución de paquetes durante la instalación afectan la identificación de vulnerabilidades. Las herramientas de SCA deben tener en cuenta estos matices para identificar correctamente las vulnerabilidades relevantes. Por ejemplo, esto podría ayudar a detectar y prevenir ataques de confusión de dependencias, un método que se usó con éxito para acceder a datos y extraerlos de Yelp, Tesla, Apple, Microsoft y otras empresas.
La cantidad de vulnerabilidades detectadas en las dependencias de software puede llegar a miles. Es fundamental que las herramientas de SCA tengan un sistema para priorizar las tareas de identificación y resolución de vulnerabilidades.
Las herramientas de SCA necesitan una fuente confiable que identifique las vulnerabilidades a tiempo para protegerse de ellas.
Las herramientas de SCA deben ser lo suficientemente rápidas para seguir el ritmo de los desarrolladores. Si no lo logran, es posible que estos ignoren o eludan las verificaciones de seguridad.
Cómo la herramienta de administración de dependencias de Snyk mitiga los riesgos
Los enfoques de seguridad tradicionales se centran en el final del proceso de desarrollo, en lugar de integrar la seguridad en los flujos de trabajo de DevOps. Snyk Open Source posiciona a los desarrolladores como actores clave en la postura de seguridad de su organización, ya que se integra de inmediato con los flujos de trabajo y las herramientas existentes. Los equipos de seguridad y operaciones administran y supervisan el proceso, mientras que los desarrolladores usan las herramientas de Snyk para proteger continuamente los pipelines de desarrollo desde las herramientas de CI/CD. Corregir los problemas de seguridad durante el desarrollo, antes de que el código se acerque a producción, es, por mucho, la opción más segura y económica.
Snyk cubre todos los aspectos de la seguridad de las aplicaciones. Ofrece una vista de árbol de dependencias para identificar las dependencias y sus vulnerabilidades, y las actualiza automáticamente a medida que evolucionan (descubre cómo funciona en Java y Python). Snyk automatiza el análisis en el IDE para que los desarrolladores puedan encontrar problemas, priorizarlos, implementar correcciones y combinar las actualizaciones durante el desarrollo. Se generan alertas automáticamente cuando se llaman funciones vulnerables durante la ejecución. Las integraciones con sistemas de administración de código fuente (SCM), como GitHub y GitLab, ayudan a implementar la herramienta en proyectos de código nuevos y existentes, y permiten generar automáticamente solicitudes de cambios (PR) con correcciones, lo que reduce el impacto en el valioso tiempo de desarrollo.
Este enfoque de seguridad centrado en los desarrolladores les permite encontrar y corregir errores en el código y las dependencias en tiempo real. Las vulnerabilidades se detectan antes, lo que reduce su impacto en el ciclo de vida del desarrollo. Una base de datos de vulnerabilidades integral ofrece descripciones de vulnerabilidades seleccionadas y verificadas manualmente. Todos los elementos de la base de datos se analizan y prueban para garantizar su precisión, y a cada vulnerabilidad se le asigna una puntuación y un vector CVSS. Las descripciones ofrecen información sobre la facilidad de explotación, las licencias, el historial de seguridad y el mantenimiento de las bibliotecas señaladas.
Pearson, la empresa de educación más grande del mundo, comenzó a usar el análisis automatizado de dependencias de Snyk para minimizar su exposición al riesgo. Una vez que los desarrolladores pudieron usar la plataforma, el equipo de DevSecOps quiso asegurarse de que también supieran resolver los problemas rápidamente.
La función de corrección automatizada de Snyk prioriza las vulnerabilidades para reducir las acciones que los desarrolladores deben realizar para corregirlas. Esto ayuda a reducir la exposición de Pearson a los riesgos de dependencias desactualizadas, vulnerabilidades de seguridad recién descubiertas y problemas de licencias.
“Puede resultar un poco abrumador que los equipos inicien sesión en Snyk y vean cientos de vulnerabilidades”,…“por eso les recomendamos enfocarse en las correcciones en lugar de revisar los problemas uno por uno. Puedes tener entre 20 y 30 vulnerabilidades que se resuelven con una sola actualización de dependencia. Así, a los equipos les resulta más fácil tomar medidas”.
Analiza tus dependencias en busca de vulnerabilidades
Encuentra, prioriza y corrige vulnerabilidades automáticamente y gratis con Snyk.
Cómo proteger tus dependencias de software
Las dependencias de software desempeñan un papel clave en el desarrollo de software moderno. Permiten a los desarrolladores reutilizar código escrito por otras personas, lo que acelera la entrega y acorta los ciclos de desarrollo. Como resultado, su uso se ha disparado, pero también introducen riesgos y vulnerabilidades que las organizaciones suelen subestimar.
Las dependencias de código abierto son motivo de especial preocupación. La mayoría de las dependencias que usan los desarrolladores actuales son de código abierto, lo que significa que el software de producción depende de colaboradores externos para escribirlas, actualizarlas y mantenerlas.
Por eso, es fundamental supervisar las dependencias de forma exhaustiva, pero es difícil monitorear todas las que usa una aplicación, en especial las transitivas.
Snyk Open Source es una herramienta de SCA que detecta y supervisa automáticamente las dependencias durante todo el ciclo de vida del desarrollo. A diferencia de otras soluciones, Snyk adopta un enfoque centrado en los desarrolladores y los convierte en participantes activos en la seguridad de las aplicaciones.
Para obtener más información sobre las dependencias y sus implicaciones para la seguridad de las aplicaciones, lee nuestro informe El estado de la seguridad del código abierto.
Gracias por leer. Mantente protegido.