4 votos

El núcleo permisivo SELinux, ¿es un riesgo para la seguridad?

Como en el título. Hablo de Kernel, no de ROM (muchas preguntas relacionadas con la ROM en este sitio).

Tengo un OnePlus 7 con Android 10 y prefiero un núcleo personalizado. Últimamente, OnePlus no ha liberado la fuente del kernel y esto ha causado estragos en todos los kernels personalizados de OnePlus 7 y otras variantes. Así que, quiero mostrar un núcleo que es independiente de los cambios que hace One Plus.

El único problema es que es SELinux permisivo y por lo tanto quiero entender los riesgos de seguridad antes de mostrarlo.

Editar:
Como se solicita en los comentarios (suprimido) :

-# zcat /proc/config.gz | grep CONFIG_SECURITY_SELINUX
CONFIG_SECURITY_SELINUX=y
# CONFIG_SECURITY_SELINUX_BOOTPARAM is not set
# CONFIG_SECURITY_SELINUX_DISABLE is not set
CONFIG_SECURITY_SELINUX_DEVELOP=y
CONFIG_SECURITY_SELINUX_AVC_STATS=y
CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=0
- # zcat  /proc/config.gz |grep CONFIG_DEFAULT_SECURITY_SELINUX
CONFIG_DEFAULT_SECURITY_SELINUX=y
-# mount | grep selinuxfs
selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)

1 votos

0 votos

Con el kernel permisivo flasheado la salida es idéntica a la de la pregunta

4voto

Jack Wade Puntos 231

SELinux es un marco de seguridad que restringe los procesos (kernel y espacio de usuario) dentro de sus dominios de acuerdo con una política definida. Así que el objetivo final es cargar una política de trabajo, etiquetar los sistemas de archivos con los contextos adecuados y establecer SELinux enforcing . No importa quién lo haga; el núcleo o algún proceso del espacio de usuario, aunque cuanto antes mejor. Y permissive es un modo SELinux siempre listo para ser cambiado a enforcing modo. Sin embargo, el cambio de modo puede o no estar permitido por la política.

En otras palabras, el hecho de que el núcleo sea permisivo SELinux por sí mismo no es un riesgo, si la ROM lo anula para hacerla cumplir. Lo que el kernel permisivo SELinux te da es flexibilidad para flashear ROMs que demanden SELinux permisivo o para cualquier otra aplicación que lo necesite. Pero es siempre es aconsejable mantener el dispositivo en el estado de ejecución SELinux ( getenforce en el Emulador Terminal revelará).

La mayoría de los desarrolladores de ROM construyen el kernel con CONFIG_SECURITY_SELINUX_DEVELOP=y . De configuración del kernel :

Con esta opción activada, el núcleo comenzará en permissive modo (registrar todo, no negar nada) a menos que se especifique enforcing=1 en la línea de comandos del núcleo. Puede alternar interactivamente el kernel entre el modo de ejecución y el modo permisivo (si lo permite la política) a través de /selinux/enforce .

Algunos proveedores pueden desactivar dicha configuración o pueden añadir enforcing=1 parámetro de arranque al kernel cmdline cuando se construye boot.img de modo que SELinux siempre se aplica incluso antes del primer proceso de espacio de usuario init ha comenzado. Yendo un paso más allá, las fuentes del núcleo de Samsung son parcheado con opciones SECURITY_SELINUX_ENFORCING y ALWAYS_ENFORCE . El otro extremo es que SELinux se desactiva del todo al construir con SECURITY_SELINUX_DISABLE=y y escribiendo a /sys/fs/selinux/disable o construyendo con SECURITY_SELINUX_BOOTPARAM=y y pasando selinux=0 parámetro del núcleo.

Iniciar el kernel en modo permisivo le da al desarrollador de la ROM y a los usuarios finales la libertad de establecer el modo SELinux permissive o enforcing en el arranque (o incluso durante la ejecución del sistema operativo escribiendo a /sys/fs/selinux/enforce ), y desarrollar una política de acuerdo con los requisitos. Así es como userdebug / eng se depuran las construcciones de ROMs. init puede ser forzado a establecer SELinux permissive en el arranque por el ajuste androidboot.selinux=permissive parámetro de arranque.

Los fabricantes de equipos originales cambian a user se construye cuando se liberan las existencias de ROM una vez sepolicy está completamente desarrollado. init en user construye siempre establece SELinux enforcing así que no arrancará con SELinux disabled . Sin embargo, las ROMs personalizadas suelen permanecer userdebug que permiten el acceso a root ( adb root y /system/xbib/su ) y otras relajaciones. Algunos detalles más se pueden encontrar en ¿Qué contexto de la sepultura permitirá que cualquier otro contexto tenga acceso a ella?

Así que mientras disabled o permissive SELinux en el núcleo o en la ROM hace que el dispositivo sea igualmente vulnerable, un permissive El núcleo suele ser algo bueno (al menos para los desarrolladores de ROM y los usuarios avanzados). Hacer cumplir el kernel es una exageración, a menos que el usuario esté pegado a la ROM de reserva durante toda la vida de un dispositivo. Sin embargo, si SELinux es disabled (por ejemplo, construido sin CONFIG_SECURITY_SELINUX=y ), el stock de ROM se entrar en el bootloop .

  • Si el núcleo se construye con CONFIG_IKCONFIG , extract-ikconfig shell script puede ser usado para comprobar la configuración de la construcción sin necesidad de flashear al dispositivo. En un sistema operativo en funcionamiento zcat /proc/config.gz puede ser usado.
  • El tipo de construcción de la ROM se puede comprobar con getprop ro.build.type .
  • Los parámetros de arranque de la línea de comandos del núcleo pueden comprobarse extrayendo boot.img . En el funcionamiento del sistema operativo cat /proc/cmdline puede ser usado.

1 votos

Como siempre, una respuesta muy completa por tu parte. Se agradece mucho :)

1 votos

Para los lectores - He flasheado el kernel en cuestión y felizmente después de la minuciosa explicación de Irfan

1 votos

@beeshyams gracias :)

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X