dimanche 27 septembre 2009

Trojan Indetect

Comment rendre un trojan indétectable

Il existe trois manières principales pour rendre un trojan indétectable par un antivirus, et cela en le modifiant légèrement. Nous baptiserons le trojan modifié "troyen masqué" ("masked trojan" en Anglais). Aucune des manières n’est efficace à 100% avec l’ensemble de antivirus et quelque soit la manière utilisée il va falloir mettre la main à la pâte et travailler un peu. Il faut aussi avoir en idée que les signatures des virus ne sont pas forcément les mêmes d’un antivirus à un autre. Ce qui veut dire qu’après avoir utilisé une des trois manières, il se peut que le trojan modifié ne soit plus détecté par un antivirus X mais encore détecté par un autre antivirus Y. Il vous faudra donc essayer le troyen masqué avec différents antivirus.


1. Modifier le code source (C/C++, VB, Java, Delphi) Avant de pouvoir modifier le code source, il faut pouvoir déjà le trouver. En effet les développeurs de trojans diffusent assez rarement le code source de leurs bébés. C’est aussi quelque part une sécurité afin que les débutants ne les utilisent pas n’importe comment et dans tous les sens. Parfois les sources sont disponibles en contactant directement son développeur par mail : voir la liste des sites officiels. Parfois ces sources sont payantes et certains hackers n’hésitent pas à faire payer cher des sources de code permettant d’obtenir des trojans uniquement indétectable par les antivirus. En supposant que vous disposez d’un code source (il y en a un en OPEN SOURCE sur le site de Osiris par exemple), il va falloir maintenant disposer des connaissances afin de pouvoir modifier le maximum de choses dans le source du serveur sans affecter le fonctionnement. Par exemple modifier les noms de toutes les variables, certaines structures dans les fonctions, certaines valeurs extrapolables, ajouter du code inutile pour modifier l’offset.....tout cela afin que la signature du trojan en soit modifiée, ce qui n’est pas totalement certain après avoir passé peut être plusieurs heures ou plusieurs jours de recherche intensive !


2. Appliquer un binder ou un packer Un binder (beast 2.06 en contient un) permet de rassembler au moins deux EXE (fichier exécutable) en un seul EXE. Cela a la faculté de parfois modifier les signatures. Un seul inconvénient : les binders sont eux mêmes détectés par les antivirus. En effet un binder ajoute du code entre les deux EXE afin que ceux ci soient lancés simultanément, et comporte également une signature. Même si un binder est inoffensif en soi, il sera donc détecté comme dangereux par les antivirus. L’idéal est de se confectionner (à partir de morceaux de sources trouvés sur Internet) son propre Binder, ce qui est tout de même plus rapide que chercher à modifier le code source du trojan. Il existe déjà plusieurs dizaines de Binders sur Internet... Donc pour utiliser en général un binder, il faut le rendre également indétectable, a voir la méthode du paragraphe suivant, et s’assurer également que les fichiers à l’intérieur du binder soient aussi indétectables. Cela donnera des résultats remarquables. Un packer permet de compresser un fichier non compressé (unpacked). Il en existe également plusieurs dizaines. L’avantage du packer est qu’il modifie très probablement la signature du trojan, mais ce n’est pas sûr à 100%. Cela vient du faite que certaines parties (comportant des overlays) ne peuvent pas être compressées. ET donc si la signature du trojan est située dans cet overlay....le packer ne modifiera pas la signature. Le principe général d’un packer est de rechercher les redondances (codes répétés plusieurs fois) de codes hexadécimaux dans le fichier à compresser. Par exemple, imaginons que le code hexadécimal "15D9C2" (6 caractères) apparaît 50 fois dans le fichier. Si le compresseur remplace ces 6 caractères par 4 caractères (par exemple "AAAA") cela fait un gain de place très important. En effet 50 x 6 = 300 caractères remplacés par 50 x 4 = 200 caractères correspondant à un taux de compression de 100 - 200 / 300 x 100 = 44.44%. Tout le code d’origine peut ainsi être remplacé par un code similaire plus court s’il y a redondances. Cela a pour effet de modifier énormément le contenu du fichier et donc la signature. Essayez par exemple sur le serveur Beast 2.06. Editez un serveur non compressé avec UPX (case UPX à décocher) et appliquez (en fenêtre DOS) la commande d :\CETEX server.exe s.exe CETEX est un packer à trouver dans la zone des téléchargements. Consultez également la documentation fournie avec chaque packer. Testez enfin votre antivirus sur le nouveau fichier créé "s.exe" et constatez l’efficacité des packers.


3. Modifier précisément la signature hexadécimale du trojan C’est sans doute la partie la plus intéressante et donnant une efficacité totale. A ce stade les antivirus ne servent plus à grand chose, seul un bon firewall peut encore être utile. C’est ici que vous comprendrez que les antivirus sont efficaces dans une mesure moindre. Ils sont indispensables mais peu utiles face à un hacker averti. Avant de jouer au hacker il faut parfois jouer au cracker. Voici la méthode de cette partie : situer la zone (3 ou 4 lignes maximum en général) où la signature hexadécimale du trojan se trouve, rechercher la signification ASCII ou ASM de ces lignes, modifier un ou des caractères à l’intérieur de ces lignes. On rappel que le code hexadecimal est fait des 16 caractères suivants : 0123456789ABCDE. Munissez vous des outils suivants : Windasm, Hexedit, et Norton Antivirus (vous pouvez en prendre un autre mais la signature risquerait de ne pas être la même pour l’exemple qui va suivre). Editez un serveur avec Beast 2.06, avec tous les paramètres mais SANS COMPRESSION UPX. Le fichier "server.exe" issu de Beast 2.06 nous servira pour toute la suite de la page.
- Situer la signature hexadécimale Tout d’abord ouvrez avec Windasm le fichier "server.exe" et situez en début de page la zone suivante :

Visualisez ensuite les premiers codes hexadécimaux situés juste en dessous :

Le code 04104000A... est donc le début du code hexadécimal que nous allons utiliser par la suite. Les codes "00401000", "00401002"... ne sont pas importants ici, il s’agit des offset : le numéro de ligne. Ouvrez maintenant "server.exe" avec Hexedit Workshop et recherchez avec la commande "find" ce code comme ci dessous :

Vous êtes ensuite envoyé sur la ligne contenant le code précédent comme par exemple ci dessous :

Il est possible que vous n’ayez pas exactement la même mise en page chez vous. A partir de là, toute les lignes au dessus de celle surlignée en jaune ne doivent pas être changées ! Ce sont certaines de celles (y compris celle surlignée en jaune) situées en dessous que nous allons modifier. Le code au dessus de la ligne jaune contient l’entête et les liens externes (dll....) A présent nous allons utiliser le principe de dichotomie en sachant que la signature (suite de caractères hexadécimaux) est cachée quelque part dans les lignes. La signature peut être en plusieurs morceaux, c’est à dire trouvés dans plusieurs zones (2 en général). Sélectionnez (avec la souris) environ la moitié des lignes (moitié entre ce début en jaune et la dernière ligne). Utilisez ensuite la commande "set ceiling operation" comme ci dessous pour remplacer tous les caractères selectionnés par la valeur zéro "00".

Enregistrez le nouveau fichier que vous appellerez "server1.exe". Donc normalement vous devez avoir presque toute la moitié des codes hexadécimaux à 00 : au dessus de la ligne jaune rien n’a changé et la moitié du reste est à 00. Bien. Maintenant testez votre antivirus sur le fichier "server1.exe". Et là 2 possibilités : 1) Si l’antivirus détecte un virus, cela signifie que la signature est située dans la moitié restante (là où il n’y a pas les zéros). Et que celle ci n’a donc pas été remplacée par des 00. 2) S’il ne détecte rien, cela signifie que la signature est située dans les caractères que vous venez de remplacer par des 00. Dans le cas 1) répétez la manipulation avec la moitié restante (en remplaçant par des 00 la moitié de la moitié restante) et nommez le nouveau fichier server2.exe. Re-testez avec l’antivirus le fichier server2.exe Dans le cas 2) revenez au fichier server.exe et ce coup ci remplacez par des 00 la partie que vous n’aviez pas remplacée par des 00 la première fois. Nommez à nouveau le fichier server2.exe. Normalement maintenant il n’y a pas d’autre possibilité que le server2.exe contienne la signature. Sinon nous sommes dans le cas où la signature est tronquée en deux parties : un morceau dans chacune des moitiés. Répéter l’opération pour isoler quelques lignes de code (tout sauf des 00). Bien entendu les lignes au dessus de la ligne jaune dont on avait parlé précédemment n’auront pas été changées. Le fichier final (détecté par l’antivirus) comprend donc que des zeros excepté en mince parti tout au début, et une zone que l’on appellera "signature approximative". Notez les caractères correspondants et si vous ne vous êtes pas trompé il doit vous rester que quelques lignes (2 à 10 lignes en fonction de l’antivirus et du trojan) :

Notez le numéro de ligne (offset) du début de la signature et lancez windasm. Ouvrez le fichier server.exe (original sans 00) avec windasm et placez-vous au numéro de ligne que vous avez noté précédemment. Ainsi vous allez pouvoir visualiser la signification en code ASM de la signature.
- Traduction de la signature La signature est la succession de la cinquantaine de caractères hexadécimaux trouvés précédents et exclusivement détectés par l’antivirus propriétaire de la signature. A présent deux solutions se présentent : si le code ASCII est suffisamment lisible (ce qui est le cas dans Beast) on peut essayer de modifier celui ci directement, sinon il faut essayer de modifier le code ASM. Pour information voici le code ASM (correspondant à la signature) que vous pouvez visualiser :

Les commandes "jnb" et "jns" sont des sauts conditionnels. Autrement dit, elle renvoie à d’autres lignes. Ill est donc difficile de modifier ces instructions sans devoir changer la logique du programme. Ce n’est pas un cas simple pour modifier du code ASM. D’autant plus que la succession des caractères de la signature (vue avec Hexedit) diffère de celle avec Windasm en raison de ces sauts.
- Visualisation du code ASCII et choix de modification du code Par chance la signature choisie par l’éditeur d’antivirus apparaît dans une zone ASCII lisible. Les termes apparents "\microsoft\com" suggère le registre Windows (visible avec regedit). Donc vraisemblablement il s’agit du code mettant Beast dans le registre Windows afin que le serveur démarre à chaque démarrage de Windows. Ce qui est notable puisque le choix des noms inscrits dans la base de registre n’entre pas le fonctionnement interne du programme. Il faut juste que l’ensemble des noms coïncident sur l’ensemble du programme. Nous décidons donc de modifier un mot ASCII par un autre. Notez qu’il y a obligatoirement le même nombre de caractère. Recherchons donc ce même mot (que l’on voit sur l’image précédente) dans Hexedit. 2 endroits sont trouvés. Modifier les 2 mots choisis ASCII dans tout le fichier par un mot différent comportant le même nombre de lettre. Sauvegardez le fichier. Tester avec l’antivirus. Celui ci ne détecte normalement plus rien. Pourtant nous n’avons fait que modifier quelques caractères ASCII dans tout le code, sans modifier le fonctionnement du programme. Une fois modifié et installé, n’utilisez surtout pas les fonctions update comme dans le client Beast sans quoi la signature modifiée reprendrait sa forme détectée.


4. Conclusion Maintenant il faut garder en tête que vous venez de cracker la signature (du serveur Beast 2.06) reconnue par Norton Antivirus. Après quelques tests avec d’autres antivirus vous remarquerez que le fichier n’est plus détecté par un ensemble d’antivirus (ayant choisis la même signature)...Cependant le travail n’est pas terminé car il faut encore vérifier la non détection et rendre le serveur indétecté pour tous les autres antivirus le détectant encore. Idem pour les antitrojans qui ont eux des signatures bien différentes des antivirus. Il est possible que sous plusieurs mois les développeurs d’antivirus modifient leurs signatures. Pour le serveur utilisé j’ai choisi de modifier les paramètres suivants (par rapport aux paramètres par défaut).
- Ajout d’un mot de passe
- Non compression UPX
- Notification ICQ
- les 3 kills AV-FW actifs En outre, cette méthode de modification de signature ne marche pas sur le serveur PRORAT. En effet, au moment de la connexion le client vérifie si le sevreur a été modifié ou pas. Il faut donc cracker aussi cette vérification. Outil : debugger. A suivre...

Source : http://membres.lycos.fr/klipsus/article.php?id_article=3

Aucun commentaire:

Enregistrer un commentaire