Nauchter.pl es mi sitio web, tiene un montón de otros materiales sobre JavaScript, seguridad y otras cosas.
Y hoy vamos a hablar de ejecutar el código de otra persona. Hablando de eso, si les diera una cadena de texto y les pidiera que la pongan en su aplicación y la ejecuten, ¿lo harían? ¿Pondrían mi código en producción sin revisarlo mucho? Bueno, supongo que la respuesta va a ser no. ¿Pero ayudaría si lo pusiera en un archivo tar.gz? ¿Sería más atractivo de esa manera? De alguna manera sí, porque eso es lo que son los paquetes de NPM. Y son geniales, todos los usan, pero en realidad son entradas no sanitizadas de Internet que ponemos en nuestras aplicaciones y ejecutamos. ¿De acuerdo? Así que sí, eso es lo que estamos haciendo, lo hacemos todo el tiempo. Instalo paquetes de NPM todo el tiempo. ¿Y si algunos de los paquetes ahí no son buenos? Y con eso no me refiero a paquetes malos. He publicado algunos paquetes malos y no pasó nada malo. Pero me refiero a paquetes maliciosos, paquetes peligrosos que quieren dañar tu aplicación, tus usuarios. ¿Qué hacemos al respecto? Bueno, hay herramientas para la seguridad de la cadena de suministro, ¿verdad? Entonces, una herramienta podría decir, hey, algunos investigadores descubrieron que este paquete no es bueno y lo informaron. Así que ese paquete que enviaste a producción hace unas semanas, ahora sabemos que no es bueno. Por favor, haz algo al respecto. ¿Es una gran situación para estar? No necesariamente. Ok, hay SocketDev. Puedes usar eso y obtener un ciclo de retroalimentación mucho mejor, porque SocketDev automatiza la búsqueda de cualidades sospechosas en los paquetes. Entonces, SocketDev, unas pocas horas después de que se publique el paquete, podrá decirte que posiblemente haya algo mal con él. Pero luego necesitas investigarlo. En Lavamote decidimos ser proactivos en lugar de reactivos, por lo que asumimos que una de las dependencias en el gráfico de dependencias ya es maliciosa cuando se ejecuta la aplicación. Entonces, ¿cómo funciona? Tengo una demostración, si esta fuera una charla más larga, pueden ver esa demostración, pero veamos la situación en la que instalas una herramienta de compilación para tu proyecto y luego alguien pone esto en el código de tu herramienta de compilación en algún lugar. Así que toma tu token de GitHub mientras se ejecuta en CI y lo envía a algún lugar. ¿Es genial? Probablemente no. Lo que hace LavaMode, LavaMode te permite generar una política para toda tu aplicación, en este caso un proceso de compilación, y luego ejecutarlo en función de esa política. La política se genera automáticamente, detecta casi todo lo que se necesita para que la aplicación se ejecute, luego procedes a ajustar la política al margen, qué cosas deberían estar permitidas y cuáles no. Si nuestro análisis no encuentra algo, no aparece en la política y por defecto no está permitido. En este caso, la política se genera con la solicitud HTTPS y Process.env presente. Lo que podemos hacer es eliminarlos o cambiarlos a false, lo que significa que no están permitidos, y ejecutar tu compilación con lavamode hará que aparezca uno de estos errores. Ya sea esta dependencia maliciosa que solicita el paquete HTTPS, que no está disponible, o que no puede leer env de process porque process no está definido. ¿Cómo es eso posible? Bueno, gracias a Hardened JavaScript. Estamos utilizando Hardened JavaScript detrás de escena para aislar cada dependencia dentro del mismo proceso.
Comments