
Herramienta CLI de análisis estático que reduce la superficie de ataque de aplicaciones Node.js mediante la construcción de grafos de dependencias y la eliminación de módulos y funciones no utilizados en modos grueso o fino.
Mininode es una herramienta CLI para reducir la superficie de ataque de las aplicaciones Node.js mediante el análisis estático del código fuente. Soporta dos modos de reducción: (1) grueso, (2) fino.
Mininode construye el gráfico de dependencias (módulos y funciones utilizados) de la aplicación a partir del archivo principal, es decir, el punto de entrada de la aplicación. Mininode inicializa el punto de entrada al campo main del archivo package.json si existe. De lo contrario, por defecto es index.js.
Ejemplo de uso: node index.js <ruta a la carpeta raíz de la aplicación Node> --mode=(coarse|fine). A continuación se muestra la lista de opciones que se pueden pasar a Mininode.
Lista de opciones de línea de comandos que se pueden pasar a mininode.
--destination, -d: la ruta donde mininode guardará la aplicación Node.js reducida. El valor predeterminado: mininode.--dry-run: solo genera mininode.json sin modificar la aplicación inicial.--mode, -m: modo de reducción. El valor puede ser coarse o fine. En el modo coarse, mininode realizará solo una reducción de grano grueso. Mientras que en el modo fine, mininode realizará una reducción de grano fino. En general, la reducción de grano grueso es más confiable, porque mininode no intentará reducir funciones no utilizadas dentro del módulo. Valor predeterminado: coarse.--silent: la salida de la consola está deshabilitada. Esto mejorará el rendimiento de mininode.--verbose: muestra información adicional en la consola. El valor predeterminado: false--log: mininode generará un archivo de registro interno, que contiene el gráfico de dependencias de la aplicación en formato json. El valor predeterminado: true.--log-output: el nombre del archivo de registro generado por mininode. El valor predeterminado: mininode.json.--compress-log: comprime el archivo de registro final. Por defecto, volcará todo en el archivo de registro. En producción, se recomienda pasar la opción --compress-log para ahorrar espacio.--seeds: archivos semilla desde donde mininode comenzará a construir el gráfico de dependencias. Puede proporcionar varios archivos semilla separándolos con dos puntos.--skip-stat: omite el cálculo de las estadísticas--skip-reduction: si se pasa, mininode no reducirá los archivos JavaScript. El valor predeterminado: false.--skip-remove: si se pasa, mininode no eliminará los archivos JavaScript no utilizados. El valor predeterminado: false.eval. Si Mininode detecta comportamiento dinámico en la aplicación, sale con el error DYNAMIC_BEHAVOUR_DETECTED.Puede leer más sobre los detalles de nuestro trabajo en el siguiente artículo de investigación:
Mininode: Reducing the Attack Surface of Node.js Applications [PDF]
Igibek Koishybayev, Alexandros Kapravelos
Proceedings of the International Symposium on Research in Attacks, Intrusions and Defenses (RAID), 2020
Si utiliza Mininode en su investigación, considere citar nuestro trabajo usando esta entrada Bibtex:
@conference{mininode-raid20,
title = {{Mininode: Reducing the Attack Surface of Node.js Applications}},
author = {Koishybayev, Igibek and Kapravelos, Alexandros},
booktitle = {{Proceedings of the International Symposium on Research in Attacks, Intrusions and Defenses (RAID)}},
year = {2020}
}
Seguimos el semistandard.