ProxyChains-NG ver 4.17 README
ProxyChains est un programme UNIX qui intercepte les fonctions libc liées au réseau
dans les programmes LIÉS DYNAMIQUEMENT via une DLL préchargée (dlsym(), LD_PRELOAD)
et redirige les connexions via des proxys SOCKS4a/5 ou HTTP.
Il ne prend en charge que TCP (pas UDP/ICMP, etc.).
La façon dont cela fonctionne est fondamentalement un HACK ; il est donc possible que cela
ne fonctionne pas avec votre programme, en particulier s'il s'agit d'un script, ou s'il démarre
de nombreux processus comme des daemons en arrière-plan, ou s'il utilise dlopen() pour charger
des « modules » (bug dans le dynlinker de glibc).
Cela devrait toutefois fonctionner avec des programmes compilés simples (C/C++) liés dynamiquement.
Si votre programme ne fonctionne pas avec proxychains, envisagez plutôt d'utiliser une
solution basée sur iptables ; c'est beaucoup plus robuste.
Plateformes prises en charge : Linux, BSD, Mac, Haiku.
*********** ATTENTION ***********
ce programme peut être utilisé pour contourner la censure.
le faire peut être TRÈS DANGEREUX dans certains pays.
ASSUREZ-VOUS TOUJOURS QUE PROXYCHAINS FONCTIONNE COMME PRÉVU
AVANT DE L'UTILISER POUR QUOI QUE CE SOIT D'IMPORTANT.
cela concerne à la fois le programme et le proxy que vous allez
utiliser.
par exemple, vous pouvez vous connecter à un service « what is my ip »
comme ifconfig.me pour vous assurer que votre vraie ip n'est pas utilisée.
UTILISEZ PROXYCHAINS UNIQUEMENT SI VOUS SAVEZ CE QUE VOUS FAITES.
LES AUTEURS ET MAINTENEURS DE PROXYCHAINS N'ASSUMENT AUCUNE
RESPONSABILITÉ EN CAS D'ABUS OU DE MAUVAISE UTILISATION DE CE LOGICIEL ET
DES CONSÉQUENCES QUI EN RÉSULTENT.
*** Installation ***
needs a working C compiler, preferably gcc
./configure --prefix=/usr --sysconfdir=/etc
make
[optional] sudo make install
[optional] sudo make install-config (installs proxychains.conf)
si vous n'installez pas, vous pouvez utiliser proxychains depuis le répertoire de compilation
comme ceci : ./proxychains4 -f src/proxychains.conf telnet google.com 80
Changelog:
Version 4.17
- ajout d'un hook pour la fonction close_range, corrigeant les versions plus récentes d'openssh
- option fat-binary-m1 pour mac
- correction de la gestion des erreurs DNS dans proxy_dns_old
- simplification du code d'initialisation
- correction du préchargement sur openbsd
- correction du double-close dans les applications multithreadées
- diverses améliorations du script configure
Version 4.16
- correction d'une régression dans la détection des indicateurs de l'éditeur de liens du script configure
- suppression d'une solution de contournement vieille de 10 ans pour la mauvaise signature de getnameinfo de glibc
- prise en charge de la nouvelle méthode de hook DYLD pour OSX Monterey
- correction de compilation pour netbsd
- prise en charge des réseaux locaux IPv6
- message d'erreur plus convivial lorsque execvp échoue
- proxy_getaddrinfo() : remplit ai_socktype si demandé
Version 4.15
- correction du script configure pour une version défectueuse de binutils
- initialisation de rand_seed avec une granularité de la nanoseconde
- ajout de la prise en charge des ipv6 numériques dans getaddrinfo
- correction d'un bug dans getaddrinfo lorsque node est nul et !passive
- ajout de la fonctionnalité dnat
- ajout du type de proxy raw
- ajout de la prise en charge de haiku
- ajout de proxy_dns_old pour émuler le comportement de proxychains 3.1
- ajout de la nouvelle fonctionnalité proxy_dns_daemon (expérimentale)
- diverses autres corrections
Version 4.14
- autoriser la syntaxe alternative proto://user:pass@ip:port pour la proxylist
- correction d'une boucle infinie en mode round robin lorsque tous les proxys sont inaccessibles (#147)
- correction de la compilation sur android (#265)
- correction d'une fuite de descripteurs de fichiers dans les processus forkés (#273)
- saut de la tentative de connexion vers les ip nullroutées
- autoriser les noms d'hôtes pour la proxylist dans des circonstances spécifiques
Version 4.13
- amélioration de la robustesse du thread de résolution DNS et correction d'un segfault
- correction de l'authentification user/pass socks5 sur des serveurs non conformes
- correction d'une fuite de mémoire
- ajout de la prise en charge de Solaris
Version 4.12
- correction de plusieurs problèmes de compilation
- pour MAC
- avec -pie
- avec CC personnalisé
- correctif de compatibilité pour certaines applications GUI (8870140)
- correctif de compatibilité pour certains proxys HTTP (cf9a16d)
- correction de plusieurs avertissements pour une compilation plus propre sur debian
- correction de random_chain sur OSX (0f6b226)
Version 4.11
- prise en charge préliminaire de l'IPv6
- correction d'un bug dans hostsreader
- prise en charge préliminaire pour une utilisation sur OpenBSD (caveat emptor)
Version 4.10
- correction d'une régression dans l'ordre d'édition de liens avec des LDFLAGS personnalisés
- correction d'un segfault dans le code de mappage DNS dans les programmes avec > ~400 résolutions différentes
Version 4.9
- correction d'un problème de sécurité CVE-2015-3887
- ajout d'un hook sendto pour gérer le drapeau MSG_FASTOPEN
- remplacement du problématique hostentdb par hostsreader
- correction de la compilation sur OpenBSD (bien que cela n'y fonctionne pas)
Version 4.8.1:
- correction d'une régression dans la cible install-config du Makefile de 4.8
Version 4.8:
- correction d'un cas limite étrange où getaddrinfo était utilisé avec AI_NUMERICHOST
pour tester une ip numérique au lieu de la résoudre (corrige nmap).
- autorise l'utilisation avec des programmes qui dépendent eux-mêmes de LD_PRELOAD
- rejette les entrées incorrectes dans le fichier de configuration
- affiche le numéro de version au démarrage
Version 4.7:
- nouveau type de chaîne round_robin par crass.
- correction d'un bug avec l'allocation paresseuse lorsque le constructeur GCC n'était pas utilisé.
- nouveau drapeau configure --fat-binary pour créer un binaire/bibliothèque « fat » sur OS X
- retourne EBADF plutôt que EINTR dans le hook close.
il est légal pour un programme de réessayer les appels close() lorsqu'il reçoit
EINTR, ce qui pourrait provoquer une boucle infinie, comme vu dans chromium.
Version 4.6:
- quelques correctifs cosmétiques au Makefile, correction d'un bug lorsqu'une ip non numérique était
utilisée comme adresse de serveur proxy.
Version 4.5:
- hook de close() pour empêcher OpenSSH de toucher à l'infrastructure interne.
cela provoquait un segfault du client ssh lorsqu'il était proxifié.
Version 4.4:
- port FreeBSD
- corrige certains problèmes d'installation sur Debian et Mac.
Version 4.3:
- corrige les programmes qui effectuent des recherches DNS dans des processus enfants (fork()),
comme irssi. pour ce faire, la prise en charge de la compilation sans pthreads
a été sacrifiée.
- corrige la sécurité des threads pour les appels gethostent().
- amélioration de la vitesse de traitement DNS, car la base hostent est mise en cache.
Version 4.2:
- corrige des problèmes de compilation avec la toolchain ubuntu 12.04
- corrige un segfault dans un chemin de code rare
Version 4.1
- prise en charge de mac os x (toutes architectures)
- toutes les fonctions internes sont thread-safe lorsqu'elles sont compilées avec -DTHREAD_SAFE
(par défaut).
Version 4.0
- remplacement du script dnsresolver (qui nécessitait la présence d'un binaire « dig »
lié dynamiquement) par une résolution DNS distante.
cela accélère toute opération impliquant DNS, car l'ancien script devait utiliser TCP.
cela permet en outre d'utiliser des urls .onion avec TOR.
- remplacement du système de compilation autoconf cassé par un Makefile simple.
il y a toutefois un script ./configure pour plus de commodité.
il ajoute également la prise en charge d'un fichier de configuration passé via des options de ligne de commande/
variables d'environnement.
Version 3.0
- prise en charge de la résolution DNS via proxy
prend en charge les serveurs proxy SOCKS4, SOCKS5 et HTTP CONNECT.
Types d'authentification : socks - « user/pass » , http - « basic ».
Quand l'utiliser ?
- Lorsque la seule façon de sortir de votre LAN vers l'« extérieur » est de passer par un serveur proxy.
- Pour sortir d'un pare-feu restrictif qui filtre les ports sortants.
- Pour utiliser deux (ou plus) proxys en chaîne :
comme : your_host <--> proxy1 <--> proxy2 <--> target_host
- Pour « proxifier » un programme sans prise en charge intégrée du proxy (comme telnet)
- Accéder à l'intranet depuis l'extérieur via un proxy.
- Pour utiliser DNS derrière un proxy.
- Pour accéder aux services onion tor cachés.
Quelques fonctionnalités sympas :
- Ce programme peut mélanger différents types de proxys dans la même chaîne
comme : your_host <-->socks5 <--> http <--> socks4 <--> target_host
- Différentes options de chaînage prises en charge
ordre aléatoire depuis la liste (longueur de chaîne définie par l'utilisateur).
ordre exact (tel qu'il apparaît dans la liste )
ordre dynamique (exclusion intelligente des proxys morts de la chaîne)
- Vous pouvez l'utiliser avec la plupart des applications clientes TCP, éventuellement même des
scanners réseau, tant qu'elles utilisent les fonctionnalités standard de la libc.
le scan basé sur pcap ne fonctionne pas.
- Vous pouvez l'utiliser avec des serveurs, comme squid, sendmail, ou autre.
- Résolution DNS via proxy.
Configuration :
proxychains recherche le fichier de configuration dans l'ordre suivant :
- le fichier listé dans la variable d'environnement PROXYCHAINS_CONF_FILE ou
fourni comme argument -f au script ou au binaire proxychains.
- ./proxychains.conf
- $(HOME)/.proxychains/proxychains.conf
- $(sysconfdir)/proxychains.conf **
** généralement /etc/proxychains.conf
Exemple d'utilisation :
$ proxychains telnet targethost.com
dans cet exemple, telnet sera exécuté via le proxy (ou les proxys chaînés)
spécifié(s) par proxychains.conf
Exemple d'utilisation :
$ proxychains -f /etc/proxychains-other.conf telnet targethost2.com
dans cet exemple, un fichier de configuration différent de proxychains.conf sera utilisé
pour se connecter à l'hôte targethost2.com.
Exemple d'utilisation :
$ proxyresolv targethost.com
dans cet exemple, targethost.com sera résolu via le proxy (ou les proxys chaînés)
spécifié(s) par proxychains.conf
Problèmes connus :
-
les versions récentes de nmap essaient de déterminer l'interface réseau à utiliser
même si ce n'est pas nécessaire (comme lors de simples syn scans qui utilisent l'
API socket POSIX standard. cela provoque des erreurs lorsque proxychains attribue
une adresse ip d'un espace d'adressage réservé.
solutions possibles : désactiver proxy_dns, utiliser une ip numérique, ou utiliser le
support natif de nmap pour les proxys SOCKS.
-
Mac OS X 10.11 (El Capitan) est livré avec une nouvelle fonctionnalité de sécurité appelée SIP
qui empêche le hooking des applications système.
les solutions consistent à désactiver partiellement SIP en exécutant
csrutil enable --without debug en mode récupération,
ou à copier le binaire système dans le répertoire personnel et à l'exécuter depuis là.
voir le problème github #78 pour plus de détails.
-
le dynlinker de glibc a un bug ou une fonctionnalité de sécurité qui empêche les modules
chargés via dlopen() d'être soumis aux mêmes hooks dlsym que ceux installés pour le programme
principal. cela affecte principalement les langages de script comme perl ou python
qui dépendent fortement de dlopen() pour que les modules écrits en C fonctionnent.
des rapports non confirmés indiquent toutefois que cela fonctionne en root.
musl libc n'est pas affecté par ce bug.
Liens utiles
les sites suivants peuvent s'avérer utiles pour vérifier les fuites :
https://ipfighter.com/
https://browserleaks.com/webrtc
https://dnsleaktest.com
http://check.torproject.org - tor specific
http://ifconfig.me - can be used via curl
http://ifconfig.io/
Communauté :
#proxychains sur irc.libera.chat
Dons :
les dons en bitcoins sont les bienvenus - veuillez les envoyer à cette adresse :
1C9LBpuy56veBqw5N33sZMoZW8mwCw3tPh