La treizième édition de la Nuit du Hack, évènement annuel visant à réunir les passionnés de bidouilles en tout genre, c'est du 20 au 21 juin 2015 à l'Académie Fratellini.
Tout frais et tout neuf
Changement de lieu pour cet évènement en cette nouvelle année 2015, c'est désormais à l'Académie Fratellini que la NDH a posé ses valises. Après plusieurs années passées dans le gentil monde de Mickey, on retourne aux racines et aux endroits atypiques, car les talks se dérouleront dans un cirque aménagé pour l'occasion. Ceux qui ont participé à l'édition 2007 sauront de quoi je parle (cela s'était déroulé dans une ancienne grange).
L'Académie Fratellini, ça ressemble juste à ça:
Outre le changement de lieu, il y a aussi du neuf côté programmation, avec dans le désordre:
Les premiers talks annoncés
Cette année encore, plusieurs conférenciers ont d'ores et déjà été annoncés, avec entre autres:
C'est assez varié, et j'attends en particulier les talks de Karsten Nohl et de Stéfan Le Berre, habitués des talks intéressants et techniques. La keynote est assurée par Guillaume Poupard, de l'Agence Nationale pour la Sécurité des Systèmes d'Information (ANSSI).
Des challenges pour tous
Les challenges habituels seront présents, à savoir:
Les deux premiers sont des concours à destination des afficionados de la sécurité informatique, dont seul le second est ouvert au public. Le wargame public est constitué de problèmes et casse-têtes informatiques qu'il faut résoudre le plus rapidement possible.
Le challenge de lockpicking demande du doigté, de bons outils et de l'expérience: il s'agit de crocheter différents types de serrures dans un temps record, le tout supervisé par une équipe de crocheteurs expérimentés.
Enfin, le petit nouveau de cette édition est le challenge de désamorçage, qui consiste à désamorcer un compte à rebours comme ceux que l'on voit dans de nombreux films, à l'aide d'outils relativement simples et cela dans un temps fixé par le mécanisme. Des notions d'électronique sont requises pour pouvoir s'y frotter, mais aussi de la logique et une bonne résistance au stress.
Workshops
Encore une fois, de nombreux ateliers pratiques (ou workshops) sont proposés:
Il y en a pour tous les goûts, attention toutefois certains ateliers nécessitent une préinscription et dans certains cas une participation: c'est le cas par exemple de celui permettant de réaliser une station de soudage ou encore le pendentif geek animé.
Badge électronique
A nouveau, un badge électronique collector conçu par l'Electrolab (encore un grand merci à vous les gars) est proposé sur lequel se trouve un challenge permettant de remporter une place à vie à la Nuit du Hack (Black Badge). Les ventes de ce badge électronique sont ouvertes jusqu'au 10 mai, et le nombre d'exemplaires est limité !
Comment venir ?
C'est relativement simple: il suffit d'aller sur la boutique de l'évènement et de sélectionner un ou plusieurs tickets d'entrée ainsi que des goodies au besoin, et de régler par CB/Paypal/Bitcoin. Vous recevrez par courriel un QR code qu'il faudra imprimer et présenter sur place, un peu comme les billets électroniques de la SNCF quoi.
Il y a peu de temps, j'ai découvert Frida, un outil permettant de faire de l'instrumentation minimaliste de binaire sous Windows, Linux, iOS et Android. Rien que cela. Moi qui suis habitué du reverse à l'ancienne et de l'attaque à coup d'injection de code via des DLLs, ça m'a de suite intéressé.
Tante Frida aime le JavaScript
Frida repose sur l'injection d'un module dynamique dans un processus actif, et crée un canal de communication avec celui-ci. L'outil propose ensuite d'interagir en Python, à l'aide de bindings relativement bien conçus.
Le point intéressant (mais toutefois limitant) est que l'on peut pratiquer le détournement de fonctions et l'appel de fonctions en scriptant cela en JavaScript. Car oui, le module injecté embarque un moteur JavaScript reconnu (v8, merci Google) qui sera utilisé dans le cadre du détournement ou de l'appel de fonctions. Tout ça à partir de Python.
A ce moment là, j'ai posé un bémol sur cet outil. Employer JavaScript me posait un problème: le langage est très éloigné de l'assembleur, et je n'imaginais pas vraiment ce que l'on pouvait en tirer. J'ai poursuivi ma découverte de l'outil, et ai revu mon jugement.
Hooking simple avec Frida
Le hooking de fonctions c'est galère. Il faut développer en C des fonctions d'interception, injecter un module s'occupant de mettre en place le détournement (en prenant en compte toutes les contraintes liées à cela), mais surtout trouver un moyen d'afficher des information. Par exemple à grand renfort d'appels à MessageBoxA sous Windows.
C'est là que Frida sauve la vie. L'outil propose très simplement de placer un hook sur une fonction, et de définir une fonction de rappel en JavaScript qui se verra passer les arguments et pourra les traiter. Cela se traduit par un simple code Python intégrant un peu de JavaScript:
import frida
import sys
process = frida.attach("hello")
script = process.session.create_script("""
Interceptor.attach(ptr("%s"), *
onEnter: function(args) {
send(args[0].toInt32());
*
});
""" % int(sys.argv[1], 16))
def on_message(message, data):
print(message)
script.on('message', on_message)
script.load()
sys.stdin.read()
Du coup, ce qui était laborieux et pénible à développer est désormais beaucoup plus simple. Certes, on ne peut pas tout faire avec, mais on gagne un temps fou pour des choses relativement simples.
ImpRec en mode Frida
Lorsque je suis tombé sur cet outil, j'avais besoin de faire des bidouilles spécifiques avec des binaires, dont notamment de la reconstruction d'imports dans un PE. Là encore, Frida aide amplement. Tout d'abord, Frida permet de lister les modules actifs, et les fonctions exportées: pratique dans le cadre de la reconstruction d'imports. Ensuite, Frida permet d'accéder à la mémoire de manière relativement simple, et directement en Python.
De là, on imagine facilement un code en Python permettant de dresser un dictionnaire des exports et des fonctions associées:
exports_address = {}
for module in target.enumerate_modules():
for export in module.enumerate_exports():
addr = module.relative_address + module.base_address
export_address[addr] = (module.name, export.name)
Pour la recherche d'une IAT par exemple, on peut aisément se baser sur la méthode read_bytes de l'objet matérialisant le processus courant:
from struct import unpack
...
dword = unpack('<I', target.read_bytes(0x403000, 4))[0]
En bref
Frida s'installe en deux temps trois mouvements, même sous Windows. Frida peut permettre le développement rapide d'outils liés au reverse-engineering voire à l'analyse dynamique de binaires ou à leur compromission. Frida se base sur du Python ("cool !") et du JavaScript ("moins cool."). Mais Frida est bougrement efficace.
A ajouter dans la trousse à outil de tout hacker/reverser/bidouilleur de PE.
(crédits image: www.frida.re + gimp)
A peine l'année entamée que je suis déjà en retard pour l'annoncer. L'année 2015 démarre fort bien.
Janvier, l'heure du bilan de l'année passée. Et ce n'est pas glorieux. Entre OpenIt, le projet crowdfundé que j'avais lancé en 2013, qui n'a guère avancé grâce à de magnifiques fails, et ma vie personnelle qui a été un brin chamboulée, je n'ai pas eu tellement de temps pour souffler. Certains d'entre vous ont pu s'en rendre compte, vu que j'ai été quasimment en silence pendant six longs mois. L'heure du bilan, disais-je. Hopla.
Côté personnel
Je sais, vous vous en fichez comme de votre premier *helloworld* en C, mais ça a sa petite importance. En mai 2014, ma petite famille a déménagé car ma moitié commençait à sévèrement déprimer pour des raisons qui lui sont propres, et je ne me voyais pas tenir encore le reste de l'année dans ces conditions. Du coup cela a eu plusieurs impacts, positifs et négatifs.
Du côté des impacts positifs, j'ai désormais un bureau au sous-sol, une pièce rien qu'à moi où j'ai commencé à entreposer tout mon bazar. Du coup, je m'organise un peu mieux et je peux geeker à tout va sans déranger personne. J'ai ainsi pu installer mon petit coin électronique (et reverse électronique bien sûr), et garder mon super bureau pour les bidouilles informatiques. La bonne nouvelle, c'est que je vais avoir suffisamment de place pour loger mon imprimante 3D, toujours en construction. La mauvaise, c'est que je dois trouver le temps de ranger tout ça (un problème récurrent).
Côté impact négatifs, ça a rendu les derniers mois un peu impossibles: je me cogne désormais pas mal de trajet pour aller bosser (toujours sur Paris), et les mois de Septembre à Décembre ont été rock and roll. Je crois que si je n'avais pas pris deux semaines de vacances entre Noël et le nouvel an, j'aurais fait un arrêt cardiaque. Ou un AVC. Spéciale dédicace à mon médecin qui s'inquiète de ma tension.
OpenIt
Alors forcément, OpenIt en a pris un coup. Je n'ai pas arrêté de travailler sur les projets relatifs à OpenIt, loin de là, mais j'ai du faire une pause entre novembre et décembre. Surtout après avoir loupé des prototypes de cartes d'interface à cause d'une mauvaise vérification due au manque de sommeil. Cela sera corrigé en 2015 (planifié pour début février).
Et maintenant que je fais le point, je me rends compte aussi d'une chose: le crowdfunding tout seul, c'est du retard assuré. Je suis en retard sur: * les trois minitels à transformer en consoles de jeux * les journées à hacker avec de généreux ululeurs que je dois planifier * les autres récompenses que je dois distribuer
Apparemment c'est le lot d'autres projets, mais ça me bouffe un peu quand même. Je suis déçu de pas réussir à tenir les délais que je m'étais imposé, et encore plus de faire traîner tout ça. Je me dis que des gens y croient (moi c'est toujours le cas), et que je vais devoir me défoncer pour au moins terminer tout ça. A noter que la carte d'interface du minitel vers le raspberry est conçue à 99% (reste à faire fabriquer et tester), et que les autres récompenses sont en standby dû à mon fail mentionné ci-avant. Reste les journées à planifier, ce que je compte faire ASAP (d'ailleurs si vous êtes concerné(e)s, n'hésitez pas à me mailer vos disponibilités).
Bref, faut que je sois plus rigoureux et mieux organisé pour cette année. Et vu le moment où j'écris cela (lundi soir, 23h55), ça vous laisse deviner que je suis parti sur le bon pied.
Mes bonnes résolutions
En vrac: * faire des points vidéos pour OpenIt de manière plus régulière, * communiquer un peu plus sur les coulisses, ce que je ne fais pas assez, * envoyer tout plein de trucs geeks aux gens qui le méritent, * relooker un peu le site, * me reposer un peu plus * rester focus sur 2/3 projets max (pas facile celle-là)
Et j'espère que je ne tomberai pas à court d'idées cette année (ma hantise perpétuelle).
Bref, que votre année soit geek/nerd, remplie de jolis hacks et de projets passionnants !