Microordenadores - Retroinformática y placas modernas de desarrollo

Nueva placa Sugarless +2 para adaptar un ZX-Uno a la caja de un ZX Spectrum +2A/+2B/+3

Navega un poco más seguro usando la separación de privilegios de Unix
9 de Noviembre de 2017
Etiquetas:

Mitiga la inseguridad de los navegadores y evita el robo de credenciales aprovechando la separación de privilegios en sistemas tipo Unix para mejorar la seguridad a la hora de navegar por internet.

Esta configuración aprovecha la funcionalidad de permisos del sistema de archivos de Unix para mejorar la seguridad en la navegación, aunque no es perfecta ya que no protege contra todo tipo de ataques, por ejemplo de aquellos que usen las X para acceder a datos de la sesión.

El exploit pdf.js de Firefox, donde archivos pdf maliciosos leían ficheros del home del usuario - incluyendo claves ssh - despertó todas las alarmas sobre la forma despreocupada en que se suelen usar los navegadores web, los cuales están cada vez más cargados de funcionalidades y de complejidad, lo que implica una menor seguridad.

Aquí explico una forma de mejorar la seguridad al usar el navegador, aunque no es perfecta ya que no protege contra todo tipo de ataques, por ejemplo de aquellos que usen las X para acceder a pulsaciones de teclas o similares. Esta configuración aprovecha la funcionalidad de permisos del sistema de archivos de Unix.

La idea es de Matthew Dillon (DragonflyBSD) y está explicada en este mensaje de la lista de correo de este sistema operativo, y lo encontré gracias a la lista openbsd-misc. Salvo la parte de /etc/hosts, gran parte del texto es traducido de forma resumida y simplificada, y adaptado a OpenBSD.

Creando distintos usuarios para cada perfil de navegación

Lo que haremos será separar los usos de nuestro navegador en distintas cuentas de usuario creadas específicamente para ello, y quitamos permisos al grupo y a otros de nuestro home.

chmod 700 /home/johndoe

De esta forma nuestro directorio no será accesible a los usuarios que creemos para el navegador (pongamos como ejemplo firefox1 y firefox2). En este ejemplo vamos a usar la cuenta firefox1 para navegación general, y la cuenta firefox2 para navegación segura (acceso a cuentas bancarias, pagos, etc).

Suponemos que ya hemos generado las llaves ssh para nuestro usuario principal. Ver ssh-keygen(1) para la generación y ssh-agent(1) para no tener que introducir la contraseña cada vez que ejecutemos el navegador.

Usaremos vipw para crear dos nuevas cuentas, de UID puedes usar 30000 y 30001 por ejemplo, y de nombre firefox1 y firefox2.

ff1:*:30000:30000::0:0:Firefox 1:/home/ff1:/bin/ksh
ff2:*:30001:30001::0:0:Firefox 2:/home/ff2:/bin/ksh
mkdir /home/firefox1
mkdir /home/firefox1/.ssh
cp ~johndoe/.ssh/id_rsa.pub /home/firefox1/.ssh/authorized_keys
chown -R firefox1 /home/firefox1

Para probar ejecutamos ssh firefox1@localhost -n ls -la. Doy por hecho que tienes funcionando sshd (se recomienda desactivar la autenticación por password). Ahora creamos un script para cada instancia de Firefox/chrome. Los llamaremos firefox1.sh y firefox2.sh, y estarán en /home/johndoe/bin.

#!/bin/csh
scp ~/.Xauthority firefox1@localhost:
ssh firefox1@localhost -n "export DISPLAY=":0.0"; firefox"

De igual forma repetimos el proceso para firefox2.

A tener en cuenta

  • Esta no es una solución perfecta porque estás dando a la cuenta secundaria acceso completo a la sesión de las X, aunque es mucho más seguro que simplemente correr Firefox en la cuenta principal.
  • Estas aplicaciones serán capaces de usar la memoria compartida de las X y por tanto funcionar de forma bastante óptima (NO están usando un túnel ssh ni nos interesa esto porque es muy lento).
  • Puedes configurar el GID y permisos de grupo para acceder a archivos y directorios de estas cuentas desde tu usuario principal sin dar a las cuentas secundarias acceso a tus archivos.
  • Cuando haces esta separación, los navegadores estarán en instancias separadas. Asegúrate de configurar las preferencias de tu navegador en cada instancia.
  • No recomiendo copiar tu directorio de configuración antiguo del navegador de tu cuenta principal a las cuentas secundarias ya que esto copiará también cookies existentes y contraseñas a las que no quieres que tu cuenta separada tenga acceso.
  • Puedes hacer copy/paste sin problema.