Seguridad

Anuncio
Seguridad
Diseño y Administración de Sistemas y Redes
http://gsyc.es/docencia
Curso 2007–2008
1
Problemas
Privacidad o secreto. Mantener la información fuera de las manos de
usuarios no autorizados
Autenticación. Determinar de la identidad del interlocutor
No repudio. Poder demostrar quien es el autor de un mensaje
Control de integridad. Garantizar que un mensaje no ha sido modificado.
c
2008
GSyC
2
Soluciones
Nivel fı́sico: Proteger el cable de escuchas
Nivel de enlace: Cifrar al enviar y descifrar al recibir
Nivel de red: IPsec, cifrado en IPv6. Cortafuegos
Nivel de transporte: Cifrado de conexiones. SSL
c
2008
GSyC
3
Principios criptográficos
Criptologı́a = criptografı́a (inventar códigos) + criptoanálisis (atacarlos)
Principio de Kerckhoff: Los algoritmos deben ser públicos; sólo las
claves son secretas
Los mensajes cifrados deben incluir redundancia. Esto evita que una
modificación de los mismos resulte en otro mensaje válido.
El necesario controlar la frescura de los mensajes recibidos, para evitar
ataques con mensajes antiguos.
c
2008
GSyC
4
Criptografı́a de Clave Secreta
La misma clave que cifra, descifra
Muchos algoritmos: DES (obsoleto), triple DES, AES (o Rijndael.
Oficial gobierno EEUU desde 2001), twofish, etc etc
Problemas
• Haces falta muchas claves: una por cada pareja de posibles comunicantes
• ¿Cómo transmitir las claves de forma segura?
c
2008
GSyC
Criptografı́a de clave pública
5
Criptografı́a de clave pública
Año 1976, Diffie y Hellman.
Clave de cifrado o pública E y de descifrado o privada D distintas
(asimétricas)
D(E(P )) = P
Muy dificil romper el sistema (p.e. obtener D) teniendo E.
La clave privada sirve para descifrar. Debe mantenerse en secreto
La clave pública sirve para cifrar. Puede conocerla todo el mundo (lo
importante es que se conozca la clave correcta)
Conociendo la clave pública de alguien, podemos cifrar un mensaje
que solo él, con su clave privada, podrá descifrar
c
2008
GSyC
Seguridad
Criptografı́a de clave pública (cont.)
6
RSA
De Rivest, Shamir y Adleman.
Los algoritmos de clave pública son mucho más lentos que los de
clave secreta (100 a 1000 veces). Por eso se suelen usar sólo para el
intercambio de claves simétricas de sesión.
c
2008
GSyC
Seguridad
Criptografı́a de clave pública (cont.)
7
Autenticación con clave pública
1,2: A obtiene la clave pública de B
3:
A envı́a su remite y un reto cifrados
con la clave de B
4,5: B obtiene la clave pública de A
6:
B cifra, con la clave de A: el reto
de A, un reto nuevo y una clave
simétrica
7:
A envı́a el reto de B con la clave
simétrica, que se empleará en la
sesión
c
2008
GSyC
Seguridad
Criptografı́a de clave pública (cont.)
8
Firmas digitales
Algoritmos como RSA tienen la propiedad de que también puede usarse la clave privada para cifrar y la pública para descifrar E(D(P )) = P
A partir de un mensaje, se genera un código hash
El código se encripta con la clave privada y se transmite junto con el
mensaje
El receptor
• Descifra el mensaje con la clave pública del emisor
• Genera de nuevo el código hash
• Si el código hash de la firma y del mensaje coinciden, el mensaje
solo puedo enviarlo el origen
c
2008
GSyC
Seguridad
Criptografı́a de clave pública (cont.)
c
2008
GSyC
9
Seguridad
open ssh
10
open ssh
PGP: Pretty Good Privacy. Software criptográfico creado por Phil
Zimmermann. Base de la norma Open PGP.
GPG: GNU Privacy Guard. Herramienta para cifrado y firmas digitales,
que reemplaza a PGP
Desde Debian Woody (2002) se usa OpenSSH v2
Se puede emplear el algoritmo RSA o DSA Digital Signature Algorithm, año 1991
c
2008
GSyC
Seguridad
open ssh (cont.)
11
Además de para abrir una sesión en una máquina remota, ssh permite la
ejecución de una única orden en la máquina remota
ssh jperez@pantuflo ls
Ejecuta ls en la máquina remota. Muestra en la máquina local el
stdout.
ssh jperez@pantuflo ’echo hola > /tmp/prueba’
Ejecuta en pantuflo
echo hola > /tmp/prueba
c
2008
GSyC
Seguridad
open ssh (cont.)
12
ssh jperez@pantuflo "echo $HOSTNAME > /tmp/prueba"
Al poner comilla doble, la variable se expande en la máquina local
ssh jperez@pantuflo echo $HOSTNAME > /tmp/prueba
Al no poner comilla, la variable se expande en la máquina local. El
resultado se redirige al fichero /tmp/prueba de la máquina local
ssh jperez@pantuflo ’echo $HOSTNAME > /tmp/prueba’
Al poner comilla simple y recta, la variable se expande en la máquina
remota
c
2008
GSyC
Seguridad
open ssh (cont.)
13
Para evitar teclear contraseña en cada ssh, scp, sshfs, etc, podemos autentificarnos con criptografı́a asimétrica
Generación de claves
Se generan con ssh-keygen
Se puede añadir una pass phrase. Es una contraseña adicional, tradicional. Equivalente a la llave del armario de las llaves
c
2008
GSyC
Seguridad
open ssh (cont.)
14
Un usuario genera sus claves ejecutando en su home la orden ssh-keygen
rsa:
generar las claves:
ssh-keygen -t rsa
fichero clave privada:
id_rsa
fichero clave pública:
id_rsa.pub
dsa:
generar las claves:
ssh-keygen -t dsa
fichero clave privada:
id_dsa
fichero clave publica:
id_dsa.pub
c
2008
GSyC
Seguridad
open ssh (cont.)
15
Para poder entrar en máquina remota sin emplear contraseña, añado mi
clave pública al fichero $HOME/.ssh/authorized_keys de la máquina
remota (o lo creo si no existe)
Es necesario que el directorio ~/.ssh (local y remoto):
Tenga el dueño y el grupo del usuario
Tenga permisos 700
Contenga todos sus ficheros con permisos 600
Es necesario que en mi home solo yo pueda escribir
c
2008
GSyC
Seguridad
open ssh (cont.)
16
ssh-agent
La manera habitual de autentificarse es mediante el demonio ssh-agent
ssh-agent contestará por nosotros, gestionando retos y repuestas cifrados
ssh-agent tiene que ser el padre de nuestra shell, o nuestra sesión x
• Las distribuciones Linux con X Windows suelen tenerlo instalado
• Si no está funcinando (como en ubuntu server)
exec ssh-agent /bin/bash
Esto hace que nuestra shell actual sea reemplazada por ssh-agent,
quien a su vez creará una shell hija suya
c
2008
GSyC
Seguridad
open ssh (cont.)
ssh-add
17
añade una identidad a ssh-agent
ssh-add -l indica las identidades manejadas por el ssh-agent
En ocasiones, por ejemplo si no empleamos pass phrase, el ssh-agent no
es necesario
Depuración
En el cliente ssh -v
o
ssh -vv
o -vvv
en el servidor, consultar /var/log/auth.log
c
2008
GSyC
Seguridad
iptables
18
iptables
El nucleo de linux puede trabajar como un cortafuegos: manipula los
datagramas (paquetes de red), para permitir algunos y descartar otros
En rigor el nombre de la herramienta es Netfilter, aunque habitualmente se le llama iptables (que es la parte de Netfilter que ofrece el
interfaz con el usuario)
Para manejar los datagramas se usan reglas:
IF condición
THEN acción
Las reglas se agrupan en cadenas: una regla tras otra
c
2008
GSyC
Seguridad
iptables (cont.)
19
Hay tres cadenas principales:
INPUT la recorren los paquetes que entran en la máquina con destino
a la propia máquina
OUTPUT la recorren los que salen (procedentes de la propia máquina)
FORWARD la recorren los que atraviesan la máquina
El administrador puede añadir subcadenas a cualquier cadena. P.e.
MI CADENA.
Desde las cadenas principales se llama a las subcadenas
c
2008
GSyC
Seguridad
iptables (cont.)
20
SI un paquete cumple cierta condición
ENTONCES hacer algo con el paquete:
- DROP. descartarlo allı́ mismo
- ACCEPT. permitirle que siga
- Enviarla a otra cadena (subcadena)
- ...
Si el paquete no cumple la condición, sigue avanzando por la cadena
Una vez recorrida una subcadena, el flujo vuelve a la cadena principal
desde donde fue llamada
Una vez recorrida una cadena principal, se aplica la polı́tica por defecto
de esa cadena: ACCEPT o DROP
c
2008
GSyC
Seguridad
iptables (cont.)
21
Camino de un datagrama por el núcleo
Soy una máquina con Linux. El tratamiendo de un datagrama depende de
si soy un router o no
¿Cómo se que si soy un router?
Consultando el valor de /proc/sys/net/ipv4/ip_forward
¿Cómo hacer que me convierta en router?
echo 1 > /proc/sys/net/ipv4/ip_forward
Esto no es persistente, suele incluirse en un script de arranque
Previamente debe haber tablas de encaminamiento, creadas a mano o
mediante algoritmos de encaminamiento
Decidir el encaminamiento: consultar mi tabla de encaminamiento y
averiguar por cuál de mis interfaces debo enviar el datagrama
Encaminar: enviar el datagrama por el interfaz adecuado
c
2008
GSyC
Seguridad
iptables (cont.)
22
Soy una máquina conectada a la red. No tengo iptables
Recibo un datagrama
Si es para mı́, me lo quedo
Si no es para mı́
- Si soy un router, decido su encaminamiento y lo encamino
- Si no soy un router, tiro el paquete
Envı́o un datagrama
- Decido su encaminamiento y lo encamino
c
2008
GSyC
Seguridad
iptables (cont.)
c
2008
GSyC
23
Seguridad
iptables (cont.)
24
Soy una máquina conectada a la red, tengo iptables
Recibo un datagrama
Si es para mı́,
- Lo envio a la cadena INPUT. Si la supera, me lo quedo
Si no es para mı́
- Si soy un router, decido su encaminamiento, lo paso por la
cadena FORWARD, y si la supera, lo encamino
- Si no soy un router lo tiro
Envı́o un datagrama
- Decido su encaminamiento, lo paso en la cadena OUTPUT
y si la supera, lo encamino
c
2008
GSyC
Seguridad
iptables (cont.)
c
2008
GSyC
25
Seguridad
uso de iptables
26
uso de iptables
La manipulación de reglas se hace mediante opciones de la orden
iptables
Las reglas se borran al reiniciar la máquina. Ası́ que hay que cargarlas
en un script en el arranque. Es conveniente activarlo antes de activar
los interfaces de red
La mayorı́a de las opciones pueden especificarse de dos formas alternativas, equivalentes
1. Con un guión y letra de opción
2. Con dos guiones y el nombre de la opción
iptables -A INPUT -p tcp -s 193.186.21.6 -j DROP
iptables --append INPUT --protocol tcp --source 193.186.21.6 -jump DROP
c
2008
GSyC
Seguridad
uso de iptables (cont.)
27
Ver las reglas
-L
--list
Listar las reglas de una(s) cadena(s)
-n
--numeric
Mostrar las direcciones como números, sin intentar traducirlas en nombres
iptables -nL FORWARD
Listar la cadena FORWARD
iptables -nL
Listar todas las cadenas
c
2008
GSyC
Seguridad
uso de iptables (cont.)
28
Poner y quitar reglas
-A
--append
Añadir una regla a una cadena
-F
--flush
Borrar todas las reglas
iptables --flush INPUT
Borra las reglas de la cadena input
iptables --flush
Borra las reglas de todas las cadenas
Hay opciones para borrar reglas sueltas y para reordenar las reglas
Pero ya que hay que cargar las reglas mediante un script, suele ser más
práctico que el script borre todo y luego inserte las reglas adecuadas
en el orden adecuado
c
2008
GSyC
Seguridad
uso de iptables (cont.)
29
Especificar paquetes
-s
--source
Dirección IP origen
-d
--destination
Dirección IP destino
-i
--in-interface
Interfaz de entrada
-o
--out-interface
Interfaz de salida
!
negación
-s 193.147.71.1
Paquete proveniente de 193.147.71.1
-d ! localhost
Paquete no destinado a localhost
-i lo
Paquete que entra por el interfaz lo
-o ! eth0
Paquete que no sale por eth0
c
2008
GSyC
Seguridad
uso de iptables (cont.)
-p
--protocol
--sport --source-port
30
Protocolo del paquete
Puerto de origen
--dport --detination-port Puerto de destino
No basta decir el puerto 80. ¿El puerto 80 TCP? ¿El puerto 80 UDP?
La opción --protocol debe preceder a --dport/--sport
-p tcp
Paquete de protocolo TCP
--dport 80
Paquete destinado al puerto 80
--sport 1:1023
Paquete con origen en los puertos del 1 al 1023
--dport 1024:
Paquete con destino al puerto 1024 o superior
--sport :3000
Paquete con origen en el puerto 3000 o inferior
El fichero /etc/services describe los well-known port numbers
c
2008
GSyC
Seguridad
uso de iptables (cont.)
31
Destino de un paquete
-j --jump
-j
-j
-j
-j
DROP
REJECT
ACCEPT
RETURN
-j MI_CADENA
c
2008
GSyC
Enviar el paquete a DROP (descartarlo, sin más)
Rechazar el paquete y enviar un error al origen
Aceptar el paquete. No se evalúan más reglas
El paquete abandona la cadena actual
-Si está en una subcadena, vuelve a la cadena principal
-Si está en la cadena principal se le aplica la polı́tica
por defecto
Enviar el paquete a MI_CADENA
Seguridad
uso de iptables (cont.)
32
Polı́tica por defecto
Por una cadena pasan muchos datagramas
Los que encajan en una regla de destino DROP o REJECT, serán
eliminados
Los que encajan en una regla ACCEPT, superarán la cadena
¿Y los que no sea explı́citamente aceptados ni explı́citamente rechazados?
Se hará con ellos lo que indique la polı́tica por defecto
Las subcadenas no tienen polı́tica por defecto
-P
--policy
Fija la polı́tica por defecto de la cadena
iptables --policy INPUT DROP
iptables --policy FORWARD ACCEPT
c
2008
GSyC
Seguridad
uso de iptables (cont.)
33
Añadir subcadenas
-N --new-chain
Crea una nueva cadena
iptables --new_chain MI_CADENA
Enlaces
Para más información, googlear :
badopi. Aprendiando a usar iptables
Pello Altadill. iptables manual práctico
linux 2.4 filtrado de paquetes COMO
c
2008
GSyC
Seguridad
uso de iptables (cont.)
34
Ejemplos
iptables --flush
iptables --append INPUT --protocol icmp --source 127.0.0.1 --jump DROP
root@mazinger:~# iptables -nL
Chain INPUT (policy ACCEPT)
target
prot opt source
DROP
icmp -- 127.0.0.1
destination
0.0.0.0/0
Chain FORWARD (policy ACCEPT)
target
prot opt source
destination
Chain OUTPUT (policy ACCEPT)
target
prot opt source
destination
c
2008
GSyC
Seguridad
uso de iptables (cont.)
35
iptables --append INPUT --protocol icmp --source 192.168.1.15 \
--jump DROP
iptables --append INPUT --protocl tcp --source 192.168.1.15
--dport 21 -jump DROP
\
iptables --append INPUT --in-interface lo --source 127.0.0.1 \
--jump ACCEPT
c
2008
GSyC
Seguridad
Descargar