Black Hat USA 2013

Nous voici au Cesar’s Palace de Las Vagas pour le très “corporate” Black Hat. Voici ce que nous avons retenu :

Jour 1

Methodologies of hacking embedded security appliances

Rob Bathrust, Mark Carey

Ce workshop de deux heures trente a présenté une introduction au hacking hardware.

En présentant tout d’abord les outils de base permettant de s’initier à ce nouvel horizon de recherche : Multimètre, outils de soudure, interfaces JTAG et Bus Pirate.
Une des premières difficultés rencontrées lorsque l’on cherche à analyser un périphérique hardware est de supprimer les couches de résine epoxy souvent ajoutées par les constructeurs afin de protéger leurs circuits. Plusieurs méthodes ont été présentées par les auteurs, comme la surchauffe de la résine afin de la décoller du PCB. Malheureusement, cette méthode est très souvent dommageable pour le circuit en lui-même et permet rarement de retrouver un circuit nu et fonctionnel. Une autre méthode plus efficace et toutefois plus dangereuse est d’utiliser divers produits chimiques permettant de dissoudre la résine et ainsi conserver le circuit intact.

Une autre méthode présentée par les conférenciers pour récupérer des informations sur le circuit et d’utiliser le FCC ID, présent sur la quasi-totalité des équipements vendus de nos jours. Muni de ce numéro, il est possible de récupérer la documentation envoyée au FCC par le constructeur, qui contient presque toutes les informations utiles sur le circuit : composants utilisés, éclatés des circuits, placement, … une vraie mine d’or pour obtenir des informations préalables à un démontage de l’appareil !

I can hear you now : Traffic interception and remote mobile phone cloning using a compromised CDMA femtocell

Tom Ritter, Doug DePerry, Andrew Rahimi

Ce talk parle en particulier des femtocells, ces boîtiers fournis par
certains opérateurs de téléphonie mobile permettant d’améliorer la couverture du réseau dans une zone isolée.
En utilisant le port HDMI (???) présent sur le boîtier analysé, les auteurs ont pu obtenir un shell série sur le boîtier et finalement un shell root en modifiant la commande du bootloader. Une fois l’accès root obtenu, il a été possible de lancer les daemons de la femtocell et ainsi avoir un accès complet sur le boîtier alors que celui-ci fonctionne.

Dans un premier temps, il n’a pas été possible de sniffer directement les
paquets transitant de la femtocell vers le réseau de l’opérateur : le VPN
utilisé est un module du noyau Linux qui extrait les paquets de netfilter pour les chiffrer et les envoyer dans le tunnel. Les auteurs ont alors du créer un module noyau qui se place entre netfilter et le module VPN pour intercepter les données. Démonstrations à l’appui, il est dès lors possible d’intercepter les communications vocales échangées au travers de cette femtocell, de récupérer les SMS en clair ainsi que les données échangées sur le réseau mobile.

Petite anecdote : lorsque vous passez un appel avec votre téléphone,
tout ce que vous dites avant et pendant les tonalités d’attente sont transmises sur le réseau…

La suite de ce talk s’est révélée tout aussi passionnante, les conferenciers ont poussé leurs recherches jusqu’a cloner un téléphone afin de voir s’il est
possible d’agir comme dans les films. Résultats : Il n’est pas possible pour
l’heure de cloner un téléphone et de l’utiliser sur une antenne classique car une clé de chiffrement échangée par le téléphone et l’antenne n’est pas connue. Les femtocells, en revanche, ne nécessitent pas cette authentification mais se basent sur deux informations qui sont envoyées par le téléphone lors de son arrivée sur la femtocell. En utilisant un téléphone reprogrammable, il est dès lors possible de cloner un téléphone qui s’est connecté sur une femtocell et ainsi de l’utiliser, mais uniquement sur une femtocell. Modifiée ou non.
Démonstrations à l’appui toujours, un téléphone et son clone, lorsqu’ils sont sur la même femtocell, reçoivent bien les appels en même temps, reçoivent bien les SMS en même temps et peuvent bien tous deux envoyer des appels et SMS. Impressionnant.

Pass the hash and other credential theft and reuse : Mitigating the risk of lateral movement and privilege escalation

Mark Simos, Patrick Jungles

Une conférence présentée par Microsoft sur les attaques Pass The Hash et le dump de credentials depuis la mémoire avec l’outil Mimikatz.

Ils ont rappelé les trois méthodes de mitigation de PTH disponible dans le white paper de microsoft. En résumé, ils préconisent de restreindre l’utilisation de comptes privilégiés, de firewaller les machines ou de désactiver le service “Server”. On sera d’accord qu’il est difficile d’appliquer ces techniques dans un réseau de production…

Néanmoins, ils ont fait des efforts afin d’améliorer la sécurité dans Windows 2012 R2 et Windows 8.1 au niveau du stockage de mot de passe dans lsass. Globallement, il ne sera plus possible d’extraire le mot de passe en clair ni le hash LM. Enfin, lorsque tout le monde aura migré sur ces nouvelles versions de système. Sachant que l’on rencontre encore régulièrement des failles MS08-067 non patchées lors de pentest, l’outil Mimikatz a encore de beaux jours devant lui.

How to grow a TREE (Taint-enabled Reverse Engineering Environment) from CBASS (Cross-platform Binary Automated Symbolic-execution System)

Nathan Li, Log Nguyen, Xing Li, James Just

Le but de cet outil est de fournir un framework de data taint analysis dynamique supportant n’importe quel processeur. Le framework s’intègre en tant que plugin pour IDA pro.
Une analyse statique est nécessaire pour identifier le premier point d’entrée utilisateur et le définir dans ida. L’outil génère ainsi une trace d’exécution et identifie le code qui va traiter ces données utilisateur. Cela permet de simplifier considérablement le temps pris par une analyse statique complète, en affichant un flux d’exécution simplifié portant uniquement sur les instructions modifiant ces données.

Une autre fonctionalité de ce framework permet via une analyse par exécution symbolique d’identifier quelles valeurs de données permettent de changer le flux d’exécution.

L’outil semble très prometteur pour la recherche de vulnérabilité et est disponible sur googlecode: http://code.google.com/p/tree-cbass/.

Pwnie awards

Cette année encore, la cérémonie des Pwnie Awards récompensait le meilleur comme le pire de la sécurité informatique. On pourra noter la récompense attribuée au magasine Hackin9 pour avoir publié un article (http://seclists.org/nmap-dev/2012/q3/1050) fabriqué de toute pièce sur le DARPA Inference Checking Kludge Scanning (DICKS), article rédigé d’ailleurs par de nombreuses personnes présentes lors de la cérémonie. Une petite déception tout de même pour le pwnie Epic Ownage, attribué cette année à Edward Snowden. A mon avis et n’en déplaise à certains, Malware.lu aurait bien plus mérité cette récompense pour leur prise de contrôle complet des serveurs C&C du botnet APT1. Il semble plus que ce pwnie ait été attribué pour troller la NSA que pour récompenser le “travail” de Snowden. Je trouve dommage que le pwnie soit attribué à une “balance” plutôt qu’à un vrai travail de recherche technique.

Jour 2

Funderbolt : Adventures in thunderbolt DMA attacks

Russ Sevinsky

Comme pour le firewire, les ports d’extension thunderbolt permettent un accès direct à la mémoire (DMA). Il est donc possible de lire et d’écrire directement en mémoire pour par exemple passer outre l’authentification de windows ou faire un dump complet de la mémoire dans des cas d’analyse forensics.

Les attaques existante sur le firewire ont déjà été réalisée grâce à des adaptateur thunderbolt to firewire mais cette présentation se focalisait sur l’attaque directe de ces nouveaux ports. Les ports thunderbolt sont en fait des extensions du bus PCIe. Le présentateur a commencé par une revue rapide de PCIe et le fait que seuls les device s’annonçant comme Legacy avait accès à la DMA.

L’auteur n’a malheureusement pas réussi à terminer son projet d’attaque DMA directe mais à priori, cela ne saurait tarder.

JTAGulator : Assisted discovery of On-Chip debug interfaces

Joe Grand

Joe “Kingpin” Grand nous présente ici son nouveau projet : le JTAGulator.

Cet outil open source basé sur un processeur Parallax permet de détecter et de s’interfacer avec un port JTAG sans connaître par avance où ce dernier se trouve. Cet outil se révèle très pratique pour découvrir ou se trouve l’interface de debug JTAG d’un périphérique ou découvrir l’interface série ainsi que son mode de fonctionnement (vitesse, utilisation de la parité, …)

La première partie de ce workshop présente en détails les composants utilisés par Kingpin pour développer cet outil ainsi que les techniques utilisées pour protéger l’appareil en cas de mauvaise utilisation, comme la protection contre les hautes tensions.

Par la suite, Joe Grand montre les fonctionnalités du JTAGulator. Son
fonctionnement principal est de découvrir le pinning d’un bus JTAG. En plaçant les sondes sur les points du circuit à tester, le JTAGulator va tester toutes les permutations de ces points afin de découvrir si un bus JTAG est présent et fonctionne. Pour ce faire, l’outil va envoyer en aveugle aux périphériques du bus de passer en mode BYPASS, qui renvoie simplement l’entrée de données sur la sortie, et envoyer des données. Si les données sont reçues, il est probable que les points soient un port JTAG. D’autres types de scan sont également disponibles, comme un scan utilisant la commande IDCODE.

Une utilisation intéressante est le comptage du nombre de périphériques sur un bus JTAG. En forçant tous les périphériques d’un bus en mode BYPASS (en envoyant la commande 0xFF), puis en envoyant une chaine de “1”, puis un “0” sur la ligne de données, il est possible,en comptant le nombre de coups de clock, de déterminer le nombre de chips présents sur le bus. Comme les données envoyées sont décalées d’une période de clock, chaque périphérique ajoute un délai d’une période, et il est ainsi possible de récupérer cette information sans avoir besoin de tracer tout le bus sur le circuit.

Plus d’informations sont disponibles sur le site www.jtagulator.com

Hacking, Surveilling and deceiving victims on Smart TV

SeungJin ‘Beist’ Lee

Les “Smart TV” sont de plus en plus nombreuses (~80 millions dans le monde) et sont présentes non seulement à la maison mais aussi en entreprise. Ces télévisions sont équippées d’un vrai système d’exploitation et fonctione comme des ordinateurs, très proche des des smartphone android. Ces TV possèdent une webcam permettant la reconaissance faciale ou gestuelle pour améliorer l’expérience utilisateur.

La première phase de la recherche de SeungJin ‘Beist’ Lee a été de trouver le moyen d’obtenir un shell interactif sur ces TV, afin d’analyser le système et trouver des vecteurs d’attaques. Beist a pu trouver un ancien firmware non chiffré et a procédé au reverse engineering de celui-ci.

Il en résulte un grand nombre de vulnérabilités, exploitable à distance ou à l’aide d’applications infectée disponible sur un “app store”

Une fois la TV “jailbreakée”, Beist a développé un rootkit permettant de prendre des photos ou des vidéos à l’air de la webcam, permettant une surveillance non détectable par une victime. Le rootkit est aussi capable d’empêcher l’extinction de la TV sans que la vitime s’en aperçoive.

En résumé, un gros travail de reverse engineering et de développement effectué par Beist, qui a remonté ces vulnérabilités aux constructeurs. Maintenant il ne reste plus qu’a implémenter une politique de patching de sa propre TV à la maison…

OptiROP: Hunting for ROP gadget in style

Nguyen Anh Quynh

Cette présentation a démarré sur l’état de l’art du Return Oriented Programming, en prenant bien le soin (20 minutes) de nous faire comprendre que les solutions existantes n’étaient pas satisfaisantes.

Ce nouvel outil permet la recherche de gadget de façon sémantique, permettant par exemple de chercher un gadget qui mette une valeur spécifique dans un registre.

L’approche est très intéressante, car elle est basée sur la traduction du code assembleur vers une représentation intermédiaire LLVM ensuite optimisée et combinée à une résolution SMT (Satisfiability Modulo Theories) pour valider le gadget recherché.
L’outil est aussi capable de trouver et chaîner plusieurs gadgets afin d’arriver au résultat demandé.

Cet outil n’est malheureusement pas encore disponible mais devrait l’être très bientôt (on l’éspère) et supportera les architectures X86 et X86_64 sur les formats Windows PE, Linux ELF et Mach-O.

Conclusions

Trop grand, c’est ce que nous retiendrons de cette édition de Black Hat. Le nombre démesuré de talks en parallèle (Huit !!!) et leur qualité largement inégale font qu’il est très difficile de s’y retrouver, ajoutons-y les événements ayant lieu au milieu de tout cela, comme les “Black Hat arsenal” qui présentent de nouveaux outils ou les événements marketing et nous obtenons une conférence qui semble vouloir “faire du chiffre” plus que de la qualité. Les participants s’y perdent un peu.

A noter également un petit air de salon de l’auto version informatique dans la salle des sponsors, avec des stands tous plus grands et tape-à-l’œil les uns que les autres.

Insomni’hack 2013 : The game

A popular game amongst survivors is the Rock-Paper-Scissors-Lizard-Spock game. To gain their respect, we strongly encourage you to be the best at this game. This will strengthen your reputation and will attract new citizens.

This challenge is all about timing. Once connected, the server will tell you that it made its choice, and you have to give yours.

When connecting several times, you were able to find out that there was a small time gap between the response and the “I’ve made my choice…” sentance. Each choice from the computer has a different time gap. By writing a client that monitors the time taken by the computer to select its response, you were able to guess the computer’s choice and answer accordingly to get the flag :

a27d37684aaf0a158db27d3c77b0a333dc68da0b870432f44eeb5bdcbbf3ac874baa3a8592a94ca799ac8332350cf7a4fd2ea899d54c6d1032286e7c46694dab

Exploit


import socket
from datetime import datetime
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("127.0.0.1",9999))
toto = s.recv(1024)
print toto
for i in range(0,20):
tstart = datetime.now()
toto = s.recv(1024)
print toto
tend = datetime.now()
c = tend - tstart
print c
if c.microseconds > 500000:
s.send("Lizard")
toto = s.recv(1024)
print toto
elif c.microseconds > 400000:
s.send("Rock")
toto = s.recv(1024)
print toto
elif c.microseconds > 300000:
s.send("Rock")
toto = s.recv(1024)
print toto
elif c.microseconds > 200000:
s.send("Scissors")
toto = s.recv(1024)
print toto
elif c.microseconds > 100000:
s.send("Paper")
toto = s.recv(1024)
print toto

toto = s.recv(1024)
print toto
toto = s.recv(1024)
print toto
toto = s.recv(1024)
print toto

Source code


import random, SocketServer, time

class GameHandler(SocketServer.BaseRequestHandler):

def handle(self):
self.request.sendall('Welcome to Rock-Paper-Scissors-Lizard-Spock Game !n')
i=0
while i ")
user = self.request.recv(20).strip()
if user in items:
status, message = solve(computer, user)
self.request.sendall(message+'n')
if status:
self.request.sendall('You lostn')
return
else:
i+=1
else:
self.request.sendall('Sorry, not recognizedn')
return
self.request.sendall("nWow, you're clearly the best !nTake this as a present.nn")
self.request.sendall('a27d37684aaf0a158db27d3c77b0a333dc68da0b870432f44eeb5bdcbbf3ac874baa3a8592a94ca799ac8332350cf7a4fd2ea899d54c6d1032286e7c46694dabn')

def choose():
computer = random.choice(items)
if computer == 'Rock':
time.sleep(0.1)
elif computer == 'Paper':
time.sleep(0.2)
elif computer == 'Scissors':
time.sleep(0.3)
elif computer == 'Lizard':
time.sleep(0.4)
elif computer == 'Spock':
time.sleep(0.5)
print computer
return computer

def solve(computer, user):
if computer == 'Rock':
if user == 'Paper':
return (False, "Paper covers Rock")
elif user == 'Scissors':
return (True, 'Rock crushes Scissors')
elif user == 'Lizard':
return (True, 'Rock crushes Lizard')
elif user == 'Spock':
return (False, 'Spock vaporizes Rock')
elif computer == 'Paper':
if user == 'Rock':
return (True, 'Paper covers Rock')
elif user == 'Scissors':
return (False, 'Scissors cut Paper')
elif user == 'Lizard':
return (False, 'Lizard eats Paper')
elif user == 'Spock':
return (True, 'Paper disproves Spock')
elif computer == 'Scissors':
if user == 'Rock':
return (False, 'Rock crushes Scissors')
elif user == 'Paper':
return (True, 'Scissors cut Paper')
elif user == 'Lizard':
return (True, 'Scissors decapitate Lizard')
elif user == 'Spock':
return (False, 'Spock melts Scissors')
elif computer == 'Lizard':
if user == 'Rock':
return (False, 'Rock crushes Lizard')
elif user == 'Paper':
return (True, 'Lizard eats Paper')
elif user == 'Scissors':
return (False, 'Scissors decapitate Lizard')
elif user == 'Spock':
return (True, 'Lizard poinsons Spock')
elif computer == 'Spock':
if user == 'Rock':
return (True, 'Spock vaporizes Rock')
elif user == 'Paper':
return (False, 'Paper disaproves Spock')
elif user == 'Scissors':
return (True, 'Spock melts Scissors')
elif user == 'Lizard':
return (False, 'Lizard poinsons Spock')
return (True, "Draw. It's not fair, but...")

if __name__ == '__main__':

items = ['Rock','Paper', 'Scissors','Lizard','Spock']

HOST, PORT = "0.0.0.0", 9999
SocketServer.ThreadingTCPServer.allow_reuse_address = True
server = SocketServer.ThreadingTCPServer((HOST, PORT), GameHandler)
server.serve_forever()

Insomni’hack 2013 – Life is hard(ware)

Intro

For this challenge, I wanted the attendees to reverse a microcontroller firmware, but most of all, I wanted them to actually see the result “live” to prove that the code actually works on a real device. The main idea was to use a keypad and a small screen to display the flag once the correct code has been entered.

I initially started writing the firmware on a Teensy++ 2.0 I had at hand. The firmware was almost complete when I received the new Teensy 3.0 at home. As I was playing with it, I found one cool feature :

Teensy 3.0 pinout

“Touch”, by the use of capacity sensors, really means that it can recognize a user’s finger. I found this so cool that I changed my plans and modified the firmware to use the touch inputs.

Touch input

One of the biggest advantages I saw with this feature is that I didn’t need push buttons nor direct access to the electronics. After some tests, I found that even with 5mm of material between my finger and the touch sensor, the returned value is large enough to correctly detect which sensor was activated.

As I had nine touch input pins available (I didn’t want to use the back of the Teensy), I used a keypad with nine inputs, from 1 to 9. Each digit having its own input on the Teensy. Since each sensor had its own base, value, I used threshold values to detect which number has been touched. The corresponding code is the following :


int inputs[] = {0, 1, 15,16,17,18,19, 22,23};
int thresholds[] = {800,800,800,800,800,1000,1000,900,1000};

int readStatus(){
while (1) {
for (int i=0;i<10;i++){ //Test each input
if (touchRead(inputs[i]) > thresholds[i] ){ //Does the input value go over the threshold ?
delay(300); // Delay
return i+1; //Return the keypad value
}
}
}
delay(10);
}

Case

I wanted the case to be as wide open as it can be, so people could actually see how it looks like on the inside and something that could resist 200 hackers that would play with it. I chose to use glass, as I had access to all the stuff I needed to create this case (Thanks, Mom 😉 )

The front face is made of 4mm float glass. I tried to engrave the digits on the glass, but the digits were not quite readable, so I used black glass powder that I melted in the front plate. To provide a wide touch zone for each number, I used a copper sheet that I sticked at the back of the glass. I then soldered a wire at the back of the copper sheets to get to the Teensy input :

Keypad

The screen used is a 2×16 LiquidCrystal that I wired to pins 7 to 12 on the Teensy. Using sugru, I glued the screen to the front plate and let all the wires flowing to give a “hacked” look to the whole thing.

Full

Full source


int inputs[] = {0, 1, 15,16,17,18,19, 22,23};
int thresholds[] = {800,800,800,800,800,1000,1000,900,1000};

#include <LiquidCrystal.h>

LiquidCrystal lcd(12,11,10,9,8,7);

void setup(){

lcd.begin(16,2);

for (int i=0;i<10;i++){
pinMode(inputs[i], INPUT);
}
}

int readStatus(){
while (1) {
for (int i=0;i<10;i++){
if (touchRead(inputs[i]) > thresholds[i] ){
delay(300);
return i+1;
}
}
}
delay(10);
}

void printFlag(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Flag is b2sum of");
delay(2000);
lcd.setCursor(0,1);
lcd.print("XXXXXXXXXXXXXXXX");
delay(5000);
lcd.clear();
}

void printWrong(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" WRONG");
delay(2000);
lcd.clear();
}

//Serial must be 598264
boolean checkSerial(int serial){
if ( (serial % 10) != 4) {
return false;
}
int tmp = 1;
for (int i=0;i<6;i++){
tmp = tmp << 1;
}
if ( (serial % 100) != tmp) {
return false;
}
if ( (serial & 0xff) != 248) {
return false;
}
if ( ((serial >> 8) & 0xff) != tmp/2) {
return false;
}
if ( (serial >> 16) != 9 ) {
return false;
}
return true;
}

void loop(){
int serial = 0;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Enter code :");
for (int i=0;i<6;i++) {
serial = 10*serial + readStatus();
lcd.setCursor(0,1);
lcd.print(serial);
}
if ( checkSerial(serial) ) {
printFlag();
}else{
printWrong();
}
lcd.clear();
}

Challenge

The arduino GUI creates a temporary folder containing all the compiled files, so I took the .elf file and gave it to the contestants. As the binary is not stripped, reversing it is not too complicated :

disassembly

Video

Here is the device working, once you have the correct PIN code (598264) :

[youtube=http://www.youtube.com/watch?v=VOQBLBCgZtU]

Hashdays 2012 – Compte rendu

Edit 2:

Suite à l’article, le créateur du challenge nous a apporté quelques précisions :

small remark, the morse code in Phase 1 actually spelled
MV LED 67, but I know it was blinking really fast 😉

[…]

for phase 2
if you connect the LED to 67, it will use morse code again
but this time spelling “SERIAL MONITOR”
as the hint to connect through USB

Merci à lui pour ces précisions 😉

Edit :

Ne voulant pas nous arrêter si près du but, nous nous sommes replongés sur la dernière étape à tête reposée au bureau.

L’alignement des paires de bits fait penser au système d’écriture braille. Chaque double colonne correspond à une lettre et nous pouvons trouver le message “in the final solution of the badge puzzle replace all h’s with ff’s”

Notre réponse passe donc de “SCHH” à SCFFFF

Après confirmation des organisateurs, nous sommes maintenant arrivés au bout de ce challenge.

Nous attendons avec impatience l’édition de l’année prochaine avec cette fois, une résolution du challenge dans les temps.

Article original

Pour sa troisième édition, les Hashdays se sont déroulés à Lucerne. Plutôt qu’un compte rendu classique sur les conférences, nous vous proposons un article sur nos découvertes concernant le challenge inclus dans le badge.

Introduction

Le badge de cette année se présente sous la forme d’un Arduino Uno (qui d’ailleurs présente un bug hardware : les entrées-sorties analogiques sont inversées) et d’une plaque de plexi gravée et illuminée par des LEDs.

Hashdays badge 2012

Phase 1 – LED

En allumant le badge, nous pouvons voir qu’une LED se met à clignoter pendant quelques instants. La manière plutôt aléatoire du signal nous a rapidement fait penser à un code. En utilisant un bus pirate en tant qu’analyseur logique à l’aide du logiciel OLS (http://www.lxtreme.nl/ols), nous obtenons un chronogramme de l’état de la LED.

L’état du chronogramme fait immédiatement penser à un code Morse. Une fois décodé, nous obtenons le code suivant :

VLED67

Phase 2 – Un peu de hardware…

Après de nombreuses recherches, nous remarquons que les LEDs du badge sont connectées sur les entrées-sorties 4 et 5 de l’Arduino, ce qui signifie qu’un signal émis par une sortie traverse la LED et peut être vu comme un signal d’entrée sur la seconde patte de cette dernière !

En effet, une fois une LED connectée entre les pins 6 et 7, l’Arduino clignotte brièvement. En connectant l’Arduino à un ordinateur à l’aide d’un câble USB, la sortie du port série affiche alors :

Congratulations, you are following the right (white) rabbit, nearly there.

sorry there was no (white) space left for encoding!

😉

Don’t forget, submit your final solution to
contest@defcon-switzerland.org
the solution are 6 characters, ordered by places found

Nous sommes donc sur la bonne voie !

Phase 3 – Texte invisible

Ce message énigmatique à quelque chose de bizarre : il y a un grand espace vide entre la première phrase et le smiley. Qui plus est, ce dernier n’est pas à la ligne. Se pourrait-il qu’il y ait des données cachées dans cet espace ?

En chargeant ces données à l’aide d’un script Python, l’espace est tout de suite plus “parlant” :

Congratulations, you are following the right (white) rabbit, nearly there.rnnsorry there was no (white) space left for encoding!rn ttt  t  tt  t t tt    t tt  t    t      tt t  t tt ttt   t      ttt t   tt t    tt  t t  t      t t  tt t t t   t     t t t  t  t t  tt  t      ttt ttt tt t  t ttt t   tt t     t      ttt     tt    t ttt     tt  t t ttt  t  tt tt t tt    t ttt  t  tt t tt ttt  ttn;-)rnnDon’t forget, submit your final solution torncontest@defcon-switzerland.orgrnthe solution are 6 characters, ordered by places foundrn

L’espace vide est un mélange de tabulations et d’espaces ! Une transformation binaire ==> ASCII donne la suite du challenge :

read in the STARS with papermarks

Phase 4 – Alignement

Cette étape nous a pris beaucoup de temps jusqu’à ce que l’un de nous remarque que deux étoiles sont gravées sur le haut du badge. De plus, certains symboles imprimés sur le cahier ressemblent à ceux gravés sur la plaque de plexi. Serait-ce un signe ?

Booklet Hashdays 2012

En essayant d’aligner la plaque avec les symboles du cahier, ceux-ci s’alignent correctement et les étoiles pointent sur certaines lettres.

Comme indiqué sur le second message, les lettres soivent être prises dans l’ordre, ce qui donne :

SCHH

Quatre caractères alors que le mot de passe doit en contenir six. Il manque encore deux lettres.

Phase 5 – Papier

La dernière étape est affichée en bas des pages 3 et 4 du cahier par une série de paires de bits :

Hashdays booklet 2012

Hashdays 2012 bookletCette dernière étape n’a pas pu être réalisée durant la conférence, la fatigue nous ayant empêchés de terminer ce challenge.

Conclusion

Sans pouvoir être arrivés au bout de ce challenge, celui-ci était très original et nécessitait de nombreuses compétences afin d’être résolu. Nous attendons avec impatience l’explication complète afin de voir si nous étions proches du résultat.

Dans tous les cas, encore bravo aux organisateurs pour leur travail, autant sur place que dans la préparation des diverses activités proposées.

Sergio, Paul, Manoé et Nicolas

Hashdays 2012

Les Hashdays se dérouleront pour leur troisième édition cette fin de semaine à Lucerne.

Parmi les nombreuses conférences agendées, un ingénieur de SCRT présentera les résultats de ses recherches sur le protocole ccTalk. Ce protocole est utilisé par de nombreux appareils permettant la gestion d’argent liquide dans les machines de vente, comme des monnayeurs ou des accepteurs de billets.

Il sera présenté entre autres le fonctionnement du protocole, le moyen d’interfacer un monnayeur avec un ordinateur ainsi que quelques faiblesses d’implémentations permettant d’interagir avec une machine de vente en fonctionnement.