• Aucun résultat trouvé

Définitions des typologies de logiciels malveillants et de leurs

1.2 Définitions

1.2.3 Les botnets

1.2.3.4 Définitions des typologies de logiciels malveillants et de leurs

Afin de compléter les définitions de référence, nous établissons ici les définitions d’un certain nombre de catégories de logiciels malveillants ou leurs fonctionnalités, en n’oubliant pas qu’elles seront souvent combinées ou entremêlées.

Définition 1.4 (virus). Un virus est un code malveillant, transporté dans un programme

ou un fichier, conçu pour se reproduire automatiquement et s’insérer dans d’autres fichiers, programmes ou ordinateurs.

Définition 1.5 (ver). Un ver (computer worm) est un programme indépendant (ne

néces-sitant pas d’être inséré dans un autre fichier pour être transporté ou exécuté) et capables de s’auto-répliquer et se propager par ses propres moyens vers d’autres systèmes sans néces-siter systématiquement d’intervention de l’utilisateur, par exemple par l’abus de services réseau ou par courrier électronique.

Définition 1.6 (cheval de Troie). Un cheval de Troie (Trojan horse) se présente comme

un programme banal et légitme, qui a la particularité de contenir des fonctionnalités mal-veillantes cachées.

Typologies principales de logiciels malveillants

Principales caractéristiques rencontrées dans les logiciels malveillants Les logiciels

malveillants peuvent comporter un ensemble de techniques additionnelles telles que décrites ci-après, soit pour augmenter leurs fonctionnalités, soit pour rendre leur détection ou leur examen plus complexes.

Utilisation de techniques d’obfuscation Pour être plus discrets, c’est-à-dire plus

difficiles à détecter, plusieurs techniques peuvent être employées par les développeurs de logi-ciels malveillants. Il est important de rappeler, comme le précise [Scr15], que les techniques

d’obfuscation de code ne sont pas forcément destinées à des usages malveillants. En effet,

ces méthodes ont d’abord été développées pour protéger la propriété intellectuelle d’un lo-gicielle ou encore avec la volonté de garantir un certain niveau de sécurité en empêchant la rétro-conception.

Définition 1.7 (obfuscation). L’obfuscation de code informatique [CTL97] est une classe

de techniques capables de transformer un programme source P en un programme cible

P’, telles que la rétro-conception de P’ est plus difficile que pour P et le comportement

observable de P et P’ sont identiques.

[CTL97] présente 4 grandes cibles des techniques d’obfuscation :

• la présentation (layout) du programme : suppression des commentaires, embrouillage des variables, ...

• le flot d’exécution : séparation de blocs habituellement liés ou rapprochement de blocs de code sans rapport, insertion de code inutile ou redondant, etc.

• les données : leur arrangement, leur stockage et leur encodage,

• et l’obfuscation préventive, spécifiquement pour contrer les méthodes utilisées pour désobfusquer.

Le guide du NIST [MKN05] propose une autre classification de ces méthodes telles qu’elles sont rencontrées dans le développement des logiciels malveillants : chiffrement, polymor-phisme, métamorpolymor-phisme, furtivité, armure contre les antivirus et l’analyse humaine, ou encore l’utilisation de tunnels dans les interruptions système. Ainsi, certaines méthodes de furtivité interagissent avec le système au cours de leur fonctionnement, par exemple en modifiant la taille des fichiers rapportée.

Le chiffrement est le plus souvent réalisé grâce à des programmes appelés couramment

packers. Les auteurs de [DN12] proposent une synthèse des techniques de packing :

l’empaque-tage consiste principalement à insérer le code malveillant que l’on cherche à camoufler, sous une forme chiffrée (ou simplement compressée comme le précise [RM13]), dans un autre exé-cutable qui sera chargé de le déchiffrer (ou décompresser) sur le système cible. Selon [GFC08] en 2008, les packers les plus répandus parmi les logiciels malveillants observés étaient : UPX, ASPack, FSG et UPack. Leur étude reposant sur des données collectées par l’éditeur Sy-mantec relevait une trentaine d’autres packers personnalisés, dont certains utilisés pour du code malveillant sont aussi retrouvés pour du code légitime. Le développement de nouveaux outils d’empaquetage est permanent comme Polypack [OBJ09], un service d’empaquetage en ligne ou encore ce que présent [MH12] sur les possibles évolutions du polymorphisme et où il est proposé une nouvelle technique de camouflage – Frankenstein – qui consiste à créer les mutations grâce à des patchworks de code bénin.

[DN12] décrit ensuite les techniques d’empaquetage avancées qui permettent de protéger le code malveillant contre la rétro-ingénierie et de contourner les systèmes de dépaquetage : l’empaquetage multi-couches, ou encore l’anti-dépaquetage. Les packers Enigma et Themida sont donnés comme exemples pouvant mettre en œuvre toutes ces techniques.

Enfin, dans une étude plus poussée [RM13], les auteurs utilisent des techniques d’instru-mentation (Dyninst) pour découvrir et classifier un maximum de méthodes d’obfuscation. Ils rappellent que les packers utilisent parfois plusieurs étapes, protégeant leur code principal de l’analyse statique par une couche supplémentaire de chiffrement basique (comme ASProtect).

Définition 1.8 (packer). Dans le contexte de notre étude, un packer (ou empaqueteur)

est un programme utilisé pour obfusquer un logiciel malveillant, notamment en utilisant des technologies de chiffrement. Les développeurs de logiciels malveillants utiliseront des packers du marché (commerciaux ou libres), des packers développés par d’autres dévelop-peurs de logiciels malveillants ou encore des routines d’empaquetage maison.

Définition 1.9 (loader). Un loader est la portion de code qui s’exécute au lancement

d’un logiciel empaqueté pour réaliser le désempaquetage – en général ces opérations sont réalisées uniquement en mémoire.

Note : dans certains scénarios de déploiement, les développeurs de botnets appellent

Enfin, les techniques d’armure que nous évoquions plus haut peuvent être de plusieurs types :

Définition 1.10 (armure). L’armure (ou techniques d’évasion) d’un logiciel

mal-veillant sont notamment les méthodes lui permettant de bloquer l’utilisation :

• des techniques de débogage (utilisation d’outils tels qu’IDA, radare2, GDB, etc.) • des antivirus (notamment en détectant leur exécution et en les arrêtant) ;

• des machines virtuelles et autres bacs-à-sable (sandbox) d’analyse.

Rootkits La persistance d’un logiciel malveillant au sein d’un système dépend de sa

discrétion lors de son fonctionnement. Aussi, certaines techniques ont été développées per-mettant d’interagir directement avec le système d’exploitation et d’empêcher non seulement l’utilisateur, mais aussi les logiciels qu’il utilise pour se protéger, de détecter la présence ou les traces de l’exécution du code malveillant. Elles permettent aussi au programme malveillant de réapparaître au démarrage du système, alors même qu’il a été stoppé et apparemment supprimé. L’ensemble de ces méthodes sont rassemblées dans des kits de prise de contrôle autrement appelés rootkits. Nous proposons donc la définition suivante :

Définition 1.11 (rootkit). Un rootkit (ou outils de dissimulation d’activité[CER06]) est

un ensemble de routines permettant de dissimuler le stockage et le fonctionnement d’un logiciel en prenant le contrôle de fonctionnalités essentielles du système d’exploitation ou de son noyau (on parle alors de kernel rootkit) : camoufler à l’utilisateur et au système l’exécution de certains processus, l’existence ou la taille de certains fichiers et maintenir la persistance du code malveillant et son contrôle sur le système.

Les rootkits peuvent intervenir à plusieurs niveaux de privilège d’un système : matériel (dans le micrologiciel d’un disque dur ou d’un clavier par exemple), noyau du système d’ex-ploitation ou utilisateur. Un bootkit est une forme particulière de rootkit installée dans la zone de démarrage sur le disque dur du système.

Pour être installé dans les niveaux les plus élevés de privilège, le processus installant le rootkit aura du convaincre l’administrateur du système (ou un utilisateur disposant de ces droits) d’exécuter le programme malveillant avec les droits d’administrateur ou exploiter une vulnérabilité permettant cette élévation de privilèges. L’autre solution est de contourner la sécurité logique en étant capable d’installer un bootkit par un accès physique.

Fonctionnalités complémentaires Certaines fonctionnalités complémentaires méritent

d’être documentées, elles seront abordées lors de la description des différentes catégories de botnets observées. L’une d’entre elles est souvent rencontrée, la porte dérobée :

Définition 1.12 (porte dérobée). Une porte dérobée (ou backdoor ) est (dans le contexte

de l’observation des botnets) un processus qui écoute pour des connexions et des com-mandes sur un port réseau TCP ou UDP.