Questão de Sistemas Operacionais — Sistemas Operacionais para Dispositivos Móveis (IOS, Android, etc.) — CESPE / CEBRASPE 2025
Sistemas Operacionais›Sistemas Operacionais para Dispositivos Móveis (IOS, Android, etc.)
Código
ce418317
Banca
CESPE / CEBRASPE
Órgão
PF
Ano
2025
Cargo
PCF
A respeito dos sistemas operacionais Android e iOS, julgue o item que se segue.
No Android, a UID (user identifier) é utilizada para configurar um sandbox de aplicativo, no entanto, por questão de segurança, o sandbox não se estende ao código nativo e aos apps e bibliotecas do Android, os quais são executados em área de memória protegida, com acesso somente pelo kernel.
CCerto
EErrado
Revelar gabarito e comentário▾
GabaritoE — Errado
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Sandbox de aplicativos no Android: UID e isolamento
Gabarito: letra E (ERRADO). A afirmação está incorreta porque, no Android, o sandbox baseado em UID (user identifier) se estende sim ao código nativo e às bibliotecas do aplicativo — todo o processo, incluindo o código nativo (NDK), roda isolado dentro do sandbox, e não em uma "área de memória protegida com acesso somente pelo kernel" como afirma o item. O modelo de segurança do Android atribui uma UID única a cada aplicativo no momento da instalação, e o kernel Linux usa essa UID para isolar o processo e seus recursos dos demais.
O sandbox no Android é um dos pilares do seu modelo de segurança. Cada aplicativo instalado recebe uma UID exclusiva, que funciona como um "dono" do processo. O kernel Linux, que é a base do Android, utiliza essa UID para impor o isolamento: um processo só pode acessar seus próprios arquivos, sua própria memória e seus próprios recursos. Isso significa que o aplicativo A não consegue ler os dados do aplicativo B, a menos que haja uma permissão explícita concedida pelo usuário ou uma comunicação via mecanismos específicos (como Content Providers ou Binders).
O ponto crucial que a questão explora é o alcance desse isolamento. O sandbox não se limita ao código Java/Kotlin (a camada de aplicação). Ele se estende a todo o processo, incluindo o código nativo compilado (via Android NDK, em C/C++) e as bibliotecas que o aplicativo carrega. Quando um aplicativo executa código nativo, esse código roda dentro do mesmo processo, com a mesma UID, e portanto está sujeito às mesmas restrições do sandbox. Não existe uma "área de memória protegida" separada para o código nativo — ele compartilha o mesmo espaço de endereçamento do processo e as mesmas regras de isolamento impostas pelo kernel.
A confusão que a banca tenta criar é sugerir que o sandbox é algo "parcial" ou que se aplica apenas a uma parte do aplicativo. Na prática, o sandbox é uma propriedade do processo como um todo. O kernel não distingue entre código nativo e código interpretado quando aplica as regras de isolamento baseadas em UID. Se o processo tem a UID X, todo o seu código — seja ele Java, Kotlin, C ou C++ — roda sob essa UID e está sujeito às mesmas restrições de acesso a arquivos, memória e outros recursos.
NÃO CAIA NESSA!
A banca tenta fazer o candidato acreditar que o sandbox é "incompleto" ou que o código nativo escapa dele. Isso é falso: o sandbox é uma propriedade do processo inteiro, e o código nativo (NDK) roda dentro do mesmo processo, com a mesma UID, sujeito às mesmas restrições. A pegadinha está em sugerir que existe uma "área de memória protegida" separada para o código nativo, o que não existe — o isolamento é feito pelo kernel via UID, e vale para todo o processo.
Aspecto
Afirmação do item (incorreta)
Realidade no Android
Alcance do sandbox
Não se estende ao código nativo e às bibliotecas
Estende-se a todo o processo, incluindo código nativo (NDK) e bibliotecas
Execução do código nativo
Em área de memória protegida, com acesso somente pelo kernel
Roda no mesmo processo, em espaço de usuário, sob a mesma UID e sujeito ao mesmo isolamento
Mecanismo de isolamento
Área de memória especial separada
UID única atribuída pelo kernel Linux, que isola o processo e seus recursos
Sandbox Android (UID): Isolamento por processo (UID única por app, Kernel impõe restrições); Alcance do sandbox (Código Java/Kotlin, Código nativo (NDK), Bibliotecas do app); Área de memória protegida (Não existe para apps, Apps rodam em user space)
Item — ❌ ERRADO
O erro está na afirmação de que "o sandbox não se estende ao código nativo e aos apps e bibliotecas do Android, os quais são executados em área de memória protegida, com acesso somente pelo kernel". Isso é incorreto por dois motivos:
O sandbox se estende ao código nativo: quando um aplicativo Android usa código nativo (via NDK), esse código roda dentro do mesmo processo, com a mesma UID, e está sujeito ao mesmo isolamento. Não há uma "área de memória protegida" separada para o código nativo.
Não existe "área de memória protegida com acesso somente pelo kernel" para apps: o kernel impõe o isolamento via UID, mas isso não significa que os apps rodem em uma área de memória especial acessível apenas pelo kernel. Os apps rodam em espaço de usuário (user space), e o kernel controla o acesso aos recursos via UID, mas a memória dos apps é memória normal de processo, isolada por paginação e proteção de memória, não por uma "área protegida" especial.
O que existe, na verdade, é o isolamento de processos via UID, que é uma característica do kernel Linux. Cada app tem sua própria UID, e o kernel garante que um processo não acesse os recursos de outro. Isso vale para todo o código do processo, incluindo o nativo.