mercredi 20 janvier 2010

La détection algorithmique

La détection de certains virus très complexes, qu'ils soient Polymorphiques ou Métamorphiques, nécessite en effet, un développement de routines de détections dites spécifiques. La détection algorithmique est dans ce cas, une méthode de plus, dans l'arsenal antiviral, qui permet entre autre de couvrir ce genre de menaces illicites. En parlant de cette méthode, je vais citer sommairement quelques exemples, qui en quelques sortes, résument bien l'état actuel de la technologie antivirale.

La détection algorithmique comme méthode de détection antivirale, prouve en effet,toute son importance, spécifiquement contre les virus informatiques dits réplicatifs. Et en parlant de réplication virale, je cible certains PE32 Infectors, qui par leurs natures, sont très difficiles à couvrir que ce soit heuristiquement ou par signatures. D'ailleurs, à mon h
umble avis, j'estime que cette méthode de détection permet de construire un jugement fiable sur le professionnalisme antiviral de l'équipe de développement de telle ou telle boîte Antivirus; Pourquoi penser de la sorte ? Pour la simple raison, que les antivirus sont entrain de pousser partout dans le monde comme des champignons, et que la chasse aux signatures virales indépendamment des algorithmes de hachage, cache de plus en plus les incompétences humaines dans ce domaine critique. Justement il ya des virus spécifiques qui sont intraitables par les méthodes de détection par signatures. Qu'est ce qu'il reste alors ? Il faut que l'équipe d'analyse et de développement soit capable de déchiffrer tout le fonctionnement interne de la menace et plus encore : être vraiment capable de développer une méthode de détection très efficace et pouvant surtout couvrir toutes les générations infectieuses de cette même menace.

Maintenant, voyons sommairement quelques points de filtrage / d'enclenchement des procédures algorithmiques de détection contre certains virus spécifiques :


Remarque : les nominations des virus sont spécifiques aux FSB Antivirus.



Win9x-Virus/CIH :

  • Entry Point qui pointe vers l'epace PE Header : ( EntryPointOffset < IMAGE_SECTION_HEADER.PointerToRawData)

  • Code Execution Redirection / Saut d'exécution vers l'espace PE Header, qu'il soit direct à travers un CALL ou un JMP, voir même à travers d'un SEH. ( Scénario que j'ai pas vu à travers les échantillons que j'ai pu analyser, mais bon c'est une spéculation sur un possible scénario d'une possible modification ).

Win32-Virus/Virut :

  • La valeur du champ IMAGE_FILE_HEADER.Characteristics est différente de IMAGE_FILE_DLL.

  • La valeur du champ IMAGE_OPTIONAL_HEADER.Checksum est égale à zéro.


  • La valeur du champ IMAGE_DOS_HEADER.e_res[] contient des données / marqueurs.

  • Entry Point pointe vers la dernière section PE (ou / et) Entry Point intacte mais la dernière Section PE contient des overlays ( C'est différent des Extra données pouvant être introduis par les installateurs ou les archives SFX, mais plutôt des données résultant d'un élargissement de la taille de la section; exemple : Dernière section PE est une section ressources et que la taille de cette section est plus large que la (valeur d'alignement + Taille globale des ressources), ou que la dernière section PE est une section d'Imports et que la taille de cette section est plus large que la (valeur d'alignement + Taille globale des Imports) etc... ).

Win32-Virus/Leon :

  • Les Imports Data contiennent une entrée qui a été injecté ( PATCHED IAT )

  • Les Imports Data contiennent une entrée qui a pointe vers la bibliothèque Advapi32.dll et que celle-ci fait appel aux fonctions API Suivantes : CryptAcquireContextA , CryptCreateHash, CryptHashData, CryptDeriveKey, CryptDecrypt .


Win32-Worm/Polip :

  • La valeur du champ IMAGE_FILE_HEADER.Characteristics est différente de IMAGE_FILE_DLL.

  • La valeur du champ IMAGE_OPTIONAL_HEADER.NumberOfSections est strictement supérieure à 2 et strictement inferieure à 11.

  • La structure PE SECTIONS HEADER contient une section PE dont les attributs (IMAGE_SECTION_HEADER.Name[0] == NULL) et (IMAGE_SECTION_HEADER.PhysicalAddress <= IMAGE_SECTION_HEADER.SizeOfRawData) et (IMAGE_SECTION_HEADER.SizeOfRawData >= 0x9000) et (IMAGE_SECTION_HEADER.Characteristics == 0xE0000060).

  • Optionnellement si l'engin d'émulation le permet bien : Code Execution Redirection vers un espace d'alignement de la section PE en cours d'émulation.

Closing words :

C'était donc juste une petite projection très simplifiée sur l'état des lieux de ce qu'on peut appeler la détection algorithmique appliquée à quelques virus spécifiques. Kaspersky Labs comme boîte antivirus, est une très solide boîte je l'avoue bien, mais un simple coup d'œil sur leurs bases de données actuelles, me laisse par contre très perplexe quant au nombre gigantesque des signatures statiques de Win32-Virus/Virut, j'ai dénombré à peu près, plus de 1500 entrées de signatures rien qu'à lui tout seul !! on comprend bien donc, comment leurs bases puissent contenir plus de 3.400.000 signatures et par conséquent tout le gâchis de ressources mémoires et CPU des moteurs antiviraux de Kaspersky Antivirus :)

Bruno Bouvet, il te faudra surement un peu de temps avant que tu tombes un jour par hasard sur cette page de mon blog :) Mais en attendant que ce jour vienne, saches frère, que malgré les milliers de kilomètres qui nous séparent : tu as été le seul homme sur terre à être toujours présent pour moi sans conditions, alors que ceux qui ont été à quelques mètres près : ne m'ont même pas vu des yeux. Merci Bruno même si tu m'avais dit et sans cesse répété qu'il n'y a pas de Merci entre nous ;) FSB !!! FSB !!! FSB !!! FSB !!!


Aucun commentaire: