
Uma ferramenta para estudar malware JavaScript.
Uma utilidade para analisar JavaScript malicioso.
Basta instalar o box-js a partir do npm:
npm install box-js --global
O box-js também está disponível:
- como um módulo do Cuckoo (veja o diretório
integrationse Nwinternights/Cuckoo_Boxjs);- como um Dockerfile (veja
integrations/README.md);- como um pacote em distribuições para profissionais de segurança (REMnux, BlackArch);
- como parte de aplicações de código aberto (Intel Owl);
- como parte de serviços comerciais de terceiros (any.run).
Digamos que você tenha uma amostra chamada sample.js: para analisá-la, basta executar
box-js sample.js
É provável que você também queira baixar quaisquer payloads; use a flag --download para ativar o download. Caso contrário, o mecanismo simulará um erro 404, de modo que o script será enganado, pensando que o site de distribuição está fora do ar e contactando quaisquer sites de fallback.
O Box.js irá emular um ambiente Windows JScript, exibirá um resumo da emulação no console e criará uma pasta chamada sample.js.results (se já existir, criará sample.js.1.results e assim por diante). Esta pasta conterá:
analysis.log, um log da análise tal como foi impressa na tela;snippets.json, uma lista de trechos de código executados pela amostra (JavaScript, comandos shell, etc.);urls.json, uma lista de URLs contactados;active_urls.json, uma lista de URLs que parecem distribuir malware ativo;resources.json, os streams ADODB (ou seja, os arquivos que o script escreveu em disco) com tipos de arquivo e hashes;IOC.json, uma lista de comportamentos identificados como IOCs (Indicadores de Comprometimento). Estes incluem acessos ao registro, arquivos escritos, requisições HTTP e assim por diante.Você pode analisar estes por conta própria, ou submetê-los automaticamente ao Malwr, VirusTotal ou uma sandbox Cuckoo: para mais informações, execute box-export --help.
Para maior isolamento, é recomendado executar a análise em um contêiner Docker temporário. Consulte
integrations/README.mdpara mais informações.
Se desejar automatizar a análise, pode usar os códigos de retorno - documentados em
integrations/README.md- para distinguir entre diferentes tipos de erros.
O repositório box-js do git inclui um arquivo boilerplate.js. Este arquivo define algumas versões stubbed de objetos comuns do navegador, como document. Tente reexecutar sua análise com a opção --prepended-code=DIR/boilerplate.js, onde DIR é o diretório do repositório clonado do box-js, ou com --prepended-code=default. A opção --prepended-code diz ao box-js para anexar o JavaScript no arquivo dado antes da amostra a ser analisada.
Note que você pode copiar o boilerplate.js e adicionar suas próprias classes stubbed, objetos, etc., conforme necessário. Use a opção de linha de comando --prepended-code=show-default para imprimir o caminho completo para o arquivo boilerplate.js padrão do box-js.
Enquanto o box.js é tipicamente usado em arquivos individuais, ele também pode executar análises em lote. Você pode simplesmente passar uma lista de arquivos ou pastas para analisar:
box-js sample1.js sample2.js /var/data/mySamples ...
Por padrão, o box.js processará as amostras em paralelo, executando uma análise por núcleo. Você pode usar uma configuração diferente especificando um valor para --threads: em particular, 0 removerá o limite, fazendo com que o box-js crie o máximo de threads de análise possível, resultando em análise muito rápida, mas possivelmente sobrecarregando o sistema (note que as análises geralmente são limitadas pela CPU, não pela RAM).
Você pode usar --loglevel=warn para silenciar mensagens relacionadas à análise e exibir apenas informações de progresso.
Após a análise terminar, você pode extrair as URLs ativas assim:
cat ./*.results/active_urls.json | sort | uniq