Veilles Technologiques

Le reverse engineering est un domaine qui me passionne profondément. Son utilisation pour analyser, protéger et sécuriser des applications joue un rôle crucial dans l’avenir de la cybersécurité. Face à des attaques toujours plus sophistiquées, ces technologies représentent un véritable défi, tant sur le plan technique que stratégique. Je suis convaincu qu’elles occuperont une place centrale dans les innovations visant à garantir la confidentialité, la protection des données et la résilience des applications. C’est pourquoi j’ai choisi ce thème pour mes veilles technologiques.

2 – Tony Hawk, strcpy une faille classique (17/03/25)

Introduction : Un exploit sur Tony Hawk met en lumière une faille classique

Une faille de sécurité a récemment été découverte dans Tony Hawk’s Pro Skater 4, un jeu sorti en 2002, exploitant une vulnérabilité présente dans le moteur RenderWare. Ce problème, mis en lumière par le chercheur en sécurité GrimDoomer à travers son projet TonyHawksProStrcpy, repose sur l’utilisation dangereuse de la fonction strcpy() en langage C.

En exploitant cette faiblesse, il est possible d’injecter et d’exécuter du code arbitraire sur une console ou un PC, permettant ainsi de prendre le contrôle total du système ciblé.


strcpy() : Une fonction dangereuse à l’origine de nombreuses failles

strcpy() est une fonction couramment utilisée en langage C pour copier des chaînes de caractères. Cependant, elle présente une grande vulnérabilité : elle ne vérifie pas la taille de la destination, ce qui peut provoquer un dépassement de mémoire (buffer overflow).

Problèmes liés à strcpy() :

  • Pas de vérification de taille → peut écrire au-delà de la mémoire allouée.
  • Risque d’exécution de code arbitraire → l’attaquant peut injecter du code malveillant.
  • Beaucoup de failles critiques dans l’histoire de la cybersécurité en sont issues.

Alternatives plus sûres :

  • strncpy() : Permet de limiter la taille copiée.
  • strlcpy() : Une version encore plus sécurisée.

Étude de cas : La faille OpenSSH (CVE-2002-0083)

Un des cas les plus graves liés à strcpy() est la faille critique découverte en 2002 dans OpenSSH (CVE-2002-0083).

Détails de la faille :

  • Un buffer overflow causé par strcpy() a permis aux attaquants de prendre le contrôle à distance de millions de serveurs.
  • OpenSSH, utilisé pour gérer les connexions SSH, était vulnérable sur Linux, BSD, Solaris et autres systèmes UNIX.
  • Impact : Des serveurs gouvernementaux et des infrastructures critiques ont été compromis.
  • Solution : Remplacement de strcpy() par strlcpy() et renforcement de la gestion mémoire.

La rétro-ingénierie : Son importance et ses usages

La rétro-ingénierie (Reverse Engineering) est essentielle pour analyser et comprendre le fonctionnement des logiciels et du matériel, notamment dans la cybersécurité.

Ses utilisations :

  • Recherche de vulnérabilités → Identifier des failles comme celle de strcpy().
  • Développement de correctifs → Patch pour sécuriser les systèmes.
  • Analyse de logiciels malveillants → Comprendre et neutraliser les virus.
  • Restauration de logiciels anciens → Maintenir des programmes dont le code source est perdu.
  • Modding et bidouillage → Modifier des jeux vidéo, comme dans Tony Hawk’s Pro Skater.

Éthique et légalité :

  • La rétro-ingénierie est légale dans certains cas (cybersécurité, compatibilité logicielle).
  • Elle est interdite dans d’autres contextes (contournement de DRM, piratage de logiciels propriétaires).

Conclusion

L’affaire TonyHawksProStrcpy illustre parfaitement pourquoi l’usage de fonctions non sécurisées comme strcpy() est dangereux. Des failles comme celle d’OpenSSH en 2002 ont prouvé que des erreurs de gestion mémoire peuvent mettre en péril des millions d’utilisateurs.

Leçons à retenir :

  • Éviter l’usage de strcpy(), préférer des alternatives sécurisées.
  • Utiliser la rétro-ingénierie de manière éthique pour identifier et corriger des vulnérabilités.
  • Sécuriser le code dès sa conception pour prévenir plutôt que guérir.

La cybersécurité repose sur une bonne pratique du développement et une vigilance constante face aux menaces !

source :

https://github.com/grimdoomer/TonyHawksProStrcpy https://icode4.coffee/?p=954

Le marché des solutions de protection logicielle bin2bin est dominé depuis des années par des outils tels que Themida et VMProtect, reconnus pour leur capacité à sécuriser les applications contre l’ingénierie inverse, la falsification et les attaques. Cependant, un nouvel acteur, CodeDefender, fait son entrée en promettant des innovations technologiques qui pourraient redéfinir les standards de l’industrie. Avec une approche novatrice basée sur une obfuscation avancée, une stabilité accrue et une compatibilité avec les dernières technologies de sécurité, CodeDefender ambitionne de dépasser les limites des solutions existantes. Mais cette solution est-elle réellement à la hauteur de ses promesses ? Et surtout, peut-elle rivaliser avec des géants comme Themida et VMProtect ?

Dans cet article, nous analysons les caractéristiques uniques de CodeDefender, ses avantages compétitifs, et explorons si cet outil pourrait devenir le nouveau standard en matière de protection logicielle.

CodeDefender propose une gamme complète de fonctionnalités pour protéger vos applications contre l’analyse et la manipulation non autorisées. Voici un aperçu détaillé de ces fonctionnalités :

Obfuscation des Fonctions

  • Mutation Engine : Cette technologie propriétaire transforme des séquences d’instructions simples en expressions complexes en utilisant une variété d’instructions x86-64. Le code résultant est si étroitement intégré que la suppression d’une seule instruction peut le rendre non fonctionnel.
  • Le code original
    • mov eax, 0xff
  • Exemple de mutation
    • xor eax, eax
    • mov al, 0x0f
    • shl al, 4
    • or al, 0x0f
  • Mixed Boolean Arithmetic (MBA) : Cette technique combine des opérations booléennes et arithmétiques pour obscurcir la logique du code, rendant l’analyse plus complexe pour les attaquants. Image venant du pseudo code d’IDA pro.
  • Loop Encode Semantics : Cette fonctionnalité encode des opérations simples telles que l’addition, la soustraction, le ET logique et le OU exclusif en boucles complexes, rendant difficile leur analyse par des moteurs d’exécution symbolique.
  • Opaque Block Duplication Pass : Cette technique duplique des blocs de code et crée des conditions prédéfini pour déterminer le chemin d’exécution, augmentant ainsi la complexité du code.
  • Dematerialize Constants : Cette fonctionnalité obscurcit les constantes du code, les rendant peu susceptibles de réapparaître dans un registre ou un emplacement mémoire, ce qui est idéal pour les fonctions manipulant des valeurs sensibles.
  • Loop-Based Constant Encoding : Pour renforcer la sécurité contre l’exécution symbolique, les constantes sont encodées en utilisant des structures de boucles dont les limites sont intentionnellement obscurcies, rendant l’analyse plus difficile.
  • Simple Constant Obfuscation : Conçue pour éviter la détection par des méthodes de signature statique, cette technique obscurcit les valeurs constantes pour empêcher leur identification lors de scans de signatures.
  • IDA Decompiler Crasher : Cette option perturbe le décompilateur d’IDA Pro, empêchant toute analyse ultérieure du fichier en cours. Elle est appliquée directement à la fonction que vous souhaitez protéger de la décompilation.

Obfuscation du Module

  • Import Obfuscation : Chaque PE a une IAT (Import Address Table) cet table contient toutes les fonctions exporté de librairie comme kernel32.dll etc. Cette technique supprime toutes les importations du fichier binaire et les résout lors de l’exécution.
  • Anti-Debug (Windows 10) : Empêche les débogueurs de s’attacher à votre programme, neutralisant la plupart des débogueurs modernes. Cette fonctionnalité nécessite que le programme s’exécute sur Windows 10 ou une version supérieur.
  • Fake Entry Point : Chaque PE commence a un endroit appeler OEP (Original entry point) CodeDefender obscurcit le point d’entrée en utilisant une obfuscation du flux de contrôle basée sur des exceptions, perturbant les émulateurs PE basés sur unicorn-engine qui ne supportent pas correctement la gestion structurée des exceptions.

Fonctionnalités de Personnalisation

  • Fake PDB String : Remplace la chaîne PDB existante par une chaîne personnalisée, pouvant afficher des motifs ASCII dans certains outils d’analyse comme IDA Pro.
  • Custom Section Names : Permet de personnaliser le nom des sections créées par le framework, y compris la possibilité d’avoir un nom de section vide.

Ces fonctionnalités offrent une protection robuste et personnalisable pour des applications, rendant l’analyse et la manipulation non autorisées beaucoup plus difficiles pour les attaquants potentiels.

adri3n.me

low-level and reverse engineering enthusiast

© Copyright 2024

Github

LinkedIn

contact@adri3n.me