Les innovations d’OpenBSD
(openbsd.org)Le projet OpenBSD développe et maintient divers logiciels et idées. Voici un aperçu classé approximativement par ordre d’introduction
Concepts
- IPSec(4) : OpenBSD a été le premier système d’exploitation libre à fournir une pile IPSec. Introduit le 20 février 1997
- INET6(4) : intégration complète d’IPv6 dans OpenBSD 2.7. Développement commencé le 6 janvier 1999, avec un état de fonctionnement presque complet atteint lors du premier hackathon le 6 juin de la même année
- Séparation des privilèges (Privilege Separation) : première implémentation dans OpenSSH en mars 2002. Ensuite appliquée à divers programmes comme bgpd(8), dhclient(8), smtpd(8) et tmux(1)
- Révocation des privilèges (Privilege Revocation) : application d’une méthode permettant d’abaisser les privilèges tout en conservant certaines ressources. Ex. : ping(8), traceroute(8)
- Protecteur de pile (Stack Protector) : basé sur « propolice », développé depuis 2001. Activé par défaut dans OpenBSD 3.3
- W^X (Write XOR Execute) : appliqué pour la première fois dans OpenBSD 3.3. Strictement imposé par défaut à partir d’OpenBSD 6.0
- Protection de la GOT et de la PLT : dans OpenBSD 3.3,
ld.soa été amélioré pour protéger la GOT (Global Offset Table) et la PLT (Procedure Linkage Table) - ASLR (Address Space Layout Randomization) : OpenBSD 3.4 a été le premier à l’activer par défaut
- Analyse et vérification de gcc-local(1) : introduites pour la première fois dans OpenBSD 3.4
- Renforcement de la sécurité de malloc(3) : randomisation et libération différée lors de l’allocation mémoire. Réimplémenté dans OpenBSD 4.4
- Exécutables indépendants de la position (PIE) : activés par défaut pour la première fois dans OpenBSD 5.3. Sur 7 plateformes matérielles
- Initialisation mémoire basée sur l’aléatoire : ajout de la section ELF
.openbsd.randomdatadans OpenBSD 5.3 - Protecteur de pile par objet partagé : application de cookies de protection de pile distincts pour chaque objet partagé dans OpenBSD 5.3
- Static-PIE : prise en charge de binaires statiques indépendants de la position pour /bin, /sbin et le disque RAM. Introduit dans OpenBSD 5.7
- Atténuation des attaques SROP : activée par défaut dans OpenBSD 6.0
- Randomisation de l’ordre de chargement des bibliothèques : activée par défaut dans OpenBSD 6.0 et 6.2
- Amélioration du lazy-binding pour la sûreté W^X en environnement multithread : introduite dans OpenBSD 5.9
- Renforcement du layout mémoire : appliqué à tous les programmes et bibliothèques dans OpenBSD 6.1
- Utilisation de la méthode fork+exec : renforcement de la protection de l’espace d’adressage dans les programmes séparés par privilèges
- trapsleds : application d’une technique de conversion NOP visant à atténuer les attaques ROP (Return-Oriented Programming)
- Réédition de liens du noyau au démarrage : randomisation du layout interne du noyau à chaque démarrage
- Renforcement des séquences d’instructions i386/amd64 : amélioration visant à compliquer les attaques ROP
- Ajout de l’option MAP_STACK : empêche l’exploitation de mémoire autre que la pile dans les attaques ROP
- RETGUARD : mécanisme de protection plus puissant que les protecteurs de pile existants, introduit à partir d’OpenBSD 6.4
- Ajout de l’option MAP_CONCEAL : empêche la fuite d’informations sensibles dans les core dumps
- Blocage des appels système depuis la mémoire PROT_WRITE : introduit dans OpenBSD 6.5
- Position fixe des appels système : restriction permettant les appels système uniquement depuis des emplacements spécifiques
- Renforcement de la protection de l’espace d’adressage : limitation des modifications mémoire via mmap(2), mprotect(2), etc.
- Réédition de liens de sshd au démarrage : introduite dans OpenBSD 7.2
- Prise en charge du code non lisible (xonly) : restriction empêchant la lecture de la mémoire exécutable
- Protection des appels système pinsyscalls(2) : protection par enregistrement préalable des emplacements d’appels système
- Protection des cibles de branchement indirect (BTI, IBT) : application de fonctions de sécurité matérielles
- Ajout de la fonction
-fret-clean: empêche qu’une valeur de retour reste sur la pile afin de bloquer les fuites d’information. Actuellement appliqué uniquement sur amd64
Fonctions
- issetugid(2) : fonction introduite dans OpenBSD 2.0, permettant de vérifier si un processus s’exécute avec un ID utilisateur ou un ID de groupe défini
- arc4random(3) : fonction de génération de nombres aléatoires, ajoutée dans OpenBSD 2.1
- bcrypt(3) : fonction de hachage de mots de passe. Introduite pour la première fois dans OpenBSD 2.1
- strlcpy(3), strlcat(3) : fonctions pour la copie et la concaténation sûres de chaînes. Introduites dans OpenBSD 2.4
- strtonum(3) : fonction qui convertit une chaîne en nombre tout en évitant les erreurs. Introduite dans OpenBSD 3.6
- imsg : API de transmission de messages, utilisée par divers démons. Ajoutée à libutil dans OpenBSD 4.8
- timingsafe_bcmp(3) : fonction de comparaison d’octets garantissant un temps d’exécution constant. Introduite dans OpenBSD 4.9
- explicit_bzero(3) : fonction d’effacement sécurisé de la mémoire. Ajoutée dans OpenBSD 5.5
- ohash : implémentation de table de hachage. Inclus dans libutil dans OpenBSD 5.6
- asr : résolveur DNS alternatif. Activé dans OpenBSD 5.6
- reallocarray(3) : fonction évitant les débordements lors de la réallocation mémoire. Ajoutée dans OpenBSD 5.6
- getentropy(2) : fonction fournissant des nombres aléatoires cryptographiquement sûrs. Introduite dans OpenBSD 5.6
- sendsyslog(2) : fonction permettant d’envoyer des messages syslog depuis le noyau. Ajoutée dans OpenBSD 5.6
- timingsafe_memcmp(3) : fonction de comparaison mémoire garantissant un temps d’exécution constant. Introduite dans OpenBSD 5.6
- pledge(2) : fonction qui limite les appels système afin d’améliorer la sécurité. Ajoutée dans OpenBSD 5.9
- getpwnam_shadow(3), getpwuid_shadow(3) : fonctions récupérant les données de mots de passe shadow pour renforcer la sécurité. Introduites dans OpenBSD 5.9
- recallocarray(3) : fonction qui remplit de zéros les données existantes lors d’un redimensionnement mémoire. Ajoutée dans OpenBSD 6.1
- freezero(3) : fonction qui libère la mémoire après l’avoir remplie de zéros. Introduite dans OpenBSD 6.2
- unveil(2) : fonction qui restreint l’accès au système de fichiers. Ajoutée dans OpenBSD 6.4
- malloc_conceal(3), calloc_conceal(3) : fonctions fournissant une protection des données sensibles lors de l’allocation mémoire. Ajoutées dans OpenBSD 6.5
- ober : API ASN.1 Basic Encoding Rules. Déplacée vers libutil dans OpenBSD 6.6
Programmes et sous-systèmes
- Utilitaires liés à YP : ypbind(8), ypset(8), ypcat(1), ypmatch(1), ypwhich(1), ajout du support libc. Distribués pour la première fois dans NetBSD 0.9
- ypserv(8) : serveur YP introduit dans OpenBSD 2.0
- mopd(8) : démon prenant en charge MOP (Maintenance Operations Protocol). Ajouté dans OpenBSD 2.0
- AnonCVS : système conçu pour permettre un accès anonyme au dépôt de code OpenBSD
- aucat(1) : utilitaire lié au serveur audio. Ajouté dans OpenBSD 2.1
- OpenSSH : outil de communication sécurisée basé sur SSH. Introduit dans OpenBSD 2.6
- mg(1) : éditeur de texte léger. Inclus dans OpenBSD 2.7
- m4(1) : processeur de macros. Étendu et maintenu après OpenBSD 2.7
- pf(4), pfctl(8), pflogd(8), authpf(8), ftp-proxy(8) : pare-feu de filtrage de paquets. Ajouté dans OpenBSD 3.0
- systrace(4), systrace(1) : outil de surveillance des appels système. Ajouté dans OpenBSD 3.2, puis remplacé par pledge(2) après OpenBSD 5.9
- spamd(8) : démon de filtrage anti-spam. Introduit dans OpenBSD 3.3
- dc(1), bc(1) : utilitaires de calcul. Ajoutés dans OpenBSD 3.5
- sensorsd(8) : outil de supervision des capteurs matériels. Inclus dans OpenBSD 3.5
- pkg_add(1) : utilitaire de gestion de paquets. Introduit dans OpenBSD 3.5
- carp(4) : protocole d’interface réseau pour le basculement. Ajouté dans OpenBSD 3.5
- OpenBGPD : démon de routage BGP. Introduit dans OpenBSD 3.5
- dhclient(8), dhcpd(8) : client et serveur DHCP. Ajoutés entre OpenBSD 3.5 et 3.6
- hotplugd(8) : démon de gestion des événements de hotplug. Ajouté dans OpenBSD 3.6
- OpenNTPD : démon NTP (Network Time Protocol). Ajouté dans OpenBSD 3.6
- dpb(1) : système distribué de construction de paquets. Introduit dans OpenBSD 3.6
- ospfd(8), ospfctl(8), ospf6d(8) : démons de routage OSPF (Open Shortest Path First). Introduits entre OpenBSD 3.7 et 4.2
- ifstated(8) : outil de gestion de l’état des interfaces. Ajouté dans OpenBSD 3.8
- bioctl(8) : outil de gestion des périphériques bloc et du RAID. Inclus dans OpenBSD 3.8
- hostapd(8) : outil de gestion des points d’accès sans fil. Introduit dans OpenBSD 3.8
- watchdogd(8) : watchdog garantissant la stabilité du système. Ajouté dans OpenBSD 3.8
- sdiff(1) : utilitaire de comparaison de fichiers. Introduit dans OpenBSD 3.9
- dvmrpd(8), dvmrpctl(8) : prise en charge de DVMRP (Distance Vector Multicast Routing Protocol). Ajoutée dans OpenBSD 4.0
- ripd(8), ripctl(8) : prise en charge de RIP (Routing Information Protocol). Incluse dans OpenBSD 4.1
- pkg-config(1) : outil de configuration de paquets. Introduit dans OpenBSD 4.1
- relayd(8), relayctl(8) : outils de relais de trafic réseau. Ajoutés dans OpenBSD 4.1
- cwm(1) : gestionnaire de fenêtres léger. Ajouté dans OpenBSD 4.2
- libtool(1) : outil d’automatisation de construction de bibliothèques. Inclus dans OpenBSD 4.3
- snmpd(8) : démon SNMP (Simple Network Management Protocol). Ajouté dans OpenBSD 4.3
- sysmerge(8) : outil de fusion des fichiers de configuration système. Ajouté dans OpenBSD 4.4
- ypldap(8) : serveur YP basé sur LDAP. Inclus dans OpenBSD 4.4
- OpenSMTPD : serveur SMTP (Simple Mail Transfer Protocol). Introduit dans OpenBSD 4.6
- tmux(1) : multiplexeur de terminal. Inclus dans OpenBSD 4.6
- ldpd(8), ldpctl(8) : prise en charge de LDP (Label Distribution Protocol). Ajoutée dans OpenBSD 4.6
- mandoc(1) : outil de documentation des pages de manuel. Introduit dans OpenBSD 4.8
- ldapd(8), ldapctl(8) : serveur LDAP (Lightweight Directory Access Protocol). Ajouté dans OpenBSD 4.8
- OpenIKED : implémentation du protocole IKE (Internet Key Exchange). Introduite dans OpenBSD 4.8
- iscsid(8), iscsictl(8) : démons iSCSI. Inclus dans OpenBSD 4.9
- rc.d(8), rc.subr(8) : gestion des scripts d’initialisation système. Ajoutée dans OpenBSD 4.9
- npppd(8), npppctl(8) : démon PPP (Point-to-Point Protocol). Ajouté dans OpenBSD 5.3
- ldomd(8), ldomctl(8) : outils de gestion LDOM (Logical Domains). Inclus dans OpenBSD 5.3
- sndiod(8) : serveur audio. Introduit dans OpenBSD 5.3
- cu(1) : utilitaire de communication série. Ajouté dans OpenBSD 5.4
- slowcgi(8) : outil de traitement des requêtes HTTP lentes. Inclus dans OpenBSD 5.4
- signify(1) : outil de signature et de vérification de fichiers. Ajouté dans OpenBSD 5.5
- LibreSSL : projet issu d’un fork d’OpenSSL pour renforcer la sécurité. Publié pour la première fois dans OpenBSD 5.6
- httpd(8) : serveur web léger. Inclus dans OpenBSD 5.6
- rcctl(8) : utilitaire de gestion des services rc.d. Ajouté dans OpenBSD 5.7
- doas(1) : utilitaire simple d’élévation de privilèges. Introduit dans OpenBSD 5.8
- radiusd(8) : implémentation de serveur RADIUS. Ajoutée dans OpenBSD 5.8
- eigrpd(8), eigrpctl(8) : prise en charge d’EIGRP (Enhanced Interior Gateway Routing Protocol). Incluse dans OpenBSD 5.9
- vmm(4), vmd(8), vmctl(8) : système de gestion de machines virtuelles. Ajouté dans OpenBSD 5.9
- acme-client(1) : client d’émission de certificats utilisant le protocole ACME. Introduit dans OpenBSD 6.1
- syspatch(8) : outil de gestion des correctifs de sécurité. Ajouté dans OpenBSD 6.1
- xenodm(1) : fork nettoyé de XDM. Inclus dans OpenBSD 6.1
- unwind(8) : résolveur DNS local. Introduit dans OpenBSD 6.5
- sysupgrade(8) : outil de mise à niveau automatique du système. Ajouté dans OpenBSD 6.6
- rpki-client(8) : client RPKI (Route Origin Validation). Introduit dans OpenBSD 6.7
- resolvd(8) : outil de gestion de la configuration DNS dans des environnements réseau dynamiques. Ajouté dans OpenBSD 6.9
- dhcpleased(8) : client DHCP amélioré. Inclus dans OpenBSD 6.9
Projets maintenus par des développeurs OpenBSD en dehors d’OpenBSD
- sudo : outil permettant à l’administrateur système d’accorder à certains utilisateurs le droit d’exécuter des commandes limitées. Inclus dans OpenBSD 2.7
- femail : outil simple de transfert de courrier. Démarré en 2005, avec un port OpenBSD fourni le 22 septembre de la même année
- midish : séquenceur et outil de traitement MIDI. Démarré en 2003, avec un port OpenBSD fourni le 4 novembre 2005
- fdm : outil de filtrage et d’organisation du courrier. Démarré en 2006, avec un port OpenBSD fourni le 18 janvier 2007
- toad : outil de déploiement logiciel automatisé pour OpenBSD. Démarré en 2013, avec un port OpenBSD fourni le 8 octobre de la même année
- docbook2mdoc : outil convertissant des documents DocBook au format de page de manuel mdoc. Démarré en 2014, avec un port OpenBSD fourni le 3 avril de la même année
- portroach : outil de suivi des mises à jour de ports, développé à partir d’un fork de portscout de FreeBSD. Démarré en 2014, avec un port OpenBSD fourni le 5 septembre de la même année
- cvs2gitdump : outil de conversion de dépôts CVS vers Git. Démarré en 2012, avec un port OpenBSD fourni le 1er août 2016
- Game of Trees : système de gestion de versions pouvant remplacer Git. Démarré en 2017, avec un port OpenBSD fourni le 9 août 2019
1 commentaires
Discussion sur Hacker News
La fondation OpenBSD a levé environ 380 000 dollars
John Ioannidis est décédé il y a quelques semaines, et presque personne ne s'en est aperçu
Au-delà de la conception privdrop/privsep d'OpenBSD et de l'adoption de pledge(2)/unveil(2), des travaux récents d'atténuation comme mimmutable passent inaperçus
La mémoire de données aléatoires a été implémentée dans OpenBSD 5.3 par Matthew Dempsky
AmigaOS utilisait des exécutables indépendants de la position (PIE) et l'ASLR en 1985
Étonnement face au fait que pledge/unveil ne soient pas présentés de manière plus visible
Quelqu'un se demande si OpenBSD a implémenté ISO C11 _Thread_local
Question sur la raison pour laquelle les pages OpenBSD n'utilisent que du HTML de base, sans style ni CSS
Une autre excellente ressource recommandée : <a href="https://why-openbsd.rocks/" rel="nofollow">https://why-openbsd.rocks/</a>