Seguridad: RubyGems deja ver su costado más oscuro

Rubygems cuando la seguridad hace agua

En estos días de pandemia, las organizaciones están reconociendo la importancia del aspecto de seguridad de sus sistemas.

Se esfuerzan por adoptar las mejores prácticas de seguridad con el objetivo de eliminar los puntos ciegos en la cadena de ataque que aumentarían el riesgo de que ocurra un incidente de seguridad.

Esto hace que sea más difícil para los actores de amenazas lograr sus intenciones maliciosas, ya que atacar directamente a esas organizaciones es menos probable que produzca resultados.

Para evitar tales medidas, los actores de amenazas siempre están en busca de nuevos vectores de ataque.

Uno de esos vectores, denominado ataque de la cadena de suministro de software, se está volviendo cada vez más popular.

Estos ataques amenazan indirectamente a las organizaciones al atacar a los proveedores externos que les proporcionan software o servicios.

Dado que dichos proveedores generalmente se consideran editores de confianza, las organizaciones tienden a pasar menos tiempo verificando que los paquetes que consumen están realmente libres de malware.

Existe una confianza implícita entre el proveedor de software y sus clientes en este caso, y eso es exactamente lo que los ataques de la cadena de suministro de software pretenden subvertir.

Los repositorios de código abierto también entran en esta categoría.

Son particularmente interesantes, ya que son utilizados por millones de desarrolladores de todo el mundo, algunos de los cuales trabajan en organizaciones que utilizan tecnologías de código abierto para acelerar el desarrollo de su propio software comercial.

Empaquetados en bibliotecas, estos componentes de código abierto representan los componentes básicos de la aplicación.

Dependiendo de la complejidad del software que está construyendo una organización, muchas de estas bibliotecas de terceros terminan siendo utilizadas en el producto final.

El desarrollo de software moderno se centra en la idea de que los componentes de terceros deben ser reutilizables y de fácil acceso.

Esos componentes están organizados y alojados en mecanismos de entrega de software llamados repositorios de paquetes.

Al estar estrechamente integrados con los lenguajes de programación, los repositorios facilitan el consumo y la administración de componentes de terceros.

En consecuencia, incluir otra dependencia del proyecto se ha vuelto tan fácil como hacer clic en un botón o ejecutar un comando simple en el entorno del desarrollador.

Pero solo hacer clic en un botón o ejecutar un comando simple a veces puede ser algo peligroso, ya que los actores de amenazas también comparten un interés en esta conveniencia.

No es sorprendente escuchar que los repositorios de paquetes se están enfocando cada vez más.

Hay un par de formas de llevar a cabo los ataques: comprometiendo las cuentas de desarrollador o sus entornos de compilación, y tipeando los nombres de los paquetes.

Typosquatting es particularmente interesante.

Usando este tipo de ataque, los actores de amenazas nombran intencionalmente paquetes maliciosos para parecerse lo más posible a los populares (por ejemplo, rspec-mokcs en lugar de rspec-mocks ), con la esperanza de que un usuario desprevenido escriba mal el nombre e instale involuntariamente el paquete malicioso en lugar.

En ReversingLabs tenían curiosidad por saber si estas discrepancias de nombres podían detectarse en los repositorios de paquetes, por lo que comenzamos a analizarlas.

Esta idea ya ha demostrado su mérito: hemos descubierto con éxito paquetes maliciosos dentro de los  repositorios PyPI y NPM , como se informó en nuestros blogs anteriores.

Esta vez, hemos ampliado nuestros esfuerzos de investigación para incluir el repositorio RubyGems en nuestro análisis continuo.

Muy rápidamente esta investigación mostró resultados, ya que hemos detectado poco más de 760 paquetes maliciosos de Ruby utilizando nuestra lógica de monitoreo de repositorio.

RubyGems es un administrador de paquetes para el lenguaje de programación Ruby.

Según sus propias estadísticas del sitio, el repositorio contiene alrededor de 158 mil paquetes (llamados gemas) con casi 49 mil millones de descargas totales.

En términos generales, un archivo de gemas es un archivo de cinta (TAR) con la estructura básica de la siguiente manera:

El directorio bin contiene binarios de gemas (si existen), el directorio lib contiene el código de la gema y el directorio de prueba contiene pruebas. Rakefile es utilizado por rake , un programa Make-like implementado en Ruby, para automatizar pruebas y generar código.

El archivo Gemspec contiene metadatos básicos sobre la gema (como el autor, la versión, la descripción), pero también puede incluir información adicional sobre extensiones que serán útiles un poco más adelante.

En nuestro análisis PyPI y NPM nos centramos en un análisis de repositorio a gran escala. Con RubyGems, empleamos un enfoque ligeramente diferente.

Supervisamos nuestra cola de ingesta de gemas en busca de nombres mal escritos y enviamos esas gemas para su procesamiento a nuestra Plataforma de titanio.

Para ser más precisos, creamos una lista de las gemas más populares para usar como referencia. Semanalmente, recolectamos gemas que se enviaron recientemente al repositorio RubyGems.

Si detectamos una nueva gema con un nombre similar a cualquiera de las gemas de la lista de referencia, la marcamos como interesante para el análisis.

El procesamiento de gemas con la Plataforma Titanium es un paso vital, ya que extrae archivos de archivos TAR (entre otros formatos) y produce metadatos valiosos que son el factor clave para un análisis posterior.

Nuestra primera semana de monitoreo marcó más de 400 gems como interesantes.

Esos gems se procesaron en un único servidor con un procesador AMD EPYC 32 core y 256 GB de RAM. El procesamiento tomó poco menos de un minuto (51 segundos para ser precisos), y la Plataforma Titanium logró descomprimir 20.830 archivos, de los cuales 12.720 eran únicos.

Al analizar el desglose de tipos y subtipos de archivos interesantes encontrados durante nuestro análisis, encontramos una mezcla de todo.

Sin embargo, una cosa destaca: la cantidad de archivos ejecutables (PE) portátiles.

Figura 1: Tipos de archivo extraídos de objetos gems

Si bien los archivos PE pueden tener un propósito legítimo en los paquetes, generalmente garantizan una mirada más cercana.

Cada gems procesado contenía el ejecutable con el mismo nombre de archivo ” aaa.png “.

La extensión PNG es lo que hace sonar la alarma aquí; se puede suponer que se utilizó para enmascarar el archivo ejecutable como un archivo de imagen.

Una mirada detallada reveló que cada archivo “aaa.png” era un ejecutable ubicado en la misma ruta en cada gema: ” / ext / trellislike / unflaming / waffling / “.

Figura 2: Contenido del paquete RubyGems visualizado en ReversingLabs A1000

Al mirar el repositorio de RubyGems, descubrimos que todas esas gemas se originaron en dos cuentas de usuario, “JimCarrey” y “PeterGibbons”, con un número bastante alto de descargas totales.

Parecía que los atrapamos con las manos en la masa, ya que el relato de “PeterGibbons” estaba agregando activamente nuevas gemas typosquatted en el momento de nuestro análisis.

En general, del 16 al 25 de febrero de 2020 se cargaron más de 700 gemas de este tipo en el sitio de RubyGems.

Figura 3: Estadísticas de PeterGibbons y JimCarrey del sitio RubyGems

Una gema con typosquatted, ” atlas-client “, se destaca del resto por su recuento de descargas.

Parece que el actor de la amenaza probablemente tuvo éxito en su intento de engañar a los usuarios desprevenidos.

Como se ilustra en las Figuras 3 y 4, esta gema maliciosa tenía 2,100 descargas, cerca del 30% del total de descargas que la gema legítima “atlas_client” tenía al momento de informar al equipo de seguridad de RubyGems.

Figura 4: Descargue el conteo de la gema “atlas-cliente” con typosquatted, y la legítima “atlas_client”

Las extensiones, como se mencionó anteriormente, también se pueden encontrar en archivos gemspec.

Se usan para envolver bibliotecas separadas escritas en C con un contenedor Ruby.

Por convención, si se usan extensiones, todo lo relacionado con ellas se coloca en el directorio ext junto con el archivo extconf.rb .

El archivo extconf.rb configura un Makefile que construye la extensión durante la instalación de la gema.

Sin embargo, las extensiones también se pueden utilizar con fines maliciosos, permitiendo que el malware se ejecute sin ninguna interacción del usuario.

Si observamos más de cerca el archivo gemspec de la gema atlas-client, podemos ver que usa extensiones con la siguiente línea de código:

spec.extensions = [“ext / trellislike / unflaming / waffling / extconf.rb”]

El script extconf.rb se encuentra en la misma ruta (” ext / trellislike / unflaming / waffling /”) que el archivo “aaa.png”, y se utiliza para verificar la plataforma de destino. Si se ejecuta en un sistema Windows, cambiará el nombre del archivo “aaa.png” a “a.exe” y lo ejecutará.

Figura 5: Contenido del script extconf.rb

Un análisis detallado del ejecutable “aaa.png” (extraído de la gema “atlas-client”) revela que fue creado utilizando la herramienta Ocra Ruby2Exe [ 1 ]. Ocra se usa para generar un archivo ejecutable de Windows autoextraíble que contiene tanto el script Ruby como el intérprete Ruby, con todas las dependencias requeridas. Estas secuencias de comandos y dependencias se comprimen con el algoritmo de compresión LZMA.

El script de Ruby “aaa.rb” extraído del ejecutable “aaa.png” contiene VBScript codificado en Base64 (Figura 6) que se decodifica y guarda en el archivo “oh.vbs” (Figura 7).


Figura 6: Base64 codificó VBScript malicioso

 

Figura 7: Decodificado VBScript malicioso

El guión en sí es bastante simple. Primero, crea un nuevo archivo VBScript con el bucle malicioso principal en la ruta “% PROGRAMDATA% \ Microsoft Essentials \ Software Essentials.vbs” . Como mecanismo de persistencia, crea una nueva clave de registro de ejecución automática  “HCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Run Microsoft Software Essentials” . Con esto, el malware asegura que se ejecute cada vez que se inicia o reinicia el sistema.

Cuando se ejecuta el script malicioso “Software Essentials.vbs”, comienza un bucle infinito donde captura los datos del portapapeles del usuario con las siguientes líneas de código:

Establecer objHTML = CreateObject (“htmlfile”)
text = objHTML.ParentWindow.ClipboardData.GetData (“text”)

El script luego verifica si los datos del portapapeles coinciden con el formato de una dirección de billetera de criptomonedas.

Si lo hace, reemplaza la dirección con una controlada por el atacante “1JkU5XdNLji4Ugbb8agEWL1ko5US42nNmc” en una ventana oculta usando el siguiente comando:

WScript.Shell ejecuta

“C: \ Windows \ System32 \ cmd.exe / c echo 1JkU5XdNLji4Ugbb8agEWL1ko5US42nNmc | clip”, 0

Con esto, el actor de la amenaza está tratando de redirigir todas las posibles transacciones de criptomonedas a su dirección de billetera.

Al momento de redactarse esta nota, aparentemente no se realizaron transacciones para esta billetera [ 2 ].


Figura 8: flujo de trabajo de malware de alto nivel

Creemos que el mismo actor de amenazas es responsable de al menos dos campañas maliciosas anteriores contra el repositorio RubyGems ([ 3 ], [ 4 ]).

La misma ruta de archivo “/ ext / trellislike / unflaming / waffling /” se utilizó en todos los ataques.

Del mismo modo, la intención maliciosa estaba relacionada con la criptominería en todos los casos.

No está claro por qué el depósito de RubyGems está siendo bombardeado continuamente por este actor de amenazas.

Dado que los ataques utilizan tecnologías de Windows, esta campaña tiene que afectar a un conjunto muy específico de personas para tener éxito.

El candidato perfecto para sucumbir a este tipo de ataque de cadena de suministro de “rociar y orar” es un desarrollador de Ruby cuyo entorno de elección es un sistema de Windows que también se usa periódicamente para realizar transacciones de BitCoin.

Una raza rara de hecho.

Lo que ciertamente no es raro en estos días son los ataques a la cadena de suministro de software.

Cada plataforma de distribución de software viene con su propio conjunto de riesgos.

Mitigarlos es una tarea desafiante que ha recaído sobre los hombros de los centros de operaciones de seguridad.

Como habilitadores de procesos de negocios, deben garantizar la seguridad de los entornos de desarrollador y del código que la organización está enviando.

Titanium Platform es una pieza única de tecnología de análisis estático.

Con su soplo de cobertura de formato, tiene la capacidad de inspeccionar cualquier tipo de contenido alojado en repositorios de paquetes de código abierto.

Sus capacidades analíticas buscan más que solo malware que podría estar al acecho.

Cada formato que inspecciona viene con su propio conjunto de peculiaridades, algunas de las cuales incluso tienen implicaciones de seguridad.

Es por eso que nuestra plataforma proporciona una vista unificada de los paquetes de software, su composición, configuración, sus respectivas firmas digitales y mitigaciones de seguridad.

Comuníquese con nosotros y programe una demostración para obtener más información sobre la próxima generación de tecnologías diseñadas específicamente para prevenir ataques de la cadena de suministro de software.

El equipo de seguridad de RubyGems ha sido contactado, y todos los paquetes de los usuarios reportados han sido eliminados del repositorio.

Fragmento de paquetes afectadas y SHA256:

Atlas-cliente: 4d1898ea858beff245b9cbe7502ac4dd1be76b656299378e693f3d1068e56564 appium-lib: 4feb512e2aa9dd3847b36f0d76ae054bb2409a4ef145092160de666910b51798 accion mailer_cache_delivery: 61abc946cb1c8c3d930793e5b57ae07b1c1d0fc651f6b8f9f82748839d994001 activemodel_validators: 62801bbd9af0c97fd4a6cd9a1db5fdf24264f8ff8ca22254f442565c68c517f1 asciidoctor_bibliography: 8064b41c7bee7c5fc4ffc65688bc57e9cea26f22c1afcf2b733399123484282e assets-pipeline: 291d5764122658d99bf299b69dee196f9433fd5198dd8477ef674c26fe51ff1e apress_validators: f5de35b5b3bc1f1e1436b803b75988931491105fbb66aeeear_octopus-replication-tracking: 4023335e798a54233b64eab72905acc77dc2b970dcb37f4c8e150d2c41f3d0a5 aliyun-open_search: b2b80a4ff1e7dc67cd9b824aba2cd47292432ace319929e10769652ffef0b030 aliyun-MNS: 4a3fadbaf108fe76b1fa890c7eed2f7c541d0e96f3d5c5ec6fd4d3b0dcb8ced1 ab_split: f8edc0358d0661e46d4187e7f41ea07fb72160381cd4c514e8779c85792d2b38 APNS-polite: af799688a4d7cf9d4a65cf29eeea95fa9261a5141671daf61fc0c17814a51f6c

Otros IOC:
aaa.png (archivo ejecutable): 9d1fcea3079826ca48641ddbd360698c877ec2d09d973c5602676dae26be7c3f aaa.rb: 298e35a96f4cc79ed3fd5e18337d22fd272798f60360fe1e3ca3346ef18e69f7 oh.vbs: b303e55ddd6985f8550af85a602cf745adebc7f3db60a7f52ea53fd0b675df47

 

 

Por Marcelo Lozano – General Publishing IT Connect Latam

 

seguridad

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Fuente REVERSING LABS