Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

ShadowCallStack

ShadowCallStack (SCS) es un LLVM instrumentación de modo que protege contra la sobrescritura de remite (como pila Desbordamiento de búfer) por el ahorro de dirección de retorno de una función a una ShadowCallStack asignado por separado en el prólogo función de las funciones no hoja y la carga de la dirección de retorno de la ShadowCallStack en la función epílogo. La dirección de retorno también se almacena en la pila normal para que sea compatible con los desenrolladores, pero por lo demás no se utiliza. Esto asegura que los ataques que modifiquen la dirección de retorno en la pila normal no tengan ningún efecto en el flujo de control del programa.

En aarch64, las marcas de instrumentación uso de la x18 registro para hacer referencia al ShadowCallStack, lo que significa que las referencias a la ShadowCallStack no tienen que ser almacenados en la memoria. Esto hace posible implementar un tiempo de ejecución que evita exponer la dirección de ShadowCallStack a atacantes que pueden leer memoria arbitraria.

Implementación

Android es compatible con ShadowCallStack tanto para el kernel como para el espacio de usuario.

Habilitando SCS para el kernel

Para habilitar ShadowCallStack para el kernel, agregue la siguiente línea al archivo de configuración del kernel:

CONFIG_SHADOW_CALL_STACK=y

Habilitación de SCS en el espacio de usuario

Para habilitar ShadowCallStack en los componentes del espacio de usuario, agregue las siguientes líneas al archivo de plano de un componente:

sanitize: {
  scs: true
}

SCS asume que la x18 registro está reservado para almacenar la dirección de la ShadowCallStack, y no se utiliza para ningún otro propósito. Si bien todas las bibliotecas del sistema se compilan a reservar el x18 registro, esto es potencialmente problemático si SCS está habilitada para los componentes del espacio de usuario que interactúan con el código en el proceso de herencia (por ejemplo, las bibliotecas que podrían ser cargados por aplicaciones de terceros), que puede darle una paliza el x18 registro. Como tal, solo recomendamos habilitar SCS en componentes autónomos que no se cargarán en binarios heredados.

Validación

No hay una prueba CTS específicamente para SCS. En su lugar, asegúrese de que las pruebas CTS pasen con y sin SCS habilitado para verificar que SCS no esté afectando el dispositivo.