Simple Science

La science de pointe expliquée simplement

# Informatique# Cryptographie et sécurité

Améliorer les techniques de détection de similarité binaire

Une nouvelle méthode se concentre sur les comportements du code binaire pour une meilleure détection de similarité.

― 6 min lire


Détection de similaritéDétection de similaritébinaire amélioréedétection.comportements clés pour une meilleureUne nouvelle approche capture des
Table des matières

La détection de similitudes binaires, c'est un moyen de dénicher des morceaux de code binaire similaires. Cette technique est super importante quand on n'a pas accès au code source original, comme pour débusquer des bugs, analyser des malwares, ou vérifier le plagiat dans le code. Y a plusieurs façons de repérer des similitudes entre des binaires, mais les méthodes existantes galèrent souvent quand on utilise des compilateurs ou niveaux d'optimisation différents.

Importance de la détection de similitudes binaires

Repérer des binaires similaires aide dans plein d'applis concrètes. Par exemple, ça peut servir à chercher des bugs ou des failles dans des logiciels. Quand un logiciel est mis à jour ou modifié, c'est crucial de vérifier si la nouvelle version a des failles similaires à l'ancienne. Et pour les malwares, trouver des binaires similaires peut aider à comprendre et à lutter contre les logiciels malveillants.

Le défi des méthodes existantes

Les méthodes actuelles pour la détection de similarités binaires peuvent être inefficaces dans certains cas. Par exemple, si des binaires sont compilés avec des options différentes, ou s'ils passent par des versions différentes du code, les méthodes existantes peuvent ne pas détecter leur similarité correctement. C'est parce que beaucoup de ces méthodes se concentrent trop sur la structure du code (à quoi ça ressemble) plutôt que sur son comportement (ce que ça fait).

Observations clés

Malgré les différences causées par l'optimisation ou les compilateurs, les comportements essentiels du code ne changent pas forcément. Ça veut dire que les actions clés qu'un binaire effectue (comme appeler des fonctions ou stocker des valeurs) peuvent souvent rester les mêmes, même si le code a l'air différent. En se concentrant sur ces actions clés, on peut créer une meilleure méthode pour détecter des binaires similaires.

Approche proposée

Pour améliorer la détection de similarités binaires, une nouvelle méthode a été proposée qui se concentre sur la capture des comportements clés du code binaire. Ça implique deux principales étapes : génération de graphes et comparaison de graphes.

Génération de graphes

  1. Identifier les instructions clés : La première étape consiste à trouver les instructions principales qui effectuent des tâches importantes dans le binaire. Ces instructions clés aideront à représenter le comportement du binaire.

  2. Créer des expressions clés : Chacune de ces instructions clés peut ensuite être formulée de manière simplifiée, ce qui aide à éviter la confusion avec des instructions moins importantes.

  3. Construire un graphes de sémantique clé : Une fois qu'on a les instructions clés et leurs expressions simplifiées, on peut créer un graphe. Dans ce graphe, les nœuds représentent les instructions clés et les connexions entre eux représentent comment elles s'enchaînent dans le programme.

Comparaison de graphes

  1. Sérialiser le graphe : Pour comparer deux graphes (deux binaires différents), on commence par les transformer en une séquence grâce à une technique appelée tri topologique. Ce tri aide à maintenir l'ordre des actions.

  2. Tokenisation : L'étape suivante consiste à décomposer ces séquences en parties plus petites appelées tokens, qui sont plus faciles à gérer.

  3. Calculer la similarité : Enfin, on peut utiliser une méthode appelée Hachage sensible à la localité pour compresser et comparer les séquences de tokens, ce qui aide à déterminer à quel point les deux binaires se ressemblent.

Évaluation de la méthode proposée

La performance de cette nouvelle méthode a été évaluée par rapport à plusieurs outils existants. Les expériences ont impliqué divers projets open-source, et les résultats ont montré que la nouvelle méthode a surpassé les outils existants dans la détection de similarités à travers différentes options de compilation et niveaux d'optimisation.

Mise en place des expériences

Les expériences ont été menées sur des projets open-source bien connus pour évaluer la performance de la méthode. Les métriques d'évaluation comprenaient :

  • Précision : Ça mesure combien de paires détectées étaient vraiment similaires.
  • Rappel : Ça vérifie combien de vraies paires similaires ont été détectées par l'outil.

Résultats

La nouvelle méthode a systématiquement atteint une précision moyenne plus élevée que les outils existants. Elle a réussi à détecter des similarités même dans des binaires compilés avec des paramètres ou des optimisations différents. Ça indique une amélioration significative par rapport aux méthodes traditionnelles.

Applications de la détection de similitudes binaires

La détection de similarités binaires peut être appliquée dans de nombreux domaines, y compris :

  • Détection de vulnérabilités : En identifiant des fonctions similaires à travers différentes versions de logiciels, on peut retracer et atténuer les vulnérabilités.
  • Analyse de malwares : Les similarités dans le code binaire peuvent aider à comprendre le code malveillant et à créer des mécanismes de défense.
  • Détection de plagiat : Dans le milieu académique et le développement de logiciels, détecter le code copié est crucial pour maintenir l'originalité.

Directions futures

Bien que la méthode actuelle montre du potentiel, il y a des domaines à améliorer. Les travaux futurs pourraient explorer :

  • Support plus large des compilateurs : Améliorer la méthode pour qu'elle fonctionne avec plus de compilateurs et différentes architectures, comme ARM.
  • Gestion de l'obfuscation : Avec l'usage croissant des techniques d'obfuscation, améliorer les méthodes de détection pour gérer ces changements sera vital.
  • Intégration de l'apprentissage automatique : Utiliser des techniques d'apprentissage automatique pour comprendre et évaluer l'importance de divers tokens dans le processus de détection.

Conclusion

La capacité à détecter précisément les similarités entre des codes binaires est importante dans de nombreux domaines de la technologie et de la sécurité. La méthode proposée se concentre sur les comportements clés au sein du binaire, ce qui aide à surmonter les défis rencontrés par les outils existants. Avec un développement et une application supplémentaires, cette méthode peut vraiment améliorer l'efficacité de la détection de similarités binaires dans divers domaines.

Source originale

Titre: SemDiff: Binary Similarity Detection by Diffing Key-Semantics Graphs

Résumé: Binary similarity detection is a critical technique that has been applied in many real-world scenarios where source code is not available, e.g., bug search, malware analysis, and code plagiarism detection. Existing works are ineffective in detecting similar binaries in cases where different compiling optimizations, compilers, source code versions, or obfuscation are deployed. We observe that all the cases do not change a binary's key code behaviors although they significantly modify its syntax and structure. With this key observation, we extract a set of key instructions from a binary to capture its key code behaviors. By detecting the similarity between two binaries' key instructions, we can address well the ineffectiveness limitation of existing works. Specifically, we translate each extracted key instruction into a self-defined key expression, generating a key-semantics graph based on the binary's control flow. Each node in the key-semantics graph denotes a key instruction, and the node attribute is the key expression. To quantify the similarity between two given key-semantics graphs, we first serialize each graph into a sequence of key expressions by topological sort. Then, we tokenize and concatenate key expressions to generate token lists. We calculate the locality-sensitive hash value for all token lists and quantify their similarity. %We implement a prototype, called SemDiff, consisting of two modules: graph generation and graph diffing. The first module generates a pair of key-semantics graphs and the second module diffs the graphs. Our evaluation results show that overall, SemDiff outperforms state-of-the-art tools when detecting the similarity of binaries generated from different optimization levels, compilers, and obfuscations. SemDiff is also effective for library version search and finding similar vulnerabilities in firmware.

Auteurs: Zian Liu, Zhi Zhang, Siqi Ma, Dongxi Liu, Jun Zhang, Chao Chen, Shigang Liu, Muhammad Ejaz Ahmed, Yang Xiang

Dernière mise à jour: 2023-08-02 00:00:00

Langue: English

Source URL: https://arxiv.org/abs/2308.01463

Source PDF: https://arxiv.org/pdf/2308.01463

Licence: https://creativecommons.org/licenses/by/4.0/

Changements: Ce résumé a été créé avec l'aide de l'IA et peut contenir des inexactitudes. Pour obtenir des informations précises, veuillez vous référer aux documents sources originaux dont les liens figurent ici.

Merci à arxiv pour l'utilisation de son interopérabilité en libre accès.

Plus d'auteurs

Articles similaires

Physique des hautes énergies - ExpériencesAméliorer la sélection de données en physique des particules avec des réseaux de neurones

Des chercheurs améliorent le filtrage des données dans les expériences Belle II en utilisant des réseaux de neurones pour identifier les événements pertinents.

― 6 min lire