Entonces, ¿cómo podemos mitigar la confusión de dependencias? Bueno, el uso de scopes para paquetes internos es una gran herramienta cuando estás alojando un registro de terceros o, en general, tratando de mantener el código privado disponible para los equipos. Asegurarse de que la configuración del registro esté establecida dentro de los archivos npm rc de todos tus proyectos también es clave para garantizar que no intentes acceder a un registro público y descargar software que no pretendes. Por supuesto, responde rápidamente a los fallos de construcción, ya que pueden indicar una mala configuración dentro de tus proyectos.
¿Cómo podemos mitigar la compromisión del registro? Bueno, el gestor de paquetes npm y la mayoría de los gestores de paquetes ya tienen soporte de archivos de bloqueo, que es una de las claves para garantizar que verifiques la integridad de los paquetes que has instalado previamente y has visto antes, y asegurarte de que has almacenado en caché cosas como las verificaciones de integridad y la información SSRI.
¿Cómo podemos mitigar la toma de cuentas? Bueno, el registro de npm y las experiencias en github.com han estado implementando lentamente la verificación de inicio de sesión y la aplicación de la autenticación de dos factores (2FA). Esto incluye mejorar la experiencia de inicio de sesión de 2FA a través de la autenticación web, y también han realizado grandes inversiones en el equipo de soporte y los flujos de autenticación.
Entonces, pasemos a la mutabilidad. Hemos hablado un poco de esto antes, pero esta es una de las áreas de mayor preocupación cuando hablamos de seguridad de la cadena de suministro. Cosas como paquetes remotos de terceros, scripts de instalación y más, todos son la causa de instalaciones mutables.
Entonces, ¿cómo podemos eliminar la mutabilidad en nuestros proyectos? Bueno, comienza eliminando o evitando referencias a paquetes mutables. Dentro del Manifiesto de Paquetes, puedes encontrar referencias a etiquetas de distribución, archivos tar remotos y repositorios git remotos. En todos estos casos, estas son referencias mutables a paquetes, lo cual creará problemas si intentas tener instalaciones reproducibles.
Una gran preocupación aquí es que el registro de npm realmente almacena metadatos de paquetes mutables e inmutables, que no se validan con respecto al archivo tar. Esto es un gran problema y algo que se debe tener en cuenta. Como se mencionó antes, el uso de archivos de bloqueo ayuda a bloquear el valor de integridad de las firmas y, en realidad, la estructura del árbol de tus proyectos. Utilizarlos junto con comandos como 'npm ci' obligará a la reificación del mismo árbol instalado una y otra vez. Es importante comprender qué validación se está realizando y qué no se está realizando. Bueno, hoy en día, la validación de firmas y valores de integridad se realiza en el CLI de npm. Y hay herramientas mejoradas que están por venir.
Otra herramienta que a menudo se pasa por alto, pero que es muy útil cuando hablamos de estados mutables e inmutables de proyectos, es la bandera 'before'. Proporcionar una fecha a 'npm install' en la bandera 'before' te ayudará a fijar las dependencias del registro en un período de tiempo específico. Esto solo funcionará para dependencias o paquetes del registro. No puedes trabajar con dependencias git de terceros o referencias a archivos tar remotos, ya que son mutables.
Echemos un vistazo al estado actual de las soluciones y herramientas que tenemos en el ecosistema. Muchas herramientas de asesoramiento, como Dependent Bot, Renovate y varias otras integraciones de CI, te proporcionan auditorías o información sobre tus proyectos y paquetes. Ten en cuenta que esta información es tan precisa como el gestor de paquetes o el cerebro en el que se realiza el análisis y las ideas. Y como te mostré antes, esto puede variar mucho según las herramientas que utilices.
Comments