El kernel personalizado de Kirisakura para OnePlus 8 Pro permite Control Flow Integrity (CFI) para una mejor seguridad

Detalles técnicos sobre la integridad del flujo de control

"La disponibilidad de una gran cantidad de punteros de funciones en el kernel contribuye a la popularidad de este patrón de ataque. Incluso si los atacantes no pueden inyectar su propio código ejecutable, se pueden ejecutar partes arbitrarias del código del kernel existente para completar su exploit.

LVMEl CFI de intenta mitigar estos ataques restringiendo los objetivos de llamada válidos y forzando un pánico en el kernel al detectar una violación del CFI. Se agrega una verificación antes de cada rama indirecta para confirmar que la dirección de destino apunta a una función válida con una firma correcta. Esto evita que una rama indirecta salte a una ubicación de código arbitraria e incluso limita las funciones que se pueden llamar. Un atacante aún podrá cambiar un puntero de función, si un error permite el acceso. Pero el CFI de LLVM limita el 55% de las llamadas indirectas a un máximo de 5 objetivos posibles y el 80% a un máximo de 20 objetivos. Para determinar todos los destinos de llamadas válidos para cada rama indirecta, el compilador necesita ver todo el código del núcleo a la vez.

El uso de LTO (Optimización del tiempo de enlace) hace esto posible. CFI de LLVM requiere el uso de LTO, donde el compilador produce código de bits específico de LLVM para todo C unidades de compilación, y un vinculador compatible con LTO utiliza el backend LLVM para combinar el código de bits y compilarlo en código nativo.

Además de permitir el uso de CFI, LTO logra un mejor rendimiento en tiempo de ejecución mediante el análisis de todo el programa y la optimización entre módulos.

ThinLTO casi ha alcanzado la mejora del rendimiento de los LTO. En el modo ThinLTO, al igual que con el LTO normal, Sonido metálico emite código de bits LLVM después de la fase de compilación. El código de bits ThinLTO se complementa con un resumen compacto del módulo. Durante el paso de vinculación, solo se leen los resúmenes y se combinan en un índice de resumen combinado, que incluye un índice de ubicaciones de funciones para la importación posterior de funciones entre módulos. Luego se realiza un análisis rápido y eficiente de todo el programa en el índice resumido combinado. ThinLTO permite un proceso de vinculación de subprocesos múltiples, lo que resulta en un tiempo de compilación reducido.

Debido a que CFI interrumpe la ejecución del programa cuando detecta ciertas clases de errores, también se clasifica como una herramienta de búsqueda de errores, como se mencionó anteriormente, cuando se usa en modo permisivo. El CFI permisivo mostrará violaciones de CFI en el registro del kernel, sin forzar un pánico en el kernel. Los núcleos centrales 4.9 (dispositivos de generación Pixel 3) y 4.14 (dispositivos de generación Pixel 4) tenían varios tipos de funciones. discrepancias que resultaron en violaciones de CFI, que fueron solucionadas por Google en conjuntos de parches disponibles en el kernel/common repositorios.

Sin embargo, debido a la naturaleza del ecosistema de Android, es probable que estas discrepancias se encuentren también en el código específico del fabricante del SoC (en este caso, Qualcomm) o del OEM (OnePlus). Se solucionaron varias infracciones de CFI en el código de Qualcomm distintas del kernel 4.19 en el kernel de Kirisakura para OnePlus 8 Pro (ejemplo: 1, 2, 3).

La ejecución del kernel en CFI permisivo también reveló violaciones de CFI en el código relacionado con los controladores de OnePlus (se pueden encontrar confirmaciones relevantes) aquí y aquí). El kernel de Kirisakura para OnePlus 8 Pro se ejecuta con CFI, protegiendo a sus usuarios contra este tipo de ataques de reutilización de código".

leer más

Entusiasta del bricolaje (es decir, recuperador de piezas de PC antiguas). A Skanda, un ávido usuario de Android desde los días de Eclair, también le gusta seguir las tendencias de desarrollo recientes en el mundo de la informática de placa única.