0 votos

¿Por qué al llamar a setuid() devuelve "Llamada al sistema incorrecta"?

En realidad, tengo Android 13. El problema está en mi código C (¿probablemente?). Cuando llamo a setuid(0) o setuid(getuid()) en mi teléfono, obtengo esta salida:

Llamada al sistema incorrecta

Mientras tanto, en mi computadora portátil con Ubuntu, setuid() no arroja ningún error y devuelve -1 (así es como debería ser).

Entonces, ¿por qué setuid() de Android arroja eso? Y si Llamada al sistema incorrecta es normal para Android, ¿cómo puede Android llamar a setuid() para cada aplicación Java (uid 10000 y superior)?

1voto

John Dallman Puntos 103

Android bloquea algunas llamadas al sistema para que no sean realizadas por las aplicaciones. Esto se implementa mediante el filtro seccomp a partir de Android 8 en adelante. Esto hace que las aplicaciones que intenten llamar a llamadas al sistema bloqueadas se cierren deliberadamente, y es por eso que te está pasando esto.

Android utiliza uids de Linux para aplicaciones individuales, en lugar de diferentes usuarios. Cada aplicación tiene un uid individual de todas las demás aplicaciones en un dispositivo. Los uids bajo los cuales las aplicaciones se ejecutan tienen nombres como u0_a40 o u0_a121, en lugar de ser definidos por la aplicación. Parecen ser seleccionados en el momento de la instalación, en lugar de ser elegidos por el desarrollador de la aplicación.

También existen varios uids especiales que están integrados en Android, como el uid shell bajo el cual se ejecutan las sesiones de adb shell, system y wifi. Las versiones personalizadas de Android tienen otros uids con nombres como vendor_samsungcloud que puedo ver en mi teléfono Samsung con Android 14. Para explorar esto un poco más:

L$ adb shell               # En el símbolo de sistema de Linux
A$ ps -A | more            # En el símbolo de sistema de Android

Verás que hay algunos casos de múltiples procesos ejecutándose bajo el mismo uid u0_aXYZ, pero los nombres de los procesos parecen indicar que son parte de la misma aplicación.

Asignar uids individuales a las aplicaciones proporciona una manera sencilla de mantener sus datos privados entre sí. Sus archivos son propiedad de sus uids, por lo que si tienen permisos -rw-------, solo son accesibles para la aplicación.

ART (Android Run Time), que aloja aplicaciones, presumiblemente tiene una forma de cambiar el uid de una aplicación, probablemente al pasar por alto el filtro seccomp para permitirle llamar a setuid().

Android utiliza un kernel de Linux, pero no es un sistema operativo Linux convencional. Intentar tratarlo como tal es un ejercicio en la frustración. Intentar encontrar una forma de llamar a setuid() por tu cuenta es un comportamiento similar al malware. Necesitas aprender la forma de hacer las cosas en Android.

Android está mucho más protegido que Ubuntu porque está diseñado para ser difícil de estropear por personas que creen que entienden de computadoras, pero están completamente equivocadas. Un ejemplo de ese nivel de estupidez con el que un amigo tuvo que lidiar en los años 90: un usuario de Windows 95 que decidió eliminar todos los archivos que no reconocía de su directorio c:\windows, y cuando su computadora dejó de funcionar, llamó a su proveedor de servicios de Internet para quejarse de que malware lo estaba atacando.

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