• [^] # Re: Avancée notable

    Posté par (site web personnel) . En réponse au journal Tame et OpenBSD. Évalué à 4.

    Pour un serveur web, tame perds déjà de l'intérêt par manque de granularité.

    Oui il me tarde de voir comment il compte implémenter ça dans ce type de programmes. Je suis comme toi sceptique. A voir.

    Un truc marrant sur Debian (et probablement dérivé) la commande ping a eu, jusqu'à il n'y a pas si longtemps, le sticky bit root. Tout ça pour pouvoir ouvrir une socket en mode raw. Il y a une capabilities POSIX pour ça (CAP_NET_RAW) qui marche très bien.

    J'entends déjà un vieux BSDiste de ma connaissance clamer que "linux c'est de l'à peu près".

    La démarche est louable par contre elle n'est clairement pas aboutie. Remplacer le bit suid par un privilège plus fin est une bonne chose. Mais cela n'a pas conduit à la suppression du bit suid.

    Par exemple sur le PC avec lequel j'écris ce message (debian jessie)

    find /usr/bin/ /usr/sbin/ /bin/ /sbin/ -perm -4000 |wc -l
    20

    Il reste 20 programmes suid dans une install relativement basique.

    Si tu regardes l'implémentation de ping de OpenBSD, le programme commence par ouvrir une socket puis drope ses privilèges.

    int
    main(int argc, char *argv[])
    {
     struct hostent *hp;
     struct sockaddr_in *to;
     struct in_addr saddr;
     int ch, optval = 1, packlen, preload, maxsize, df = 0, tos = 0;
     u_char *datap, *packet, ttl = MAXTTL, loop = 1;
     char *target, hnamebuf[HOST_NAME_MAX+1];
     char rspace[3 + 4 * NROUTES + 1]; /* record route space */
     socklen_t maxsizelen;
     const char *errstr;
     uid_t uid;
     u_int rtableid;
     if ((s = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)) < 0)
     err(1, "socket");
     /* revoke privs */
     uid = getuid();
     if (setresuid(uid, uid, uid) == -1)
     err(1, "setresuid");

    Du coup dans les deux cas l'attaquant se retrouve avec une socket raw et pas grand chose de plus. On peut alors se demander quel est l’intérêt d'utiliser une Capacité plutôt qu'un privilège à la louche, si le résultat n'est pas la suppression des privilèges à la louche.

    C'est un peu je crois ce que dénonce Théo. Les choses à moitié implémentés parce que trop complexes ou intrusives. Sa vision de la sécurité est de faire des choses simples et robustes, implémentés de façon exhaustive. Si un jour OpenBSD décide de faire la peau au bit suid tu peux être sûr que ce sera fait de façon exhaustive et que nosuid deviendra l'option de montage par défaut.