0. Antes de leer
- Esta entrada de blog está dirigida a futuros viajeros del tiempo que quieran investigar vulnerabilidades del kernel de Linux, y fue escrita para que los principiantes aprendan el flujo de trabajo de investigación y los investigadores con experiencia aprendan nuevas técnicas.
- La entrada de blog tiene formato de artículo de investigación, por lo que, a pesar de su gran extensión, está organizada para que sea fácil de escanear y extraer conocimiento.
- Como forma eficiente de leer esta entrada, se sugiere leer la sección de resumen, dividir la pantalla para leer y buscar, saltar a la sección del bug para entender cómo funciona el bug y, después de pasar por la sección de prueba de concepto, revisar el exploit.
1. Resumen
- En esta entrada de blog se presenta una nueva técnica para explotar un bug 0-day de double-free descubierto en nf_tables, con una tasa de éxito de 93%-99% incluso contra kernels de Linux reforzados (por ejemplo, instancias mitigadas de KernelCTF).
- Este exploit solo funciona cuando nf_tables está habilitado y los espacios de nombres de usuario no privilegiados están activados, y realiza un KSMA (Kernel-Space Mirroring Attack) que refleja el espacio del kernel en el espacio de usuario como si fuera un espejo.
- Usando la técnica Dirty Pagedirectory, se puede obtener acceso ilimitado de lectura/escritura sobre direcciones físicas, lo que se logra mediante confusión en las tablas de páginas.
2. Información de contexto
nf_tables es uno de los módulos integrados del kernel de Linux y se usa como backend de iptables en versiones recientes.
iptables es una herramienta de firewall que usa una máquina de estados y reglas definidas por el usuario para decidir si los paquetes pueden atravesar el firewall.
- Un veredicto de Netfilter es la decisión del conjunto de reglas de Netfilter sobre si un paquete específico debe pasar por el firewall, por ejemplo, descartarlo o aceptarlo.
- La estructura
sk_buff se usa para describir datos de red (por ejemplo, paquetes IP, tramas Ethernet, etc.), y el objeto sk_buff->head contiene el contenido real del paquete.
- La función de fragmentación de paquetes en IPv4 permite transmitir un paquete en varios fragmentos IP, y el kernel de Linux almacena todos los fragmentos en el mismo árbol rojo-negro.
Opinión de GN⁺
- Esta entrada de blog ofrece información muy útil para quienes quieren investigar vulnerabilidades del kernel de Linux. En particular, permite comprender vulnerabilidades relacionadas con nf_tables y aprender cómo explotarlas.
- La técnica de exploit presentada puede aportar de forma importante a la investigación de seguridad en entornos reales, y mediante estas técnicas los profesionales de seguridad pueden comprender mejor las debilidades de los sistemas y defenderlos.
- Sin embargo, también existe la posibilidad de que estas técnicas de exploit se usen con fines maliciosos, por lo que es necesario considerar los problemas éticos que podrían surgir al compartirlas.
- Para reforzar la seguridad del kernel de Linux, la comunidad debe seguir descubriendo y corrigiendo vulnerabilidades de manera continua, y esta entrada de blog puede verse como parte de ese esfuerzo.
- Si se realiza investigación de seguridad usando esta técnica o técnicas similares, los investigadores deben seguir políticas de divulgación responsable y colaborar para que los parches puedan distribuirse antes de que la vulnerabilidad sea explotada ampliamente.
1 comentarios
Opiniones de Hacker News
CONFIG_INIT_ON_ALLOC_DEFAULT_ON. Para más detalles, consultaREADME.md. Este bug fue parcheado en febrero de 2024 y se recomienda actualizar los dispositivos Linux.sysctl kernel.unprivileged_userns_clone = 1. Esta configuración es el valor predeterminado en los kernels de Debian/Ubuntu y Arch Linux. Si no la necesitas, conviene desactivarla.iptablesde entrada./boot/configo/proc/config.gz.CONFIG_INIT_ON_FREE_DEFAULT_ONevita el exploit, pero las distribuciones no lo compilan por defecto. Es un buen ejemplo de lo importante que es el hardening del kernel.