
Suporte a proxy Socks5/4/4a para Remote Desktop Protocol / Terminal Services / Citrix / XenApp / XenDesktop
Esta ferramenta adiciona a capacidade de um proxy SOCKS aos Serviços de Terminal (ou Serviços de Área de Trabalho Remota) e ao Citrix (XenApp/XenDesktop). Utiliza Dynamic Virtual Channel que nos permite comunicar através de uma conexão RDP/Citrix aberta sem a necessidade de abrir um novo socket, conexão ou porta num firewall.
Precisa de instalar um plugin (.dll) no seu computador cliente que utiliza para se ligar ao servidor RDP/Citrix. No servidor RDP/Citrix precisa de utilizar a outra metade do projeto, o .exe, que cria o canal entre o plugin e o executável do servidor. Mais detalhes podem ser encontrados abaixo. Se pretender utilizá-lo com Citrix/XenApp/XenDesktop, por favor, desça até à secção Citrix.
Se a DLL estiver devidamente registada, será carregada pelo mstsc.exe (Cliente de Área de Trabalho Remota) ou pelo Citrix Receiver sempre que for iniciado. Quando o executável do servidor é executado no lado do servidor, liga-se de volta à DLL num canal virtual dinâmico, que é uma funcionalidade do Protocolo de Área de Trabalho Remota. Depois de o canal ser configurado, um Proxy SOCKS será iniciado no computador cliente, por predefinição em 127.0.0.1:1080. Este serviço pode ser utilizado como um Proxy SOCKS5 a partir de qualquer navegador ou ferramenta.
Os Dynamic Virtual Channels foram introduzidos no Windows Server 2008 e Windows Vista SP1. Estes e qualquer coisa mais recente devem funcionar. Neste momento, o cliente funciona com o mstsc.exe (Cliente de Área de Trabalho Remota). Caso pretenda utilizá-lo a partir de Unix, experimente o FreeRDP, este lançou um módulo semelhante aproximadamente na mesma altura em que esta ferramenta foi lançada. O Citrix suporta a mesma API subjacente que a Microsoft, embora não tenha a certeza de quando foi introduzida, foi antes de 2013, por isso o plugin deverá funcionar com a maioria das soluções Citrix.
Pode descarregar o projeto inteiro e compilá-lo você mesmo ou apenas utilizar os binários compilados da secção Releases. É importante que o binário correto seja utilizado em todos os casos, por favor selecione o correto para a arquitetura correspondente (se o seu cliente for 32 bits mas o servidor for 64 bits, então descarregue a dll de 32 bits e o exe de 64 bits). O .dll precisa de ser colocado no computador cliente em qualquer diretório (para utilização a longo prazo, é recomendado copiá-lo para %SYSROOT%\system32\ ou %SYSROOT%\SysWoW64\) e instalá-lo com o seguinte comando como utilizador elevado (também conhecido como Administrador):
regsvr32.exe SocksOverRDP-Plugin.dll
Se o seu utilizador não for administrador, também precisa de importar as definições de registo para o seu utilizador. Utilize o ficheiro SocksOverRDP-Plugin.reg para isso.
Se pretender removê-lo:
regsvr32.exe /u SocksOverRDP-Plugin.dll
A partir de agora, sempre que se ligar a um servidor RDP, este plugin será carregado e configurar-se-á conforme o especificado no registo (ver abaixo).
O .exe precisa de ser copiado para o servidor e executado por qualquer utilizador.
A ferramenta funciona com o Citrix Receiver que é utilizado para se ligar ao servidor Citrix. Pode ser fornecida ao utilizador uma aplicação ou um ambiente de trabalho completo; a ferramenta funciona em ambos os casos se o plugin tiver sido corretamente instalado e o componente de servidor .exe tiver sido copiado e executado no servidor Citrix. O Citrix parece ter apenas o Citrix Receiver de 32 bits. Isto significa que se o seu sistema operativo for de 64 bits e já tiver registado o .dll correspondente, precisa de anular o registo do .dll e utilizar a versão de 32 bits. Caso utilize um SO de 32 bits, basta registar o .dll como mencionado acima. Por favor, note que o Windows de 64 bits tem dois regsvr32.exe, um em *%WINDIR%\system32* (x64) e o outro em *%WINDIR%\SysWOW64* (x32), utilize o último para registar o .dll de 32 bits, que será automaticamente carregado pelo Citrix Receiver aquando da execução. Todo o resto deverá ser igual, por favor, certifique-se de que seguiu o readme antes de abrir issues no Github.
O componente de servidor (.exe) não necessita de qualquer configuração nem requer argumentos. Embora exista um para verbosidade:
PS C:\Users\SocksOverRDP\> .\SocksOverRDP-Server.exe -h
Socks Over RDP by Balazs Bucsay [[@xoreipeip]]
Usage: SocksOverRDP-Server.exe [-v]
-h This help
-v Verbose Mode
O componente de cliente (.dll) vem com definições predefinidas, que são instaladas pelo próprio .dll quando é registado, ou precisam de ser importadas do SocksOverRDP-Plugin.reg.
O .dll do cliente lê todas as opções do registo, os valores podem ser encontrados na seguinte chave:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Terminal Server Client\Default\AddIns\SocksOverRDP-Plugin
Sempre que o módulo está ativado e antes de a conexão ser estabelecida, é mostrado um aviso de lembrete. Exatamente assim:

Este aviso garante que o utilizador sabe que o plugin está carregado e com que definições.
Caso o plugin não carregue ou o executável não seja executado por estarem a faltar algumas DLLs, por exemplo a VCRUNTIME140.DLL, poderá querer instalar o pacote Visual C++ Redistributable for Visual Studio 2015.
Testado no Windows 11 ARM64: Redistributable
No Windows 11 ARM64 (Macbook Pro M1) a seguinte mensagem de erro é mostrada na instalação:
The module SocksOverRDP-Plugin.dll was located bt the call to DllRegisterServer failed with error code 0x8002801c
Embora este erro seja mostrado, o módulo está devidamente instalado e pode ser utilizado.
O componente de servidor (.exe) pode ser executado com qualquer utilizador, funcionará também com utilizadores de privilégios baixos, não existem riscos de segurança associados a este componente de todo.
O componente de cliente (.dll) está configurado por predefinição para escutar apenas em localhost; se isso for alterado para, por exemplo, 0.0.0.0 e não existir firewall ou esta estiver mal configurada, então poderá resultar num problema de segurança, uma vez que outros computadores na rede podem aceder ao Proxy SOCKS e comunicar através do servidor RDP.
Por favor, note que o Servidor SOCKS só está ativo quando a conexão RDP/Citrix está viva e o executável está a ser executado no servidor.
Para impedir os utilizadores de utilizarem esta ferramenta, a única forma conhecida é desativar os Virtual Channels na configuração do Servidor de Área de Trabalho Remota. Embora isto bloqueie efetivamente a utilização desta ferramenta, também desativa o copiar e colar, o que poderá ser um obstáculo ou um grande incómodo para os utilizadores.
Embora seja possível desativar os canais virtuais dinâmicos no RDP, a seguinte solução para fazer o mesmo é ineficaz para o Citrix: https://support.citrix.com/article/CTX202153