03
janv.
'21

Wrap-up 2020 & welcome 2021 !

Publié le 03 janvier 2021

L'année 2020 est désormais terminée, l'occasion de faire le bilan de cette année qui fut, je pense que tout le monde en conviendra, bien pourrie. Entre épidémie de COVID-19, l'école à la maison, le télétravail à plein temps, les WTFs politiques, l'annulation de (presque) tous les events sécu ou leur report en 2021, et surtout la plongée dans l'incertitude causée par le virus et la gestion de ce dernier, cela a été éprouvant. Je profite donc du passage à la nouvelle année pour faire le point sur ce qu'a été pour moi 2020, et comment j'envisage cette nouvelle année.

Confinement

2020 m'a appris dès le mois de mars plusieurs choses importantes. La première et pas des moindres, c'est que les professeurs des écoles ont bien du courage. J'ai eu mes deux affreux comme élèves chaque matinée pendant le confinement (enfin presque, ma moitié a pris le relais certaines semaines), et ce n'était pas de la tarte. J'ai du réorganiser mes journées durant les premières semaines afin de concilier école à la maison et boulot à distance, ce qui me faisait des journées bien chargées (9h - 3h). J'ai tenu le rythme pendant deux semaines, youpi.

La seconde, c'est l'importance d'avoir une pièce à part pour le télétravail. C'est priceless. Lorsque j'ai emmenagé dans ma maison actuelle, j'avais prévu une pièce dédiée pour mon bureau car j'étais déjà à cette période régulièrement en télétravail. Du coup quand on s'est retrouvé confinés, je pouvais bosser dans une pièce à part avec tout le matériel requis (écran externe, clavier, souris, connexion FTTH, fauteuil confortable), ce qui était très appréciable. J'ai de nombreux collègues et amis qui ont pété des câbles à force de bosser dans leur salon ou leur cuisine, encore plus lorsqu'ils habitent sur Paris.

La troisième et dernière, c'est qu'il est important de prendre du temps pour soi. Avec toute la famille à la maison, je n'avais plus d'instants de solitude tels ceux que j'avais régulièrement dans les transports en commun, et c'est vite devenu pesant. Difficile de trouver un moment calme pour prendre du temps pour moi, que ce soit pour des hobbies ou plus simplement être tranquille. J'ai pris l'habitude de me réserver deux ou trois heures la nuit, entre 23h et 1h ou 2h du matin, afin de vaquer à des occupations diverses et souffler. Et ça m'a permis de mieux tenir, je crois.

This is fine.

Rentrée 2020

Après un été complètement déconnecté, la reprise en septembre s'est passée relativement bien. Et chargée, aussi. Toujours en télétravail. La différence avec mars, c'est que la plupart des gens avec qui j'étais en contact pour le boulot se sont habitués aux réunions à distance, et l'activité a ainsi pu reprendre son cours. A ce moment précis, le moral n'était pas au top mais tenait le coup.

C'est à ce moment que je me suis rendu compte des dégâts du confinement. Je pensais m'en être assez bien sorti, car bon le télétravail cela fait quelques années que je pratique et j'estimais avoir un moral solide. Au final, je pense avoir fait une mini-dépression (comme pas mal de monde d'après les statistiques), et je ne m'en suis pas rendu compte de suite. Pour ne rien arranger, la structure chargée de la garde à domicile de mes loulous nous a clairement fait comprendre qu'ils n'avaient plus personne (à cause du COVID), et il a donc fallu gérer cela en parallèle.

Je me suis ainsi retrouvé plusieurs soirs devant mon ordinateur, à vouloir bosser sur des projets persos et au final terminer sur youtube à regarder des vidéos inintéressantes pendant des heures. Jusqu'à me rendre compte que je n'ai rien fait, et désespérer de ne rien avancer (alors que ce n'était pas les projets qui manquaient).

Débuts sur Twitch

Fort de ce constat, je me suis demandé si Twitch ne pourrait pas être une solution. Je connaissais Twitch de par le confinement et pour y avoir streamé une fois dans le cadre de PlopSec, et plus j'y pensais et plus cela semblait intéressant. Twitch offre une proximité, une interaction, qui me rappellaient les évènements sécu qui commençaient à me manquer. Peut-être que ce que je fais habituellement dans le cadre de mes projets persos pouvait intéresser du monde ? En ce qui me concerne, je pensais qu'avoir du monde qui me regarde avancer mes projets allait me donner un coup de pied au derrière et m'éviter de tomber dans les méandres de youtube. Aussi, avant de me lancer, j'ai sondé Twitter:

Le retour a été très positif, et c'est comme cela qu'ont commencé en septembre mes premiers lives sur Twitch, l'occasion d'avancer réellement les projets qui étaient dans les cartons. Comme les deux super-minitels qu'il me restait à terminer suite au financement participatif de OpenIt, et que je devais réaliser depuis des années, et qui sont encore attendus par deux des backers. Ce projet demandait pas mal de boulot, car il fallait refaire la carte électronique dans son intégralité pour l'adapter aux dernières évolutions des Raspberry Pi (la première version étant conçu pour un Raspberry Pi 1). Ou encore le reverse de mon Ninja Badge de la DEFCON 18 (2010), que je m'étais promis de faire depuis que je l'ai eu.

Au final, le coup de pied au derrière a été bénéfique et je suis encore étonné du nombre de personnes qui suivent mes lives techniques, et qui parfois avouent ne pas trop comprendre mais trouvent ça cool ! J'ai ainsi pu bien avancer mes projets et découvrir des streamers français qui font aussi des trucs super cools (coucou CabriDIY, Neodyme et iooner, Barbatronic et Yorzian a.k.a. Yves Rougy), tout en étant soutenu par de plus en plus de personnes durant les lives. C'est un peu stressant au début, mais je crois que je me suis pris au jeu et ce qui devait être à l'origine occasionnel est désormais plutôt régulier. Encore un grand merci à toutes les personnes qui sont passés durant les lives, qui suivent plus ou moins de près mes projets et celles qui ont été là dès le début. C'est ultra-motivant, et sincèrement je pense que cela a rendu la fin d'année plus agréable et suportable malgré les circonstances actuelles !

Un grand merci aussi aux potos de YesWeHack qui ont tenu à me fournir un PC digne de ce nom pour que je puisse streamer en toute quiétude et avec une qualité décente, ça me change des fins de live à 10 fps avec un CPU à 90% ! J'ai un peu investi afin d'améliorer l'image durant les lives, en particulier pour tout ce qui concerne l'électronique et le DIY en général. On verra si ça fonctionne assez rapidement, je pense.

Quoi de neuf pour 2021 ?

Maintenant que 2020 est désormais derrière nous, il est temps de se concentrer sur 2021 et les projets sur lesquels je compte avancer (faudra quand même prioriser avant):

  • Les deux super-minitels à terminer ;
  • La hackwatch, a.k.a la transformation d'une smartwatch en outil de hack portable pour WiFi et Bluetooth Low Energy ;
  • Un hack de vieux téléphones à cadrans rotatifs pour en faire des interphones sans-fil pour la maison ;
  • Mon avion RC conçu maison et imprimé en 3D ;
  • Un panneau "ON AIR" automatisé pour la porte du bureau, histoire de pas être dérangé durant des calls ;
  • Un challenge hardware maison à destination de ceux qui veulent débuter en reverse hardware et software ;
  • Un ou plusieurs gadgets interactifs pour égayer les lives Twitch.

Voilà les différentes idées que j'ai eu pour cette nouvelle année, et c'est sans parler des mini-projets de reverse hardware qui seront faits en live, des replays de talks précédents ou encore d'autres idées qui pourraient survenir durant l'année. D'ailleurs, si vous en avez n'hésitez pas à m'en faire part sur Twitter ou lors d'un live Twitch ! Mon objectif principal consiste à boucler au plus vite les super-minitels pour les envoyer à leurs destinataires, histoire de combler la dette que j'ai auprès des backers du financement participatif, et ensuite de m'éclater à faire ces projets en live avec les wins et les fails habituels !

Enfin, j'aimerais pouvoir refaire des talks lors de conférences mais pour l'instant je n'ai aucune visibilité sur l'organisation de ces dernières. Les conférences en ligne c'est bien, mais il manque sincèrement l'interaction avec le public, ce qui fait que c'est beaucoup moins drôle à faire. On verra en fonction des idées de talks et de l'évolution de la situation globale. Mais je n'attends qu'une seule chose, pouvoir remonter sur une scène lors d'une conférence et partager mes hacks/tools/whatever avec plein de gens (et partager/échanger autour d'une bière ou d'un coca lors d'un event). Et j'espère que cela pourra se faire en 2021.

Pour finir

Bonne année à tous, j'espère qu'elle sera bien mieux que l'année 2020 ! Hackez plein de trucs, bidouillez dans la joie et la bonne humeur 😄. Pensez à prendre le temps de prendre soin de vous, de chérir les personnes qui vous sont proches, de profiter de la vie. Si 2020 nous a enseigné au moins une chose, c'est bien cela.

09
déc.
'20

Attaquer du ZigBee pour moins de 10€ ? Yes we can !

Publié le 09 décembre 2020

to (Killer)bee or not to (Killer)bee

Je me suis récemment attaqué à la rétro-ingénierie du Ninja Badge de la DEFCON 18, et il se trouve que ce badge communique avec d'autres badges similaires via la couche MAC du protocole ZigBee (IEEE 802.15.4). Disposant d'un HackRF One, j'ai réussi à décoder les messages envoyés à l'aide de Gnuradio Companion, mais il m'était très difficile de coder un outil permettant de faire de l'envoi et de la réception en simultané, le HackRF One n'étant pas full-duplex. Il m'a donc fallu trouver un plan B.

Quand il s'agit de recevoir et de transmettre des paquets ZigBee, le framework Killerbee sauve pas mal la vie. Ce framework écrit en Python s'interface avec des équipements adaptés, et est en mesure de sniffer et injecter des paquets ZigBee. Enfin, quand on l'utilise avec des équipements qui le permettent. En effet, le seul device abordable qui était compatible avec ce framework est le RZ Raven d'ATMEL, dont la production a été arrêtée et qui est actuellement introuvable. Les équipements restants sont plus coûteux, comme l'ApiMote d'Attify (150$), le TelosB Mote, ou encore des cartes Silicon Labs compatibles (~300€). Par ailleurs, il existe bien un second équipement pas cher, une clé USB à base de TI CC2531, mais cette dernière ne supporte que le sniffing, ce qui ne me suffisait pas.

Une clé TI CC2531

J'ai donc commandé une de ces clés USB à base de TI CC2531, et j'ai réussi à capturer des paquets ZigBee et à débuter l'analyse du protocole de communication du badge. Cependant, impossible d'envoyer de manière fiable des paquets, et donc d'interagir avec ce dernier. Je commençais sérieusement à douter du framework, et songeais à trouver une solution alternative. Il était clair à ce moment que personne n'avait implémenté le support de l'injection de paquet pour cette clé USB, malgré plusieurs demandes faites via des issues sur leur repository Github. La réponse apportée ? "Do it yourself", si je résume le propos. Eh bien faisons ça alors.

Création d'un firmware pour le TI CC2531

Ayant déjà développé sur des puces gérant des communications radio dans le cadre de mes recherches sur le protocole Bluetooth Low Energy, développer un firmware spécifique pour la puce TI CC2531 ne me faisait pas tellement peur. Par contre, si je pouvais éviter d'y passer trois semaines, ça m'arrangerait passablement. J'ai donc commencé à scruter le web à la recherche de kits de développement permettant de développer pour cette puce, avec potentiellement le support de la couche radio déjà disponible. Je suis assez rapidement tombé sur le code de Contiki, un micro-système d'exploitation qui supporte notamment la puce en question. Et pour lequel la couche radio est déjà implémentée, yippie !

Je me suis donc lancé dans le développement de ce firmware, en ajoutant une couche de communication par port série (exposé via la connectique USB) afin de piloter la puce à partir d'un ordinateur qui communique avec le code gérant la radio. La structure de Contiki, qui propose un semblant de processus, permet d'implémenter cela de manière très simple. Le premier test a pu être rapidement effectué, et s'est montré très concluant: j'arrivais à sniffer et transmettre des paquets ZigBee, autrement dit j'avais une bonne base de travail. J'ai bouclé le développement du firmware en moins d'une semaine, et mis le code à disposition (ainsi qu'une release pré-compilée) sur mon repository Github associé.

Ajout d'un driver à Killerbee

Développer un firmware c'est bien, mais faire en sorte que Killerbee puisse communiquer avec est encore mieux. En parallèle, j'ai donc implémenté un driver spécifique dans le framework Killerbee, capable de communiquer avec le firmware en question et qui supporte ainsi le sniffing et l'injection de paquets. Ce développement a été effectué sur la branche py3 du projet, qui n'est pas encore la version 3.0 officielle de Killerbee mais qui devrait l'être une fois que le portage sur Python 3.0 sera terminé, grâce à la réactivité de RiverLoopSec qui a poussé des modifications en attente quand je les ai sollicité sur Twitter (encore merci à eux !).

Ce driver est ainsi capable de sniffer des paquets ZigBee, avec pour seule limitation que ces paquets doivent avoir un FCS (une somme de contrôle) valide (il est possible d'ajouter le support des paquets invalides, mais je ne l'ai pas encore fait). Il est par ailleurs capable d'envoyer des paquets, là encore sans possibilité de contrôler le FCS. Mais c'est bien suffisant pour ce que j'ai à faire sur ce matériel. Il a d'ailleurs fallu trouver un petit nom à ce firmware, et celui proposé par tartofraise lors d'un live Twitch a été retenu: Bumblebee.

Le code du driver est intégré dans mon fork de Killerbee, disponible en suivant ce lien.

Comment installer et utiliser Bumblebee ?

Le code source et une version pré-compilée du firmware ont été rendus publics sur mon dépôt Github associé, qui détaille par ailleurs plusieurs méthodes permettant d'installer ce dernier sur une clé TI CC2531. Basiquement, il vous faudra un programmateur CC-Debugger, ou un Raspberry Pi voire un Arduino. Une fois le firmware installé sur la clé, cette dernière est prête à l'emploi.

Sur l'ordinateur, installer killerbee à l'aide de l'outillage Python:

$ git clone --branch py3 https://github.com/virtualabs/killerbee.git
$ cd killerbee
$ python3 setup.py sdist
$ sudo pip3 install dist/killerbee-2.7.1.tgz

Killerbee est installé et prêt à l'emploi, y compris le support de Bumblebee. Vous pouvez désormais utiliser tous les outils classiques de Killerbee avec cette clé USB !

Si vous trouvez des bugs, ou souhaitez des améliorations, n'hésitez pas à soumettre des issues ou des feature requests, et pourquoi pas des pull requests !

06
juil.
'20

2020 est décidemment une année bien pourrie.

Publié le 06 juillet 2020
David Marclay (aka Dvrasp)

Je ne pensais pas écrire ce bout de texte maintenant, mais il semblerait qu'il en ait été décidé autrement. Un coup de fil d'un ami proche, passé un samedi midi ensoleillé, et que j'ai loupé car occupé à préparer le repas avec ma petite famille. J'ai répondu par SMS un "Tu voulais ?", histoire de voir si ça pouvait se régler simplement en quelques messages échangés. "Rappelle, important". Ce que je fis, donc. Pour apprendre que David M a.k.a dvrasp, un ami de longue date, s'est éteint la veille sans crier gare. Après Paolo, Peter, Simon, la communauté HZV perd un de ses plus anciens membres. Et nous, eh bien, on en a gros.

Ma première rencontre avec David s'est passé sur IRC, le Discord des vieux. A l'époque, j'étais étudiant et m'amusais à creuser le format de fichier des programmes exécutables de Windows, et je l'ai contacté pour savoir s'il y avait moyen de publier un article dans feu The Hackademy Magazine, dont il était rédacteur en chef. Il a trouvé l'idée sympa, et c'est ainsi que mon premier article est paru, en 2005. Ma première rencontre IRL avec David s'est déroulée quelques mois plus tard, quand nous discutions avec la société d'édition pour laquelle il travaillait d'un projet de magazine que nous souhaitions lancer, XeLoRy et moi-même. Ce premier vrai contact m'a marqué: j'ai découvert une personne qui semblait très réfléchie, ouverte et amicale. Nous avons assez peu échangé ce jour là, en vérité. Ce fut pour moi l'occasion de mettre un visage sur un pseudonyme, ce qui n'était pas rien. Nous avons continué à échanger par la suite, des articles, des idées, du code. Jusqu'à ce qu'il me fasse suivre une offre d'emploi.

A ce moment là, ma situation personnelle était assez précaire: j'étais étudiant, en couple, avec un loyer et une voiture, mais de maigres revenus. J'avais pris la décision de chercher du travail afin de pouvoir être serein et démarrer dans la vie active, et nous en avions discuté. David et moi étions d'accord sur le fait que pigiste n'était pas une situation d'avenir, surtout avec les retards de paiement de la société d'édition. Quand quelqu'un l'a contacté pour savoir s'il pouvait passer une annonce pour une offre d'emploi particulière, il y a jeté un oeil et a directement pensé à moi. Il s'agissait d'un poste d'ingénieur de développement C/C++ pour lequel des connaissances en reverse engineering étaient souhaitées. J'ai lu en diagonale l'offre, et me suis arrêté sur "Vous êtes diplômé(e) d'une école d'ingénieur ou équivalent universitaire (Bac + 5)". Je lui ai répondu que je n'avais pas ce niveau, et donc que je ne correspondais pas au profil. Il a insisté. Durant un mois, presque. Jusqu'à ce que je me décide à envoyer une lettre de motivation et un CV. Deux semaines plus tard, après un entretien téléphonique et un rendez-vous à Paris, j'étais embauché. "Je te l'avais dit que ton profil ferait l'affaire !", m'a-t-il répondu lorsque je lui annonçait la nouvelle. C'est grâce à David que j'ai eu mon premier job. Pas moins que ça.

Nous nous croisions régulièrement durant les meetings HZV organisés à Sysdream, l'occasion de discuter autour d'une bière ou quinze, mais aussi lors des Nuits du Hack que nous organisions plus ou moins de façon anticipée. Je me rappelle en particulier de la Nuit du Hack 2007, lorsque nous rentrions chacun chez nous via le premier RER du matin (ou presque). David était en face de moi, sa sacoche sur les genoux. Il l'ouvre, regarde dedans, et sort un "Ohhh meeerde ! Je crois que j'ai oublié mon laptop !" ... avant de se raviser et de sortir un ordinateur portable qui prenait toute la place dans la sacoche. Ainsi qu'un petit livre intitulé "Memoirs of a virus programmer", qu'il me présente comme étant un excellent ouvrage que je devrais lire, et me le donne ensuite. Nous nous quitterons quelques stations plus loin, nous donnant rendez-vous à un prochain meeting HZV ou à la prochaine Nuit du Hack, ou encore sur IRC. J'avalais le livre dans la semaine et effectivement, ce fut une lecture très intéressante. Quelques années plus tard, c'est à 4 heures du matin que l'on s'est retrouvé pour rédiger les slides de la présentation que je donnais le jour même lors d'une Nuit du Hack. L'occasion de bien rigoler et de fignoler le support d'un talk en y intégrant des références subtiles (ou pas), tout en l'ayant lui comme public fictif, challengeant mes arguments et posant des questions afin d'améliorer ma préparation.

J'ai ce souvenir de David, quelqu'un de sincère et généreux, intelligent et perspicace, avec qui j'ai eu de nombreuses discussions éclairées ou éclairantes. Je garde ces quelques anecdotes de lui et bien d'autres (mais impossible de toutes les narrer dans un billet de blog), ces moments simples où l'on se marrait, sa bienveillance. Repose en paix, l'ami.



Les contenus disponibles sur ce blog sont publiés sous licence Creative Commons BY-NC-SA.
Vous pouvez réutiliser tout ou partie de ces contenus à condition de citer l'auteur et l'origine, vous ne pouvez en faire une utilisation commerciale, et enfin vous devez partager tout travail ou œuvre dérivée sous les mêmes conditions — c'est-à-dire avec la même licence d'utilisation Creative Commons.