martes, julio 12, 2016

WireGuard, una VPN rápida, moderna y (esperemos) segura

Desde su presentación hace unas semanas atrás le estoy siguiendo el hilo a la nueva implementación de túnel VPN denominada WireGuard que, básicamente, y copypasteando el marketing de su sitio web,

WireGuard es una VPN extremadamente sencilla, aunque rápida y moderna que utiliza técnicas de criptografía avanzadas. Apunta a ser más rápida, más simple, más reducida y más útil que IPSec, evitando a la vez los dolores de cabeza [de su implementación]. Además, busca ser considerablemente más performante que OpenVPN...

Los puntos fuertes de este software son:

  • Sencillez y facilidad de uso: Busca ser tan fácil de configurar y desplegar como SSH. Una conexión VPN requiere el intercambio de claves públicas sencillas -tal como el intercambio de claves SSH- y todo lo demás se maneja en forma transparente por el software.
  • Criptográficamente robusto: Utiliza criptografía moderna: Noise protocol framework y los algoritmos Curve25519, ChaCha20, Poly1305 (estos últimos de la mente de D. J. Bernstein), BLAKE2, SipHash24, HKDF, con decisiones conservadoras y razonables, y ha sido revisado por criptógrafos [aunque no sabemos quienes].
  • Mínima superficie de ataque: Fue diseñado teniendo en mente la sencillez y la facilidad de implementación, siendo implementable fácilmente con pocas líneas de código, y fácilmente auditable por vulnerabilidades de seguridad.
  • De alto rendimiento: Utiliza instrucciones criptográficas disponibles en los procesadores modernos y está implementado en el propio núcleo de Linux, con lo que permite armar una red segura manteniendo altas tasas de transferencia. Puede ser usado tanto en smartphones como en routers de backbone.
  • Bien definido y estudiado: WireGuard es el resultado de un extenso proceso académico detallado y extenso, cuyo resultado es un documento de investigación técnica que define claramente el protocolo y las consideraciones que se tomaron en cuenta en cada decisión.

Más allá de la propaganda del sitio web, además de su pequeño tamaño (en líneas de código) y de estar implementado sobre UDP, lo más relevante de esta implementación es que corre enteramente en el kernel, evitando los cambios de contexto de las implementaciones tradicionales de VPN. WireGuard parece haber sido desarrollado inicialmente por una sola persona: Jason A. Donenfeld, y está licenciado como GPLv2. A él agradecemos, entonces, haberse tomado este tremendo trabajo.

Al dia de hoy es posible probarlo en Debian gracias al trabajo de Daniel Kahn Gillmor (dkg), quien se encargó de empaquetarlo muy responsablemente.

En principio se requiere un kernel Linux igual o mayor a 4.1, pero eso se consigue fácilmente desde backports:

echo "deb http://httpredir.debian.org/debian/ jessie-backports main" \
    > /etc/apt/sources.list.d/jessie-backports.list
apt update
apt -t jessie-backports install linux-image-amd64 linux-headers-amd64

Luego de reiniciar con el kernel nuevo, descargar e instalar los paquetes wireguard-dkms y wireguard-tools desde el repositorio experimental. Esto instalará el código fuente del módulo y la aplicación de configuración. La infraestructura de compilación dkms se encarga de compilar el código a un módulo usable.

echo "deb http://httpredir.debian.org/debian/ experimental main" \
    > /etc/apt/sources.list.d/experimental.list
apt update
apt install dkms
apt -t experimental install wireguard-dkms wireguard-tools

En caso de no disponer de una instalación de Debian a mano, hay otras opciones, como también está el último recurso de compilarlo a la vieja usanza.

Finalmente, una vez que está todo listo,

Quick Start Walkthrough

Para todo lo demás, los remito a la documentación en línea, y al paper que detalla el protocolo.

Vale decir que esto aún está en los principios de su desarrollo. No hay una versión estable y su implementación real aún no ha tenido análisis relevantes desde la comunidad de seguridad en redes, pero vale decir que suena prometedor. Desde luego, si están interesados en participar/desarrollarlo/probarlo/documentarlo, el grupo acepta nueva gente.

Actualización 08/02/2017: Jason ha publicado en el sitio web los videos y slides de sus últimas presentaciones, de las cuales recomiendo particularmente la de FOSDEM 2017: Next Generation Secure Kernel Network Tunnel como visión rápida del proyecto y actualización del estado del mismo.