
Ferramenta CLI de análise estática que reduz a superfície de ataque de aplicações Node.js construindo gráficos de dependência e removendo módulos e funções não utilizados em modos grosso ou fino.
Mininode é uma ferramenta CLI para reduzir a superfície de ataque de aplicações Node.js usando análise estática de código fonte. Ela suporta dois modos de redução: (1) grosseiro, (2) refinado.
Mininode constrói o grafo de dependências (módulos e funções utilizadas) da aplicação a partir do arquivo principal, ou seja, o ponto de entrada da aplicação. Mininode inicializa o ponto de entrada para o campo main do arquivo package.json, se existir. Caso contrário, o padrão é index.js.
Exemplo de uso: node index.js <caminho para a pasta raiz da aplicação Node> --mode=(coarse|fine). Abaixo está a lista de opções que podem ser passadas para o Mininode.
Lista de opções de linha de comando que podem ser passadas para o mininode.
--destination, -d: o caminho onde o mininode salvará a aplicação Node.js reduzida. O valor padrão: mininode.--dry-run: apenas gera o mininode.json sem modificar a aplicação inicial.--mode, -m: modo de redução. O valor pode ser coarse ou fine. No modo coarse, o mininode realizará apenas a redução grosseira. Já no modo fine, o mininode realizará a redução refinada. Em geral, a redução grosseira é mais confiável, pois o mininode não tentará reduzir funções não utilizadas dentro do módulo. Valor padrão: coarse.--silent: a saída do console é desabilitada. Isso melhorará o desempenho do mininode.--verbose: exibe informações adicionais no console. O valor padrão: false--log: o mininode gerará um arquivo de log contendo o grafo de dependências da aplicação em formato json. O valor padrão: true.--log-output: o nome do arquivo de log gerado pelo mininode. O valor padrão: mininode.json.--compress-log: comprime o arquivo de log final. Por padrão, ele despejará tudo no arquivo de log. Em produção, é aconselhável passar a flag --compress-log para economizar espaço.--seeds: arquivos semente a partir dos quais o mininode começará a construir o grafo de dependências. Você pode fornecer vários arquivos semente separando-os por dois pontos.--skip-stat: pula o cálculo das estatísticas--skip-reduction: se passado, o mininode não reduzirá os arquivos JavaScript. O valor padrão: false.--skip-remove: se passado, o mininode não removerá arquivos JavaScript não utilizados. O valor padrão: false.eval. Se o Mininode detectar comportamento dinâmico na aplicação, ele encerra com o erro DYNAMIC_BEHAVOUR_DETECTED.Você pode ler mais sobre os detalhes do nosso trabalho no seguinte artigo de pesquisa:
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 você usar Mininode em sua pesquisa, considere citar nosso trabalho 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}
}
Estamos seguindo o semistandard.