web-dev-qa-db-fra.com

Comment les antivirus recherchent-ils des milliers de signatures de malwares en peu de temps?

La plupart des antivirus ont des centaines de milliers voire des millions de signatures de logiciels malveillants et pourtant ils analysent de nombreux fichiers dans un délai raisonnable avec des taux de détection élevés. Même les scanners en temps réel ne ralentissent pas sensiblement l'ordinateur, mais offrent une solide protection contre les menaces. Comment les scanners peuvent-ils atteindre ce type de performances?

Je sais que cela pourrait être une question générale, mais je voulais avoir une idée générale à ce sujet.

47
Koorosh Pasokhi

La détection antivirus est un extraction de fonctionnalités et un problème de classification .

Une grande analogie est le jeu 20 questions où le but est d'identifier un objet arbitraire en posant 20 questions oui/non apparemment sans rapport. L'idée derrière le jeu est que chaque réponse éliminerait la moitié des objets, il est donc théoriquement possible de décrire 2 ^ 20 (1 048 576) objets avec seulement 20 caractéristiques binaires.

Une analogie différente est de savoir comment le cortex visuel traite les informations visuelles. Le cerveau dispose d'un matériel très simple et rapide pour détecter et classer un nombre infini d'images. Seules six couches de neurones (le nombre de neurones est estimé à 140 millions) sont utilisées pour extraire progressivement des caractéristiques plus complexes et les transmettre à la couche suivante. Les couches interagissent en avant et en arrière les unes pour les autres pour produire des notions abstraites qui peuvent être vérifiées par rapport à la mémoire.

Les moteurs antivirus stockent de nombreuses fonctionnalités de logiciels malveillants connus dans le fichier de définition et lorsqu'ils analysent un nouveau fichier, ils optimisent l'extraction et la classification (correspondance) de ces fonctionnalités. Le stockage des fonctionnalités rend également la détection plus robuste afin que de petits changements dans un logiciel malveillant ne contrarient pas la détection. L'extraction des fonctionnalités se fait également en parallèle afin que les ressources soient pleinement utilisées.

La plupart des fonctionnalités sont conçues par des humains, mais certaines n'ont pas de sens par elles-mêmes, comme avoir un octet nul à la fin du fichier ou un rapport entre la taille du fichier et la taille du texte imprimable. Ces fonctionnalités absurdes ou non intuitives sont générées et testées de manière aléatoire par l'exploration de données sur de grandes quantités de fichiers. Au final, le fichier est décrit et classé par la combinaison de fonctionnalités. En remarque, le meilleur prédicteur des questions fermées sur Stack Exchange est de savoir si la première lettre de la question est en minuscules.

Ainsi, lorsqu'un nouveau fichier est analysé, il est rapidement classé en catégories de plus en plus fines, puis comparé à un petit ensemble de signatures. Chaque étape exclurait un grand nombre de fichiers propres et dicterait les autres fonctionnalités à extraire ensuite. Les premières étapes sont très petites en termes de ressources informatiques, mais elles déterminent quelles étapes plus coûteuses doivent être prises plus tard.

En utilisant seulement quelques lectures de disque et cycles CPU, le moteur peut déterminer le type de fichier. Disons que c'est un fichier JAR. À l'aide de ces informations, il commence à collecter les fonctionnalités du fichier JAR. S'il est signé, l'analyse est abandonnée. S'il n'importe aucune fonction, l'analyse est abandonnée (je simplifie trop ici). Utilise-t-il une fonctionnalité délicate? alors plus de fonctionnalités devraient être extraites. Utilise-t-il des fonctions vulnérables connues? Ensuite, il doit être soigneusement vérifié pour les signatures d'exploitation connues de Java.

L'analyse à l'accès a le même principe, mais elle fonctionne également comme un contrôleur d'accès. Ainsi, chaque action (généralement un appel API) prise par un processus est vérifiée et autorisée ou refusée. De même, chaque action suspecte déclenche plus de filtres et plus de contrôles. Pendant les vérifications, le processus ou le thread attend la fin de l'opération, mais parfois l'ensemble du processus est activement suspendu. Cela peut sembler une surcharge importante, mais une fois qu'une action spécifique est vérifiée, elle est mise en cache plus tard et exécutée très rapidement ou pas du tout. Le résultat est une dégradation des performances similaire à celle d'une machine plus lente de quelques points de pourcentage. Vérifiez les scores PCMark pour 20 produits AV ici .

L'optimisation de la vitesse provient donc de très peu de travail effectué sur des fichiers d'apparence propre qui constituent la grande majorité des fichiers numérisés. Le gros du travail n'est effectué que sur des fichiers suspects de logiciels malveillants pour lesquels AV peut même prendre quelques secondes pour émuler le processus ou même l'envoyer au cloud pour analyse.

La magie est dans la classification progressive.

47
Cristian Dobre

Les signatures de logiciels malveillants sont des valeurs uniques qui indiquent la présence de code malveillant. En termes simples, lorsqu'un programme antivirus analyse votre ordinateur, il calcule la signature d'un fichier (disons comme un hachage), puis compare cette signature/hachage à une liste de mauvaises signatures connues.

Calculer un hachage unique d'un fichier, puis le comparer à une liste de millions de hachages est beaucoup plus facile que de rechercher chaque signature de logiciel malveillant dans un fichier donné.

La signature pourrait représenter une série d'octets dans le fichier. Il peut également s'agir d'un hachage cryptographique du fichier ou de ses sections. Chaque fournisseur AV le fait un peu différemment.

Il existe généralement des paramètres pour les performances par rapport à la profondeur des analyses de logiciels antivirus. Ces analyses examinent essentiellement la quantité de code qu'elles traiteront avant de conclure qu'un fichier est sûr ou non.

Il convient de noter que les techniques antivirus se sont améliorées et que les technologies plus récentes ne sont pas uniquement basées sur les signatures. La combinaison de ces techniques ainsi que des optimisations pour réduire l'impact sur les performances sont ce qui rend les AV considérablement plus rapides que ce qu'ils étaient.

Garanti, si vous exécutez votre AV sur son inspection la plus détaillée par rapport à votre lecteur de système d'exploitation principal, vous remarquerez une baisse des performances lors du traitement des fichiers. Ce n'est généralement pas une perte de performances du processeur mais plutôt une perte de performances du lecteur de disque (les SSD ont évidemment un avantage ici).

Quelques techniques de gain de temps utilisées par les AV

  • Ignorer les fichiers non exécutables
  • Ignorer les fichiers volumineux (c.-à-d.> 500 Mo)
  • Ignorer les fichiers dont la somme de contrôle correspond à un fichier "légitime" connu
  • Lire certaines parties des fichiers et ignorer le reste
  • Concéder gracieusement l'utilisation des ressources lorsqu'il détecte un utilisateur présent sur l'ordinateur
  • Recherche d'appels système spécifiques représentant un comportement à risque
  • Génération d'une ligne de base dans un premier temps, puis analyse uniquement les fichiers nouveaux/modifiés
  • etc..

De plus, d'autres techniques utilisées pour la détection statique par des solutions AV courantes:

  • Méthode d'analyse des chaînes: recherche une séquence d'octets (chaînes) qui sont typiques d'un virus spécifique mais qui ne sont probablement pas présentes dans d'autres programmes.
  • Méthode des caractères génériques: permet de sauter des octets ou des plages d'octets. Par exemple "?" sont ignorés et le caractère générique% signifie que le scanner essaiera de faire correspondre l'octet suivant.
  • Méthode de non-concordance: permet à un nombre donné d'octets dans une chaîne d'avoir une valeur arbitraire, quelle que soit leur position.
  • Méthode de détection générique: cette technique utilise une chaîne commune pour détecter plusieurs ou toutes les variantes connues d'une famille de virus.
  • Méthode des signets: calcule la distance entre le début du corps du virus et la chaîne de détection.
  • Analyse intelligente: l'analyse intelligente peut ignorer les instructions indésirables, telles que les NOP, dans le fichier hôte et ne les stocke pas non plus dans la signature du virus. Pour augmenter la probabilité de détecter des variantes apparentées de virus, une zone du corps du virus a été sélectionnée sans référence aux données ou autres sous-programmes.
  • Détection de squelette: le scanner analyse les instructions du virus ligne par ligne et supprime toutes les instructions non essentielles. Ce qui reste est le squelette du corps qui n'a que le macro code essentiel commun au macro virus.
  • Analyse heuristique: l'analyse heuristique est une analyse basée sur l'expert qui détermine la sensibilité d'un système à une menace/un risque particulier en utilisant diverses règles de décision ou méthodes de pesée. L'analyse multicritères (MCA) est l'un des moyens de pesée.
  • Détection spécifique à un virus: dans certains cas, l'algorithme standard de l'antivirus ne peut pas traiter un virus. Dans de tels cas, un nouveau code de détection doit être introduit pour implémenter un algorithme de détection spécifique au virus. Cette méthode comprend le filtrage, la détection du décrypteur et le balayage aux rayons X. Source: Stratégies de virus informatiques et méthodes de détection

J'espère que cela pourra aider!

Lectures complémentaires: Wikipedia

18
NULLZ