samedi 16 février 2008

3v1l 0r n0t ? - Part II.

Bonjour à tous,

je release aujourd'hui la seconde et dernière partie de mon analyse.

Souvenez vous que lors du précédent article, nous nous étions arrêté à la connection sur un serveur irc.

Au cours de cet article je vais vous présenter rapidement les fonctions que le codeur a intégré au seins de son malware.


Conseils préliminaires :


-Cette fois-ci, l'accès au net est bien entendu nécessaire, des outils comme Wireshark ainsi que ProcessExplorer peuvent être utiles, histoire de surveiller les threads de notre processus, et de vérifier les accès au réseau de notre programme.

-Dans cette partie, je vous conseil de vous débrouiller afin que le malware ne se connecte pas sur le serveur « normal ». Redirigez le vers un serveur où vous le rejoindrez pour mener vos tests.

On modifie alors les variables nécessaires, on utilise le clic droit->Follow In Dump sous OllyDbg.

Je pense avoir à peu près tout dis.

Place à l'analyse à présent.


Pourquoi l'irc?


Cela est peut être une question que vous vous posez.

La connection de la victime sur un serveur irc présente en fait plusieurs avantages.

Tout d'abord, l'attaquant n'a alors aucune connection directe avec sa ou ses victimes, les serveurs où les logs sont inexistants sont donc très intéressants.

De plus, le faite de ce connecté à un serveur irc, permet de passer outre le problème des routeurs, avec le forwarding de port.

Enfin, dans ce genre de cas, je pense que si l'attaquant utilise l'irc c'est évidemment pour commander toutes ses victimes avec aisance.

Dans ce cas précis, le « gérant » du serveur, utilisait un script permettant de contrôler le reseau de zombie, en envoyant à intervalle de temps régulier des commandes.

Une commande est alors exécutée par toutes les victimes présentes sur le channel.

Cette « technique » est souvent utilisée pour commander des attaques de type « Distributed Denial of Service » par exemple.


Tr4c3 m3.


Nous voilà repartis dans les profondeurs de notre exécutable.

En plus de la connection à un serveur irc, on observe bien sûr plusieurs modules, comme un module de réponse au PING ( voir rfc irc ), un module permettant de rejoindre le channel si l'on été kicker etc.

Cependant, une chose nous attire l'oeil, après avoir traité les cas précédents, on call une fonction.

Le mystère est alors entier.

On trace, on trace, c'est alors que nous remarquons deux choses intéréssantes.

On va pusher une chaîne de caractères, notre buffer ( découpé par une routine bien evidémment ) et bien sûr un call à la fonction strstr() disponible dans la librairie string.h.


Mais que cherche t-il a faire?


C'est pourtant très simple, ceci est une façon de commander la victime présente sur le channel.

En effet dans le premier cas, on « déclenche » une fonction si l'on trouve la chaine « òÿööõ ».


Chaine1 :

db 0F2h

db 0FFh

db 0F6h

db 0F6h

db 0F5h

db 0


Intéressons nous à cette routine.


A fucking Thread


Comme toujours nous traçons, nous traçons.

Cette routine est plutôt longue et assez complète c'est pour cela que j'en parlerai brièvement.


On va donc au début de cette routine effectuer un test, en ce qui concerne la langue utilisée sur le système corrompu, afin de pouvoir sélectionner un message qui sera en accord avec la langue.

On commence déjà, a sentir ce qui nous attend.

Plus bas,nous arrivons sur la routine qui va se charger de « manipuler » msn, afin de se propager en envoyant un message contenant un lien, aux adresses contenues sur le compte de la victime.


On aperçoit ensuite un appel à CreateThread(), serait-ce le thread qui va se charger de manipuler msn?


On va bien sûr poser un breakpoint sur le début de la routine afin de pouvoir l'analyser.

En traçant, on observe des chaînes de caractères qui nous ne sont pas méconnues, comme : « C'est pas toi??!!! ».

On peut supposer que ces messages correspondent à ce qui sera envoyé aux contacts.

Bon, on comprend aussi que le malware va utiliser la COM library pour corrompre msn, les appels aux fonctions CoInitialize() et CoCreateInstance() nous confortent donc notre analyse.


Après de multiples actions, on va formater une chaîne de caractères composée du message dans la bonne langue, ainsi qu'un lien, afin de faire télécharger un exécutable à la victime.

On peut donc « personnaliser » ce lien, il suffit d'appeler la fonction avec la chaine de caractères : « òÿööõ » suivit d'une url xorée avec la clé 196.


Exemple :

Les messages que nous recevons sont du type :

« C'est pas toi?!!!!http://membres.lycos.fr/photoos2008/?=votreadressemsn »

La commande envoyée par l'attaquant est donc :

« òÿööõ ¬°°´þëë©¡©¦¶¡·ê¨½§«·ê¢¶ë´¬«°««·öôôüëûù »


Une fois la chaîne formatée, concaténée avec votre adresse, le malware va utiliser une technique plutôt « maison » si je peux dire.

En effet, il va se servir du clipboard.

Il va tout simplement copier la chaîne de caractères dans le clipboard.


Hum, a quoi cela sert-il?


Le malware, va alors se débrouiller pour cacher la fenêtre du contact de la victime et lui donner le focus.

Patience, juste en dessous, on aperçoit des appels à une fonction : keybd_event().

On regarde les arguments qui lui sont passés. La première fonction va simuler l'appuis sur la touche « CTRL », la seconde sur la touche « V » et la dernière sur la touche « ENTER ».

Une petite astuce qui peut être retenue !

Utiliser le clipboard pour stocker une information et utiliser le raccourcis clavier, simulés par keybd_event(), pour coller l'information.


Voilà en ce qui concerne la première commande.


Finalement il nous reste à en savoir plus sur la seconde commande.

Celle-ci est déclenchée par la chaîne de caractères : « ôóýýûòó ».


Chaine2 :

db 0F4h

db 0F3h

db 0FDh

db 0FDh

db 0FBh

db 0F2h

db 0F3h

db 0


Bon après avoir tracer cette routine, elle reste très similaire à la première.

Tous d'abord cette fonction à été créée je pense, afin de pouvoir personnaliser les messages envoyés, aux victimes.

Afin d'éviter de toujours utiliser les chaînes de caractères hardcodées.

On peut donc appeler la fonction de la façon suivante :


Exemple :

« ôóýýûòó 0vercl0k.blogspot.com/?= plz look» cette commande ira envoyer le message : « plz look 0vercl0k.blogspot.com/?=votreadressemsn ».


Bien sûr, les chaînes de caractères doivent être xorée avec la clé 196 avant d'être passée en argument, je ne l'ai pas « encodée » pour faciliter la compréhension.


Donc le thread lancé par la commande est le même.

Les deux fonctions sont quasiment identiques, seulement dans la seconde fonction on constate la présence d'une routine se chargeant de « découper » le buffer en argument, pour ensuite les passés à la commande.


Conclusion


L' analyse de ce malware est alors terminé en ce qui me concerne.

Je n'analyserais pas les binaires qui ont été télécharger par le programme au fur et a mesure de l'exécution du malware, tout simplement car cela me prend énormément de temps.

Tous ce que je sais, c'est que les exécutables vont entre autre en télécharger d'autre binaire, certains sont contenus dans des pages phps, on pourrait même croire à une sorte de serveur qui stock des améliorations ou autres, un serveur d'update.

Bon après cette partie, je vous propose une petite excursion.


Sh3rl0ck h0lm3s


Une fois que j'étais au courant de ce que pouvais faire le malware, la curiosité m'a poussé à aller sur le serveur où le malware est censé se connecter.

La connection s'effectue..

Je décide alors de me faire passer pour une victime, je prend un nick formaté comme celui d'une victime.

Petit temps de repérage, le serveur est loin d'être bavard, presque toutes les commandes sont désactivés, les whois sont interdits, aucun voicé, le channel est modéré.

Le channel est en apparence vide, les victimes sont surrements cachées, je vois seulement un opérateur.

Celui-ci balance sur le public une chaine du style :


òÿööõ ¬°°´þëë©¡©¦¶¡·ê¨½§«·ê¢¶ë´¬«°««·öôôüëûù


On reconnaît bien sure la première commande, si l'on décrypte la chaine on retrouve : « http://membres.lycos.fr/photoos2008/?= »


Enfin bref, cela m'intrigue, ce qui m'étonnerai serai que le serveur qui héberge le daemon irc, appartienne au codeur du malware.


Avec l'aide de sevieron, nous entamons une petite, analyse.

On commence notre analyse, par un whois sur le dns asl.aldanma.net.


[...]
Domain Name.......... aldanma.net
Creation Date........ 2005-07-26
Registration Date.... 2005-07-26
Expiry Date.......... 2010-07-26
Organisation Name.... Marsha Grizzell
Organisation Address. 220 montalvo dr
Organisation Address.
Organisation Address. bakersfield
Organisation Address. 93309
Organisation Address. CA
Organisation Address. UNITED STATES MINOR OUTLYING ISLANDS
[...]


On lance quelques recherches, afin de trouver quelques informations sur la soit disant propriétaire.

Google nous renvois des sites ayant un rapport avec des produits pour la perte de poids, par exemple healthweight.ne, assez étonnant qu'un daemon irc installé, dans le but de récupérer et commander les victimes, par une tel personne.
Nous continuons.
C'est à présent un scan, que nous lançons sur le serveur.

[...]
PORT STATE
80/tcp closed
83/tcp open
358/tcp open
3389/tcp open
8721/tcp open
[...]

Nous tentons une connection sur le port tcp 8721.



Nous tombons sur une petite surprise, on se retrouve sur un espèce de remote shell/ftp daemon.
L'identification se passe comme un daemon ftp apparemment.

USER anonymous
PASS lolilol@lolilol.com

Bon, fallait s'en douter, l'accès est (heureusement) refusé.
Le but de l'opération ne résidait de toutes façons pas en l'obtention d'un accès.
Nous avons cependant observer des phrases présentes dans la « présentation » à la connection.
D'après Google il s'agit d'un trojan qui permettrait d'upper des fichiers et j'en passe.
Ce qui confirmerais qu'il agit bien d'un serveur compromis.

PS : Un windows server 2003 tourne sur le 3389.
Tout cela, pour montrer que la prise d'information sur un serveur est d'après moi, essentiel pour la suite des opérations.

On peut donc aussi conclure que le serveur a surement été victime d'une attaque quelconque, menant à un remote access.


Voilà nous arrivons à la fin de ce petit article.
J'espère avoir intéressé quelques d'entres vous, je vous donne quelques liens :

Analyser un binaire rapidement et autre qu'en local -> http://analysis.seclab.tuwien.ac.at/index.php.
LE scanner -> http://nmap.org/.
L'archive mise à jour contenant les binaires, .idbs -> http://overclok.free.fr/Codes/AnalyseMalwareNaked/Analyse_Malware_Naked.rar

C'est finit, bonne journée à tous.
Remerciement, aux personnes qui me relisent, et qui me conseil, voilà tout est dit :).
Cya.

Aucun commentaire: