ZeroNights 2013

Après un périple dans le magnifique métro de Moscou, me voilà au pied de ce qui semble être une usine désaffectée tout droit sortie d’Hostel…

Russian style conference : ZeroNights

Ici, tout est en cyrillique et peu de gens parlent anglais. Mon badge en poche je récupère un receiver pour les traductions simultanées et m’installe pour cette première journée.

Après une brève présentation des sponsors, Rafal Wojtczuk, de Bromium démarre sur une rétrospective du sandboxing et de la virtualisation.

Endpoint security via application sandboxing and virtualization – past present future
Rafal Wojtczuk

Rafal parle ici du sandboxing et de la virtualisation au service de l’isolation et non de la détection. En effet, le développement d’applications complexes et sécurisées ne semble pas réalisable et les outils de détection (av, hids, nids…) sont aisément bypassables.

Il présente alors les différentes solutions d’isolation par des exemples et des explications particulièrement bien vulgarisées.

Sandboxie, utilisant un driver niveau kernel, cet outil permet d’empêcher l’exécution de certaines fonctions. C’est donc très efficace pour l’isolation de potentiels malware. En revanche pour des applications sensibles comme les navigateurs, la suite office ou adobe, il est nécessaire d’autoriser un grand nombre de fonctions pour une exécution classique. Ces fonctions seraient donc également accessibles pour un malware exploitant une vulnérabilité dans ces logiciels.

Google Chrome.
Fonctionne avec 2 types de processus.
Des “slaves” pour toute la complexité de rendu html/css/js…
Ils tournent avec des privilèges restreints et communiquent avec le processus “master” via un channel IPC pour toutes les actions nécessitant des privilèges plus important.
Le processus master ne s’occupe donc que de valider ces requêtes avant de les exécuter.
Sa complexité est donc réduite, limitant d’autant plus les risques de bugs.

Mais il reste un problème majeur, les vulnérabilités kernel qui permettent de totalement bypasser ces sandboxs.

Rafal illustre alors ses dires via une petite démo :
Utilisant la vulnérabilité kernel de Duqu (ms11_087) il obtient de l’exécution de code système depuis Chrome lancé lui même dans Sandboxie.

A noter que c’est également ce qu’ont fait les chercheurs de MWR Lab au dernier Pwn2Own.

La solution serait donc de virtualiser l’os et de démarrer le processus sensible à l’intérieur de cette vm.

Cette méthode doit prendre en compte les probables pertes de performance ainsi que la difficulté de gestion de ces VMs.
Bien sur il peut également exister des risques de vulnérabilités dans l’hyperviseur.

Par exemple, Qubes os nécessite une certaine discipline de l’utilisateur afin de bien lancer les applications dans différentes AppVM. De plus il ne fonctionne que sous linux qui n’est pas la plate-forme souffrant le plus d’attaque client.

Enfin, Bromium développé pour Windows et bientôt pour MacOS X semble être le plus abouti.
Chaque instance d’application tourne dans une microVM de manière transparente, comprenant la suite adobe et office, ainsi que les principaux navigateurs.

Dérivé de Xen, Rafal assure que le point d’honneur est mis sur le secure coding de cette solution.

Nous testons actuellement cette solution en lab et pour l’instant les résultats sont plutôt concluant. Aucun ralentissement ne se fait sentir et nous avons pu éprouver l’imperméabilité des microVMs.

En tout cas, ce premier talk fut très bien mené, annonçant une bonne journée.

Après avoir abandonné l’idée d’obtenir un café dans la salle de pause overbondé, je m’installe pour la seconde présentation.

Virtually impossible : The reality of virtualization security
Gal Diskin

Pour rester dans la virtualisation, Gal a démontré a quel point la virtualisation est complexe au point de craindre énormément de vulnérabilités dans les hyperviseurs actuels.

Pour résumer, un Virtual machine manager doit absolument éviter sa compromission depuis une VM guest. Il doit parfaitement segmenter les différentes VMs guest et si possible, maintenir la sécurité des os guest au plus haut (virtualiser NX par exemple).

Il a également présenté en détail tous les mécanismes bas niveau présents dans nos ordinateurs (gestion des devices, de la mémoire…). Tous ces mécanismes qui doivent être virtualisés afin d’éviter le plus possible l’accès direct au hardware depuis les VMs afin de garder le contrôle.

En revanche, les exploits touchant les hyperviseurs seront d’autant plus complexe mais dévastateur. Et Gal semble certains de leur développement.

J’ai alors changé de track pour écouter la présentation sur le protocole HART utilisé en environnement SCADA. Cette fois tout en russe et malheureusement sans traduction simultanée. J’en retiens cette image montrant l’exploitation d’une XXE via un vecteur plutôt tordu. Ça avait l’air intéressant.

https://pbs.twimg.com/media/BYgLEDhCIAA0Q-9.png:large

Je suis donc retourné dans le track 1 pour bénéficier de la traduction mais surtout pour voir @j00ru présenter ses derniers exploits kernel windows.

Il s’est cette fois attaqué au process NTVDM qui virtualise un os 16 bits pour les vieilles applications. Il a alors découvert plusieurs vulnerabilité write-what-where lui permettant d’élever ses privilèges.

Selon lui, la présence de ces bugs “facile à exploiter” vient du fait que Microsoft ne peut pas utiliser ses outils de revue de code automatique sur ces vieilles features écrites en asm.

DbiFuzz framework
Peter Hlavaty @zer0mem

Ce fuzzer, encore à l’état de projet, utiliserait un hyperviseur pour faciliter le contrôle des données fuzzées dans les applications de l’os guest ainsi que leur monitoring en cas de bug.
Il souhaiterait en faire un framework python, intégrable avec idapython par exemple.

Un projet complexe à suivre…

IP fragmentation attack
Tomas Hlavacek

Après un début de présentation laborieux, Tomas a effectué une démonstration très bien détaillée sur cette attaque permettant d’éclaircir le fonctionnement de cette attaque.

Pour essayer de résumer ce que j’ai compris :

Un attaquant spoof l’ip d’un DNS cache server et flood un DNS authoritative server avec des PING : destination unreachable avec le code fragmentation needed.

De cette manière, le DNS authoritative server devrait communiquer par la suite avec le DNS cache server utilisant des paquets fragmentés.

L’attaquant requête alors le DNS authoritative server avec le nom de domaine ciblé pour recevoir un exemple de réponse fragmentée en 2 paquets.

Il modifie alors le second paquet en y mettant son ip comme additional records et modifie l’adresse mac.

La magie opère ici, en “devinant” l’ip ID de la futur fragmentation, il reforge le second paquet avec un checksum UDP valide.

Il envoie alors uniquement ce second paquet au DNS cache server puis lui requête le nom de domaine ciblé.

De ce fait, le DNS cache server va faire la demande au DNS authoritative server qui lui renverra une réponse fragmentée en 2 paquets. Comme le second paquet est déjà arrivé (envoyé par l’attaquant) il reforge une réponse valide mais controlée par l’attaquant.

Vraiment très très bonne démonstration pour une attaque “réseau”.

Le deuxième jour, j’ai assisté au fast track qui était live-traduit. Malheureusement, nombres des slides étaient en cyrillique.

Une présentation de Hesperbot, un malware ciblant les informations bancaires, qui utilise un local proxy et hook les fonctions de vérification de certificat des navigateurs afin de contrôler le contenu des formulaires. De ce fait, il injecte également sur les formulaires des banques une sorte de pop-up invitant l’utilisateur à indiquer son numéro de téléphone mobile.

La victime reçoit alors un sms l’invitant à télécharger une application mobile donnant alors au malware le contrôle du téléphone.

Un malware plutôt évolué mais qui ne communique _pas encore_ via les enceintes du téléphone mobile…

Ensuite, la présentation de Nginx comme proxy pour faire du phishing. Le problème de session sharing dans les CMS utilisés sur des mauvais serveurs partagés.

Enfin, Aleksandr Matrosov et Eugene Rodionov d’ESET ont très brièvement présenter leur nouvel outil, basé sur le SDK d’HexRays : HexRaysCodeXplorer

Cet outil cible la décompilation du code orienté objet et devrait sortir dans le mois.

JSMVCMFG
Mario Heiderich

C’est peut-être la 5ème fois que je vois un talk de Mario et c’est toujours aussi fun et impressionnant !

Il s’est attaqué cette fois aux framework Javascript MVC.

Pour résumer, la présentation de cette framework casse complètement tous les efforts fait pour filtrer des XSS, ils permettent même de bypasser la CSP !

Il a alors présenté une nouveauté de Chrome, les Packaged apps CSP enabled by default. Ce sont des applications types extensions qui ont plus de fonctionnalités que des pages webs, mais utilisent de l’html/css/js. Google conseille l’utilisation d’AngularJS qui permet donc de bypasser la CSP qu’ils ont eux mêmes développés…

Il a alors lancé le programme mustache-security https://code.google.com/p/mustache-security/ afin d’aider au développement de framework javascript plus securisé.

Reversing data formats : what data can reveal
Anton Dorfman

Cette dernière présentation portait sur des principes et méthodologies de reverse de formats de données.

Des techniques avancées d’analyse automatique de données statiques ont alors été présenté et mérite le coup d’oeil :

http://research.microsoft.com/apps/pubs/default.aspx?id=101326

http://static.usenix.org/event/sec07/tech/full_papers/cui/cui.pdf

S’en suivit ensuite un débat autour des BotNets et des DDOS tout en russe que je n’ai pas totalement capté.

Conférence terminée, ZeroNights est une conférence aux talks très intéressants et techniques mais destinée aux russophones et peu tournée vers l’international. (Difficile de demander des pommes de terre aux serveurs pour manger :D).