Etude des programmes dans Mac OS X

Il y a un an à peine, les utilisateurs des ordinateurs Apple étaient pour la plupart des spécialistes du design, de l’édition, sans oublier les photographes et les musiciens. La situation a beaucoup changé au cours des douze derniers mois : après la décision prise par Apple de produire des ordinateurs construits autour de processeurs Intel, de nombreuses personnes se sont intéressées à la marque à la pomme et se sont mis à envisager l’utilisation d’un Macintosh en guise d’ordinateur familial. Les développeurs d’applications ne sont pas restés insensibles à l’augmentation de la popularité de Mac OS X et ils ont commencé à publier des versions de leurs logiciels pour Mac OS X.

Ceci étant dit, Mac OS X n’en reste pas moins un système d’exploitation mal connu et énigmatique non seulement pour de nombreux utilisateurs mais également pour les spécialistes de la sécurité informatique. Nous allons tenter dans cet article d’aider un tant soit peu les spécialistes à mieux comprendre les particularités de Mac OS X critiques dans le cadre de l’étude des programmes malveillants développés pour cette plateforme.

Commençons par signaler que Mac OS X est un système d’exploitation semblable à Unix qui possède de nombreuses caractéristiques existantes dans d’autres systèmes Unix. Par conséquent, la suite de cet article sera plus compréhensible pour les lecteurs qui connaissent les systèmes d’exploitation tels que Linux ou FreeBSD. Une expérience dans l’étude de programmes pour n’importe quel système d’exploitation constituera également un atout.

Caractéristiques principales de Mac OS X

La connaissance des particularités d’un système d’exploitation lors de l’analyse de programmes, y compris de programmes malveillants, est un élément qui facilite la tâche. Nombreuses sont les particularités de Mac OS X qui sont liées aux origines de ce système : Mac OS X a été développé au départ d’Unix, ce qui se voit dans le design et dans les principes du système dans son ensemble. De Mach, il a hérité l’interaction interprocesseur et de BSD, la pile réseau.

Compatibilité avec les appels système de Mach et BSD

Le noyau Mac OS X, à savoir xnu, repose sur les noyaux des systèmes d’exploitation Mach et FreeBSD, mais il contient également des éléments de MkLinux, NetBSD, OpenBSD et de certains développements selon Mach. Mac OS X prend en charge les appels système des systèmes Mach et BSD. Dans la mesure où le noyau de Mac OS X repose à divers niveaux sur Mach et FreeBSD, le noyau xnu de Mac OS X contient deux tableaux d’appels système Mach et BSD et est compatible avec API pour les systèmes BSD et Mach.

Environnement d’exécution

Afin de prendre en charge ne serait-ce qu’une partie de l’héritage des systèmes d’exploitation antérieurs, Mac OS X possède un environnement d’exécution à trois composants :

  1. Environnement d’exécution dyld. Environnement d’exécution qui repose sur le chargeur dynamique dyld.
  2. Environnement d’exécution CFM. Héritage de Mac OS 9 pour la prise en charge des applications qui ne peuvent être exécutées par dyld mais qui utilisent les possibilités de Mac OS X. Cette partie est réalisée dans la bibliothèque Carbon.
  3. Environnement d’exécution Classic. Sert à l’exécution des anciennes applications OS 9 sous OS X.

Ainsi, Mac OS X permet l’exécution de divers types d’applications, y compris pour les anciennes versions du système d’exploitation Mac OS.

Format macho des fichiers exécutables

Sous Mac OS X, la quasi majorité des fichiers contenant un code exécutable tels que les applications, les bibliothèques et les modules de noyau se présentent sous la forme de fichiers au format macho.

Le format macho n’est pas une création originale d’Apple. Ce format a été développé par Open Source Foundation pour son système d’exploitation OSF/1 basé sur mach et adapté par Apple pour l’architecture x86 dans le cadre du projet OpenStep.

Le format de fichier macho et la spécification ABI (Application Binary Interface) décrivent la manière dont le fichier exécutable doit être chargé et exécuté par le noyau. Ils signalent au système d’exploitation :

  • Comment fonctionne le chargeur dynamique ;
  • Comment charger les bibliothèques divisées ;
  • Comment organiser l’espace d’adresses du processus ;
  • Où trouver le point d’entrée etc.

Dans la mesure où macho est le format principal des fichiers exécutables dans Mac OS X, nous allons nous pencher plus en détail sur son organisation.

Organisation de macho

Macho peut être en gros scindé en trois parties : l’en-tête, les commandes de chargement et les segments pouvant contenir plusieurs sections. L’en-tête et les commandes de chargement décrivent les caractéristiques principales du fichier tandis que le segment de données contient un groupe d’octets sur lesquels reposent les commandes de chargement.

En-tête. Les quatre premiers octets de l’en-tête définissent ce qu’on appelle le magic number qui identifie le fichier comme un fichier 32 ou 64 bits. Ils permettent également de définir l’ordre des octets pour le CPU. L’en-tête définit l’architecture pour laquelle le fichier a été compilé. Le noyau peut ainsi garantir l’exécution des fichiers uniquement sur la plate-forme pour laquelle le fichier a été compilé. Il arrive parfois qu’un fichier binaire contienne le code de plus d’une architecture. Ce format est connu sous le terme de « Universal Binaries » (applications universelles). Dans ce cas, le fichier débute par un en-tête fat.

Commandes de chargement. Le secteur des commandes de chargement contient la liste des commandes qui indiquent au noyau comment charger les différents segments du fichier. Ces commandes décrivent comment chaque segment est aligné dans la mémoire, quels sont les privilèges d’accès et où se trouvent-ils dans la mémoire.

Segments et sections. En règle générale, un fichier exécutable macho contient 5 segments :

  • __PAGEZERO. Placé à l’adresse virtuelle à valeur zéro, il ne possède aucune protection. Ce segment ne possède pas un secteur dans le fichier sur le disque.
  • __TEXT. Contient les données avec un accès uniquement en lecture et en exécution.
  • __DATA. Contient les données accessibles en écriture. Cette section est indiquée comme copy-on-write.
  • __OBJC. Contient les données utilisées pour le milieu d’exécution Objective-C.
  • __LINKEDIT. Contient les données utilisées pour l’installation des liens dynamiques.

Les segments __TEXT et __DATA contiennent les sections à valeur zéro et supérieures. Chaque section contient un type définis de données, par exemple, le code exécutable, les constantes, les lignes, etc. Par conséquent, le code exécutable et le code qui ne peut être exécuté sont conservés dans des segments séparés.

Utilitaires pour l’analyse des programmes

Il existe deux méthodes principales pour analyser des programmes : une méthode dynamique et une méthode statistique. L’analyse dynamique suppose le lancement d’un code d’application sous le débogueur ou dans un environnement virtuel suivi par l’analyse de son comportement. L’analyse statistique des programmes est une étude du code de l’application à l’aide de désassembleur sans exécution du code.

Le choix d’une méthode par rapport à une autre dans un cas concret dépend de la situation. Elles ne s’excluent pas mutuellement et bien souvent, elles sont complémentaires.

Utilitaires pour l’analyse dynamique des programmes

A l’instar de la majorité des systèmes Unix, Mac OS X propose de nombreux utilitaires utiles qui interviennent dans l’analyse dynamique des applications et dans le diagnostic du système. Un grand nombre de ces utilitaires proviennent d’Unix mais on retrouve certains programmes qui existent exclusivement pour Mac OS X. Nous vous présentons ci-dessous certains utilitaires qui peuvent être installés avec Mac OS X.

Tous les utilitaires peuvent être scindés en deux catégories.

  1. Utilitaires destinés à l’étude des processus :

  • fs_usage : fournit des informations sur les appels système relatifs à l’activité vis-à-vis du système de fichiers ;
  • heap : énumère tous les blocs de mémoire, répartis par la mémoire dynamique en processus distincts ;

  • lsof : affiche les fichiers ouverts dans divers processus ;

  • top : affiche les statistiques d’utilisation des diverses ressources dans le système ;
  • vm_stat : affiche les statistiques d’utilisation de la mémoire virtuelle par le système ;
  • gdb : débogueur permettant de dépanner un programme à distance ;
  • ddb : débogueur du noyau qui requiert la connexion via un port successif ;
  • ktrace : sert à la surveillance des informations sur les événements systèmes au niveau du noyau pour le processus indiqué ;
  • kdump : affiche les informations, générées par le programme ktrace ;
  • sc_usage : affiche les statistiques du processus indiqué telles que l’utilisation du temps du processeur, l’utilisation des appels système, etc.

  • Utilitaires de réseau.
  • Les utilitaires de réseau cités ci-après sont bien connus dans le milieu Unix.

    • netstat : présentation de diverses données en rapport avec le sous-système de réseau ;

    • tcpdump : affiche le trafic de réseau.

    Il existe pour Mac OS X de nombreux autres instruments de réseau connus des utilisateurs d’Unix tels que nmap et WireShark.

    Il convient de noter que la majorité des programmes avec des textes sources ouverts existants sous Unix, peuvent être facilement compilés sous Mac OS X.Un utilisateur d’Unix expérimenté peut se créer un environnement de travail qui sera très proche de ce qu’il connaît sous Unix.

    Utilitaires d’analyse statistique

    Bien souvent lors de l’analyse de programmes malveillants, il n’est pas conseillé de lancer un programme d’essai ou le code de l’application pour des raisons de sécurité. Autrement dit, pour pouvoir étudier le programme analysé, il faut absolument recourir au désassemblage des fichiers.

    Dans la mesure où les fichiers exécutables de Mac OS X sont des fichiers au format macho, l’analyse statistique sous Mac OS X possède un caractère particulier.

    Le programme otool est l’utilitaire principal pour l’analyse des fichiers au format macho. Il permet d’obtenir des informations telles que l’en-tête du fichier, les commandes de chargement, le point d’entrée voire de désassembler les sections contenant le code exécutable.

    • file : définit le type de fichier ;

    • otool : sert à analyser les fichiers macho ;

    • xxd : permet de transformer un fichier binaire en fichier hexadécimal et inversement ;
    • IDAPro : désassembleur.

    L’augmentation de la popularité de Mac OS X sur Intel a amené de nombreux éditeurs de logiciels à diffuser des versions de leur programme pour cette plateforme. Dans la nouvelle version 5.1, Mac OS X est repris dans la liste des systèmes d’exploitation compatibles et IDAPro.

    Pour les utilisateurs qui passent de Windows à Mac, cela va faciliter les choses car parfois, l’utilisation d’IDAPro permet d’exécuter certaines tâches plus vite et plus facilement qu’à l’aide des outils standard de Mac OS X.

    Exemples d’analyse de programmes malveillants

    En guise d’exemple, nous allons essayer d’analyser IM-Worm.OSX.Leap et Virus.OSX.Macarena à l’aide de certains des utilitaires cités. Nous tenons à préciser que les programmes malveillants étudiés ici sont des concepts qui n’ont pas d’effet destructeur et qui ne représentent pas une grave menace pour les utilisateurs. Ils cherchent à prouver qu’il est possible de créer des programmes de ce genre.

    Analyse d’IM-Worm.OSX.Leap

    Leap ne peut pas se propager via Internet et c’est la raison pour laquelle il utilise iChat. En premier lieu, Leap se diffuse via l’application iChat sous la forme d’un lien vers un fichier sur la ressource RapidShare. Nous en profitons pour signaler que ces captures d’écran proviennent de la nouvelle version Mac OS X Leopard. Le destinataire doit cliquer sur le lien, confirmer le téléchargement du fichier, le décompacter puis, l’ouvrir. Ensuite, l’ordinateur infecté de l’utilisateur diffuse le fichier (sans aucune modification) vers tous les contacts du carnet via Bonjour.

    Leap se diffuse sous la forme d’un fichier intitulé latestpics.tgz et une fois décompacté, il apparaît dans le Finder comme un fichier jpeg.

    Etant donné que Leap utilise spotlight, il fonctionne uniquement dans Tiger (Mac OS X 10.4.x).L’exécution de Leap requiert InputManager, toutefois InputManager ne fonctionne pas dans le système pour x86. De plus, le fichier binaire contient un code uniquement pour PowerPC. Par conséquent, Leap fonctionne uniquement sur les ordinateurs dotés d’un processeur PowerPC.

    Pour commencer l’analyse, il faut expliquer le format du fichier latestpics. Pour ce faire, nous lançons l’utilitaire file avec l’argument latestpics #file latestpics. Les résultats obtenus indiquent que nous sommes en présence d’un fichier au format macho.

    Ensuite, grâce à l’utilitaire otool, nous étudions l’en-tête binaire du fichier :
    #otool -h latestpics.

    Ensuite, nous pouvons étudier le point d’entrée de Leap. Dans macho, le point d’entrée est défini à l’aide de la commande #:otool -l latestpics qui affiche les commandes de chargement. Dans ce cas-ci, ce qui nous intéresse, c’est la commande LC_UNIXTHREAD, qui affiche le contenu des registres du processeur au démarrage. Sur PowerPC, ce qui nous intéresse, c’est le contenu du registre srr0. Il s’agit du point d’entrée.

    Grâce à l’utilitaire nm connu de tous les utilisateurs d’Unix, nous pouvons consulter la liste de tous les caractères dans le fichier binaire dont les fonctions suivantes au nom évocateur et qui indiquent que ce fichier présente un risque potentiel :

    • _copySelf
    • _infect
    • _infectApps

    Nous pouvons maintenant étudier le code plus en détail. Ici aussi, nous pouvons compter sur l’utilitaire otool -vt. Cet utilitaire permet de consulter le contenu des sections dans le segment __TEXT, qui renferme le code exécutable du fichier latestpics :

    Les fonctions du système sont affichées dans les lignes mais elles sont cryptées à l’aide de la fonction _xor :

    Après le décryptage, nous obtenons les lignes suivantes :

    /usr/bin/tar -zxf /tmp/hook -C /tmp
    /Library/InputManagers
    /bin/rm -rf /Library/InputManagers/apphook
    /bin/mv -f /tmp/apphook /Library/InputManagers
    ~/Library/InputManagers
    /bin/rm -rf ~/Library/InputManagers/apphook
    /bin/mv -f /tmp/apphook ~/Library/InputManagers
    %s/Contents/MacOS/%s /bin/cp ‘%s’ ‘%s/..namedfork/rsrc’
    /bin/cp -f ‘%s’ ‘%s’
    (kMDItemKind == ‘Application’) (kMDItemLastUsedDate >= $time.this_month)  /usr/bin/ditto %s /tmp/latestpics
    /usr/bin/gzip -f -q /tmp/latestpics

    L’analyse de ces lignes nous permet de comprendre les actions d’IM-Worm.OSX.Leap :

    • Il se copie dans /tmp sous latestpics ;
    • Il crée ensuite tgz ;
    • Il extrait InputManager, appelé « apphookbundle » et le copie dans /tmp ;
    • Si uid 0, alors le répertoire /Library/InputManagers/ est créé, tous les apphook existants sont supprimés et un nouvel apphook est copié de /tmp ;
    • Si uid n’est pas égale à 0, alors ~/Library/InputManagers/ est créé ;
    • Désormais, chaque fois qu’une application quelconque de Mac OS X est lancée, un nouvel apphook est chargé dans son espace d’adresses ;
    • Ensuite, au moment de lancer l’application, une tentative d’envoi de latestpics.tgz via iChat est réalisée.

    Analyse de Virus.OSX.Macarena

    L’analyse du fichier débute par l’examen de son format. Pour ce faire, il convient d’utiliser, comme dans le cas précédent, l’utilitaire file.

    Les résultats fournis par file indiquent qu’il s’agit d’un fichier au format macho.

    Ensuite, nous pouvons étudier l’en-tête du fichier et définir le point d’entrée grâce à otool :

    Un examen minutieux met en évidence un point d’entrée étrange à l’adresse à valeur zéro. L’étape suivante doit être l’analyse du code au départ de ce point d’entrée. C’est ici qu’un problème se pose. Il se fait qu’il est impossible de désassembler cette partie du fichier macho à l’aide d’otool car otool autorise uniquement l’analyse du code dans la section text du segment __TEXT.

    Dans cette situation, IDAPro nous viendra peut-être en aide. Mais pour ce faire, il faut charger le fichier en tant que binary dans IDA. Ensuite, il sera possible de désassembler le fichier :

    Macarena est le premier fichier capable de véritablement infecté les fichiers au format macho dans le répertoire en cours.

    L’analyse du fichier infecté permet de mettre en évidence les points suivants.

    Le virus remplace le point d’entrée par l’adresse à valeur zéro. Le segment __PAGEZERO est chargé dans macho via l’adresse à valeur zéro. Comme nous l’avons déjà dit lors de l’examen de la structure macho, __PAGEZERO n’a pas de place dans le fichier sur le disque. Pour cette raison, le code s’inscrit à la fin du fichier sur le disque. Cette technique a un effet inattendu : les applications telles que gdb, IDA ou otool n’affichent pas le code du virus.

    Macarena un virus relativement simple. Lors de son exécution, il parcoure les fichiers dans le répertoire actuel et infecte les fichiers au format macho pour l’architecture x86. Il existe des versions plus récentes du virus qui infectent également les fichiers ppc mais qui, pour le reste, sont semblables aux versions antérieures.

    Le virus n’a aucun autre effet.

    Conclusion

    Mac OS X gagne chaque jour en popularité. Bien qu’à l’heure actuelle les programmes malveillants ciblant cette plateforme sont avant tout des concepts, l’augmentation du nombre d’utilisateurs de Mac OS X va s’accompagner d’un développement de l’intérêt que lui portent les individus mal intentionnés. C’est la raison pour laquelle la nécessité d’analyser les programmes pour Mac OS X est de plus en plus pressante.

    Heureusement, Mac OS X contient de nombreux instruments utiles pour analyser des programmes distincts ou pour poser un diagnostic du système dans son ensemble. De plus, des éditeurs tiers ou les fanas de l’analyse des programmes sont prêts à unir leurs efforts à ceux des experts.

    Posts similaires

    Laisser un commentaire

    Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *