Video Summary and Transcription
Los paquetes de NPM pueden ser potencialmente peligrosos, por lo que es importante ser proactivo en su gestión. Lava Mode te permite detectar e investigar paquetes sospechosos antes de implementar tu aplicación. Lavamote evita el acceso no autorizado a recursos sensibles mediante el aislamiento de dependencias y el uso de JavaScript endurecido. Lava Mode facilita el análisis de archivos ofuscados y comprender sus acciones.
1. The Importance of Proactive Package Management
Los paquetes de NPM son entradas no sanitizadas de Internet que se ejecutan en tu aplicación. ¿Y si algunos de ellos son maliciosos y peligrosos? Esperar a que alguien lo descubra no es ideal. Con Lava Mode, puedes ser proactivo en lugar de reactivo. Te permite detectar paquetes sospechosos e investigarlos antes de enviar tu aplicación a producción. Permíteme mostrarte una demostración.
♪♪ ♪♪ OK, soy Zb. Ahora, Gector, está en la esquina y en el medio. OK, ¿tomarías una cadena que te di y la ejecutarías en tu aplicación? Como, eso es código. Levanten la mano si lo harían. ¿De verdad? OK, ¿ayudaría si lo pongo en el archivo tar.gz? LA AUDIENCIA SE RÍE Porque eso es lo que son los paquetes de NPM, y son gloriosos, no me malinterpretes, pero también son entradas no sanitizadas de Internet que se ejecutan en tu aplicación.
Sí, y los amamos. Instalo paquetes de NPM todo el tiempo. Como, eso es lo principal que hago en el trabajo. Pero, ¿qué pasa si algunos de ellos no son buenos? Y no me refiero a paquetes malos. Publiqué un montón de paquetes malos, no pasó nada malo, pero en realidad maliciosos, paquetes peligrosos, ¿y entonces qué? Bueno, puedes esperar a que alguien descubra que el paquete es malicioso, enviarlo a algún lugar y luego NPM audit te dirá unas semanas después de haber enviado tu aplicación a producción con este paquete en tus dependencias. Eso ya funciona. Puedes usar socket dev, que tiene un ciclo de retroalimentación mucho más rápido, pero solo te dice que algo es sospechoso y tienes que investigar. ¿Tienes tiempo para leer tus dependencias? No lo sé. Oh, no tengo conexión a la red. Eso es gracioso. Sí, había un logotipo aquí. De acuerdo, pero con Lava Mode, puedes ser proactivo en lugar de reactivo. Y eso es algo genial, ser proactivo en lugar de reactivo. Permíteme ver si puedo actualizar esto ahora. De acuerdo, tengo una demostración. Puedo mostrarte lo que hace. Esta es una versión muy breve de la demostración. Lo siento, hay muchos más pasos, pero tengo una aplicación aquí que está usando un paquete para obtener datos muy valiosos y luego los envía a un servidor diferente con alguna autorización que proviene de variables de entorno. De acuerdo, si lo ejecuto, tengo este servidor local ejecutándose y mostrará el resultado. De acuerdo, eso es lo que hace. Obtiene cosas. Entonces, ¿qué hace el paquete? El paquete obtiene esta información valiosa de algún lugar y la envía. De acuerdo, ahora, ¿qué pasa si el mantenedor se aburre y le entrega el paquete a otra persona que tenía malas intenciones. De acuerdo, mira, codificación en vivo, apenas escribo. Entonces, si obtienen tu preciado secreto y lo envían a otro lugar, ¿qué pasaría? Bueno, ellos lo obtendrían.
2. Preventing Unauthorized Access with Lavamote
Lavamote genera una política para prevenir el acceso no autorizado a recursos sensibles. Mediante el uso de JavaScript reforzado y la tecnología LockDown, Lavamote aísla cada dependencia dentro del mismo proceso, evitando la manipulación del entorno JavaScript. Si quieres saber más, me ofrezco a ayudarte a configurar un proyecto de Lava MultiView.
Vale, ¿así que el otro servidor acaba de obtener el secreto, verdad? Y las cosas siguen funcionando. De acuerdo, ¿y si queremos evitarlo? Ahí es donde entra Lavamote y Lavamote genera una política para ti que contiene información como este paquete puede acceder a fetch y buffer para otras versiones de ese paquete que quería demostrar.
De acuerdo, con Lavamote, si hago, tengo Lavamote conectado como npm test. Lo voy a ejecutar y va a decir esto. Está un poco confuso, pero dice que el proceso no existía. En realidad, el proceso estaba indefinido solo para este paquete. Así que puedes usar el proceso en la aplicación principal u otros paquetes pero este paquete no tiene acceso a él.
De acuerdo, hagamos un poco más de hacking. ¿Has oído hablar de la contaminación de prototipos? Hubo una oportunidad de escuchar sobre eso hoy. Así que si tomo el prototipo de objeto y defino un setter como campo de autorización en eso y paso el encabezado de autorización a fetch, fetch va a llamar a mi setter que establecí en el prototipo global. Qué gracioso. De acuerdo, esto seguirá funcionando en el nodo regular. De acuerdo, y luego, sí, obtuve el portador y el secreto. De acuerdo, pero si lo ejecuto en modo Lava, voy a obtener un error que dice no se puede definir la propiedad de autorización, el objeto no es extensible. Lava mode también utiliza una tecnología detrás de escena llamada LockDown que bloquea todo y es imposible manipular el entorno JavaScript en sí mismo.
De acuerdo, volviendo aquí. ¿Cuál es la magia? Se llama JavaScript reforzado. Te permite aislar, en nuestro caso, lo estamos usando para aislar cada dependencia dentro del mismo proceso. No hay otro contexto o reinos involucrados en todo esto. Tiene compartimento, LockDown, reforzado, sí, vamos a pasar por encima de eso. Eventualmente se convertirá en parte del lenguaje. Ahora mismo es una propuesta en una etapa temprana, pero viene de personas responsables de cosas como Command JS, promesa en el lenguaje, etc. Si quieres saber más, estos enlaces están disponibles. Y me ofrezco a ayudarte a configurar un proyecto de Lava MultiView si te pones en contacto lo suficientemente temprano. Pero prometí que evocaría todas las cadenas, ¿verdad? Así que tengo una demostración más que es, oh, aún no se me ha acabado el tiempo. Genial. Hice esta cosa, usé esta tecnología para hacer esta cosa donde puedo ejecutar cualquier código y me solicita sincrónicamente todo a lo que accede. Así que tomé malware real de NPM. Ya lo han eliminado, pero estaba allí. Sí, vamos a ejecutarlo.
3. Analizando un Archivo Ofuscado
El archivo utiliza eval y múltiples niveles de ofuscación. Después de desofuscarlo, revela los módulos requeridos y realiza varias acciones, incluyendo el análisis de datos y el envío de un post a Discord. El archivo no fue difícil de entender, gracias a Lava mode.
Entonces está utilizando eval y un montón de otras cosas un montón de veces, y tengo que estar de acuerdo con esto pero pasé por este escenario muchas veces. Tiene cuatro niveles de ofuscación. Intenté desofuscarlo y no funcionó después de desofuscarlo, malware muy astuto.
Y ahora se revela ante mí. ¿Quieres saber cómo se ve el archivo? Este es el archivo original que estoy ejecutando en mi herramienta. Y, dice, Require FS. De acuerdo, ¿qué más requiere? HTTPS, child process, genial. Intenta salir de algo y luego requiere Axtios y luego busca process. De acuerdo, vamos a darle un proceso falso. Env, app local data, de acuerdo, de acuerdo. Sé lo que estás buscando, genial. Vamos a darle una cadena que pueda reconocer y luego lee o hace un DRSync en eso e intenta analizarlo. Luego llama a la lista de tareas del proceso. De acuerdo, bien, y luego envía un post a Discord. No tuve que desofuscar el archivo. Se reveló ante mí, gracias. Lava mode. ¡Woo!
Comments