
Conector Universal de Canal Virtual Dinâmico para Serviços de Área de Trabalho Remota
Os Serviços de Terminal (ou Serviços de Área de Trabalho Remota) oferecem muitos recursos ocultos para quem deseja se aprofundar. Um desses serviços é o Canal Virtual Dinâmico, que permite comunicar através de uma conexão RDP aberta sem a necessidade de abrir um novo socket, conexão ou porta em um firewall. Esses canais podem ser usados para ocultar dados de dispositivos de rede ativos, contornar firewalls, implementar drivers de dispositivo pela rede ou apenas ajudar testadores de penetração a transferir dados. As possibilidades são infinitas.
A verdadeira razão pela qual este projeto foi criado é o XFLTReaT. Ele pode ser usado para construir uma "VPN" através de redes segregadas e, finalmente, permite testar através de jumpboxes sem solicitar alterações no firewall. Em resumo, torna a vida dos testadores de penetração mais fácil.
Você precisa instalar um plugin (.dll) no seu computador cliente que você usa para se conectar ao servidor RDP. No servidor RDP, você precisa usar a outra metade do projeto, o .exe, que cria o canal entre o plugin e o executável do servidor. Se quiser saber mais detalhes, role para baixo.
É apenas para Windows. Os Canais Virtuais Dinâmicos foram introduzidos no Windows Server 2008 e Windows Vista SP1. Estes e qualquer coisa mais recente que eles devem funcionar.
Você pode baixar o projeto inteiro e compilá-lo você mesmo ou usar os binários compilados da seção Releases. É importante que o binário correto seja usado em todos os casos; selecione o correto para a arquitetura correspondente (se seu cliente for 32 bits, mas o servidor for 64 bits, pegue a dll de 32 bits e o exe de 64 bits).
O .dll precisa ser colocado no computador cliente em qualquer diretório (para uso de longo prazo, você pode colocá-lo em %SYSROOT%\system32\ ou %SYSROOT%\SysWoW64\) e instalá-lo com o seguinte comando como usuário elevado (também conhecido como Administrador):
regsvr32.exe UDVC-Plugin.dll
Se seu usuário não for administrador, você também precisa importar as configurações do registro para o seu usuário. Use o arquivo UDVC-Plugin.reg para isso.
Se desejar removê-lo:
regsvr32.exe /u UDVC-Plugin.dll
A partir de agora, toda vez que você se conectar a um servidor RDP, este plugin será carregado e se configurará conforme especificado no registro (veja abaixo).
O .exe precisa ser colocado no servidor RDP e executado como qualquer usuário.
Ambos os lados suportam três modos no momento:
Quando este modo está ativado, um listener será configurado na porta e interface (endereço IP) definidos.
Neste modo, uma conexão será feita em direção a um listener no endereço IP e porta definidos.
Este modo configura um Named Pipe com o nome especificado. Como exemplo: este modo pode ser usado para outras ferramentas fazerem comunicação IPC via RDP. Infelizmente, Named Pipes são escritos no disco, por isso são considerados lentos em comparação com os modos socket. Se você se importa com a largura de banda, use os modos socket.
Tanto o binário do cliente quanto o do servidor agem da mesma forma e podem ser configurados com as mesmas opções.
O binário do servidor lerá as opções da linha de comando.
PS C:\Users\UDVC\> .\UDVC-Server.exe -h
Universal Dynamic Virtual Channel server application
Usage: C:\Users\UDVC\UDVC-Server.exe [-s | -c [-p port [-h ip]] | -m [-n name]] [-0 | -1 | -2 | -3]
Socket server mode -s (default) OR
Socket client mode -c:
-p port port to bind the listener (default: 31337)
-i ip ip to bind the listener (default: 127.0.0.1)
Named pipe mode -m:
-n name name of the named pipe (by default: "\\.\pipe\UDVC_{RDP SESSION NUMBER}")
Data transfer priority parameters:
-0 real time (WTS_CHANNEL_OPTION_DYNAMIC_PRI_REAL)
-1 high priority (WTS_CHANNEL_OPTION_DYNAMIC_PRI_HIGH) - default
-2 medium priority (WTS_CHANNEL_OPTION_DYNAMIC_PRI_MED)
-3 low priority (WTS_CHANNEL_OPTION_DYNAMIC_PRI_LOW)
O .dll do cliente lê todas as opções do registro; os valores podem ser encontrados na seguinte chave:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Terminal Server Client\Default\AddIns\UDVC-Plugin
Toda vez que o módulo é ativado e antes que a conexão seja feita, um aviso de lembrete é exibido. Assim como este:

Este aviso garante que o usuário saiba que o plugin está carregado e com quais configurações.
Os listeners, conexões ou named pipes são criados apenas quando o executável do servidor conseguiu se conectar à dll do plugin. Depende da sua configuração, mas por padrão, quando a conexão do Canal Virtual é feita (o plugin foi carregado corretamente, o binário do servidor foi executado), ele ouve em localhost:31337 em ambos os endpoints. Quando você se conecta a essas portas e envia dados através do socket, eles aparecerão do outro lado.
Apenas para mostrar alguns casos de uso onde esta ferramenta pode ser utilizada.
Encaminhamento de porta muito básico. A máquina Segregada 1 tem um serviço HTTP na tcp/80. Essa rede não é roteada a partir da rede 192.168.0.0/24; a jump box com duas interfaces deve ser usada para acessar. O modo Listen é configurado no lado do cliente em 0.0.0.0:31337 e o binário do servidor foi executado com as configurações do modo connect para criar uma conexão com o servidor web. O usuário no cliente RDP pode usar seu navegador para abrir http://127.0.0.1:31337 e acessar o conteúdo de http://10.13.37.2:80.

Um cenário um pouco mais avançado para transferir arquivos. Ambos os endpoints são configurados para ouvir em 0.0.0.0:31337. Primeiro, a máquina Hacking se conecta ao cliente RDP e aguarda a entrada. Em seguida, a máquina Segregada 2 se conecta à Jump box e lê todo o arquivo no socket.

Como extra, Named Pipes também podem ser usados. Neste caso, tanto o cliente RDP quanto a Jump box criam um Named Pipe em ambos os lados (hIPC-client e hIPC-server) e as outras máquinas podem se conectar a esses pipes. O que for escrito nos pipes aparecerá na outra extremidade. Não é muito diferente do exemplo do modo listen acima, exceto que está usando Named Pipes em vez de sockets TCP.

Caso o plugin não carregue ou o executável não execute por estar faltando alguma DLL, por exemplo a VCRUNTIME140.DLL, você pode querer instalar o pacote Visual C++ Redistributable for Visual Studio 2015.