← Derniers articles
💻 computer science

Control Flow Graph Recovery for Dynamically Loaded Code via Symbolic Library Resolution

Cet article propose une technique d'analyse sûre basée sur l'exécution symbolique qui combine le préchargement spéculatif de bibliothèques avec des crochets personnalisés pour récupérer des graphes de flot de contrôle à partir de code chargé dynamiquement, réalisant ainsi des améliorations significatives en matière de récupération de nœuds et d'arêtes par rapport à l'analyse statique tout en maintenant une précision et un rappel de 100 % dans la détection des bibliothèques.

Auteurs originaux : Oleksandr Mostovyi

Publié 2026-05-29
📖 5 min de lecture🧠 Analyse approfondie

Auteurs originaux : Oleksandr Mostovyi

Article original sous licence CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Ceci est une explication générée par l'IA de l'article ci-dessous. Elle n'a pas été rédigée ni approuvée par les auteurs. Pour une précision technique, consultez l'article original. Lire la clause de non-responsabilité complète

Imaginez que vous essayez de comprendre comment une machine complexe fonctionne en examinant ses plans. Dans le monde des logiciels informatiques, ces plans sont appelés Graphes de Flux de Contrôle (GFC). Ils cartographient chaque chemin possible qu'un programme peut emprunter, vous montrant où le code se dirige ensuite.

Cependant, les logiciels modernes (et les programmes malveillants comme les malwares) ont appris un tour pour cacher leurs plans. Ils utilisent une technique appelée chargement dynamique. Au lieu d'avoir toutes leurs parties intégrées dans la machine principale dès le départ, ils gardent certaines parties dans une boîte verrouillée et n'ouvrent la boîte et n'assemblent les parties pendant que la machine fonctionne.

Le Problème : Les Parties Invisibles

Les outils d'analyse logicielle traditionnels sont comme des architectes statiques. Ils regardent les plans sur la table et disent : « Voici le chemin. » Mais si la machine sort une partie cachée d'une boîte pendant son exécution, l'architecte statique ne voit rien. Il voit un espace vide là où une porte devrait se trouver, il ne peut donc pas tracer le chemin à travers celle-ci.

C'est un énorme problème pour la sécurité. Si vous ne pouvez pas voir les chemins cachés, vous ne pouvez pas dire si la machine est sûre ou si c'est un piège.

La Solution : Le Détective « Spéculatif »

L'auteur de cet article, O. S. Mostovyi, a construit un nouvel outil de type détective. Au lieu de simplement regarder les plans, cet outil agit comme un simulateur voyageant dans le temps.

Voici comment cela fonctionne, en utilisant une analogie simple :

  1. La Simulation (Exécution Symbolique) : Imaginez que vous avez un robot capable d'exécuter le logiciel sans réellement l'allumer. Il exécute le code dans un monde du genre « et si ». Il n'exécute pas les parties dangereuses ; il les réfléchit simplement.
  2. L'Architecture à Deux Niveaux : L'outil possède deux sens spéciaux travaillant ensemble :
    • Niveau 1 (Le Bibliothécaire) : Cette partie observe le logiciel demander de nouvelles parties. Lorsque le logiciel dit : « J'ai besoin d'une bibliothèque depuis le réseau » ou « J'ai besoin d'un fichier depuis un endroit de mémoire caché », le Bibliothécaire intercepte la demande. Même si le logiciel indique que le nom du fichier est crypté ou brouillé, l'outil utilise les mathématiques pour déterminer ce qu'est réellement le fichier. Il charge ensuite « spéculativement » ce fichier dans la simulation afin que le robot puisse le voir.
    • Niveau 2 (L'Agent de Circulation) : Cette partie observe les routes empruntées par le robot. Lorsque le robot atteint un carrefour où la direction dépend d'une variable cachée (comme une adresse secrète), l'Agent de Circulation vérifie les scénarios « et si » pour voir où mène réellement cette route.

Comment il Gère les Astuces Difficiles

L'article explique que les acteurs malveillants utilisent de nombreuses façons pour cacher leur processus de chargement. L'outil est conçu pour les attraper tous :

  • Exécution Sans Fichier : Certains programmes créent des fichiers qui n'existent pas sur le disque dur, vivant uniquement dans la RAM. L'outil voit ces fichiers invisibles.
  • Chargement Réseau : Certains programmes téléchargent leur code depuis Internet pendant l'exécution. L'outil simule ce téléchargement pour voir ce qui arrive.
  • Noms Cryptés : Si le programme dit « Charger le fichier [code crypté] », l'outil utilise un solveur mathématique pour casser le code et trouver le vrai nom du fichier.

Les Résultats : Combler les Manques de la Carte

Pour tester cela, l'auteur a créé 16 « pièges » différents (benchmarks) utilisant diverses techniques de dissimulation, allant de astuces simples à des cryptages complexes à plusieurs étapes.

Les résultats étaient très clairs :

  • Exhaustivité : L'outil a trouvé 29,8 % de chemins (nœuds) en plus et 26,5 % de connexions (arêtes) en plus que les outils statiques traditionnels. Il a comblé les espaces vides sur la carte.
  • Précision : Il était 100 % précis. Chaque fois qu'il affirmait avoir trouvé une bibliothèque cachée, il avait raison. Il n'a émis aucun faux positif.
  • Sécurité : Parce qu'il utilisait une simulation (exécution symbolique) plutôt que d'exécuter réellement le code dangereux, il pouvait analyser ces programmes délicats en toute sécurité, sans risque que le malware s'échappe ou cause des dommages.

Les Limites

L'auteur est honnête sur ce que l'outil ne peut pas encore faire :

  • C'est un Détective, pas un Magicien : Il peut trouver les portes cachées et tracer les chemins, mais il ne « défait » pas automatiquement les obfuscations complexes (brouillages) pour rendre le code facile à lire. Cela reste un problème difficile.
  • Limites de Plateforme : Il fonctionne actuellement bien pour les systèmes Linux (spécifiquement les fichiers ELF) sur certains puces informatiques, mais pas encore pour Windows ou d'autres systèmes d'exploitation.
  • Flux Cachés : Il suit les données qui se déplacent explicitement, mais il manque parfois les données qui se déplacent de manière subtile et indirecte (comme à travers des fonctions mathématiques complexes).

Résumé

En bref, cet article présente une nouvelle méthode pour cartographier les logiciels qui cachent leurs parties jusqu'à leur exécution. En combinant un simulateur « et si » avec un système intelligent qui intercepte et résout les demandes de fichiers cachées, l'outil peut dessiner une carte complète du comportement du programme, révélant des chemins qui étaient auparavant invisibles pour les analystes de sécurité. Il a testé avec succès cette méthode sur 16 scénarios différents, prouvant qu'il peut trouver des bibliothèques cachées avec une précision parfaite.

Noyé(e) sous les articles dans votre domaine ?

Recevez des digests quotidiens des articles les plus récents correspondant à vos mots-clés de recherche — avec des résumés techniques, dans votre langue.

Essayer Digest →