Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

LímitesSanitizer

BoundsSanitizer (BoundSan) agrega instrumentación a los binarios para insertar comprobaciones de límites alrededor de los accesos a la matriz. Estas comprobaciones se añaden si el compilador no puede probar en tiempo de compilación que el acceso será seguro y si el tamaño de la matriz se conocerá en tiempo de ejecución, de modo que pueda comprobarse. Android 10 implementa BoundSan en Bluetooth y códecs. BoundSan lo proporciona el compilador y está habilitado de forma predeterminada en varios componentes de la plataforma.

Implementación

BoundSan utiliza el desinfectante de límites de UBSan . Esta mitigación está habilitada a nivel de módulo. Ayuda a mantener seguros los componentes críticos de Android y no debe desactivarse.

Le recomendamos encarecidamente que habilite BoundSan para componentes adicionales. Los candidatos ideales son el código nativo privilegiado o el código nativo complejo que analiza la entrada de usuario que no es de confianza. La sobrecarga de rendimiento asociada con la habilitación de BoundSan depende de la cantidad de accesos a la matriz que no se puede probar que sean seguros. Espere un pequeño porcentaje de gastos generales en promedio y pruebe si el rendimiento es un problema.

Habilitación de BoundSan en archivos de planos

BoundSan se puede habilitar en archivos de planos agregando "bounds" a la propiedad de desinfección misc_undefined para módulos binarios y de biblioteca:

sanitize: {
   misc_undefined: ["bounds"],
   diag: {
      misc_undefined: ["bounds"],
   },
   blacklist: "modulename_blacklist.txt",

diag

La propiedad diag habilita el modo de diagnóstico para los desinfectantes. Utilice el modo de diagnóstico solo durante la prueba. El modo de diagnóstico no cancela los desbordamientos, lo que niega la ventaja de seguridad de la mitigación y conlleva una sobrecarga de rendimiento más alta, por lo que no se recomienda para compilaciones de producción.

lista negra

La propiedad de blacklist permite la especificación de un archivo de lista negra que los desarrolladores pueden usar para evitar que se desinfecten funciones y archivos fuente. Utilice esta propiedad solo si el rendimiento es un problema y los archivos / funciones específicos contribuyen sustancialmente. Audite manualmente estos archivos / funciones para asegurarse de que los accesos a la matriz sean seguros. Consulte Solución de problemas para obtener detalles adicionales.

Habilitación de BoundSan en archivos MAKE

BoundSan se puede habilitar en archivos MAKE agregando "bounds" a la variable LOCAL_SANITIZE para módulos binarios y de biblioteca:

LOCAL_SANITIZE := bounds
# Optional features
LOCAL_SANITIZE_DIAG := bounds
LOCAL_SANITIZE_BLACKLIST := modulename_blacklist.txt

LOCAL_SANITIZE acepta una lista de desinfectantes separados por una coma.

LOCAL_SANITIZE_DIAG activa el modo de diagnóstico. Utilice el modo de diagnóstico solo durante la prueba. El modo de diagnóstico no cancela los desbordamientos, lo que niega la ventaja de seguridad de la mitigación y conlleva una sobrecarga de rendimiento más alta, por lo que no se recomienda para compilaciones de producción.

LOCAL_SANITIZE_BLACKLIST permite la especificación de un archivo de lista negra que permite a los desarrolladores evitar que se desinfecten funciones y archivos fuente. Utilice esta propiedad solo si el rendimiento es un problema y los archivos / funciones específicos contribuyen sustancialmente. Audite manualmente estos archivos / funciones para asegurarse de que los accesos a la matriz sean seguros. Consulte Solución de problemas para obtener detalles adicionales.

Desactivación de BoundSan

Puede deshabilitar BoundSan en funciones y archivos fuente con listas negras o atributos de función. Es mejor mantener BoundSan habilitado, por lo que solo deshabilítelo si la función o el archivo está creando una gran cantidad de sobrecarga de rendimiento y la fuente se ha revisado manualmente.

Para obtener más información sobre cómo deshabilitar BoundSan con atributos de función y formato de archivo de lista negra , consulte la documentación de Clang LLVM. Alcance la lista negra al desinfectante en particular utilizando nombres de sección que especifiquen el desinfectante objetivo para evitar afectar a otros desinfectantes.

Validación

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

Solución de problemas

Pruebe a fondo los componentes después de habilitar BoundSan para asegurarse de que se abordan los accesos fuera de límites no detectados previamente.

Los errores de BoundSan se pueden identificar fácilmente, ya que incluyen el siguiente mensaje de cancelación de desecho:

pid: ###, tid: ###, name: Binder:###  >>> /system/bin/foobar <<<
signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
Abort message: 'ubsan: out-of-bounds'

Cuando se ejecuta en modo de diagnóstico, el archivo de origen, el número de línea y el valor del índice se imprimen en logcat . De forma predeterminada, este modo no arroja un mensaje de cancelación. Revise logcat para verificar si hay errores.

external/foo/bar.c:293:13: runtime error: index -1 out of bounds for type 'int [24]'