O Poder em Usuários avançados
publicado pela Primeira vez no TechNet em Maio 01, 2006
Colocando as contas de usuário do Windows no grupo de segurança Utilizadores avançados é uma abordagem comum que as organizações de TI a tomar para chegar aos usuários em uma menor privilégio ambiente evitando muitas dores de verdadeiramente executado como um usuário limitado. O grupo Usuários Avançados é capaz de instalar software, gerenciar configurações de energia e fuso horário e instalar controles ActiveX, ações que os usuários limitados são negados. O que muitos administradores não conseguem perceber, no entanto, é que esse poder vem ao preço da verdadeira segurança do usuário limitado. Muitos artigos, incluindo este artigo do Microsoft Knowledge Base e esse post no blog do Microsoft security especialista Jesper Johansen, apontam que um usuário que pertence ao grupo Usuários avançados pode facilmente elevar-se totalmente de privilégios de administradores, mas não foi possível encontrar uma descrição detalhada dos mecanismos de elevação a que se referem. Portanto, decidi investigar.
Antes de poder iniciar a investigação, tive que definir o problema. Na ausência de uma falha de segurança, como um escalonamento de privilégios de estouro de buffer, só é possível se uma conta puder configurar código arbitrário para executar no contexto de uma conta mais privilegiada. As contas padrão que têm mais privilégios do que os usuários avançados incluem administradores e a conta do Sistema Local, na qual vários processos de Serviço do Windows são executados. Assim, se um membro do Power Users puder modificar um arquivo executado por uma dessas contas, configurar um de seus executáveis para carregar uma DLL arbitrária ou adicionar um início automático executável a essas contas, ele poderá obter privilégios administrativos completos.
meu primeiro passo foi ver quais arquivos e diretórios para os quais o grupo de Usuários Avançados tem acesso de gravação, mas que usuários limitados não. Os sistemas que eu considerei eram estoque Windows 2000 Professional SP4, Windows XP SP2 e Windows Vista. Não vou me preocupar em olhar para os sistemas de servidor porque o cenário de Usuários Avançados mais comum está em uma estação de trabalho. O método de Força bruta de ver quais objetos do sistema de arquivos os usuários avançados podem modificar requer visitar cada arquivo e diretório e examinar suas permissões, algo que claramente não é prático. O utilitário Cacls de linha de comando que o Windows inclui despeja descritores de segurança, mas nunca me preocupei em aprender a linguagem de descrição do descritor de segurança (SDDL) e analisar a saída exigiria escrever um script. O utilitário AccessEnum que Bryce escreveu parecia promissor e também pode olhar para a segurança do registro, mas visa mostrar possíveis fraquezas de permissões, não os acessos disponíveis para contas específicas. Além disso, eu sabia que também precisaria examinar a segurança aplicada aos Serviços do Windows.
concluí que tinha que escrever um novo utilitário para o trabalho, então criei o AccessChk . Você passa pelo AccessChk um nome de conta ou grupo e um caminho do sistema de arquivos, chave de registro ou nome do serviço do Windows, e ele relata os acessos efetivos que a conta ou grupo tem para o objeto, levando em consideração as associações de grupo da conta. Por exemplo, se a conta Mark tivesse acesso a um arquivo, mas Mark pertence ao grupo de desenvolvedores que tem acesso explicitamente negado, o AccessChk mostraria Mark como sem acesso.
para tornar a saída fácil de ler, o AccessChk imprime ‘ W ‘ ao lado do nome do objeto se uma conta tiver alguma permissão que permita modificar um objeto e ‘R’ se uma conta puder ler os dados ou status do objeto. Vários switches fazem com que o AccessChk recorra a subdiretórios ou subchaves de registro e o switch –v faz com que ele relate os acessos específicos disponíveis para a conta. Um switch que adicionei especificamente para procurar objetos para os quais uma Conta tem acesso de gravação é –w.
armado com esta nova ferramenta, eu estava pronto para começar a investigar. Meu primeiro alvo foi uma instalação do Windows XP SP2 VMWare que não possui aplicativos instalados além das ferramentas VMWare. O primeiro comando que executei foi:
accesschk-ws” usuários avançados ” c:\windows
isso mostra todos os arquivos e diretórios no diretório \Windows que o grupo Usuários Avançados pode modificar. Obviamente, muitos dos arquivos em \Windows fazem parte do sistema operacional ou dos serviços do Windows e, portanto, são executados na conta do sistema Local. O AccessChk informou que os usuários avançados podem modificar a maioria dos diretórios em \Windows, o que permite que os usuários Membros criem arquivos nesses diretórios. Assim, um membro do grupo Usuários Avançados pode criar arquivos no diretório \Windows e \Windows\System32, que é um requisito comum de aplicativos legados mal escritos. Além disso, os usuários avançados precisam ser capazes de criar arquivos no diretório \Windows\Arquivos de programas baixados para que possam instalar controles ActiveX, já que o Internet Explorer os salva nesse diretório. No entanto, simplesmente criar um arquivo nesses diretórios não é um caminho para a elevação de privilégios.
Apesar do fato de que os Usuários avançados podem criar arquivos debaixo \Windows e a maioria de seus subdiretórios, o Windows configura permissões de segurança padrão na maioria dos arquivos contidos nesses diretórios para que só os membros do grupo Administradores e a conta Sistema Local tem acesso de gravação. As exceções incluem os arquivos de fonte (.fon), muitos arquivos de log do sistema (.log), alguns arquivos de Ajuda (.chm), imagens e clipes de áudio (.jpg, .gif, e.wmv) e arquivos de instalação (.inf), mas nenhum desses arquivos pode ser modificado ou substituído para obter privilégios administrativos. Os drivers de dispositivo em\Windows\System32 \ Drivers permitiriam uma escalada fácil, mas os usuários avançados não têm acesso de gravação a nenhum deles.
eu vi uma série de .exe E.dll está na lista, no entanto, então eu examinei-os para possíveis explorações. A maioria dos executáveis para os quais os usuários avançados têm acesso de gravação são utilitários interativos ou executados com privilégios reduzidos. A menos que você possa enganar um administrador para fazer login no sistema interativamente, eles não podem ser usados para elevar. Mas há uma exceção gritante: ntoskrnl.exe:
isso mesmo, os usuários avançados podem substituir ou modificar o arquivo principal do sistema operacional Windows. Cinco segundos após a modificação do arquivo, no entanto, o Windows File Protection (WFP) irá substituí-lo por uma cópia de backup que ele recupera, na maioria dos casos, de \Windows\System32\Dllcache. Os usuários avançados não têm acesso de gravação a arquivos no Dllcache, portanto, não podem subverter a cópia de backup. Mas os membros do grupo de usuários avançados podem contornar o PAM escrevendo um programa simples que substitui o arquivo, libera os dados modificados para o disco e, em seguida, reinicia o sistema antes que o PAM tome medidas.
verifiquei que essa abordagem funciona, mas restou a questão de como essa vulnerabilidade pode ser usada para elevar o privilégio. A resposta é tão fácil quanto usar um desmontador para encontrar a função que o Windows usa para verificações de privilégios, SeSinglePrivilegeCheck e remendar seu ponto de entrada na imagem do disco para que ele sempre retorne TRUE , que é o código de resultado que indica que um usuário tem o privilégio que está sendo verificado. Uma vez que um usuário esteja executando em um kernel modificado dessa maneira, ele parecerá ter todos os privilégios, incluindo Driver de carga, assumir a propriedade e criar Token, para citar apenas alguns dos privilégios que eles podem facilmente aproveitar para assumir o controle administrativo total de um sistema. Embora o Windows XP de 64 bits impeça a adulteração do kernel com o PatchGuard, poucas empresas estão sendo executadas no Windows de 64 bits.
Substituindo Ntoksrnl.exe não é a única maneira de perfurar através do privilégio administrativo através do diretório \Windows, no entanto. Pelo menos uma das DLLs para as quais as permissões padrão permitem a modificação pelo usuário avançado, Schedsvc.dll, é executado como um serviço do Windows na conta do sistema Local. Schedsvc.dll é a DLL que implementa o Serviço Agendador de Tarefas do Windows. O Windows pode operar com sucesso sem o serviço para que os usuários avançados possam substituir a DLL por uma DLL arbitrária, como uma que simplesmente adiciona sua conta ao grupo de Administradores Locais. Claro, o PAM também protege esse arquivo, portanto, substituí-lo requer o uso da técnica de bypass do PAM que descrevi.
eu já havia identificado vários vetores de elevação, mas continuei minha investigação observando o acesso dos usuários avançados ao diretório \Program Files, onde encontrei permissões padrão semelhantes às do diretório \Windows. Os usuários avançados podem criar subdiretórios em \ arquivos de programa, mas não podem modificar a maioria dos componentes pré-instalados do Windows. Novamente, as exceções, como o Windows Messenger (\Arquivos de Programas\Messenger \ Msmgs.exe) e Windows Media Player (\Arquivos de programas\Windows Media Player \ Wmplayer.exe) executado interativamente.
isso não significa que \ Arquivos de programas não tenham buracos potenciais. Quando examinei a saída mais recente, vi que os usuários avançados podem modificar qualquer arquivo ou diretório criado em \arquivos de programa subsequentes aos criados durante a instalação básica do Windows. No meu sistema de teste \ Arquivos de Programas \ Vmware \ Vmware Tools \ Vmwareservice.exe, o arquivo de imagem para o serviço Vmware Windows que é executado na conta do sistema Local, era um arquivo desse tipo. Outro exemplo um tanto irônico é o Microsoft Windows Defender Beta 2, que instala seu executável de serviço em \arquivos de Programa\Windows Defender com configurações de segurança padrão. Substituir esses arquivos de imagem de serviço é um caminho rápido para o privilégio de administrador e é ainda mais fácil do que substituir arquivos no diretório \Windows porque o WFP não se intromete com substituições.
em seguida, voltei minha atenção para o registro executando este comando:
accesschk –swk “usuários avançados” HKLM
a lista de saída era enorme porque os usuários avançados têm acesso de gravação à grande maioria da chave HKLM\Software. A primeira área que estudei para possíveis elevações foi a chave HKLM \ System, porque gravar acesso a muitas configurações abaixo dela, como o serviço do Windows e as chaves de configuração do driver em HKLM\System\CurrentControlSet\Services, permitiria subversão trivial da conta do sistema Local. A análise revelou que os usuários avançados não têm acesso de gravação a nada significativo sob essa chave.
a maioria dos usuários avançados-áreas graváveis sob o outro ramo principal do HKLM, Software, Relacionado ao Internet Explorer, Explorer e suas associações de arquivos e configuração de gerenciamento de energia. Os Usuários avançados também tem acesso de gravação para HKLM\Software\Microsoft\Windows\CurrentVersion\Run, permitindo-lhes para configurar arbitrário executáveis sejam executados sempre que alguém fizer logon interativamente, mas explorar esta requer que um usuário com privilégios administrativos para iniciar sessão no sistema interativamente (que, dependendo do sistema, pode nunca acontecer, ou acontecer com pouca freqüência). E, assim como para o diretório \Program Files, os usuários avançados têm acesso de gravação padrão a subchaves não Windows de HKLM\Software, o que significa que aplicativos de terceiros que configuram caminhos de código executáveis em suas chaves de registro em todo o sistema podem abrir falhas de segurança. VMWare, o único aplicativo instalado no sistema, não.
a área restante de exploração foi o Windows services. As únicas permissões de serviço que AccessChk considera serem acessos de gravação são SERVICE_CHANGE_CONFIG e WRITE_DAC. Um usuário com SERVICE_CHANGE_CONFIG pode configurar um executável arbitrário para iniciar quando um serviço é iniciado e, dado WRITE_DAC, eles podem modificar as permissões em um serviço para conceder acesso SERVICE_CHANGE_CONFIG. AccessChk revelou o seguinte sobre o meu estoque de sistema Windows XP SP2:
eu próximos correu PsService para ver a conta em que o DcomLaunch serviço executado:
Assim, os membros do grupo Usuários avançados pode simplesmente alterar o caminho da imagem de DComLauncher a ponto de, na sua própria imagem, reinicie o sistema e desfrutar de privilégios administrativos.
pode haver potencialmente outros serviços que introduzem exploits em sua segurança. As permissões padrão que o Windows define em serviços criados por aplicativos de terceiros não permitem que usuários avançados escrevam acesso, mas alguns aplicativos de terceiros podem configurar permissões personalizadas para permitir que eles façam isso. Na verdade, na minha produção de instalação do Windows XP de 64 bits, o AccessChk revela um buraco que não apenas os usuários avançados podem usar para se elevar, mas que os usuários limitados também podem:
agora terminei a fase principal da minha investigação e acabei de confirmar o que todos têm dito: um membro determinado do grupo de Usuários Avançados pode facilmente se tornar administrador completo usando exploits no sistema operacional e aqueles criados por aplicativos de terceiros. Meu passo final foi ver como a abordagem da Microsoft para a conta de Usuários Avançados evoluiu ao longo do tempo. Este Artigo da Base de dados de Conhecimento da Microsoft de 1999 documenta a famosa vulnerabilidade de elevação do protetor de tela que existia no Windows NT 4, mas a Microsoft fechou esse buraco antes do lançamento do Windows 2000. O artigo da KB também mostra que a Microsoft aparentemente não sabia de outras vulnerabilidades que provavelmente existiam. O Windows 2000 SP4 também inclui furos, mas na verdade é um pouco mais seguro do que a configuração padrão do Windows XP SP2: os usuários avançados não têm acesso de gravação ao Ntoskrnl.exe ou o arquivo de imagem do Agendador de tarefas, mas em vez de gravar-acesso ao serviço DComLauncher, eles podem subverter o serviço WMI, que também é executado na conta do sistema Local. O Windows XP SP1 adicionou mais pontos fracos de usuários avançados, incluindo acesso de gravação a arquivos críticos do sistema como o Svchost.exe, o processo de hospedagem de serviços do Windows e serviços adicionais, WMI e SSDPSRV, com permissões exploráveis. Vários serviços até permitiram que usuários limitados elevassem conforme descrito neste artigo da Microsoft KB a partir de março deste ano. O mais novo sistema operacional da Microsoft, O Windows Vista, fecha todas as vulnerabilidades que descrevi, neutralizando usuários avançados para que ele se comporte de forma idêntica a usuários limitados. Assim, a Microsoft fechou a porta aos usuários avançados para forçar as equipes de TI a proteger seus sistemas, movendo os usuários para contas de Usuários limitadas ou para contas administrativas, onde eles devem reconhecer o controle do usuário final sobre seus sistemas. O resultado final é que, embora a Microsoft possa corrigir as vulnerabilidades que encontrei em minha investigação, elas não podem impedir que aplicativos de terceiros introduzam novos e, ao mesmo tempo, preservem a capacidade dos usuários avançados de instalar aplicativos e controles ActiveX. A lição é que, como administrador de TI, você não deve se enganar pensando que o grupo de Usuários Avançados é um compromisso seguro no caminho para a execução como usuário limitado.
originalmente por Mark Russinovich em 01/05/2006 11: 01: 00
migrado do original Sysinternals.com/Blog
Leave a Reply