Consideraciones sobre la Seguridad del Uso de Agentes

El uso de agentes previene que la passphrase o la clave tengan que viajar por la red y nos proteje contra el róbo de la clave.

Sin embargo, existe la posibilidad de que alguien tenga acceso al socket usado por el agente. Cualquiera que pueda leer/escribir en ese socket tiene la posibilidad de suplantarnos. En particular el administrador de un sistema tiene siempre esa posibilidad.

Supongamos que el usuario casiano tiene acceso a dos máquinas: orion y beowulf a las que accede desde europa. Supongamos que el administrador de orion es malicioso e intenta obtener acceso a las máquinas de sus usuarios. Supongamos que tanto europa como beowulf son máquinas fiables. Asumimos también que la máquina beowulf contiene información importante y es un servidor que el usuario casiano tiene en su casa.

La sesión que sigue muestra como el malvado administrador de orion puede secuestrar al agente utilizado por casiano para obtener acceso a beowulf:

  1. Supongamos que cierto usuario casiano abre una conexión SSH con orion desde la máquina europa, utilizando agent forwarding

    casiano@europa:~$ ps -fA | grep ssh-agent
    casiano   7618     1  0 Apr28 ?        00:00:00 /usr/bin/ssh-agent -s
    casiano  16288 16223  0 Apr29 ?        00:00:00 /usr/bin/ssh-agent x-session-manager
    casiano  16970 13271  0 17:25 pts/31   00:00:00 grep ssh-agent
    pp2      28048     1  0 May02 ?        00:00:00 ssh-agent
    casiano@europa:~$ ssh-add -l
    1024 49:Xc:eX:bX:Xa:ea:eX:XX:fc:aX:eX:Xb:XX:cX:da:XX /home/casiano/.ssh/id_dsa (DSA)
    1024 56:XX:XX:dX:XX:eX:ca:XX:Xd:Xf:Xb:XX:Xd:fX:Xc:XX /home/casiano/.ssh/orionbackupidentity (DSA)
    casiano@europa:~$ ssh -A orion
    Linux orion 2.6.8-2-686 #1 Tue Aug 16 13:22:48 UTC 2005 i686 GNU/Linux
    
    Posteriormente el usuario se conecta a una tercera máquina beowulf desde su sesión en orion:
    casiano@orion:~$                                                   
    casiano@orion:~$ ssh beowulf
    Linux beowulf 2.6.15-1-686-smp #2 SMP Mon Mar 6 15:34:50 UTC 2006 i686
    
    The programs included with the Debian GNU/Linux system are free software;
    the exact distribution terms for each program are described in the
    individual files in /usr/share/doc/*/copyright.
    
    Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
    permitted by applicable law.
    No mail.
    Last login: Mon May  4 17:44:35 2009 from orion.pcg.ull.es
    casiano@beowulf:~$
    
  2. En otra sesión en orion el malvado administrador busca por sockets de agentes en /tmp:
    root@orion:~# ls -ltr /tmp/ssh*
    total 0
    srwxr-xr-x 1 casiano casiano 0 2009-05-04 17:35 agent.7932
    root@orion:~# ls -ldtr /tmp/ssh*
    drwx------ 2 casiano casiano 4096 2009-05-04 17:35 /tmp/ssh-jrQQgf7932
    
    El root puede ver que el usuario casiano tiene un agente arrancado.

    En el caso del agente, la opción -a de ssh-agent permite definir un lugar alternativo para el socket Unix a usar:

    lusasoft@LusaSoft:~$ eval `ssh-agent -a myagentsocket`
    Agent pid 6475
    lusasoft@LusaSoft:~$ ls -ltrd my*
    srw------- 1 lusasoft lusasoft 0 2009-05-02 08:56 myagentsocket
    
    esta opción sin embargo no afecta al socket creado por el daemon en orion

  3. El malvado administrador vigila lo que hace el usuario casiano:

    root@orion:~# ps -fu casiano
    UID        PID  PPID  C STIME TTY          TIME CMD
    casiano   7682  7680  0 17:16 ?        00:00:00 sshd: casiano@pts/1
    casiano   7683  7682  0 17:16 pts/1    00:00:00 -bash
    casiano   7932  7930  0 17:35 ?        00:00:00 sshd: casiano@pts/0
    casiano   7933  7932  0 17:35 pts/0    00:00:00 -bash
    casiano   7939  7933  0 17:35 pts/0    00:00:00 ssh beowulf
    
    Ummmmhhh... tiene una conexión ssh a una máquina llamada beowulf? demasiado breve para ser el nombre real de una máquina. Debe estar definida en su fichero de configuración.
  4. Bueno, el root decide usar el socket de casiano:
    root@orion:~# export SSH_AUTH_SOCK=/tmp/ssh-jrQQgf7932/agent.7932
    
  5. El administrador malvado ya puede conectarse. Usará el fichero de configuración de casiano (opción -F) para que la conexión ocurra según la configuración de ese usuario (por supuesto, antes comprueba que existe tal configuración):

    root@orion:~# ssh -F ~casiano/.ssh/config casiano@beowulf
    casiano@beowulf:~$
    

    El administrador de orion ha conseguido acceso a una máquina en la que no tenía cuenta. Ahora podría proceder a instalar una autentificación automática en la cuenta de caiano en beowulf, de modo que le permita posteriores visitas.

Casiano Rodriguez León 2015-01-07