BTG V2 : outil de recherche sur les IOC
BTG est un outil d’aide à la qualification d’observables potentiellement malveillant de différents types (URL, MD5, SHA1, SHA256, SHA512, IPv4, IPv6, domain etc..). Il est né d’un besoin des analystes de Conix : lors de leurs activités, les analystes SOC et DFIR rencontrent un grand nombre d’informations d’origines variées qu’ils doivent qualifier comme malveillantes ou non.
Beaucoup de bases de connaissance comportant des marqueurs d’activité jugée malveillante (IOC) sont accessibles sur différents sites web tels que VirusTotal, ZeusTracker, etc. Les SOC et CERT peuvent également intégrer leurs bases internes telles que MISP. Les tâches journalières des analystes SOC et DFIR sont ainsi ponctuées par les recherches d’indicateurs comme les adresses IP, les hachs de fichier, les noms de domaines sur ses sources ouvertes ou internes ; ces actions sont répétitives et chronophages. C’est pourquoi, le CERT-Conix a créé cet outil permettant aux analystes de qualifier un observable en le confrontant à de nombreuses bases d’IOC en sources ouvertes.
Utilisation : $ btg [your research (URL/MD5/SHA1/SHA256/SHA512/IPv4/IPv6/domain)]
Pour plus d’options : $ btg –help
Le code source est accessible sur le répertoire GitHub de Conix.
Une deuxième version de BTG incluant de nombreuses mises à jour est maintenant prête à être utilisée, ses mises jour sont décrites dans la suite de cet article, et une démonstration dans la vidéo ci-après :
Point de vue utilisateur
Nouvelles sources ouvertes : cinq nouvelles sources ouvertes d’IOC ont été ajoutées à celles déjà présentes dans la précédente version de BTG
– MetaDefender
– Google Safe Browsing
– MalwareConfig
– URLHaus
– FeodoTracker
Nouvelles fonctionnalités :
# Extension des observables
L’outil est maintenant capable d’étendre la liste d’observable fournie en entrée via l’appel à la commande « –extend ». Cette extension concerne les urls et noms de domaine. Par exemple, depuis une url, BTG extrait le nom de domaine correspondant, ce dernier est séparé en nom de domaine enregistré et sous noms de domaine.
Le but de cette fonctionnalité est d’augmenté le champs d’observation pour affiner la qualification en croisant plus de résultats.
# Suppression des doublons
Si un marqueur est donné plusieurs fois par l’utilisateur, il ne sera confronté qu’une seule fois par l’outil.
# Recherche en cache
L’implémentation de la recherche en cache de la première version de BTG a été revue. Il est a présent possible de rechercher dans les fichiers de stockages obtenues lors des précédentes recherches en ligne si le mode offline est activé.
# Informations sur l’exécution du programme
A la fin de l’exécution, trois informations sont données à l’utilisateur : le nombre de modules activés, le nombre d’observables demandés et le temps d’exécution.
# Export des résultats au format JSON
Les résultats donnés par BTG peuvent à présent êtres récupérés dans un fichier JSON en utilisant la commande « –json ».
# Nouvelle interface utilisateur
L’interface utilisateur a changé. Les résultats sont maintenant triés par IOC, ce qui permet une lecture plus facile pour les utilisateurs. De plus, les erreurs ne sont plus mélangées avec les résultats positifs où elles ralentissaient la lecture. Maintenant, elles sont comptées durant l’exécution. Avant la terminaison du programme, elles sont affichées par module afin d’identifier si l’un d’eux a échoué : mise à jour d’API, serveur hors-ligne, clé d’API périmé, etc.
Point de vue programmation et performance
Contrôle des processus :
# Mutex sur PID
Un mutex basé sur le ProcessIDentifier régule les exécutions simultanées de BTG. Si une première instance est en cours, une seconde doit attendre la fin de la première avant de pouvoir effectuer sa recherche.
# Contrôle des modules
Le processus principal de BTG contrôle quel module doit être appelé pour quel observable. Ce contrôle est fait à travers un JSON où chaque observable est associé à une liste des modules activés. Grâce à ça, un module est lancé si et seulement s’il peut répondre aux prérequis de type (“MD5”, “IPv4” etc.) et de méthode de recherche (“offline, “online”), ce qui réduit la charge de travail.
Performance :
# Multi-processing
Cet aspect de l’outil a été complétement refait. Le multi-processing est maintenant implémenté par Python-RQ et Redis. Il corrige un défaut majeur de la version précédente, qui était la génération importante de sous-processus ralentissant le système.
# Requêtes HTTP asynchrones
Les modules effectuant des recherches sur des bases de données en ligne sont maintenant regroupées en sessions HTTP, dans le but de réduire le temps d’attente de la réception des réponses aux requêtes et par transitivité, le temps d’exécution total du programme. Tous les modules ne supportent pas ce type de requête car certaines sources demandent des séquences de requêtes pour authentification ou d’utiliser des bibliothèques particulières. Les modules acceptant cette implémentation sont :
– Cuckoosandbox
– GoogleSafeBrowsing
– Irish
– Malekal
– MetaDefender
– Misp
– VirusTotal
– VxStream