Análisis profundo de la nueva llamada al sistema mseal de Linux
mseal es una nueva llamada al sistema introducida en la versión 6.10 del kernel de Linux, que ofrece una función de "sellado de memoria" para la protección de memoria.
- Esta llamada al sistema vuelve inmutable una región de memoria frente a modificaciones ilegítimas durante la ejecución del programa, impidiendo que un atacante cambie permisos de memoria o manipule el diseño de memoria.
mseal está pensado para evitar la ejecución de código por parte de atacantes remotos, y es diferente de memfd_create y memfd_secret, que ya existían para defenderse de atacantes locales que almacenan datos sensibles en memoria.
Cómo funciona mseal
- La firma de la función
mseal es simple: recibe una dirección inicial y una longitud, y sella la región de memoria correspondiente.
- La función
do_mseal bloquea la región de memoria, y mediante check_mm_seal y apply_mm_seal valida y sella esa región.
- En una región de memoria sellada no es posible cambiar permisos, desmapearla ni redimensionarla mediante llamadas al sistema como
mprotect, munmap y mremap.
Técnicas de ataque contra las que protege mseal
- Refuerzo de NX:
mseal impide cambiar los permisos de ejecución de la VMA, evitando ataques basados en shellcode.
- Mitigación de ataques de solo datos basados en desmapeo:
mseal evita la liberación arbitraria y el remapeo de regiones de memoria, bloqueando ataques de solo datos.
Fortalecimiento de software con mseal
mseal puede reforzar la seguridad sellando regiones específicas de memoria del software.
- Los desarrolladores pueden usar
mseal para sellar de forma selectiva regiones de memoria que puedan contener datos no confiables.
- A medida que avance su integración con glibc, podría añadirse una función de sellado automático.
Resumen de GN⁺
mseal es una nueva función de seguridad incorporada al kernel de Linux que sella regiones de memoria para impedir la ejecución de código por parte de atacantes remotos.
- A diferencia de métodos previos de protección de memoria, esta llamada al sistema evita cambios de permisos y el desmapeo de memoria, bloqueando ataques de solo datos.
- La incorporación de
mseal cumple un papel importante en el fortalecimiento de la seguridad del software, y se esperan más casos de uso mediante su integración con glibc.
- Otros proyectos con funciones similares incluyen
memfd_create y memfd_secret para la protección de memoria.
1 comentarios
Opiniones de Hacker News
Se mencionó una "discusión acalorada" en la lista de correo del kernel. Hay un comentario preguntando si alguien con conocimiento interno podría resumir las objeciones y preocupaciones. La lista de correo tiende a evitarse porque es demasiado intensa
Chrome quiere esta llamada, pero no puede desellar páginas selladas porque un atacante podría volver a mapearlas con otras banderas
Se proporciona un enlace al artículo sobre
mseal()y a artículos posterioresHay tristeza por el hecho de que, aunque las arquitecturas modernas (x86_64) tienen muchas funciones para fomentar la programación segura, los sistemas operativos todavía tengan que implementar llamadas como esta
Hay una pregunta sobre si la llamada al sistema
msealpodría invalidarse con un truco de LD_PRELOADEl prototipo de
mseal()en el artículo no es sintácticamente correcto. El primer argumento debería serunsigned long start_addry nounsigned start addrOpenBSD ha tenido esta funcionalidad desde hace mucho tiempo. Surge la duda de por qué recién ahora se está introduciendo en Linux