Les types d'analyse qu'effectue un Antivirus
on peut définit 3 types d'analyse effectué par les
antivirus qui sont les suivant:
- l'analyse statique par signature
- l'analyse statique heuristiques
- l'analyse dynamique
L'analyse statique par signature
Cette analyse est basée sur une liste de séquence de byte
ou l'on considérer qu'elle représente un marqueur du malware.
Quand un nouveau malware est détecté une analyse est
effectué par des analystes de société d'antivirus. De là ils définissent une
signature du malware qui va être rajouter à la liste. Lors de l'upgrade de la
base donnée des signatures chaque antivirus va à ce moment là disposer de cette mise à jour. Cette signature peut
être basée sur un code particulier ou d'autre critère comme hash du binaire lui-même.
Un malware possède des éléments de code fixe qui ne mutent
pas, un peu comme les cellules souches d’une maladie. les analystes utilisent
ces éléments fixes pour créer une signature qu’on peut ensuite identifier, de
la même manière que l’on détermine un virus en fonction de son ARN/ADN.
Souvent la signature sur une suite d'octets d'un malware.
Les antivirus ont une base de données contenant des millions de signatures et
comparent le code du binaire scanné avec la base de données des signature.
Le gros problème de cette méthode d’analyse basée sur les
signatures, c’est qu’elle ne peut pas être utilisée pour détecter un nouveau
logiciel Malware sauf si celui-ci utilise une souche d'un code déjà référencé.
Donc pour contourner cette analyse, il suffit à développeur de malware de faire une modification mineure
du code pour fausser la signature de l'antivirus.
De plus les malwares polymorphes ont la capacité de modifier
automatiquement leur code, ce qui ne permet pas de générer du hachage binaire
unique identifiant celui-ci ou une signature spécifique sur une suite d'octet.
Démonstration sur l'analyse d'une signature spécifique
Nous allons prendre une signature dans notre exemple qui aujourd'hui n'est
plus significative qui est connu.
Nous avons nommé GetAddressOfFnGetProcAddressInKernel32dll qui est présent dans plusieurs shellcode du net.
Son prototype est le suivant :
DWORD GetAddressOfFnGetProcAddressInKernel32dll(
VOID )
|
L'un des shellcodes de cette fonction est le suivant:
unsigned char szShellCode_Fn_GetAddressOfFnGetProcAddressInKernel32dllV1[]
=
"\x60\x33\xC9\x64\x8B\x41\x30\x8B\x40\x0C\x8B"
"\x70\x14\xAD\x96\xAD\x8B\x58\x10\x8B\x53"
"\x3C\x03\xD3\x8B\x52\x78\x03\xD3\x8B\x72"
"\x20\x03\xF3\x33\xC9\x41\xAD\x03\xC3\x81"
"\x38\x47\x65\x74\x50\x75\xF4\x81\x78\x04"
"\x72\x6F\x63\x41\x75\xEB\x81\x78\x08\x64"
"\x64\x72\x65\x75\xE2\x8B\x72\x24\x03\xF3"
"\x66\x8B\x0C\x4E\x49\x8B\x72\x1C\x03\xF3"
"\x8B\x14\x8E\x03\xD3\x8B\xC2\x89\x44\x24\x1C\x61\xC3";
|
Vous pouvez tester vous même via le code similaire suivant :
void
DlgShellCodeFnGetAddressOfFnGetProcAddress::OnBnClickedBtGetAddrfnGetprocaddress()
{
unsigned char
szShellCode_Fn_GetAddressOfFnGetProcAddressInKernel32dllV1[] =
"\x60\x33\xC9\x64\x8B\x41\x30\x8B\x40\x0C\x8B"
"\x70\x14\xAD\x96\xAD\x8B\x58\x10\x8B\x53"
"\x3C\x03\xD3\x8B\x52\x78\x03\xD3\x8B\x72"
"\x20\x03\xF3\x33\xC9\x41\xAD\x03\xC3\x81"
"\x38\x47\x65\x74\x50\x75\xF4\x81\x78\x04"
"\x72\x6F\x63\x41\x75\xEB\x81\x78\x08\x64"
"\x64\x72\x65\x75\xE2\x8B\x72\x24\x03\xF3"
"\x66\x8B\x0C\x4E\x49\x8B\x72\x1C\x03\xF3"
"\x8B\x14\x8E\x03\xD3\x8B\xC2\x89\x44\x24\x1C\x61\xC3";
int (*FnShellcode)() = (int(*)())(&szShellCode_Fn_GetAddressOfFnGetProcAddressInKernel32dllV1[0]);
DWORD
dwAddressOfFnGetProcAddressInKernel32Dll= FnShellcode();
char szAddrFnGetProcAddress[255];
sprintf(szAddrFnGetProcAddress,"%08X",dwAddressOfFnGetProcAddressInKernel32Dll);
SetDlgItemText(IDC_ED_GETPROCADDRESS_RESU,szAddrFnGetProcAddress);
}
|
Nous lançons la compilation sur le poste et là l'anti-virus Avast détecte notre simple programme comme dangeureux avec comme signature "Win32:ShellCode-AK[Expl]"
Il nous reste plus qu'a chercher la séquence ou la suite d'octet que l'antivirus est pour lui le déclancheur de l'alerte et de l'action de suppression du binaire.
En fait c'est assez simple, il suffit d'enlever des octets et relancer la compilation jusqu'a avoir le plus petit suite d'octet de inclus dans notre shellcode et la suppression de l'un de plus n'engendre plus l'alerte
Nous vous donnons le resultat obtenu, si on enleve encore un octet au shellcode en dessous, il y aura plus alerte
En conclusion la signature de l'infection Win32:ShellCode-AK[Expl] correspond à la séquence ou suite d' octet suivant:
"\x33\xC9\x64\x8B\x41\x30\x8B\x40\x0C\x8B\x70\x14\xAD\x96\xAD\x8B\x58\x10\x8B\x53
\x3C\x03\xD3\x8B\x52"
Nous gardons à l'exprit pour la suite que l'octet qui suit le dernier octet de la signature est "\x78".
Nous expliquerons pourquoi nous devons pas oublier ce point. même si pour la signature cela n'a aucune importante l'octet qui suite
Si nous passons notre binaire "sampleSignatureVirtal.exe" au scanne de VirusTotal qui est un site web permettant l'analyse de fichier suspects et facilite la détection rapide des virus, vers, chevaux de Troie et toutes sortes de malwares détectés par les moteurs antivirus.l'url du site est : https://www.virustotal.com/
Nous obtenons le même résultat pour notre binaire
Aucun commentaire:
Enregistrer un commentaire