He instalado una cierta ROM que viene con SELinux en modo "Permisivo". Esta es la única (buena) ROM que se ajusta correctamente a mi dispositivo y no hay forma de cambiar el estado de SELinux.
Ahora no estoy realmente seguro de cuáles son las consecuencias de tal decisión y sería feliz si alguien me lo pudiera explicar (lo busqué en Google y sé qué es teóricamente ... pero no en la práctica). Dicha ROM tiene su raíz en "deshabilitado", por lo que supuestamente el dispositivo está desrooteado, pero no estoy seguro de cómo encaja eso con el SELinux.
cyanogenmod
rooting
custom-roms
selinux
j.d'oh
fuente
fuente
setenforce 1
desde el emulador de terminal (como root)?Respuestas:
TL; DR: ¡ Siéntase libre de saltar directamente a la conclusión en la parte inferior si lo desea :)!
El objetivo de SELinux es evitar la escalada de privilegios mediante la aplicación de una política obligatoria que restringe las posibles acciones de los usuarios privilegiados y no privilegiados.
El término "usuarios" aquí también incluye cualquier proceso que se ejecute en el dispositivo, sin importar si está directamente relacionado con las acciones físicas del usuario (el humano, usted;)), ya que cada proceso se ejecuta utilizando alguna cuenta de "usuario" del sistema.
Históricamente, los permisos en los sistemas basados en Unix se manejan usando lo que se llama un sistema de control de acceso discrecional (DAC). En este modelo:
root
en sistemas basados en Unix) que es el usuario administrativo y tiene acceso a todo en el sistema. Esta cuenta puede ser utilizada interactivamente por un humano (generalmente un administrador del sistema) para mantener o reparar el dispositivo, pero generalmente esta cuenta será utilizada principalmente por servicios de fondo o de bajo nivel que requieren dicho nivel de privilegio: controladores de dispositivo, servicios de configuración de red, servicios necesidad de acceder a los archivos de todos los usuarios o manejar la comunicación interna entre usuarios.Esto es muy agradable y ya proporciona una buena seguridad. Sin embargo, ¿qué pasa con circunstancias como estas?
root
que permitiría a un atacante engañar a dicho servicio para que ejecute algún código arbitrario? Dicho atacante obtendría un acceso completo al dispositivo. Para dar algunos ejemplos concretos, dicho error podría activarse enviando información de configuración de red ( DHCP ) especialmente diseñada o un MMS al teléfono.Aquí viene SELinux.
SELinux es un sistema de control de acceso obligatorio (MAC). Mientras que en el sistema DAC descrito anteriormente, los usuarios eran responsables de establecer los derechos apropiados sobre sus propios recursos, con un sistema MAC se aplica una política de todo el sistema (proporcionada con el sistema operativo) a los usuarios privilegiados y no privilegiados.
Esto resuelve los dos problemas mencionados anteriormente de las siguientes maneras:
Los sistemas DAC y MAC no son mutuamente excluyentes, por el contrario, el sistema MAC (SELinux) actúa como una segunda capa de defensa detrás del sistema DAC (los permisos tradicionales similares a Unix). El trabajo de SELinux es bloquear cualquier actividad contraria a la política que, dado solo el sistema DAC, de otra manera sería aceptada.
Lo complicado es que dicha política puede ser muy compleja de escribir: de hecho, debe cubrir los componentes de cada dispositivo para cada uso posible en cada situación. De hecho, no importa si alguna acción puede ser legítima en su situación: si no está en la política, está prohibida . Por lo tanto, las políticas mal diseñadas pueden tener consecuencias aleatorias, como bloqueos de aplicaciones, funcionalidad inutilizable, etc.
Es por eso que las primeras versiones de envío de Android SELinux lo incluyeron en modo "Permisivo" por defecto. En este modo, SELinux registrará violaciones de políticas, pero no intentará bloquear la actividad asociada. Al analizar los archivos de registro resultantes, es posible corregir y mejorar la política hasta el punto en que la única violación de la política restante son comportamientos maliciosos o no deseados. En este punto, SELinux puede convertirse en modo "obligatorio": ahora no solo registrará sino que también bloqueará todas las acciones ofensivas.
Conclusión
SELinux es una técnica de mitigación. No evita que los atacantes entren en su teléfono, pero asegura que una vez allí puedan hacer la menor cantidad de cosas posible, idealmente nada útil, lo que elimina el interés de atacar el teléfono en primer lugar.
Cuanto más antigua es la ROM, mayor es el número de errores de seguridad que abrirían dicho acceso. SELinux sería una forma eficiente de mantener un mínimo de seguridad a pesar de estas vulnerabilidades conocidas, sin embargo, para funcionar correctamente, SELinux se basa en una política compleja.
Si su ROM se proporciona con SELinux en modo "Permisivo" de forma predeterminada, esto probablemente significa que la política que contiene no es lo suficientemente confiable como para cambiar de manera segura al modo "Cumplimiento".
Si eres lo suficientemente técnico y tienes acceso al registro del teléfono (
dmesg
al menos, pero generalmente también se copian en éllogcat
: hay aplicaciones que permiten ver el último, pero dependiendo de tu versión de Android pueden requerir acceso de root), puedes verificar si encontrará entradas "avc": estos son mensajes que le indican que SELinux acaba de detectar una acción que va en contra de la política.Aquí hay un ejemplo de dicha entrada tomada del sitio web de CyanogenMod :
Si no hay ninguno, solo algunos de ellos o, por alguna razón, cree que no pueden evitar que use el teléfono, puede intentar cambiar SELinux al modo "Forzar". En las ROM antiguas de CyanogenMod, esto era fácil y posible simplemente usando una opción oculta en la GUI (no es necesario rootear el teléfono o instalar ninguna aplicación específica), no sé si otras ROM ofrecieron la misma función, pero dado que usó CyanogenMod etiqueta, supongo que puede ser afortunado;).
fuente