#SSTIC 2014 - Dernier jour..

Par @Quack1 dans le
Tags : #Sécurité, #SSTIC, #SSTIC 2014, #Job, #planet-libre,
Partagez cet article! ~ Google+ ~ ~ Linkedin ~ Mail
Flattr this

Dernière journée du #SSTIC 2014, un peu moins chargée que les autres. Mais bon, « grosso modo »1, c'est parce qu'il faut bien que les parisiens prennent leur train ;)

Élaboration d'une représentation intermédiaire pour l'exécution concolique et le marquage de données sous Windows par Sébastien Lecomte

Article et Slides

Fuzzgrind est un fuzzer intelligent qui permet de faire de la couverture de code et peut trouver des vulnérabilités dans le code. 1/3 des failles de Windows 7 auraient été découvertes de cette façon.

L'orateur présente un portage de Fuzzgrind vers Windows, en utilisant PIN Tools pour instrumenter le fuzzer. Sauf qu'il faut aussi marquer les données pour suivre leur évolution au cours de l'éxécution du programme. L'orateur présente les valeurs qu'il choisi de marquer ainsi que les méthodes qu'il utilise.

Obfuscation de code Python : amélioration des techniques existantes par Ninon Eyrolles & Serge Guelton

Article

(Encore) une présentation de Quarkslab, cette fois sur l'obfuscation de code Python. Puisque Python est un langage interprété, il est peu obscurssi. Les deux conférenciers présentent plusieurs techniques pour obscurssir du Python.

On peut obfusquer du code Python à trois niveaux :

  • Modifier l'interpréteur ;
  • Obscurssir le code source ;
  • Mixer les deux.

Ils ont pour cela écrit un outil, Python-pack, disponible sur le Github de Quarkslab.

En touchant à l'interpréteur, il est possible de le modifier pour, par exemple, transrormer les opcodes à l'éxécution, ou en rajouter. Par exemple, une addition dans la source sera finalement considérée comme une soustraction à l'exécution. Un billet de blog présentait déjà un peu ça.

Ensuite, on peut également modifier le code source. Par exemple, en rajoutant un méthode modify() avant certaines opérations. Cette fonction va, à l'éxécution, transformer les quelques lignes de code qui suivent. Par exemple, le code suivant :

modify()
b -= 1

pourra être finalement interprété comme :

b += 1

à l'éxécution. De cette manière, on peut ruiner (ou au moins ralentir) les analyses statiques.

On peut aussi utiliser plein de tricks un peu sympa, comme changer tous les noms de variables et fonctions, remplacer les if en while avec des prédicats plus complexes et opaques, modifier le code des fonctions pour le rendre impossible à lire (notamment en utilisant des lambda), etc.

Plus d'exemples sont disponibles dans les actes.

Désobfuscation de DRM par attaques auxiliaires par Camille Mougey & Francis Gabriel

Article et Slides

Un DRM c'est fait pour ne pas être compris par les « profanes ». Le code est donc très souvent obfusqué et impossible à comprendre. Au menu, les paquets réseaux sont obscurssis, le bytecode est aplati, les magic blocks sont découpés en des morceaux plus petits, etc.

À cause de toutes ces mesures, analyser tout le flux d'éxécution d'un DRM est trop coûteux (en même temps, c'est un peu le but aussi 😉 ). Les deux orateurs ont donc décidé de se concentrer sur une seule éxécution pour comprendre le fonctionnement du DRM.

Ils ont pour cela développé un outil, pTrap (pour « Python TRace Analyzer »). Cet outil traite une trace d'execution, fourni une API qui permettra de manipuler la trace et stocke la trace dans une base de données MongoDB, qui pourra être récupérée par Intel PIN, Miasm, IDA, ou encore ollydbg.

Le but est de retrouver des petites briques de code qui permettront de comprendre l'algorithme, la crypto, les mécanismes de dérivation, etc, de trouver les blocs statiques qui contiennent les constantes cryptographiques (pour SHA, AES, etc) et finalement d'identifier les fonctions appelées.

L'approche principalement utilisée ici est, une fois qu'on a trouvé des blocs, de choisir un bloc de « fin », trouver ses I/O, puis de remonter aux fonctions appelantes. On peut de cette façon retracer tout le programme.

Résultat du challenge

Cette année, 20 personnes ont validé le challenge, mais seulement 16 solutions ont été retenues (les autres étaient membres du CP). La validation la plus rapide a été 4 jours, les quelques résolutions suivantes l'ont été dans les 5 jours.

Le challenge était composé de trois parties :

  1. une trace USB réalisée avec un appareil Android et usbmon ;
  2. Un crackme en ARM64 obfusqué ;
  3. Un micro-contrôleur remote écrit en Ruby qu'il fallait casser.

Guillaume Delugré à mis sur Github les scripts qu'il a utilisé pour générer le challende.

Résolution

J'ai pas compris toutes les étapes de la résolution, @G4l4drim a fait ça mieux que moi sur son blog.

Exemple de renforcement de la sécurité d'un OIV par Victor Vuillard

Longue présentation sur la sécurité des « Opérateurs d'Importance Vitale » (ou OIV), et plus précisément des centrales nucléaires d'EDF.

La sécurité dans ce milieu semble plus prise au sérieuse que dans les autres milieux, puisque ici le moindre incident de sécurité à des impacts immédiats et graves (Stuxnet ?). Les RSSI et DSI ont donc des approches plus simples, claires et efficaces de la sécurité, contrairement à certaines autres méthodologies (2700X ?).

Sur des gros périmètres comme ceux d'EDF et des centrales, on retrouve cependant des systèmes souvent très hétérogènes. Le parc est souvent issu du regroupement de plusieurs sociétés rachetées par la maison mère, il est composé de machines fabriquées par des constructeurs différents, des équipes différentes pilotent ces équipements, etc.

En revanche, la sûreté est beaucoup plus avancée sur ces plateformes. Des mécanismes sous-jacents et intégrés aux machines permettent de détecter et empêcher certains cas malveillants de survenir. Par contre, il existe également des contraintes sur le temps d'éxécution (temps contraint, temps réel) qui empêche de mettre en places certaines protections comme des authentifications fortes, de la crypto, etc. Mais comme la division SSI est rattachée à la sûreté, elle peut plus facilement faire mettre en place certaines bonnes pratiques.

Présentation courte: Sécurité de la gestion dynamique des ressources dans le cloud : prise de contrôle sur le déclenchement de migrations automatiques de machines virtuelles par Haiming Zheng & Jalel Ben-Othman & Kahina Lazri & Sylvie Laniepce

Article

Le cloud, c'est le royaume des machines virtuelles. Le problème avec des VM est que, en théorie, pour faire tourner 3 guests qui ont chacun 2Go de RAM et 2 coeurs, il faut normalement un host de minimum 6Go de RAM et 6 coeurs (plus les ressources pour faire tourner l'hyperviseur).

Donc ça revient souvent trop cher d'acheter de tels serveurs, tout en sachant que généralement les VM n'utilisent pas la moitié des ressources qui leur sont allouées. Une solution a donc été trouvée chez les hyperviseurs : prendre des hosts moins puissants2, puis distribuer les ressources à la demande aux VM, quand l'une d'entre elles en à besoin.

Et quand une VM demande trop de ressources, l'hyperviseur déplace une des machines moins gourmandes sur un autre host, pour libérer sur le premier des ressources pour le guest trop gourmand.

On peut donc de cette façon, en contrôlant une VM malveillante qui demandera toujours plus de ressources, entraîner l'hyperviseur à déplacer sans cesse les autres machines sur d'autres hosts, ce qui va donc causer des baisses de performances sur ces machines.

Et si une VM malveillante ne suffit pas, on peut également en contrôler deux sur deux hosts différents (mettons A et B), pour que l'hyperviseur déplace, sans arrêt, des VM de A vers B et des VM de B vers A.

Et le bonus, c'est que lorsque l'hyperviseur déplace une VM, il consomme 30% de la RAM de la VM en plus. On peut comme ça faire tourner l'hyperviseur en bourrique.

Présentation courte : RpcView : un outil d'exploration et de décompilation des MS RPC par Jean-Marie Borello & Jérémy Bouétard & Julien Boutet & Yoanne Girardin

Présentation de RpcView, un outil qui permet de visualiser des RPC Microsoft, de les décompiler puis de les analyser, les modifier et les rejouer. Une démo live nous montre comment on peut demander avec l'outil à plusieurs Stuxnet de se désinstaller.

Présentation courte : Haka : un langage orienté réseaux et sécurité par Kevin Denis & Mehdi Talbi & Paul Fariello & Pierre Sylvain Desse

Article

Haka est nouveau langage permettant de décrire des règles de sécurité. Il se compose de deux parties :

  1. des dissecteurs, qui analysent des flux réseaux (NFQueue ou pcap) et découpe ces paquets en « objets » manipulables dans les règles. Par exemple, pour HTTP, tous les entêtes (Host, User-Agent, etc) seront disponibles pour écrire des filtres ;
  2. les règles de sécurité proprement dites sont donc des filtres qui seront écrits à partir des protocoles précédement analysés. Il est possible de filtrer les paquets reçus, de lancer des actions sur le système (filtrage, etc) ou encore modifier les paquets.

C'est open-source pour ceux qui veulent tester, perso je vois pas de différences avec Suricata, à part que ça doit moins bien tenir la charge mais que les dissecteurs ont l'air plus simples à écrire...

Tutorial Miasm par Fabrice Desclaux

Cette année, pas de conférence de clôture, mais un tutorial sur miasm donné par Fabrice Desclaux et son stagiaire.

Une fois passée la difficile étape d'installation, miasm a l'air d'être un outil assez utile pour faciliter le reverse de binaires.

Pour ce tutorial, une procédure d'installation complète et une archive contenant des binaires/scripts de tests ont été fournis par serpy.

Miasm est donc un « framework Python » qui permet d'instrumenter la façon dont seront reversés des binaires pour faciliter la lecture du bytecode. Fabrice Desclaux nous fait donc une démo live (et en parlant très, très, très, ..., très vite) en partant d'un binaire brut et en améliorant à chaque étape sa lisibilité.

Miasm peut supprimer et regrouper des basic blocks, aplatir de graphe de code ou au contraire le re-transformer en quelque chose de lisible, supprimer les portions de code inutiles, etc... Et à la fin, il est même possible de lancer le débug dans miasm, mais de plugger IDA dessus pour suivre l'éxécution dans IDA tout en profitant des fonctionnalités de miasm. Si on reprend les expressions fétiches de serpy, je pense que «, mon petit poussin, grosso modo, une fois que miasm a enlevé tout le merdier qui sert à rien », on a un binaire vraiment exploitable.

« Grosso modo », c'est un bon outil miasm \o/


  1. Private Joke, vous comprendrez à la fin de l'article... 

  2. On a SUM(VM.ressources) > Host.ressources 

Cet article est libre et diffusé sous une licence Creative Commons CC-BY-NC. Vous pouvez rémunérer son auteur en utilisant le système Flattr :
Flattr this

Comments !