Quantcast
Channel: SafetyBits » General
Viewing all articles
Browse latest Browse all 5

Sniffing en Remoto

$
0
0

En más de una ocasión me he encontrado en la necesidad de realizar una captura de red de un equipo remoto en tiempo real y analizarla con varias herramientas, pero se plantean varios “problemas” a la hora de realizarlo.

Uno de los problemas es que necesitaríamos tener instaladas en el servidor todas las herramientas de análisis que necesitemos. Esto en algunos casos no es posible (herramientas con GUI), además de no ser muy seguro tener todas las herramientas instaladas en el servidor. Una opción es realizar una captura con tcpdump durante X tiempo y luego volcarla a la estación de trabajo, pero el no poder analizar la captura “on-the-fly” o el hecho de que la actividad sospechosa no se realizase justo cuando estamos capturando los datos (¿qué pasa si te la cuelan entre captura y captura?) es algo que me preocupa, y sí, el servidor ya cuenta con NIDS y HIDS pero el problema se plantea cuando necesitamos una captura de red completa.

Para ello lo que vamos a hacer es lo siguiente:

  • Crear un usuario en el servidor, que pueda ejecutar tcpdump con permisos de root sin password
  • Autorizar el login de dicho usuario por SSH en el servidor mediante claves DSA permitiendo únicamente ejecutar el binario ‘sudo
  • Crear una cola FIFO donde volcar la captura remota

Hecho esto, la FIFO contendrá la captura del servidor remoto, con lo que podremos usarla como origen de captura en la estación de trabajo.

El servidor es una Debian GNU/Linux y la estación de trabajo es FreeBSD 8.2.

Creando el usuario en el servidor:

sch3m4@caronte:~$ sudo useradd -m -N -s /bin/bash sniffer
sch3m4@caronte:~$ sudo passwd sniffer
sudo passwd sniffer
Introduzca la nueva contraseña de UNIX:
Vuelva a escribir la nueva contraseña de UNIX:
passwd: contraseña actualizada correctamente

Parámetros:

  • -m Crea el directorio de conexion si no existe
  • -N No crea el grupo del usuario
  • -s Shell por defecto del usuario
  • sniffer Usuario

La password es opcional, dependiendo si el servidor SSH permite logins con contraseñas vacías. Hecho esto ejecutamos la siguiente orden para permitirle ejecutar tcpdump como root sin pedir la contraseña:

sch3m4@caronte:~$ sudo echo "sniffer ALL= NOPASSWD: `which tcpdump`" >> /etc/sudoers

Autorizar login SSH sin password:

Ahora lo que haremos será generar una clave DSA en la estación de trabajo, en caso de que ya la tengas generada, puedes saltarte esta parte.

[sch3m4@hellforce1 ~]$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/sch3m4/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/sch3m4/.ssh/id_dsa.
Your public key has been saved in /home/sch3m4/.ssh/id_dsa.pub.
The key fingerprint is:
78:d2:ed:e7:33:8f:d8:5c:78:b6:2b:21:1d:9c:c0:a6 sch3m4@hellforce1.hell.lan
The key's randomart image is:
+--[ DSA 1024]----+
|         .       |
|          +      |
|         o o .   |
|       oE.  +    |
|      o S .. .   |
|       o .. o.   |
|          ..o.+  |
|           *+= . |
|          . ==+. |
+-----------------+
[sch3m4@hellforce1 ~]$

Ahora camos a copiar la clave pública que hemos generado (~/.ssh/id_dsa.pub) al directorio de trabajo del usuario “sniffer” en el servidor, crear la carpeta “.ssh” y volcar la clave pública al fichero “.ssh/authorized_keys” y darle los permisos adecuados. Dependiendo de la configuración que tengamos en el servidor SSH tendremos que agregar el usuario “sniffer” en la linea “AllowUsers“  del fichero de configuración de SSH (/etc/sshd/sshd_config).

[sch3m4@hellforce1 ~]$ scp -C .ssh/id_dsa.pub sniffer@caronte:~/
sniffer@caronte's password:
id_dsa.pub         100%  616     0.6KB/s   00:00   
[sch3m4@hellforce1 ~]$

Ahora nos conectamos por SSH al servidor, con el usuario “sniffer” para crear el directorio “~/.ssh” crear el fichero “~/.ssh/authorized_keys” con la clave pública DSA que hemos subido al servidor, e indicarle que solo puede usar la orden ‘sudo‘:

[sch3m4@hellforce1 ~]$ ssh sniffer@caronte
sniffer@caronte's password: 

sniffer@caronte:~$ mkdir .ssh
sniffer@caronte:~$ chmod 0700 .ssh/
sniffer@caronte:~$ cat id_dsa.pub > .ssh/authorized_keys
sniffer@caronte:~$ rm id_dsa.pub
sniffer@caronte:~$ chmod 600 .ssh/authorized_keys
sniffer@caronte:~$ ls -l .ssh/
total 4
-rw------- 1 sniffer users 631 may  4 19:55 authorized_keys
sniffer@caronte:~$

Hecho esto el contenido de “~/.ssh/authorized_keys” quedaría algo parecido a esto:

ssh-dss A(...)suGkuJRcwAAAIEAmKBmvqR+0IjzrdYXR8BX(...)ZScAAACAG2l92RIc4vlI+o(...)UQoreQ= sch3m4@hellforce1.hell.lan

Ahora probamos a iniciar sesion con el usuario ‘sniffer‘ en el servidor:

[sch3m4@hellforce1 ~]$ ssh sniffer@caronte

Last login: Wed May  4 19:58:10 2011 from 10.0.0.33
sniffer@caronte:~$

Ahora vamos a intentar iniciar sesión lanzando tcpdump:

[sch3m4@hellforce1 ~]$ ssh sniffer@caronte sudo tcpdump -i tun0

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 65535 bytes
^CKilled by signal 2.
[sch3m4@hellforce1 ~]$

Todo correcto así que vamos a preparar los parámetros de tcpdump y volcar la salida a una FIFO:

[sch3m4@hellforce1 ~]$ mkfifo /tmp/fifo.sniffer
[sch3m4@hellforce1 ~]$ ssh sniffer@caronte sudo tcpdump -U -n -w - -i wlan0 "port 80" > /tmp/fifo.sniffer

Ahora, ya podemos lanzar Wireshark con la siguiente orden:

[sch3m4@hellforce1 ~]$ sudo wireshark -k -i /tmp/fifo.sniffer

La opción “-k” es para que comience la captura en cuanto se abra.


Viewing all articles
Browse latest Browse all 5

Latest Images

Trending Articles





Latest Images