Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

: Sortie d'OpenBSD 4.0

Posté par patrick_g (page perso, ). Modéré le 02 novembre 2006.
La sortie de la nouvelle version du système d'exploitation libre et sécurisée OpenBSD a été annoncée ce mercredi premier novembre par Theo de Raadt, le leader du projet. Comme d'habitude les progrès sont incrémentaux plutôt que radicaux. C'est une politique mûrement réfléchie afin de ne pas risquer de déstabiliser le code source en introduisant des bugs.

Parmi les points notables de cette version 4.0 on peut relever la prise en charge de l'architecture UltraSparc III ou de plusieurs gadgets basés sur le processeur ARM. Le travail d''amélioration des pilotes pour les cartes wifi ou pour les cartes Gigabit ethernet continue ainsi que le combat du projet OpenBSD pour obtenir de la documentation de la part des firmes qui construisent ces matériels.

> Lire la dépêche (56 commentaires, moyenne: 2,4).  

Vous avez demandé le commentaire #771637.

[+] Prelink

Posté par IsNotGood () le 02/11/2006 à 17:17. (lien). Évalué à -4.

> En effet ce prelinking est incompatible avec le chargement aléatoire des librairies (address space randomization)

Pipo. Prelink de Linux est compatible avec des adresses aléaloires.

M'enfin, une news openBSD sans un troll sur Linux, ce n'est pas une news openBSD.

  • [^]Re: Prelink

    Posté par gaston () le 02/11/2006 à 17:25. (lien). Évalué à 3.

    M'enfin, une news openBSD sans un troll sur Linux, ce n'est pas une news openBSD.

    Comme un commentaire de ta part sans un troll ou de la mauvaise foi, c'est pas un commentaire de ta part... :)

    [^]Re: Prelink

    Posté par patrick_g (page perso, ) le 02/11/2006 à 17:37. (lien). Évalué à 3.

    >> Pipo. Prelink de Linux est compatible avec des adresses aléaloires.

    Dans l'interview O'Reilly que j'ai donné en lien on peut lire ceci :
    One of the significant security features in OpenBSD is address randomisation (aka ASLR). Prelinking as implemented in Linux removes the randomisation feature so it would not be compatible with OpenBSD's security goals.

    Donc soit c'est toi qui a raison soit c'est Dale Rahn (soit j'ai mal compris mais ça me semble une hypothèse inenvisageable ;-).

    • [^]Re: Prelink

      Posté par IsNotGood () le 02/11/2006 à 20:17. (lien). Évalué à 3.

      Je dois reconnaitre que je n'y connais pas grand chose dans ces trucs, voire qu'ils m'ennuient.

      Plus haut, j'ai parlé de "compatibilité" et non dit que Linux le fournissait. Il y a Red Hat/Fedora qui fournit des fonctionnalités de "random address". Peut-être d'autre, je l'ignore.

      Si j'ai bien compris, les adresses aléatoires sont utilisées au chargement pour l'édition de lien et fixer le début de la pile. Une installation typique Fedora fait ça. De même par défaut prelink est installé et activé (prelink des applis toutes les nuits).
      L'adresse aléatoire de la pile n'implique pas prelink.
      Par contre prelink n'est pas utilisé si le chargement des librairies est mis à une adresse alétoire (c'est le cas par défaut pour pratiquement toute les applis) et/ou si c'est du code indépendant (qui peut-être logé n'importe où et pas seulement pour les librairies ; c'est aussi le cas par défaut depuis FC3 je crois).

      Bref, prelink est installé mais dans la majorité des cas non utilisé car "random addresse" est utilisé (ça ne concerne pas la pile).

      Quelques info sur ce qui est fait dans RHEL/Fedora : http://people.redhat.com/drepper/nonselsec.pdf

      > Donc soit c'est toi qui a raison soit c'est Dale Rahn

      J'ai tord.

      • [^]Re: Prelink

        Posté par neologix (page perso, ) le 03/11/2006 à 15:08. (lien). Évalué à 6.

        Plus haut, j'ai parlé de "compatibilité" et non dit que Linux le fournissait. Il y a Red Hat/Fedora qui fournit des fonctionnalités de "random address". Peut-être d'autre, je l'ignore.


        En fait, ça dépend de ce que tu appelles randomization.
        Depuis la version 2.6.11 (je crois) du kernel, on a une randomization partielle:

        exemple:


        #include <stdio.h>
        #include <stdlib.h>

        int main(void)
        {
        int n;
        int *c = malloc(sizeof(int));

        printf("Pile: %p\n", (void *) &n);
        printf("Tas: %p\n", (void *) c);

        return 0;
        }


        Sur mon noyau 2.6.17, j'obtiens ça:

        $ for i in `seq 1 10`; do ./test; done
        Pile: 0xbf85db6c
        Tas: 0x804a008
        Pile: 0xbf85735c
        Tas: 0x804a008
        Pile: 0xbfb3487c
        Tas: 0x804a008
        Pile: 0xbf87db7c
        Tas: 0x804a008
        Pile: 0xbf90640c
        Tas: 0x804a008
        Pile: 0xbfb9369c
        Tas: 0x804a008
        Pile: 0xbfea89ac
        Tas: 0x804a008
        Pile: 0xbf906c0c
        Tas: 0x804a008
        Pile: 0xbfcfd7fc
        Tas: 0x804a008
        Pile: 0xbfb0e60c
        Tas: 0x804a008


        Donc, il y a bien "randomizaton" au niveau de la pile (en fait, aussi au niveau des appels à mmap()), mais pas au niveau du tas.
        Mais faut pas croire que c'est la panacée: en effet, enfin la dernière fois que j'ai vérifié, la plage de randomization n'est pas énorme (64 kb pour la pile je crois). Quand tu enlèves les adresses quivontpas (alignement), bah en fait il te reste un ensemble assez restreint de valeurs, du coup rien ne t'empêche de faire une boucle au début de ton exploit.

        Pour en revenir à la randomization et prelink:

        http://lwn.net/Articles/121845/

        Kernel facilities supplying address space layout randomization for libraries cannot be used in conjunction with prelink; to do so would require relocating the libraries, defeating the purpose of prelinking.


        Quand tu y penses, c'est carrément logique.
        Néanmoins, voici ce qu'on peut lire:

        In an attempt to restore some of the benefits of address space randomization, prelink is capable of randomly selecting the addresses used for prelinking. This makes it more difficult to perform certain attacks on a system, because the addresses used are unique to that system. This approach is, however, less effective than per-process randomization because the addresses stay constant until prelink is run again.


        Voilà voilà.
        Enfin, je crois qu'on se retrouve toujours face au dilemme rapidité/sécurité. Entre les deux, il te faut choisir :-)

        • [^]Re: Prelink

          Posté par neologix (page perso, ) le 03/11/2006 à 15:19. (lien). Évalué à 3.

          Je suis pas réveillé, j'ai oublié un appel à free()...


          #include <stdio.h>
          #include <stdlib.h>

          int main(void)
          {
          int n;
          int *c = malloc(sizeof(int));

          printf("Pile: %p\n", (void *) &n);
          printf("Tas: %p\n", (void *) c);

          free(c);

          return 0;
          }


          P.S: on écrit "j'ai tort", et non pas "j'ai tord".

          • [^]Re: Prelink mais rien a voir

            Posté par Brice2Nice () le 03/11/2006 à 16:37. (lien). Évalué à 2.

            > P.S: on écrit "j'ai tort", et non pas "j'ai tord".

            moyen mnémotechnique, le tort tue (génial)

          [^]Re: Prelink

          Posté par IsNotGood () le 04/11/2006 à 18:26. (lien). Évalué à 1.

          Je sais.
          Et ton exemple (très parlant) est pour la pile/tas, non pour les adresses des fonctions.

          > Depuis la version 2.6.11 (je crois) du kernel, on a une randomization partielle:

          Regardes du côté de Fedora/Red Hat, il y a une randomization complète (avec exec-shield) mais ça ne marche pas pour prelink. Au chargement les adresses données par prelink sont ignorées (prelink est donc ignoré). On peut "réactivé" prelink mais les bibliothèques auront une adresse fixent (celles définis par prelink au moment de l'exécution de prelink).

          • [^]Re: Prelink

            Posté par neologix (page perso, ) le 04/11/2006 à 18:38. (lien). Évalué à 2.

            Et ton exemple (très parlant) est pour la pile/tas, non pour les adresses des fonctions.


            Oui. Mais comme je l'ai dit, ça s'applique aussi à mmap(), donc aux librairies dynamiques.

            Pour exec-shield, ça a l'air pas mal. Je ne comprends pas pourquoi Debian ne propose pas un noyau déjà patché (même si c'est désactivé par défaut), ce serait plus pratique que d'avoir à télécharger le patch, l'appliquer etc.
            Tiens, ce serait une bonne idée une version de noyau "serveur", avec un noyau durci.

            • [^]Re: Prelink

              Posté par neologix (page perso, ) le 04/11/2006 à 18:53. (lien). Évalué à 2.

              Ah, je retire ce que j'ai dit:


              #include <stdio.h>
              #include <stdlib.h>

              int main(void)
              {
              int n;
              int *c = malloc(sizeof(int));

              printf("Pile: %p\n", (void *) &n);
              printf("Tas: %p\n", (void *) c);
              printf("Librairies: %p\n", (void *) fopen);

              free(c);

              return 0;
              }


              Me renvoie:

              $ !for
              for i in `seq 1 10`; do ./test; done
              Pile: 0xbfaff69c
              Tas: 0x804a008
              Librairies: 0x8048344
              Pile: 0xbffdf2ec
              Tas: 0x804a008
              Librairies: 0x8048344
              Pile: 0xbff3323c
              Tas: 0x804a008
              Librairies: 0x8048344
              Pile: 0xbffedafc
              Tas: 0x804a008
              Librairies: 0x8048344
              Pile: 0xbfa6656c
              Tas: 0x804a008
              Librairies: 0x8048344
              Pile: 0xbfe8398c
              Tas: 0x804a008
              Librairies: 0x8048344
              Pile: 0xbfd2e03c
              Tas: 0x804a008
              Librairies: 0x8048344
              Pile: 0xbff9b29c
              Tas: 0x804a008
              Librairies: 0x8048344
              Pile: 0xbf99bc9c
              Tas: 0x804a008
              Librairies: 0x8048344
              Pile: 0xbf88cb8c
              Tas: 0x804a008
              Librairies: 0x8048344


              Bon, je sais que ce n'est pas ANSI de convertir un "function pointer" en "object pointer" (comment l'imprimer proprement?), mais n'empêche que ce n'est pas ce que j'attendais. Va falloir que je regarde ça de plus près, ça m'intrigue.