Escalonamento de privilégios

Origem: Wikipédia, a enciclopédia livre.

A escalação de privilégios é o ato de explorar um erro[a], uma falha de projeto [en] ou um descuido na configuração em um sistema operacional ou software de aplicação para obter acesso elevado a recursos [en] que normalmente são protegidos de um aplicativo ou usuário. O resultado é que um aplicativo com mais privilégios do que o pretendido pelo desenvolvedor do aplicativo ou pelo administrador do sistema é capaz de executar ações que não são autorizadas.

Contexto[editar | editar código-fonte]

A maioria dos sistemas computadorizados é projetada para uso com várias contas de usuários, cada uma com habilidades conhecidas como privilégios. Privilégios comuns incluem visualizar e editar arquivos ou modificar arquivos do sistema.

A escalação 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 particulares ou instalar programas indesejados, como vírus. Geralmente ocorre quando um sistema tem uma falha[a] que permite que a segurança seja contornada ou, alternativamente, tem suposições de projeto falho sobre como ele será usado. O escalonamento de privilégios ocorre de duas formas:

  • Escalonamento de privilégios vertical, também conhecido como elevação de privilégios, em que um usuário ou aplicativo com privilégios inferiores acessa funções ou conteúdo reservado para usuários ou aplicativos com privilégios mais altos (usuários do Internet banking podem acessar funções administrativas do site ou a senha de um smartphone pode ser ignorada, por exemplo).
  • Escalonamento de privilégios horizontal, onde um usuário normal acessa funções ou conteúdo reservado para outros usuários normais (o usuário A do Internet banking acessa a conta bancária do usuário B na Internet, por exemplo).

Vertical[editar | editar código-fonte]

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

Exemplos[editar | editar código-fonte]

Em alguns casos, um aplicativo de alto privilégio assume que seria fornecido apenas com a entrada correspondente à sua especificação de interface, portanto, não valida essa entrada. Então, um invasor pode explorar essa suposição, a fim de 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 do sistema local. Uma vulnerabilidade como um estouro de buffer pode ser usada para executar código arbitrário com privilégio elevado para o de sistema local. Como alternativa, um serviço do sistema que está se passando por 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 (se o usuário tiver introduzido um manipulador de erro malicioso, por exemplo).
  • Em algumas versões herdadas do sistema operacional Windows da Microsoft, o protetor de tela de todos os usuários[c] é executado na conta do sistema local – qualquer conta que possa substituir o binário atual do protetor de tela no sistema de arquivos ou no registro pode, portanto, elevar os privilégios.
  • Em certas versões do núcleo do Linux[b] era possível escrever um programa que configurasse seu diretório atual para /etc/cron.d, solicitando que um despejo de memória[d] fosse executado caso ele travasse e depois fosse morto [en] por outro processo. O arquivo de despejo[e] principal seria então colocado no diretório atual do programa (ou seja, /etc/cron.d) e o cron [en] o teria tratado como um arquivo de texto o instruindo a executar os programas conforme a programação. Como o conteúdo do arquivo estaria sob o controle do invasor, o invasor seria capaz de executar qualquer programa com privilégios de superusuário[f].
  • O script entre zonas [en] é um tipo de ataque de escalonamento de privilégios no qual um site subverte o modelo de segurança dos navegadores da web, permitindo que ele execute códigos maliciosos em computadores clientes.
  • Há também 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 o uso desses serviços. Um aplicativo que pode executar comandos de linha de comandos ou shell pode ter uma vulnerabilidade de injeção de código [en] se usar entrada que não é validada como parte de um comando executado. Um invasor poderia então executar comandos do sistema usando os privilégios do aplicativo.
  • As calculadoras da Texas Instruments (particularmente a TI-85 [en] e a TI-82 [en]) foram originalmente projetadas para usar apenas programas interpretados escritos em dialetos de TI-BASIC [en]; no entanto, depois que os usuários descobriram falhas[a] que poderiam ser exploradas para permitir que o código nativo do Z-80 fosse executado no hardware da calculadora, a Texas Instruments (T.I.) liberou dados de programação para dar suporte ao desenvolvimento de terceiros. (Isso não continuou com o TI-Nspire baseado em ARM, para o qual foram encontrados desbloqueios[g] usando Ndless [en], mas ainda são combatidos ativamente pela Texas Instruments.)
  • Algumas versões do iPhone permitem que um usuário, que não é autorizado, acesse o telefone enquanto ele está bloqueado.[1]

Desbloqueio[editar | editar código-fonte]

 Nota: Para desbloqueio de sistemas iOS, veja Desbloqueio do iOS.

Na segurança computacional, o desbloqueio[g] é definido como o ato de remover as 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 bloqueio[h] em sistemas operacionais do tipo UNIX[3] ou ignorar o gerenciamento de direitos digitais (G.D.D.)[i]. No primeiro caso, permite que o usuário veja arquivos fora do sistema de arquivos que o administrador pretende disponibilizar para a aplicação ou usuário em questão. No contexto do gerenciamento de direitos digitais (G.D.D.)[i], permite que o usuário execute código definido arbitrariamente em dispositivos com gerenciamento de direitos digitais (G.D.D.)[i], bem como romper as restrições do tipo chroot. O termo se originou com a comunidade de desbloqueio do iPhone/iOS e também tem sido usado como um termo para "hackear" o PlayStation portátil (PSP); esses dispositivos foram repetidamente sujeitos a desbloqueios, permitindo a execução de código arbitrário, e algumas vezes tiveram esses desbloqueios desativados por atualizações do fornecedor.

Os sistemas iOS, incluindo o iPhone, o iPad e o iPod touch, estão sujeitos a esforços de desbloqueio do iOS desde que foram lançados e continuam com cada atualização de firmware.[4][5] As ferramentas de desbloqueio do iOS incluem a opção de instalar interfaces[j] de pacotes, como o Cydia e o Installer.app [en], alternativas de terceiros para a App Store, como forma de encontrar e instalar ajustes e binários do sistema. Para evitar o desbloqueio do iOS, a Apple fez a memória somente de leitura (M.S.L.)[k] de inicialização [en] do dispositivo executar verificações de hash assinado e objeto binário grande (SHSH blob) [en] para impedir carregamentos (uploads) de núcleos[b] personalizados e downgrades de software para firmwares anteriores (com jailbreak). Em um desbloqueio "sem amarras" ("untethered" jailbreak), o ambiente iBoot é alterado para executar uma exploração da memória somente de leitura (M.S.L.)[k] de inicialização e permitir o envio de um carregador de inicialização[l] de baixo nível corrigido ou hackear o núcleo[b] para enviar o núcleo[b] desbloqueado após a verificação SHSH.

Existe um método semelhante de desbloqueio para smartphones da plataforma S60 [en], onde utilitários como o HelloOX permitem a execução de código não assinado e acesso total aos arquivos do sistema[6][7] ou firmware editado (semelhante ao firmware hackeado M33 usado para o PlayStation portátil)[8] para contornar as restrições de código não assinado [en]. Desde então, a Nokia emitiu atualizações para conter o jailbreak não autorizado, de maneira semelhante à da Apple.

No caso de consoles de jogos, o desbloqueio[g] é frequentemente usado para executar jogos homebrew. Em 2011, a Sony, com a ajuda do escritório de advocacia Kilpatrick Stockton [en], processou George Hotz, de 21 anos, e associados do grupo fail0verflow por desbloquear o PlayStation 3 (veja Sony Computer Entertainment America, Inc. v. Hotz [en] e Jailbreak do PlayStation 3 [en]).

O desbloqueio[g] também pode ocorrer em sistemas e softwares que usam modelos de inteligência artificial generativas, como o ChatGPT. Nos ataques de desbloqueio[g] em sistemas de inteligência artificial, os usuários conseguem manipular o modelo para que se comporte 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[editar | editar código-fonte]

Ver artigo principal: Root no Android

Os telefones Android podem ser oficialmente "rootados" passando pelo processo controlado pelos fabricantes, usando uma exploração[m] para obter o root ou substituir o ambiente de recuperação original pelo ambiente de recuperação personalizado. Os fabricantes permitem o 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. O uso de um método de fabricante quase sempre redefine o dispositivo de fábrica, tornando o root inútil para as pessoas que desejam visualizar os dados, e também anula a garantia permanentemente, mesmo que o dispositivo seja "desrootado" e "reflashado". As explorações de software geralmente visam um processo de nível root que é acessível ao usuário, usando uma exploração específica para o núcleo[b] do telefone ou usando uma exploração conhecida do Android que foi corrigida em versões mais recentes; não atualizando o telefone ou fazendo o downgrade intencional da versão.

Estratégias de mitigação[editar | editar código-fonte]

Sistemas operacionais e usuários podem usar as seguintes estratégias para reduzir o risco de escalonamento de privilégios:

Uma pesquisa recente mostrou o que pode efetivamente fornecer proteção contra ataques de escalonamento de privilégios. Isso inclui a proposta do observador adicional do núcleo[b][p], que evita especificamente ataques focados em vulnerabilidades do sistema operacional. A pesquisa mostra que o observador adicional do núcleo[b][p] é de fato eficaz contra ataques de escalada de privilégios.[13]

Horizontal[editar | editar código-fonte]

A escalação de privilégios horizontal ocorre quando um aplicativo permite que o invasor obtenha acesso a recursos [en] 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 contexto de segurança diferente do pretendido pelo desenvolvedor do aplicativo ou pelo administrador do sistema. Esta é efetivamente uma forma limitada de escalonamento de privilégios (especificamente, a suposição não autorizada da capacidade de se passar por outros usuários). Em comparação com a escalação vertical de privilégios, a horizontal não requer atualização do privilégio das contas. Ela muitas vezes depende de falhas[a] no sistema.[14]

Exemplos[editar | editar código-fonte]

Esse problema ocorre frequentemente em aplicativos da web. Considere o exemplo a seguir:

  • O usuário A tem acesso à sua própria conta bancária em um aplicativo de Internet banking;
  • o usuário B tem acesso à sua própria conta bancária no mesmo aplicativo 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.

Essa atividade maliciosa pode ser possível devido a fraquezas ou vulnerabilidades comuns de aplicativos da web.

Possíveis vulnerabilidades de aplicativos da web ou situações que podem levar a essa condição incluem:

Ver também[editar | editar código-fonte]

Notas[editar | editar código-fonte]

  1. a b c d do inglês bug
  2. a b c d e f g h i j k do inglês kernel
  3. do inglês all users
  4. do inglês core dump
  5. do inglês dump
  6. do inglês root
  7. a b c d e do inglês jailbreak
  8. do inglês jail
  9. a b c do inglês D.R.M.digital rights management
  10. do inglês front-end
  11. a b do inglês R.O.M.read-only memory
  12. do inglês bootloader
  13. a b do inglês exploit
  14. do inglês S.Id.security identifier
  15. do inglês M.A.C.mandatory access controls
  16. a b do inglês A.K.O.additional kernel observer

Referências

  1. Taimur Asad (27 de novembro de 2010). «Apple Acknowledges iOS 4.1 Security Flaw. Will Fix it in November with iOS 4.2» [Apple reconhece falha de segurança do iOS 4.1. Irá a corrigir em novembro com o iOS 4.2] (em inglês). RedmondPie 
  2. «Definition of jailbreak» [Definição de jailbreak]. www.merriam-webster.com (em inglês). Consultado em 24 de dezembro de 2022 
  3. Cyrus Peikari; Anton Chuvakin (2004). Security warrior: Know your enemy [Guerreiro da segurança: Conheça seu inimigo]Registo grátis requerido (em inglês). [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 [Desacordo da Apple com a Orange, hackers de iPhone] (em inglês), 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» [Relatórios: Próxima atualização do iPhone quebrará aplicativos de terceiros, desbloqueio de busto]. Computerworld em v1.1.3 (em inglês). Arquivado do original em 4 de janeiro de 2008 
  6. Phat^Trance (16 de fevereiro de 2010). «HelloOX 1.02 - The easiest way to hack all 3rd,fp1,fp2,5800» [HelloOX 1.02 - A maneira mais fácil de hackear o S60v3, fp1, fp2, (5800 suportado!)]. dailymobile.se (em inglês). Consultado em 30 de agosto de 2016. Arquivado do original em 3 de março de 2009 
  7. «HelloOX 1.03: one step hack for Symbian S60 3rd ed. phones, and for Nokia 5800 XpressMusic too» [HelloOX 1.03: hack de um passo para telefones Symbian S60 (3ª edição) e para o Nokia 5800 XpressMusic também] (em inglês). Cópia arquivada em 13 de fevereiro de 2008 
  8. «Bypass Symbian signed & install unsigned SISX/J2ME Midlets on Nokia S60 v3 with full system permissions» [Ignore o Symbian assinado e instale o SISX/J2ME Midlets não assinado no Nokia S60 v3 com permissões completas do sistema] (em inglês) 
  9. «What is Jailbreaking in A.I. models like ChatGPT?» [O que é jailbreak em modelos de I.A.como o ChatGPT?] (em inglês) 
  10. «ChatGPT's 'jailbreak' tries to make the A.I. break its own rules, or die» [O ‘jailbreak’ do ChatGPT tenta fazer com que a I.A. quebre suas próprias regras ou morra] (em inglês) 
  11. «A Microsoft minimiza a ameaça de saturação de buffer e cria aplicativos confiáveis» (em inglês). Microsoft. Setembro de 2005. Consultado em 4 de agosto de 2008 [ligação inativa]
  12. Smalley, Stephen. «Laying a secure foundation for mobile devices» [Estabelecendo uma base segura para dispositivos móveis] (PDF) (em inglês). Consultado em 7 de março de 2014. Arquivado do original (PDF) em 28 de agosto de 2017 
  13. Yamauchi, Toshihiro; Akao, Yohe; Yoshitani, Ryota; Nakamura, Yuichi; Hashimoto, Masaki (agosto de 2021). «Additional kernel observer: privilege escalation attack prevention mechanism focusing on system call privilege changes» [Observador adicional do núcleo: mecanismo de prevenção de ataques de escalonamento de privilégios com foco em alterações de privilégios de chamadas do sistema]. International Journal of Information security (em inglês). 20 (4): 461–473. ISSN 1615-5262. doi:10.1007/s10207-020-00514-7 
  14. Diogenes, Yuri (2019). Cybersecurity - Attack and defense strategies [Cibersegurança - Estratégias de ataque e defesa] (em inglês) 2ª ed. [S.l.: s.n.] 304 páginas. ISBN 978-1-83882-779-3. OCLC 1139764053