Trabajando con SELinux en Android. Comprender los conceptos básicos de SELinux y… | de Aayush Gupta | Octubre de 2020

Comprender los conceptos básicos de SELinux y cómo trabajar con él en Android

Créditos de imagen: Quinn Dombrowski a través de Flickr
  • AOSP: Abreviatura de Proyecto de código abierto de Android.
  • AVC: Abreviatura de Access Vector Cache, la caché utilizada por SELinux para almacenar decisiones de control de acceso.
  • comunicación: Abreviatura de comunicación.
  • LSM: El acrónimo de Linux Security Modules, un marco que forma parte de Linux, permite el soporte para varias implementaciones de seguridad.
  • MAC: Abreviatura de control de acceso obligatorio, un tipo de control de acceso a través del cual el sistema operativo limita la capacidad del iniciador para realizar una acción determinada.
  • macros: Una instrucción que se extiende a un conjunto de instrucciones cuando se llama.
  • NSA: Abreviatura de Agencia de Seguridad Nacional de los Estados Unidos.
  • expresión regular: Abreviatura de expresión regular.
  • contexto: Abreviatura de contexto de recursos, también conocido como dominio.
  • SELinux: Abreviatura de Linux con mayor seguridad.
  • Política de SELinux: Una política utilizada por SELinux que especifica un conjunto de permisos.
  • SoC: Abreviatura de System on Chip.
  • tclass: Abreviatura de clase objetivo.
  • tcontext: Abreviatura de contexto del objetivo.

SELinux es un módulo del kernel de Linux que proporciona soporte de ejecución Control de acceso políticas de seguridad para hacer cumplir MAC. Se basa en el marco LSM.

SELinux fue desarrollado originalmente por NSA probar el valor MAC y cómo se puede aplicar a Linux. Se fusionó en Linux el 2 de agosto de 2003. gorra roja, McAfee Corp. es uno de los principales contribuyentes al desarrollo de SELinux. Más tarde llamó a un proyecto separado Mejoras de seguridad (SE) para Android fue dirigido por la NSA para integrar SELinux en Android. Este proyecto resultó en que SELinux fuera una parte esencial de Android. Se introdujo en Android 4.3 en modo tolerante, se aplicó parcialmente en Android 4.4, y desde Android 5.0 SELinux se ha aplicado completamente en Android.

SELinux puede funcionar en 2 modos, que son Aplicación y Tolerante. El modo predeterminado es Enforcing.

  • En modo permisivo, SELinux solo registra información sobre una acción tomada por iniciadores que no estaba permitida en la política. No los limita.

Una política de SELinux es un conjunto de reglas (permisos) que especifican qué iniciador puede realizar qué tipo de acción. Si la acción específica que desea realizar no está explícitamente permitida en principio, SELinux la rechazará. Por lo tanto, en las instalaciones de producción, es de suma importancia tener un conjunto completo de reglas en la política de SELinux para evitar fallas / errores causados ​​por SELinux. Las políticas de SELinux deben ser lo más estrictas posible para lograr la máxima seguridad. Uno debe recordar «Si no se rompe, no lo arregle» al escribir las políticas de SELinux.

La política de SELinux, como ya se ha dicho, es solo un conjunto de reglas. Escribir políticas SELinux significa escribir estas reglas, que pueden incluir permisos, designación (asignación de nombre) del iniciador, permitir que el iniciador se ejecute en modo tolerante, etc. Por lo tanto, escribir políticas SELinux se puede dividir en muchas partes más pequeñas relacionadas con el tipo de regla escrita.

Designación del iniciador (no aplicación)

El plan es: /path/to/initiator/ u:object_r:context_name_you_want:s0

Designación del iniciador (aplicación)

El plan es: user=user_of_app seinfo=info name=name_of_app domain=scontext_to_assign type=type_of_file

Etiquetado de sistemas de archivos

genfscon es un comando que se utiliza para asignar contextos a sistemas de archivos que no admiten ningún otro tipo de comando de etiquetado. El plan es: genfscon filesystem_name partial_path filesystem_context

Propiedades de etiquetado

Las propiedades son cadenas que controlan el comportamiento de una función en particular. Estás ubicado en .prop archivos que se analizan init al inicio del sistema. Estas propiedades también requieren que tenga un contexto SELinux válido para el iniciador que accederá a ellas.

Permiso de permiso

Si desea permitir algunas acciones a los permisos de iniciador, puede usar allow declaración. Se usa para otorgar permiso. El plan es: allow scontext tcontext:tclass permission;

Supresión del rechazo

Si sus registros contienen algunas denegaciones que desea ocultar / suprimir por algún motivo, puede usarlas dontaudit declaración. El plan es: dontaudit scontext tcontext:tclass permission;

Nunca es una declaración que se utiliza para indicar reglas específicas que no se deben generar. Palabra generado indica que esta es una acción en tiempo de compilación, no una ejecución. Por lo tanto, si marca una regla específica como nunca baja y concede permiso para la misma regla en otra regla, el compilador arroja un error y detiene la compilación.

De forma predeterminada, hay varias macros disponibles al escribir políticas de SELinux. Estas macros no solo facilitan la escritura de políticas de SELinux, sino que también se recomiendan por varias razones, como otorgar una gran cantidad de permisos a un iniciador específico, otorgar un conjunto específico de permisos para una tarea específica al iniciador, etc. casos de uso y muchos otros beneficios.

Hay varias herramientas útiles para ayudarlo a trabajar con SELinux y escribir políticas de SELinux. Algunos de ellos son:

  • audit2allow: Genera políticas SELinux que contienen reglas de permitir y no auditar. Nunca incluye excepciones no autorizadas. audit2allow.perl alojado en OpenDarwin-CVS / SEDarwin es un script que no requiere dependencias externas y se ejecuta en cualquier plataforma a diferencia de las versiones modernas.
  • restaurar: Restaura los contextos SELinux predeterminados del destino.
  • sepolicy-inject: Las inserciones permiten reglas en las políticas binarias del kernel de SELinux.

La política de almacén de SELinux como referencia

Cada firmware / ROM base tiene una política SELinux dentro de imágenes de partición específicas. La ubicación general de la póliza es partition_name/etc/selinux/. Esto significa que si está buscando políticas de imagen del sistema SELinux, estarían disponibles en /system/etc/selinux, para la imagen del proveedor estaría en /vendor/etc/selinux y así. Recuerde que la ruta a la partición varía mucho según el dispositivo. Un desarrollador puede usar esta política de acciones como referencia al escribir políticas de SELinux para su dispositivo específico. Esto no solo ayuda a acelerar la tarea de redactar reglas, sino que también sirve como referencia a qué regla se debe otorgar, cuál no, cómo tratar casos específicos, etc.

Tomé muchos enlaces de este sitio web. Creo que son realmente útiles, por eso los comparto a continuación. Échales un vistazo para obtener más información sobre SELinux para Android.

Este artículo no hubiera sido posible sin numerosas revisiones útiles de miembros del equipo de LineageOS, a saber:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *