Archive for March, 2011

HEIG-VD IT Security Days – Day #2 Program

Mar 10 2011 Published by under HEIG-VD

IT Security Days @ HEIG-VDIt is now time to announce the program of the second event of the HEIG-VD IT Security Days, devoted to “Web Applications (In-)Security”, which will happen on next Wednesday, March 16th, 2011, on the HEIG-VD campus in Yverdon-les-Bains. Obviously, it is not too late to register !

  • 08h45: Doors opening and registration
  • 09h15: Welcome words
  • 09h20: Sylvain Maret, Maret Consulting, principal consultant, “Strong Authentication in Web Applications: State of the Art 2011“: Sylvain’s talk will focus on risk based authentication, biometry, OTP for smartphones, PKIs, Mobile-OTP, OATH-HOTP, TOTP and the open-source approach to this subjet.
  • 10h20: Morning break
  • 10h50: Rolf Oppliger, eSECURITY Technologies, CEO, “SSL/TLS and Web Application (In-)Security“: The terms SSL and TLS are omnipresent in todays expert discussions about Web application security. The term SSL refers to a transport layer security protocol that was developed in the 1990s to cryptographically protect data transferred by Internet applications, whereas the term TLS refers to the successive (and meanwhile standardized) security protocol. Hence, SSL/TLS provides a cryptographic solution for many security problems. But it is not a panacea, meaning that there remain problems in the way SSL/TLS is invoked as well as problems that cannot be solved cryptographically in the first place (e.g., the malware or secure platform problem). In this talk, we give a brief introduction to SSL/TLS, put the technology into perspective, explain how it can be used to secure Web applications, discuss where it is overrated, and elaborate on some of its limitations and shortcomings. The bottom line is that Web application security remains a challenge, even if the use of SSL/TLS is widely deployed.
  • 12h00: Lunch break in the cafeteria l’Orangeraie
  • 13h30: Antti Tikkanen, F-Secure, Senior Manager, “Malware, the Web and You“: We will go through the basics of modern malware and how it works in general. Then we will discuss things that are specific to malware and web applications, looking at examples like banking trojans and social network malware, illustrating how they work with live malware demos.
  • 14h30: Antonio Fontes, L7 Security, principal consultant, “Threat modeling your web application: mitigating risks right from the start!“: Companies increasingly spend a hard time dealing with unexpected or under-estimated security vulnerabilities being found, if not exploited, in their online web applications. This approach often leads to important costs, due to recurrent fallbacks within the software development lifecycle (design, implement, verify, deploy). During this session, I will introduce the audience to threat modeling, a threat identification process, which stakeholders, architects and developers can learn to apply early in their web application projects. By answering the question “what risks shouldwe concentrate on first?”, threat modeling helps project stakeholders prioritizing their security efforts before even a single line of source code is produced.
  • 15h30: Afternoon break
  • 16h00: Philippe Oechslin, Objectif Sécurité SA, CEO, “Cross Site Scripting XSS for Dummies“: We will first start with classic XSS examples and illustrate them in existing web sites. We will the see how to evade classical XSS filters, how to abuse the document object model and how take advantage of available javascript frameworks. Finally we will demonstrate that XSS are not always client-side attacks but that they can also be used to penetrate servers.
  • 17h00: End of manifestation

No responses yet

Insomni’Hack 2011: Souvenirs, Souvenirs

Mar 07 2011 Published by under Cryptography,Français,Hacking

[UPDATE] Les slides de mon intervention lors des conférences de l’après-midi sont désormais en ligne.

Insomni’hack 2011 a vécu et bien vécu ! Les conférences de l’après-midi étaient très variées (cf. le billet de Bruno Kerouanton pour un résumé) et nous ont rapidement amené au concours tant attendu. Je me suis finalement retrouvé à transpirer pour une équipe fort sympathique (les pycured) formée de quelques-uns de mes anciens étudiants du MSE HES-SO. Nous avons terminé à un très honorable cinquième rang, vu la concurrence, après avoir été troisièmes jusqu’à une demi-heure de la fin. Félicitations aux employés de SCRT pour l’organisation parfaite !

Étant données mes penchants techniques personnels, je me suis tout naturellement attaqué en premier aux trois challenges «Crypto», dont je me propose de vous donner ici un aperçu.

Le premier challenge, le plus facile et le moins intéressant à mon goût, consistait à décrypter un texte donné sous la forme d’un fichier ASCII secret.txt. En plus, on nous donnait comme indice une table de fréquence de l’anglais, ce qui faisait immédiatement penser à une substitution simple. À l’aide d’un outil tel que Cryptool v1.4.30 (plus simple à utiliser que la version 2.x, à mon humble avis), il est possible de casser très facilement ce type de cryptogramme en utilisant une méthode statistique, de récupérer la clef, et de déchiffrer ensuite la phrase-challenge, le tout en quelques minutes.

Le second challenge que j’ai résolu était en fait le troisième. On nous donnait un fichier insomniDES.tar.gz, qui contenait une implémentation de l’algorithme DES, ainsi qu’un algorithme de génération de clef «maison» contenu dans le fichier insomniDES.py:

Finalement, on nous donnait un texte chiffré et encodé en base64 à décrypter:

ma1IblbRhPm1ouBqeSr/Ai3lY16s/lb3bw77fj3h0+BUdUKi2wWAny7dpGtpRtq2

On peut tout de suite penser à un générateur aléatoire faible, mais le fait qu’il utilise les routines standard de Python (qui, soit dit en passant, ne sont pas recommandées à utiliser pour générer des clefs cryptographiques) m’a conduit à regarder la routine generateKey()de plus près. À l’aide de quelques print() judicieusement placés, il est vite apparu qu’avant d’entrer dans le SHA-256, la variable state5 ne possédait qu’une entropie de … 8 bits (ici, les octets sont exprimés en base 10):

[26, x, 149, 14, 14, 149, x, 26]

Quelques lignes de brute-force plus tard

on tombait rapidement sur la soluion

J'adore Insomni'hack! Je t'offre une biere!

Le second challenge était plutôt du genre … coriace! On nous donnait l’URL d’un script qui permettait de chiffrer et de déchiffrer des données au moyen d’un clef inconnue avec l’algorithme Triple-DES en mode CBC. Le script de déchiffrement ne retournait évidemment pas le résultat, ni la clef. Par contre, il retournait une information très utile, à savoir si le déchiffrement s’était correctement passé ou si une erreur dans le traitement du padding était apparue. Nous étions donc dans la situation idéale d’une attaque de type “padding-oracle”. Cette attaque a été décrite par Serge Vaudenay (LASEC/EPFL) à Eurocrypt 2002, et est revenue récemment très à la mode (cf. le MS10-070).

L’algorithme Triple-DES en mode CBC est capable de chiffrer des données dont la longueur est un multiple de 8 octets. Si les données à chiffrer ne possèdent pas la bonne longueur, on rajoute du «padding», à savoir des octets additionnels jusqu’à obtenir une longueur multiple de 8 octets. La méthode de «padding» la plus connue est celle standardisée dans PKCS #5: s’il manque un octet, on rajoute l’octet 0x01; s’il manque deux octets, on rajoute deux octets à 0x02, etc. Les valeurs de padding acceptées sont donc

0x?? 0x?? 0x?? 0x?? 0x?? 0x?? 0x?? 0x01

0x?? 0x?? 0x?? 0x?? 0x?? 0x?? 0x02 0x02

0x?? 0x?? 0x?? 0x?? 0x?? 0x03 0x03 0x03

0x?? 0x07 0x07 0x07 0x07 0x07 0x07 0x07

0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08

Si l’on est capable de faire la différence, après le déchiffrement, entre un bloc possédant un «padding» valide et un bloc ne passant pas ce test, on obtient un oracle de déchiffrement qui fonctionne en aveugle, d’une certaine manière.

Grossièrement, l’attaque fonctionne de la manière suivante: on fabrique un texte chiffré de deux blocs formé d’un IV concaténé avec un bloc à décrypter. Pour récupérer le huitième octet (celui de droite) à la sortie du Triple-DES, on itère les 256 valeurs possibles sur le huitième octet du premier bloc (de l’IV, donc). Quand l’oracle nous indique «padding correct», il y a une forte probabilité que l’octet de droite de la sortie du Triple-DES est égal au XOR de 0x01 et de l’octet itéré dans l’IV, ce qui nous permet de récupérer l’octet de droite du bloc à décrypter. Pour attaquer le deuxième octet, on fixe l’octet de droite de l’IV à 0x02 XOR l’octet récupéré précédemment à la sortie du Triple-DES, et on itère le septième octet de l’IV jusqu’à ce que l’oracle indique «padding correct». Cette fois, le septième octet de la sortie du Triple-DES est égal au XOR de 0x02 et du septième octet de l’IV. En répétant ce processus, on est capable de décrypter tout le bloc octet après octet, puis tout le message à casser ! Le script que j’ai écrit pour automatiser l’attaque est le suivant:

Au final, près de deux heures (!) de travail pour arriver à mes fins, dont au minimum une heure pour me rendre compte qu’il ne fallait pas oublier d’appliquer le XOR de feedback sur la sortie des Triple-DES avant d’obtenir un texte clair, et surtout, pour voir que j’avais mal copié-collé le texte chiffré à casser…

4 responses so far