martes, 20 de noviembre de 2012

Permitir a un usuario normal capturar tráfico con Wireshark

Vengo de pelearme un poco con Wireshark en Ubuntu y he pensado que era interesante comentarlo rápidamente por aquí.

Resulta que, ¡qué cosas!, suelo usar Wireshark para hacer capturas en vivo en las interfaces de red. Por tal motivo en su momento edité el fichero /usr/share/applications/wireshark.desktop. Este fichero en Ubuntu es el que usa la interfaz Ubiquity para conocer la descripción de una aplicación (qué ejecutar, cómo se llama, el icono y cosas de esas). En su momento cuando instalé Wireshark lo edité para modificar el programa a ejecutar y le puse lo siguiente:

Exec=gksu wireshark %f

Modifiqué esta línea para que al ejecutarlo desde Ubiquity no me abriera Wireshark con los permisos de mi usuario (que no es root y por lo tanto no puede hacer capturas en vivo), sino que por el contrario ejecutara gksu (la versión gráfica de sudo) para darle permisos de administrador, y de esta forma poder abrir Wireshark y poder capturar en vivo.

Esto me introdujo una pequeña incomodidad que, si bien no me ha causado problemas en mi día a día, me tocaba la moral cada vez que la veía. Resulta que al iniciarse Wireshark siempre me saltaba un caja de diálogo diciéndome:

Lua: Error during loading:
 [string "/usr/share/wireshark/init.lua"]:45: dofile has been disabled

Hoy ya me cansé de ver ese error y de hacer las cosas mal, porque en muchos lados se nos avisa de que Wireshark no debería ejecutarse con permisos de root, así que decidí resolverlo.

Googleando un poco llegué a la documentación oficial de wireshark donde se nos dice que en sistemas Debian leamos el documento /usr/share/doc/wireshark/README.Debian. Aquí se nos dice lo siguiente:

   I./b. Installing dumpcap and allowing non-root users to capture packets

      Members of the wireshark group will be able to capture packets on network
      interfaces. This is the preferred way of installation if Wireshark/Tshark
      will be used for capturing and displaying packets at the same time, since
      that way only the dumpcap process has to be run with elevated privileges
      thanks to the privilege separation[1].

      Note that no user will be added to group wireshark automatically, the
      system administrator has to add them manually.

      ...

Básicamente que para poder conseguir lo que queremos tenemos que tener dumpcap instalado y a nuestro usuario en el grupo wireshark.

Me sorprendió bastante que dumpcap no estuviera instalado, supuse que se instalaría a la vez que wireshark. Por suerte está en los repositorios.

$ sudo apt-get install pcaputils

También me llamó la atención que el grupo wireshark no existiera...

$ sudo groupadd wireshark
$ sudo addgroup user wireshark

Que digo yo, ¿por qué no se hace esto en la instalación de wireshark?, algún motivo habrá, no seré yo quién discuta con la gente de wireshark ni de Debian/Ubuntu.

Llegados a este punto tenemos que reiniciar la sesión, ya que no estaremos efectivamente en el grupo wireshark hasta el relogueo (se puede ver con el comando groups).

Sin embargo tampoco pude capturar después de haber hecho esto. Mirando un poco más en la documentación de wireshark, en el apartado de otras distros Linux, comenta un par de cosas sobre las capabilities de los binarios en sistemas compilados con este soporte. Me fijé que dumpcap no tenía activa ninguna capability.

$ getcap dumpcap
$

Así que le dí a mano las capacidades necesarias:

$ setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' dumpcap


No tengo muy claro por qué se necesita darle CAP_NET_RAW, esta característica básicamente permite que un programa pueda escribir directamente en la tarjeta de red (sin pasar por toda la pila que implementa el SO), pero dumpcap no creo que escriba nada, sólo lee y CAP_NET_ADMIN es la que permite poner una interfaz en modo promiscuo.

$ getcap dumpcap
dumpcap = cap_net_admin,cap_net_raw+eip


Bueno, una vez le hayamos dado estas capacidades a dumpcap habremos conseguido que al ejecutar wireshark sin darle permisos de superusuario se pueda capturar en vivo de las interfaces y además nos habremos quitado el pesado fallo de lua. Además también habremos configurado un poco mejor nuestro sistema.

Saludos.

No hay comentarios:

Publicar un comentario