227 views
<style> img{ width : 50vw; } </style> # Virus et technique virales / Infections Informatiques ![](https://notes.ar-lacroix.fr/uploads/207df570-6466-4ae6-84da-4825f61f95c7.jpg) :::info Virus = séquence de symboles qui interprétée dans une environnement donné modifie d'autres séquences de symboles dans cet environnement, de manière à y inclure une copie de lui-même. ::: ## Historique :::info Il est intéressant d'étudier les anciens malwares dont les codes sont simples avec peu ou pas d'obfuscation Voir: [theZoo](https://github.com/ytisf/theZoo) et [MalwareBazaar](https://bazaar.abuse.ch). ::: *Jeu [« Core Wars »](http://corewars.org/)* : jeu très simple qui manipule la mémoire (avec des mov 0,1 par exemple pour copier l’instruction actuelle sur la suivante et écraser toute la mémoire), le but c’est de buter tous les autres programmes tournant sur une machine très simple pour être le dernier en vie *Xerox → 1981 :* ils ont copié un film sur des machines adjacentespour faire une expérience fun (avec un algo distribué). ### 1981-1988 : premières menaces virales - *Premiers virus sur Apple II et DOS 3.3 (1981)* → Unnamed l’idée c’est écraser les secteurs de boot de disquettes insérées pour répliquer le virus sur chaque disquette qui infecte les machines sur lesquelles elles sont insérées… - *Premier virus furtif* (furtif car il essaye de se cacher) (1986) → *Brain*, infection des secteurs de boot + interception des commandes lisant ce secteur pour lui montrer le secteur original - *Premier virus chiffré : Cascade (1988)* → comme google gravity , infection d’un exécutable .com puis propagation sur les autres fichiers .com ### 1989-1995 : Développement des techniques complexes - *Virus évolutifs polymorphiques* → modification du code à chaque infection et offuscation (+ difficile de le reconnaître) : Chameleon (1990) - *Moteurs pour coder des virus* → Dark Avenger / Mutation engine $\rightarrow$ appartition des anti-virus grand public (1992) $\rightarrow$ 50 Virus connus ### 1995-1999 : Virus de documents - *Premier Macro-virus :* WM.Concept(1995) - *Premier virus impactant GNU/Linux :* Staog(1996), mais peu d'ordinateurs personnels (plus des serveurs) fonctionnant avec Linux donc cible peu intéressante, ne propage pas grand chose... - *Effacement du BIOS* (Tchernobyl) $\rightarrow$ 40k de virus ### 1999-2000 : Les mass-mailers en force Mass-mailers pièce jointe infectée et envoi massif - Melissa fait le tour du monde en 2 jours 1999, innocent il fait que se répliquer (envoi à 50 contacts) :earth_africa: les serveurs de mail tombent un à un alors qu'à la base Mélissa voulait pas être méchante - ILove You en 2h en 2000, lui installé un trojan et un keylogger, envoyé à tout les contacts $\rightarrow$ 56k virus en l'an 2000 ### 2001-2004 : Vers internet - *Multiples vecteurs d'infections :* Nimda (se propage via Internet) $rightarrow$ utilise à la fois le mail et les sites webs (pour dl les fichiers), utilise les dossier montés en réseau pour infecter une machine - *CodeRed*, 400k machines infectées en 14h - *SQLSlammer*, autent en 10 minutes ### Vers maintenant ![](https://notes.ar-lacroix.fr/uploads/a09d7337-47a8-4e40-9f94-545b7f74897f.png) Il y a de plus en plus de virus **Stuxnet :** Début de la prise de conscience de l'importance de la cybersécurité en entreprise **Mirai (IoT) :** Développé par des étudiants, brute force les credentials des appareils réseaux, caméras **WannaCry, NotPetya :** faux ransomwares **RaaS → Ransomware as a Service :** les entreprises ont une cible avec l'argent qu'elle veut gagner et une entreprise fournit le code malveillant ou même fait le ransomware elle même En général quand un malware détecte qu'il est dans un vM? il ne s'éxécute pas pour que ne puisse pas récupérer sa signature. ## Généralité & Taxonomie :::info **Malware :** programme s'installant dans un système d'information, à l'insu du ou des utilisateurs, en vue de porter atteinte à la confidentialité, l'intégrité ou la disponibilité de ce système, ou suceptible d'incriminer à tort l'utilisateur. ::: :::info **Dropper :** fichier/programme qui porte le programme infectant ([Dropper (malware) - Wikipedia](https://en.wikipedia.org/wiki/Dropper_(malware))) - le programme infectant est déposé en mémoire - le programme infectant prend la main et s'éxécute - Puis il rend la main au programme hôte ::: ### Installation se fait en trois modes : - mode **furtif** : l'utilisateur ne se rend pas compte qu'un tel programme est présent - mode **résident** : processus actif en mémoire afin de pouvoir agir en permanence - mode **persistant** : cable par différentes techniques de se réinstaller dans la machine (localisation multiple et donc éradication difficile car si le programme est encore à un seul endroit, il va de nouveau se remettre partout, il faut l'effacer de partout en même temps) ### Les différentes classifications : - Classification Fonctionnelle : Basée sur les fonctionnalités désirées par les attaquants (ransomware, trojan, ...) - Classification Généalogique : On rattache un malware à ses liens de parenté, la réutilisation de librairies, codes... - Classification Comportementale : basés sur les actions concrètes (qu'est ce qu'il essaye de faire et ou il se met) ![](https://notes.ar-lacroix.fr/uploads/f21f5f26-e0ed-48d4-865e-b54656661ec5.png) #### Programmes simples Bombes logiques : s'intalle dans le système, attend un événement et exécute sa fonction offensive (par exemple attendre que l'utilisateur ouvre son Keepass 😈) Cheval de Troie Constitué de 2 parties : Autorise un accès distant à la victime Ajout de code → remplacer des inst dans la cible pour sauter direct ![](https://notes.ar-lacroix.fr/uploads/36eafa23-65ce-4f76-bb31-b66d2afef47b.png) ![](https://notes.ar-lacroix.fr/uploads/898a8a3d-93e4-46e9-af6b-5c9efa3cfb02.png) #### Classement de fonctionnalités ![](https://notes.ar-lacroix.fr/uploads/951192d0-cea9-4ea2-b8e7-2b91fc2dcd62.png) :::info à noter que dans la photo il y a pleins de catégorie mais les malwares sont souvent une combinaison de plusieurs. ::: - PUA : Potentially Unwanted Application - Nouveau nom de virus : file inspector ### Les programmes autoreproducteurs Fonctionnement : - Recherche de cibles non déjà infectés (pour éviter la surinfection et pour ne pas être détecter) - Copie : écrasement, ajout, entrelacement (mettre le code à des endroits libres du mapping en mémoire de l'executable), accompagnement (enchaîner avec le programme légitime pour que ça se voit moins) - Anti-détection : poly/méta-morphisme, mise en veille (on attend si on voit qu'on est observé/on s'arrête de temps en temps), saturation (envoyer pleins de signaux), désinstallation de l'Anti-Virus - Charge virale : activité concrète malveillante (est-ce qu'on doit lancer ou non) :::danger Inhiber les logs/messages d'erreur à TOUTES les étaps ::: ![](https://notes.ar-lacroix.fr/uploads/f3c582f6-564f-483b-84e6-eecb3aa0850c.png) ![](https://notes.ar-lacroix.fr/uploads/112b1543-70f8-478e-a133-de999224f8ea.png) ![](https://notes.ar-lacroix.fr/uploads/1ba5073d-9d77-482c-ba1b-4e07a761d4ad.png) Entrelacement → repère les espaces vides signalés dans l’en-tête PE et le virus se met dedans ![](https://notes.ar-lacroix.fr/uploads/e200689d-e002-40be-81b8-f1854b1d51ef.png) Accompagnement de code → détourner la séquence de lancement du programme légitime (en bidouillant le PATH sur Linux par exemple) #### Virus ##### Virus d'exécutable Le plus répandu, cible le fichier binaire exécutable (dépend donc de l'OS) ##### Macro-virus - Fichier bureautique de données (docx, odt, pdf), - S'attaque à l'application à travers son interpréteur de langage, - Soit grâce à une fonction légitime - Soit en exploitant une faille (BOF,...), spécifique d'une application (portable) ##### Virus de secteur de Boot - Cible : programme de démarrage d'un pépin bootable (BIOS, MBR) - Avantage : Au moment de l'infection, pas d'antivirus #### Vers Se reproduit sans être rattaché à un autre fichier (via un réseau informatique) :::info Différence vers/virus → le vers se reproduit sans s’attacher à un fichier et surtout propagation à travers le réseau (mais le prof trouve que la frontière est fine entre vers et virus) ::: ##### Vers Simples Exploitent une faille logicielle et réseau (slammer (2003), sasser(2004), conficker(2008) $\rightarrow$ Complexité du vers : difficile de contrôler la propagation ##### Vers de messagerie Les mails ... (vuln ou SE) IloveYou : 4 jours 3.1 millions de machines, utilisait une vuln d'outlook qui supprimait la seconde extension, s'il y en avait 2, de l'affichage mais il executait quand même. Effacait tout + cheval de Troie (yay) ##### Vers Psychologiques (Scareware) Ingénierie sociale (un peu nulle) Genre → vite envoyer le message à tous vos correspondants sinon vous êtes dans la merde ## Techniques d'anti-détection ### Virus et Vers Polymorphes Faire varier les éléments fixes qui pourraient permettre d'identifier le malware (la signature typiquement) pour éviter d'être détecter automatiquement par les antivirus $\rightarrow$ Base du fonctionnement des Packers *Techniques :* Réécriture de code (permutation d'instructions), Obfuscation (insertion de code mort, EPO Entry Point Obscuring: rendre difficile la détection du point d'entrée), Chiffrement des données ![](https://notes.ar-lacroix.fr/uploads/b2ba6508-34e2-4a7d-b369-bf5c29a79ec6.png) Les techniques de réécriture de code sont très facilement repérable par un humain. #### Obfuscation Obfuscation : à partir d'un programme P de produire un nouveau programme qui possède deux propriétés : - il a les mêmes fonctionnalités que P, c'est à dire qu'il calcule les mêmes fonctions que P - il est inintelligible dans le sens où c'est une boîte noire virtuelle (difficile de comprendre que c'est la même chose que P) $\rightarrow$ revient à chiffrer du code en clair avec comme secret du code clair Mais pour l’obfuscation/chiffrement le virus a besoin d’une fonction de restoration Objectifs : On réécrit très légèrement le code pour changer la signature, rendre plus difficile l'analyse de code (contourner les moteurs d'analyse spectrale, complexifier l'analyse statistique et détecter et contrer l'exécution pas à pas) 3 types de transformations : - brouillage du flux des instructions - début et fin de code doivent être difficile à localiser - le code ne possède pas de motif facilement identifiable - insertion/modification pour rendre plus compliqué - tableau avec plein de valeurs aléatoires et seules certaines cases contiennent des valeurs intéressantes → ici ces valeurs sont situées aux cases modulo n - transformation intra-procédurale - modifier le flux d'exécution du prgm (dégénérer le flux) - dégénérescence : complexifier le flux d'exécution du programme en modifiant les structures - tableaux dynamiques et pointeurs de fonctions - alias des données : plusieurs noms désignent un même espace mémoire - utiliser plusieurs if/swhitch-case avec des goto au lieu de simple while ou if $\Rightarrow$ il faut pour contourner ça suivre l'exécution du programme ![](https://notes.ar-lacroix.fr/uploads/2a266523-40e0-415f-9584-34e045ffbc88.png) - transformation inter-procédurale - modification des appels de fonction: on utilise un pointeur vers la fonction appeler - unification des signatures de fonction: complique l'analyse et permet l'utilisation de tableau de pointeurs de fonction. - modification des signatures de fonction: ??? (ø slide est-ce que c'était renommer les fonctions en a, aa, b, ... ?) - tableau contennant des pointeurs de fonctions à exécuter: on combine les 2 premières méthodes :::info Les “packers” utilisent beaucoup l’unification de fonction pour obfusquer leurs code. ::: :::info En général un virus est écrit direct en ASM mais pour l’exemple, si un antivirus se base sur le code pour sa signature bah là il sera baisé ::: #### Virus et vers chiffré Tout ou partie du virus XOR suffisent, les chiffrement compliqués comme AES sont repérables facilement par des gens un peu aguerris Seuls quelques virus et vers très évolués font varier véritablement la procédure de chiffrement à chaque infection (*métamorphisme*) **Polymorphisme Server-Side** ![](https://notes.ar-lacroix.fr/uploads/a0ce8047-82e3-4093-93b6-c9821f543fc6.png) On obfusque des malwares, même déjà connus et on réinfecte la machine qui a gardé le CnC par exemple #### Packers #- Moteur d'obfuscation ou moteur polymorphique - Fait une série d'obfuscation pour des fichiers exécutables. - Utilisé légitimement pour se protéger du RE (propriété intellectuelle), sécurité par obscurité - Utilisé offensivement pour contrer une analyse statique - Principe : - L'exécutable est compressé pour cacher toutes les infos avec les techniques courantes d'anti-détection vues précédemment combinées et multipliées (noms de fonctions, @IP, librairies...) - Présence d'un "wrapper" (fonction de restauration) pour unpack le fichier obfusqué - Permet de voir quand il s'execute dans une VM, dans gdb ou autre. (regarde les clefs de registres, si le dossier est crédible) - l'unpacking stub résoud les imports ou les met dans le pack ![](https://notes.ar-lacroix.fr/uploads/e9cf49bb-dba1-42fb-8b63-f52392ead750.png) - Packers populaires : [UPX](https://upx.github.io), PECompact, Multitude de packers propriétaires :::info La fonction strings() peut faire apparaitre les chaînes de char dans l'exécutable ::: ##### Comment reconnaître un executable packé ? - Indicateurs principaux - Très peu d’imports (vu qu'on a pas encore unpack au lancement) --> utilisera LoadLibrary/GetProcAddress - Très peu de code reconnu par un désassembleur avec analyseur automatique - Tailles de section peu courantes (0 pour le .text) :::success [Outil : Peid](https://github.com/packing-box/peid) ::: ##### Comment dépacker un executable ? - Automatiquement (s'il est connu/public) - Manuellement (c'est du RE) - Un mix des 2 : - on recherche à la main le point d'entrée : OEP - on execute le Stub ainsi trouvé - on récupère le programme - on le relink/on refait l'en-tête ### comment fait un virus/vers métamorphe pour évoluer ? À chaque réplique, le code exécuté mute mais reste fonctionnellement équivalent. S'il y a un chiffrement, la routine de chiffrement et déchiffrement est différente à chaque nouvelle génération. ![](https://notes.ar-lacroix.fr/uploads/bcf6a0d0-369b-4ee4-afcf-66d74c2a6621.png) Moteur métamorphique : - désassemblage / dépermutation : désassemble et remet en ordre - compression : annuler les effets d'expansion - permutation : découpage en blocs de taille aléatoire et sauts successifs vers les blocs - expansion : modification aléatoire des registres utilisés - réassemblage : traduire le pseudo-code et choix au hasard d'une version parmis plusieurs ![](https://notes.ar-lacroix.fr/uploads/0eda59a5-33dd-4bed-a55b-07cd82ad5a95.png) ### Virus et Vers Furtifs Le manuel du bon virus furtif : - pas de message d'erreur/blocage, se cacher dans la liste des process ... - ressembler le plus possible à un programme légitime - Limiter la virulence (les naissances) à ce qu'il faut pour faire le moins de bruit (infecter là où ça marchera/là où on a pas encore infecté) Méthodes : - utiliser les zones oubliées ( secteurs déclarés faussement défectueux) - régénérer les informations sur un fichier - leurrage de structures particulières (table d'allocation des fichiers) ou de fonctions ou de ressources logicielles du système (détournement ou déroutement d'interruptions) #### COmment un code polymorphe se reconnaît lui-même ? Il laisse un petit truc pas trop visible : - la date du fichier à une valeur constante. - la taille d’un fichier infecté à une certaine taille significative/multiple significatif. - Créer une clé dans le base de registre de windows - Attributs peu connus de systèmes de fichiers ## Détection antivirale - Blue team ouéééé Détection virale est un problème indécidable : jeu de chat/souris :::danger Rappel pour les nuls (A l'exam...) Méthodes statiques (on lit juste le code) et dynamiques (exécution du code) ::: ### Détection Statique #### Signatures Bases de signatures de virus ET programmmes sains mises à jour plusieurs fois par jour On cherche dans les fichiers suspects des suites spécifiques d’octets (patterns) qui constituent une signature - Discriminante : signature spécifique à un ou une famille (signatures génériques) de virus - Non incriminante : ne correspond à aucun(e) autre (famille de) virus ou programme sain Une signature peut être - séquence d'instructions - message spécifique du virus - La signature que le virus lui-même utilise pour éviter la sur infection :::info On met aussi où on a trouvé la signature ::: Avantages : - Efficace Désavantages : - Uniquement pour les trucs connus - Faut maintenir la base de données (et la sécuriser) #### Contrôle d'intégrité - On vérifie la modification des fichiers sensibles Avantages : ... Limites - Difficile à mettre en pratique (faux positifs, y a des moments où le fichier a légitimement besoin d'être modifié...) - Peut être contourné : Ne détecte pas pas mal de types de cirus (compagons, furtifs) - Tard, ça veut dire qu'on s'est déjà fait attaqué $\Rightarrow$ peu utilisé :::info Compagnon c’était la modification de la séquence d’exécution d’un fichier (voir plus haut) ::: #### Analyse spectrale On regarde les proportions d'instructions peu courantes ou proportion peu courantes de ces instructions Avantage : - Détection possible de virus inconnus Désavantage : - dur de modéliser la "normalité" --- *par exemple je fais du cryptohack pour le plaisir, est-ce normal ?* - Beaucoup de faux-positifs - Fonctionne pas sur du code chiffré ou compressé #### Analyse heuristique Etude du comportement des séquences d'instructions/appels de fonction... (Score de malveillance incrémenté ou décrémenté selon informations trouvées) Désavantages : y'a des faux positifs :::success Le statique ça s'automatise et permet de détecter le plus tôt possible ::: ### Méthodes dynamiques #### Surveillance comportementale - Anti-Virus/EDR (actions autorisées par whitelist ou blacklist, souvent mix des 2) - Détection de comportement suspect - Détection de Malware inconnus - Permet de lutter avant l'infection Désavantage : - lourd/ralenti l'exécution - ne va pas forćement capter un nouveau malware (technique inovante) - Pas d'identification précise de la menace (pb d'interprétabilité, des bisous msieur Siala) - Fausses alarmes $\rightarrow$ perte de confiance de l'utilisateur ($\rightarrow$ désactivation du système car ça saoule) #### Emulation de code On charge le code dans un sandbox et on regarde ce qui se passe Limites : - L'émulateur connait pas forcément toutes les fonctions - Si le malware sait qu'il est émulé il va faire que du code mort - Utilisation de plusieurs couches de chiffrement ## Conclusion Les malwares poussent rarement très loin, ils mélangent souvent pleisn de technique et les mettent dans des packers jusqu'à ce que ça marche Trucs intéressants : - https://github.com/mandiant/flare-vm -