El proyecto Asterinas ha publicado la versión 0.18, un núcleo escrito en Rust y diseñado para su uso en sistemas operativos de propósito general. El núcleo proporciona una interfaz binaria de aplicación (ABI) compatible con el propio núcleo. Linux y puede utilizarse en su lugar. La distribución Asterinas NixOS, que combina el núcleo Asterinas con el entorno del sistema NixOS, se está desarrollando en paralelo. El código del proyecto se distribuye bajo la licencia MPL (Mozilla Public License).
Actualmente, existen alrededor de 240 llamadas al sistema implementadas en el núcleo. LinuxLa distribución Asterinas NixOS está verificada para ejecutarse sobre el kernel de Asterinas con más de 100 paquetes NixOS. Los paquetes compatibles incluyen: Xfce, Firefox, bash, systemd, Podman, QEMU, rsync, Apache httpd, nginx, SQLite, Redis, Clang, GCC, Go, Lua, Node.js, OpenJDK, Perl, PHP, Python, Ruby, Rust, Git, FFmpeg, PyTorch, TensorFlow, Ollama y Codex.
El kernel ofrece soporte completo para la arquitectura x86-64, soporte parcial para RISC-V 64 y x86-64 con aislamiento basado en Intel TDX, así como soporte inicial para la arquitectura LoongArch 64. Las áreas de aplicación prioritarias incluyen sistemas basados en Linux ABI, pero que requieren un mayor nivel de seguridad. Por ejemplo, se propone el uso de Asterinas para crear un entorno de sistema seguro. máquinas virtuales, para cuyo aislamiento se utilizan tecnologías como ARM CCA, AMD SEV e Intel TDX, así como en el lado del sistema host, que asegura el lanzamiento de contenedores.
Para reducir la probabilidad de errores de memoria, principal fuente de las vulnerabilidades más peligrosas, Asterinas utiliza el lenguaje Rust y un uso limitado de bloques inseguros. El kernel se construye utilizando la arquitectura framekernel, que busca combinar las capacidades de aislamiento de los microkernels con la eficiencia de los kernels monolíticos.
Los componentes del núcleo en Asterinas se ubican en un espacio de direcciones compartido, y la seguridad se logra mediante la separación lógica del código seguro del código potencialmente vulnerable. El núcleo se divide en dos partes, ambas escritas en Rust: el marco del sistema operativo (OS Framework) y los servicios del sistema operativo (OS Services). OS Services prohíbe el uso de bloques inseguros, y todas las operaciones de bajo nivel que requieren la ejecución de código en bloques inseguros se trasladan al marco del sistema operativo y solo son accesibles a través de una API de alto nivel. Todas las llamadas al sistema, los sistemas de archivos y los controladores se implementan en el nivel de OS Services y no pueden incluir bloques inseguros.
Para el desarrollo de servicios del sistema y módulos del kernel, se proporciona el OSDK (Kit de Desarrollo del Sistema Operativo), que incluye la utilidad cargo-osdk para crear, compilar, probar y ejecutar componentes del sistema operativo. Los desarrolladores también pueden usar el conjunto OSTD (Biblioteca Estándar del Sistema Operativo), que incluye una edición de las bibliotecas estándar de Rust (crate std) adaptada para su uso en componentes del sistema operativo.
Entre los cambios en la versión 0.18:
- Como parte del trabajo para garantizar que Asterinas se ejecute como un sistema invitado en los contenedores Kata Containers y Confidential Containers VM, se ha implementado soporte para IPC y espacios de nombres cgroup, nsfs (/proc/[pid]/ns), cgroups, virtio-fs (para acceder a un sistema de archivos compartido con el sistema anfitrión), virtio-rng (/dev/hwrng para la entropía del generador de números pseudoaleatorios) y vsock (para la comunicación entre los sistemas anfitrión e invitado).
- Se implementaron la llamada al sistema ptrace y las capacidades de depuración en el espacio de usuario utilizando GDB y strace.
- Se ha propuesto una nueva implementación del sistema de archivos ext2 y se ha añadido un controlador NVMe. Se ha incorporado un mecanismo Dentry (entrada de directorio) al VFS y se ha rediseñado la implementación de la caché de páginas.
- La distribución Asterinas NixOS tiene la capacidad de ejecutar Codex, QEMU y Firefox.
- Se agregaron las llamadas al sistema pidfd_getfd, pidfd_send_signal y pivot_root.
- Se agregó la inicial Compatibilidad con IPv6.
- Se ha implementado un sistema de capacidades para delegar operaciones individuales con privilegios.
- Se agregó la implementación inicial del marco LSM (Linux Módulos de seguridad).
Fuente: opennet.ru
