Bonjour à tous. Il reste moins de dix jours avant le début du cours
"Reverse Engineering" . A cet égard, nous souhaitons partager une autre traduction intéressante sur le sujet. C'est parti!

Brève revue

L'image des menaces évolue rapidement - de nouvelles cyberattaques apparaissent constamment et les anciennes deviennent de plus en plus sophistiquées. Dans ces circonstances, les professionnels de la sécurité sont confrontés à des défis de plus en plus complexes. Chaque jour, ils doivent traiter et analyser des millions d'échantillons de logiciels malveillants inconnus et complètement nouveaux, développer des signatures antivirus efficaces pour décrire des familles entières de programmes malveillants et assurer l'évolutivité des outils à mesure que le nombre d'échantillons à analyser augmente. Dans le même temps, il est nécessaire de prendre en compte les ressources limitées pour les outils d'automatisation de l'analyse des logiciels malveillants. Pour aider les professionnels de l'informatique à relever ces différents défis, Talos propose une nouvelle plateforme open source appelée BASS.
BASS (lu comme «basse») est un cadre pour générer automatiquement des signatures antivirus basées sur des échantillons de clusters de code malveillant précédemment formés. Il vise à réduire la consommation de ressources par le noyau ClamAV en augmentant la proportion de signatures basées sur des modèles par rapport aux signatures de hachage, et à simplifier le travail des analystes développant des signatures basées sur des modèles. Avec la prise en charge du conteneur Docker, le cadre évolue bien.
Il convient de noter que jusqu'à présent, seule la version alpha de BASS est disponible et qu'il reste beaucoup à finaliser. Ce projet a du code open source, et nous y travaillons activement, nous serons donc ravis de tout commentaire de la communauté et des recommandations pour son amélioration. Le code source de BASS est disponible
ici .
Le projet BASS a été annoncé en 2017 lors de la conférence
REcon à Montréal, Canada.
Pertinence
Les spécialistes Talos reçoivent quotidiennement plus de 1,5 million d'échantillons uniques. Pour la plupart, ils concernent des menaces connues et sont immédiatement éliminés par un scanner de malware (ClamAV). Cependant, après la numérisation, de nombreux fichiers nécessitent encore une analyse plus approfondie. Nous les exécutons dans le bac à sable et effectuons une analyse dynamique, ce qui nous permet de les séparer en fichiers malveillants et sûrs. Nous traitons les échantillons de logiciels malveillants sélectionnés à ce stade afin de créer des signatures ClamAV basées sur eux, ce qui aidera à filtrer davantage ces menaces à un stade plus précoce, lors de l'analyse.

Pendant trois mois, de février à avril 2017, 560 000 nouvelles signatures ont été ajoutées à la base de données ClamAV, soit une augmentation de 9 500 signatures par jour. Nous en avons reçu une partie importante sous forme de signatures de hachage. De telles signatures ont un inconvénient important par rapport aux signatures de modèle ou de bytecode (ce sont deux autres types pris en charge par le noyau ClamAV): une signature de hachage correspond à un seul fichier. De plus, une augmentation du nombre de signatures de hachage conduit au fait que la base de données ClamAV occupe plus de mémoire. C'est pourquoi nous préférons les signatures basées sur des modèles. Ils sont beaucoup plus simples et plus rapides à gérer que le bytecode, et en même temps ils vous permettent de décrire des clusters de fichiers entiers.
Basse
Le cadre BASS est conçu pour faciliter la création de modèles basés sur la signature ClamAV. Il les génère automatiquement, traitant des segments de code exécutable binaire.

BASS prend comme base des clusters de code malveillant, mais n'inclut pas les moyens de les créer. Pour cette raison, la technologie reste pratique et flexible. Nous avons intentionnellement rendu l'interface d'entrée universelle afin qu'elle soit facile à adapter aux nouvelles sources de clusters. Nous utilisons maintenant plusieurs de ces sources, y compris des clusters basés sur des indicateurs de compromis (IoC) de notre bac à sable, le hachage structurel (lorsque nous avons un fichier exécutable sciemment malveillant et que nous recherchons des échantillons supplémentaires qui sont de structure similaire) et les logiciels malveillants reçus des campagnes de spam.
À la première étape, les instances malveillantes passent par les décompresseurs du noyau ClamAV. Il peut décompresser des archives de différents formats et des fichiers exécutables compressés (par exemple, UPX), et également extraire des objets incorporés (tels que des fichiers EXE dans des documents Word). Les artefacts reçus sont soigneusement analysés, des informations sont collectées. Maintenant, pour la prochaine étape, le filtrage, nous utilisons leurs tailles et la chaîne magique UNIX.
Ensuite, le cluster de code malveillant est filtré. Si les fichiers ne répondent pas aux exigences BASS (alors que la plate-forme ne fonctionne qu'avec des fichiers exécutables PE, mais qu'il n'est pas difficile d'ajouter la prise en charge des fichiers binaires ELF et MACH-O), ils sont supprimés du cluster ou, s'il reste trop peu d'objets, le cluster est complètement rejeté.
Le cluster filtré passe à la phase de génération de signature. Tout d'abord, les fichiers binaires sont désassemblés. Pour ce faire, nous utilisons IDA Pro, mais il peut être facilement remplacé par un autre désassembleur aux capacités similaires, par exemple, radare2.

Après démontage, il est nécessaire d'identifier un code commun dans les échantillons afin de générer des signatures sur sa base. Cette étape est importante pour deux raisons. Premièrement, l'algorithme de génération de signature nécessite des ressources de calcul importantes et fonctionne mieux avec des segments de code courts. Deuxièmement, il est préférable d'obtenir des signatures d'échantillons de code similaires non seulement syntaxiquement, mais également sémantiquement. Pour comparer le code, nous utilisons l'utilitaire BinDiff. Encore une fois, il est également facile à remplacer, et à l'avenir, nous pourrons intégrer d'autres utilitaires dans le cadre de comparaison.
Si le cluster est petit, BinDiff compare chaque exécutable avec tous les autres. Sinon, la portée de la comparaison est réduite, sinon le processus peut être trop long. Sur la base des résultats obtenus, un graphique est construit où les sommets désignent les fonctions et les arêtes indiquent leur similitude. Pour trouver une bonne fonction générale, il suffit de trouver un sous-graphe connecté avec un indice de similarité global élevé.

Le sous-graphique ƒ1, ƒ2, ƒ4, ƒ6 avec des indicateurs de similarité de sommet élevés (voir la figure ci-dessus) est un excellent candidat pour le rôle d'une fonction commune.
Dès que plusieurs de ces candidats sont recrutés, nous les comparons avec la liste blanche pour éviter de créer des signatures basées sur les fonctions ordinaires des bibliothèques associées statiquement à l'échantillon. Pour ce faire, les fonctions sont envoyées à l'instance
Kam1n0 , dont nous avons précédemment rempli les fonctions à partir d'échantillons évidemment purs. Si un clone d'une fonction est détecté, la procédure de sélection de sous-graphe est répétée afin de sélectionner la plus appropriée des autres. Si la vérification ne révèle rien, l'ensemble des fonctions est passé à l'étape suivante.
La génération de la signature commence alors directement. Les signatures ClamAV basées sur un modèle sont conçues pour détecter les sous-séquences dans les données binaires. Par conséquent, nous appliquons à toutes les fonctions extraites l'algorithme de recherche de la plus grande sous-séquence commune (LCS, Longest Common Subsequence).
D'un point de vue informatique, cet algorithme est assez cher même pour deux échantillons et est nettement plus difficile pour plusieurs, nous utilisons donc sa variété heuristique, décrite par
Christian Blichmann . Le résultat pourrait ressembler à ceci:

Enfin, vous devez le tester avant de publier la signature. Nous vérifions automatiquement la signature à l'aide de notre suite de tests pour les faux positifs. Pour plus de fiabilité, nous utilisons Sigalyzer, une nouvelle fonctionnalité de notre plug-in
CASC IDA Pro ClamAV pour générer et analyser des signatures (il sera mis à jour plus tard). Sigalyzer marque les sections du binaire qui correspondent à la signature ClamAV qui a fonctionné pour lui. Ainsi, une représentation visuelle visuelle de la signature est formée.
L'architecture
BASS est implémenté comme un cluster de conteneurs Docker. Le framework est écrit en Python et interagit avec tous les outils nécessaires via des services web. L'architecture a été créée par analogie avec le projet
VxClass , qui a également généré des signatures ClamAV en utilisant IDA Pro et BinDiff, mais sera plus tard fermée et, contrairement à BASS, inaccessible au grand public.

Limitations
BASS fonctionne exclusivement avec des exécutables binaires, car la signature est générée à partir de l'exemple de code. De plus, il analyse uniquement les exécutables x86 et x86_64. La prise en charge d'autres architectures pourrait apparaître à l'avenir.
Jusqu'à présent, BASS ne gère pas bien les virus de fichiers, qui intègrent des extraits de code petits et très différents dans les objets infectés, et les backdoors, principalement constitués de code binaire inoffensif (souvent volé), qui sont complétés par des fonctions malveillantes. Nous luttons contre ces lacunes en travaillant à optimiser la phase de clustering.
Et encore une fois, nous voulons vous rappeler que BASS est au stade des tests alpha et que, jusqu'à présent, tout ne fonctionne pas correctement. Mais nous espérons que nous profiterons à la communauté en développant ce cadre en tant que projet open source, et nous serons heureux de toutes les idées et critiques.
App
La différence entre la plus grande sous-chaîne commune et la plus grande sous-séquence communeL'illustration suivante montre la différence entre la plus grande sous-chaîne commune et la plus grande sous-séquence commune. La plus grande sous-séquence commune est indiquée dans notre publication par l'acronyme anglais LCS.

C’est tout. Et déjà le 20 juin, il sera possible de se familiariser en détail avec le programme de cours lors de
la journée portes ouvertes , qui se tiendra en mode webinaire.