web-dev-qa-db-fra.com

Comment les antivirus sont-ils si rapides?

L'antivirus commun (à ma connaissance) utilise une sorte de méthode de type force brute où ils obtiennent le hachage du fichier et le comparent à des milliers de hachage de virus connus. Est-ce juste qu'ils ont des serveurs avec un SSD super rapide et qu'ils téléchargent les hachages et recherchent très rapidement ou ai-je complètement tort de comprendre comment ils fonctionnent?

102
Harry

Divulgation: je travaille pour un fournisseur d'antivirus.

Parce que la plupart des moteurs antivirus sont nés comme des points de terminaison protecteurs, et même maintenant pour beaucoup d'entre eux, la protection des points finaux est une partie importante de l'entreprise, les moteurs antivirus modernes sont optimisés pour l'analyse des points de terminaison. Cette optimisation comprend de nombreux éléments, tels que:

  • Ne pas analyser les fichiers qui ne pouvaient pas contenir d'infections pouvant infecter votre ordinateur;

  • Se souvenir des fichiers qui ont été analysés et ne pas les analyser à nouveau, sauf si les fichiers ont été modifiés;

  • Optimisation des analyses pour les types de fichiers lorsque cela est possible - par exemple lors de l'analyse des exécutables, seules certaines parties de celui-ci doivent être analysées. Cela minimise les lectures de disque et améliore les performances.

Une idée fausse commune est que les moteurs AV utilisent des hachages. Ils ne le font généralement pas, pour trois raisons:

  1. Premièrement, il est très facile de contourner la détection de hachage et ne nécessite aucune modification du code malveillant réel;
  2. Deuxièmement, l'utilisation de hachages ne vous permet pas de mettre en œuvre un type de protection proactive - vous ne pourrez détecter que les logiciels malveillants que vous avez vus;
  3. Le calcul d'un hachage nécessite la lecture de tout le fichier, tandis que pour certains fichiers (tels que les exécutables), cela n'est pas nécessaire. Et la lecture de tout le fichier sur des disques durs non SSD est une opération coûteuse - la plupart des moteurs AV doivent analyser un gros fichier exécutable propre plus rapidement que de calculer le hachage dessus
236
George Y.

L'antivirus commun (à ma connaissance) utilise une méthode de type force brute où ils obtiennent le hachage du fichier et le comparent à des milliers de hachage de virus connus. Est-ce juste qu'ils ont des serveurs avec un SSD super rapide et qu'ils téléchargent les hachages et recherchent très rapidement ou ai-je complètement tort de comprendre comment ils fonctionnent.

Je pense que vous envisagez ces "antivirus" en ligne qui ne font que du hachage, et sont assez médiocres par rapport aux antivirus basés sur des règles (bien plus efficaces et avancés) que SmokeDispenser mentionnés.

Le hachage est un bon choix pour le cas d'utilisation unique où vous avez un fichier de virus envoyé identique à beaucoup de gens et le moteur AV que vous utilisez est mis à jour si souvent que le hachage sera reçu et stocké avant que vous ne rencontriez le virus. Dans ce cas, par exemple, vous pouvez immédiatement signaler une pièce jointe à un e-mail comme virus/phishing/ransomware/cheval de Troie, etc., et vous pouvez le faire avec des dépenses de calcul minimales. Si vous devez quand même lire le fichier entier et que vous avez une bonne connexion (les deux choses parce que par exemple vous êtes un serveur de messagerie), alors supplémentaire I/O les dépenses sont négligeables.

Comme il s'agit d'une minorité de tous les cas d'utilisation, les (bons) antivirus n'utilisent pas (simplement) des hachages.

Cependant, la recherche d'un hachage est vraiment très, très rapide. Vous n'avez pas du tout besoin de SSD ou de matériel sophistiqué.

Imaginez (même si cela ne fonctionne pas exactement de cette façon ) que vous disposez d'un hachage hexadécimal tel que 'baadc0debaadbaad' et que vous souhaitez vérifier s'il est présent ou pas dans une archive contenant cent milliards d'entre eux.

Lorsque vous avez créé l'archive, vous avez créé deux cent cinquante-six répertoires sur un disque dur et les avez nommés de '00' à 'ff' (0 à 255 en décimal). Dans chacun d'eux, vous avez à nouveau créé 256 répertoires avec des noms de '00' à 'ff'. Et dans chacun de ceux-ci vous mettez à nouveau 256 répertoires, et dans chaque répertoire de troisième niveau du formulaire AB/CD/EF vous avez placé tous les hachages commençant par 'abcdef', divisé en 256 fichiers de "00.txt" à "ff.txt".

Le hachage 'baadc0debaadbaad' se retrouve donc dans un fichier "C: /ba/ad/c0/de.txt" qui se lit comme suit:

...
baadc0de81f872ac Ebola virus
baadc0debaadbaad Dark Avenger virus
baadc0debf31fe11 known clean file
...

Combien de hachages se trouvent dans ce fichier? Si les hachages sont répartis uniformément, divisez simplement cent milliards par le nombre de fichiers. Il y a 256 dossiers avec 256 sous-dossiers avec 256 sous-dossiers avec 256 fichiers, donc le nombre de fichiers est 256 * 256 * 256 * 256 = 4294967296.

Cent milliards divisés par ce nombre, c'est environ vingt-quatre. C'est le nombre de hachages (en moyenne) prévu dans ce fichier.

Donc, si on vous a donné un hachage et qu'on vous a demandé de le trouver à la main entre ces cent milliards de hachages , il vous suffirait de cliquer sur le premier- dossier de niveau, cliquez sur le deuxième, cliquez sur le troisième, ouvrez le fichier approprié et lisez vingt-quatre hachages. Vous auriez fini probablement en moins de trente secondes, après avoir "apparemment" examiné trois milliards de hachages par seconde. Par la main. Par toi-même. Cela semble impossible, c'est juste une bonne organisation des données.

Un ordinateur peut faire la même chose encore plus efficacement.

Analyse basée sur des règles

Un cas plus compliqué est de savoir comment rechercher un virus connu et analysé dans un fichier dont vous ne savez (initialement) rien.

Dans ce cas, ce qui vient en aide est le fait que le système d'exploitation doit exécuter le virus, donc le virus ne peut pas être juste n'importe où - il doit être où le système opératif le recherchera activement. En règle générale, un virus infectera un fichier exécutable en se cachant quelque part (par exemple dans une zone de données) et en remplaçant le début de sa zone exécutable par un appel à lui-même. Cela signifie que dans la plupart des cas vous n'avez besoin que d'analyser la zone exécutable et de vous assurer qu'elle est propre (bien sûr, les virus apparaissent tout le temps avec des moyens intelligents de se cacher dans des endroits improbables, donc la réalité est un peu plus compliquée que ce que je viens de dire).

L'antivirus regarde aux mêmes endroits et, dans ce cas, effectue une analyse basée sur des règles sur le fichier. Ceci est similaire à la recherche de hachage: vous vérifiez le premier octet que vous rencontrez dans la zone sensible, et en fonction de sa valeur, vous regardez un autre octet ailleurs. L'algorithme effectuant ce type d'opération est parfois appelé un automate. Par exemple, pour voir si une chaîne de texte est soit "Bonjour, monde!" ou "Attaque à l'aube", vous vérifieriez la première lettre; s'il s'agissait d'un H, vous ignoreriez toutes les vérifications pour "Attaque à l'aube".

Avec les programmes, cela est rendu beaucoup plus compliqué par le polymorphisme et l'auto-chiffrement - le fait que deux codes différents (disons, 2 + 2 et 2 * 2) peuvent donner le même résultat, donc vous avez besoin de plus de vérifications ("Si le premier mot est Hello, Howdy ou Good ... ") afin d'établir que vous avez trouvé une variante du virus de l'effroi Salutations, Cosmos !. Pour le code à chiffrement automatique, vous auriez probablement besoin de trouver un algorithme pour casser le code (si cela est possible en très peu de temps) ou de vous concentrer sur la reconnaissance de la routine d'auto-déchiffrement, sans laquelle le virus ne pourrait pas se rendre exécutable. par le système.

Cependant, avec une sélection minutieuse de l'arbre de choix, vous pourrez rapidement converger soit vers une seule possibilité (le nom du virus), soit vers la certitude qu'aucun n'est connu le virus est présent.

Heuristique

Il s'agit du type d'analyse le plus compliqué (et le plus lent), mais aussi le plus puissant car il permet de suspecter fortement la présence d'un virus jusque-là inconnu. Vous pouvez considérer l'heuristique comme beaucoup de petits reconnaisseurs basés sur des règles; être petit confère une amélioration de la vitesse qui compense leur être nombreux. Chaque identificateur identifiera un morceau de code effectuant une action, comme le décryptage de code, la tentative d'obtenir des privilèges sur le système, l'ouverture et l'écriture dans des fichiers, le raccordement d'appels système, la réécriture de code en mémoire, l'infiltration du système d'exploitation, etc. De nombreux programmes légitimes font une ou plusieurs de toutes ces choses, ou semblent le faire (par exemple décryptage et décompression se ressemblera beaucoup. De plus, certains programmes sont cryptés pour protéger la propriété intellectuelle, et non pour masquer un code malveillant). Pour chaque opération, vous établissez un "score" et le code exécutable au-dessus d'un certain seuil peut être considéré comme suspect.

Les détails exacts des moteurs heuristiques sont bien sûr beaucoup plus compliqués que cela; ils doivent équilibrer la vitesse, la fiabilité (quand ils disent que c'est suspect, ça doit être suspect) et la sensibilité (quand c'est suspect, ils doivent pouvoir dire que c'est suspect).

En fait, ils sont suffisamment compliqués pour être généralement les secrets bien gardés des sociétés d'antivirus, et souvent présentés comme "intelligents" jusqu'aux "intelligences artificielles".

La nécessité de mettre à jour en permanence les règles (cela n'a pas de sens de rechercher un virus éteint il y a dix ans) et, moins urgent mais non moins important, de régler l'heuristique, est la raison pour laquelle un paramètre essentiel à la qualité d'un antivirus est la fréquence de ses mises à jour (même si, jusqu'à un certain point, un moteur heuristique exceptionnel pourrait permettre des mises à jour moins fréquentes, et un moteur heuristique parfait impossible parfait n'en aurait pas besoin du tout).

Optimisations

Si vous êtes un antivirus et que vous pouvez charger dans le noyau du système d'exploitation au point d'intercepter toute opération d'écriture sur disque, et sachez qu'il n'y a aucun moyen de démarrer le système d'exploitation sans activer votre code (c'est-à-dire vous ne peut pas être blue-pilled ), alors il est vrai que aucun fichier sur le disque ne peut être modifié à votre insu . À ce stade, vous pouvez garder une trace des fichiers qui ont été analysés et trouvés propres, et uniquement analyser les fichiers qui ont été modifiés depuis la dernière analyse, ce qui est une très petite fraction du total (et vous peut-être même ignorer les écritures sur disque effectuées par des processus non infectés; aussi longtemps que vous permettez le fait qu'il existe des moyens par lesquels un virus écrit par ex. Javascript pourrait être en mesure de demander à un autre processus tel que WSCRIPT d'écrire sur le disque en son nom).

52
LSerni

Bien que le logiciel antivirus puisse télécharger des échantillons pour analyse (voir ci-dessous), ce n'est pas ainsi que fonctionne la détection.

De plus, les systèmes basés sur les signatures deviennent moins courants (car ils peuvent être facilement éludés). Ils ne fonctionnent pas non plus comme vous vous attendez à ce qu'ils fonctionnent.

Les signatures sont construites sur une région spécifique ou des parties d'un binaire. Si l'emplacement n'est pas connu, la fenêtre de signature est laissée "glisser" à travers le binaire. C'est donc plus complexe et génère bien plus d'échantillons que vous ne le pensez en tant que produit intermédiaire.

Néanmoins, la recherche de ces signatures n'est pas lente mais pas exactement rapide; il y a souvent un retard notable lorsque l'antivirus est utilisé.

Néanmoins, cela ne nécessite pas d'énormes quantités d'espace disque ou RAM (bien que certains) - il se passe beaucoup plus quand une vidéo 4K est décodée pour l'affichage.

Outre les signatures, des heuristiques et des analyses de comportement sont également en cours. Le binaire en question est donc mis en bac à sable et son comportement est analysé. Si les actions entreprises sont suspectes, ces fichiers binaires peuvent être bloqués - ce sont les moments où les échantillons peuvent être envoyés au fournisseur AV pour une analyse plus approfondie.

De conclure:

Ce n'est pas si rapide. Mais les opérations ne sont pas si compliquées qu’elles auraient besoin de serveurs et ne pourraient pas être effectuées par un poste de travail seul.

Une telle infrastructure de serveur devrait être énorme, soit dit en passant. Si le travail était trop difficile pour un poste de travail, cela signifierait qu'un serveur solide pourrait peut-être servir quelques clients, laissant à un fournisseur peut-être 300 millions d'exemplaires à payer et à exploiter plusieurs millions de serveurs.

12
Tobi Nary