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.
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.
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 !