
Una herramienta para estudiar malware en JavaScript.
Una utilidad para analizar JavaScript malicioso.
Simplemente instala box-js desde npm:
npm install box-js --global
box-js también está disponible:
- como módulo de Cuckoo (consulta el directorio
integrationsy Nwinternights/Cuckoo_Boxjs);- como Dockerfile (consulta
integrations/README.md);- como paquete en distribuciones para profesionales de seguridad (REMnux, BlackArch);
- como parte de aplicaciones de código abierto (Intel Owl);
- como parte de servicios comerciales de terceros (any.run).
Supongamos que tienes una muestra llamada sample.js: para analizarla, simplemente ejecuta
box-js sample.js
Probablemente también querrás descargar cualquier payload; usa la bandera --download para habilitar la descarga. De lo contrario, el motor simulará un error 404, de modo que el script será engañado para pensar que el sitio de distribución está caído y contactar con cualquier sitio de respaldo.
Box.js emulará un entorno Windows JScript, imprimirá un resumen de la emulación en la consola y creará una carpeta llamada sample.js.results (si ya existe, creará sample.js.1.results y así sucesivamente). Esta carpeta contendrá:
analysis.log, un registro del análisis tal como se imprimió en pantalla;snippets.json, una lista de fragmentos de código ejecutados por la muestra (JavaScript, comandos de shell, etc.);urls.json, una lista de URLs contactadas;active_urls.json, una lista de URLs que parecen soltar malware activo;resources.json, los flujos ADODB (es decir, los archivos que el script escribió en el disco) con tipos de archivo y hashes;IOC.json, una lista de comportamientos identificados como IOCs (Indicadores de Compromiso). Estos incluyen accesos al registro, archivos escritos, solicitudes HTTP, etc.Puedes analizarlos por tu cuenta, o puedes enviarlos automáticamente a Malwr, VirusTotal o una sandbox de Cuckoo: para más información, ejecuta box-export --help.
Para un mayor aislamiento, se recomienda ejecutar el análisis en un contenedor Docker temporal. Consulta
integrations/README.mdpara más información.
Si deseas automatizar el análisis, puedes usar los códigos de retorno - documentados en
integrations/README.md- para distinguir entre diferentes tipos de errores.
El repositorio de box-js desde git incluye un archivo boilerplate.js. Este archivo define algunas versiones simuladas de objetos comunes del navegador como document. Intenta volver a ejecutar tu análisis con la opción --prepended-code=DIR/boilerplate.js, donde DIR es el directorio del repositorio clonado de box-js o con --prepended-code=default. La opción --prepended-code le indica a box-js que anteponga el JavaScript del archivo dado a la muestra que se está analizando.
Ten en cuenta que puedes copiar boilerplate.js y agregar tus propias clases, objetos, etc. simulados según sea necesario. Usa la opción de línea de comandos --prepended-code=show-default para imprimir la ruta completa al archivo boilerplate.js predeterminado de box-js.
Aunque box.js se usa típicamente en archivos individuales, también puede ejecutar análisis por lotes. Simplemente puedes pasar una lista de archivos o carpetas a analizar:
box-js sample1.js sample2.js /var/data/mySamples ...
Por defecto, box.js procesará las muestras en paralelo, ejecutando un análisis por núcleo. Puedes usar una configuración diferente especificando un valor para --threads: en particular, 0 eliminará el límite, haciendo que box-js genere tantos hilos de análisis como sea posible y resultando en un análisis muy rápido pero posiblemente sobrecargando el sistema (nota que los análisis suelen estar limitados por la CPU, no por la RAM).
Puedes usar --loglevel=warn para silenciar los mensajes relacionados con el análisis y solo mostrar información de progreso.
Después de que el análisis termine, puedes extraer las URLs activas de esta manera:
cat ./*.results/active_urls.json | sort | uniq