Contourner la détection de l'antivirus
Par 4n9e le 25-09-2004
Différentes méthodes permettant a un attaquant de dissimuler un malware aux vues de l'antivirus de sa cible
SOMMAIRE :
I. TROYEN
I. 1. - Préparation
I. 2. - Ajout de bytes blancs
I. 3. - Compression UPX
I. 4. - Modification assembleur de la signature
II. METHODE DE DETECTION DE L ANTIVIRUS (AV)
II. 1. - Le principe de la modification
II. 2. - détermination des signatures utilisées par l'AV
II. 3. - détermination et localisation au sein du malware
II. 4. - Modifier la signature du malware
III. CONCLUSION
I. TROYEN
Cassons immediatement la jambe à un vieux mythe qui parcours les forums,
"je cherche un troyen non détécté par les
antivirus"
Chez les editeurs d'anti virus, il existe des bataillons d'ingenieurs commandos
surentrainés
qui sont payés des fortunes pour surveiller l'appariton de nouveaux troyens, et
en extraire une signature
puis la mettre en update chez l'utilisateur. Sans compter avec les sites
bénévoles mais quasi-professionnels
de sécurité informatique, bref tout ceci fait qu'il existe une veille telle qu'a
partir du release d'un nouveau
serveur, au bout d'une semaine environ toutes machine connectée digne de ce nom
pourra le détecter.
Alors, quelles solutions s'offrent a nous '
premierement, beaucoup répondent qu'il
suffit de programmer son propre troyen. C'est vrai, encore faut il savoir
sous quelle forme ceci est fait, et quelle est la véritable fonctionnalité du
produit en question. Or on voit
rarement ces memes personnes publier leur sources, ce qui permet difficilement
de se faire une opinion.
Deuxièmement, et c'est ce a quoi nous
nous attacherons ici, on fera confiance au programmeur d'un server
reconnu et éprouvé par tous, et nous allons nous permettre de le modifier afin
de changer sa signature.
En effet, c'est grace a cette empreinte que les antivirus comparent avec leur
base de donnée que la detection
se fait.
Donc, je vous propose de regrouper un peu tout ce qui a fait débat dans le forum
afin de reprendre ces approches
et faire le point.
Afin d'avoir une continuité dans les tutos, nous prendrons en exemple le troyen
SchoolBus.
je vous renvoie donc directement pour commencer au tuto de Zatham,
Description d'une attaque par troyen
Ce qui sera expliqué ici est un ensemble de techniques. Dans certains cas,
l'application d'une d'entre elle
seulement suffira, dans les autres il faudra toutes les appliquer, parfois
plusieurs fois.
Tous les servers sont différents, il vous faudra donc vous adapter a ce sur quoi
vous travaillez.
Comme dans la nature, ceux qui ne s'adapterons pas...mourrons.
Bien. A présent que vous avez relu Schoolbus, voici les outils qu'il va falloir
se procurer :
ScoolBus
Hex workshop éditeur hexadécimal
Windasm32 desassembleur win32dsm900
UPXshell compresseur/décompresseur
Tout ceci est comme d'habitude téléchargeable sur le site de téléchargement.
Vous y trouverez aussi
la version non détectée de schoolbus.
I. 1. PREPARATION
Comme on veut manipuler des fichiers contenant un code hostile, il va falloir
dire a son chien de
garde de se tenir tranquille.
Préparons donc notre environnement de travail :
avant le travail
1* désactivez l'autoprotect de votre antivirus
2* créez un dossier dans lequel on fera ces manipulations, disons
...\tests
3* dans votre antivirus, excluez ce dossier des scans. Ainsi vous pouvez laisser
votre travail tranquillement
pour y revenir par la suite.
pendant le travail
1* laisser l'autoprotect enlevé. Les tests successifs se feront a la main, en
demandant un scan de fichier
a l'antivirus.
2* préparez dans le dossier \tests une copie du serveur (on ne la modifiera pas,
elle sert de témoins),
puis une deuxième (celle ci servira a chaque étape, et sera testée)
3* si plusieurs manipulations sont necessaires, n'hesitez pas a renommer le
serveur de test de facon claire,
afin de pouvoir s'y retrouver dans les différentes étapes. Par exmple, dans le
repertoire test on pourra trouver :
copie du server
server 1000 bytes 00
server 1000 bytes 00 decompression 1
server 1000 bytes 00 decompression 1 compression 1
server 1000 bytes 00 decompression 1 compression 1 decompression 2
c'est un exemple. Il va falloir avoir une certaine organisation pour ce travail,
sinon on s'y perd.
I. 2. AJOUT DE BYTES BLANCS
le fait d'ajouter un certain nombre de 00 en fin de fichier augmente la taille
du serveur, mais a la compression
celle ci diminue énormement, sans pour autant modifier le comportement du
programme en lui même.
De plus, ceci modifie les checksums CRC et MD5, qui sont utilisés par de
nombreux serveurs de mails afin de
détecter les menaces.
Il ne s'agit pas de rajouter le plus grand nombre possible de bytes, cela n'a
aucun interet, mais de trouver
quel nombre est suffisant pour faire cette modification. Ne rajoutez donc pas
30Mo là ou 30 bytes suffisaient !
Pratique :
Dans l'éditeur hexadécimal, ouvrez la copie de travail :
voici une vue de la fin du fichier serveur de
schoolbus.
A ce stade, on peut rajouter les bytes blancs par ::edit::_____::insert::
Sauvegarder, et tester par un scan de votre antivirus préferé.
Dans le cas qui nous interresse, vous verrez que cela ne suffit pas a rendre
schoolbus indetectable.
Cependant ceci marche avec de nombreux serveurs, virii etc...
Ce qui m'amène a ma transition vers une autre méthode : la compression...
I. 3. COMPRESSION UPX
Si vous avez l'habitude de manipuler des serveurs, vous remarquerez qu'avec des
fonctions équivalentes, certains
pèsent entre une vingtaine et une cinquantaine de Ko, tandis que d'autres en
font quelques centaines.
Certains concepteurs de troyens vantent la petite taille de leur serveur, ce qui
permet de passer inapercu dans
le cas d'un bind avec un autre fichier etc...
Ceci est vrai, cependant une autre raison de cette petite taille se trouve
rarement expliquée :
Il est possible d'appliquer un type de compression de puissances différentes a
un executable, et de le rétrécir
considérablement tout en ayant comme résultat un nouvel executable, tout aussi
fonctionnel (contrairement au cas
des archives Zip, Rar, etc qui ne sont pas executables directement, et perdent
donc leur interet dans notre cas).
Ce type de compression, la compression UPX est une puissante alternative pour
leurer les antivirus.
Malheureusement, les concepteurs qui fournissent ces servers de quelques
dizaines de Ko les ont donc déja
compressés car il connaissent cette technique. Résultat : les éditeurs
d'antivirus ont relevé la signature
du serveur compressé, et comme ils ne sont pas idiots, celle du serveur
décompressé.
On est mal '
Pas du tout !
en effet, a la compression l'utilisateur choisit la force avec laquelle le
fichier sera compressé. En général, la
plus élevée (niveau 9, avec compression maxi). En revanche, lorsqu'on a un
fichier compressé, il est impossible
de savoir avec quel niveau il a été compressé en premier.
Conclusion : les antivirus connaissent la signature d'un fichier compressé
a une certaine taille, mais pas aux
autres niveaux disponibles.
Je résume, deux solutions :
1* fichier non compressé : compresser a differents niveaux, en commancant
du plus élevé, et essayer jusqu'a trouver le bon.
2* fichier compressé : décompresser avec UPX, puis recompresser a différents
niveaux. Au passage, envoyez quelques
bytes blancs, ce ne peut pas faire de mal...
Comme on a fait pas mal de manipulations jusqu'ici, je vous rappelle de bien
nommer intelligament vos
fichiers d'essai sinon vous allez etre perdu, appliquer des modifications a un
fichier déja modifier, voir
annuler les modifications effectuées... Ne venez pas pleurer apres car ce ne
marche pas !
Bref, on fait tout ceci. Dans notre cas, le serveur de schoolbus fait 320 Ko, ce
qui signifie
qu'il n'est pas compressé. On lui applique donc une compression de niveau 9, et
on obtient un fichier de 18Ko.
Testez-le avec cette méthode...!!!
SuRpRiSe !!!
Voici l'entete du serveur :
Comparez la avec celle du server undetect :
I. 4. MODIFICATION ASSEMBLEUR DE LA SIGNATURE
Foolfox ayant posté une explication claire a ce sujet, je la livre ici telle
quelle :
1.rechercher la signature correspondante a l'AV
(je vous rappelle que toutes ces definitions sont
sur votre HD)
2.localiser la sequence trouvee dans le soft.
3.modifier le programme au niveau asm pour modifier
la signature. Pas besoin d'etre une bete, il suffit de
modifier la sequence d'opcodes pour que l'AV ne
retrouve pas exactement la sequence qu'il cherche.
Il faut toutefois preserver la fonctionnalite.
exemple:
| Code original: | |
|
MOV EAX,0 |
| Nouveau Code: | |
|
XOR EAX,EAX |