
Un outil pour étudier les malwares JavaScript.
Un utilitaire pour analyser du JavaScript malveillant.
Installez simplement box-js depuis npm :
npm install box-js --global
box-js est également disponible :
- en tant que module Cuckoo (voir le répertoire
integrationset Nwinternights/Cuckoo_Boxjs);- en tant que Dockerfile (voir
integrations/README.md);- en tant que paquet dans des distributions pour professionnels de la sécurité (REMnux, BlackArch);
- dans le cadre d'applications open source (Intel Owl);
- dans le cadre de services commerciaux tiers (any.run).
Supposons que vous ayez un échantillon nommé sample.js : pour l'analyser, exécutez simplement
box-js sample.js
Il y a de fortes chances que vous souhaitiez également télécharger les éventuelles charges utiles ; utilisez le drapeau --download pour activer le téléchargement. Sinon, le moteur simulera une erreur 404, de sorte que le script sera amené à croire que le site de distribution est indisponible et contactera d'éventuels sites de repli.
Box.js émule un environnement Windows JScript, affiche un résumé de l'émulation dans la console et crée un dossier nommé sample.js.results (s'il existe déjà, il créera sample.js.1.results et ainsi de suite). Ce dossier contiendra :
analysis.log, un journal de l'analyse tel qu'affiché à l'écran ;snippets.json, une liste d'extraits de code exécutés par l'échantillon (JavaScript, commandes shell, etc.) ;urls.json, une liste des URL contactées ;active_urls.json, une liste des URL qui semblent distribuer des logiciels malveillants actifs ;resources.json, les flux ADODB (c'est-à-dire les fichiers que le script a écrits sur le disque) avec les types de fichiers et les hachages ;IOC.json, une liste des comportements identifiés comme IOC (Indicateurs de Compromission). Ceux-ci incluent les accès au registre, les fichiers écrits, les requêtes HTTP, etc.Vous pouvez les analyser vous-même, ou les soumettre automatiquement à Malwr, VirusTotal ou un bac à sable Cuckoo : pour plus d'informations, exécutez box-export --help.
Pour un isolement supplémentaire, il est recommandé d'exécuter l'analyse dans un conteneur Docker temporaire. Consultez
integrations/README.mdpour plus d'informations.
Si vous souhaitez automatiser l'analyse, vous pouvez utiliser les codes de retour – documentés dans
integrations/README.md– pour distinguer les différents types d'erreurs.
Le dépôt git box-js inclut un fichier boilerplate.js. Ce fichier définit des versions simulées d'objets navigateur courants tels que document. Essayez de relancer votre analyse avec l'option --prepended-code=DIR/boilerplate.js, où DIR est le répertoire du dépôt box-js cloné, ou avec --prepended-code=default. L'option --prepended-code indique à box-js de préfixer le JavaScript du fichier donné à l'échantillon analysé.
Notez que vous pouvez copier boilerplate.js et ajouter vos propres classes simulées, objets, etc. selon vos besoins. Utilisez l'option en ligne de commande --prepended-code=show-default pour afficher le chemin complet du fichier boilerplate.js par défaut de box-js.
Bien que box.js soit généralement utilisé sur des fichiers uniques, il peut également exécuter des analyses par lots. Vous pouvez simplement passer une liste de fichiers ou de dossiers à analyser :
box-js sample1.js sample2.js /var/data/mySamples ...
Par défaut, box.js traite les échantillons en parallèle, en exécutant une analyse par cœur. Vous pouvez utiliser un réglage différent en spécifiant une valeur pour --threads : en particulier, 0 supprimera la limite, ce qui fera que box-js générera autant de threads d'analyse que possible, résultant en une analyse très rapide mais pouvant surcharger le système (notez que les analyses sont généralement liées au CPU, pas à la RAM).
Vous pouvez utiliser --loglevel=warn pour masquer les messages liés à l'analyse et n'afficher que les informations de progression.
Une fois l'analyse terminée, vous pouvez extraire les URL actives comme ceci :
cat ./*.results/active_urls.json | sort | uniq