Tor (The Onion Router) es una red de comunicaciones en la cual los mensajes o paquetes enviados desde el dispositivo de origen, viajan por diferentes nodos interconectados (servidores) cambiando la IP de transferencia hasta llegar al último nodo, el cual es el que da la cara con el destino de la transmisión. Es bien sabido que el uso común de Tor, diría que es más conocido el navegador Tor Browser que el propio encadenamiento a nivel de sistema por lo que en este artículo, documentaré la instalación y uso a nivel de sistema, haciendo uso del "binario" de Tor para levantar el servicio y los sockets de conexión que permiten posteriormente hacer uso del binario ProxyChains para configurar el encadenamiento y configuraciones de la conexión.
Te encuentras ante una documentación en desarrollo, por lo que el contenido se amplia de forma continua, lo que hoy lees aquí, mañana puede que tenga más anexos añadidos. El sistema de actualizaciones y colaboraciones de la Wiki DeliciousHack está disponible en tiempo real en nuestro Discord, el foro de Telegram y Twitter, únete y estarás al día de todo.
Vídeo explicativo.
Como es común en SpiritAdmins, ampliamos la documentación con vídeos que contemplan todo el proceso documentado, disfrútalos.
Instalación en sistemas Gnu/Linux (Madre Debian y derivadas)
Tor está disponible como paquetería oficial en sistemas operativos Debian y derivadas por lo que se puede buscar en sistema y también instalar el mismo con la orden de sistema "apt". (En mi caso está ya instalado por lo que el output de la instalación será más amplio).
└─# apt install tor -y
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
tor is already the newest version (0.4.8.10-1).
0 upgraded, 0 newly installed, 0 to remove and 1567 not upgraded.
Por el momento documentaré la configuración del "demonio" o servicio de Tor en sistema, en este caso bajo el gestor de sistema "systemd" aunque se ampliará con diferentes S.O. y gestores de arranque y procesos. A continuación especifico las ordenes de sistema para comprobar estado del servicio después de la instalación.
└─# service tor status
○ tor.service - Anonymizing overlay network for TCP (multi-instance-master)
Loaded: loaded (/lib/systemd/system/tor.service; disabled; preset: disable>
Active: inactive (dead)
Dec 17 14:14:50 maritrini systemd[1]: Starting tor.service - Anonymizing overla>
Dec 17 14:14:50 maritrini systemd[1]: Finished tor.service - Anonymizing overla>
Dec 17 15:20:08 maritrini systemd[1]: tor.service: Deactivated successfully.
Dec 17 15:20:08 maritrini systemd[1]: Stopped tor.service - Anonymizing overlay>
lines 1-8/8 (END)
Ahora se inicia el servicio y como se puede ver en la siguiente captura, comprobamos que el estado de mismo ha cambiado de "inactive" a "active" por lo que ya podemos hacer uso de las funcionalidades de Tor.
└─# service tor start
└─# service tor status
● tor.service - Anonymizing overlay network for TCP (multi-instance-master)
Loaded: loaded (/lib/systemd/system/tor.service; disabled; preset: disabled)
Active: active (exited) since Sun 2023-12-17 15:21:18 EST; 2s ago
Process: 44054 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 44054 (code=exited, status=0/SUCCESS)
CPU: 1ms
Dec 17 15:21:18 maritrini systemd[1]: Starting tor.service - Anonymizing overlay network for TCP (multi-instance-master)...
Dec 17 15:21:18 maritrini systemd[1]: Finished tor.service - Anonymizing overlay network for TCP (multi-instance-master).
La configuración de Tor se encuentra en el archivo "/etc/tor/torrc" y aquí es donde se puede editar y modificar las funciones de las que se dispone con esta tecnología y binario en sistema. Se encuentran los sockets de conexión a los primeros nodos, usuarios, correos, logs, puertos de control, entre muchos otros, todos ellos se pueden ver si leemos el archivo en cuestión.
Captura del output de lectura del archivo (por defecto trás la instalación):
cat /etc/tor/torrc (abrir desplegable para ver más)
└─# cat /etc/tor/torrc
## Configuration file for a typical Tor user
## Last updated 9 October 2013 for Tor 0.2.5.2-alpha.
## (may or may not work for much older or much newer versions of Tor.)
##
## Lines that begin with "## " try to explain what's going on. Lines
## that begin with just "#" are disabled commands: you can enable them
## by removing the "#" symbol.
##
## See 'man tor', or https://www.torproject.org/docs/tor-manual.html,
## for more options you can use in this file.
##
## Tor will look for this file in various places based on your platform:
## https://www.torproject.org/docs/faq#torrc
## Tor opens a socks proxy on port 9050 by default -- even if you don't
## configure one below. Set "SocksPort 0" if you plan to run Tor only
## as a relay, and not make any local application connections yourself.
#SocksPort 9050 # Default: Bind to localhost:9050 for local connections.
#SocksPort 192.168.0.1:9100 # Bind to this address:port too.
## Entry policies to allow/deny SOCKS requests based on IP address.
## First entry that matches wins. If no SocksPolicy is set, we accept
## all (and only) requests that reach a SocksPort. Untrusted users who
## can access your SocksPort may be able to learn about the connections
## you make.
#SocksPolicy accept 192.168.0.0/16
#SocksPolicy reject *
## Logs go to stdout at level "notice" unless redirected by something
## else, like one of the below lines. You can have as many Log lines as
## you want.
##
## We advise using "notice" in most cases, since anything more verbose
## may provide sensitive information to an attacker who obtains the logs.
##
## Send all messages of level 'notice' or higher to /var/log/tor/notices.log
#Log notice file /var/log/tor/notices.log
## Send every possible message to /var/log/tor/debug.log
#Log debug file /var/log/tor/debug.log
## Use the system log instead of Tor's logfiles
#Log notice syslog
## To send all messages to stderr:
#Log debug stderr
## Uncomment this to start the process in the background... or use
## --runasdaemon 1 on the command line. This is ignored on Windows;
## see the FAQ entry if you want Tor to run as an NT service.
#RunAsDaemon 1
## The directory for keeping all the keys/etc. By default, we store
## things in $HOME/.tor on Unix, and in Application Data\tor on Windows.
#DataDirectory /var/lib/tor
## The port on which Tor will listen for local connections from Tor
## controller applications, as documented in control-spec.txt.
#ControlPort 9051
## If you enable the controlport, be sure to enable one of these
## authentication methods, to prevent attackers from accessing it.
#HashedControlPassword 16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C
#CookieAuthentication 1
############### This section is just for location-hidden services ###
## Once you have configured a hidden service, you can look at the
## contents of the file ".../hidden_service/hostname" for the address
## to tell people.
##
## HiddenServicePort x y:z says to redirect requests on port x to the
## address y:z.
#HiddenServiceDir /var/lib/tor/hidden_service/
#HiddenServicePort 80 127.0.0.1:80
#HiddenServiceDir /var/lib/tor/other_hidden_service/
#HiddenServicePort 80 127.0.0.1:80
#HiddenServicePort 22 127.0.0.1:22
################ This section is just for relays #####################
#
## See https://www.torproject.org/docs/tor-doc-relay for details.
## Required: what port to advertise for incoming Tor connections.
#ORPort 9001
## If you want to listen on a port other than the one advertised in
## ORPort (e.g. to advertise 443 but bind to 9090), you can do it as
## follows. You'll need to do ipchains or other port forwarding
## yourself to make this work.
#ORPort 443 NoListen
#ORPort 127.0.0.1:9090 NoAdvertise
## The IP address or full DNS name for incoming connections to your
## relay. Leave commented out and Tor will guess.
#Address noname.example.com
## If you have multiple network interfaces, you can specify one for
## outgoing traffic to use.
# OutboundBindAddress 10.0.0.5
## A handle for your relay, so people don't have to refer to it by key.
#Nickname ididnteditheconfig
## Define these to limit how much relayed traffic you will allow. Your
## own traffic is still unthrottled. Note that RelayBandwidthRate must
## be at least 20 KB.
## Note that units for these config options are bytes per second, not bits
## per second, and that prefixes are binary prefixes, i.e. 2^10, 2^20, etc.
#RelayBandwidthRate 100 KB # Throttle traffic to 100KB/s (800Kbps)
#RelayBandwidthBurst 200 KB # But allow bursts up to 200KB/s (1600Kbps)
## Use these to restrict the maximum traffic per day, week, or month.
## Note that this threshold applies separately to sent and received bytes,
## not to their sum: setting "4 GB" may allow up to 8 GB total before
## hibernating.
##
## Set a maximum of 4 gigabytes each way per period.
#AccountingMax 4 GB
## Each period starts daily at midnight (AccountingMax is per day)
#AccountingStart day 00:00
## Each period starts on the 3rd of the month at 15:00 (AccountingMax
## is per month)
#AccountingStart month 3 15:00
## Administrative contact information for this relay or bridge. This line
## can be used to contact you if your relay or bridge is misconfigured or
## something else goes wrong. Note that we archive and publish all
## descriptors containing these lines and that Google indexes them, so
## spammers might also collect them. You may want to obscure the fact that
## it's an email address and/or generate a new address for this purpose.
#ContactInfo Random Person <nobody AT example dot com>
## You might also include your PGP or GPG fingerprint if you have one:
#ContactInfo 0xFFFFFFFF Random Person <nobody AT example dot com>
## Uncomment this to mirror directory information for others. Please do
## if you have enough bandwidth.
#DirPort 9030 # what port to advertise for directory connections
## If you want to listen on a port other than the one advertised in
## DirPort (e.g. to advertise 80 but bind to 9091), you can do it as
## follows. below too. You'll need to do ipchains or other port
## forwarding yourself to make this work.
#DirPort 80 NoListen
#DirPort 127.0.0.1:9091 NoAdvertise
## Uncomment to return an arbitrary blob of html on your DirPort. Now you
## can explain what Tor is if anybody wonders why your IP address is
## contacting them. See contrib/tor-exit-notice.html in Tor's source
## distribution for a sample.
#DirPortFrontPage /etc/tor/tor-exit-notice.html
## Uncomment this if you run more than one Tor relay, and add the identity
## key fingerprint of each Tor relay you control, even if they're on
## different networks. You declare it here so Tor clients can avoid
## using more than one of your relays in a single circuit. See
## https://www.torproject.org/docs/faq#MultipleRelays
## However, you should never include a bridge's fingerprint here, as it would
## break its concealability and potentionally reveal its IP/TCP address.
#MyFamily $keyid,$keyid,...
## A comma-separated list of exit policies. They're considered first
## to last, and the first match wins. If you want to _replace_
## the default exit policy, end this with either a reject *:* or an
## accept *:*. Otherwise, you're _augmenting_ (prepending to) the
## default exit policy. Leave commented to just use the default, which is
## described in the man page or at
## https://www.torproject.org/documentation.html
##
## Look at https://www.torproject.org/faq-abuse.html#TypicalAbuses
## for issues you might encounter if you use the default exit policy.
##
## If certain IPs and ports are blocked externally, e.g. by your firewall,
## you should update your exit policy to reflect this -- otherwise Tor
## users will be told that those destinations are down.
##
## For security, by default Tor rejects connections to private (local)
## networks, including to your public IP address. See the man page entry
## for ExitPolicyRejectPrivate if you want to allow "exit enclaving".
##
#ExitPolicy accept *:6660-6667,reject *:* # allow irc ports but no more
#ExitPolicy accept *:119 # accept nntp as well as default exit policy
#ExitPolicy reject *:* # no exits allowed
## Bridge relays (or "bridges") are Tor relays that aren't listed in the
## main directory. Since there is no complete public list of them, even an
## ISP that filters connections to all the known Tor relays probably
## won't be able to block all the bridges. Also, websites won't treat you
## differently because they won't know you're running Tor. If you can
## be a real relay, please do; but if not, be a bridge!
#BridgeRelay 1
## By default, Tor will advertise your bridge to users through various
## mechanisms like https://bridges.torproject.org/. If you want to run
## a private bridge, for example because you'll give out your bridge
## address manually to your friends, uncomment this line:
#PublishServerDescriptor 0
Proxychains
Una vez se instala Tor como binario en sistema y levantado como servicio, se puede dar paso a utilizar una herramienta o programa de encadenamiento de conexiones HTTP, este es PROXYCHAINS. Su instalación es sencilla y la configuración general tampoco se complica excesivamente.
Muestra de la instalación de proxychains a través de paquetería.
root@skynet:/home/dredd# apt install proxychains4 -y
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias... Hecho
Leyendo la información de estado... Hecho
Se instalarán los siguientes paquetes adicionales:
libproxychains4
Se instalarán los siguientes paquetes NUEVOS:
libproxychains4 proxychains4
0 actualizados, 2 nuevos se instalarán, 0 para eliminar y 0 no actualizados.
Se necesita descargar 42,9 kB de archivos.
Se utilizarán 133 kB de espacio de disco adicional después de esta operación.
Des:1 http://deb.debian.org/debian bookworm/main amd64 libproxychains4 amd64 4.16-2 [22,5 kB]
Des:2 http://deb.debian.org/debian bookworm/main amd64 proxychains4 amd64 4.16-2 [20,4 kB]
Descargados 42,9 kB en 0s (611 kB/s)
Seleccionando el paquete libproxychains4:amd64 previamente no seleccionado.
(Leyendo la base de datos ... 120453 ficheros o directorios instalados actualmente.)
Preparando para desempaquetar .../libproxychains4_4.16-2_amd64.deb ...
Desempaquetando libproxychains4:amd64 (4.16-2) ...
Seleccionando el paquete proxychains4 previamente no seleccionado.
Preparando para desempaquetar .../proxychains4_4.16-2_amd64.deb ...
Desempaquetando proxychains4 (4.16-2) ...
Configurando libproxychains4:amd64 (4.16-2) ...
Configurando proxychains4 (4.16-2) ...
update-alternatives: utilizando /usr/bin/proxychains4 para proveer /usr/bin/proxychains (proxychains) en modo automático
Procesando disparadores para man-db (2.11.2-2) ...
Procesando disparadores para libc-bin (2.36-9+deb12u3) ...
Cuando la instalación está completa, se accede a la configuración de proxychains en el archivo "/etc/proxychains4.conf" y se modifican los parámetros de strict_chain (este se deshabilita con un almuhadilla) y el de random_chain (Se habilita quitando la almuhadilla)
Y se añade el SOCKS5 al final del archivo de configuración, inhabilitando el SOCKS4 que a de hoy está obsoleto aunque se sigue utilizando para ciertas casuísticas.
Bien, ahora se puede acceder a la red de tor a través del gestor de encadenamiento de proxychains, el cual solo necesita utilizarse como comando antes de la herramienta, programa o proceso que interese que tenga una salida hacia conexiones por la red Tor.
Para comprobar que realmente se está conectando al encadenamiento con la red, a continuación se utiliza la web de delicioushack destinada a que la comuidad pueda realizar pruebas en ella, como por ejemplo este mismo caso.
Con curl se testea una petición a una url para recibir la respuesta.
Ahora haciendo uso de la web de pruebas aportada para la comunidad, se filtra por la línea 2 y por la palabra IP y se obtiene la Ip que ha realizado la petición a la misma, por lo tanto, devuelve la IP de un nodo de la red tor, eso si la instalación es correcta (si has seguido los pasos de esta documentación, lo es XD)
root@skynet:/home/dredd# proxychains curl http://delicil.cluster029.hosting.ovh.net/papito.php | head -n2 | grep IP > IP.txt
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.16
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0[proxychains] Random chain ... 127.0.0.1:9050 ... delicil.cluster029.hosting.ovh.net:80 ... OK
100 6957 0 6957 0 0 4541 0 --:--:-- 0:00:01 --:--:-- 4544
curl: (23) Failure writing output to destination
root@skynet:/home/dredd# cat IP.txt
User IP Address - 192.42.116.189
root@skynet:/home/dredd#
Con la IP extraída, se utiliza whois para analizar los datos públicos relacionados con esta IP en internet.
root@skynet:/home/dredd# proxychains whois 192.42.116.189
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.16
[proxychains] Random chain ... 127.0.0.1:9050 ... whois.arin.net:43 ... OK
NetRange: 192.42.113.0 - 192.42.132.255
CIDR: 192.42.120.0/21, 192.42.128.0/22, 192.42.113.0/24, 192.42.114.0/23, 192.42.132.0/24, 192.42.116.0/22
NetName: RIPE-ERX-192-42-113-0
NetHandle: NET-192-42-113-0-1
Parent: NET192 (NET-192-0-0-0-0)
NetType: Early Registrations, Transferred to RIPE NCC
OriginAS:
Organization: RIPE Network Coordination Centre (RIPE)
RegDate: 2005-02-28
Updated: 2005-02-28
Comment: These addresses have been further assigned to users in
Comment: the RIPE NCC region. Contact information can be found in
Comment: the RIPE database at http://www.ripe.net/whois
Ref: https://rdap.arin.net/registry/ip/192.42.113.0
ResourceLink: https://apps.db.ripe.net/search/query.html
ResourceLink: whois.ripe.net
OrgName: RIPE Network Coordination Centre
OrgId: RIPE
Address: P.O. Box 10096
City: Amsterdam
StateProv:
PostalCode: 1001EB
Country: NL
RegDate:
Updated: 2013-07-29
Ref: https://rdap.arin.net/registry/entity/RIPE
ReferralServer: whois://whois.ripe.net
ResourceLink: https://apps.db.ripe.net/search/query.html
OrgTechHandle: RNO29-ARIN
OrgTechName: RIPE NCC Operations
OrgTechPhone: +31 20 535 4444
OrgTechEmail: hostmaster@ripe.net
OrgTechRef: https://rdap.arin.net/registry/entity/RNO29-ARIN
OrgAbuseHandle: ABUSE3850-ARIN
OrgAbuseName: Abuse Contact
OrgAbusePhone: +31205354444
OrgAbuseEmail: abuse@ripe.net
OrgAbuseRef: https://rdap.arin.net/registry/entity/ABUSE3850-ARIN
Continuará...
La documentación está en proceso de desarrollo por lo que poco a poco se complementará más aspectos técnicos sobre TOR + PROXYCHAINS y la mejor forma de saber cuando se actualiza alguna de esta documentación, es unirte a la comunidad de SpiritAdmins a través de Discord y Telegram, te esperamos.