Administradores de paquetes de Software y las “Gemas” maliciosas

Carlos Ávila    26 septiembre, 2019

Los administradores de paquetes de software se extienden a través de los sistemas operativos como por ejemplo: apt, yum, Chocloatey, etc. Así como para los lenguajes de programación (Bundler, Composer, pip, RubyGems, etc.).  La versatilidad que tienen estas porciones de código (packages) para implementarlos en nuestros proyectos de software tiene un potencial muy relevante a la hora de desarrollar aplicaciones de manera ágil, ya que al ser componentes previamente desarrollados permiten acelerar nuestro proyecto, mejorar funcionalidades y, de igual manera, compartir con la comunidad nuestro conocimiento.

Pero… ¿Qué pasa al vincular código de terceros en nuestros proyectos?  Este cuestionamiento debería llevarnos a tomar en consideración varios aspectos como temas de compatibilidad, rendimiento… Pero sobre todo, aspectos de seguridad del código que estamos incluyendo, ya que en muchos casos es un ‘plug and play’ en nuestros proyectos de software y no conocemos qué está haciendo exactamente dicha programación.

Se conocen casos específicos de ataques a las famosas “gemas” del lenguaje de programación Ruby, en la actualidad muy utilizado en diferentes entornos. Estos ataques han sido detectados tanto por la comunidad de que da soporte al proyecto como por plataformas independientes. Pero es tal la cantidad de paquetes indexados (153.937 al generar este post) y desplegados, que el escenario se complica.


Estadísticas de “Gems” Ruby en la actualidad. Fuente: https://rubygems.org/stats

De igual manera otros lenguajes que operan bajo estos esquemas, han sido victimas por parte de los delincuentes informáticos para generar ataques dirigidos, en este caso investigadores de la Universidad de Hamburgo han ayudado a descubrir vectores de ataques en su tesis denominada “Typosquatting in Programming Language Package Managers”, donde evidencian cómo mediante técnicas “Typosquatting” pueden entregar paquetes de software falsos y ejecutar código remoto a través de los mismos.

Si bien vemos cómo las “gemas” de Ruby sufren de este tipo de amenazas, es evidente que otros tipos de administradores de paquetes también han sido afectados por varios ataques, y como resultado los desarrolladores al usar dicho código en sus proyectos se ven afectados. Pero en el caso de Pip de Python, también se han conocido desde ataques de inyección de malware para controlar servidores hasta paquetes maliciosos para minar criptomonedas.

Prueba de Concepto de ejecución de código “malicioso” en paquete Python Pip

Si bien en este post particularmente nos hemos referido a dos administradores de paquetes (RubyGems y Pip), hay algunas medidas iniciales que podrían ayudar a minimizar el riesgo de algún tipo de ataque mediante este vector, entre las que podemos mencionar:

  • Realiza análisis del código de cada paquete de software previo a incluirlo en tus proyectos.
  • Utiliza parámetros para instalación de paquetes con el usuario local con privilegios mínimos.
  • Pon atención al momento de instalar paquetes de software, especialmente cuando usas privilegios de administrador o root en tu sistema.
  • Instale paquetes en modo de comprobación de hash utilizando los hashes que proveen los repositorios oficiales. Esto protegerá la integridad del paquete y garantizará que obtenga el paquete fiable.
  • Verifique que este escrito el nombre del paquete correctamente. Puede haber paquetes maliciosos con un nombre similar donde los atacantes estén usando técnicas de “Typosquatting”.

Debemos tener cuidado con los paquetes que utilizamos en nuestros proyectos desde el gran universo de administradores de paquetes y las tecnologías de programación en sí mismo, que si bien son de gran ayuda para la comunidad de desarrollo, en la actualidad los atacantes buscan diversos vectores para poder realizar acciones maliciosas dentro de nuestras infraestructuras tecnológicas.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *