Wednesday, February 22, 2012

Coppersmith pour les nuls

Recemment je suis tombe sur un probleme "interessant" ayant trait a RSA. La facon dont c'etait implemente me laissant a penser que quelque chose n'allait pas, et meme si j'apprecie la cryptographie, je n'ai pas la science infuse et il m'a fallu chercher a droite et a gauche une solution adequate (et simple).

En voici la version anonymisee.

Considerons le probleme ou Bob le developpeur veut chiffrer une cle AES 128 avec du RSA - 1024 bits parceque Bob sait qu'en dessous c'est pas "sur". Bob n'est pas super au point avec les standards, et il ne dispose que de quelques API d'arithmetique modulaire. Toujours est-il que Bob reussit a generer ses nombres premiers, choisit e=3 (pour la simplicite?), et calcule d correctement. Maintenant Bob se doute que si il chiffre sa cle AES (m) directement avec e=3, cela ne va pas mener a grand chose puisque m^3 < n. Donc Bob complete son message avec des 1 (padding fixe). En python, cela ressemblerait a:



La problematique est la suivante: connaissant n et e de la cle RSA (parametres publiques), et le message chiffre m', peut-on recouvrer la cle AES?

Et bien cela tombe pile poil dans le domaine couvert par l'attaque de Coppersmith (sugere par @kyprizel) avec f(x)=(2^1023-2^128+x)^3-mprime. Maintenant le probleme est de trouver une implementation de Lenstra–Lenstra–Lovász, ou de le reimplementer soi-meme. La solution se trouve dans la bibliotheque Sage, et le Sage Notebook disponible en ligne si vous ne voulez pas installer les 400MB sous Linux, ou la VM VirtualBox sous Windows - et probablement ailleurs mais je me suis arrete a ce qui marchait.

Avec les quelques lignes de code suivantes sous Sage Notebook vous recupererez les 128 bits de la cle instantanement:



C'est moche pour Bob, il avait fait un effort ce coup-ci :(

Friday, December 9, 2011

Extraction des fichiers .tor de Star Wars: The Old Republic

Pour ceux qui veulent savoir ce qui se passe dans les fichiers de SW:ToR, voici un petit morceau de code pour "traiter" tous les fichiers .tor dans un repertoire. Le format est base sur des archives "MYP" avec des SHA-256 integres dans les donnees. Les noms de fichiers ne sont pas disponibles dans les archives, seuls un hash particulier sur 64 bits permet d'identifier les fichiers. Une liste partielle des fichiers est disponible avec le projet easymyp.

Le code ne fait pas grand chose, mais donne une idee du format des fichiers.
Il semble au passage que quantites de SHA-256 soient invalides.

Thursday, November 10, 2011

Tuesday, October 18, 2011

Et un autre Stuxnet...

Apparemment, les auteurs de Duqu seraient les memes que ceux de Stuxnet. Il y a un gros PDF qui regroupe les travaux de Symantec et du "laboratoire" qui a ete publie.

Le certificat utilise pour signer les .sys a semble-t-il ete vole, et bien que cache au sein du PDF (sauf son empreinte), il s'agirait d'un certificat de C-Media Eletronics Incorporation qui est maintenant revoque.

D'apres ce que j'ai lu, le but de Duqu est different de celui de Stuxnet et se concentre davantage sur le C&C que la proliferation et l'exploitation de vulnerabilites. Le rapport du "laboratoire" ne semble pas infirmer la presence de 0days dans les binaires.

Quelques liens:
Edit: tableau & liens.


Saturday, June 11, 2011

idapython 1.5.2

La nouvelle version d'idapython semble fixer le probleme du script de graph d'xrefs lorsque je l'ai passe en plugin ("crash" lors du double-clique sur un node et fermeture de l'IDB). Telechargez la si vous aviez un probleme avec xrefgraf.py:

http://code.google.com/p/idapython/downloads/list

Je rajouterai les fonctionalites manquantes dans la semaine. Peut-etre.

Wednesday, June 8, 2011

XrefGraf.py

Bon j'ai rajoute les quelques lignes necessaires afin de transformer le script en un plugin. Copiez le fichier dans le repertoire de plugin de IDA (n'oubliez pas d'installer la derniere version de idapython), et ALT-F8 vous presentera le dialogue. J'ai aussi corrige un probleme de logique. Alors maintenant un autre bug est apparu: dans le plugin, double-cliquer sur un noeud provoque un crash d'IDA - j'ai essaye de trouve pourquoi ca marche en script et pas en plugin, sans succes. Si quelqu'un sait et peut me dire pourquoi ca serait sympa :)


Monday, June 6, 2011

Script idapython du Dimanche soir

Apres une dure victoire des Miami Heat 88 a 86 contre les Dallas Mavericks pour le 3e match des finales des playoffs de la NBA (2-1!), je me suis decide a essaye de terminer le script d'hier. Apres avoir joue avec les Forms dans l'apres-midi, il se trouve qu'un dialogue se fait plus aisement que prevu. Donc je me suis efforce de faire quelque chose qui ressemblait au menu courant, toujours avec cette notion de filtre par expression reguliere sur les xrefs qui me tenait a coeur


J'ai inclus du code pour les xrefs to et les xrefs from. C'est moche mais ca a l'air de marcher. Comprenez bien qu'a 11:30PM un dimanche soir, ma batterie de test a consiste a tester 3 fonctions et a juger du resultat au nez. Mais comme Google, je vais faire confiance aux utilisateurs finaux pour tester, trouver des bugs, me les envoyer, et me traiter de tous les noms pour avoir pondu du code pourri.

Et comme je ne maitrise toujours pas le web 3.0 et que je n'arrive pas a coller du code proprement formate dans ce blog, je vais faire confiance a pastebin pour cela. Le code complet du script se trouve a l'adresse suivante:

http://pastebin.com/nidWa9U7



Enjoy!