Journal Propositions de bacs à sable, par exemple pour un panda roux

Posté par  (site web personnel, Mastodon) . Licence CC By‑SA.
16
17
août
2015

Bonjour, Nal.

La plupart d'entre vous savent déjà que paramétrer Firefox de façon à limiter le pistage, préserver sa vie privée, voire augmenter sa sécurité est aussi important que laborieux (voir à ce sujet une excellente dépêche en cours de rédaction, à laquelle vous pouvez contribuer).

L'actualité récente illustre l'inutilité de contre-mesures passant par des extensions ou par une configuration de Firefox, dès lors s'il existe une faille dans ce dernier. Il reste néanmoins possible de limiter les conséquences d'une exploitation, par exemple en faisant jouer le panda dans un bac à sable duquel il ne pourra pas sortir, tout comme il est possible de le faire pour n'importe quelle autre application à risque.

L'inventaire sommaire que j'ai fait des sandboxes m'a rapidement montré que je n'avais pas l'expertise pour savoir ce qui est sérieux et ce qui ne l'est pas. Je vous lance donc dans ce journal quelques pistes que les plus audacieux pourront tester, dans l'espoir que les plus expérimentés donneront leurs avis (entre autre sur la pertinence de l'approche via les namespaces, ou via seccomp, ou encore seccomp-bpf). Pour ma part, firejail me semble intuitivement intéressant et facile à utiliser. C'est le intuitivement et le facile qui me gênent, parce que c'est un domaine dans lequel on a vite fait de faire bêtement de mauvais choix. Vous m'aidez ? On s'aide les uns les autres à coups (pacifiques) de commentaires ? :-)

basés sur les namespaces et sur seccomp-bpf

basé sur ptrace et seccomp-bpf

basé sur seccomp

basés sur les namespaces

basé sur les namespaces et LXC

basé sur SELinux

basé sur AppArmor/LSM

basé sur docker

basés sur LXC

basé sur Vagrant

À noter deux trucs rigolos:
- le projet Qubes OS, basé sur Xen, qui permet de découpailler son OS de bureau en moults fragments indépendants, et de les recoller à la demande - ou pas.
- un projet lié à l'initiative OLPC, Rainbow

  • # liste blanche

    Posté par  (site web personnel) . Évalué à 2.

    Le problème de firejail est qu'il fonctionne par liste noire (si j'ai bien compris), or dans le cadre de la sécurité, il est préférable d'autoriser plutôt que d'interdire.

    En même temps, j'imagine mal comment préparer une configuration qui s'adapterait à l'ensemble des cas d'utilisation, alors que le configuration par défaut fourni un socle de sécurité minimal déjà convenable (blocage des accès aux répertoires .ssh etc).

    • [^] # Commentaire supprimé

      Posté par  . Évalué à 2. Dernière modification le 17 août 2015 à 21:00.

      Ce commentaire a été supprimé par l’équipe de modération.

      • [^] # Re: liste blanche

        Posté par  (site web personnel) . Évalué à 4.

        Principalement la conf proposée dans debian (je l'utilise depuis quelques temps pour isoler iceweasel et thunderbird)

        $ cat /etc/firejail/disable-common.inc    
        blacklist ${HOME}/.adobe
        blacklist ${HOME}/.macromedia
        blacklist ${HOME}/.mozilla
        blacklist ${HOME}/.icedove
        blacklist ${HOME}/.thunderbird
        blacklist ${HOME}/.config/midori
        blacklist ${HOME}/.config/opera
        blacklist ${HOME}/.config/chromium
        blacklist ${HOME}/.config/google-chrome
        blacklist ${HOME}/.filezilla

        Affichage des règles appliquées à iceweasel :

        $ firejail --seccomp.print=1497   
        SECCOMP Filter:
          VALIDATE_ARCHITECTURE
          EXAMINE_SYSCAL
          BLACKLIST 165 mount
          BLACKLIST 166 umount2
          BLACKLIST 101 ptrace
          BLACKLIST 246 kexec_load
          BLACKLIST 304 open_by_handle_at
          BLACKLIST 175 init_module
          BLACKLIST 313 finit_module
          BLACKLIST 176 delete_module
          BLACKLIST 172 iopl
          BLACKLIST 173 ioperm
          BLACKLIST 167 swapon
          BLACKLIST 168 swapoff
          BLACKLIST 103 syslog
          BLACKLIST 310 process_vm_readv
          BLACKLIST 311 process_vm_writev
          BLACKLIST 133 mknod
          BLACKLIST 139 sysfs
          BLACKLIST 156 _sysctl
          BLACKLIST 159 adjtimex
          BLACKLIST 305 clock_adjtime
          BLACKLIST 212 lookup_dcookie
          BLACKLIST 298 perf_event_open
          BLACKLIST 300 fanotify_init
          BLACKLIST 312 kcmp
          RETURN_ALLOW
        • [^] # Commentaire supprimé

          Posté par  . Évalué à 5.

          Ce commentaire a été supprimé par l’équipe de modération.

          • [^] # Re: liste blanche

            Posté par  (site web personnel) . Évalué à 5.

            Merci pour les explications.

            Le sentiment que j'ai eu en l'essayant est que la documentation disponible va très vite dans le très technique, et ne présente pas un les cas d'utilisations à partir de cas d'usages simples.

            J'y vois l'avantage qu'il s'intègre dans une configuration existante sans avoir à tout changer dans le système.

            • [^] # Commentaire supprimé

              Posté par  . Évalué à 2.

              Ce commentaire a été supprimé par l’équipe de modération.

              • [^] # Re: liste blanche

                Posté par  (site web personnel, Mastodon) . Évalué à 2.

                Par ailleurs, je ne trouve pas la dépêche « excellente dépêche en cours de rédaction » soit excellente. Je trouve que c'est extrêmement complexe. C'est quoi la version simple et courte qui offre des garanties relativement élevées sans trop impacter l'utilisation ?
                

                Je trouve aussi qu'elle est complexe. L'initiative me semble néanmoins excellente, car en l'état c'est une mine d'information. La version idéale, c'est celle qu'il est possible d'écrire dès à présent, collectivement, et à laquelle tu peux participer grâce à ta compétence et ton regard critique sur la question :)

                (aucune ironie, je précise, on ne sait jamais)

  • # D'abord les choses simples

    Posté par  (site web personnel) . Évalué à 6. Dernière modification le 17 août 2015 à 20:45.

    Sous Ubuntu une méthode très simple pour améliorer un peu la sécurité de Firefox c'est d'activer le profil apparmor.

    On liste pour voir les profils qui sont actuellement actifs :

    patrick@laptop:~$ sudo apparmor_status
    [sudo] password for patrick: 
    apparmor module is loaded.
    17 profiles are loaded.
    17 profiles are in enforce mode.
       /sbin/dhclient
       /usr/bin/evince
       /usr/bin/evince-previewer
       /usr/bin/evince-previewer//sanitized_helper
       /usr/bin/evince-thumbnailer
       /usr/bin/evince-thumbnailer//sanitized_helper
       /usr/bin/evince//sanitized_helper
       /usr/lib/NetworkManager/nm-dhcp-client.action
       /usr/lib/NetworkManager/nm-dhcp-helper
       /usr/lib/connman/scripts/dhclient-script
       /usr/lib/cups/backend/cups-pdf
       /usr/lib/lightdm/lightdm-guest-session
       /usr/lib/lightdm/lightdm-guest-session//chromium
       /usr/sbin/cups-browsed
       /usr/sbin/cupsd
       /usr/sbin/cupsd//third_party
       /usr/sbin/tcpdump
    0 profiles are in complain mode.
    3 processes have profiles defined.
    3 processes are in enforce mode.
       /sbin/dhclient (1434) 
       /usr/sbin/cups-browsed (735) 
       /usr/sbin/cupsd (689) 
    0 processes are in complain mode.
    0 processes are unconfined but have a profile defined.
    

    On active le profil Firefox (qui existe déjà mais n'est pas actif par défaut) :

    patrick@laptop:~$ sudo aa-enforce /etc/apparmor.d/usr.bin.firefox
    Setting /etc/apparmor.d/usr.bin.firefox to enforce mode.
    

    Puis on liste à nouveau pour voir les profils chargés :

    patrick@laptop:~$ sudo apparmor_status
    [sudo] password for patrick: 
    apparmor module is loaded.
    22 profiles are loaded.
    22 profiles are in enforce mode.
       /sbin/dhclient
       /usr/bin/evince
       /usr/bin/evince-previewer
       /usr/bin/evince-previewer//sanitized_helper
       /usr/bin/evince-thumbnailer
       /usr/bin/evince-thumbnailer//sanitized_helper
       /usr/bin/evince//sanitized_helper
       /usr/lib/NetworkManager/nm-dhcp-client.action
       /usr/lib/NetworkManager/nm-dhcp-helper
       /usr/lib/connman/scripts/dhclient-script
       /usr/lib/cups/backend/cups-pdf
       /usr/lib/firefox/firefox{,*[^s][^h]}
       /usr/lib/firefox/firefox{,*[^s][^h]}//browser_java
       /usr/lib/firefox/firefox{,*[^s][^h]}//browser_openjdk
       /usr/lib/firefox/firefox{,*[^s][^h]}//lsb_release
       /usr/lib/firefox/firefox{,*[^s][^h]}//sanitized_helper
       /usr/lib/lightdm/lightdm-guest-session
       /usr/lib/lightdm/lightdm-guest-session//chromium
       /usr/sbin/cups-browsed
       /usr/sbin/cupsd
       /usr/sbin/cupsd//third_party
       /usr/sbin/tcpdump
    0 profiles are in complain mode.
    3 processes have profiles defined.
    3 processes are in enforce mode.
       /sbin/dhclient (1434) 
       /usr/sbin/cups-browsed (735) 
       /usr/sbin/cupsd (689) 
    0 processes are in complain mode.
    0 processes are unconfined but have a profile defined.
    patrick@laptop:~$ 
    
    • [^] # Re: D'abord les choses simples

      Posté par  (site web personnel) . Évalué à 4.

      De manière générale, le noyau Linux contient plusieurs implémentations de restrictions d'accès basées sur les LSM :

      • SELinux ;
      • AppArmor ;
      • Tomoyo ;
      • SMACK.

      Tomoyo permet de regarder (d'apprendre) les accès d'un logiciel pendant une séance où tu l'utilises normalement, et créer une politique en adéquation.
      Ensuite, tu regardes si la politique te plaît, et tu peux l'activer : à partir de maintenant, aucun accès à une ressource qui n'est pas dans sa politique sera interdite.

    • [^] # Re: D'abord les choses simples

      Posté par  . Évalué à 3.

      Sous Ubuntu une méthode très simple pour améliorer un peu la sécurité de Firefox c'est d'activer le profil apparmor.

      Malheureusement cela empêche le son de fonctionner correctement dans les vidéos HTML5:

      dbus[1754]: apparmor="DENIED" operation="dbus_method_call" bus="session" path="/ScreenSaver" interface="org.freedesktop.ScreenSaver" member="Inhibit" mask="send" name="org.freedesktop.ScreenSaver" pid=31618 label="/usr/lib/firefox/firefox{,*[^s][^h]}" peer_pid=1925 peer_label="unconfined"
      Une solution ?

  • # firefox commence à faire ça de lui même

    Posté par  (site web personnel) . Évalué à 5. Dernière modification le 17 août 2015 à 20:48.

    Firefox travaille à créer des bac à sables pour son contenu. Tiré de about:support (version aurora/developper edition 42.0a2) :

    **Sandbox**
    Seccomp-BPF (System Call Filtering) true
    Seccomp Thread Synchronization true
    User Namespaces true
    Media Plugin Sandboxing true

    cf :
    https://wiki.mozilla.org/Security/Sandbox
    et
    https://wiki.mozilla.org/Security/Sandbox/Seccomp

    • [^] # Re: firefox commence à faire ça de lui même

      Posté par  . Évalué à 2.

      J'ai la même chose sur mon Firefox 40.0:

      Paramètres de base de l'application

      Nom: Firefox
      Version: 40.0
      Identifiant de compilation: 20150807095123
      Agent utilisateur: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0
      […]

      Bac à sable

      Seccomp-BPF (Filtrage des appels système): true
      Synchronisation du fil d'exécution Seccomp: true
      Espace de noms utilisateur: true
      Bac à sable pour les plugins multimédia: true

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.