Simple Science

Ciencia de vanguardia explicada de forma sencilla

# Informática# Criptografía y seguridad# Ingeniería del software

Avances en pruebas de eBPF: El Fuzzer de Runtime de BPF

Una nueva herramienta mejora las pruebas de programas eBPF y identifica vulnerabilidades.

― 7 minilectura


Las pruebas de eBPF seLas pruebas de eBPF seponen más difíciles.en eBPF.Nuevo fuzzer encuentra fallos críticos
Tabla de contenidos

EBPF, que significa "filtro de paquetes de Berkeley extendido", es una tecnología que se usa en el sistema operativo Linux. Permite a los usuarios ejecutar programas directamente en el núcleo, que es la parte central del sistema operativo. Esta función es útil para varias tareas como redes, seguridad y monitoreo del sistema. Dado que los programas eBPF pueden ejecutarse en el núcleo, ofrecen flexibilidad y eficiencia.

Sin embargo, esta capacidad también introduce nuevos riesgos. Si alguien suministra un programa eBPF malicioso, podría aprovechar debilidades en el sistema. Para protegerse de esto, los programas deben pasar por una verificación de seguridad por un componente llamado Verificador eBPF antes de que puedan ejecutarse.

La Seguridad de los Programas eBPF

El verificador eBPF es esencial para garantizar que los programas sean seguros para ejecutar. Verifica cada programa eBPF para asegurarse de que no causará que el sistema se congele o acceda a la memoria de forma incorrecta. Si un programa no pasa esta verificación, no se le permitirá ejecutarse.

El desafío es que, a pesar de estas medidas de seguridad, pueden existir Vulnerabilidades dentro del propio sistema eBPF. Encontrar y arreglar estas debilidades es crucial para mantener la integridad del sistema. Un método prometedor para descubrir esos problemas es el Fuzzing.

¿Qué es el Fuzzing?

El fuzzing es una técnica de prueba que se usa para descubrir errores o vulnerabilidades en el software. Implica alimentar datos aleatorios o inesperados a un programa para ver cómo se comporta. Si el programa se bloquea o se comporta de manera inesperada, indica que puede haber un defecto a investigar.

Las herramientas actuales para fuzzing han demostrado ser ineficaces al probar a fondo el tiempo de ejecución de eBPF. Por ejemplo, una herramienta, Syzkaller, tiene problemas para encontrar problemas en programas eBPF debido a las estrictas verificaciones impuestas por el verificador. Aquí es donde entra en juego una nueva herramienta conocida como el Fuzzer de Tiempo de Ejecución de BPF.

El Fuzzer de Tiempo de Ejecución de BPF

El Fuzzer de Tiempo de Ejecución de BPF ha sido diseñado para superar las limitaciones de las herramientas existentes como Syzkaller. Su objetivo es crear programas eBPF que puedan pasar las verificaciones del verificador, mientras se asegura de que los programas generados sean útiles para probar los componentes de tiempo de ejecución de eBPF.

El Fuzzer de Tiempo de Ejecución de BPF es capaz de generar programas eBPF más expresivos en comparación con los producidos por Syzkaller. En pruebas, se ha demostrado que ejecuta significativamente más programas eBPF que Syzkaller en el mismo período de tiempo. Además, ha identificado vulnerabilidades, demostrando su efectividad en las pruebas.

Cómo Funcionan los Programas eBPF

Para entender cómo operan los programas eBPF, es importante mirar su flujo de trabajo. Hay tres pasos clave en este proceso: cargar, adjuntar y ejecutar.

Cargando

El primer paso implica cargar el programa eBPF en el núcleo. Este proceso requiere crear estructuras de datos y resolver referencias a otros recursos. Luego, el verificador eBPF revisa el programa para verificar su seguridad. Si el verificador aprueba, el programa puede ejecutarse.

Adjuntando

Una vez cargado, el programa eBPF necesita ser adjuntado a puntos específicos en el núcleo conocidos como hooks. Estos hooks son donde el programa puede ser activado por eventos en el sistema.

Ejecutando

Finalmente, cuando ocurren los eventos apropiados, el núcleo ejecutará los programas eBPF adjuntos. Durante la ejecución, el programa puede interactuar con varios recursos proporcionados por el núcleo, como almacenar datos o leer desde la memoria.

La Importancia de Generar Programas eBPF Válidos

Generar programas eBPF válidos que puedan pasar el verificador es crucial para un fuzzing efectivo. El Fuzzer de Tiempo de Ejecución de BPF aborda esto elaborando cuidadosamente programas que cumplen con las condiciones requeridas.

Asegura que los programas sigan las estrictas reglas impuestas por el verificador, lo que los hace más seguros para ejecutar. Como resultado, el fuzzer puede probar de manera más efectiva el tiempo de ejecución de eBPF y descubrir vulnerabilidades.

Superando Desafíos en el Fuzzing de eBPF

Hay desafíos significativos para llevar a cabo con éxito el fuzzing en los programas eBPF. El Fuzzer de Tiempo de Ejecución de BPF enfrenta estos obstáculos enfocándose en tres áreas clave:

1. Generar Programas Válidos

El fuzzer crea programas eBPF semánticamente correctos. Al elaborar cuidadosamente estos programas, se asegura de que puedan pasar las verificaciones de seguridad del verificador.

2. Cumplir Dependencias

Los programas eBPF a menudo dependen de otras llamadas al sistema para funcionar correctamente. El fuzzer genera las llamadas al sistema necesarias para asegurar que los programas tengan el contexto adecuado para la ejecución.

3. Activar la Ejecución del Programa

Para probar el tiempo de ejecución de manera efectiva, el fuzzer genera llamadas para adjuntar y activar la ejecución de programas eBPF. Al hacer esto, se asegura de que el proceso de prueba cubra todos los componentes relevantes del tiempo de ejecución.

Resultados del Fuzzer de Tiempo de Ejecución de BPF

En pruebas prácticas, el Fuzzer de Tiempo de Ejecución de BPF superó a Syzkaller de manera significativa. Por ejemplo, durante una sesión de prueba de 48 horas, logró ejecutar más programas eBPF, descubriendo varias vulnerabilidades en el proceso.

La efectividad del Fuzzer de Tiempo de Ejecución de BPF se atribuye a su capacidad para generar programas eBPF más complejos y expresivos en comparación con aquellos creados por otras herramientas. Esta complejidad permite una exploración más profunda de las posibles debilidades dentro del tiempo de ejecución de eBPF.

Descubriendo Vulnerabilidades

El Fuzzer de Tiempo de Ejecución de BPF encontró con éxito múltiples vulnerabilidades dentro del tiempo de ejecución de eBPF. Algunas de estas vulnerabilidades fueron lo suficientemente significativas como para recibir números CVE (Vulnerabilidades y Exposiciones Comunes), lo que indica su gravedad.

Encontrar estos problemas es crucial porque ayuda a los desarrolladores a arreglar fallos en el sistema, haciendo que sea más seguro y confiable.

El Futuro del Fuzzing de Programas eBPF

A medida que la tecnología eBPF continúa evolucionando, es importante que herramientas de fuzzing como el Fuzzer de Tiempo de Ejecución de BPF se adapten. Esto puede implicar actualizar la herramienta para reflejar cambios en el subsistema eBPF, como nuevos tipos de programas, funciones u otros componentes.

Sin embargo, la base ya sentada por el Fuzzer de Tiempo de Ejecución de BPF facilitará la incorporación de estas actualizaciones con un mínimo esfuerzo manual.

Conclusión

El Fuzzer de Tiempo de Ejecución de BPF representa un avance significativo en la capacidad de probar programas eBPF de manera efectiva. Al generar programas válidos y expresivos, no solo mejora el proceso de fuzzing, sino que también contribuye a la seguridad y estabilidad general del núcleo de Linux.

A través de pruebas exitosas y la revelación de vulnerabilidades, el Fuzzer de Tiempo de Ejecución de BPF ha demostrado su potencial para mejorar la seguridad de la tecnología eBPF en aplicaciones del mundo real. A medida que esta tecnología crezca, herramientas como el Fuzzer de Tiempo de Ejecución de BPF jugarán un papel crítico en garantizar su confiabilidad y seguridad.

Fuente original

Título: BRF: eBPF Runtime Fuzzer

Resumen: The eBPF technology in the Linux kernel has been widely adopted for different applications, such as networking, tracing, and security, thanks to the programmability it provides. By allowing user-supplied eBPF programs to be executed directly in the kernel, it greatly increases the flexibility and efficiency of deploying customized logic. However, eBPF also introduces a new and wide attack surface: malicious eBPF programs may try to exploit the vulnerabilities in the eBPF subsystem in the kernel. Fuzzing is a promising technique to find such vulnerabilities. Unfortunately, our experiments with the state-of-the-art kernel fuzzer, Syzkaller, shows that it cannot effectively fuzz the eBPF runtime, those components that are in charge of executing an eBPF program, for two reasons. First, the eBPF verifier (which is tasked with verifying the safety of eBPF programs) rejects many fuzzing inputs because (1) they do not comply with its required semantics or (2) they miss some dependencies, i.e., other syscalls that need to be issued before the program is loaded. Second, Syzkaller fails to attach and trigger the execution of eBPF programs most of the times. This paper introduces the BPF Runtime Fuzzer (BRF), a fuzzer that can satisfy the semantics and dependencies required by the verifier and the eBPF subsystem. Our experiments show, in 48-hour fuzzing sessions, BRF can successfully execute 8x more eBPF programs compared to Syzkaller. Moreover, eBPF programs generated by BRF are much more expressive than Syzkaller's. As a result, BRF achieves 101% higher code coverage. Finally, BRF has so far managed to find 4 vulnerabilities (some of them have been assigned CVE numbers) in the eBPF runtime, proving its effectiveness.

Autores: Hsin-Wei Hung, Ardalan Amiri Sani

Última actualización: 2023-05-15 00:00:00

Idioma: English

Fuente URL: https://arxiv.org/abs/2305.08782

Fuente PDF: https://arxiv.org/pdf/2305.08782

Licencia: https://creativecommons.org/licenses/by/4.0/

Cambios: Este resumen se ha elaborado con la ayuda de AI y puede contener imprecisiones. Para obtener información precisa, consulte los documentos originales enlazados aquí.

Gracias a arxiv por el uso de su interoperabilidad de acceso abierto.

Más de autores

Artículos similares