Las direcciones ONION en TOR son cadenas con una longitud exacta de
16 caracteres, compuestas por los dígitos entre 2-7 y las letras en
minúsculas de a-z. Dichas direcciones generalmente se crean de forma
automática por cualquier cliente de TOR, pero en ocasiones, se pueden
encontrar sitios en la web profunda de TOR con direcciones ONION que no
parecen ser tan aleatorias como la mayoría, en ocasiones tienen patrones
fijos que determinan el contenido y/o temática del servicio oculto. Un
ejemplo es Facebook, que cuenta con un servicio oculto en la web
profunda de TOR para aquellos que quieran acceder a esta popular red
social y ya de paso, perder su privacidad y probablemente el anonimato
que brinda TOR. La dirección ONION de facebook en la web profunda de TOR
es esta: facebookcorewwwi.onion
y como se puede apreciar, existe un patrón bastante claro que además,
resulta fácil de memorizar. Ahora bien, lo cierto es que personalizar la
dirección completa (16 caracteres) con la capacidad de computo que
tenemos actualmente resulta imposible, tal como comentaba en un articulo
que he escrito hace algún tiempo, calcular y en consecuencia, descubrir un servicio oculto en TOR, puede llevar millones de años, una
escala de tiempo que evidentemente no es tolerable. No obstante, si que
se puede personalizar una parte de dicha dirección en poco tiempo, todo
depende del número de caracteres que se quiera aplicar al patrón. Para
hacer esto, existe una herramienta muy fácil de instalar y utilizar,
dicha utilidad es Shallot.
INSTALACIÓN Y USO DE SHALLOT
Shallot es una herramienta que permite aplicar un patrón para
personalizar una parte de la dirección ONION de un servicio oculto. Los
patrones que se pueden aplicar típicamente son expresiones regulares que
permiten indicar la forma en la que se debe generar la clave privada
del servicio oculto y en consecuencia, la dirección ONION del mismo. Es
un programa que se encuentra escrito en lenguaje C y solamente tiene dos
dependencias: libssl y libcrypto, librerías que son bastante comunes en
sistemas Linux. El proyecto se puede descargar desde GitHub y el
proceso de instalación es tan simple como ejecutar “configure” y “make”
Las opciones que admite Shallot se pueden ver a continuación
>./shallot
Usage: shallot [-dmopv] [-f <file>] [-t count] [-x time] [-e limit] pattern
-d : Daemonize (requires -f)
-m : Monitor mode (incompatible with -f)
-o : Optimize RSA key size to improve SHA-1 hashing speed
-p : Print ‘pattern’ help and exit
-f <file> : Write output to <file>
-t count : Forces exactly count threads to be spawned
-x secs : Sets a limit on the maximum execution time. Has no effect without -m
-e limit : Manually define the limit for e
Version: 0.0.3-alpha |
El interruptor “-p” puede ser útil para conocer algunos de los
patrones (expresiones regulares) que se pueden aplicar con Shallot.
./shallot -p
base32 alphabet allows letters [a-z] and digits [2-7]
pattern can be a POSIX-style regular expression, e.g.
xxx must contain ‘xxx’
bar$ must end with ‘bar’
^foo must begin with ‘foo’
b[a4]r may contain leetspeech ;)
^ab|^cd must begin with ‘ab’ or ‘cd’
[a-z]{16} must contain letters only, no digits
^dusk.*dawn$ must begin with ‘dusk’ and end with ‘dawn’ |
Como se puede apreciar, algunas de las expresiones de ejemplo
permiten aplicar patrones muy variados, como por ejemplo que la
dirección ONION debe comenzar y/o terminar con una cadena determinada,
que contenga solamente números o letras o que contenga en cualquier
posición de la dirección una cadena determinada.
También existen otras opciones que permiten controlar el tiempo máximo
en el que se debe ejecutar la herramienta, si se debe ejecutar como un
proceso en “background” y si el resultado (clave privada para el
servicio oculto) se debe almacenar en un fichero. Algunos ejemplos del
uso de estos interruptores se enseña a continuación
>./shallot -f /home/adastra/private_key ^hack
>./shallot -m -o ^hacker
>./shallot -m -t 15 ^hacker |
En todos los casos, después de procesar y descubrir una clave privada
cuya dirección ONION generada contenga el patrón, se pinta por pantalla
o se crea un fichero con dicha clave privada para que sea utilizada por
un servicio oculto.
Como comentaba antes, el número de caracteres especificados en el patrón
es importante y determina si es posible obtener una clave privada que
encaje con el patrón y cuánto tiempo puede tardar el calculo de dicha
clave. En el proyecto de GitHub de Shallot se enseña la siguiente tabla
que nos da una idea del número de caracteres que podemos personalizar en
la dirección ONION.
characters |
time to generate (approx.) |
1 |
less than 1 second |
2 |
less than 1 second |
3 |
less than 1 second |
4 |
2 seconds |
5 |
1 minute |
6 |
30 minute |
7 |
1 day |
8 |
25 days |
9 |
2.5 years |
10 |
40 years |
11 |
640 years |
12 |
10 millenia |
13 |
160 millenia |
14 |
2.6 million years |
Las pruebas anteriores las ha realizado el autor con un ordenador de
1.5Gh de procesador. Si bien es cierto que se puede utilizar ordenadores
mucho más potentes, las estimaciones anteriores no sufren cambios
considerables con una mayor capacidad de computo, además, solamente se
ha llegado a calcular hasta 14 caracteres, la cifra con 15 y 16
caracteres puede llegar a billones de años. Muchísimo más de lo que
estamos dispuestos a esperar, por mucho que estemos acostumbrados a
utilizar sistemas Windows.
Suponiendo que se utiliza un patrón con pocos caracteres, se puede
generar una clave privada en muy poco tiempo, de hecho, las dificultades
comienzan a partir de 7 o 8 caracteres, pero cualquier patrón que esté
por debajo de dicho valor, puede ser procesado por Shallot en un tiempo
bastante razonable.
Uno de los resultados que da la herramienta tras aplicar el patrón “^hack” es el siguiente
—————————————————————-
Found matching domain after 998147 tries: hacktkeocgipcjvv.onion
—————————————————————-
—–BEGIN RSA PRIVATE KEY—–
MIICWwIBAAKBgQCmZx9BMoG55KOoyAa0T43rNRW4z8m9vjgdXRxX2ZOaFMbrMITC
U6zm5CaauB0RYvu0m99/J9YhfXJQor69/YUIWMWGOXdn3CfVPML5kJWdCF68jhyE
qmPJAaTuodv7rwlB0KyTzOYUGNLDN/yZey9aG2CKWLfTX/w3Aq7c/6Y20QIDBKSB
AoGABFqfSWmx3CIHU40PJCv2ecf61m7LZcAQErvXddYZDCodEYKXDypWJZatQjKm
Whl9DGCZIMR3jpfVrKlIVjwT8+ERk35DXdRGzWi0n/y8be5XokYMnTreEbkcsprR
H8TeN6cJPwrjgXnd4g9Z2q9luKkDegdGLbsKY9nnh8lf5oUCQQDZi+lDL7S/jEoX
k5Xs805cTLPnqdGT0RelivchoGm03U2ggIUycCLv0SM6VaRcKNsBrGBtWg5jznu9
Xm9865xvAkEAw9DuwqkXK+WixHVY+uoT+LUHmBRJiVV+ZHKUzCOvF4yTxqGNCMAM
LcuCZtiamFbA4YQnBHAMRpMJt12/OSuAvwJAQjs2GYeqUmYE0MFt99KYhA2HHDny
DpSzwriBqAKC/lzk/SnEyYw5nBb/+zLYS3+zNUEAEZ8ktwIF1eFVriczdQJAE6qG
q9J5kLbmVuyhkBB0zO5hcCE5EFVren5/XUGrzOz1hJbv4Q+9TkqDO3xaQ/v+iIqt
hmu8XPNRhi50Q4vXhwJAQywFaZosVqFLUPJB4AmMeKQ2nPHpSLVVWFVPNNTypDZC
LDJgX849UGd0Nu9bCTWFtJaFROGUOa8U2cIsa8N6iQ==
—–END RSA PRIVATE KEY—– |
A continuación, solamente es necesario incluir el contenido anterior
en un fichero con nombre “private_key” que se deberá ubicar en el
directorio que se declara en la propiedad “HiddenServiceDir” del fichero
de configuración de TOR (torrc).
HidenServiceDir /home/adastra/servicioOculto
HiddenServicePort 80 127.0.0.1:80 |
Con las dos directivas anteriores se define un servicio oculto que va
a procesar peticiones de los clientes por el puerto 80 en la dirección
ONION generada. En este caso, el fichero “private_key” con la clave RSA
generada por Shallot debe ubicarse en el directorio
“/home/adastra/servicioOculto”. Una vez hecho esto, basta con arrancar
la instancia de TOR utilizando el fichero torrc con las directivas
anteriores y se podrá ver que en el directorio
“/home/adastra/servicioOculto” existe un nuevo fichero llamado
“hostname”, con la dirección ONION generada a partir de la clave privada
definida en el fichero “private_key”.
Con estos sencillos pasos se puede personalizar una parte de la
dirección ONION de un servicio oculto en TOR, algo que en algunos casos
viene bien para tener direcciones que sean un poco más fáciles de
recordar y compartir.
Saludos y Happy Hack!
Adastra.