06
mars
'15

Frida, la nouvelle amie des reversers et hackers

Publié le 06 mars 2015

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)

05
févr.
'15

Bonne année 0x7df !

Publié le 05 février 2015

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 !

23
juil.
'14

Et nos libertés, c'est du pâté ?

Publié le 23 juillet 2014

Internet c'est mal, c'est peuplé de pédonazis et de terroristes, alors hein si ce n'est pas une bonne raison pour instaurer un permis Internet et vous surveiller, je ne vois pas ce que l'on peut faire de mieux. Quoi ? vos libertés ?

Il n'y a plus l'Internet, mais plusieurs Internet

C'est un constat flagrant mais quelque peu désolant. Non, l'Internet originel n'est plus. Le fait qu'il ait évolué est une très bonne chose, car cela montre bien qu'il est devenu nécessaire, mais malheureusement nous n'avons à notre disposition qu'une version d'un Internet que l'on veut nous laisser accéder, que l'on accepte bien que l'on utilise. Il y a l'Internet de Facebook, dans lequel on reste ... sur Facebook, et l'Internet de Google, dans lequel on reste aussi chez Google et ses services associés. Il y a aussi l'Internet "civilisé", où tout le monde poste des commentaires courtois sur des forums ou des billets de blog, et où l'on se salue gentiment. En bref, nous utilisons un Internet déjà restreint, limité, différent. Et si l'on souhaite passer outre, c'est de suite suspect.

On peut aussi citer les projets de loi divers, aux Etats-Unis et même ici en France, visant à contourner la nécessité de contrôle par un juge pour donner toute puissance côté filtrage de sites à une autorité administrative, sous prétexte de lutte contre le terrorisme et en se moquant ouvertement de ce que pense le CNNum. Car oui, c'est maintenant que 'lon brade une partie de nos libertés, mises dans les mains de ceux qui ne comprennent pas grand chose mais qui souhaitent faire avancer le schmilblick. Mieux vaut mal faire que ne rien faire, qu'ils disent.

L'Internet, cette zone de non-droit

On nous rabâche assez souvent, et cela depuis plusieurs années et peu importe les gouvernements, qu'Internet est une zone de non-droit. En faisant mouche: l'insécurité sur Internet est flagrante, et d'autant plus mise en avant par les médias. Vols d'information banquaires, diffamation sur les réseaux sociaux, pédopornographie et trafic de drogue sont semble-t-il monnaie courante. Sans parler des vilains cyber-pirates qui s'en prennent aux Etats. Une zone de non-droit, que l'on vous dit. Mais non, il n'y a rien de plus faux.

Internet n'est pas une zone de non-droit, car le droit s'y applique: de nombreuses affaires de piratage, de pédopornographie, de trafic de drogue sont amenées devant les tribunaux. Que ce soit Kim "DotCom" Schmidt, SilkRoad, les différentes affaires d'insultes et propos antisémites sur Twitter, ou encore Bluetouff et son "google hacking". La justice fait son travail. Présenter l'Internet comme un endroit peuplé de vils méchants pirates et personnes mal-intentionnés, c'est tout simplement réduire l'Internet à son côté sombre.

Le véritable problème, celui auquel on n'a pas encore trouvé de solution, est en réalité inhérent à la manière dont Internet a été pensé: le maillage et la dissémination des ressources. Car si Internet n'est pas une zone de non-droit, il n'en reste pas moins un vaste un réseau couvrant le monde et autant de juridictions, avec chacune d'entre elles leur particularité. Ajoutez à cela le fait que n'importe qui peut, en quelques clics, ouvrir un site web ou un blog et y diffuser ce que bon lui semble, et vous obtenez un affreux micmac impossible à "réguler" à l'échelle française. L'Internet n'a pas de frontières. Bloquer un site web, c'est retirer des chemins permettant d'accéder à une ressource., mais grâce au maillage d'Internet, il est possible de trouver d'autres chemins permettant de l'atteindre. Sans parler des réseaux au sein même du réseau, comme les systèmes ToR ou Freenet, qui ajoutent en complexité. Vouloir réguler l'Internet comme on régule l'accès à un lieu, en bloquant toutes les issues, reviendrait à figer celui-ci et aller à l'encontre de son essence même.

Combattre la menace terroriste

Le blocage va donc clairement à l'encontre du réseau, qui de par sa nature offrira toujours des moyens de contournement. Ainsi, pour empêcher le recrutement des jeunes et limiter leurs envies d'aller faire la Guerre Sainte ailleurs, peut-être devrions-nous songer à utiliser les mêmes armes. Mettre dans les mains d'une autorité administrative un aussi grand pouvoir que celui de vouloir d'une part donner droit de vie et de mort sur des sites web, et d'autre part d'instaurer une suspicion obligatoire de la part des fournisseurs de services (comme les hébergeurs), revient à jouer avec le feu. Car à un moment ou à un autre, ce formidable outil de censure (car ce n'est rien moins que cela) pourra être détourné de son usage sans contrôle. Pour arriver aux résultats que l'on connaît, comme cela a pu être observé au [Royaume-Uni->http://neosting.net/royaume-unis-filtrage-porno-inefficace-abusif-dangereux-gac] ou en Australie. Il existe d'autres moyens.

Si l'on met de côté le blocage des sites, comment pouvons-nous faire pour limiter le recrutement ? Ne nous leurrons pas: si un adolescent souhaite se renseigner sur ces sujets, il trouvera de l'aide quoiqu'il arrive: l'Internet regorge de personnes et de sites. La suppression de l'information à la source, via la fermeture du site par exemple (sous contrôle d'un juge) n'est pas assez efficace, car trop lent et au final rapidement sujette à l'apparition de sites miroirs. Sacré effet Streisand. Si l'on essaie de faire disparaître l'information, alors elle n'en sera que plus présente.

Pourquoi ne pas envisager la lutte contre ce fléau d'une autre manière ? Disons d'une manière déceptive, en utilisant les mêmes armes. Créons une foultitude de messages sur les forums, pointant vers des adresses de courriel inexistantes ou des sites complètement bidons, noyons les dans un flot d'information complètement idiot mais faisant en sorte que ceux-ci soient bien référencés. Quand on n'arrivera plus à différencier un site/message de recrutement réel d'un de ces faux sites/messages, nous pourrons considérer que le problème sera en partie résolu. Noyons l'information, utilisons la force de l'Internet pour rendre les messages concernés minoritaires et difficiles à trouver.

Et nos libertés dans tout ça ?

Ah oui, nos chères libertés... Si nous arrivons à convaincre que le flicage massif et le filtrage n'ont au final aucun avenir, alors nous pourrons certainement envisager un Internet un poil plus sain. Et pour ce faire, nous pouvons faire confiance à des organismes dont le principal effort consiste à sensibiliser nos politiques sur ce sujet, à les travailler au corps pour leur faire comprendre les principes fondamentaux de l'Internet, mais surtout à leur montrer pourquoi l'on tient tout particulièrement à cet Internet là. Même s'il n'est pas parfait. Même si on peut encore l'améliorer. Des organismes comme La Quadrature du Net par exemple, qui manquent cruellement de moyens. Soutenons-les, donnons-leurs les moyens d'agir pour nos droits, pour que les politiques et les personnes qui se sentent concernés par les problématiques actuelles puissent appréhender tous les enjeux qu'entourent leurs propositions de loi.



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.