
Analyse automatique de fichiers SWF basée sur certaines heuristiques. Extensible via des plugins.
NOTE : Les instructions suivantes concernent Python3.
Si vous avez besoin d'installer FLASHMINGO sur Python2.7, vous pouvez consulter la version 1.0 sous l'onglet releases. Les étapes d'installation sont essentiellement les mêmes.
Installez les paquets Python3 listés dans requirements.txt.
Vous pouvez utiliser la commande suivante : pip3 install -r requirements.txt
Si vous souhaitez utiliser la fonctionnalité de décompilation, vous devez installer Jython. Les utilisateurs d'Ubuntu/Debian peuvent exécuter apt install jython
Clonez le projet ou téléchargez le fichier zip.
FLASHMINGO est un framework d'analyse pour les fichiers SWF. L'outil trie automatiquement les fichiers Flash suspects et guide le processus d'analyse ultérieur, libérant ainsi des ressources précieuses dans votre équipe. Vous pouvez facilement intégrer les modules d'analyse de FLASHMINGO dans votre flux de travail.
Encore aujourd'hui, les enquêteurs judiciaires et les analystes de malwares doivent traiter des fichiers SWF suspects. Si l'histoire se répète, la menace de sécurité pourrait même devenir plus grande après la fin de vie de Flash en 2020. Les systèmes continueront à prendre en charge un format de fichier hérité qui ne sera plus mis à jour avec des correctifs de sécurité. L'automatisation est la meilleure façon de gérer ce problème, et c'est là que FLASHMINGO peut vous aider. FLASHMINGO est un framework d'analyse pour traiter automatiquement les fichiers SWF, vous permettant de signaler des échantillons Flash suspects et de les analyser avec un effort minimal. Il s'intègre dans divers flux de travail d'analyse en tant qu'application autonome ou bibliothèque puissante. Les utilisateurs peuvent facilement étendre les fonctionnalités de l'outil via des plugins Python personnalisés.
FLASHMINGO est conçu dans un souci de simplicité. Il lit un fichier SWF et crée un objet (SWFObject) représentant son contenu et sa structure. Ensuite, FLASHMINGO exécute une série de plugins agissant sur cet SWFObject et renvoyant leurs valeurs au programme principal.
Ci-dessous un diagramme de flux ASCII obligatoire :
+----------+
| |
+------------+----------->+ PLUGIN 1 +------------+
| | | | |
| | +----------+ |
| | |
| | +----------+ |
| | | | |
+---------+ | +----------->+ PLUGIN 2 +--------+ |
|SWF FILE +----------->+ FLASHMINGO | | | | |
+---------+ | | +----------+ | |
| | | |
| | | |
| | +-----v---v-+
| | | |
| | | |
+-----+------+------------------------->+ SWFOBJECT |
^ | |
| | |
| +-----+-----+
| |
| |
| |
+---------------------------------------+
Lorsque vous utilisez FLASHMINGO comme bibliothèque dans vos propres projets, vous n'avez à vous soucier que de deux types d'objets :
SWFObject(s), représentant le(s) échantillon(s)Flashmingo. Celui-ci agit essentiellement comme un harnais connectant les plugins et les SWFObject(s).Les plugins de FLASHMINGO sont stockés dans leurs propres répertoires sous... vous l'avez deviné : plugins
Lorsqu'un objet Flashmingo est instancié, il parcourt ce répertoire et traite tous les manifestes des plugins. Si cela indique que le plugin est actif, il est enregistré pour une utilisation ultérieure. Au niveau du code, cela signifie qu'un petit dictionnaire plugin_info est ajouté à la liste plugins.
Les plugins sont invoqués via l'API run_plugin avec deux arguments :
SWFObjectEn option, la plupart des plugins vous permettent de passer vos propres données utilisateur. Cela dépend du plugin (lisez la documentation) et cela peut être expliqué plus facilement avec un exemple.
Le plugin par défaut SuspiciousNames recherche dans tous les pools de constantes les chaînes contenant des sous-chaînes suspectes (par exemple : 'overflow', 'spray', 'shell', etc.). Il existe une liste de sous-chaînes courantes déjà codée en dur dans le plugin afin qu'il puisse être utilisé tel quel. Cependant, vous pouvez passer une liste de vos propres sous-chaînes définies, dans ce cas via le paramètre names.
Exemple de code :
fm = Flashmingo()
print fm.run_plugin('DangerousAPIs', swf=swf)
print fm.run_plugin('SuspiciousNames', swf=swf, names=['spooky'])
FLASHMINGO est fourni avec quelques plugins utiles prêts à l'emploi :
Un plugin template est fourni pour un développement facile. Étendre FLASHMINGO est assez simple. Suivez ces étapes simples :
runVous êtes prêt à partir :)
docs pour la documentation générée automatiquement$ pip install sphinxcontrib-napoleon
Après avoir configuré Sphinx pour construire votre documentation, activez napoleon dans le fichier conf.py de Sphinx :
Dans conf.py, ajoutez napoleon à la liste des extensions
extensions = ['sphinxcontrib.napoleon']
Utilisez sphinx-apidoc pour construire votre documentation d'API :
$ sphinx-apidoc -f -o docs/source projectdir
Ceci crée des fichiers .rst que Sphinx traitera
$ make html
C'est tout ! :)