Boîtier de la relation de code et d'enquête basée sur Minhash (MCRIT)
MCRIT est un cadre créé pour simplifier l'application de l'algorithme Minhash dans le contexte de la similitude du code. Il peut être utilisé pour implémenter rapidement des "bardeaux", à savoir des méthodes qui codent pour les propriétés des fonctions démontées, pour être ensuite utilisée pour une estimation de similitude via l'algorithme de Minhash. Il est adapté pour travailler avec des rapports de démontage émis par SMDA.
Usage
Utilisation dockée
Nous vous recommandons fortement d'utiliser le Docker-Mcrit entièrement emballé pour le déploiement et l'utilisation triviaux.
D'abord et avant tout, cela garantira que vous avez des versions entièrement compatibles sur tous les composants, y compris une base de données pour la persistance et un frontend Web pour une interaction pratique.
Utilisation autonome
L'installation de MCRIT à elle seule nécessitera d'autres étapes.
Pour ce qui suit, nous supposons Ubuntu en tant que système d'exploitation hôte.
Les exigences d'installation de Python sont répertoriées dans requirements.txt et peuvent être installées en utilisant:
# install python and MCRIT dependencies
$ sudo apt install python3 python3-pip
$ pip install -r requirements.txt
Par défaut, MongoDB 5.0 est utilisé comme backend, qui est également le mode de fonctionnement recommandé car il fournit un stockage de données persistant. Les commandes suivantes décrivent un exemple d'installation sur Ubuntu:
# fetch mongodb signing key
$ sudo apt-get install gnupg
$ wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
# add package repository (Ubuntu 22.04)
$ echo " deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/5.0 multiverse " | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# OR add package repository (Ubuntu 20.04)
$ echo " deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse " | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# OR add package repository (Ubuntu 18.04)
$ echo " deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/5.0 multiverse " | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# install mongodb
$ sudo apt-get update
$ sudo apt-get install -y mongodb-org
# start mongodb as a service
$ sudo systemctl start mongod
# optionally configure to start the service with system startup
$ sudo systemctl enable mongod
Lorsque vous effectuez l'installation autonome, vous souhaitez éventuellement installer le module MCRIT en fonction du référentiel cloné, comme ainsi:
Après cette installation initiale et si vous le souhaitez, MCRIT peut être utilisé sans connexion Internet.
Opération
Le backend MCRIT est généralement divisé en deux composants, un serveur fournissant une interface API avec laquelle travailler et un ou plusieurs travailleurs traitant des travaux en file d'attente. Ils peuvent être démarrés dans des coquilles séparées en utilisant:
et
Par défaut, le serveur API REST écoutera sur http://127.0.0.1:8000/.
Interaction
Quel que soit votre choix d'installation, une fois en cours d'exécution, vous pouvez interagir avec le backend MCRIT.
Client MCRIT
Nous avons créé un module client Python capable de travailler avec tous les points de terminaison disponibles du serveur.
La documentation de ce module client est actuellement en développement.
CLI MCRIT
Il existe également une CLI basée sur ce package client, exemples:
# query some stats of the data stored in the backend
$ python -m mcrit client status
{ ' status ' : { ' db_state ' : 187, ' storage_type ' : ' mongodb ' , ' num_bands ' : 20, ' num_samples ' : 137, ' num_families ' : 14, ' num_functions ' : 129110, ' num_pichashes ' : 25385}}
# submit a malware sample with filename sample_unpacked, using family name "some_family"
$ python -m mcrit client submit sample_unpacked -f some_family
1.039s - > (architecture: intel.32bit, base_addr: 0x10000000): 634 functions Une documentation plus approfondie de la CLI MCRIT est disponible ici
Plugin MCRIT IDA
Un plugin IDA est également en cours de développement. Pour l'utiliser, créez d'abord votre propre config.py et apportez les modifications requises en fonction du déploiement de votre instance MCRIT:
cp ./plugins/ida/template.config.py ./plugins/ida/config.py
nano ./plugins/ida/config.py
Ensuite, exécutez simplement le script trouvé à
./plugins/ida/ida_mcrit.py
en Ida.
Données de référence
En juillet 2023, nous avons commencé à remplir un référentiel GitHub qui contient des données de référence prêtes à l'emploi pour les compilateurs et les bibliothèques communs.
Historique des versions
- 2024-06-20 V1.3.17: La suppression et le nettoyage du travail sont désormais plus robustes et ne purgeront pas accidentellement les échantillons sans aucun doute - @yankovs - thx !!
- 2024-05-10 V1.3.16: Le nettoyage de la file d'attente a été étendu pour purger également les fichiers téléchargés pendant les 3 types de requêtes (mappés, non cartographiés, SMDA).
- 2024-04-17 V1.3.15: Le type
spawningworker de type travailleur mettra désormais fin des enfants après que le queueConfig.Queue_spawningworker_children_timeout. - 2024-04-02 V1.3.14: Expérimental: Introduction de nouveaux travailleurs de type
spawningworker - Cette variante consommera les travaux de la file d'attente comme d'habitude, mais reportera l'exécution réelle du travail dans un processus distinct (sous), ce qui devrait réduire les problèmes avec les allocations de mémoire verrouillées. - 2024-04-02 V1.3.13: Lors du nettoyage de la file d'attente, supprimez maintenant tous les travaux défaillants @yankovs - Thx !!
- 2024-03-06 V1.3.12: Correction d'un bogue où la protection des échantillons récents contre le nettoyage des files d'attente entraînerait des erreurs clés comme indiqué par @Yankovs - Thx !!
- 2024-02-21 V1.3.10: Bump SMDA à 1.13.16, qui couvre 200 autres instructions dans une catégorie mieux échappée (affecte Minhashes).
- 2024-02-16 V1.3.9: Fonction de nettoyage de file d'attente automatisée finie et intégrée (désactivée par défaut) proposée par @yankovs - Thx !!
- 2024-02-15 V1.3.8: Bump SMDA Pour résoudre les problèmes avec la reconnaissance de la version dans SMDafonction, corrigé des impressions d'exception dans MCriTinterface du plugin IDA (Thx à @MalwareFrank !!).
- 2024-02-12 V1.3.5: La recalcul de Minhashes affichera désormais les pourcentages corrects (Thx à @MalwareFrank !!).
- 2024-02-02 V1.3.4: mini correction dans le plugin IDA pour éviter de référencer un objet potentiellement non initialisé (Thx à @ R0NY123 !!).
- 2024-02-01 V1.3.2: Correction: La correspondance non paralallisée publie désormais le même format de données (Thx à @dannyquist !!).
- 2024-01-30 V1.3.1: La connexion à MongoDB est désormais entièrement configurable (Thx à @dannyquist !!).
- 2024-01-24 V1.3.0: Breaking: Madestone Release avec indexation Améliorations pour Pichash et Minhash. Pour garantir une compatibilité complète en arrière, le recalcul de tous les hachages est recommandé. Vérifiez ce guide de migration.
- 2024-01-23 V1.2.26: épinglant LIEF à 0,13,2 afin de s'assurer que le SMDA épinglé reste compatible.
- 2024-01-09 V1.2.25: Assurez-vous que nous pouvons fournir l'état du système, qu'il existe ou non un
db_state et db_timestamp . - 2024-01-05 V1.2.24: Prise en charge de l'argument "Query" dans la CLI, ainsi que des informations de correspondance compactes (sans information de correspondance de fonction) pour réduire l'empreinte du fichier.
- 2024-01-03 V1.2.23: Limitez la taille maximale de l'exportation pour protéger le système contre les accidents de l'OOM.
- 2024-01-02 V1.2.22: Introduit la classe de données pour UNIQUEBLOCKSRESULT avec la fonctionnalité de commodité.
- 2023-12-28 V1.2.21: McRitClient faisant désormais un passthrough pour la correspondance de requête binaire.
- 2023-12-28 V1.2.20: Le statut fournit désormais l'horodatage de la dernière mise à jour DB.
- 2023-12-13 V1.2.18: Vérification des limites versus Sample_IDS a réussi à GetUniqueBlocks.
- 2023-12-05 V1.2.15: Ajout de la fonctionnalité de commodité aux objets de travail, numéro de version aligné avec MCRITWEB.
- 2023-11-24 V1.2.11: SMDA a épinglé à la version 1.12.7 avant de mettre à niveau SMDA et d'introduire une migration de base de données pour recalculer les hachages PIC + PICBLOCK avec la généralisation améliorée.
- 2023-11-17 V1.2.10: Capacité ajoutée à définir un jeton d'autorisation pour le serveur via le champ d'en-tête:
apitoken ; Capacité supplémentaire de filtrer par des groupes d'emploi; Ajout de la capacité d'échouer des travaux orphelins. - 2023-10-17 V1.2.8: correction mineure dans les groupes d'emploi.
- 2023-10-16 V1.2.6: Statistiques de file d'attente résumées, classification d'emploi raffinée.
- 2023-10-13 V1.2.4: Délition de file d'attente / travail exposée à l'interface de repos, vitesse de requête améliorée pour diverses recherches de file d'attente via l'indexation et les requêtes MongoDB paramétrées.
- 2023-10-13 V1.2.3: Les travailleurs se déshabilleront désormais à partir de travaux en cours au cas où ils s'écraseront (Thx à @yankovs pour le modèle de code).
- 2023-10-03 V1.2.2: Filtrage de correspondance pour les échantillons Min / Max Num (correctif incl. Correction).
- 2023-10-02 V1.2.0: Libération d'étape pour Virus Bulletin 2023.
- 2023-09-18 V1.1.7: BugFix: le match de tâches avec 0 bandes désormais désactivé la correspondance de Minhash comme il était censé être auparavant. Assortir le pourcentage de progrès de l'emploi fixe.
- 2023-09-15 V1.1.6: BugFix en blocage, fonctionnalité de commodité pour interagir avec les objets de travail.
- 2023-09-14 V1.1.5: Désactivé Gunicorn comme gestionnaire WSGI par défaut pour le moment dû à des problèmes avec les appels non retournés lors de la gestion des appels de calcul.
- 2023-09-14 V1.1.4: BugFix: Ajouter
requirements.txt à data_files dans setup.py pour s'assurer qu'elle est disponible pour le package. - 2023-09-13 V1.1.3: Extrait certaines constantes critiques de performances dans les paramètres configurables dans MinhashConfig et StorageConfig, corrigé des rapports de progrès pour l'appariement par lots, BugFix: utilisation de GunicornConfig dans la fermeture de données appropriée.
- 2023-09-13 V1.1.1: Exigences / configuration rationalisées, exclues
gunicorn pour Windows (Thx à @yankovs !!). - 2023-09-12 V1.1.0: Pour les déploiements Linux, MCRIT utilise désormais
gunicorn au lieu de waitress en tant que serveur WSGI en raison de performances bien meilleures. Comme Gunicorn a besoin de sa propre configuration, cela a nécessité de cogner les versions mineures (thx à @yankovs !!). - 2023-09-08 V1.0.21: Toutes les méthodes de McRitClient transfèrent désormais les noms de backend APITOKENS / USERNOSE.
- 2023-09-05 V1.0.20: Utilisez à deux complément pour représenter les adresses dans SampleEntry, FunctionEntry lors du stockage dans MongoDB pour adresser les limitations BSON (Thx à @yankovs).
- 2023-09-05 V1.0.19: Les statistiques utilisent désormais les compteurs internes qui avaient été créés il y a quelque temps (Thx vers @yankovs).
- 2023-08-30 V1.0.18: Notage de liaison raffiné et regroupement des résultats via la relation ICFG.
- 2023-08-24 V1.0.15: première tentative intégrée de la capacité de chasse des liens dans MatchingResult.
- 2023-08-24 V1.0.13: La reconstruction des bandes de Minhash n'explosera plus l'utilisation de la RAM. Ressionner les vérifications du chemin redondantes (Thx vers @yankovs).
- 2023-08-23 V1.0.12: Ajout de la possibilité de reconstruire les bandes Minhash utilisées pour l'indexation.
- 2023-08-22 V1.0.11: Correction d'un bogue où lors de l'importation de données en vrac, le
function_name n'a pas également été ajouté en tant que function_label . - 2023-08-11 V1.0.10: Correction d'un bogue où lors de l'importation de données en vrac, la fonction_id ne serait pas ajustée avant d'ajouter Minhashes aux bandes, ce qui entraînerait peut-être une fonction non existante_ids.
- 2023-08-02 V1.0.9: Le plugin IDA peut désormais filtrer par taille de bloc et score Minhash, mise en page optimisée et expérience utilisateur (Thx pour les commentaires sur @ r0NY123 !!)
- 2023-07-28 V1.0.8: Le plugin IDA peut désormais afficher des graphiques colorés pour les fonctions distantes et faire des requêtes pour PicBlockHashes (pour les blocs de base) pour la fonction actuellement consultée.
- 2023-06-06 V1.0.7: Capacités de filtrage prolongé sur MatchingResult.
- 2023-06-02 V1.0.6: Le plugin IDA peut désormais faire des travaux de correspondance des tâches, afficher leurs résultats et leurs étiquettes d'importation par lots. Harmonisation de la correspondance.
- 2023-05-22 V1.0.3: Plus de robustesse pour la vérification du chemin lors de l'utilisation du dossier MCRIT CLI sur Malpedia Repo.
- 2023-05-12 V1.0.1: Certains progrès sur l'importation d'étiquette pour le plugin IDA. Réfléchissait l'extension API de mCritweb dans mCritClient.
- 2023-04-10 v1.0.0: version d'étape pour Botconf 2023.
- 2023-04-10 V0.25.0: le plugin IDA peut désormais faire des requêtes de fonction pour la fonction actuellement consultée.
- 2023-03-24 V0.24.2: McRitClient peut transmettre le nom d'utilisateur / apitoken, addjsonReport est désormais à l'avenir.
- 2023-03-21 V0.24.0: Les fonctionnalités peuvent désormais stocker des fonctionnalités supplémentaires, en soumettant l'utilisateur / la date.
- 2023-03-17 V0.23.0: Il est désormais possible d'interroger des correspondances pour les smdafonctions uniques (de manière synchrone).
- 2023-03-15 V0.22.0: McRitClient prend désormais en charge les apitokens et les réponses brutes pour un sous-ensemble de fonctionnalités.
- 2023-03-14 V0.21.0: Prise en charge du backend pour un filtrage à grain plus fin.
- 2023-03-13 V0.20.6: Prise en charge du backend pour le filtrage de la famille / de l'échantillon par score dans MatchResult.
- 2023-02-22 V0.20.4: BugFix pour calculer les scores uniques et accéder à ces résultats.
- 2023-02-21 V0.20.3: Soutenir les capacités frontales avec présentation des résultats.
- 2023-02-17 V0.20.2: Objet de rapport de correspondance étendu pour prendre en charge les améliorations frontales.
- 2023-02-14 V0.20.0: Révision du client de console pour simplifier les interactions basées sur des shell avec le backend.
- 2023-01-12 V0.19.4: Capacités de filtrage supplémentaires pour faire correspondre Results.
- 2022-12-13 V0.19.1: Il est désormais possible de nécessiter des quantités spécifiques (plus élevées) de correspondances de bande pour les candidats (c'est-à-dire réduire le flou de l'appariement).
- 2022-12-13 V0.18.x: Activer la correspondance des ID de fonction arbitraire.
- 2022-11-25 V0.18.9: Association de la requête accélérée.
- 2022-11-18 V0.18.8: Manipulation harmonisée de la suppression et des modifications, correctifs mineurs.
- 2022-11-13 V0.18.7: Délétion radicale des échantillons accélérés.
- 2022-11-13 V0.18.6: Ajout de la fonctionnalité pour modifier les informations existantes et les informations de la famille.
- 2022-11-11 V0.18.2: La procédure de correspondance de mise à niveau, devrait désormais être en mesure de gérer des binaires plus gros plus robuste et plus efficacement.
- 2022-11-03 V0.18.1: correctifs mineurs.
- 2022-11-03 V0.18.0: L'isolement de bloc unique génère désormais également une proposition pour une règle YARA, la sortie du résultat restructuré.
- 2022-10-24 V0.17.4: SETUP.PY harmonisé avec les exigences, amélioration de l'efficacité de la mémoire pour le traitement des travaux croisés.
- 2022-10-18 V0.17.3: Ajout d'un script de commodité pour produire des rapports SMDA récursivement à partir d'un dossier semi-structuré.
- 2022-10-13 V0.17.2: Problèmes d'OOM potentiels fixes pendant le calcul de Minhash par les fonctions de traitement à hachage en lots plus petits.
- 2022-10-12 V0.17.1: Ajout d'une fonction pour planifier un travail qui garantira que Minhash a été calculé pour tous les échantillons / fonctions.
- 2022-10-11 V0.17.0: La recherche de blocs uniques est désormais un travail asychrone par le biais du travailleur.
- 2022-10-11 V0.16.0: Les échantillons des travaux de MatchQuery seront désormais stockés avec leurs échantillons / fonctionnalités pour permettre un meilleur post-traitement.
- 2022-10-04 V0.15.4: le serveur peut désormais afficher sa version.
- 2022-09-28 V0.15.3: résoudre les problèmes de performances pour des instances plus importantes, générant une séquence d'instructions échappée pour des blocs uniques.
- 2022-09-26 V0.15.0: Crossjobs maintenant dans le backend, a commencé à fournir des fonctionnalités pour identifier les blocs de base uniques dans les échantillons.
- 2022-08-29 V0.14.2: correctifs mineurs pour le déploiement.
- 2022-08-22 V0.14.0: Les emplois peuvent désormais dépendre d'autres emplois (préparation pour le déplacement de joints de jobobs pour backend), amélioration de la qualité de vie de la gestion des emplois.
- 2022-08-17 V0.13.1: Ajout d'une option de ligne de commande pour le profilage (nécessite CPROFILE).
- 2022-08-09 V0.13.0: Peut désormais faire des requêtes directes efficaces pour les matchs Pichash et Picblockhash.
- 2022-08-09 V0.12.3: BugFix pour FamilyEntry
- 2022-08-08 V0.12.2: BugFix pour la livraison des données XCFG, ajoutait une dépendance manquante.
- 2022-08-08 V0.12.0: syntaxe de recherche avancée intégrée.
- 2022-08-03 V0.11.0: (Breaking) Les familles sont maintenant représentées par une famille.
- 2022-08-03 V0.10.3: Laissant maintenant les données de la fonction XCFG par défaut en DB, accès exposé à celui-ci via l'API REST et MCRITCIENT.
- 2022-07-29 V0.10.2: Capacité ajoutée à supprimer les familles - conservant désormais les informations XCFG pour toutes les fonctions par défaut.
- 2022-07-12 V0.10.1: Performances améliorées.
- 2022-07-12 V0.10.0: (rupture) Manipulation du travail simplifié.
- 2022-05-13 V0.9.4: correction de bogue pour recevoir des fichiers soumis.
- 2022-05-13 V0.9.3: Autres mises à jour de la correspondance.
- 2022-05-13 V0.9.2: Ajout d'un autre champ et plus de fonctions de commodité dans MatchingResult pour un meilleur accès - ce sont des modifications pour les modifications pour les Results de correspondance précédemment créés.
- 2022-05-05 V0.9.1: Traitement des soumissions binaires, correctifs mineurs pour la file d'attente de Minhash - Libération initiale.
- 2022-02-09 V0.9.0: Ajout de Picblocks à MCRIT.
- 2022-01-19 V0.8.0: migré le client et les exemples dans le référentiel MCRIT principal.
- 2021-12-16 V0.7.0: version privée initiale.
Crédits et notes
Merci à Steffen Enders et Paul Hordiienko pour leurs contributions au prototype de recherche interne de ce projet! Merci à Manuel Blatt pour ses grandes contributions et ses refactorisations de ce projet ainsi que pour le module client!
Tirez les demandes de bienvenue! :)
Licence
MinHash-based Code Relationship & Investigation Toolkit (MCRIT)
Copyright (C) 2022 Daniel Plohmann, Manuel Blatt
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Some plug-ins and libraries may have different licenses.
If so, a license file is provided in the plug-in's folder.