Esnifar el flujo de datos en sockets tipo UNIX (Man In The Middle con sockets UNIX)

A diferencia de los sockets de red que pueden auditarse fácilmente con herramientas tipo tcpdump, los sockets unix requieren de otro tipo de aplicaciones para ser monitorizados y averiguar qué tipo de datos fluyen a través de ellos.

La utilidad “socat”, entre muchas de sus posibilidades, facilita la visualización del tráfico que circula a través de los sockets unix. Esta herramienta crea un socket que está bajo su control y lo vincula al socket UNIX original que queremos vigilar. De esa forma, habiendo configurado los clientes para que utilicen el socket de socat de manera previa, se puede visualizar el tráfico sin ningún problema. Es una especie de hombre en el medio con sockets tipo unix. Esta no es la única forma de hacerlo pero tal vez sea la más fácil de implementar sin necesidad de profundizar demasiado en la herramienta.

Para el ejemplo usaremos el típico socket PHP-FPM. Como se dijo anteriormente debemos configurar el cliente que utilizará el socket generado por socat, en nuestro caso el servidor web nginx.

Configuración del socket php en Nginx

location ~ \.php$ {
  try_files $uri =404;
  #fastcgi_pass   unix:/var/run/php5-fpm.sock;
  fastcgi_pass   unix:/tmp/socat-listen;   # <----------
  fastcgi_index  index.php;
  fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
  ...

Ejemplo: Interceptando la comunicación entre Nginx y php-fpm por medio del socket /tmp/socat-listen.

socat -v UNIX-LISTEN:/tmp/socat-listen,mode=777,fork  UNIX-CONNECT:/var/run/php5-fpm.sock

Opciones utilizadas en el ejemplo anterior.

NOTA: Si el contenido manejado por el socket no es texto claro, es útil tener la salida en hexadecimal, para ello podemos utilizar “-x -v”.