Informe sobre el desarrollo de FreeBSD del tercer trimestre de 2019

Publicado informe sobre el desarrollo del proyecto FreeBSD de julio a septiembre de 2019. Entre los cambios se pueden destacar:

  • Cuestiones generales y sistemáticas
    • El equipo principal aprobó en términos generales la posibilidad de incluir en el sistema código proporcionado bajo la licencia BSD con un acuerdo adicional sobre el uso de patentes (BSD+Patent), pero la decisión de incluir cada componente bajo esta licencia debe ser aprobada por separado;
    • Se celebró la primera reunión del grupo de trabajo creado para llevar a cabo la migración de los códigos fuente desde el sistema de control de versiones centralizado Subversion a un sistema descentralizado Git. La discusión sobre la viabilidad de la migración continúa y aún quedan muchas cuestiones por resolver (por ejemplo, cómo manejar contrib, si es necesario regenerar los hashes en el repositorio git actual y cómo implementar de la mejor manera las pruebas de los commits);
    • De NetBSD se ha portado la herramienta KCSAN (Kernel Concurrency Sanitizer), que permite detectar la aparición de condiciones de carrera entre los hilos del núcleo que se ejecutan en diferentes CPUs;
    • Se está trabajando en el uso del ensamblador integrado en Clang (IAS) en lugar del ensamblador de GNU binutils;
    • La infraestructura de emulación del entorno Linux (Linuxulator) se ha adaptado para funcionar en la arquitectura ARM64. Se ha implementado la llamada al sistema «renameat2». La utilidad strace se ha mejorado para diagnosticar problemas en los archivos ejecutables de Linux que se ejecutan en el Linuxulator. Se ha resuelto el problema de los fallos al vincular los archivos ejecutables con la glibc más reciente. Los puertos con componentes de Linux para Linuxulator se han actualizado a CentOS 7.7;
    • En el marco del programa Google Summer of Code, los estudiantes han completado con éxito seis proyectos: se preparó la implementación de una herramienta unificada (IPv4/IPv6) ping, se desarrollaron herramientas para probar firewalls y detectar errores en el núcleo (Kernel sanitizer), se propuso un módulo mac_ipacl, se escribió código para la compresión de la memoria virtual y se trabajó en la separación del proceso de compilación de puertos de la instalación local;
    • Continúa el desarrollo del proyecto de pruebas de fuzzing del núcleo de FreeBSD utilizando el sistema syzkaller. Durante el período informado, se han identificado y solucionado más de diez errores utilizando syzkaller. Se ha asignado un servidor separado para ejecutar syzkaller en máquinas virtuales basadas en bhyve, y utilizando
      Se ha establecido la verificación de varios subsistemas de FreeBSD en la infraestructura de Google. Se ha organizado la transmisión de información sobre todos los fallos al servicio backtrace.io para facilitar su agrupamiento y análisis;
    • Se está trabajando en la actualización de la implementación de zlib a nivel del núcleo.
      El código relacionado con la compresión se ha trasladado de zlib 1.0.4, lanzado hace más de 20 años, a la base de código actual de zlib 1.2.11. Para unificar el acceso a zlib, se han añadido funciones compress, compress2 y uncompress al núcleo. El código que hace funcionar el protocolo PPP de la subsistema netgraph ha sido cambiado para usar la implementación del sistema de zlib, en lugar de su propia edición de esta biblioteca. También se han trasladado al nuevo zlib las subsistemas kern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor,
      if_mxge, bxe actualizado y ng_deflate;
    • Se está desarrollando una nueva interfaz de núcleo sysctlinfo, que permite encontrar elementos en la base de parámetros sysctl, procesados en forma de MIB (Base de Información de Gestión), y transmitir información sobre objetos al espacio del usuario.
  • Seguridad
    • Se ha desarrollado un módulo de núcleo mac_ipacl, basado en TrustedBSD MAC Framework e implementando un sistema de control de acceso a la configuración del stack de red para entornos jail. Por ejemplo, con mac_ipacl, el administrador del sistema host puede prohibir al usuario root en un entorno jail cambiar o establecer direcciones IP o parámetros de subredes para ciertas interfaces de red. El sistema propuesto de control de acceso mandatorio permite permite definir listas de direcciones IP y subredes permitidas para Jail, prohibir la asignación de ciertas IP y subredes en Jail, o restringir los cambios de parámetros solo para ciertas interfaces de red;
    • La empresa Intel ha trasladado al proyecto el puerto del stack de software TPM 2.0 (Trusted Platform Module) para interactuar con el chip para cálculos seguros, que comúnmente se utiliza para la carga verificada de firmware y del gestor de arranque del sistema operativo. Los componentes de la pila se presentan en forma de puertos security/tpm2-tss, security/tpm2-tools y security/tpm2-abrmd. El puerto tpm2-tss incluye bibliotecas para usar la API TPM2, tpm2-tools proporciona utilidades de línea de comandos para realizar operaciones con TPM, y tpm2-abrmd contiene un proceso en segundo plano con la implementación de los componentes TPM Access Broker y Resource Manager, que multiplexa las solicitudes de diferentes usuarios de TPM a un solo dispositivo. Además de la carga verificada en FreeBSD, TPM puede utilizarse para mejorar la seguridad de Strongswan IPsec, SSH y TLS al realizar operaciones criptográficas en un chip separado;
    • El núcleo para la arquitectura amd64 está adaptado para cargarse utilizando la técnica de protección W^X (write XOR execute), la cual implica que las páginas de memoria no pueden ser accesibles para escritura y ejecución simultáneamente (el núcleo ahora puede cargarse con páginas de memoria ejecutables para las cuales se prohíbe la escritura). Un nuevo método de protección del núcleo se ha incluido en la rama HEAD y formará parte de las versiones FreeBSD 13.0 y 12.2;
    • Para las llamadas al sistema mmap y mprotect el modo «BACKUP LOCK», que se puede utilizar durante la copia de seguridad de archivos de la base de datos; el macro PROT_MAX(), que permite determinar el conjunto de banderas de restricción de acceso permitido al cambiarlo posteriormente (PROT_READ, PROT_WRITE, PROT_EXEC). Con PROT_MAX(), el desarrollador puede prohibir que un área de memoria se clasifique como ejecutable o solicitar memoria que no permita la ejecución, pero que más adelante pueda ser convertida en ejecutable. Por ejemplo, un área de memoria puede estar abierta para escritura solo durante el tiempo de enlace dinámico o generación de código JIT, pero tras finalizar la escritura, se limita solo a lectura y ejecución, y posteriormente, en caso de compromiso, un atacante no podrá permitir escritura para ese bloque de memoria. Además de PROT_MAX(), también se implementó sysctl vm.imply_prot_max, que al activarse determina el conjunto de banderas permitidas basado en los parámetros iniciales de la primera llamada a mmap;
    • Para mejorar la protección contra la explotación de vulnerabilidades, además de la técnica de aleatorización del espacio de direcciones (ASLR), se ha propuesto un mecanismo de aleatorización de los desplazamientos de punteros que apuntan al marco de pila inicial y a las estructuras alojadas en la pila con información sobre el entorno, parámetros de inicio del programa y datos para imágenes ejecutables en formato ELF.
    • Se ha trabajado en la eliminación de la función insegura gets de libc (a partir del estándar C11, esta función ha sido excluida de la especificación) y en la corrección de los puertos que aún utilizan esta función. Se planea proponer el cambio en FreeBSD 13.0.
    • Se ha lanzado un proyecto experimental para crear herramientas de orquestación de entornos jail basadas en el marco pot para la creación y exportación de imágenes, implementado de manera similar a Docker, y un controlador nomad, que proporciona una interfaz para el inicio dinámico de aplicaciones en un entorno jail. El modelo propuesto permite separar los procesos de creación de entornos jail y el despliegue de aplicaciones en ellos. Uno de los objetivos del proyecto es proporcionar un medio para manipular jail como contenedores al estilo Docker.
  • Sistemas de almacenamiento y sistemas de archivos
    • De NetBSD a la utilidad "makefs" se trasladó soporte para el sistema de archivos FAT (msdosfs). Las modificaciones preparadas permiten crear imágenes de FS con FAT sin usar el controlador md y sin permisos de root.
    • Se ha completado la reestructuración del controlador del subsistema FUSE (File system in USErspace), que permite crear implementaciones de sistemas de archivos en el espacio de usuario. El controlador suministrado originalmente contenía muchos errores y se basaba en la versión FUSE 7.8, lanzada hace 11 años. En el marco del proyecto de modernización del controlador, se ha implementado soporte para el protocolo FUSE 7.23, se ha añadido código para verificar los permisos de acceso desde el núcleo ("-o default_permissions"), se han añadido llamadas a VOP_MKNOD, VOP_BMAP y VOP_ADVLOCK, se ha habilitado la posibilidad de interrumpir operaciones FUSE, se ha añadido soporte para tuberías sin nombre y socket unix en fusefs, se ha hecho posible el uso de kqueue para /dev/fuse, se ha permitido la actualización de parámetros de montaje a través de "mount -u", se ha añadido soporte para la exportación de fusefs a través de NFS, se ha implementado la contabilización de RLIMIT_FSIZE, se han añadido las banderas FOPEN_KEEP_CACHE y FUSE_ASYNC_READ, se han realizado importantes optimizaciones de rendimiento y se ha mejorado la organización del almacenamiento en caché. El nuevo controlador se ha incluido en las ramas head y stable/12 (se ha integrado en FreeBSD 12.1).
    • Casi se ha completado la implementación de NFSv4.2 (RFC-7862) para FreeBSD. Durante el período del informe, se prestó especial atención a las pruebas. Se han completado las pruebas de compatibilidad con la implementación de Linux, pero aún se continúa verificando el funcionamiento del servidor pNFS con NFSv4.2. En términos generales, el código ya se considera listo para su integración en las ramas FreeBSD head/current. La nueva versión de NFS ha añadido soporte para las funciones posix_fadvise, posix_fallocate, y los modos SEEKHOLE/SEEKDATA en lseek, así como la operación de copia local de partes del archivo en el servidor (sin enviar al cliente);
  • Soporte de hardware
    • Se ha iniciado un proyecto para mejorar el funcionamiento de FreeBSD en laptops. El primer dispositivo para el cual se realizó una auditoría de soporte en FreeBSD fue la laptop Lenovo X1 Carbon de séptima generación;
    • CheriBSD, una bifurcación de FreeBSD para una arquitectura de procesador de investigación CHERI (Instrucciones de RISC mejoradas por capacidad), se actualizó para soportar el futuro procesador ARM Morello, que soportará un sistema de gestión de acceso a la memoria CHERI, basado en el modelo de protección del proyecto Capsicum. El chip Morello planea se lanzará en 2021. Los desarrolladores de CheriBSD también continúan siguiendo el desarrollo del prototipo de referencia CHERI basado en la arquitectura MIPS;
    • Se ha ampliado el soporte para los chips RockChip RK3399, utilizados en las placas RockPro64 y NanoPC-T4. La mejora más significativa ha sido el soporte para eMMC y el desarrollo de un nuevo controlador para el controlador eMMC utilizado en la placa;
    • Se ha continuado trabajando en la implementación del soporte para el SoC ARM64 Broadcom BCM5871X con procesadores ARMv8 Cortex-A57, dirigidos para su uso en enrutadores, gateways y almacenamiento en red. Durante el período del informe
      se ha ampliado el soporte para iProc PCIe y se ha añadido la posibilidad de utilizar operaciones criptográficas de hardware para acelerar el funcionamiento de IPsec.
      Se espera que la integración del código en la rama HEAD ocurra en el cuarto trimestre;
    • Se destacan logros significativos en el desarrollo del puerto de FreeBSD para la plataforma powerpc64. Se presta especial atención a asegurar un funcionamiento de calidad en sistemas con procesadores IBM POWER8 y POWER9, pero opcionalmente también se soporta funcionamiento en los antiguos Apple Power Mac, x500 y Amiga A1222. La rama powerpc*/12 sigue siendo suministrada con gcc 4.2.1, y la rama powerpc*/13 pronto se trasladará a llvm90. De 33306 puertos, se compilan con éxito 30514;
    • Se ha continuado la portación de FreeBSD para SoC NXP LS1046A de 64 bits basado en el procesador ARMv8 Cortex-A72 con un motor integrado para la aceleración del procesamiento de paquetes de red, Ethernet de 10 Gb, PCIe 3.0, SATA 3.0 y USB 3.0. Durante el período de informe, se ha implementado el soporte para USB 3.0, SD/MMC, I2C, la interfaz de red DPAA y GPIO. En los planes está el soporte para QSPI y la optimización del rendimiento de la interfaz de red. Se espera que el trabajo se complete e incluya en la rama HEAD en el cuarto trimestre de 2019.
    • Se ha actualizado el controlador ena con soporte para la segunda generación de adaptadores de red ENAv2 (Elastic Network Adapter), utilizados en la infraestructura Elastic Compute Cloud (EC2) para establecer comunicación entre nodos EC2 a velocidades de hasta 25 Gb/s. Se ha añadido y probado el soporte para NETMAP en el controlador ena, además de adaptar la distribución de memoria para habilitar el modo LLQ en entornos Amazon EC2 A1.
  • Aplicaciones y sistema de puertos
    • Se han actualizado los componentes de la pila gráfica y los puertos relacionados con xorg. Los puertos que utilizan USE_XORG y XORG_CAT han sido trasladados al marco USES en lugar de invocar bsd.xorg.mk a través de bsd.port.mk. Estos puertos ahora incluyen la etiqueta "USES=xorg" en sus archivos make. La funcionalidad XORG_CAT se ha separado de bsd.xorg.mk y ahora se activa con la etiqueta "USES=xorg-cat". Se ha añadido una herramienta para la construcción directa de puertos xorg desde el repositorio git.
      freedesktop.org, lo que permite, por ejemplo, construir puertos para versiones que aún no han sido lanzadas. En el futuro se planea preparar herramientas para utilizar el sistema de construcción meson en lugar de autotools para construir puertos xorg.

      Se ha trabajado en la limpieza de antiguos puertos xorg asociados a componentes que ya no se soportan, como la eliminación del puerto x11/libXp, y los puertos x11/Xxf86misc, x11-fonts/libXfontcache y graphics/libGLw han sido clasificados como obsoletos.

    • Se ha mejorado el soporte para Java 11 y versiones más recientes en FreeBSD, así como la portación de algunos cambios a la rama Java 8. Después de que se implementaron en FreeBSD nuevas funcionalidades como Java Flight Recorder, HotSpot Serviceability Agent, HotSpot Debugger, DTrace, Javac Server, Java Sound y SCTP, el trabajo se ha centrado en asegurar que todos los tests de compatibilidad se pasen. El número de fallos en las pruebas se ha reducido de 50 a 2.
    • El escritorio KDE Plasma, KDE Frameworks, KDE Applications y Qt se mantienen actualizados y han sido actualizados a las versiones más recientes.
    • Los puertos con el escritorio Xfce han sido actualizados a la versión 4.14;
    • El árbol de puertos de FreeBSD ha superado la marca de 38000 puertos, el número de informes no cerrados apenas supera los 2000, de los cuales 400 informes aún no han sido revisados. Durante el período informado se realizaron 7340 cambios por 169 desarrolladores. Dos nuevos participantes (Santhosh Raju y Dmitri Goutnik) han recibido derechos de commit. Se ha publicado una nueva versión del gestor de paquetes pkg 1.12 con soporte para overlays en el árbol de puertos y limpieza de bsd.sites.mk. Entre las actualizaciones de versiones más significativas en los puertos se encuentran: Lazarus 2.0.4, LLVM 9.0, Perl 5.30, PostgreSQL 11, Ruby 2.6, Firefox 69.0.1, Firefox-esr 68.1.0, Chromium 76.0;
    • El desarrollo del proyecto continúa ClonOS, en desarrollo es una distribución especializada para el despliegue de infraestructuras de servidores virtuales. En cuanto a las tareas que resuelve, ClonOS es similar a sistemas como Proxmox, Triton (Joyent), OpenStack, OpenNebula y Amazon AWS, siendo la principal diferencia el uso de FreeBSD y la posibilidad de gestionar, desplegar y administrar contenedores Jail de FreeBSD y entornos virtuales basados en hipervisores Bhyve y Xen. Entre los cambios recientes se destaca el soporte de
      cloud-init para VM de Linux/BSD y cloudbase-init para VM de Windows, el inicio de la transición al uso de imágenes propias, la implementación de Jenkins CI para testing de builds y un nuevo repositorio pkg para la instalación
      de ClonOS a partir de paquetes.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster