Yet another security blog ...

Aller au contenu | Aller au menu | Aller à la recherche

samedi, juin 20 2009

Origami framework release

Voici la première release d'Origami, le framework Ruby que j'ai développé dans le but de manipuler des fichiers PDF malicieux.

C'est une première mouture en alpha, elle n'est donc pas exempte de bugs, et il lui manque encore pas mal de fonctionnalités.
Il est possible de créer des fichiers PDF, de les parser, de les modifier et de les recompiler.

Pour plus d'informations, je vous conseille de vous rendre sur la page principale d'Origami.

samedi, mars 21 2009

Mise-à-jour de sécurité : Adobe Reader 9.1

Il y a quelques jours est sortie la version 9.1 du lecteur PDF d'Adobe.

Cette version corrige notamment un buffer overflow critique dans le traitement des flux compressés en JBIG2. La vulnérabilité que nous avions présentée à PacSec permettant de contourner la configuration du filtrage des pièces jointes dans la version 9.0 a elle aussi été corrigée au passage.

vendredi, décembre 26 2008

Ollydbg version 2 beta

La première version beta de la v2 du débogueur est à présent disponible !

http://www.ollydbg.de/version2.html

Joyeuses fêtes :)

mercredi, novembre 19 2008

PacSec 08 - Origami in PDF Slides

Hello,

de retour du pays du soleil levant, voici les slides de notre présentation sur la sécurité du format PDF et d'Adobe Reader à PacSec : http://seclabs.org/fred/docs/pacsec08/

Comme c'est un peu long (plus de 100 pages), on a eu quelques problèmes avec les traducteurs. On a donc fait une version "short" d'environ 80 pages pour que ça tienne aussi sur une heure.

Bonne lecture :)

Guillaume

mercredi, octobre 29 2008

PacSec '08 Talk

Après quelques mois de recherche et développement sur le sujet, j'ai été retenu pour coprésenter une conférence lors de la prochaine édition de PacSec.

Elle se déroulera entre les 12 et 13 Novembre, au Aoyama Diamond Hall, à Tokyo au Japon.

Intitulé Malicious origami in PDF, le talk que je tiendrai en compagnie de Frederic Raynal, concernera les problèmes de sécurité liés à l'évolution du format PDF et à son implémentation principale Adobe Reader.

Voici la liste, encore provisoire, des présentations qui devraient s'y dérouler au long de ces deux jours:

  • Putting an SSH server in your NIC - Arrigo Trulzi
  • Gone in 900 Seconds, Some Crypto Issues with WPA - Erik Tews
  • Browser Memory Protection Bypasses: Virtual Machines - Mark Dowd, IBM
  • Cross domain leakiness: Divulging sensitive information and attacking SSL sessions - Chris Evans & Billy Rios, Google, Microsoft
  • Flash XSS - Rich Cannings, Google
  • Malicious origami in PDF - Frederic Raynal, Guillaume Delugre
  • Security for Virtual and Physical Server Environment - Akiko Takahashi
  • Living in the RIA World (Flash/Air, Silverlight, Gears, Prism, BrowserNow, HTML5) - David Thiel, iSec
  • Understanding Cross-Domain Models and Threats - Peleus Uhley, Adobe
  • Gaining access through Kerberos - Emmanuel Bouillon
  • A new web attack vector: Script Fragmentation - Stephan Chenette, WebSense
  • Countermeasure to SSH Brute Force Attack according to behaviour - Tetsuo Handa
  • Advances in Automated Attack Planning - Carlos Sarraute & Alejandro David Weil, Core
  • Inside "Winnyp", Winnyp Internals and Concepts of Network Crawling - Toshiaki Ishiyama, Fourteenforty

mercredi, juillet 23 2008

Syscalls story

J'ai trouvé un vieux bout de code écrit en C++ qui dormait sur mon disque.

C'est juste un petit programme que j'avais écrit il y a longtemps, et qui permet d'exporter la table des indices des appels système dans une en-tête C (.h). Ca peut servir dans les cas où il faut faire quelques bidouilles sur la SSDT d'un système, ou des trucs pas très clairs dans ce genre là :)

Il suffit de lancer l'exécutable, et ça génère le .h en sortie :

ntsyscalls.PNG

J'y avais inclus les résultats pour un 2000 SP4, un XP SP2, un 2003 SP1 et un Vista RC1. Grosso modo, on peut constater l'inflation du nombre de syscalls au fil des nouvelles versions de Windows. La version de Vista que j'utilisais mettait à disposition 400 appels système, contre 248 pour le 2000 SP4.

De 2000 à XP, on peut y voir la disparition des appels suivants :

  • ZwCreateChannel
  • ZwGetTickCount
  • ZwListenChannel
  • ZwOpenChannel
  • ZwReplyWaitSendChannel
  • ZwSendWaitReplyChannel
  • ZwSetContextChannel

En regardant le code de GetTickCount dans kernel32.dll, on peut trouver à la place, à partir de XP, un mystérieux (si quelqu'un peut m'expliquer, ça m'intéresse) :

MOV EDX,7FFE0000
MOV EAX,DWORD PTR DS:[EDX]
MUL DWORD PTR DS:[EDX+4]
SHRD EAX,EDX,18
RETN

En échange de cela, XP a introduit une quarantaine de nouveaux appels, 2003 en a apporté une douzaine, et Vista plus d'une centaine... Le tout portant la somme à plus ou moins 400 appels pour Vista.

A titre de comparaison débile, un noyau Linux 2.6 supporte actuellement environ 330 appels système sur x86.

Parmi les nouveaux appels de Vista, on peut remarquer :

  • ZwGetNextProcess
  • ZwGetNextThread

Qui permettent certainement de lister les processus et les threads du système.

  • ZwCreateThreadEx

Qui doit probablement aussi être utilisée pour créer un thread dans un autre processus. Si tel est le cas (je n'ai pas de Vista sous la main pour vérifier), ça permettrait aux antivirus de hooker directement les appels à CreateRemoteThread.

Le reste des nouveaux appels possèdent des noms assez nébuleux ou excentriques, et il ne me semble pas qu'il existe d'analyse en profondeur de leur fonctionnement qui en soit faite encore aujourd'hui.

Un tableau résumé des appels pour chaque version de Windows peut-être consulté sur le site du projet Metasploit.

samedi, avril 26 2008

UnKK - Unpacker pour kkrunchy

kkrunchy est un packer particulièrement prisé par les groupes de demomaking.

Il a été codé par un membre du célèbre groupe de demomakers germanique Farbrausch, ryg, et il est régulièrement utilisé par de gros groupes comme Fairlight, Conspiracy, Equinox ou bien entendu Farbrausch.

Il possède la particularité de posséder un très grand facteur de compression, au détriment d’une vitesse de décompression très lente (plusieurs Mo par seconde pour la version alpha, et plusieurs secondes par Mo dans sa version alpha2...).

Il n’est pour cette raison pratiquement jamais utilisé en dehors du contexte demoscenique, son intérêt résidant principalement dans la conception de démos 64Ko.

A titre de comparaison, j’ai compressé l’exécutable de Putty avec kkrunchy et UPX.

  • L’original fait une taille de 412 Ko.
  • Celui compressé par UPX fait un peu plus de 200 Ko.
  • Celui compressé par kkrunchy fait moins de 160 Ko.



unkk.png

Voici un unpacker pour sa version 0.23a et 0.23a2, qui sont les dernières releases en date depuis 3 ans.

J’ai tâché de faire en sorte que les exécutables en sortie soient relativement optimisés niveau taille, en déplacant et réinjectant certaines structures dans le PE.

Les sources ne sont pas excessivement commentées, voilà donc un bref résumé de ce que fait UnKK :

  • UnKK joue le rôle de débogueur pour l’exécutable cible. Il le trace au fur et à mesure jusqu’à arriver à l’Original Entry Point. Au passage, il intercepte dans la mémoire du processus cible, la liste des imports, ainsi que l’adresse où débute la décompression.
  • Le processus est alors dumpé en mémoire. Des corrections sont apportées de façon à obtenir un exécutable opérationnel :
  • L’Import Table est reconstituée à partir des informations obtenues en mémoire et réinjectée dans le PE (celle-ci a été totalement supprimée par kkrunchy) et l’IAT est reconstruite.
  • Les ressources, en partie déplacées dans le stub de kkrunchy, sont réinjectées dans le PE.
  • Le stub de kkrunchy est supprimé du fichier, l’ImageBase est corrigée.
  • Les RVA du PE sont recalculées par rapport à la nouvelle ImageBase.
  • Le padding est supprimé.
  • Les en-têtes PE sont corrigées pour la nouvelle taille.
  • Le dump est sauvegardé sur le disque.

Voilà le binaire et les sources. Merci de me faire part de tout bug ou correction à effectuer.

mercredi, décembre 5 2007

Unpacker UPX version 2 sous Linux

Suite au tutorial d'unpacking pour la version 1.25 d'UPX pour Linux, voici son homologue pour les versions 2.02 et 3.01, qui sont à l'heure actuelle les dernières en date La méthode présentée ici n'a plus rien à voir avec la précédente, la routine de décompression d'UPX a été grandement améliorée à partir de la 2.02 : plus de passage par un fichier temporaire sur le disque, toute la décompression se déroule dans l'espace d'adressage du processus.

Lire la suite...

Unpacker UPX version 1 sous Linux

Certaines personnes peuvent se demander quel est l’intérêt d’analyser ma- nuellement une routine de décompression au niveau binaire, alors que UPX est un opensource et qu’il suffirait donc juste de jeter un oeil au code. L’intérêt n’est evidemment pas dans l’unpacking lui même, mais dans les méthodes utilisées qui peuvent se retrouver pour l’analyse de packers dont les sources ne sont pas disponibles. De surcroit, UPX constitue un cas très simple à analyser et mettre en pratique ce qui présente l’avantage d’être un bon point de départ pour quelqu’un désirant s’investir dans le sujet. A l’heure où j’écris, UPX en est à sa version 3.01 et la méthode présentée dans cet article ne s’applique plus. Cependant il reste intéressant pour des débutants en rétroingénierie sur GNU/Linux.

Lire la suite...

mardi, décembre 4 2007

Blog EntryPoint

Premier blog, premier billet !

Il est vrai que les blogs ont plutôt le vent en poupe en ce moment, il faut bien que je me mette au goût du jour.

J'en profiterai donc pour publier ici les articles, les snippets ou releases en tout genre qui seraient susceptibles d'intéresser certaines personnes. Ceux-ci traiteront notamment de rétroingénierie et certaines seront publiés en parallèle sur le site de la FRET.