
Support du proxy Socks5/4/4a pour Remote Desktop Protocol / Terminal Services / Citrix / XenApp / XenDesktop
Cet outil ajoute la capacité d'un proxy SOCKS aux services Terminal Services (ou services de bureau à distance) et Citrix (XenApp/XenDesktop). Il utilise le canal virtuel dynamique qui nous permet de communiquer via une connexion RDP/Citrix ouverte sans avoir besoin d'ouvrir un nouveau socket, une connexion ou un port sur un pare-feu.
Vous devez installer un plugin (.dll) sur votre ordinateur client que vous utilisez pour vous connecter au serveur RDP/Citrix. Sur le serveur RDP/Citrix, vous devez utiliser l'autre moitié du projet, le .exe, qui crée le canal entre le plugin et l'exécutable du serveur. Plus de détails sont disponibles ci-dessous. Si vous souhaitez l'utiliser avec Citrix/XenApp/XenDesktop, veuillez faire défiler jusqu'à la section Citrix.
Si la DLL est correctement enregistrée, elle sera chargée par mstsc.exe (client Bureau à distance) ou Citrix Receiver à chaque démarrage. Lorsque l'exécutable serveur s'exécute côté serveur, il se reconnecte à la DLL sur un canal virtuel dynamique, une fonctionnalité du protocole RDP (Remote Desktop Protocol). Une fois le canal établi, un proxy SOCKS est lancé sur l'ordinateur client, par défaut sur 127.0.0.1:1080. Ce service peut être utilisé comme proxy SOCKS5 depuis n'importe quel navigateur ou outil.
Les canaux virtuels dynamiques ont été introduits dans Windows Server 2008 et Windows Vista SP1. Ces versions et tout ce qui est plus récent devraient fonctionner.
Actuellement, le client fonctionne avec mstsc.exe (client Bureau à distance). Si vous souhaitez l'utiliser depuis Unix, essayez FreeRDP, qui a publié un module similaire à peu près au même moment que cet outil.
Citrix prend en charge la même API sous-jacente que Microsoft, bien que l'on ne sache pas exactement quand elle a été introduite, c'était avant 2013, donc le plugin devrait fonctionner avec la plupart des solutions Citrix.
Vous pouvez récupérer l'intégralité du projet et le compiler vous-même, ou simplement utiliser les binaires compilés depuis la section Releases. Il est important d'utiliser le bon binaire dans tous les cas, veuillez sélectionner celui correspondant à l'architecture concernée (si votre client est en 32 bits mais que le serveur est en 64 bits, prenez la dll 32 bits et l'exe 64 bits). Le .dll doit être placé sur l'ordinateur client dans n'importe quel répertoire (pour une utilisation à long terme, il est recommandé de le copier dans %SYSROOT%\system32\ ou %SYSROOT%\SysWoW64\)) et de l'installer avec la commande suivante en tant qu'utilisateur élevé (également appelé Administrateur) :
regsvr32.exe SocksOverRDP-Plugin.dll
Si votre utilisateur n'est pas administrateur, vous devez également importer les paramètres de registre pour votre utilisateur. Veuillez utiliser le fichier SocksOverRDP-Plugin.reg pour cela.
Si vous souhaitez le supprimer :
regsvr32.exe /u SocksOverRDP-Plugin.dll
Désormais, à chaque fois que vous vous connecterez à un serveur RDP, ce plugin sera chargé et se configurera comme spécifié dans le registre (voir ci-dessous).
Le .exe doit être copié sur le serveur et exécuté par n'importe quel utilisateur.
L'outil fonctionne avec Citrix Receiver, utilisé pour se connecter au serveur Citrix. Qu'il s'agisse d'une application ou d'un bureau complet fourni à l'utilisateur, l'outil fonctionne dans les deux cas si le plugin a été correctement installé et si le composant serveur .exe a été copié puis exécuté sur le serveur Citrix.
Citrix semble ne proposer que Citrix Receiver en 32 bits. Cela signifie que si votre système d'exploitation est en 64 bits et que vous avez déjà enregistré le .dll correspondant, vous devez désenregistrer le .dll et utiliser la version 32 bits. Si vous utilisez un système d'exploitation 32 bits, enregistrez simplement le .dll comme mentionné ci-dessus.
Veuillez noter que Windows 64 bits possède deux regsvr32.exe, un dans *%WINDIR%\system32* (x64) et un dans *%WINDIR%\SysWOW64* (x32) ; utilisez ce dernier pour enregistrer le .dll 32 bits, qui sera automatiquement chargé par Citrix Receiver lors de l'exécution. Tout le reste devrait être identique. Veuillez vous assurer d'avoir suivi le readme avant d'ouvrir des problèmes sur Github.
Le composant serveur (.exe) ne nécessite aucune configuration ni aucun argument. Il en existe cependant un pour la verbosité :
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
Le composant client (.dll) est fourni avec des paramètres prédéfinis, qui sont installés par la .dll elle-même lors de son enregistrement, ou doivent être importés depuis le fichier SocksOverRDP-Plugin.reg.
Le .dll client lit toutes les options depuis le registre. Les valeurs se trouvent sous la clé suivante :
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Terminal Server Client\Default\AddIns\SocksOverRDP-Plugin
Chaque fois que le module est activé et avant que la connexion ne soit établie, un avertissement de rappel est affiché. Comme ceci :

Cet avertissement garantit que l'utilisateur sait que le plugin est chargé et avec quels paramètres.
Si le plugin ne se charge pas ou si l'exécutable ne s'exécute pas parce qu'il manque des DLL comme par exemple VCRUNTIME140.DLL, vous voudrez peut-être installer le package Visual C++ Redistributable pour Visual Studio 2015.
Testé sur Windows 11 ARM64 : Redistributable
Sur Windows 11 ARM64 (Macbook Pro M1), le message d'erreur suivant s'affiche lors de l'installation :
The module SocksOverRDP-Plugin.dll was located bt the call to DllRegisterServer failed with error code 0x8002801c
Bien que cette erreur s'affiche, le module est correctement installé et peut être utilisé.
Le composant serveur (.exe) peut être exécuté par n'importe quel utilisateur, y compris les utilisateurs à faibles privilèges ; il n'y a aucun risque de sécurité associé à ce composant.
Le composant client (.dll) est configuré par défaut pour écouter uniquement sur localhost. Si cette valeur est modifiée, par exemple en 0.0.0.0, et qu'aucun pare-feu n'est présent ou qu'il est mal configuré, cela peut entraîner un problème de sécurité, car d'autres ordinateurs du réseau peuvent accéder au proxy SOCKS et communiquer via le serveur RDP.
Veuillez noter que le serveur SOCKS n'est actif que lorsque la connexion RDP/Citrix est vivante et que l'exécutable est en cours d'exécution sur le serveur.
Pour empêcher les utilisateurs d'utiliser cet outil, la seule façon connue est de désactiver les canaux virtuels dans la configuration du serveur de bureau à distance. Bien que cela bloque effectivement l'utilisation de cet outil, cela désactive également le copier-coller, ce qui peut être un obstacle majeur ou une grande source de frustration pour les utilisateurs.
Bien qu'il soit possible de désactiver les canaux virtuels dynamiques dans RDP, la solution suivante, qui vise à faire de même, est inefficace pour Citrix : https://support.citrix.com/article/CTX202153