Dos compiladores de código han recibido soporte este mes para admitir de forma nativa Control Flow Guard (CFG), una característica de seguridad de Windows de lo más eficaz. Los dos compiladores son Clang (parte del proyecto de compilador LLVM) y Rust (el compilador predeterminado para el lenguaje de programación Rust).
En el futuro, Clang y Rustc podrán compilar código fuente de C y C++ en archivos binarios de Windows que aprovechan de forma nativa Windows CFG. Os habéis perdido, no os preocupéis vamos a explicaros en que consiste.
¿Qué es CFG?
CFG es una potente característica de seguridad que Microsoft agregó por primera vez en Windows 8.1. La característica puede proteger el flujo de ejecución del código de una aplicación para evitar que el código malintencionado (como el resultado de errores de memoria) secuestre el flujo de control nativo y haga que la aplicación tome acciones no deseadas.
Hasta ahora, si un desarrollador quería que su aplicación de Windows aprovechara la protección CFG del sistema operativo Windows, necesitaba compilar su código de C o C++ con Microsoft Visual C++, el único compilador de código popular que admitía CFG. Sin embargo hoy Microsoft ha indicado que está trabajando con los equipos LLVM y Rust para agregar compatibilidad con CFG a sus respectivos compiladores.
A partir de Clang 10.0 y Rust 1.47 (la compilación nocturna actual), los dos compiladores ahora también pueden compilar proyectos de C/C++ en aplicaciones de Windows que aprovechan la característica CFG para proteger los flujos de control de intentos no autorizados de manipulación/explotación.
Protecciones CFG también en Edge y Chrome
El elemento clave para ampliar la compatibilidad de CFG a LLVM/Clang es, irónicamente, Chromium, el navegador de código abierto en la base de Google Chrome, que se compila con Clang.
En primer lugar, Chromium es la base del navegador Edge recientemente renovado, y es muy probable que Microsoft desee habilitar las protecciones CFG para la nueva versión Edge, similar a todas sus aplicaciones nativas.
En segundo lugar, Chrome representa una enorme cuota de mercado del navegador del 60%, y a pesar de ser un competidor, Chrome con CFG habilitado es una buena noticia para todos, incluyendo Microsoft y su base de usuarios. Menos ataques en Chrome también significa menos escaladas de ataque al sistema operativo subyacente. Por lo tanto, la protección de Chrome también produce beneficios indirectos para Microsoft.
Por otro lado, la expansión de la compatibilidad de CFG a Rust también fue una buena noticia. El verano pasado, Microsoft indicaba que iba a explorar la reescritura de algunos componentes de Windows y Azure con Rust; componentes para los que la empresa probablemente querría tener CFG habilitado cuando se envían a producción.
«Trabajar con las comunidades de código abierto LLVM y Rust ha sido una experiencia muy positiva. Agradecemos en particular a los miembros de las comunidades que contribuyeron a este trabajo a través de sugerencias de diseño, revisiones de código y otros consejos», dijo Andrew Paverd, investigador sénior del Centro de respuesta de seguridad de Microsoft y Microsoft Research.
La ampliación de la compatibilidad del compilador para CFG es solo una de las muchas características de seguridad en las que Microsoft está trabajando actualmente. Otras nuevas características de seguridad que llegan a Windows también incluyen protección de pila forzada por hardware y protección de datos del núcleo.