Saltar al contenido

LavaMoat y el ataque a la cadena de suministro de software de Ledger

Aprende cómo LavaMoat ofrece protección triple en el ciclo de desarrollo de software y cómo puedes defender tu app de un ataque hoy.

6 min de lectura
LavaMoat y el ataque a la cadena de suministro de software de Ledger

¿Qué ocurrió?

El 14 de diciembre, una de las bibliotecas de software de Ledger, Ledger Connect Kit, fue víctima de un ataque a la cadena de suministro de software.

Según se informó, el ataque tuvo su origen cuando un exempleado, que aún conservaba acceso de publicación, cayó en una trampa de phishing. Este ataque comprometió sus credenciales de npm. npm, o Node Package Manager, es una herramienta para importar bibliotecas de software de código abierto, ampliamente utilizada en el sector del desarrollo web y en web3.

Este ataque permitió publicar una versión maliciosa de la biblioteca en cuestión. Dicha biblioteca se incluye de forma dinámica y actualizada en tiempo real a través de una Red de Distribución de Contenidos (CDN) en muchas aplicaciones web del ecosistema Ethereum. Esto provocó que se inyectara código malicioso en esas aplicaciones web.

¿Cómo lo prevenimos? LavaMoat.

LavaMoat es un conjunto de herramientas creadas específicamente para ayudar a abordar los problemas de seguridad en la cadena de suministro de software a los que se enfrentan los desarrolladores de aplicaciones web.

LavaMoat ofrece protección contra ataques a la cadena de suministro en tres momentos distintos del ciclo de vida del desarrollo de software: en el momento de instalar las dependencias (cuando se importan todas esas bibliotecas), en el momento de la compilación (cuando la aplicación se prepara para ser servida a través de Internet), y en tiempo de ejecución (cuando la aplicación compilada está en funcionamiento).

LavaMoat destaca por sus protecciones en tiempo de ejecución. Existen otras herramientas que pueden utilizarse durante el desarrollo, como snyk.io, que solo proporciona advertencias sobre vulnerabilidades conocidas, o socket.dev, que ofrece un análisis de código más exhaustivo y no espera a que los expertos reporten hallazgos a una base de datos centralizada. Estas herramientas de análisis desempeñan un papel invaluable, y recomendamos utilizar la integración con GitHub de socket.dev.

Sin embargo, no pueden ofrecer ninguna garantía en tiempo de ejecución. Por este motivo, consideramos que utilizarlas de forma aislada es insuficiente.

Las protecciones de seguridad de LavaMoat se basan en delegar únicamente las capacidades especificadas a las dependencias de tu aplicación.

¿Qué significa eso? Sigue leyendo y consulta nuestra charla en Devcon 6 para comprender en profundidad cómo funciona LavaMoat y cómo se utiliza.

Introducción al modelo de capacidades de objetos

Puedes imaginar un sistema con capacidades: cosas que puede hacer, como mostrar información, leer datos almacenados localmente o realizar solicitudes a otros sistemas, como peticiones web a servidores o solicitudes de transacciones a wallets, y la capacidad de delegar estas capacidades a otros.

Al delegar una capacidad, puedes proporcionar una versión limitada o restringida de la misma. Esto se conoce como atenuación.

Estos tres componentes constituyen la base del modelo de seguridad de capacidades de objetos. Mediante este modelo, puedes comprender quién tiene la capacidad de hacer qué.

Seguridad en aplicaciones web

Los navegadores hacen un trabajo razonable al aislar las aplicaciones en entornos controlados (sandboxing); es decir, manteniéndolas separadas e impidiendo que interfieran con tu ordenador u otros sitios web.

Sin embargo, no proporcionan bloques de construcción sólidos para que los desarrolladores de aplicaciones web puedan aislar partes específicas de su aplicación, lo que podría evitar que ciertos componentes comprometan la aplicación en su totalidad.

Por este motivo, al importar una biblioteca en tu aplicación, estás efectivamente delegando todas las capacidades a esa biblioteca. Esto se complica aún más por el hecho de que la mayoría de las bibliotecas de JavaScript no solo incluyen su propio código, sino también una colección de bibliotecas escritas por distintos autores.

Detalles del ataque a Ledger

La biblioteca @ledger/connect-kit-loader es la forma recomendada por Ledger para integrarse con sus productos. Este paquete es una capa ligera que carga la versión más reciente de su biblioteca desde una CDN.

Si bien esto significa que tu aplicación siempre tendrá la última versión de la biblioteca, también implica que estás delegando efectivamente el control de tu aplicación web a la biblioteca loader de Ledger, que a su vez lo delega al código alojado en la CDN.

Puedes modelar la cadena de delegación de la siguiente manera:

Aplicación web → **@ledger/connect-kit-loader** → jsDelivr CDN → npm → Ledger → exempleado de Ledger → atacante

Incluso esto es una simplificación. Si nos acercamos a un componente, como la CDN de jsDeliver, podemos descubrir una complejidad asombrosa de servicios adicionales que también forman parte de la cadena de suministro y representan posibles puntos de entrada para lanzar un ataque.

Proteger aplicaciones con seguridad de capacidades de objetos

Aunque los propios navegadores no ofrecen muchas herramientas para limitar las capacidades de los subcomponentes de una aplicación, como se mencionó anteriormente, el lenguaje JavaScript está en realidad bien adaptado para esta tarea.

JavaScript, con cierto cuidado, permite construir Compartimentos que limitan a qué puede acceder el código. Consulta el proyecto Hardened Javascript de Agoric para ver una implementación de Compartimentos.

El sistema de seguridad de cadena de suministro LavaMoat de MetaMask y el sistema de plugins MetaMask Snaps se basan en Compartimentos para lograr el confinamiento.

¿Habría prevenido LavaMoat el ataque a la cadena de suministro de Ledger?

Preguntarse si LavaMoat lo habría evitado es algo así como preguntarse si la función de parada al contacto de una sierra de mesa serviría de algo si te aferras a la sierra mientras saltas desde un precipicio: sí, probablemente tus dedos seguirían unidos a tu mano después del salto.

En principio, el funcionamiento de @ledgerhq/connect-kit-loader obliga al desarrollador de la aplicación a renunciar a muchas de las mejores prácticas de seguridad establecidas. Pero no todo está perdido.

La mejor manera de aprovechar la ayuda de LavaMoat (y otras herramientas de seguridad de cadena de suministro) sería utilizar @ledgerhq/connect-kit directamente, sin ceder todo el control al loader.

LavaMoat fue diseñado para mitigar ataques como el hackeo de la wallet Copay, también conocido como "el incidente del event-stream", y ofrece una buena protección contra él. Entonces, ¿cómo se comporta LavaMoat frente a este ataque diferente?

La respuesta es, lamentablemente, el clásico "depende". LavaMoat es una herramienta para desarrolladores de aplicaciones, no de bibliotecas, debido a la forma en que se integra en el tiempo de ejecución de la aplicación. Esto significa que, si bien algunas aplicaciones web podrían haberse protegido con LavaMoat, las aplicaciones sin LavaMoat seguirían siendo vulnerables.

Además, LavaMoat solo aplica una política especificada por los desarrolladores. Si defines una política insegura, LavaMoat no podrá protegerte.

Veamos cómo una aplicación con LavaMoat podría haberse protegido de este ataque.

LavaMoat utiliza un archivo de política para determinar qué capacidades, en forma de APIs globales de la plataforma, debe recibir una dependencia. Para facilitar esto, puedes hacer que LavaMoat analice un paquete y determine automáticamente qué parece necesitar para funcionar. Esto se conoce como análisis estático.

Aunque el análisis estático es un medio imperfecto para comprender qué intenta hacer un código, LavaMoat solo utiliza el análisis estático por conveniencia para ayudarte a generar un archivo de política. No lo utiliza para aplicar sus políticas en tiempo de ejecución. Las políticas generadas son luego revisadas, ajustadas y aprobadas por el desarrollador.

Para la pregunta original, una respuesta es: Sí, LavaMoat puede proteger tu aplicación y a tus usuarios de ataques a la cadena de suministro, impidiendo que los paquetes tengan la capacidad de cargar nuevo código en tiempo de ejecución. Puede protegerte si lo has configurado correctamente y si utilizas dependencias que no exigen capacidades excesivamente poderosas.

Otra respuesta es: No. Si hubieras configurado LavaMoat para permitir que **@ledgerhq/connect-kit-loader** funcionara con normalidad e inyectara una etiqueta de script ejecutando cualquier código a su antojo fuera del entorno de ejecución de LavaMoat, el ataque igualmente habría tenido éxito. Esto forma parte del equilibrio de LavaMoat entre la compatibilidad con versiones anteriores y un sistema más seguro. LavaMoat es muy flexible para ser lo más compatible posible, de modo que puedas integrarlo en tu aplicación sin reescribirla desde cero. La responsabilidad sigue recayendo en el desarrollador de la aplicación para establecer políticas sensatas y elegir dependencias adecuadas. LavaMoat te permite proporcionar selectivamente APIs globales del navegador, pero algunas APIs globales simplemente concentran demasiado poder como para cedérselo de forma segura a un paquete de terceros. Estamos investigando diferentes formas de limitar aún más estos poderes, pero crear algo que funcione sin problemas para paquetes que no hacen ningún esfuerzo por limitar su control es un desafío.

Una de las funciones de LavaMoat, llamada Scuttling, interferiría tanto con el paquete malicioso como con el original cargado por @ledgerhq/connect-kit-loader. Scuttling elimina el acceso a las capacidades para el código que se ejecuta fuera del sandbox de LavaMoat. Esto evitaría que utilizaras el inseguro @ledgerhq/connect-kit-loader desde el principio, y te empujaría a usar directamente y, por tanto, a controlar el proceso de actualización de @ledgerhq/connect-kit, garantizando que mantengas el control total del código que se ejecuta en tu aplicación.

Aunque LavaMoat no es una solución mágica, te otorga control y visibilidad donde de otro modo no tendrías ninguno. LavaMoat debe ser solo una herramienta más dentro de tu estrategia de seguridad.

Esto es lo que puedes hacer ahora mismo para defenderte de un ataque mañana:

Traducido por IA. Puede contener errores. Por favor, verifique siempre la información.

Califica la traducción

Este artículo fue escrito por: