vendredi 24 juillet 2009

L'entropie statistique au service de la détection Antivirale

Bien, j'ai évolué dans mon projet d'antivirus depuis 2007, je suis sur le plan de créer ma propre boîte Antivirus en collaboration avec un ami français de longue date ( Bruno Bouvet ); j'ai donc donné des nouvelles avant que la question ne se pose par elle même hehe...

L'entropie c'est quoi au juste ? je vais utiliser une définition Thermodynamique que j'ai trouvé sur wikipédia puisqu'elle me parait plus descriptive dans mon esprit littéraire que la définition Informatique de l'entropie de Shanon. La définition Thermodynamique de l'entropie est donc : "...elle mesure le degré de désordre d'un système au niveau microscopique
. Plus l'entropie du système est élevée, moins ses éléments sont ordonnés, liés entre eux..."

L'analyse entropique est un outil incontournable dans les domaines de cryptoanalyses ( ciphers outputs & RNG etc...), compressions des données.. Veuillez excusez mes lacunes mathématiques, mais pratiquement parleant : on remarque une relation concrètement directe entre la distribution aléatoire et le taux entropique d'un flux de données, de façon à ce que : plus le flux de données est aléatoire et plus importante est sa moyenne entropique.

Maintenant en parleant de virus et d'antivirus, si vous examinez un peu la page des résultats du scanner en ligne virustotal par exemple, vous allez sans doute rencontrer ce genre de données :

name | viradd | virsiz | rawdsiz | ntrpy | md5

CODE
0x1000 0x13D000 0x6C000 8.00 29cdbb6c32b3eea627f34f62e03feb9e
DATA 0x13E000 0x5000 0x1A00 7.83 89053885934bd7d4262305a02a5afb50
BSS 0x143000 0x3000 0x0 0.00 d41d8cd98f00b204e9800998ecf8427e
.idata 0x146000 0x4000 0x1200 7.77 881c791e3a9e4016a13440626cec1a42
.tls 0x14A000 0x1000 0x0 0.00 d41d8cd98f00b204e9800998ecf8427e
.rdata 0x14B000 0x1000 0x200 0.21 0d91c61ea7a575278f4be61b95f7857d
.reloc 0x14C000 0x16000 0x0 0.00 d41d8cd98f00b204e9800998ecf8427e
.rsrc 0x162000 0xC2000 0x48800 7.97 8b2a2a582af95161ce28806715f43df7
.aspack 0x224000 0x3000 0x2400 5.34 f7f2539e9fa1b75f0b5c9a0ff4937866
.adata 0x227000 0x1000 0x0 0.00 d41d8cd98f00b204e9800998ecf8427e


A travers ce petit dump d'un fichier compressé et crypté par Aspack, la remarque est que la compression introduite par Aspack sur les sections PE de cet exécutable : augmente catégoriquement la moyenne Entropique de ces sections; l'entropie peut donc être une preuve tangible de compression / cryptage.

La moyenne Entropique est donc devenu depuis un certain moment un de facto heuristique dans la détection des virus que ce soit au niveau des heuristiques statiques; exemple : la moyenne entropique de la section exécutable PE; ou au niveau des heuristiques dynamiques; exemple : détéction du point d'arrêt d'émulation...

J'ai rien à dire quand à l'utilité heuristique de l'entropie en général comme étant un outil de plus à ajouter au méthodes déjà existantes de détections, et qui peut nous aider à détecter plus de virus génériquement. Mais pendant le développement des engins statiques du FSB Antivirus j'ai pu tirer plusieures conclusions de taille quand au usage abusif et non intelligent de cette méthode. Comment ça ?

  • Les procédures de calcul de la moyenne entropique peuvent s'avèrer beaucoup trop couteuses en terme de charge processeur et par conséquent donc temp et ressources de calcul.
  • Je pense que certains ingenieurs, pour ne pas dire beaucoup, confondent encore entre données compressé et données cryptées. Un mixage entre Data et Code dans une section PE peut influer considérablement sur la moyenne entropique de cette dernière.
Je n'ai cité que 2 exemples concrets et c'est intentionnel.

Le calcul Pragmatique de la moyenne entropique :

Comme j'ai cité plus haut, les procédures de calcul de la moyenne entropique peuvent s'avèrer trop couteuses en terme de rapidité d'analyse, biensur à partir d'un point de vue Antiviral. Il serait préfèrable donc que l'élement entropique ne ralentisse en aucun cas les procédures globales de l'analyse antivirale, ou que le ralentissement soit très minime et imperceptible, d'où l'usage du mot pragmatique que j'ai introduit dans le titre. Je veux dire par calcul pragmatique, une méthode de calcul entropique optimale et très optimisée. Pendant mes recherches, j'ai observé plusieures méthodes d'optimisation algorithmique du calcul entropique et ceci à travers ce qu'on appelle techniquement parlant "les filtres".

Je veux dire par "Les filtres", un ensemble de conditions booléennes logiques qui contrôlent l'enclenchement des calculs entropiques, je cite à titre d'exemples :

  • Bounds check - contrôle de l'espace d'alignement des sections DATA.
  • Décompilation linéaire des premières instructions exécutables de la section CODE à l'affût des instructions invalides, mal formées, illicites ou des bouclent décryptives.
Pour vous expliquer l'avantage de la décompilation partielle comme filtre de condition d'analyse entropique, il faut savoir que le cryptage et surtout la compression introduisent ce qu'on appelle des noises visibles au tout début et tout au long de la section compressé ou crypté. Par exemple la décompilation des 64 premières instructions d'une section CODE compressée ou cryptée peut révéler un nombre important d'instructions CPU invalides, mal formées ou privilégiées et non exécutable en USER MODE ! Dans la majorité des cas, la détections de ces altérations à travers la décompilation partielle peut suffire à prouver la compression ou le cryptage d'une section PE, sans avoir à lancer les procédures de calculs de la moyenne entropique sur la totalité de cette section !

Le concept de filtrage en général, est vraiment très puissant puisqu'il permet d'implémenter une entropie pragmatique : calculer au bon moment, au bon endroit et utiliser juste une taille buffer optimale !


mercredi 22 juillet 2009

Le contraste des couleurs

Imaginez si le monde était unicolore ? Imaginez une nature avec un paysage ne comprenant qu'une seule couleur à la fois : noir ou blanc. Et rien que ça. Comment serait alors ce monde par rapport au notre ?

Un monde tout noir ou tout blanc est avant tout : un monde invisible, imprescriptible, mort et inexistant. La couleur blanche ne peut exister sans le contraste du noir pour mettre en valeur la clarté du blanc. Et, c'est aussi réciproque pour la couleur noire.

Alors, qu'est ce qui fait les couleurs ? qu'est ce qui fait l'ombre et la lumière ? n'est ce pas donc, le contraste qui garanti la visibilité et l'existence même des couleurs ? je ne vous apprend rien de toute façon sur ce coup n'est ce pas ?!

Si vous projetiez ce petit principe de contraste dans notre vie humaine, aussi complexe soit elle, je pense que vous serez aptes à la vivre intensément quoi qu'il arrive.

Profitons donc de tous ces imbéciles qui nous entourent dans notre vie. Nous avons bel et bien besoin de leur contraste pour mettre en valeur ce que nous sommes vraiment...