unix4fun

Aller au contenu | Aller au menu | Aller à la recherche

mercredi 9 juin 2010

Le crochetage SSL avec ton serpent

Pour un premier post, désolé, c'est sur du win32 :). Je lisais dernièrement "GrayHat Python" et je découvre Pydbg (un debugger écrit en python) que je ne connaissais pas (bon je ne connais pas grand chose non plus, du coup c'est plus facile d'être émerveillé) et dans le chapitre sur le hooking je tombe sur un exemple de "soft-hooking" (le hooking avec un breakpoint soft (INT3) sur la fonction qui t'intéresse) pour "sniffer" les connections SSL dans firefox (hook sur une fontion specifique de firefox).

Ca me rappelle des discussions avec eau qui avait déjà commence a bosser dessus, en voyant comment le truc est tout con ca m'a donne envie de voir si hooker les "CryptoAPI"s de MS que IE utilise est tout aussi simple.

Donc une fois recup Pydbg, un petit "import pydbg" et on peut instancier un object debugger mydbg=pybdg.pydbg().
Et voila! maintenant qu'on a notre debugger instancié, on peut s'attacher a des process, mettre des breakpoints, lire l'etats des registres etc.. Un peu comme scripter a l'interieur d'IDA ou ImmunityDebugger.

Du coup c'est vrai que le soft hooking comme ca c'est tout bidon. Un petit breakpoint dans la fonction qui nous intéresse, une callback fonction pour effectuer des opérations sur cette fonction et on release le breakpoint pour que le process continue normalement.

Bon, c'est pas efficace du tout côté perf, c'est clair...
Mais pour un ptit hooking rapido histoire de tester/fuzzer un truc ca peut etre sympa et utile.

Alors voila j'ai matte les CryptoAPI de MS et j'ai pense d'abord hooker "CryptEncrypt()" et "CryptDecrypt()" exportées par "Advapi32.dll".

Ok finalement en cherchant un peu, il y a eut pleins de présentations sur le hooking de ces 2 fonctions (par exemple celle-ci) et en effet c'est tout bon mais pour sniffer uniquement.

Si on veut modifier les requêtes envoyées par exemple, alors la on voit qu'on tombe sur un os, en tracant les appels un certain "CryptHashData()" est appelé avant "CryptEncrypt()" et donc dommage.. Difficile de modifier un truc hashe préalablement sans que ca se voit! Et la ce cher eau me dit qu'il avait regarde "EncryptMessage()" et "DecryptMessage()" et il avait raison le bougre!

En effet "EncryptMessage()" prend la requête, appele "CryptHashData()" puis "CryptEncrypt()" et balance tout ca hashé/chiffré ensuite au fonctions résal(réseaux). Du coup hooker "EncryptMessage()" est bien plus intéressant puisqu'avant le hash donc possible de modifier la requête.

Je n'ai pas encore réussi a faire tout ce que je voulais sur "EncryptMessage()", modifier la requête...ok, mais uniquement si sa nouvelle taille est <= a l'originale. Pour en générer une de taille > a la requête originale, je coince.

J'ai essaye de mettre a jour la taille a plusieurs endroits, re-ecrire la requête en allouant assez de place ailleurs et updater les pointeurs/références sur ma nouvelle requête mais niet... je dois merder, quelque chose m'échappe.

Voyant que des fonctions appelées avant "EncryptMessage()" manipulaient aussi la requête HTTP et utilisaient la taille pour différents trucs que je n'ai pas exploré je me suis résigné a hooker la dedans et c'est passé. Enfin, j'ai finalement hooke une fonction qui se trouve dans "Wininet.dll" mais elle semble tres specifique a IE donc pas super fonctionnel pour autre chose qu'IE... (i.e. Thick Client)...

Pour ceux que ca intéresse, voila un petit bout de code tout bidon (et pas beau je sais :)..) mais c'est juste pour tester et voir comment jouer avec pydbg et le soft-hooking:

hook_ssl_pydbg.py

J'ai teste ca sur XP SP2 en anglais avec IE7.

Un petit print screen aussi pour voir ce que ca donne:

hook_ssl_pydbg.png

Pydbg fait parti du framework Paimei (du coup ca m'a donne envi de revoir kill bill2..):
Paimei

svn checkout http://paimei.googlecode.com/svn/trunk/pydbg paimei-read-only

CryptEncrypt(), CryptDecrypt(), EncryptMessage(), DecryptMessage()

Ca passe ok avec python 2.6 sur ma VM XP mais quelques posts disent que pydasm ne passe bien qu'avec python 2.5.

lundi 2 mars 2009

rustock.C le virus qui transforme ta babasse en disco-mobile!

Comme j'y ai vaguement fait reference qqes posts precedent, voici un petit article/description pseudo-technique du virus rustock.C avec son application tres KISS oriented.

rustock.C

Eh oui on aime UNIX, mais on aime aussi les trucs droles :)

jeudi 26 février 2009

Confi! confi! confipote!

Conficker est un worm recent, il n'est pas aussi "Stealth" que son confrere (qui n'est pas vraiment un confrere mais bon... comme j'ai qu'un panier y a tout dedans) rustock.C mais il fait deja de belles choses sympathiques.

tout ca est analyse la: http://mtc.sri.com/Conficker/

merci dave pour le lien!

dimanche 12 octobre 2008

Week-end Food #13

prrrrrrt,

si tu aime le tabasco, tu aimeras churrasco... c'est pas nouveau mais ca fera un tres bon WEF #13, a lire et a ingurgiter...

c'est pas tres long et pas trop complique a comprendre, meme si c'est pas "UNIX-related". ca parle d'une partie du fonctionnement interne des services, de l'authentification et des possibilites que les differents "contextes" et autres ACL internes de win32 offrent a un attaquant.

Je sais pas tout, mais je crois que j'ai saisi le concept :)

Bonne lecture..

le post le paper le code

mardi 4 septembre 2007

win32 et les shellcode 4 dummies

Holà,

Il y a quelques mois, j'ai dû m'initier à l'écriture de shellcodes de base (histoire de comprendre certains trucs) sous win32 (je sais c'est pas unix, mais on s'en fout c'est fun !).

J'ai eu comme une émotion quand j'ai vu le tout premier que j'avais fait sous win32, c'est ridicule, mais c'était marrant et ça aidera peut être d'autres curieux.

Les appels systemes ne fonctionnent pas de la même manière, sous win32 on fait appel à des trucs de plus haut niveau qui sont "a priori" deja chargés ou que l'on charge au besoin (LoadLibraryA())

Bref voilà c'est là :

win32_cmd_shellcode

Pour plus d'infos sur ces petites choses inutiles :

http://www.nologin.org/Downloads/Papers/win32-shellcode.pdf

Ou demandez à google... Have fun!