Sygus.net

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

Mot-clé - sécurité

Fil des billets - Fil des commentaires

samedi, janvier 14 2012

Netzob : un outil de rétro-conception de protocoles de communication

Ce billet pour vous annoncer la sortie d’un outil libre de rétro-ingénierie de protocoles de communication : Netzob*. Il s’agit d’un projet sur lequel je travaille depuis plusieurs mois avec un collègue de travail (@Lapeluche), et qui vient combler un vide apparent en termes d’outils publics d’analyse de protocoles propriétaires.

Plusieurs cas d’usages sont visés à travers cet outil :

  • le développement d’une implémentation libre d’un protocole de communication propriétaire (ou non documenté) ;
  • l’analyse de sécurité (fuzzing “intelligent”, avec compréhension du protocole) sur des implémentations de protocoles propriétaires ;
  • la simulation de trafic réaliste de protocoles de communication propriétaires dans le but de tester des produits tiers (pare-feux, IDS, …) ;
  • l’analyse de flux de communication inconnus à la recherche de données sensibles ;
  • etc.

La version actuelle (0.3.1) fonctionne sous Linux, et implémente déjà pas mal de fonctionnalités permettant de capturer des messages depuis différentes sources, d’identifier le format des messages (inférence du vocabulaire) ainsi que la machine à états d’un protocole (inférence de la grammaire).

Les protocoles visés par cet outil ne sont pas simplement des protocoles réseau. L’objectif est de supporter un maximum de canaux de communication, comme le montre la figure suivante. Actuellement, l’outil support les flux réseau, les fichiers PCAP, les flux inter-processus et les fichiers structurés.

Flux de communication

Quelques slides présentent brièvement l’outil, les mécanismes et les algorithmes sous-jacents. Il existe également une petite vidéo présentant un panorama des fonctionnalité de Netzob (capture de données à partir d’un fichier, inférence du vocabulaire, construction de la grammaire puis simulation de trafic) sur un cas simple :

http://vimeo.com/34964757

Les infos utiles :

(*NETwork protocol modeliZatiOn By reverse engineering.)

samedi, juin 12 2010

SSTIC 2010 : quelle orientation pour la sécurité ?

Le SSTIC 2010 s'est terminé sur une remarque intéressante concernant la tendance qu'à la communauté de la sécurité à privilégier la recherche de vulnérabilité au détriment de l'élaboration de systèmes réellement sécurisés. Je pense qu'il faut distinguer deux choses :

  • la vision court terme : l'analyse de sécurité d'un système spécifique (site web, applications, COTS, etc.) et la nécessité, pour faire bouger les choses, de démontrer que des vulnérabilités sont effectivement exploitables ;
  • la vision moyen/long terme : la nécessité de créer des cadres sécurisés dans lesquels des erreurs de développement ou d'utilisation ne mettent pas en péril la sécurité des systèmes.

Je crois moyennement à l'éducation des utilisateurs et des développeurs aux bonnes pratiques de sécurité (hormis à quelques règles de base, et encore...). Même après de nombreuses séances de sensibilisation, de formation, ou de démonstration, par l'exemple, de l'existence de vulnérabilités, il restera toujours quelques personnes qui coderont avec les pieds, introduisant alors une faille dans le système. Bref, l'éducation de 100% des gens aux bonnes pratiques me semble illusoire comme objectif et comme horizon pour que la situation s'améliore significativement.

Il faut plutôt considérer les utilisateurs et développeurs d'applications comme des sources potentielles de vulnérabilités. Je pense donc que le petit monde de la sécurité doit avant tout s'atteler à créer des cadres dans lesquels les utilisateurs et les développeurs peuvent se tromper, faire des erreurs, sans mettre en péril la sécurité des systèmes. Autrement dit, créer des systèmes tolérants aux failles et créer des environnements de développement empêchant de coder avec les pieds. Les différents guides de bonnes pratiques et de recommandations sont biensur intéressants et nécessaires. Cependant, un vrai environnement de développement sécurisé devrait être capable d'imposer de lui-même ces règles. La porte dérobée introduite involontairement dans le challenge SSTIC est un exemple typique d'erreur de développement. Un environnement de développement sécurisé devrait être capable de détecter, par exemple, de telles mauvaises utilisations d'API crypto.

Pour des systèmes tolérants aux failles, il s'agit notamment d'atténuer le risque d'exploitation. Voici quelques exemples de mécanismes ou de pistes qu'il est pourtant possible de mettre en place pour tenter de se protéger des programmes vulnérables :

  • activer les différents mécanismes qui rendent difficiles les exploitations en mémoire (bit NX, DEP, PaX, ASLR, canaris, UDEREF, etc.) ;
  • mettre en place ces mêmes mécanismes au niveau noyau ;
  • sandboxer les processus (chroot, SECCOMP) et les drivers (avec l'IOMMU) ;
  • limiter les droits des processus (capabilities sous Linux, etc.) ;
  • sortir des systèmes monolithiques (dont la moindre faille dans un driver ou une sous-partie obscure du noyau expose l'ensemble du noyau), pour utiliser des OS à base de micro-noyau (L4, Hurd, Coyotos, etc.) combinant les principes de moindre privilège et de minimalité ;
  • etc., etc. ;
  • d'autres mécanismes restent encore à imaginer !

Il existe des OS ou des prototypes d'OS durcis (Qubes, Gentoo Hardened, SeL4, etc.). Ces exemples doivent devenir la norme dans les futurs déploiements ou devenir la base de travail pour les futurs OS opérationnels.

mercredi, juin 3 2009

La mémoire sous Linux : analyse de /dev/mem

Le système de fichiers /dev sous Linux offre un moyen élégant d'accéder directement aux périphériques d'une machine, et notamment à sa mémoire physique par l'intermédiaire de /dev/mem. L'objectif de ce billet est de présenter le fonctionnement de /dev/mem sur un Linux 2.6.26-2 tournant sur une architecture x86 32 bits, et de voir quelles sont les différentes restrictions d'accès.

/dev/mem offre un accès direct à la mémoire physique du système (mémoire RAM, mémoire graphique, BIOS, etc.). L'analyse de ce fichier peut être facilitée par la lecture d'un autre fichier spécial, /proc/iomem, qui présente le mapping des périphériques au sein de la mémoire physique. Le mapping sur le système étudié est le suivant :

00000000-0009fbff : System RAM
0009fc00-0009ffff : reserved
000a0000-000bffff : Video RAM area
000c0000-000cffff : Video ROM
000e0000-000e17ff : Adapter ROM
000f0000-000fffff : System ROM
00100000-3ffeffff : System RAM
00100000-002ba4ea : Kernel code
002ba4eb-0037661f : Kernel data
003bc000-0041f57f : Kernel bss
...

Autrement dit, le BIOS est accessible dans l'espace d'adressage physique 0x000f0000-0x000fffff, la mémoire graphique est mappée dans 0x000a0000-0x000cffff, et la mémoire RAM, mappée à partir de 16 Mo (c'est à dire dans la ZONE_NORMAL et dans la ZONE_HIGHMEM : voir cet ancien article), est atteignable entre 0x00100000 et 0x3ffeffff. Ce dernier espace fait 1 Go. Ca tombe bien, c'est précisément la taille de la mémoire RAM de la machine :

$ cat /proc/meminfo 
MemTotal:      1036084 kB
...

/proc/iomem nous informe également de l'emplacement du code du noyau et de ses segments de données .data et .bss. Les éléments du noyau (code et données) sont donc directement accessibles en lecture et en écriture par /dev/mem. Biensur, n'importe qui ne peut pas lire ce périphérique : il faut soit être root, soit donner la bonne capability à un processus non-root. Ce dernier cas de figure est typiquement adapté pour le serveur graphique X, qui dépend de /dev/mem pour récupérer des informations liées à la carte graphique, et dont son exécution avec les privilèges root n'est pas nécessaire (hormis pour l'accès à dev/mem). Il suffit de lui donner la capability CAP_SYS_RAWIO, qui autorise, notamment, l'accès à /dev/mem. Ensuite, il faut placer l'utilisateur exécutant le serveur X dans le groupe kmem. L'exemple suivant illustre la mise en place d'une capability propre à l'exécutable dd, lui permettant de lire dans /dev/mem sans la nécessité d'être exécuté en root.

$ cp /bin/dd /tmp/dd
$ sudo setcap cap_sys_rawio=ep /tmp/dd
$ cat /etc/group
...
kmem:x:15:sygus
...
$ /tmp/dd if=/dev/mem of=/tmp/mem.dump 
1835008+0 enregistrements lus
1835008+0 enregistrements écrits
939524096 bytes (940 MB) copied, 17,7379 s, 53,0 MB/s

L'accès à l'intégralité de la mémoire n'est néanmoins pas pertinent d'un point de vue sécurité : la compromission d'un processus root ou d'un processus ayant la capability CAP_SYS_RAWIO peut permettre à un attaquant d'accéder directement à tout le noyau. Il est heureusement possible de configurer Linux pour limiter l'accès à /dev/mem uniquement au premier Mo de mémoire physique et seulement aux pages mémoire ne correspondant pas à de la RAM (ce qui est suffisant pour faire tourner X). C'est d'ailleurs le comportement par défaut sur Ubuntu, mais pas sur Debian Lenny. La restriction d'accès au premier Mo s'active avec l'option CONFIG_NONPROMISC_DEVMEM introduite sur le 2.6.26 (ou CONFIG_STRICT_DEVMEM sur les versions de Linux depuis le 2.6.27) lors de la compilation du noyau. Voici le résultat d'une tentative de lecture de l'ensemble de /dev/mem :

$ sudo dd if=/dev/mem of=/tmp/mem2.dump 
dd: reading `/dev/mem': Operation not permitted
2056+0 records in
2056+0 records out
1052672 bytes (1.1 MB) copied, 0.149356 seconds, 7.0 MB/s

Hop, bloqué au premier Mo... Ou plus exactement au bout de 256+1 pages mémoires ; la dernière page mémoire étant considérée comme appartenant au BIOS par certains systèmes.

Il existe d'autres mécanismes restreignant l'accès à /dev/mem. Citons le patch GrSecurity qui intègre une protection de l'accès à /dev/mem : il empêche l'accès en écriture sur l'ensemble de la mémoire physique. GrSecurity réalise cependant une exception pour le processus correspondant au serveur X.

Bref, bien que /dev/mem ait longtemps été considéré comme une trou de sécurité important, il est possible de limiter de manière importante ses droits d'accès à la mémoire système (option CONFIG_STRICT_DEVMEM du noyau), ou de limiter l'accès en écriture (patch GrSecurity).

samedi, juin 7 2008

SSTIC 2008 : la sécurité s'invite à Rennes

Frédéric Guihéry Le microcosme de la sécurité informatique avait rendez-vous les 4, 5 et 6 juin à l'université de Rennes 1 pour une nouvelle édition du SSTIC. L'occasion pour des personnes d'horizons divers d'échanger et de présenter leurs recherches. Comme chaque année, et ce depuis 6 éditions (la 3ème pour moi), l'équipe du SSTIC nous propose une brochette de conférences couvrant les principaux thèmes de la sécurité des systèmes d'information : un peu d'organisationnel et de juridique, des présentations de projets (ERESI, GenDbg, SinFP) et pas mal d'analyses techniques avec aussi bien de la crypto, de la virologie, du reverse que des attaques matérielles, applicatives ou systèmes. L'accent a été clairement mis sur les techniques d'analyses statique et dynamique de code avec des conférences sur des méthodes de rétroingénierie et de déboguage noyau/processus. Des techniques très intéressantes, qui servent aussi bien les intêrets des attaquants (compréhension des vulnérabilités en analysant les patchs de sécurité) que des défenseurs (analyse de malwares pour comprendre comment ils se propagent sur nos systèmes).

En vrac, les points à retenir (ou pas...) :

  • la possibilité de faire évader de l'information grace aux variations de la vitesse de rotation sur les ventilos des processeurs.
  • Debian en a pris pour son grade à propos de la faille OpenSSL.
  • ivanlef0u n'est pas un bot IRC.
  • le bus Firewire doit définitivement être supprimé sur les machines. Bon ok, l'accès à la mémoire physique par DMA n'est pas nouveau, mais les utilisations possibles sont assez sympas.
  • il faut tout faire pour éviter les zombies.
  • le piégeage de processeur offre pas mal de possibilités d'attaques. Mais bon, si on va dans ce sens, on peut imaginer tout un tas de backdoor matérielles. A mon sens, l'hypothèse de départ est quand même à la limite d'être réaliste.
  • stopper les grands réseaux d'envois de spams/malwares est une utopie à partir du moment ou certains domaines et/ou plate-formes d'hébergements se situent dans des zones juridiquemet inatteignables.
  • chez INL, ils s'amusent plutôt bien.
  • le patch pour l'attaque de -nikoteen est le suivant : "so strong, that I can't get through". Et ça marche !!

Un point important cette année, est la volonté de pas mal d'équipes de recherche de diffuser librement les sources de leurs projets. Je pense notamment aux projets ERESI et SinFP, de même qu'à plusieurs outils présentés pendant les rumps sessions. De plus, en regardant les portables présents dans le public, il est frappant de voir qu'un bon nombre utilisent des OS libre, typiquement Linux, avec une majorité de Debian et d'Ubuntu. Il est donc clair que la communauté du logiciel libre est plutôt bien représentée dans le monde de la sécurité. J'ai d'ailleurs croisé quelques têtes aperçues au FOSDEM et aux RMLL.

Plus généralement, il est intéressant de voir que la sécurité "ouverte", par opposition à la sécurité par l'obfuscation, est prédominante dans ce genre de conférence. Le logiciel libre a donc un rôle important à jouer, aussi bien pour assurer l'indépendance technologique d'un état ou d'une société vis-à-vis de solutions propriétaires étrangères, que pour permettre une maîtrise du code exécuté, ce qui est d'autant plus important pour des solutions de sécurité. Et quoi qu'en disent les détracteurs du logiciel libre, qui ne se privent pas de rappeler leurs limites comme dans le cas de la faille OpenSSL/Debian, il n'est pas certain qu'une boîte diffusant un logiciel propriétaire similaire aurait annoncé publiquement et aussi rapidement les détails et les implications d'une telle vulnérabilité. Laissant ainsi leurs utilisateurs dans la méconnaissance du risque qu'ils encourent.

Le contexte légal et politique s'est également fait sentir lors de ce SSTIC, mais moins que l'an dernier, avec quelques remarques et questions du public concernant notamment les limitations que la loi nous impose quant aux investigations sur des binaires. En effet, la loi n'autorise le desassemblage que dans une optique d'intéropérabilité logicielle... et même pas matérielle (!). A ce sujet, je me demande si l'auteur d'un malware peut attaquer en justice une boîte qui aurait desassemblé son programme afin d'en étudier son mécanisme... Bref, qu'en est-il des labo de recherche par exemple chez EADS ou au Celar et de leur légitimité à faire du reverse ? Les intervenants du Celar ont malheureusement rapidement éludé la question.

Finalement, nous avons eu un SSTIC très bien organisé (avec une amélioration notable de l'enregistrement du mecredi matin !), une très bonne ambiance, que se soit pendant les confs, pendant les rumps ou lors du social event. Dommage que beaucoup soient repartis sur Paris rapidement, car la soirée du vendredi soir était... mémorable :)

mardi, juin 5 2007

SSTIC 2007 - Ou comment bourrer un amphi

Cette année, le SSTIC avait lieu à l'Université de Rennes 1 dans l'amphi Louis Antoine. Question dépaysement, j'ai vu pire... Car j'ai passé l'année dans le bâtiment d'en face. Coïncidence amusante sachant que la conférence doit normalement avoir lieu dans les locaux de l'ESAT. Mais, faute de place et voulant assurer un minimum de sécurité, un autre lieu a été choisi. A ce propos, la répartition des responsabilités a été finement choisi : l'ESAT, pour la co-organisation; Supelec, pour les repas; et l'Université pour l'infrastructure d'accueil. L'année prochaine, si nous allons prendre le pot à l'ENST et dormir à l'INSA, je crois qu'on aura presque fait le tour du campus :)

Lire la suite...