
Outil CLI d'analyse statique qui réduit la surface d'attaque des applications Node.js en construisant des graphes de dépendances et en supprimant les modules et fonctions inutilisés en modes grossier ou fin.
Mininode est un outil en ligne de commande pour réduire la surface d'attaque des applications Node.js en utilisant l'analyse statique du code source. Il supporte deux modes de réduction : (1) coarse, (2) fine.
Mininode construit le graphe de dépendances (modules et fonctions utilisés) de l'application à partir du fichier principal, c'est-à-dire le point d'entrée de l'application. Mininode initialise le point d'entrée au champ main du fichier package.json s'il existe. Sinon, par défaut index.js.
Exemple d'utilisation : node index.js <chemin vers le dossier racine de l'application Node> --mode=(coarse|fine). Voici la liste des options qui peuvent être passées à Mininode.
Liste des options en ligne de commande pouvant être passées à mininode.
--destination, -d : le chemin où mininode sauvegardera l'application Node.js réduite. Valeur par défaut : mininode.--dry-run : génère simplement mininode.json sans modifier l'application initiale.--mode, -m : mode de réduction. La valeur peut être coarse ou fine. En mode coarse, mininode effectue uniquement une réduction grossière. Tandis qu'en mode fine, mininode effectue une réduction fine. En général, la réduction grossière est plus fiable car mininode n'essaie pas de réduire les fonctions inutilisées à l'intérieur du module. Valeur par défaut : coarse.--silent : la sortie console est désactivée. Cela améliorera les performances de mininode.--verbose : affiche des informations supplémentaires dans la console. Valeur par défaut : false.--log : mininode générera un fichier journal contenant le graphe de dépendances de l'application au format json. Valeur par défaut : true.--log-output : le nom du fichier journal généré par mininode. Valeur par défaut : mininode.json.--compress-log : compresse le fichier journal final. Par défaut, il vide tout dans le fichier journal. En production, il est conseillé de passer le flag --compress-log pour économiser de l'espace.--seeds : fichiers de départ (seeds) à partir desquels mininode commencera à construire le graphe de dépendances. Vous pouvez fournir plusieurs fichiers seeds en les séparant par des deux-points.--skip-stat : ignore le calcul des statistiques.--skip-reduction : si passé, mininode ne réduira pas les fichiers JavaScript. Valeur par défaut : false.--skip-remove : si passé, mininode ne supprimera pas les fichiers JavaScript inutilisés. Valeur par défaut : false.eval. Si Mininode détecte un comportement dynamique dans l'application, il se termine avec l'erreur DYNAMIC_BEHAVOUR_DETECTED.Vous pouvez en lire plus sur les détails de notre travail dans l'article de recherche suivant :
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 vous utilisez Mininode dans vos recherches, pensez à citer notre travail en utilisant cette entrée 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}
}
Nous suivons semistandard.