# Escalonamento de privilégios

A escalada de privilégios é o ato de explorar um bug, uma falha de design ou uma supervisão de configuração em um sistema operacional ou aplicativo de software para obter acesso elevado a recursos que normalmente são protegidos de um aplicativo ou usuário. O resultado é que um aplicativo ou usuário com mais privilégios do que o pretendido pelo desenvolvedor do aplicativo ou administrador do sistema pode executar ações que não são autorizadas.

## Contexto

A maioria dos sistemas de computador é projetada para uso com várias contas de usuário, cada uma das quais tem habilidades conhecidas como privilégios. Privilégios comuns incluem visualizar e editar arquivos ou modificar arquivos do sistema.
A escalada de privilégios significa que os usuários recebem privilégios aos quais não têm direito. Esses privilégios podem ser usados para excluir arquivos, visualizar informações privadas ou instalar programas indesejados, como vírus. Geralmente ocorre quando um sistema tem um bug que permite que a segurança seja ignorada ou, alternativamente, tem suposições de design falhas sobre como ele será usado. A escalada de privilégios ocorre de duas formas:
* Escalada de privilégios vertical, também conhecida como elevação de privilégios, onde um usuário ou aplicativo com privilégios mais baixos acessa funções ou conteúdo reservado para usuários ou aplicativos com privilégios mais altos (por exemplo, usuários do Internet Banking podem acessar funções administrativas do site ou a senha de um smartphone pode ser ignorada).
* Escalada de privilégios horizontal, onde um usuário normal acessa funções ou conteúdo reservados para outros usuários normais (por exemplo, o usuário A do Internet Banking acessa a conta bancária do usuário B).

## Vertical

Esse tipo de escalada de privilégios ocorre quando o usuário ou processo consegue obter um nível de acesso mais alto do que o pretendido por um administrador ou desenvolvedor de sistema, possivelmente executando operações no nível do núcleo.

### Exemplos

Em alguns casos, um aplicativo de alto privilégio assume que só seria fornecido com entrada correspondente à sua especificação de interface, portanto, não valida essa entrada. Então, um invasor pode explorar essa suposição para executar código que não é autorizado com os privilégios do aplicativo:
* Alguns serviços do Windows são configurados para serem executados na conta de usuário Local System. Uma vulnerabilidade como um estouro de buffer pode ser usada para executar código arbitrário com privilégio elevado para Local System. Alternativamente, um serviço do sistema que está representando um usuário menor pode elevar os privilégios desse usuário se os erros não forem tratados corretamente enquanto o usuário estiver sendo representado (por exemplo, se o usuário tiver introduzido um manipulador de erros malicioso)
* Em algumas versões legadas do sistema operacional Microsoft Windows, o protetor de tela de All Users é executado na conta Local System – qualquer conta que possa substituir o binário do protetor de tela atual no sistema de arquivos ou no Registro pode, portanto, elevar os privilégios.
* Um driver do Windows (o kprocesshacker.sys, por exemplo), pode ser usado para executar programas como o cmd.exe como contas internas, também fornecendo acesso ao TrustedInstaller. Outro método é usar um driver do núcleo, como o winring0.sys, para executar programas com acesso ao núcleo. Este driver também pode ser explorado para executar programas como um administrador, ignorando o Controle de Contas de Usuários (UAC).
* Em certas versões do núcleo do Linux, era possível escrever um programa que definiria seu diretório atual como /etc/cron.d, solicitaria que um despejo de memória fosse executado caso ele travasse e então seria morto por outro processo. O arquivo do despejo de memória seria colocado no diretório atual do programa, ou seja, /etc/cron.d, e o cron o trataria como um arquivo de texto instruindo-o a executar programas conforme o cronograma. Como o conteúdo do arquivo estaria sob o controle do invasor, o invasor seria capaz de executar qualquer programa com privilégios de root.
* O Cross Zone Scripting é um tipo de ataque de escalada de privilégios no qual um site subverte o modelo de segurança dos navegadores da web, permitindo assim que ele execute código malicioso em computadores clientes.
* Também há situações em que um aplicativo pode usar outros serviços de alto privilégio e tem suposições incorretas sobre como um cliente pode manipular seu uso desses serviços. Um aplicativo que pode executar comandos de linha de comandos ou shell pode ter uma vulnerabilidade de injeção de shell se usar entrada que não é validada como parte de um comando executado. Um invasor seria capaz de executar comandos do sistema usando os privilégios do aplicativo.
* As calculadoras da Texas Instruments (particularmente a TI-85 e a TI-82) foram originalmente projetadas para usar apenas programas interpretados escritos em dialetos da TI-BASIC; no entanto, depois que os usuários descobriram bugs que poderiam ser explorados para permitir que o código do Z-80 nativo fosse executado no hardware da calculadora, a TI lançou dados de programação para dar suporte ao desenvolvimento de terceiros. (Isso não continuou para a TI-Nspire baseada em ARM, para a qual jailbreaks usando Ndless foram encontrados, mas ainda são ativamente combatidos pela Texas Instruments.)
* Algumas versões do iPhone permitem que um usuário que não estiver autorizado acesse o telefone enquanto ele está bloqueado.

### Jailbreaking

Na segurança de computadores, o jailbreaking é definido como o ato de remover limitações que um fornecedor tentou codificar em seu software ou serviços. Um exemplo comum é o uso de conjuntos de ferramentas para sair de um chroot ou jail em sistemas operacionais do tipo UNIX ou ignorar o gerenciamento de direitos digitais (DRM). No primeiro caso, permite que o usuário veja arquivos fora do sistema de arquivos que o administrador pretende disponibilizar para o aplicativo ou usuário em questão. No contexto do DRM, isso permite que o usuário execute código definido arbitrariamente em dispositivos com DRM, bem como saia de restrições do tipo chroot. O termo se originou com a comunidade de jailbreaking do iPhone/iOS e também foi usado como um termo para hacking do PlayStation Portable; esses dispositivos foram repetidamente sujeitos a jailbreaks, permitindo a execução de código arbitrário, e às vezes tiveram esses jailbreaks desabilitados por atualizações do fornecedor.
Os sistemas iOS, incluindo o iPhone, iPad e iPod Touch, têm sido submetidos a esforços de jailbreak do iOS desde que foram lançados, e continuam com cada atualização de firmware. As ferramentas de jailbreak do iOS incluem a opção de instalar frontends de pacotes como Cydia e Installer.app, alternativas de terceiros à App Store, como uma forma de encontrar e instalar binários e ajustes do sistema. Para evitar o jailbreak do iOS, a Apple fez a ROM de inicialização do dispositivo executar verificações de blobs SHSH para proibir uploads de núcleos personalizados e evitar downgrades de software para firmwares anteriores que podem ser desbloqueados. Em um jailbreak "untethered", o ambiente iBoot é alterado para executar uma exploração da ROM de inicialização e permitir o envio de um carregador de inicialização de baixo nível corrigido ou hackear o núcleo para enviar o núcleo desbloqueado após a verificação SHSH.
Um método semelhante de jailbreaking existe para smartphones da plataforma S60, onde utilitários como HelloOX permitem a execução de código que não é assinado e acesso total aos arquivos do sistema ou firmware editado (semelhante ao firmware hackeado M33 usado para o PlayStation Portable) para contornar restrições em código que não é assinado. Desde então, a Nokia emitiu atualizações para coibir o jailbreaking que não é autorizado, de maneira semelhante à Apple.
No caso de consoles de jogos, o jailbreaking é frequentemente usado para executar jogos homebrew. Em 2011, a Sony, com a assistência do escritório de advocacia Kilpatrick Stockton, processou George Hotz, de 21 anos, e associados do grupo fail0verflow por fazer o jailbreak do PlayStation 3.
O jailbreaking também pode ocorrer em sistemas e softwares que usam modelos de inteligência artificial generativos, como o ChatGPT. Em ataques de jailbreaking em sistemas de inteligência artificial, os usuários são capazes de manipular o modelo para se comportar de forma diferente do que foi programado, tornando possível revelar informações sobre como o modelo foi instruído e induzi-lo a responder de forma anômala ou prejudicial.

### Android

Os telefones Android podem ser oficialmente "rootados" passando por um processo controlado pelo fabricante, usando um exploit para rootar ou instalando uma modificação de rooting. Os fabricantes permitem rooting por meio de um processo que eles controlam, enquanto alguns permitem que o telefone seja "rootado" simplesmente pressionando combinações de teclas específicas no momento da inicialização ou por outros métodos autoadministrados. Usar um método do fabricante quase sempre redefine o dispositivo para as configurações de fábrica, tornando o rooting inútil para pessoas que desejam visualizar os dados e também anula a garantia permanentemente, mesmo que o dispositivo seja "desrootado" e "reflashado". Os exploits de software geralmente têm como alvo um processo de nível de root que é acessível ao usuário, usando um exploit específico para o núcleo do telefone ou usando um exploit Android conhecido que foi corrigido em versões mais recentes; não atualizando o telefone ou fazendo downgrade de versão intencionalmente.

### Estratégias de mitigação

Os sistemas operacionais e usuários podem usar as seguintes estratégias para reduzir o risco de escalonamento de privilégios:
* Prevenção de execução de dados
* Randomização do layout do espaço de endereçamento (para dificultar que estouros de buffer executem instruções privilegiadas em endereços conhecidos na memória)
* Executar aplicativos com o mínimo de privilégios (por exemplo, executar o Internet Explorer com o SID de administrador desabilitado no token do processo) para reduzir a capacidade de explorações de estouro de buffer de abusar dos privilégios de um usuário elevado.
* Exigir que o código do modo de núcleo seja assinado digitalmente.
* Patching
* Uso de compiladores que capturam estouros de buffer
* Criptografia de componentes de firmware e/ou software.
* Uso de um sistema operacional com controles de acessos obrigatórios (MAC) como o SELinux
* Mecanismo de realocação de dados do núcleo (realoca dinamicamente informações de privilégios no núcleo em execução, evitando ataques de escalada de privilégios usando corrupção de memória)
Pesquisas recentes mostraram o que pode efetivamente fornecer proteção contra ataques de escalada de privilégios. Isso inclui a proposta de observador de núcleo adicional (AKO), que previne especificamente ataques focados em vulnerabilidades do sistema operacional. Pesquisas mostram que o AKO é de fato eficaz contra ataques de escalada de privilégios.

## Horizontal

A escalada de privilégios horizontal ocorre quando um aplicativo permite que o invasor obtenha acesso a recursos que normalmente seriam protegidos de um aplicativo ou usuário. O resultado é que o aplicativo executa ações com o mesmo usuário, mas com um contexto de segurança diferente do pretendido pelo desenvolvedor do aplicativo ou administrador do sistema; esta é efetivamente uma forma limitada de escalada de privilégios (especificamente, a suposição que não é autorizada da capacidade de personificar outros usuários). Comparado à escalada de privilégios vertical, a horizontal não requer atualização do privilégio de contas. Ela geralmente depende de bugs no sistema.

### Exemplos

Este problema ocorre frequentemente em aplicações web. Considere o seguinte exemplo:
* O usuário A tem acesso à sua própria conta bancária em uma aplicação de Internet Banking.
* O usuário B tem acesso à sua própria conta bancária na mesma aplicação de Internet Banking.
* A vulnerabilidade ocorre quando o usuário A consegue acessar a conta bancária do usuário B realizando algum tipo de atividade maliciosa.
Esta atividade maliciosa pode ser possível devido a fraquezas ou vulnerabilidades comuns de aplicações web. Possíveis vulnerabilidades ou situações de aplicações web que podem levar a esta condição incluem:
* IDs de sessão previsíveis no cookie HTTP do usuário;
* Fixação de sessão;
* Cross-site scripting;
* Senhas facilmente adivinhadas;
* Roubo ou sequestro de cookies de sessão;
* Registro de pressionamento de tecla.