Um recurso não documentado do Android permite que qualquer aplicativo arbitrário obtenha acesso root em um ambiente SELinux permissivo. Continue lendo para saber mais!
No mundo dos modding do Android, as pessoas tendem a considerar o acesso root como a base de todas as coisas. Ele permite que os usuários assumam o controle total de seus dispositivos e adicionem recursos que nem sempre estão disponíveis na configuração padrão. Mas como se costuma dizer – “com grande poder vem grande responsabilidade” – não é aconselhável ignorar o modelo de segurança do Android, a menos que você saiba no que está se metendo. Para os entusiastas veteranos do Android em nossos fóruns, você provavelmente está ciente do potencial de existência de backdoors em seu dispositivo e é mais provável que você esteja executando um mod confiável habilitado para root além da versão mais recente do Android com a segurança mais recente manchas. Dito isto, você deve conhecer algumas pessoas que realmente não se importam com os ajustes de root que instalam, desde que aparentemente funcionem para elas. É por isso que você ainda pode encontrar um monte de mods que só funcionam quando o SELinux está definido como permissivo, o que, por sua vez, deixa seus usuários extremamente suscetíveis a ameaças de segurança.
O que é SELinux
SELinux, ou Linux com segurança aprimorada, é um módulo de segurança do kernel Linux projetado especificamente para acesso e gerenciamento de políticas de segurança. Originalmente introduzido no Android 4.3 Jelly Bean e definido para o modo Enforcing como padrão desde o Android 4.4 KitKat, SELinux ajuda a impor direitos de controle de acesso e tenta impedir o escalonamento de privilégios ataques. Resumindo, o SELinux atua como um obstáculo para o controle não autorizado do seu dispositivo, como um aplicativo ou vulnerabilidade que visa obter acesso root de forma maliciosa. Definir o SELinux como "Enforcing" por padrão é uma das principais maneiras pelas quais os usuários normais são protegidos contra tais ataques.
Por que o SELinux permissivo não é recomendado
Para reiterar, a maneira típica de obter acesso root em um dispositivo Android não precisa necessariamente alterar o status do SELinux. Mudar o modo SELinux de "Aplicativo" para "Permissivo" está desativando intencionalmente um dos principais recursos de segurança do dispositivo, e é por isso que o usuário deve permitir explicitamente que isso aconteça instalando um kernel personalizado especializado ou modificando os parâmetros da imagem de inicialização existente. Um mod mal codificado e sem uma política SELinux adequada geralmente força os usuários finais a mudar para o SELinux permissivo e essencialmente expande a superfície de ataque. Isso é exatamente o que o desenvolvedor vvb2060 demonstrado quando eles publicou um método de escalonamento de privilégios de prova de conceito onde o único requisito para obter controle é o SELinux permissivo.
Entre na Mágica
Para um usuário obter acesso root completo em seu próprio dispositivo executando Android 10 (ou superior) com SELinux definido como permissivo é surpreendentemente fácil de fazer. fazer: Tudo que você precisa fazer é pressionar instalar, e "Magica" obterá automaticamente acesso root em um serviço e instalará o Magisk na inicialização imagem. Isso é algo muito mais amplo do que apenas ajustar seu dispositivo. De acordo com o desenvolvedor sênior reconhecido do XDA e mantenedor do Magisk topjohnwu, qualquer aplicativo arbitrário, incluindo malware, pode fazer root permanentemente no seu dispositivo sem o seu consentimento e permissão utilizando o PoC.
Se você está se perguntando tecnicamente o que o Magica está explorando, topjohnwu explicou o seguinte em uma postagem no Reddit:
"Quando o SELinux é permissivo durante a inicialização, o zygote saberá disso e desabilitará os filtros seccomp syscall. Isso basicamente não restringe quais chamadas de sistema são permitidas em processos de terceiros.
No Android 10+, há um novo recurso "não documentado" chamado "App Zygote", onde aplicativos de terceiros podem gerar seu próprio Zygote para "Serviços Isolados" (também quase não documentado). Tanto "App Zygote" quanto "Serviços Isolados" são recursos especiais projetados para Chrome/Webview*. Os processos do App Zygote são executados com permissões especiais e, com o seccomp desabilitado, ele pode chamar setuid 0 e aumentar seu privilégio e obter acesso root.
Ainda é de alguma forma restritivo em comparação com o que as soluções root normais fornecem (por exemplo, Magisk), no entanto, toneladas de medidas de segurança no Android serão completamente derrotadas quando UID = 0. Por exemplo, é suficiente para ser usado para corrigir imagens de inicialização, o que significa que pode ser usado para injetar malware como o Magisk modificado para ajudá-lo a obter permissões de root “reais”.
Atualização: o que o próprio UID = 0 pode fazer? Dentro da estrutura do Android, quase todos os serviços têm luz verde cega quando o UID do processo solicitante é 0. Isso significa que esse processo raiz é capaz de manipular toneladas de coisas usando APIs específicas do Android (por exemplo, ActivityManager)"
*De acordo com o desenvolvedor aviraxp, esses dois recursos são geralmente projetados "para compartilhar recursos e memória entre vários processos isolados".
Conclusão
Considerando o dano irreparável que pode ser infligido aos usuários alvo de malware em um ambiente SELinux permissivo, sugerimos fortemente que todos continuem aplicando-o, a menos que seja absolutamente necessário. Embora tenhamos sorte de ter uma exploração de prova de conceito, não temos ideia de quantos autores de malware já sabem sobre esse caminho de ataque. Afinal, a vítima continuará alheia ao estado comprometido do seu dispositivo se não o fizer. testemunhe a exploração sendo usada ativamente, o que não é difícil de conseguir para um aplicativo nocivo que possui root persistente acesso.