Técnicas de encriptado

Conceptos Claves

  • Configuración básica del cliente SSH 2
  • Comprender el rol de OpenSSH
  • Configuración y uso de GnuPG
  • Comprender el función de los túneles SSH (Incluyendo túneles X11)

Términos y utilidades

  • ssh
  • ssh-keygen
  • ssh-agent
  • ssh-add
  • ~/.ssh/id_rsa
  • id_rsa.pub
  • ~/.ssh/id_dsa
  • id_dsa.pub
  • /etc/ssh/ssh_host_rsa_key
  • ssh_host_rsa_key.pub
  • /etc/ssh/ssh_host_dsa_key
  • ssh_host_dsa_key.pub
  • ~/.ssh/authorized_keys
  • /etc/ssh_known_hosts
  • gpg
  • ~/.gnupg/*

Criptografía con clave publica

Una clave es un archivo que contiene una clave utilizada para cifrar y descifrar información. Si se usa un esquema de clave publica/clave privada, hay dos tipos de claves a tener en cuenta.

clave publica: se guarda en un servidor publico y se utiliza para encriptar.

clave privada: se guarda secretamente, y es usada para decriptar cualquier mensaje encriptado con la clave publica. Las claves privadas también se usan para firmar mensajes digitalmente.

OpenSSH

OpenSSH (Open Secure Shell) es un conjunto de aplicaciones que permiten realizar comunicaciones encriptadas a través de una red, usando el protocolo SSH. Es un desarrollo de software libre realizado por el proyecto OpenBSD. La suite OpenSSH reemplaza a Telnet con el programa ssh, a rcp con scp, a ftp con sftp.

Configuración del servidor SSH

La misma se realiza editando el archivo /etc/ssh/sshd_config

Opciones

Protocol: Establece que protocolo SSH utilizar, 1 o 2. Lo ideal es soportar solo SSH 2, ya que la versión 1 ha demostrado vulnerabilidades.

PermitRootLogin: Esta opción sirve para determinar si se aceptan inicios de sesión directamente como root. El valor por defecto es yes.

X11Forwarding: Establece que los túneles para X11 están disponibles.

Claves SSH

Un proceso de autenticación basado en contraseñas puede ser vulnerable a ataques de fuerza bruta. Para mitigar esta vulnerabilidad, ssh soporta autenticación por clave publica.

~/.ssh/authorized-keys: guarda las claves publicas de las maquinas objetivo. Estas claves no son información sensitiva y pueden ser conocidas por cualquier persona, mientras que las privadas pueden ser cuidadosamente protegidas.

SSH-Agent recuerda la clave decriptada para que no sea necesario recordarla.

Parte de la seguridad de SSH involucra claves de encriptación. Cada servidor tiene una clave única para identificarse. SSH usa un sistema que involucra dos claves, una publica y una privada. Las cuales están matemáticamente vinculadas de una manera que los datos encriptados con la clave publica, solo pueden ser desencriptados con la clave privada. Cuando se establece una conexión, cada parte le envía su clave publica a la otra. Después de eso, cada parte encripta los datos con la clave publica de la otra parte. Los clientes SSH típicamente conservan las claves públicas de los servidores que han contactado. Esto los habilita a reconocer cambios, los cuales pueden ser un indicio de alguna manipulación del servidor.

La mayoría de los scripts de inicio de los servidores SSH contienen código que busca claves publicas y privadas que estén almacenadas, si no las encuentra, genera claves nuevas. En total, entre 4 y 6 claves son necesarias: claves publicas y privadas para 2 o 3 herramientas que encriptado que soporta SSH. Estas claves generalmente se almacenan dentro de /etc/ssh y se llaman ssh_host_rsa_key y ssh_host_dsa_key para las claves privadas y el mismo nombre pero con la extensión .pub para las publicas. Algunos sistemas agregan sshhost_rsa1_key y su respectiva clave publica. En el caso que no se tengan estas claves, se pueden generar con el comando _ssh-keygen.

ssh-keygen -q -t rsa1 -f /etc/ssh/ssh_host_rsa1_key -C '' -N ''

ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -C '' N ''

ssh-keygen -q -t dsa -f /etc/ssh/ssh_host_dsa_key -C '' N ''

Cuando se configura un sistema cliente, es una buena idea crear un cache global de claves. Si bien cada usuario guarda las claves conocidas dentro ~/.ssh/known_hosts, es bueno mantener el cache global. Para eso hay que popular el archivo ssh_known_hosts que suele guardarse dentro de /etc o de /etc/ssh/

Ejercicio

  1. Iniciar sesión en la maquina cliente
  2. Ejecutar el siguiente comando para generar una nueva clave SSH:

ssh-keygen -q -t rsa -f ~/.ssh/id_rsa -C '' -N ''

  1. El paso anterior genera 2 archivos, id_rsa y id_rsa.pub. Hay que transferir el segundo al servidor SSH, copiar el archivo bajo un nombre temporal, como temp.rsa.
  2. Iniciar sesión en el servidor SSH
  3. Agregar el contenido del archivo que acabamos de transferir al final del archivo ~/.ssh/authorized_keys o ~/.ssh/authorized_keys2 .

Agente SSH (ssh_agent)

El agente SSH nos permite gestionar nuestras conexiones SSH de una manera mas eficiente. Este recuerda, mientras dure la sesión, todas las claves privadas del usuario, por lo que solo deberemos ingresar la contraseña una vez.

Túneles SSH

Los túneles SSH permiten que protocolos de red que no soportan encriptación, se monten encima de una conexión SSH para encriptar sus datos.

GPG

GPG nos permite encriptar correos electrónicos. GPG GnuPG es una implementación de código abierto del software propietario PGP (Pretty Good Privacy).

GnuPG no solo permite encriptar mensajes, sino que también permite firmar digitalmente estos mensajes.

Para generar claves, hay que ejecutar el comando

gpg --gen-key

gpg --export [email protected] > gpg.pub

GPG Keyring

El repositorio de claves publicas de llama keyring y almacena todas las claves privadas y publicas que tengamos. Para agregar una clave publica usamos el siguiente comando:

gpg --import archivo.asc

Para ver las claves que tenemos en el keyring, podemos usar el comando:

gpg --list-keys

results matching ""

    No results matching ""