Shatter attack
Em computação, um shatter attack é uma técnica de programação empregadas em sistemas operacionais Windows para subverter restrições de segurança entre processos em uma sessão. Um shatter attack tira proveito de uma falha de design no sistema de passagem de mensagem do Windows, onde um código arbitrário pode ser injetado em qualquer outro aplicativo ou serviço na mesma sessão que faz uso de um loop de mensagem. Tal ataque pode resultar em uma escalação de privilégios.[1]
Visão geral
[editar | editar código-fonte]Os Shatter attacks tornaram-se um tema de intenso debate na comunidade de segurança da informação em agosto de 2002, após a publicação de Chris Paget estudo intitulada "Exploiting design flaws in the Win32 API for privilege escalation".[2] O artigo, que cunhou o termo "Shatter attack", explica o processo pelo qual um aplicativo pode executar código arbitrário no outro aplicativo. Isso é possível porque o Windows permite que aplicativos menos privilegiados enviem mensagens para message loops de aplicativos mais privilegiados - e algumas mensagens podem conter como parâmetro o endereço de uma função de retorno (callback). Caso um atacante consiga colocar uma string sua (um shellcode, por exemplo) na memória do aplicativo mais privilegiado em um endereço conhecido, ele poderia então enviar mensagens WM_TIMER com os parâmetros da função de retorno apontando para sua string.
Algumas semanas após a publicação do presente documento, a Microsoft respondeu, pontuado o seguinte: "O artigo está correto, esse comportamento existe e ele descreve corretamente seu efeito. ... Onde o artigo erra é em afirmar que esta é uma falha no Windows. Na realidade, a falha reside no específico serviço mais privilegiado. Por predefinição, todos os serviços dentro do ambiente de trabalho interativo são pares e podem enviar solicitações uns aos outros. Como resultado, todos os serviços no ambiente de trabalho interativo compartilham do mesmo nível de privilégio do serviço mais privilegiado."[3]
Soluções
[editar | editar código-fonte]Em dezembro de 2002, a Microsoft lançou um patch para o Windows NT 4.0, Windows 2000 e Windows XP que fechou algumas vias de exploração.[4] Esta foi apenas uma solução parcial, no entanto, como a correção foi limitada aos serviços do Windows que podiam ser explorados usando esta técnica; a subjacente falha de design ainda existia e poderia ser usada para atacar aplicações ou serviços de terceiros.[5] Com o Windows Vista, a Microsoft buscou resolver o problema de duas maneiras: primeiro, os usuários locais não mais logam em session 0, separando assim o message loop de um usuário logado dos servicos privilegiados que são carregados em session 0. Segundo, um novo recurso chamado de Interface de Usuário Privilégio de Isolamento (UIPI) foi introduzido, segundo a qual os processos podem ser mais protegidos contra a Shatter attacks através da atribuição de um Nível de Integridade para cada processo.[6] Tentativas de enviar mensagens para um processo com um maior nível de Integridade falhará, mesmo se ambos os processos pertençam ao mesmo usuário. No entanto, nem todas as interações entre processos em com diferentes níveis de Integridade são impedidos pelo UIPI.[6]
A forma como as sessões são instanciados foi redesenhada no Windows Vista e Windows Server 2008 para fornecer proteção adicional contra os Shatter attacks. Usuário locais foram movidos de session 0 para session 1, separando assim os processos do usuário dos serviços que poderiam ser vulneráveis.[7][8]
Todavia, isso cria problemas compatibilidade com versões anteriores, uma vez que alguns de softwares foram projetados com o pressuposto de que o serviço está sendo executado na mesma sessão do usuário logado. Para contemplar tal situação, os Windows Vista e Windows Server 2008 incluem um Serviço Windows chamado "Detecção de Serviços Interativos", que permite o acesso à caixas de diálogo criado por serviços interativos, quando eles aparecem.[9]
Veja também
[editar | editar código-fonte]- Interface De Usuário Privilégio De Isolamento
- Obrigatório Controle Da Integridade
- Princípio do menor privilégio
- Recurso de segurança baseado em
Referências
[editar | editar código-fonte]- ↑ «Exploiting design flaws in the Win32 API for privilege escalation. Or... Shatter Attacks - How to break Windows.». Consultado em 28 de julho de 2016. Arquivado do original em 10 de janeiro de 2013
- ↑ Chris Paget (agosto de 2002). «Exploiting design flaws in the Win32 API for privilege escalation.». Consultado em 28 de julho de 2016. Arquivado do original em 4 de setembro de 2006
- ↑ «Information About Reported Architectural Flaw in Windows». TechNet. Microsoft. Setembro de 2002
- ↑ «Microsoft Security Bulletin MS02-071 – Flaw in Windows WM_TIMER Message Handling Could Enable Privilege Elevation (328310)». Microsoft. 11 de dezembro de 2002. Consultado em 18 de julho de 2006
- ↑ «Shatter-proofing Windows» (PDF). Consultado em 29 de dezembro de 2011
- ↑ a b «PsExec, User Account Control and Security Boundaries». Consultado em 8 de outubro de 2007
- ↑ «Larry Osterman's WebLog – Interacting with Services». Larry Osterman. 14 de setembro de 2005. Consultado em 3 de abril de 2007
- ↑ «Why Vista? Changes to services part 2 (Security, Stability, System Integrity)». Ken Schaefer. 5 de agosto de 2006
- ↑ Cyril Voisin (23 de fevereiro de 2007). «Services isolation in Session 0 of Windows Vista and Longhorn Server». Cyril Voisin (aka Voy) on security. MSDN Blogs. Consultado em 23 de abril de 2008