Escalonamento de privilégios

Um diagrama descrevendo a escalada de privilégios. A seta representa um rootkit ganhando acesso ao núcleo, e o pequeno portão representa a elevação normal de privilégios, onde o usuário tem que digitar um nome de usuário e a respectiva senha de administrador.

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

Anéis de privilégios para a x86 disponível no modo protegido

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, por exemplo kprocesshacker.sys, pode ser usado para executar programas como cmd.exe como contas internas, também fornecendo acesso ao LocalSystem.
  • 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.[1]

Jailbreaking

 Nota: Para desbloqueio de sistemas iOS, veja Jailbreak (iOS).

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.[2] Um exemplo comum é o uso de conjuntos de ferramentas para sair de um chroot ou jail em sistemas operacionais do tipo UNIX[3] 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.[4][5] 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[6][7] ou firmware editado (semelhante ao firmware hackeado M33 usado para o PlayStation Portable)[8] 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.[9][10]

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[11]
  • Criptografia de componentes de firmware e/ou software.
  • Uso de um sistema operacional com controles de acessos obrigatórios (MAC) como o SELinux[12]
  • 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.[13]

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.[14]

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:

Ver também

Referências

  1. Taimur Asad (27 de outubro de 2010). «Apple Acknowledges iOS 4.1 Security Flaw. Will Fix it in November with iOS 4.2». RedmondPie. Consultado em 5 de novembro de 2010. Cópia arquivada em 18 de fevereiro de 2013 
  2. «Definition of JAILBREAK». www.merriam-webster.com (em inglês). Consultado em 24 de dezembro de 2022. Cópia arquivada em 24 de dezembro de 2022 
  3. Cyrus Peikari; Anton Chuvakin (2004). Security Warrior: Know Your EnemyRegisto grátis requerido. [S.l.]: "O'Reilly Media, Inc.". p. 304. ISBN 978-0-596-55239-8 
  4. James Quintana Pearce (27 de setembro de 2007), Apple's Disagreement With Orange, IPhone Hackers, paidContent.org, consultado em 25 de novembro de 2011, arquivado do original em 29 de julho de 2012 
  5. «Reports: Next iPhone update will break third-party apps, bust unlocks]». Computerworld on v1.1.3. Consultado em 1 de janeiro de 2008. Arquivado do original em 4 de janeiro de 2008 
  6. Phat^Trance (16 de fevereiro de 2010). «Announcement: Forum down for maintaining». dailymobile.se. Consultado em 30 de agosto de 2016. Arquivado do original em 3 de março de 2009. Só queria avisar que o fórum está fora do ar para manutenção. Ele estará online novamente em um ou dois dias (eu meio que baguncei os arquivos de configuração e preciso restaurar um backup de um dia atrás, então pensei por que não atualizar toda a plataforma do servidor) 
  7. «HelloOX 1.03: one step hack for Symbian S60 3rd ed. phones, and for Nokia 5800 XpressMusic too». Consultado em 6 de julho de 2009. Cópia arquivada em 7 de agosto de 2020 
  8. «Bypass Symbian Signed & Install UnSigned SISX/J2ME Midlets on Nokia S60 v3 with Full System Permissions». Consultado em 6 de julho de 2009. Cópia arquivada em 11 de setembro de 2016 
  9. «What is Jailbreaking in A.I. models like ChatGPT?». Consultado em 1 de novembro de 2023. Cópia arquivada em 1 de dezembro de 2023 
  10. «ChatGPT's 'jailbreak' tries to make the A.I. break its own rules, or die». Consultado em 1 de novembro de 2023. Cópia arquivada em 2 de março de 2023 
  11. «Microsoft Minimizes Threat of Buffer Overruns, Builds Trustworthy Applications». Microsoft. Setembro de 2005. Consultado em 4 de agosto de 2008 [ligação inativa] 
  12. Smalley, Stephen. «Laying a Secure Foundation for Mobile Devices» (PDF). Consultado em 7 de março de 2014. Arquivado do original (PDF) em 28 de agosto de 2017 
  13. Yamauchi, Toshihiro; Akao, Yohei; Yoshitani, Ryota; Nakamura, Yuichi; Hashimoto, Masaki (agosto de 2021). «Additional kernel observer: privilege escalation attack prevention mechanism focusing on system call privilege changes». International Journal of Information Security (em inglês). 20 (4): 461–473. ISSN 1615-5262. doi:10.1007/s10207-020-00514-7Acessível livremente. Consultado em 10 de novembro de 2023. Cópia arquivada em 24 de maio de 2024 
  14. Diogenes, Yuri (2019). Cybersecurity - Attack and Defense Strategies - Second Edition. Erdal Ozkaya, Safari Books Online 2nd ed. [S.l.: s.n.] 304 páginas. ISBN 978-1-83882-779-3. OCLC 1139764053. Consultado em 13 de agosto de 2022. Cópia arquivada em 24 de maio de 2024