
StringSifter est un outil d'apprentissage automatique qui classe automatiquement les chaînes en fonction de leur pertinence pour l'analyse des logiciels malveillants.
StringSifter nécessite Python version 3.9 ou plus récent. Exécutez les commandes suivantes pour obtenir le code, exécuter les tests unitaires et utiliser l'outil:
pip install stringsifterPour le développement, utilisez la poésie:
git clone https://github.com/mandiant/stringsifter.git
cd stringsifter
poetry install --with devPour exécuter des tests unitaires à partir du répertoire d'installation de StringSifter:
poetry run tests -v La commande pip install installe deux scripts runnables flarestrings et rank_strings dans votre environnement Python. Lorsque vous développez à partir de Source, utilisez pipenv run flarestrings et pipenv run rank_strings .
flarestrings imite les fonctionnalités des strings de GNU Binutils, et rank_strings accepte l'entrée tuyaux, par exemple:
flarestrings < my_sample > | rank_strings rank_strings prend en charge un certain nombre d'arguments de ligne de commande. L'argument positionnel input_strings spécifie un fichier de chaînes à classer. Les arguments facultatifs sont:
| Option | Signification |
|---|---|
| - scores (-s) | Inclure les scores de rang dans la sortie |
| --Limit (-L) | Limiter la sortie aux chaînes de classement supérieure de limit supérieure |
| - min-score (-m) | Limiter la sortie aux chaînes avec score> = min-score |
| - land (-b) | Spécifiez un dossier de sorties strings pour le traitement par lots |
Les chaînes classées sont écrites à la sortie standard, sauf si l'option --batch est spécifiée, ce qui entraîne des sorties classées dans des fichiers nommés <input_file>.ranked_strings .
flarestrings prend en charge une option -n (ou --min-len ) pour imprimer des séquences de caractères qui sont au moins des caractères min-len , au lieu de la valeur par défaut 4. Par exemple:
flarestrings -n 8 < my_sample > | rank_stringsImprimera et classera les chaînes de longueur de 8 ou plus.
docker build -t stringsifter -f docker/Dockerfile .flarestrings ou rank_strings pour utiliser la commande respective. Les commandes conteneurisées peuvent être utilisées dans les pipelines: cat < my_sample > | docker run -i stringsifter flarestrings | docker run -i stringsifter rank_strings-v pour exposer un répertoire d'hôte au conteneur: docker run -v < my_malware > :/samples -it stringsifter où <my_malware> contient des échantillons pour l'analyse, par exemple:
docker run -v $HOME /malware/binaries:/samples -it stringsifterflarestrings /samples/ < my_sample > | rank_strings < options >Tous les arguments de ligne de commande sont pris en charge dans les scripts conteneurisés.
StringSifter peut être appliqué à des listes arbitraires de chaînes, ce qui le rend utile pour les praticiens qui cherchent à glaner des idées à partir de sources alternatives de collecte de renseignements telles que des décharges de mémoire en direct, des courses de bac à sable ou des binaires qui contiennent des chaînes obscurcies. Par exemple, Fireeye Labs Obfuscated Crings Solver (Floss) extrait les cordes imprimables comme le fait les cordes , mais révèle en outre les chaînes obscurcies qui ont été codées, emballées ou construites manuellement sur la pile. Il peut être utilisé comme remplacement en ligne pour les chaînes, ce qui signifie que StringSifter peut être invoqué de manière similaire sur la sortie de lantaire en utilisant la commande suivante:
$PY2_VENV /bin/floss –q < options > < my_sample > | rank_strings < options >Notes:
–q supprime les en-têtes et le formatage pour afficher uniquement les chaînes extraites. Pour en savoir plus sur les options de soie supplémentaires, veuillez consulter ses documents d'utilisation.floss ou rank_strings doit inclure un chemin relatif faisant référence à un environnement virtuel Python.strings de course Cette distribution comprend le programme flarestrings pour assurer la sortie prévisible sur toutes les plates-formes. Si vous choisissez d'exécuter strings installées de votre système, notez que ses options ne sont pas cohérentes sur les versions et les plates-formes:
La plupart des distributions Linux incluent le programme strings de GNU Binutils. Pour extraire à la fois des chaînes "larges" et "étroites", le programme doit être exécuté deux fois, tuyaux vers un fichier de sortie:
strings < my_sample > > strs.txt # narrow strings
strings -el < my_sample > >> strs.txt # wide strings. note the ">>" Certaines versions des strings BSD emballées avec des macOS ne prennent pas en charge les cordes larges. Notez également que l'option -a des chaînes pour scanner le fichier entier peut être désactivée dans la configuration par défaut. Sans -a des chaînes informatives peuvent être perdues. Nous vous recommandons d'installer GNU Binutils via Homebrew ou Macports pour obtenir une version de strings qui prend en charge les caractères larges. Utilisez des soins pour invoquer la version correcte des strings .
strings ne sont pas installées par défaut sur Windows. Nous vous recommandons d'installer Windows Sysinternals, Cygwin ou Malcode Analyst Pack pour obtenir des strings de travail.
Cette version de StringSifter a été formée à l'aide de sorties de chaînes de binaires de logiciels malveillants échantillonnés associés au premier ensemble de données Ember. Des étiquettes ordinales ont été générées à l'aide de procédures de supervision faibles, et l'apprentissage supervisé est effectué par des arbres de décision boostés par le gradient avec une fonction objectif d'apprentissage. Voir les liens rapides pour d'autres détails techniques. Veuillez noter que ni les données étiquetées ni le code de formation ne sont actuellement disponibles, bien que nous puissions reconsidérer cette approche dans les versions futures.
Nous utilisons des problèmes GitHub pour publier des bogues et des demandes de fonctionnalités.
flarestrings est dérivé de l'excellent outil de fil d'outil.