
Strumento CLI di analisi statica che riduce la superficie d'attacco delle applicazioni Node.js costruendo grafi di dipendenza e rimuovendo moduli e funzioni inutilizzati in modalità grossolana o fine.
Mininode è uno strumento CLI per ridurre la superficie d'attacco delle applicazioni Node.js utilizzando l'analisi statica del codice sorgente. Supporta due modalità di riduzione: (1) grossolana, (2) fine.
Mininode costruisce il grafo delle dipendenze (moduli e funzioni utilizzati) dell'applicazione partendo dal file principale, cioè il punto di ingresso dell'applicazione. Mininode inizializza il punto di ingresso al campo main del file package.json se esiste, altrimenti usa index.js.
Esempio di utilizzo: node index.js <path to Node application root folder> --mode=(coarse|fine). Di seguito è riportato l'elenco delle opzioni che possono essere passate a Mininode.
Elenco delle opzioni da riga di comando che possono essere passate a mininode.
--destination, -d: il percorso in cui mininode salverà l'applicazione Node.js ridotta. Valore predefinito: mininode.--dry-run: genera solo mininode.json senza modificare l'applicazione iniziale.--mode, -m: modalità di riduzione. Il valore può essere coarse o fine. In modalità coarse mininode eseguirà solo una riduzione grossolana. In modalità fine mininode eseguirà una riduzione fine. In generale la riduzione grossolana è più affidabile perché mininode non tenterà di ridurre le funzioni inutilizzate all'interno del modulo. Valore predefinito: coarse.--silent: l'output della console è disabilitato. Ciò migliorerà le prestazioni di mininode.--verbose: mostra informazioni aggiuntive nella console. Valore predefinito: false--log: mininode genererà un file di log interno contenente il grafo delle dipendenze dell'applicazione in formato json. Valore predefinito: true.--log-output: il nome del file di log generato da mininode. Valore predefinito: mininode.json.--compress-log: comprime il file di log finale. Di default scrive tutto nel file di log. In produzione si consiglia di passare il flag --compress-log per risparmiare spazio.--seeds: file seed da cui mininode inizierà a costruire il grafo delle dipendenze. È possibile fornire più file seed separandoli con i due punti.--skip-stat: salta il calcolo delle statistiche--skip-reduction: se passato, mininode non ridurrà i file JavaScript. Valore predefinito: false.--skip-remove: se passato, mininode non rimuoverà i file JavaScript inutilizzati. Valore predefinito: false.eval. Se Mininode rileva un comportamento dinamico nell'applicazione, esce con l'errore DYNAMIC_BEHAVOUR_DETECTED.Puoi leggere maggiori dettagli sul nostro lavoro nel seguente articolo di ricerca:
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
Se utilizzi Mininode nella tua ricerca, considera di citare il nostro lavoro usando questa voce 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}
}
Seguiamo lo standard semistandard.