dimanche 9 septembre 2012

Quand cryptologie rime avec pédagogie!

Bon en fait nous allons plutôt parler de cryptographie! Mais bon, j’aimais bien la rime en “gie”.
Je viens de découvrir un petit outil bien sympathique que j’aurais aimé avoir en ma possession depuis longtemps. Il m’aurait permis de gagner du temps dans la compréhension de certains concepts comme par exemple la signature numérique ou bien Diffie-Hellman.
Et cet outil existe pourtant depuis un certain temps! Les experts, les vrais, chercheraient-ils à ne pas divulguer leurs trucs et astuces! Non, bien sûr que non!
L’outil dont je vous parle est CrypTool (http://www.cryptool.com), développé par des universités allemandes Siegen et Darmstadt avec Deutsche Bank et Secude comme sponsors.
CrypTool ne s’adresse pas à la communauté d’experts qui connait tout cela sur le bout des doigts depuis bien longtemps, mais plutôt aux étudiants ou aux amateurs “éclairés” souhaitant mieux comprendre la cryptographie, voire même aux professeurs voulant expliquer des notions de cryptanalyse à leurs étudiants.
CrypTool a deux principales facettes: la cryptographie et la cryptanalyse.
En cryptographie, il permet de jouer avec:
  • le chiffrement/déchiffrement moderne (e.g. Triple DES-CBC) et classique (e.g. ROT-13), symétrique et asymétrique
  • les protocoles (e.g. S/MIME)
ScreenShot024
  • la génération des hashs (e.g. SHA-512)
  • la signature numérique et sa vérification
En cryptanalyse, il permet de jouer avec:
  • e.g. quelques attaques comme l’attaque sur le “hash” d’une signature
ScreenShot025
  • e.g. des mesures d’entropie ou de périodicité
Et en plus de tout cela on peut trouver des animations excessivement bien faites permettant de comprendre par exemple comment fonctionne la génération d’une signature numérique étape par étape:
ScreenShot026
Cet outil est indispensable! Si vous avez un doute sur le fonctionnement de Diffie-Hellman! Eh bien CrypTool est là pour vous donner l’information manquante!
Un grand merci aux étudiants de Siegen et Darmstadt!

samedi 8 septembre 2012

Comprendre Esapi de l'OWASP, en s’amusant

Enfin je trouve le temps de vous présenter "Swingset interactive 1.0.1" de l'OWASP, et j’en suis ravi!
L'OWASP propose de APIs très bien faites permettant de gérer vos problèmes de  sécurité sans avoir à réinventer la roue (généralement on fait moins bien…). Pour faciliter l'adoption et la formation des développeurs, l'OWASP propose une interface interactive appelée "Esapi Swingset" permettant de comprendre et d'implémenter les fonctions de sécurité en se basant sur les APIs d'Esapi.
La marche à suivre pour mettre en œuvre ce serveur est la suivante:
  1. Télécharger le “zip” sur le site de l'OWASP sur https://www.owasp.org/index.php/ESAPI_Swingset
  2. Télécharger Eclipse sur http://www.eclipse.org/downloads/. Dans mon cas je dispose d'une version de Webgoat fonctionnant avec Eclipse et je vais donc réutiliser cette version pour y ajouter le projet Esapi (plus d’informations dans l’article Modifier le source de Webgoat, oui c’est possible!)
  3. Lancer Eclipse via Webgoat
  4. Configurer Esapi dans Eclipse. Pour cela il est nécessaire de suivre tranquillement la procédure décrite dans le fichier:
    ”.../Swingset_Interactive_1.0.1/README.txt”. Si vous avez des problèmes avec les directives de ce fichier, n'hésitez pas à me contacter.
On note le déplacement du ficher ".keystore" et du répertoire ".esapi" dans le répertoire de l'utilisateur avec lequel vous vous êtes connecté (par exemple "C:\Documents and Settings\votre_utilisateur"). Cela signifie que les fichiers générés au cours de vos tests et les fichiers de configuration se trouvent probablement à cet emplacement.
Comme décrit dans la documentation, le lancement du serveur Esapi se fait dans la vue "Serveurs" d’Eclipse. Faire un clic droit sur "Tomcat v6 Server at localhost" et choisir "Start".
ScreenShot026
Une fois que le status de ce serveur est dans l'état "Started", on peut commencer à jouer avec Esapi dans votre browser préféré (mais il est conseillé d'utiliser Firefox). Entrer l'URL suivante:
https://localhost:8443/SwingSet/main
ScreenShot023
Puisque l’objectif de cet article est de vous aider à prendre en main l'outil, nous allons le faire avec le premier exemple proposé qui est l'"Authentification".
On note que chaque thème est scindé en 3 parties:
  • un tutoriel
ScreenShot024
  • un “lab” vous permettant de réaliser votre propre implémentation en vous basant sur le tutoriel
ScreenShot025
  • la solution
Après avoir lu le tutoriel on comprend qu'il est nécessaire de créer un utilisateur puis de s'authentifier avec ce même utilisateur en suivant les règles des APIs.
Dans le “lab” on apprend que le fichier "jsp" à modifier se trouve sous:
”\WebContent\WEB-INF\jsp\LoginLab.jsp”
On ouvre le fichier dans Eclipse et on découvre que les parties du code à modifier sont signalées par "//TODO 1" pour la création de l'utilisateur et "//TODO 2" pour la phase d'authentification avec ce même utilisateur.
En observant le code on note que les paramètres suivants sont utilisés:
  • create_username
  • create_password1
  • create_password2

1ère phase: la création de l'utilisateur (TODO1)
Le code à modifier est le suivant (c’est un exemple fonctionnel mais perfectible):
User user = null;
Authenticator instance = ESAPI.authenticator();
   
try {
    if (request.getParameter("create_username")!=null){           
       // TODO 1: Use ESAPI to Create a User Account
       instance.createUser(request.getParameter("create_username"), request.getParameter("create_password1"), request.getParameter("create_password2"));
       instance.getUser(request.getParameter("create_username")).enable();
       instance.getUser(request.getParameter("create_username")).unlock();

Il faut noter qu'un utilisateur créé est par défaut désactivé et bloqué. Dans la vraie vie l'activation et le déblocage nécessiterait une intervention d'un administrateur par exemple.
Pour tester il est simplement nécessaire de sauvegarder le fichier "jsp" et de recharger la page dans le browser (Firefox dans notre cas).
Si votre utilisateur ”john” est créé vous obtenez le message "User Created : john". Vous pouvez ensuite consulter le fichier pour voir quelles sont les informations générées pour la création d'un utilisateur dans “C:\Documents and Settings\votre_utilisateur\.esapi\users.txt”
Notez en passant le chiffrement du mot de passe.

2ème phase: l'authentification avec ce même utilisateur (TODO2)
Le code à modifier est le suivant:
//user = ESAPI.authenticator().login();
//TODO 2: Login using ESAPI                    
user = ESAPI.authenticator().login(request, response);

Rien à dire. La solution est assez simple.

Optionnel: ajout du bouton "logout"
On peut en plus de l’exercice s’amuser à gérer le bouton “logout”.
On trouve le fichier "jsp" à modifier:
”\WebContent\WEB-INF\jsp\LogoutLab.jsp”
On y ajoute:
<%
Authenticator instance = ESAPI.authenticator();
instance.logout();

%>
User logout

Il est également nécessaire de modifier le fichier:
”\WebContent\WEB-INF\jsp\LoginLab.jsp”
On remplace la ligne:
<a href="main?function=Login&logout&lab">logout</a>par
<a href="main?function=Logout&lab">logout</a>


Puis après l'authentification, lorsque l'on clique sur le lien "logout",
l'utilisateur est déconnecté.
Enfin on peut corriger avec la version proposée par l'OWASP. Le code source se trouve sous:
”\WebContent\WEB-INF\jsp\LoginSolution.jsp”
Remarque: si vous sortez de votre session alors toutes vos données peuvent être perdues et vous devrez alors recommencer depuis la création de l'utilisateur (le fichier "users.txt" peut être est vide). Ce comportement semble aléatoire!
Amusez-vous bien! Et surtout utilisez Esapi dans vos implémentations!

dimanche 2 septembre 2012

Jouer aux cartes… “sans-contact” sous Windows

L’objectif de cette article est de vous montrer comment utiliser le lecteur Gemalto Prox-DU avec l’outil RFIDiot sous Windows.

Le lecteur Gemalto Prox-DU est un lecteur permettant d’utiliser à la fois des cartes “contact” et “sans-contact”. Vous pourrez trouver la description du produit à l’URL suivante: http://www.gemalto.com/france/entreprise/prox_du.html

Les “drivers”, la documentation et quelques outils peuvent également être trouvés à l’URL suivante: http://support.gemalto.com/index.php?id=prox-du_prox-su

RFIDiot est une librairie Python “open-source” permettant d’explorer les périphériques RFID. Pour ceux d’entre nous qui se posent la question, RFIDiot signifie ”RFID IO Tools”

Pour mes tests je dispose d’un PC sous Windows 7 64 bits.

Pour l’installation :

  1. Le lecteur est reconnu par défaut sous Windows 7. Il n’est donc pas nécessaire d’installer un “driver”. C’est appréciable!
  2. Installer RFIDiot pour Windows. RFIDiot peut être téléchargé sur http://rfidiot.org/ (fichier “RFIDIOt-Windows-1.0a”)
  3. Installer Python 2.7 en 32 bits. Python peut être téléchargé sur   http://www.python.org/download/releases/2.7.3/. Il est obligatoire de choisir une version 32 bits pour assurer la compatibilité avec certains des modules ci-dessous; et  il est aussi préférable de choisir la version 2.7 pour la même raison.
  4. Ajouter le module Pyscard. Pyscard peut être téléchargé sur http://sourceforge.net/projects/pyscard/ (fichier “pyscard-1.6.12.win32-py2.7.msi”)
  5. Ajouter le module Pycrypto. Pycrypto peut être téléchargé sur http://pypi.python.org/pypi/pycrypto/2.0.1 (fichier “pycrypto-2.0.1.tar.gz”). Pour finaliser l’installation, il est nécessaire d’extraire le contenu et de lancer “C:\Python27\python.exe setup.py”)
  6. Ajouter Pyreadline. Pyreadline peut être téléchargé sur https://launchpad.net/pyreadline/+download (fichier « pyreadline-2.0-dev1.win32.exe »)

Pour le test :

  1. Choisir par exemple une carte “Mifare Ultralight” et la poser sur le lecteur
  2. Dans une « invite de commandes », lancer « C:\Python27\python.exe readmifareultra.py » (si votre carte sans contact est une carte “Mifare Ultralight” bien entendu)
  3. On obtient alors le contenu de la carte:

image 

RFIDiot propose de nombreuses autres fonctionnalités que je n’ai pas encore testé sous Windows. C’est pourquoi vos commentaires, remarques ou suggestions sont les bienvenus.

samedi 1 septembre 2012

Dropbox entre dans le monde de l'authentification forte

Bien que je ne confierais pas mes secrets à Dropbox (confer MISC n°60 avec l’article intitulé “Le nuage Dropbox vu de la terre ferme”), je suis en partie rassuré par le passage de Dropbox à l'authentification 2 facteurs, rejoignant ainsi Google avec son célèbre "Google Authenticator" (voir l'article Quand Google se met à l’authentification forte…).

Comme vous pourrez le constater dans le vidéo ci-dessous, le passage au 2ème facteur se fait en souplesse.



Ce passage est facilité si vous possédez déjà l'application mobile de Google permettant de générer des OTPs, appelée Google Authenticator, et c'est mon cas! Sinon vous devez l’installer sur votre téléphone, et ce n'est pas bien compliqué (voir l'article Quand Google se met à l’authentification forte…).

Dropbox est donc complètement intégré à Google Authenticator, et c'est tant mieux!
Mais vous n'êtes pas obligé de générer les OTPs avec une application mobile. Vous pouvez également demander l’envoi d'un SMS contenant un OTP. Léger inconvénient, vous devez avoir un accès au réseau GSM!

Bravo Dropbox!

Quelques questions restent cependant en suspens:
  • Qu'en est-il du chiffrement de mes données sur les serveurs de Dropbox?
  • Quid de la garantie de suppression définitive de mes données (et des backups éventuels) après la suppression de mon compte?

Une solution, chiffrez vos données avec un bon AES 256 avant de les stocker sur Dropbox! Surtout si vous l'utilisez dans un contexte professionnel!

Moi j'ai fait mon choix!

Partager avec...