Thursday March 25
09:00 - 10:00 SEH overwrite and its exploitability - Shuichiro Suzuki, Fourteenforty
SEH overwrite est la méthode d'exploitation principale pour les programmes sous Windows. Il existe des méthodes de protection (DEP, SEHOP, SafeSEH). Sont-elles suffisantes ?
SEH est le système de gestion des exceptions employé sous Windows.
Il y a une liste chainée dans la pile. C'est une liste chainée gérant les exceptions.
Le classique stack overflow permet de ré-écrire le pointeur d'entrée de la liste des exceptions.
Suivi d'une description de la callstack quand une exception survient.
Description de SafeSEH. Et d'une faiblesse de SafeSEH. Il existe encore une zone exécutable dans la protection SafeSEH, et le but est de l'utiliser.
Il passe ensuite aux faiblesses de SEHOP (SEH Overwrites Protection).
Une autre protection nommée Hardware DEP empêche l'exécution de code dans l'attribut exécutable. Il y a aussi l'ASLR qui a de nombreux impacts sur SEH.
Il passe à l'explication du contournement de ces protections. L'idée pour contourner SEHOP est de reconstruire une chaine de gestion des exceptions valide.
Pour contourner le Hardware DEP, il utilise des méthodes de type return-into-libc et de return-oriented programming. Ne pas perdre de vue qu'on parle d'un stack overflow, et donc ces techniques fonctionnent.
Liste des choses a faire :
- re-créer la chaine SEH (bypass SEHOP)
- ré-écrire l'exception handler address dans un module non protégé SafeSEH
- créer une pile pour exécuter le code voulu (bypass Hardware DEP)
=> utilisation de memcpy() pour ensuite placer un code ou on veut
...
Demo sous Windows 7. Bon, il nous lance un débogueur, et fait de l'exécution pas à pas pour bien tout comprendre sur un programme vulnérable.
ASLR rend difficile la création d'une chaine SEH valide. Il rend aussi difficile de trouver les instructions utiles à une adresse fixe.
Conclusion : cette présentation demande de fortes compétences en exploitation de failles sous Windows. Sans ca, c'est difficile de comprendre les tenants et les aboutissants. Pour terminer, il donne un tableau des conditions d'exploitation en fonction des différentes protections.
10:00 - 10:30 Second Breakfast
Je reconfigure ma carte WiFi qui a décidé de ne plus fonctionner :/
Mise en place de connexion sur le bon AP, établissement de mon tunnel SSH préféré avec du DynamicForwarding pour éviter tout risque d'écoute de mon trafic. Vive les serveurs dédiés sur Internet.
10:30 - 11:30 There's a party at ring0, and you're invited. - Julien Tinnes & Tavis Ormandy, Google
Ils bossent dans l'Information Security team de Google.
Il y a du sandboxing dans Google Chrome et Android.
Le talk est a propos du kernel comme cible des attaques de type local privilege escalation.
Deux types de bug kernel : memory management corruption et bug de logique.
Exemple de bugs de logique : CVE-2001-1384, CVE-2003-0123.
Exemple de bugs de mémoire : CVE-2003-0961.
En milieu kernel, on contrôle tout l'espace d'adressage, on accède à la complexité de gestion de l'espace mémoire.
Exploiter le kernel sert par exemple à : sortir de chroot(), contourner les MAC, contourner les vserver.
Pour bien se protéger, il vaut mieux utiliser un suite de protection kernel comme grsecurity.
Avant, ce genre d'attaque n'était pas très répendues sous Windows, mais cela change.
Très peu de remote kernel exploits pour Linux (publics en tout cas).
Certains bugs sont exploitables en remote via le Web browser (exemple : faille dans le driver nVidia).
Grande surface d'attaque pour le kernel : ioctls, devices, kernel parsers. Filesystems, network protocols, format des exécutables ...
Demo orientée kernel Windows.
Ils ont trouvé un moyen de placer le bit supervisor à 1 en exploitant une faille. Ce qui donne un accès au mode Virtaul-8086 (ring0?).
GDI a été deplacé du userland vers le kernelland pour des raisons de performances. Mais le GDI est ce qu'il y a de plus simple à exploiter à distance. Par exemple via IE, en accédant aux fonts (TTF) qui sont gérées via GDI.
Description d'une faille dans le parsing des fonts TTF (donc, code exécuté en ring0).
Description de l'exploitation des NULL pointer dereferences sous Linux.
Exemple d'une faille découverte par eux : CVE-2009-2692. NULL pointer dereference en local via sock_sendpage. sock_sendpage à un modèle de fonctionnement fragile, puisque nécessite la MAJ de tous les modèles si on modifie certaines fonctions pointées dans la structure proto_ops.
Par exemple, pour une faille, une structure était initialisée à NULL. Il suffisait de placer son shellcode à NULL pour qu'il soit exécuté au lancement.
Puis ils ont trouvé un autre bug de même type : CVE-2009-2698 dans udp_sendmsg.
Suivi d'un exemple d'exploitation pour fasync, une faille de type use-after-free.
Suivi d'un exemple d'exploitation sous NetBSD.
Explication sur la syscall interface sous Windows : compliquée, instable, et non documentée. Vaste aussi (300 sous Linux). Normalement seulement utilisé par du code Microsoft. Les syscall sont très vulnérable au fuzzing car peu résistants aux mauvaises entrées. Et comme le kernel parse des fonts, des pixmaps, la syscall interface est un excellent candidat au fuzzing. Plus facile de trouver des bugs en fuzzant la syscall sous Windows sur sous Linux.
Solution pour se protéger contre les privileges escalation : TPE (Trusted Path Executables). Facile à contourner sous Linux, à moins d'utiliser grsecurity. Gagne en popularité sous Windows. Pour contourner cette protection; on peut utiliser des failles dans des programmes interprétés (Python, Perl, ...).
Autre solution : le sandboxing, à base de chroot() et de ptrace() (lent et difficile à mettre en place). SECCOMP-based sandbox aussi (sera peut-être implémenté dans Chrome-Linux).
Mais si on ne peut protéger le kernel, l'utilisation de la virtualisation peut être une alternative.
Une autre bonne protection pour le kernel Linux est l'utilisation de PaX, qui utilise des techniques de limitation de permissions dans le kernel.
Conclusion : Si le kernel trust une donnée userspace, une faille de sécurité de type escalade de privilège existe. Cela vaut pour l'existence d'une donnée, mais aussi pour l'absence d'une donnée. En gros, c'était une liste d'exemple d'exploitation de bugs kernel sous Linux et Windows. Tavis est plus Windows, et Julien plus Linux.
La surface d'attaque kernel est grande et grossit de plus en plus. De plus en plus facile à atteindre en remote. La difficulté d'exploitation va de simple à très dur. Les technos de prévention d'exploitation en kernel sont aujourd'hui immatures.
En gros, les sandbox c'est bien, mais il y a toujours une surface d'attaque depuis la sandbox vers le kernel qu'il est difficile de protéger.
Lien : http://blog.cr0.org/2010/03/theres-party-at-ring0-and-youre-invited.html
11:30 - 12:30 Babysitting an army of monkeys: an analysis of fuzzing 4 products with 5 lines of Python - Charlie Miller, Independent Security Evaluators
Fuzzing de 4 produits en 5 lignes de Python.
Fuzzing de PDF (Preview et Acrobat Reader).
Fuzzing de PPT (OpenOffice et PowerPoinet).
Dumb fuzzing : faire des modifications sur un fichier correct.
Smart fuzzing : utiliser des entrées créatives "from scratch".
Compromis : utilisation de dumb fuzzing avec de nombreux fichiers différents. Idée : avec suffisamment de fichiers en entrée, on peut couvrir une grande surface des fonctionnalités offertes par le format.
Mais toujours la limitation du CRC et de la compression sur ces fichiers.
Méthodologie :
- download de plus de 80 000 fichiers PDF depuis Internet.
- Acrobat Reader + Valgrind sous Linux pour mesurer la couverture de code.
- réduit à ~1500 fichiers
Le fuzzer de 5 lignes:
- change juste des bytes au hasard par des valeurs prisent au hasard.
- ne rien supprimer, ne rien ajouter.
Utilisation de son framework de fuzzing parallèle (Tiamat).
Scripté par AppleScript et monitoring du CPU pour savoir quand lancer le fichier suivant. Enregistrement des crashs répétés.
Utilisation de libgmalloc (comme libefence) pour détecter les heap overflow sous Mac OS.
Utilisation de memcheck (outil Valgrind) pour simuler l'exécution de programme et enregistrer les opérations mémoire invalides. Détection sous Linux.
Crashwrangler classe les bugs en disant si ils sont exploitables ou pas.
Le fuzzing est une histoire de filtrage. Filtrage des résultats pour les classer en crash, exploitables, ...
Recherche des crashs donnant des EIP uniques grâce à libgmalloc et Valgrind.
S'ensuit une liste de chiffres sur le classement, et le nombre de bugs exploitables au final. Lancement de plus de 3 millions de tests depuis 1500 fichiers PDF.
Plus on fuzz un fichier unique, plus on trouve de faille exploitables:
500 => 1;
1000 => 2;
1500 => 3;
2000 => 4;
...
Ensuite même chose, mais contre Preview (viewer PDF sous Mac OS).
Ensuite même chose, mais contre les fichiers PPT d'OpenOffice.
Ensuite même chose, mais contre les fichiers PPT d'Office.
L'orateur a fini par faire un check lui-même pour vérifier l'exploitabilité de ce qu'il a trouvé. Il est souvent d'accord avec le résultat de Crashwrangler. L'autre programme pour tester s'appelle !exploitable et donne des résultats moins fiables.
Conclusion : plus on fait d'itérations sur ces 5 lignes de Python, plus ou trouve de bugs exploitables. L'idée intéressante ici était de prendre des fichiers valides, et de modifier 1 byte de manière aléatoire dans chacun de ceux-ci, et d'itérer sur chacun un grand nombre de fois pour avoir le plus grand nombre de fichiers de fuzzinga différents. Mais l'orateur arrive à une conclusion étonnante : les outils qu'il utilise ne sont pas doués pour détecter les erreurs et l'exploitabilité ... Beaucoup de chiffres affichés, difficile de tirer une conclusion claire.
ooo
Un gars éteint son ordinateur portable sous Windows. Je vois l'écran de mise à jour : 72 patchs restants ...
ooo
12:30 - 13:30 Lunch
13:30 - 14:30 ShareREing is Caring - Halvar Flake and Sebastian Porst, zynamics GmbH
EScript.api (Adobe Reader JavaSript Engine). Le talk est a propos d'un plugin IDA Pro nommée BinCrowd. BinCrowd a permis de détecter que c'est en fait l'engine SpiderMonkey qui est derrière EScript.api. Cela a été possible sans le code source associé.
L'idée est de trouver les programmes intégrant les mêmes bibliothèques non-dynamiques dans leur code. Ainsi, si on trouve une faille dans un programme A qui intègre une bibliothèque vulnérable, on peut trouver les autres programmes qui ont aussi cette faille.
S'ensuit une description de l'algorithme permettant l'identification de duplication de bibliothèque. C'est une fonction de hash pour un graphe. Ainsi, une comparaison numéraire est possible. Mais en fait, a l'usage, cela se montre trop limité, et il est nécessaire de développer un algo pour gérer un callgraph complet avec les adresses de fonctions associées.
BinCrowd est aussi une solution pour faire du RE entre équipes qui ont un différent niveau d'accréditation. Les données sensibles ne peuvent être transmises entre équipes qui ne possède pas le même niveau. Ainsi, il est possible de partager le travail, mais pas les données sensibles. Cela fonctionne comme un middleware, avec une base de données centrale, et un contrôle du transfert des informations.
Tout le monde peut utiliser BinCrowd, le plugin (opensource?) ainsi qu'un compte sont nécessaires.
14:30 - 15:30 Cisco IOS Exploitation with IODIDE - Andy Davis, KPMG
Il fait de la rechercher sécurité chez KPMG en Angleterre.
IODIDE est un IOS débogueur et un Integrated Disassembler Environment écrit en Python. Il communique avec IOS via le remote gdb intégré. Il a une interface graphique.
S'ensuit une explication du fonctionnement du gdb Cisco (qui varie au niveau du remote protocole par rapport à celui d'un gdb standard).
Le gdb Cisco ne supporte qu'un nombre limité de commandes. On peut s'y connecter via IP où un accès port série.
Démo.
Grâce à cet outil, on peut utiliser un débogueur ressemblant à OllyDbg pour voir l'état des registres, les exceptions, l'état de la pile, ainsi que le code désassemblé ... le tout en remote. Le débogueur a vraiment l'air puissant. Recherche de données en mémoire. Obtention de la liste des process. Affichage de la configuration Cisco actuelle. On peut aussi modifier les registres et la mémoire.
L'environnement de désassemblage est pas mal non-plus, il permet d'ajouter des commentaires de manière simple.
Ensuite un historique des failles IOS. Stack et heap overflows. Format string (mais seulement fuite d'information, pas de %n chez IOS).
Mike Lynn a été le premier à créer un shellcode pour IOS (un connect-back shellcode) mais qui n'a jamais été diffusé.
IOS est un gros binaire ELF dont toutes les fonctions ont des adresses différentes en fonction de la version d'IOS. Le processeur est du PowerPC.
Identifier la version exacte est très difficile. Si l'ont utilise une adresse incorrecte lors d'une tentative d'exploitation, le router reboute.
Étude de cas sur une faille dans le serveur FTP. Un stack overflow dans le verbe MKD. S'ensuit une explication de l'exploitation des stack overflow sur architecture PowerPC. L'équivalent de EIP sous x86 est ici LR (Link Register). L'adresse que nous souhaitons utiliser pour lancer le shellcode se retrouvera dans le PC (Program Counter).
Le shellcode devra supprimer le prompt pour un password au login, et donner un accès "level 15" équivalent à root. Et surtout, sortir de manière propre sans crasher le routeur. Pour supprimer le password prompt, il écrit la valeur 1 à un offset. Pour accroitre les privilèges, il écrit la valeur 0x1f000000 à un autre offset. Pour sortir de manière propre, il fait l'équivalent d'un kill(-1), pour se tuer lui-même. Mais ca ne coupe que la connexion, pas le service FTP.
Il a diffusé un shellcode (cassé) en juillet 2008.
Maintenant, il utilise un méthode return-oriented programming. Il utilise le propre code PowerPC pour écrire une adresse où il veut.
En 2 paquets, il obtient la suppression du password prompt, et l'élévation de privilèges. Mais il utilise des adresses hard-codées.
Utilisation du syscall #34 pour accéder à la chaine de version IOS. Utilise la fonction send() pour retourner l'info via la socket ouverte.
Démo. Via IODIDE (Exploit Edition), il exploite la faille. Pas mal.
Conclusion : excellent outil de débogage et désassemblage. A mon avis excellent pour écrire des exploits IOS. Pas grand monde fait de la recherche sur l'exploitation IOS; plein de boulot en perspective dans le domaine. IODIDE ne supporte que PowerPC pour le moment. Il sera releasé en open source (mais pas l'Exploit Edition).
15:30 - 16:00 Break
16:00 - 17:00 Random tales from a mobile phone hacker - Collin Mulliner
Checheur en sécurité sur les appareils mobiles. Tout ce qui possède une carte SIM.
Découverte de fuite d'information et exploitation à l'aide d'URI "from hell" principalement.
Tout d'abord fuite d'information par connexion à des sites Web via le navigateur intégré au téléphone mobile. Aujourd'hui les téléphones ont un vrai navigateur (WAP est mort), et l'accès au Web est populaire.
- MSISDN : numéro de téléphone.
- IMSI : SIM card ID
- IMEI : phone ID
Rumeur : certains téléphones feraient fuir des infos privées via les en-têtes HTTP.
Du coup, il a mis un place un logging systématique des en-têtes HTTP sur son serveur Web qui est assez populaire. Il peut collecter des données pour vérifier.
Quelques exemples :
- Rogers : opérateur Canadien révèle le MSISDN.
- H3G Italie : révèle aussi le MSISDN.
- Vodafone aussi.
- Orange UK aussi, et bien plus encore.
- Pelephone, Israel, fait fuir le MSISDN, l'IMSI et l'IMEI clairement dans les en-têtes.
Et l'énumération continue, c'est l'hécatombe.
Certains encodent l'info en Hex ^^
D'autres infos souvent remontées : customer ID, point de connexion (APN).
Apparemment, les téléphones n'ont pas ces infos, elles sont donc ajoutées par un proxy/gateway de l'opérateur. Le sujet des Web proxy de téléphones semble compliqué.
Démo. Une liste d'information capturées avec des statistiques.
L'orateur trouve étonnant que ces fuites d'informations n'aient pas eu une plus grande attention médiatique.
L'orateur fournit un lien pour valider son opérateur (sans qu'il ne logue, rires) : http://www.mulliner.org/pc.cgi
Ensuite on passe au hack du Kindle. Il possède une carte SIM qui marche sur tout téléphone, mais sans voix ni SMS. On peut seulement accéder au net via un proxy hardcodé chez amazon.com. Le trafic est rejeté si il ne vient pas du navigateur du Kindle. Mais comment ?
Utilisation de privoxy (ou Modify Header) pour ajouter un en-tête x-fsn. L'outil Tethering implémente ca. Le hack permet un accès complet à Internet.
Ensuite il passe a Digital Picture Frame (HUAWEI DP230). Il a un modem et une carte SIM et un numéro de téléphone ... Désossage, branchement sur le port série puis accès shell (admin:admin). Il peut recevoir des SMS et possède un accès GPRS. Un SMS en XML permet de modifier la conf de l'appareil, comme par exemple modifier l'image de fond. Il doit par contre être originaire d'un numéro spécifique. Spoofer ce numéro est assez facile. Des services en ligne le fond pour pas cher.
C'est le download des binaires qui a permis de reverser ce fonctionnement.
Quelques attaques:
- désactiver l'accès Internet "<req><GPRS apn="brick"/></req>"
- effacer toutes les images
Conclusion : les numéros assignés par les opérateurs sont guessable. On peut bricker tout un parc de machine de ce genre en brute-forçant un petit espace de numéros.
Il passe ensuite sur les cartes pré-payées. Quand le compte est vide, le trafic est redirigé vers un portail Web pour la recharge. On peut faire du DNS tunnel comme ca ^^ mais c'est identifiable par l'opérateur à cause de la nécessité d'avoir un endpoint DNS. Ça reste du tunnel DNS sur une connexion 3G, les performances ne sont pas super.
Maintenant les URIs from hell : des protocoles spéciaux implémentés dans les navigateurs des téléphones. C'est facile de faire crasher un téléphone avec du JavaScript embarqué dans un site Web malicieux, les téléphones trouvant automatiquement les URI qui les intéressent. Pour l'iPhone, une attaque permet le lancement d'un appel automatique via un iframe et un URI de type "sms:" ou "tel:" (<iframe src="sms:numéro" ...>). Avec une chaine trop longue dans le "sms:" URI, le téléphone freeze (CVE-2009-0961). Pour l'instant, ca fait juste apparaitre la fenêtre d'envoi de SMS ou d'appel. Pas d'automatisation possible.
Conclusion : il n'y a pas que les smartphones dans la vie, il faut penser aussi aux simples? téléphones, aux réseaux des opérateurs mobiles et au "Consumer Electronics Devices".
17:00 - 18:00 Legal Perspectives of Hardware Hacking - Jennifer Granick, EFF
Présentation orientée lois aux US. Mais utile, car si on enfreint les lois US depuis un autre pays, on peut être poursuivi en posant les pieds chez eux (en gros).
L'EFF travail sur le droit des développeurs, sur les DRM, ...
Nouveauté : accéder à du software embarqué viol le DMCA.
Elle n'aborde pas les violations de brevets, ni les "trade secrets". Les présentation est donc orientée violation du DMCA.
Quelques exemples : iPhone jailbreaking, calculatrices TI, Kindle
Souvent, les attaques s'articulent autour de la signature des composants (la chaine de confiance TPM). Et donc à une attaque ciblée sur les clés de signature. Pour le Kindle, c'est une méthode pour contourner le DRM.
Note : pour la calculatrice TI : la clé privée est dérivée de la clé publique :)
Le fait que les clés de signatures soit faibles n'entre pas en compte lors d'une poursuite judiciaire.
Ce qu'il faut retenir :
- éviter de cliquer pour accepter le EULA
- avoir l'autorisation du fabriquant du produit
- et d'autres encore.
Un talk sur la légalité que je n'ai pas vraiment suivi.
Question ouverte : pourquoi dans toutes les conférences de sécurité, la seule femme qui présente parle des aspects légaux ?
18:00 - 19:00 Lightning Talks - Various
ooo
La fille qui s'occupe de faire le gong entre les talks boit une bière. Elle prend une pause comme dans une pub. D'ailleurs, les gens qui font un lightning talk ont le droit à une bière.
ooo
- CSP (Content Security Policy)
- URL shorteners (utilisation d'encoder de shellcode alphanumeric pour les URI véhiculant un exploit genre smb://long_string, et on place dans un URL shortener, et ca passe) (Saumil Shah)
- Waledac Botnet (Thorsten Holz) Attaque Sybil pour couper une partie du réseau P2P.
- 2600 Hz or not, Jon Van Boxtel
Saumil gagne le prix du meilleur talk.
20:00 - 1:00 Party Venue TBA