rapport sur le développement du projet FreeBSD de juillet à septembre 2019. Parmi les changements notables :
- Questions générales et systémiques
- L'équipe principale a globalement approuvé la possibilité d'inclure dans le système du code distribué sous une licence BSD avec un accord supplémentaire sur l'utilisation des brevets (), mais la décision d'inclure chaque composant sous cette licence doit être validée séparément ;
- La première réunion du groupe de travail, créé pour effectuer la migration des fichiers sources de Subversion vers un système décentralisé Git, a eu lieu. La discussion sur la pertinence de la migration se poursuit et de nombreuses questions doivent encore être résolues (par exemple, comment traiter contrib/, si les hachages doivent être régénérés dans le dépôt git actuel et comment réaliser au mieux les tests des commits) ;
- De NetBSD l'outil KCSAN (Kernel Concurrency Sanitizer), qui permet de détecter l'apparition d'états de concurrence entre les threads du noyau exécutés sur différents CPU ;
- Des travaux sont en cours pour utiliser l'assembleur intégré à Clang (IAS) au lieu de celui des GNU binutils ;
- L'infrastructure d'émulation de l'environnement Linux (Linuxulator) a été adaptée pour fonctionner sur l'architecture ARM64. Un appel système « renameat2 » a été réalisé. L'outil strace a été amélioré pour diagnostiquer les problèmes liés aux fichiers exécutables Linux exécutés dans Linuxulator. Le problème d'échecs lors de l'édition des fichiers exécutables avec le glibc récent a été résolu. Les ports avec des composants Linux pour Linuxulator ont été mis à jour vers CentOS 7.7 ;
- Dans le cadre du programme Google Summer of Code, six projets ont été réalisés avec succès par les étudiants : mise en œuvre d'un utilitaire ping unifié (IPv4/IPv6), développement d'outils pour tester les pare-feu et identifier les erreurs dans le noyau (Kernel sanitizer), proposition d'un module mac_ipacl, écriture de code pour la compression de la mémoire virtuelle et séparation du processus de construction des ports de l'installation locale ;
- Le projet de test de fuzzing du noyau FreeBSD se poursuit avec l'utilisation du système . Au cours de la période de rapport, plus de dix erreurs ont été identifiées et corrigées avec l'aide de syzkaller. Un serveur distinct a été alloué pour exécuter syzkaller dans des machines virtuelles basées sur bhyve, et par l'intermédiaire de
La vérification des différents sous-systèmes FreeBSD dans l'infrastructure de Google est en place grâce à syzbot. Un transfert d'informations sur tous les plantages vers le service backtrace.io a été organisé pour simplifier leur regroupement et leur analyse. - Des travaux sont en cours pour mettre à jour l'implémentation de zlib au niveau du noyau.
Le code lié à la compression a été mis à jour de zlib 1.0.4, sorti il y a plus de 20 ans, vers la base de code actuelle zlib 1.2.11. Pour un accès unifié à zlib, des fonctions compress, compress2 et uncompress ont été ajoutées au noyau. Le code qui fait fonctionner le protocole PPP dans le sous-système netgraph a été modifié pour utiliser l'implémentation système de zlib, au lieu de sa propre version de cette bibliothèque. Les sous-systèmes kern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor,
if_mxge, bxe updated et ng_deflate ont également été mis à jour. - Un nouvel interface noyau est en développement. , qui permet de trouver des éléments dans la base de paramètres sysctl, traitée sous forme de MIB (Management Information Base), et de transmettre des informations sur les objets à l'espace utilisateur.
- Sécurité
- Un module noyau a été développé. , basé sur le TrustedBSD MAC Framework, et mettant en œuvre un système de contrôle d'accès aux paramètres de la pile réseau pour les environnements jail. Par exemple, à l'aide de mac_ipacl, l'administrateur du système hôte peut interdire à l'utilisateur root en environnement jail de modifier ou d'assigner des adresses IP ou des paramètres de sous-réseaux pour certains interfaces réseau. Le système de contrôle d'accès mandataire proposé permet de définir des listes d'adresses IP et de sous-réseaux autorisés pour Jail, d'interdire l'assignation de certaines IP et sous-réseaux dans Jail, ou de restreindre la modification des paramètres uniquement à certains interfaces réseau.
- La société Intel a transféré au projet le port de la pile logicielle (Trusted Platform Module) pour interagir avec une puce dédiée aux calculs sécurisés, souvent utilisée pour le démarrage sécurisé des firmwares et du chargeur d'OS. Les composants de la pile sont présentés sous la forme de ports security/tpm2-tss, security/tpm2-tools et security/tpm2-abrmd. Le port tpm2-tss inclut des bibliothèques pour utiliser l'API TPM2, tpm2-tools fournit des utilitaires en ligne de commande pour effectuer des opérations avec le TPM, tandis que tpm2-abrmd contient un processus en arrière-plan mettant en œuvre les composants TPM Access Broker et Resource Manager, multiplexant les requêtes de différents utilisateurs du TPM vers un seul appareil. En plus du démarrage sécurisé, sur FreeBSD, le TPM peut être utilisé pour renforcer la sécurité de Strongswan IPsec, SSH et TLS en effectuant des opérations cryptographiques sur une puce séparée.
- Le noyau pour l'architecture amd64 a été adapté pour un démarrage utilisant la technique de protection W^X (write XOR execute), impliquant que les pages de mémoire ne peuvent pas être accessibles à la fois en écriture et en exécution (le noyau peut désormais démarrer avec des pages de mémoire exécutables pour lesquelles l'écriture est interdite). La nouvelle méthode de protection du noyau est incluse dans la branche HEAD et fera partie des versions FreeBSD 13.0 et 12.2.
- Pour les appels système mmap et mprotect. le macro PROT_MAX(), permettant de définir l'ensemble des drapeaux d'accès maximaux autorisés lors de modifications ultérieures (PROT_READ, PROT_WRITE, PROT_EXEC). Avec PROT_MAX(), le développeur peut interdire la promotion d'une zone mémoire en catégorie exécutable ou demander de la mémoire qui ne permet pas l'exécution, mais qui peut être promue en exécutable ultérieurement. Par exemple, une zone mémoire peut être ouverte en écriture uniquement lors du lien dynamique ou de la génération de code JIT, mais après la fin de l'écriture, limitée uniquement à la lecture et à l'exécution, empêchant ainsi un attaquant de permettre l'écriture pour ce bloc de mémoire en cas de compromission. En plus de PROT_MAX(), sysctl vm.imply_prot_max a également été implémenté, et lorsqu'il est activé, l'ensemble des drapeaux autorisés est déterminé sur la base des paramètres initiaux du premier appel mmap.
- Pour renforcer la protection contre l'exploitation des vulnérabilités, en plus de la technique de randomisation de l'espace d'adressage (ASLR), un mécanisme de randomisation des décalages des pointeurs, adressant le cadre de pile initial et plaçant dans la pile des structures contenant des informations sur l'environnement, les paramètres de lancement du programme et les données pour les images exécutables au format ELF, a été proposé.
- Des travaux ont été réalisés pour supprimer la fonction non sécurisée gets de libc (à partir de la norme C11, cette fonction est exclue de la spécification) et pour corriger les ports qui utilisent encore cette fonction. Le changement devrait être proposé dans FreeBSD 13.0.
- Un projet expérimental a été lancé pour créer des moyens d'orchestration des environnements jail sur la base du framework pour créer et exporter des images, mis en œuvre de manière analogue à Docker, et d'un pilote , fournissant une interface pour le lancement dynamique d'applications dans un environnement jail. Le modèle proposé permet de séparer les processus de création d'environnements jail et de déploiement d'applications. L'un des objectifs du projet est de fournir un moyen de manipuler les jails comme des conteneurs à la manière de Docker.
- Systèmes de stockage et systèmes de fichiers
- De NetBSD, dans l'utilitaire « makefs » le support du système de fichiers FAT (msdosfs). Les modifications préparées permettent de créer des images FS avec FAT sans utiliser le pilote md et sans les privilèges de root.
- La révision du pilote du sous-système FUSE (File system in USErspace) permettant de créer des implémentations de systèmes de fichiers dans l'espace utilisateur a été achevée. Le pilote initial incluait de nombreux bogues et était basé sur la version FUSE 7.8, publiée il y a 11 ans. Dans le cadre du projet de modernisation du pilote, le support du protocole FUSE 7.23 a été réalisé, du code pour vérifier les permissions côté noyau (« -o default_permissions ») a été ajouté, des appels VOP_MKNOD, VOP_BMAP et VOP_ADVLOCK ont été ajoutés, la possibilité d'interrompre les opérations FUSE a été assurée, le support des canaux anonymes et des sockets unix dans fusefs a été ajouté, la possibilité d'utiliser kqueue pour /dev/fuse a été instaurée, la mise à jour des paramètres de montage via « mount -u » a été autorisée, le support de l'exportation de fusefs via NFS a été mis en œuvre, l'utilisation de RLIMIT_FSIZE a été prise en compte, les drapeaux FOPEN_KEEP_CACHE et FUSE_ASYNC_READ ont été ajoutés, des optimisations significatives de la performance ont été réalisées et l'organisation du cache a été améliorée. Le nouveau pilote a été intégré dans les branches head et stable/12 (fait partie de FreeBSD 12.1).
- Le travail sur la mise en œuvre de NFSv4.2 (RFC-7862) pour FreeBSD est quasiment terminé. Au cours de la période de rapport, l'accent a été mis sur les tests. Les tests de compatibilité avec l'implémentation de Linux ont été achevés, mais la vérification du fonctionnement du serveur pNFS avec NFSv4.2 est toujours en cours. Dans l'ensemble, le code est déjà considéré comme prêt pour l'intégration dans les branches FreeBSD head/current. La nouvelle version de NFS ajoute le support des fonctions posix_fadvise, posix_fallocate, ainsi que des modes SEEKHOLE/SEEKDATA dans lseek, et permet des opérations de copie locale de parties de fichiers sur le serveur (sans transfert au client).
- Support matériel
- Un projet a été lancé pour améliorer le fonctionnement de FreeBSD sur les ordinateurs portables. Le premier appareil pour lequel un audit de la prise en charge du matériel sous FreeBSD a été réalisé est l'ordinateur portable Lenovo X1 Carbon de septième génération.
- CheriBSD, un fork de FreeBSD pour l'architecture processeur de recherche. (Instruction de Jeu de Risc Améliorées par le Matériel), mis à jour pour supporter le futur processeur ARM Morello, qui prendra en charge un système de gestion d'accès à la mémoire CHERI, basé sur le modèle de sécurité du projet Capsicum. La puce Morello devrait être lancée en 2021. Les développeurs de CheriBSD continuent également de suivre le développement du prototype de référence CHERI basé sur l'architecture MIPS.
- Le support des puces RockChip RK3399, utilisées dans les cartes RockPro64 et NanoPC-T4, a été élargi. L'amélioration la plus significative a été l'ajout du support eMMC et le développement d'un nouveau pilote pour le contrôleur eMMC utilisé dans la carte.
- Le travail sur la prise en charge de l'ARM64 SoC Broadcom BCM5871X avec des processeurs ARMv8 Cortex-A57, destinés à être utilisés dans des routeurs, des passerelles et des systèmes de stockage en réseau, a été poursuivi. Au cours de la période de rapport
le support de l'iProc PCIe a été élargi et la possibilité d'utiliser des opérations cryptographiques matérielles pour accélérer le travail d'IPsec a été ajoutée.
L'intégration du code dans la branche HEAD est attendue au quatrième trimestre. - Des réalisations significatives sont notées dans le développement du port FreeBSD pour la plateforme powerpc64. L'accent est mis sur l'assurance d'un bon fonctionnement sur les systèmes équipés de processeurs IBM POWER8 et POWER9, mais un support optionnel est également prévu pour les anciens Apple Power Mac, x500 et Amiga A1222. La branche powerpc*/12 continue d'être fournie avec gcc 4.2.1, tandis que la branche powerpc*/13 sera bientôt migrée vers llvm90. Sur 33306 ports, 30514 sont compilés avec succès.
- Le portage de FreeBSD pour le SoC NXP LS1046A 64 bits, basé sur le processeur ARMv8 Cortex-A72, avec un moteur intégré d'accélération du traitement des paquets réseau, Ethernet 10 Gb, PCIe 3.0, SATA 3.0 et USB 3.0 a été poursuivi. Au cours de la période de rapport, le support de l'USB 3.0, de la SD/MMC, de l'I2C, de l'interface réseau DPAA et du GPIO a été mis en œuvre. Un support pour QSPI et une optimisation des performances de l'interface réseau sont prévus. La finalisation des travaux et l'intégration dans la branche HEAD sont attendues au quatrième trimestre 2019.
- Le pilote ena a été mis à jour avec le support de la deuxième génération d'adaptateurs réseau ENAv2 (Elastic Network Adapter), utilisés dans l'infrastructure Elastic Compute Cloud (EC2) pour établir des connexions entre les nœuds EC2 à des vitesses allant jusqu'à 25 Gb/s. Le support NETMAP a été ajouté et testé dans le pilote ena, et l'agencement de la mémoire a été adapté pour activer le mode LLQ dans les environnements Amazon EC2 A1.
- Applications et système de ports
- Les composants de la pile graphique et les ports associés à xorg ont été mis à jour. Les ports utilisant USE_XORG et XORG_CAT ont été migrés vers le cadre USES au lieu d'appeler bsd.xorg.mk via bsd.port.mk. Ces ports incluent désormais le drapeau « USES=xorg » dans les fichiers make. La fonctionnalité XORG_CAT a été extraite de bsd.xorg.mk et s'active désormais avec le drapeau « USES=xorg-cat ». Un outil pour créer directement les ports xorg à partir du dépôt git a été ajouté.
freedesktop.org, ce qui permet, par exemple, de créer des ports pour des versions qui ne sont pas encore publiées. À l'avenir, il est prévu de préparer un outil pour utiliser le système de construction meson au lieu d'autotools pour construire les ports xorg.Des travaux ont été réalisés pour nettoyer les anciens ports xorg liés à des composants déjà obsolètes. Par exemple, le port x11/libXp a été supprimé, tandis que les ports x11/Xxf86misc, x11-fonts/libXfontcache et graphics/libGLw ont été classés comme obsolètes.
- Des efforts ont été déployés pour améliorer le support de Java 11 et des versions ultérieures dans FreeBSD, ainsi que pour porter certaines modifications dans la branche Java 8. Après la mise en œuvre du support de nouvelles fonctionnalités de Java 11 telles que Java Flight Recorder, HotSpot Serviceability Agent, HotSpot Debugger, DTrace, Javac Server, Java Sound et SCTP pour FreeBSD, le travail s'est concentré sur la réussite de tous les tests de compatibilité. Le nombre d'échecs lors des tests a été réduit de 50 à 2.
- Le bureau KDE Plasma, les KDE Frameworks, les KDE Applications et Qt sont à jour et ont été mis à jour vers les dernières versions.
- Les ports du bureau Xfce ont été mis à jour vers la version ;
- L'arbre des ports FreeBSD a dépassé le cap des 38000 ports, avec un nombre de PR non résolus légèrement supérieur à 2000, dont 400 PR n'ont pas encore été examinés. Au cours de la période de rapport, 7340 modifications ont été apportées par 169 développeurs. Deux nouveaux participants (Santhosh Raju et Dmitri Goutnik) ont obtenu des droits de committer. Une nouvelle version du gestionnaire de paquets pkg 1.12 a été publiée, avec un support pour les overlay dans l'arbre des ports et la réalisation d'un nettoyage de bsd.sites.mk. Parmi les mises à jour notables des versions dans les ports, on note : Lazarus 2.0.4, LLVM 9.0, Perl5.30, PostgreSQL 11, Ruby 2.6, Firefox 69.0.1, Firefox-esr 68.1.0, Chromium 76.0;
- Le développement du projet se poursuit , est une distribution spécialisée pour le déploiement d'infrastructures de serveurs virtuels. En ce qui concerne les tâches à résoudre, ClonOS rappelle des systèmes comme Proxmox, Triton (Joyent), OpenStack, OpenNebula et Amazon AWS, la principale différence étant l'utilisation de FreeBSD et la capacité à gérer, déployer et administrer des conteneurs Jail FreeBSD et des environnements virtuels basés sur les hyperviseurs Bhyve et Xen. Parmi les changements récents, on note le support de
cloud-init pour les VM Linux/BSD et cloudbase-init pour les VM Windows, le début de la transition vers l'utilisation d'images personnalisées, l'engagement de Jenkins CI pour les tests de construction et un nouveau dépôt pkg pour l'installation
de ClonOS à partir de paquets.
- Les composants de la pile graphique et les ports associés à xorg ont été mis à jour. Les ports utilisant USE_XORG et XORG_CAT ont été migrés vers le cadre USES au lieu d'appeler bsd.xorg.mk via bsd.port.mk. Ces ports incluent désormais le drapeau « USES=xorg » dans les fichiers make. La fonctionnalité XORG_CAT a été extraite de bsd.xorg.mk et s'active désormais avec le drapeau « USES=xorg-cat ». Un outil pour créer directement les ports xorg à partir du dépôt git a été ajouté.
Source : opennet.ru
