Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Présentation de seccomp-nurse

Présentation de seccomp-nurse

Plus d'information sur la page du projet : http://chdir.org/~nico/seccomp-nurse/

Nicolas Bareil

September 17, 2010
Tweet

More Decks by Nicolas Bareil

Other Decks in Programming

Transcript

  1. seccomp-nurse : Environnement de cloisonnement Executive summary Environnement de sandboxing

    Sans recompilation Sans modification du noyau Nicolas Bareil seccomp-nurse : Environnement de cloisonnement 2/23
  2. seccomp-nurse : Environnement de cloisonnement CONFIG SECCOMP SECure COMPuting Sp´

    ecifique Linux (ni POSIX, ni SUS, ni BSD) Introduit dans le 2.6.23 (2005) Par Andrea Arcanlegi Nicolas Bareil seccomp-nurse : Environnement de cloisonnement 3/23
  3. seccomp-nurse : Environnement de cloisonnement CONFIG SECCOMP Entr´ ee volontaire

    via prctl() Quatre appels syst` emes autoris´ es read() write() sigreturn() exit() Nicolas Bareil seccomp-nurse : Environnement de cloisonnement 4/23
  4. seccomp-nurse : Environnement de cloisonnement CONFIG SECCOMP Entr´ ee volontaire

    via prctl() Quatre appels syst` emes autoris´ es read() write() sigreturn() exit() Tout ´ ecart m` ene au SIGKILL Nicolas Bareil seccomp-nurse : Environnement de cloisonnement 4/23
  5. seccomp-nurse : Environnement de cloisonnement Sandbox Cible : grid computing

    Fait tourner des logiciels arbitraires Ne n´ ecessite pas de recompilation Sˆ ure Nicolas Bareil seccomp-nurse : Environnement de cloisonnement 5/23
  6. seccomp-nurse : Environnement de cloisonnement SECCOMP + Sandbox = seccomp-nurse

    Fail safe Surface d’attaque tr` es limit´ ee Tellement sˆ ur qu’inutile. . . Nicolas Bareil seccomp-nurse : Environnement de cloisonnement 6/23
  7. seccomp-nurse : Environnement de cloisonnement SECCOMP + Sandbox = seccomp-nurse

    Fail safe Surface d’attaque tr` es limit´ ee Tellement sˆ ur qu’inutile. . . . . .sauf s’il est aid´ e ! Nicolas Bareil seccomp-nurse : Environnement de cloisonnement 6/23
  8. seccomp-nurse : Environnement de cloisonnement untrusted helper SECCOMP Processus non

    trust´ e Processus helper S´ egr´ egation kernel sockets UNIX Nicolas Bareil seccomp-nurse : Environnement de cloisonnement 7/23
  9. seccomp-nurse : Environnement de cloisonnement Probl` eme #1 Rentrer dans

    SECCOMP Sans ptrace() Sans recompilation Nicolas Bareil seccomp-nurse : Environnement de cloisonnement 8/23
  10. seccomp-nurse : Environnement de cloisonnement Probl` eme #1 : Rentrer

    dans SECCOMP Solution #1 Binaire compil´ e avec la GNU Libc ELF entry point : routine start call libc start main@plt main() Nicolas Bareil seccomp-nurse : Environnement de cloisonnement 9/23
  11. seccomp-nurse : Environnement de cloisonnement Probl` eme #1 : Rentrer

    dans SECCOMP Solution #1 Binaire compil´ e avec la GNU Libc ELF entry point : routine start call libc start main@plt main() LD PRELOAD permet de surcharger des symboles Nicolas Bareil seccomp-nurse : Environnement de cloisonnement 9/23
  12. seccomp-nurse : Environnement de cloisonnement Probl` eme #1 : Rentrer

    dans SECCOMP Solution #1 : Probl` emes Ne supporte pas les binaires statiques Ne supporte que les binaires compil´ es avec la GNU Libc Hypoth` ese d’usage : grid computing Nous ne ciblons pas l’ex´ ecution de programmes malveillants. Nicolas Bareil seccomp-nurse : Environnement de cloisonnement 10/23
  13. seccomp-nurse : Environnement de cloisonnement Probl` eme #1 : Rentrer

    dans SECCOMP Solution #2 : LD AUDIT $ man rtld-audit The GNU dynamic linker (run-time linker) provides an auditing API that allows an application to be notified when various dynamic linking events occur. 1 Cr´ eation d’une biblioth` eque d’audit 2 /lib/ld-linux.so.2 --audit ./sandbox.so /bin/ls Nicolas Bareil seccomp-nurse : Environnement de cloisonnement 11/23
  14. seccomp-nurse : Environnement de cloisonnement Probl` eme #1 : Rentrer

    dans SECCOMP Solution #2 : LD AUDIT $ man rtld-audit 1 Cr´ eation d’une biblioth` eque d’audit 2 /lib/ld-linux.so.2 --audit ./sandbox.so /bin/ls Fonctionnalit´ e inconnue Un seul client connu de l’interface Gestion d´ elicate du Thread Local Storage Nicolas Bareil seccomp-nurse : Environnement de cloisonnement 11/23
  15. seccomp-nurse : Environnement de cloisonnement Probl` eme #2 : SIGKILL

    ´ Eviter les appels syst` eme interdits Nicolas Bareil seccomp-nurse : Environnement de cloisonnement 12/23
  16. seccomp-nurse : Environnement de cloisonnement Probl` eme #2 : SIGKILL

    ´ Eviter les appels syst` eme interdits Sans ptrace() Sans surcharge de toutes les fonctions la Libc Sans recompilation Nicolas Bareil seccomp-nurse : Environnement de cloisonnement 12/23
  17. seccomp-nurse : Environnement de cloisonnement Probl` eme #2 : SIGKILL

    Comment fonctionnent les appels syst` emes ? Sur x86, les appels syst` emes ne sont plus fait ` a base de int 0x80 inlin´ es Il faut d´ esormais appeller une fonction disponible dans la VDSO qui utilisera la meilleur impl´ ementation call *gs :$0x10 (C’est ce qu’apporte le paquet libc6-686) Nicolas Bareil seccomp-nurse : Environnement de cloisonnement 13/23
  18. seccomp-nurse : Environnement de cloisonnement Interception des syscalls Tous les

    registres sont envoy´ es au helper Aucune intelligence, il ne fait que suivre les ordres : ´ Ecrire/Lire ` a une adresse m´ emoire ´ Emuler la valeur de retour du syscall Se terminer proprement (via exit()) Nicolas Bareil seccomp-nurse : Environnement de cloisonnement 14/23
  19. seccomp-nurse : Environnement de cloisonnement Version initiale Tout ´ etait

    ´ emul´ e dans l’autre processus Lourd avec la sensation de r´ e´ ecrire le noyau en Python :) Performance : Double copie des donn´ ees lors de read()/write() Nicolas Bareil seccomp-nurse : Environnement de cloisonnement 15/23
  20. seccomp-nurse : Environnement de cloisonnement seccomp-nurse 2.0 untrustee trustee helper

    Thread Thread SECCOMP M´ emoire partag´ ee (lecture seule) M´ emoire partag´ ee (lecture/´ ecriture) S´ egr´ egation kernel Processus non trust´ e Processus helper sockets UNIX Toujours deux processus Dans le processus non-trust´ e, deux threads : Un trust´ e Un non-trust´ e, sous SECCOMP Nicolas Bareil seccomp-nurse : Environnement de cloisonnement 16/23
  21. seccomp-nurse : Environnement de cloisonnement Partage de la m´ emoire

    Probl´ ematique Les threads partagent tout ! ⇒ Toute action d’un thread impacte l’autre Le thread trust´ e n’a qu’une seule tˆ ache : ex´ ecuter les syscalls que le processus helper lui ordonne de faire. Nicolas Bareil seccomp-nurse : Environnement de cloisonnement 17/23
  22. seccomp-nurse : Environnement de cloisonnement foobar@debian32 :~/python-2.6$ sandbox -- ./python

    Python 2.6.5+ (release26-maint :82382M, Jul 6 2010, 15 :41 :57) [GCC 4.4.4] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> fd=open(’/etc/resolv.conf’) >>> for line in fd : ... print line, ... nameserver 192.168.9.2 domain vmlab search vmlab >>> import sys >>> sys.path.append(’/usr/lib/python2.6/’) >>> import os >>> os.getpid() 27997 >>> open(’/secret/password’) Traceback (most recent call last) : File "<stdin>", line 1, in <module> IOError : [Errno 1] Operation not permitted : ’/secret/password >>> open(’/var/log/../.././././../secret/password’) Traceback (most recent call last) : File "<stdin>", line 1, in <module> IOError : [Errno 1] Operation not permitted : ’/var/log/../.././././../secret/password’ Nicolas Bareil seccomp-nurse : Environnement de cloisonnement 18/23
  23. seccomp-nurse : Environnement de cloisonnement Ce qui est impl´ ement´

    e open close access getcwd getpgrp getpid gettimeofday exit lseek llseek readlink stat64 fstat64 mmap2 mmap brk ugetrlimit munmap time times Nicolas Bareil seccomp-nurse : Environnement de cloisonnement 19/23
  24. seccomp-nurse : Environnement de cloisonnement Ce qu’il reste ` a

    faire Toutes les v´ erifications de s´ ecurit´ e c l a s s S e c u r i t y : def open ( s e l f , filename , perms , mode) : path = os . path . r e a l p a t h ( filename ) # Bug #990669 i f not path . s t a r t s w i t h ( s e l f . chroot ) : return False . . . return True Nicolas Bareil seccomp-nurse : Environnement de cloisonnement 20/23
  25. seccomp-nurse : Environnement de cloisonnement Ce qu’il sera difficile d’impl´

    ementer Tous les appels syst` emes d´ emultiplex´ es (sockets) Nicolas Bareil seccomp-nurse : Environnement de cloisonnement 21/23
  26. seccomp-nurse : Environnement de cloisonnement Ce qu’il sera difficile d’impl´

    ementer Tous les appels syst` emes d´ emultiplex´ es (sockets) Et dlopen() ? ! ? Nicolas Bareil seccomp-nurse : Environnement de cloisonnement 21/23
  27. seccomp-nurse : Environnement de cloisonnement Limitations Sp´ ecifique ` a

    Linux glibc r´ ecente (> 2005) compil´ ee pour 686 Ne supportera jamais ces syscalls : clone() : thread ou fork impossible execve() Nicolas Bareil seccomp-nurse : Environnement de cloisonnement 22/23
  28. seccomp-nurse : Environnement de cloisonnement Avez-vous des questions ? Nicolas

    Bareil seccomp-nurse : Environnement de cloisonnement 23/23